2 Commits

Author SHA1 Message Date
  Christian Matos cccd58eada cambios a home 3 years ago
  Christian Matos 8e865ddcf0 cambios en home 3 years ago
100 changed files with 24710 additions and 0 deletions
  1. BIN
      .DS_Store
  2. 6
    0
      config.xml
  3. 20
    0
      node_modules/immediate/LICENSE.txt
  4. 93
    0
      node_modules/immediate/README.md
  5. 75
    0
      node_modules/immediate/dist/immediate.js
  6. 1
    0
      node_modules/immediate/dist/immediate.min.js
  7. 69
    0
      node_modules/immediate/lib/browser.js
  8. 73
    0
      node_modules/immediate/lib/index.js
  9. 83
    0
      node_modules/immediate/package.json
  10. 64
    0
      node_modules/lie/README.md
  11. 330
    0
      node_modules/lie/dist/lie.js
  12. 1
    0
      node_modules/lie/dist/lie.min.js
  13. 338
    0
      node_modules/lie/dist/lie.polyfill.js
  14. 1
    0
      node_modules/lie/dist/lie.polyfill.min.js
  15. 253
    0
      node_modules/lie/lib/browser.js
  16. 278
    0
      node_modules/lie/lib/index.js
  17. 7
    0
      node_modules/lie/license.md
  18. 92
    0
      node_modules/lie/package.json
  19. 4
    0
      node_modules/lie/polyfill.js
  20. 5
    0
      node_modules/localforage/.huskyrc
  21. 6
    0
      node_modules/localforage/.lintstagedrc
  22. 0
    0
      node_modules/localforage/.tscache/typing_tests/timestamp
  23. 157
    0
      node_modules/localforage/CHANGELOG.md
  24. 59
    0
      node_modules/localforage/CONTRIBUTING.md
  25. 201
    0
      node_modules/localforage/LICENSE
  26. 258
    0
      node_modules/localforage/README.md
  27. 27
    0
      node_modules/localforage/bower.json
  28. 23
    0
      node_modules/localforage/bower_components/assert/.bower.json
  29. 50
    0
      node_modules/localforage/bower_components/assert/HISTORY.md
  30. 40
    0
      node_modules/localforage/bower_components/assert/README.md
  31. 436
    0
      node_modules/localforage/bower_components/assert/assert.js
  32. 14
    0
      node_modules/localforage/bower_components/assert/bower.json
  33. 12
    0
      node_modules/localforage/bower_components/assert/package.json
  34. 15
    0
      node_modules/localforage/bower_components/es6-promise/.bower.json
  35. 5
    0
      node_modules/localforage/bower_components/es6-promise/bower.json
  36. 684
    0
      node_modules/localforage/bower_components/es6-promise/promise.js
  37. 1
    0
      node_modules/localforage/bower_components/es6-promise/promise.min.js
  38. 14
    0
      node_modules/localforage/bower_components/expect/.bower.json
  39. 54
    0
      node_modules/localforage/bower_components/expect/History.md
  40. 263
    0
      node_modules/localforage/bower_components/expect/README.md
  41. 1284
    0
      node_modules/localforage/bower_components/expect/index.js
  42. 13
    0
      node_modules/localforage/bower_components/expect/package.json
  43. 48
    0
      node_modules/localforage/bower_components/mocha/.bower.json
  44. 1635
    0
      node_modules/localforage/bower_components/mocha/CHANGELOG.md
  45. 84
    0
      node_modules/localforage/bower_components/mocha/CONTRIBUTING.md
  46. 22
    0
      node_modules/localforage/bower_components/mocha/LICENSE
  47. 123
    0
      node_modules/localforage/bower_components/mocha/README.md
  48. 38
    0
      node_modules/localforage/bower_components/mocha/bower.json
  49. 326
    0
      node_modules/localforage/bower_components/mocha/mocha.css
  50. 16205
    0
      node_modules/localforage/bower_components/mocha/mocha.js
  51. 14
    0
      node_modules/localforage/bower_components/modernizr/.bower.json
  52. 10
    0
      node_modules/localforage/bower_components/modernizr/.editorconfig
  53. 8
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/a-download.js
  54. 4
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/audio-audiodata-api.js
  55. 4
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/audio-webaudio-api.js
  56. 8
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/battery-api.js
  57. 11
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/battery-level.js
  58. 10
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/blob-constructor.js
  59. 28
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/canvas-todataurl-type.js
  60. 9
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/contenteditable.js
  61. 10
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/contentsecuritypolicy.js
  62. 11
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/contextmenu.js
  63. 15
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/cookies.js
  64. 3
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/cors.js
  65. 19
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-backgroundposition-shorthand.js
  66. 15
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-backgroundposition-xy.js
  67. 31
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-backgroundrepeat.js
  68. 10
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-backgroundsizecover.js
  69. 9
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-boxsizing.js
  70. 12
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-calc.js
  71. 8
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-cubicbezierrange.js
  72. 18
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-displayrunin.js
  73. 27
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-displaytable.js
  74. 7
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-filters.js
  75. 205
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-hyphens.js
  76. 11
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-lastchild.js
  77. 12
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-mask.js
  78. 3
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-mediaqueries.js
  79. 6
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-objectfit.js
  80. 9
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-overflow-scrolling.js
  81. 25
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-pointerevents.js
  82. 13
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-positionsticky.js
  83. 55
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-regions.js
  84. 19
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-remunit.js
  85. 8
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-resize.js
  86. 19
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-scrollbars.js
  87. 4
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-shapes.js
  88. 23
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-subpixelfont.js
  89. 6
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-supports.js
  90. 10
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-userselect.js
  91. 14
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-vhunit.js
  92. 14
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-vmaxunit.js
  93. 14
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-vminunit.js
  94. 14
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/css-vwunit.js
  95. 10
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/custom-protocol-handler.js
  96. 6
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/dart.js
  97. 4
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/dataview-api.js
  98. 4
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/dom-classlist.js
  99. 11
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/dom-createElement-attrs.js
  100. 0
    0
      node_modules/localforage/bower_components/modernizr/feature-detects/dom-dataset.js

BIN
.DS_Store View File


+ 6
- 0
config.xml View File

@@ -8,7 +8,9 @@
8 8
         Apache Cordova Team
9 9
     </author>
10 10
     <content src="index.html" />
11
+    <plugin name="cordova-plugin-whitelist" spec="1" />
11 12
     <access origin="*" />
13
+    <allow-navigation href="*"/>
12 14
     <allow-intent href="http://*/*" />
13 15
     <allow-intent href="https://*/*" />
14 16
     <allow-intent href="tel:*" />
@@ -20,4 +22,8 @@
20 22
         <allow-intent href="market:*" />
21 23
     </platform>
22 24
 
25
+    <feature name="NativeStorage">
26
+        <param name="ios-package" value="NativeStorage"/>
27
+    </feature>
28
+
23 29
 </widget>

+ 20
- 0
node_modules/immediate/LICENSE.txt View File

@@ -0,0 +1,20 @@
1
+Copyright (c) 2012 Barnesandnoble.com, llc, Donavon West, Domenic Denicola, Brian Cavalier
2
+
3
+Permission is hereby granted, free of charge, to any person obtaining
4
+a copy of this software and associated documentation files (the
5
+"Software"), to deal in the Software without restriction, including
6
+without limitation the rights to use, copy, modify, merge, publish,
7
+distribute, sublicense, and/or sell copies of the Software, and to
8
+permit persons to whom the Software is furnished to do so, subject to
9
+the following conditions:
10
+
11
+The above copyright notice and this permission notice shall be
12
+included in all copies or substantial portions of the Software.
13
+
14
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 93
- 0
node_modules/immediate/README.md View File

@@ -0,0 +1,93 @@
1
+# immediate [![Build Status](https://travis-ci.org/calvinmetcalf/immediate.svg?branch=master)](https://travis-ci.org/calvinmetcalf/immediate)
2
+
3
+```
4
+npm install immediate --save
5
+```
6
+
7
+then
8
+
9
+```js
10
+var immediate = require("immediate");
11
+
12
+immediate(function () {
13
+  // this will run soon
14
+});
15
+
16
+immediate(function (arg1, arg2) {
17
+  // get your args like in iojs
18
+}, thing1, thing2);
19
+```
20
+
21
+## Introduction
22
+
23
+**immediate** is a microtask library, decended from [NobleJS's setImmediate](https://github.com/NobleJS/setImmediate), but including ideas from [Cujo's When](https://github.com/cujojs/when) and [RSVP][RSVP].
24
+
25
+immediate takes the tricks from setImmedate and RSVP and combines them with the schedualer inspired (vaugly) by whens.
26
+
27
+Note versions 2.6.5 and earlier were strictly speaking a 'macrotask' library not a microtask one, [see this for the difference](https://github.com/YuzuJS/setImmediate#macrotasks-and-microtasks), if you need a macrotask library, [I got you covered](https://github.com/calvinmetcalf/macrotask).
28
+
29
+Several new features were added in versions 3.1.0 and 3.2.0 to maintain parity with
30
+process.nextTick, but the 3.0.x series is still being kept up to date if you just need
31
+the small barebones version.
32
+
33
+
34
+## The Tricks
35
+
36
+### `process.nextTick`
37
+
38
+Note that we check for *actual* Node.js environments, not emulated ones like those produced by browserify or similar.
39
+
40
+### `MutationObserver`
41
+
42
+This is what [RSVP][RSVP] uses, it's very fast, details on [MDN](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver).
43
+
44
+
45
+### `MessageChannel`
46
+
47
+Unfortunately, `postMessage` has completely different semantics inside web workers, and so cannot be used there. So we
48
+turn to [`MessageChannel`][MessageChannel], which has worse browser support, but does work inside a web worker.
49
+
50
+### `<script> onreadystatechange`
51
+
52
+For our last trick, we pull something out to make things fast in Internet Explorer versions 6 through 8: namely,
53
+creating a `<script>` element and firing our calls in its `onreadystatechange` event. This does execute in a future
54
+turn of the event loop, and is also faster than `setTimeout(…, 0)`, so hey, why not?
55
+
56
+## Tricks we don't use
57
+
58
+### `setImmediate`
59
+We avoid this process.nextTick in node is better suited to our needs and in Internet Explorer 10 there is a broken version of setImmediate we avoid using this.
60
+
61
+
62
+In Node.js, do
63
+
64
+```
65
+npm install immediate
66
+```
67
+
68
+then
69
+
70
+```js
71
+var immediate = require("immediate");
72
+```
73
+
74
+
75
+## Reference and Reading
76
+
77
+ * [Efficient Script Yielding W3C Editor's Draft][spec]
78
+ * [W3C mailing list post introducing the specification][list-post]
79
+ * [IE Test Drive demo][ie-demo]
80
+ * [Introductory blog post by Nicholas C. Zakas][ncz]
81
+ * I wrote a couple blog pots on this, [part 1][my-blog-1] and [part 2][my-blog-2]
82
+
83
+[RSVP]: https://github.com/tildeio/rsvp.js
84
+[spec]: https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/setImmediate/Overview.html
85
+[list-post]: http://lists.w3.org/Archives/Public/public-web-perf/2011Jun/0100.html
86
+[ie-demo]: http://ie.microsoft.com/testdrive/Performance/setImmediateSorting/Default.html
87
+[ncz]: http://www.nczonline.net/blog/2011/09/19/script-yielding-with-setimmediate/
88
+[nextTick]: http://nodejs.org/docs/v0.8.16/api/process.html#process_process_nexttick_callback
89
+[postMessage]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#posting-messages
90
+[MessageChannel]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#channel-messaging
91
+[cross-browser-demo]: http://calvinmetcalf.github.io/setImmediate-shim-demo
92
+[my-blog-1]:http://calvinmetcalf.com/post/61672207151/setimmediate-etc
93
+[my-blog-2]:http://calvinmetcalf.com/post/61761231881/javascript-schedulers

+ 75
- 0
node_modules/immediate/dist/immediate.js View File

@@ -0,0 +1,75 @@
1
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.immediate = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
2
+(function (global){
3
+'use strict';
4
+var Mutation = global.MutationObserver || global.WebKitMutationObserver;
5
+
6
+var scheduleDrain;
7
+
8
+{
9
+  if (Mutation) {
10
+    var called = 0;
11
+    var observer = new Mutation(nextTick);
12
+    var element = global.document.createTextNode('');
13
+    observer.observe(element, {
14
+      characterData: true
15
+    });
16
+    scheduleDrain = function () {
17
+      element.data = (called = ++called % 2);
18
+    };
19
+  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
20
+    var channel = new global.MessageChannel();
21
+    channel.port1.onmessage = nextTick;
22
+    scheduleDrain = function () {
23
+      channel.port2.postMessage(0);
24
+    };
25
+  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
26
+    scheduleDrain = function () {
27
+
28
+      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
29
+      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
30
+      var scriptEl = global.document.createElement('script');
31
+      scriptEl.onreadystatechange = function () {
32
+        nextTick();
33
+
34
+        scriptEl.onreadystatechange = null;
35
+        scriptEl.parentNode.removeChild(scriptEl);
36
+        scriptEl = null;
37
+      };
38
+      global.document.documentElement.appendChild(scriptEl);
39
+    };
40
+  } else {
41
+    scheduleDrain = function () {
42
+      setTimeout(nextTick, 0);
43
+    };
44
+  }
45
+}
46
+
47
+var draining;
48
+var queue = [];
49
+//named nextTick for less confusing stack traces
50
+function nextTick() {
51
+  draining = true;
52
+  var i, oldQueue;
53
+  var len = queue.length;
54
+  while (len) {
55
+    oldQueue = queue;
56
+    queue = [];
57
+    i = -1;
58
+    while (++i < len) {
59
+      oldQueue[i]();
60
+    }
61
+    len = queue.length;
62
+  }
63
+  draining = false;
64
+}
65
+
66
+module.exports = immediate;
67
+function immediate(task) {
68
+  if (queue.push(task) === 1 && !draining) {
69
+    scheduleDrain();
70
+  }
71
+}
72
+
73
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
74
+},{}]},{},[1])(1)
75
+});

+ 1
- 0
node_modules/immediate/dist/immediate.min.js View File

@@ -0,0 +1 @@
1
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.immediate=e()}}(function(){return function e(n,t,o){function r(f,u){if(!t[f]){if(!n[f]){var a="function"==typeof require&&require;if(!u&&a)return a(f,!0);if(i)return i(f,!0);var d=new Error("Cannot find module '"+f+"'");throw d.code="MODULE_NOT_FOUND",d}var s=t[f]={exports:{}};n[f][0].call(s.exports,function(e){var t=n[f][1][e];return r(t?t:e)},s,s.exports,e,n,t,o)}return t[f].exports}for(var i="function"==typeof require&&require,f=0;f<o.length;f++)r(o[f]);return r}({1:[function(e,n,t){(function(e){"use strict";function t(){s=!0;for(var e,n,t=c.length;t;){for(n=c,c=[],e=-1;++e<t;)n[e]();t=c.length}s=!1}function o(e){1!==c.push(e)||s||r()}var r,i=e.MutationObserver||e.WebKitMutationObserver;if(i){var f=0,u=new i(t),a=e.document.createTextNode("");u.observe(a,{characterData:!0}),r=function(){a.data=f=++f%2}}else if(e.setImmediate||"undefined"==typeof e.MessageChannel)r="document"in e&&"onreadystatechange"in e.document.createElement("script")?function(){var n=e.document.createElement("script");n.onreadystatechange=function(){t(),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},e.document.documentElement.appendChild(n)}:function(){setTimeout(t,0)};else{var d=new e.MessageChannel;d.port1.onmessage=t,r=function(){d.port2.postMessage(0)}}var s,c=[];n.exports=o}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[1])(1)});

+ 69
- 0
node_modules/immediate/lib/browser.js View File

@@ -0,0 +1,69 @@
1
+'use strict';
2
+var Mutation = global.MutationObserver || global.WebKitMutationObserver;
3
+
4
+var scheduleDrain;
5
+
6
+{
7
+  if (Mutation) {
8
+    var called = 0;
9
+    var observer = new Mutation(nextTick);
10
+    var element = global.document.createTextNode('');
11
+    observer.observe(element, {
12
+      characterData: true
13
+    });
14
+    scheduleDrain = function () {
15
+      element.data = (called = ++called % 2);
16
+    };
17
+  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
18
+    var channel = new global.MessageChannel();
19
+    channel.port1.onmessage = nextTick;
20
+    scheduleDrain = function () {
21
+      channel.port2.postMessage(0);
22
+    };
23
+  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
24
+    scheduleDrain = function () {
25
+
26
+      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
27
+      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
28
+      var scriptEl = global.document.createElement('script');
29
+      scriptEl.onreadystatechange = function () {
30
+        nextTick();
31
+
32
+        scriptEl.onreadystatechange = null;
33
+        scriptEl.parentNode.removeChild(scriptEl);
34
+        scriptEl = null;
35
+      };
36
+      global.document.documentElement.appendChild(scriptEl);
37
+    };
38
+  } else {
39
+    scheduleDrain = function () {
40
+      setTimeout(nextTick, 0);
41
+    };
42
+  }
43
+}
44
+
45
+var draining;
46
+var queue = [];
47
+//named nextTick for less confusing stack traces
48
+function nextTick() {
49
+  draining = true;
50
+  var i, oldQueue;
51
+  var len = queue.length;
52
+  while (len) {
53
+    oldQueue = queue;
54
+    queue = [];
55
+    i = -1;
56
+    while (++i < len) {
57
+      oldQueue[i]();
58
+    }
59
+    len = queue.length;
60
+  }
61
+  draining = false;
62
+}
63
+
64
+module.exports = immediate;
65
+function immediate(task) {
66
+  if (queue.push(task) === 1 && !draining) {
67
+    scheduleDrain();
68
+  }
69
+}

+ 73
- 0
node_modules/immediate/lib/index.js View File

@@ -0,0 +1,73 @@
1
+'use strict';
2
+var Mutation = global.MutationObserver || global.WebKitMutationObserver;
3
+
4
+var scheduleDrain;
5
+
6
+if (process.browser) {
7
+  if (Mutation) {
8
+    var called = 0;
9
+    var observer = new Mutation(nextTick);
10
+    var element = global.document.createTextNode('');
11
+    observer.observe(element, {
12
+      characterData: true
13
+    });
14
+    scheduleDrain = function () {
15
+      element.data = (called = ++called % 2);
16
+    };
17
+  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
18
+    var channel = new global.MessageChannel();
19
+    channel.port1.onmessage = nextTick;
20
+    scheduleDrain = function () {
21
+      channel.port2.postMessage(0);
22
+    };
23
+  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
24
+    scheduleDrain = function () {
25
+
26
+      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
27
+      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
28
+      var scriptEl = global.document.createElement('script');
29
+      scriptEl.onreadystatechange = function () {
30
+        nextTick();
31
+
32
+        scriptEl.onreadystatechange = null;
33
+        scriptEl.parentNode.removeChild(scriptEl);
34
+        scriptEl = null;
35
+      };
36
+      global.document.documentElement.appendChild(scriptEl);
37
+    };
38
+  } else {
39
+    scheduleDrain = function () {
40
+      setTimeout(nextTick, 0);
41
+    };
42
+  }
43
+} else {
44
+  scheduleDrain = function () {
45
+    process.nextTick(nextTick);
46
+  };
47
+}
48
+
49
+var draining;
50
+var queue = [];
51
+//named nextTick for less confusing stack traces
52
+function nextTick() {
53
+  draining = true;
54
+  var i, oldQueue;
55
+  var len = queue.length;
56
+  while (len) {
57
+    oldQueue = queue;
58
+    queue = [];
59
+    i = -1;
60
+    while (++i < len) {
61
+      oldQueue[i]();
62
+    }
63
+    len = queue.length;
64
+  }
65
+  draining = false;
66
+}
67
+
68
+module.exports = immediate;
69
+function immediate(task) {
70
+  if (queue.push(task) === 1 && !draining) {
71
+    scheduleDrain();
72
+  }
73
+}

+ 83
- 0
node_modules/immediate/package.json View File

@@ -0,0 +1,83 @@
1
+{
2
+  "_from": "immediate@~3.0.5",
3
+  "_id": "immediate@3.0.6",
4
+  "_inBundle": false,
5
+  "_integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
6
+  "_location": "/immediate",
7
+  "_phantomChildren": {},
8
+  "_requested": {
9
+    "type": "range",
10
+    "registry": true,
11
+    "raw": "immediate@~3.0.5",
12
+    "name": "immediate",
13
+    "escapedName": "immediate",
14
+    "rawSpec": "~3.0.5",
15
+    "saveSpec": null,
16
+    "fetchSpec": "~3.0.5"
17
+  },
18
+  "_requiredBy": [
19
+    "/lie"
20
+  ],
21
+  "_resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
22
+  "_shasum": "9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b",
23
+  "_spec": "immediate@~3.0.5",
24
+  "_where": "/Users/christian/Documents/artesanias/node_modules/lie",
25
+  "browser": {
26
+    "./lib/index.js": "./lib/browser.js"
27
+  },
28
+  "bugs": {
29
+    "url": "https://github.com/calvinmetcalf/immediate/issues"
30
+  },
31
+  "bundleDependencies": false,
32
+  "contributors": [
33
+    {
34
+      "name": "Domenic Denicola",
35
+      "email": "domenic@domenicdenicola.com",
36
+      "url": "http://domenicdenicola.com"
37
+    },
38
+    {
39
+      "name": "Donavon West",
40
+      "email": "github@donavon.com",
41
+      "url": "http://donavon.com"
42
+    },
43
+    {
44
+      "name": "Yaffle"
45
+    },
46
+    {
47
+      "name": "Calvin Metcalf",
48
+      "email": "calvin.metcalf@gmail.com"
49
+    }
50
+  ],
51
+  "deprecated": false,
52
+  "description": "A cross browser microtask library",
53
+  "devDependencies": {
54
+    "browserify": "^13.0.0",
55
+    "browserify-transform-cli": "^1.1.1",
56
+    "derequire": "^2.0.0",
57
+    "inline-process-browser": "^2.0.0",
58
+    "jshint": "^2.5.1",
59
+    "tape": "^4.0.0",
60
+    "uglify-js": "^2.4.13",
61
+    "unreachable-branch-transform": "^0.5.1"
62
+  },
63
+  "files": [
64
+    "lib",
65
+    "dist"
66
+  ],
67
+  "homepage": "https://github.com/calvinmetcalf/immediate#readme",
68
+  "license": "MIT",
69
+  "main": "lib/index.js",
70
+  "name": "immediate",
71
+  "repository": {
72
+    "type": "git",
73
+    "url": "git://github.com/calvinmetcalf/immediate.git"
74
+  },
75
+  "scripts": {
76
+    "build": "npm run build-node && npm run build-js && npm run uglify",
77
+    "build-js": "browserify -s immediate ./lib/browser.js | derequire > dist/immediate.js",
78
+    "build-node": "browserify-transform-cli inline-process-browser unreachable-branch-transform < ./lib/index.js > ./lib/browser.js",
79
+    "test": "jshint lib/*.js && node test/tests.js",
80
+    "uglify": "uglifyjs dist/immediate.js -mc > dist/immediate.min.js"
81
+  },
82
+  "version": "3.0.6"
83
+}

+ 64
- 0
node_modules/lie/README.md View File

@@ -0,0 +1,64 @@
1
+# lie
2
+<a href="http://promises-aplus.github.com/promises-spec">
3
+  <img src="http://promises-aplus.github.com/promises-spec/assets/logo-small.png"
4
+       alt="Promises/A+ logo" title="Promises/A+ 1.1 compliant" align="right" />
5
+</a> [![Build Status](https://travis-ci.org/calvinmetcalf/lie.svg)](https://travis-ci.org/calvinmetcalf/lie)
6
+
7
+lie a small, performant, promise library implementing the [Promises/A+ spec Version 1.1](http://promises-aplus.github.com/promises-spec/).
8
+
9
+A originally a fork of [Ruben Verborgh's](https://github.com/RubenVerborgh) library called [promiscuous](https://github.com/RubenVerborgh/promiscuous), version 2.6 and above are forked from [ayepromise](https://github.com/cburgmer/ayepromise) by [Chris Burgmer](https://github.com/cburgmer).
10
+
11
+```bash
12
+npm install lie
13
+
14
+```
15
+
16
+```javascript
17
+var Promise = require('lie');
18
+// or use the pollyfill
19
+require('lie/polyfill');
20
+```
21
+
22
+## Usage
23
+
24
+Either use it with [browserify](http://browserify.org/) (recommended) or grab one of the files from the dist folder
25
+
26
+- lie.js/lie.min.js makes 'Promise' available in global scope (or since it's a UMD `Promise` will be available through a CJS or AMD loader if it's available instead)
27
+- lie.polyfill.js/lie.polyfill.min.js adds 'Promise' to the global scope only if it's not already defined (not a UMD).
28
+
29
+## API
30
+
31
+Implements the standard ES6 api,
32
+
33
+```js
34
+new Promise(function(resolve, reject){
35
+    doSomething(function(err, result) {
36
+        if (err) {
37
+            reject(err);
38
+        } else {
39
+            resolve(result);
40
+        }
41
+    });
42
+}).then(function (value) {
43
+    //on success
44
+}, function (reason) {
45
+    //on error
46
+}).catch(function (reason) {
47
+    //shortcut for error handling
48
+});
49
+
50
+Promise.all([
51
+    //array of promises or values
52
+]).then(function ([/* array of results */]));
53
+
54
+Promise.race([
55
+    //array of promises or values
56
+]);
57
+// either resolves or rejects depending on the first value to do so
58
+```
59
+
60
+## Unhandled Rejections
61
+
62
+In node lie emits `unhandledRejection` events when promises are not handled in
63
+line with how [iojs does so](https://iojs.org/api/process.html#process_event_unhandledrejection)
64
+meaning it can act as promise shim in node as well as the browser.

+ 330
- 0
node_modules/lie/dist/lie.js View File

@@ -0,0 +1,330 @@
1
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Promise = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
2
+(function (global){
3
+'use strict';
4
+var Mutation = global.MutationObserver || global.WebKitMutationObserver;
5
+
6
+var scheduleDrain;
7
+
8
+{
9
+  if (Mutation) {
10
+    var called = 0;
11
+    var observer = new Mutation(nextTick);
12
+    var element = global.document.createTextNode('');
13
+    observer.observe(element, {
14
+      characterData: true
15
+    });
16
+    scheduleDrain = function () {
17
+      element.data = (called = ++called % 2);
18
+    };
19
+  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
20
+    var channel = new global.MessageChannel();
21
+    channel.port1.onmessage = nextTick;
22
+    scheduleDrain = function () {
23
+      channel.port2.postMessage(0);
24
+    };
25
+  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
26
+    scheduleDrain = function () {
27
+
28
+      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
29
+      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
30
+      var scriptEl = global.document.createElement('script');
31
+      scriptEl.onreadystatechange = function () {
32
+        nextTick();
33
+
34
+        scriptEl.onreadystatechange = null;
35
+        scriptEl.parentNode.removeChild(scriptEl);
36
+        scriptEl = null;
37
+      };
38
+      global.document.documentElement.appendChild(scriptEl);
39
+    };
40
+  } else {
41
+    scheduleDrain = function () {
42
+      setTimeout(nextTick, 0);
43
+    };
44
+  }
45
+}
46
+
47
+var draining;
48
+var queue = [];
49
+//named nextTick for less confusing stack traces
50
+function nextTick() {
51
+  draining = true;
52
+  var i, oldQueue;
53
+  var len = queue.length;
54
+  while (len) {
55
+    oldQueue = queue;
56
+    queue = [];
57
+    i = -1;
58
+    while (++i < len) {
59
+      oldQueue[i]();
60
+    }
61
+    len = queue.length;
62
+  }
63
+  draining = false;
64
+}
65
+
66
+module.exports = immediate;
67
+function immediate(task) {
68
+  if (queue.push(task) === 1 && !draining) {
69
+    scheduleDrain();
70
+  }
71
+}
72
+
73
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
74
+},{}],2:[function(_dereq_,module,exports){
75
+'use strict';
76
+var immediate = _dereq_(1);
77
+
78
+/* istanbul ignore next */
79
+function INTERNAL() {}
80
+
81
+var handlers = {};
82
+
83
+var REJECTED = ['REJECTED'];
84
+var FULFILLED = ['FULFILLED'];
85
+var PENDING = ['PENDING'];
86
+
87
+module.exports = Promise;
88
+
89
+function Promise(resolver) {
90
+  if (typeof resolver !== 'function') {
91
+    throw new TypeError('resolver must be a function');
92
+  }
93
+  this.state = PENDING;
94
+  this.queue = [];
95
+  this.outcome = void 0;
96
+  if (resolver !== INTERNAL) {
97
+    safelyResolveThenable(this, resolver);
98
+  }
99
+}
100
+
101
+Promise.prototype["catch"] = function (onRejected) {
102
+  return this.then(null, onRejected);
103
+};
104
+Promise.prototype.then = function (onFulfilled, onRejected) {
105
+  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||
106
+    typeof onRejected !== 'function' && this.state === REJECTED) {
107
+    return this;
108
+  }
109
+  var promise = new this.constructor(INTERNAL);
110
+  if (this.state !== PENDING) {
111
+    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;
112
+    unwrap(promise, resolver, this.outcome);
113
+  } else {
114
+    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));
115
+  }
116
+
117
+  return promise;
118
+};
119
+function QueueItem(promise, onFulfilled, onRejected) {
120
+  this.promise = promise;
121
+  if (typeof onFulfilled === 'function') {
122
+    this.onFulfilled = onFulfilled;
123
+    this.callFulfilled = this.otherCallFulfilled;
124
+  }
125
+  if (typeof onRejected === 'function') {
126
+    this.onRejected = onRejected;
127
+    this.callRejected = this.otherCallRejected;
128
+  }
129
+}
130
+QueueItem.prototype.callFulfilled = function (value) {
131
+  handlers.resolve(this.promise, value);
132
+};
133
+QueueItem.prototype.otherCallFulfilled = function (value) {
134
+  unwrap(this.promise, this.onFulfilled, value);
135
+};
136
+QueueItem.prototype.callRejected = function (value) {
137
+  handlers.reject(this.promise, value);
138
+};
139
+QueueItem.prototype.otherCallRejected = function (value) {
140
+  unwrap(this.promise, this.onRejected, value);
141
+};
142
+
143
+function unwrap(promise, func, value) {
144
+  immediate(function () {
145
+    var returnValue;
146
+    try {
147
+      returnValue = func(value);
148
+    } catch (e) {
149
+      return handlers.reject(promise, e);
150
+    }
151
+    if (returnValue === promise) {
152
+      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));
153
+    } else {
154
+      handlers.resolve(promise, returnValue);
155
+    }
156
+  });
157
+}
158
+
159
+handlers.resolve = function (self, value) {
160
+  var result = tryCatch(getThen, value);
161
+  if (result.status === 'error') {
162
+    return handlers.reject(self, result.value);
163
+  }
164
+  var thenable = result.value;
165
+
166
+  if (thenable) {
167
+    safelyResolveThenable(self, thenable);
168
+  } else {
169
+    self.state = FULFILLED;
170
+    self.outcome = value;
171
+    var i = -1;
172
+    var len = self.queue.length;
173
+    while (++i < len) {
174
+      self.queue[i].callFulfilled(value);
175
+    }
176
+  }
177
+  return self;
178
+};
179
+handlers.reject = function (self, error) {
180
+  self.state = REJECTED;
181
+  self.outcome = error;
182
+  var i = -1;
183
+  var len = self.queue.length;
184
+  while (++i < len) {
185
+    self.queue[i].callRejected(error);
186
+  }
187
+  return self;
188
+};
189
+
190
+function getThen(obj) {
191
+  // Make sure we only access the accessor once as required by the spec
192
+  var then = obj && obj.then;
193
+  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {
194
+    return function appyThen() {
195
+      then.apply(obj, arguments);
196
+    };
197
+  }
198
+}
199
+
200
+function safelyResolveThenable(self, thenable) {
201
+  // Either fulfill, reject or reject with error
202
+  var called = false;
203
+  function onError(value) {
204
+    if (called) {
205
+      return;
206
+    }
207
+    called = true;
208
+    handlers.reject(self, value);
209
+  }
210
+
211
+  function onSuccess(value) {
212
+    if (called) {
213
+      return;
214
+    }
215
+    called = true;
216
+    handlers.resolve(self, value);
217
+  }
218
+
219
+  function tryToUnwrap() {
220
+    thenable(onSuccess, onError);
221
+  }
222
+
223
+  var result = tryCatch(tryToUnwrap);
224
+  if (result.status === 'error') {
225
+    onError(result.value);
226
+  }
227
+}
228
+
229
+function tryCatch(func, value) {
230
+  var out = {};
231
+  try {
232
+    out.value = func(value);
233
+    out.status = 'success';
234
+  } catch (e) {
235
+    out.status = 'error';
236
+    out.value = e;
237
+  }
238
+  return out;
239
+}
240
+
241
+Promise.resolve = resolve;
242
+function resolve(value) {
243
+  if (value instanceof this) {
244
+    return value;
245
+  }
246
+  return handlers.resolve(new this(INTERNAL), value);
247
+}
248
+
249
+Promise.reject = reject;
250
+function reject(reason) {
251
+  var promise = new this(INTERNAL);
252
+  return handlers.reject(promise, reason);
253
+}
254
+
255
+Promise.all = all;
256
+function all(iterable) {
257
+  var self = this;
258
+  if (Object.prototype.toString.call(iterable) !== '[object Array]') {
259
+    return this.reject(new TypeError('must be an array'));
260
+  }
261
+
262
+  var len = iterable.length;
263
+  var called = false;
264
+  if (!len) {
265
+    return this.resolve([]);
266
+  }
267
+
268
+  var values = new Array(len);
269
+  var resolved = 0;
270
+  var i = -1;
271
+  var promise = new this(INTERNAL);
272
+
273
+  while (++i < len) {
274
+    allResolver(iterable[i], i);
275
+  }
276
+  return promise;
277
+  function allResolver(value, i) {
278
+    self.resolve(value).then(resolveFromAll, function (error) {
279
+      if (!called) {
280
+        called = true;
281
+        handlers.reject(promise, error);
282
+      }
283
+    });
284
+    function resolveFromAll(outValue) {
285
+      values[i] = outValue;
286
+      if (++resolved === len && !called) {
287
+        called = true;
288
+        handlers.resolve(promise, values);
289
+      }
290
+    }
291
+  }
292
+}
293
+
294
+Promise.race = race;
295
+function race(iterable) {
296
+  var self = this;
297
+  if (Object.prototype.toString.call(iterable) !== '[object Array]') {
298
+    return this.reject(new TypeError('must be an array'));
299
+  }
300
+
301
+  var len = iterable.length;
302
+  var called = false;
303
+  if (!len) {
304
+    return this.resolve([]);
305
+  }
306
+
307
+  var i = -1;
308
+  var promise = new this(INTERNAL);
309
+
310
+  while (++i < len) {
311
+    resolver(iterable[i]);
312
+  }
313
+  return promise;
314
+  function resolver(value) {
315
+    self.resolve(value).then(function (response) {
316
+      if (!called) {
317
+        called = true;
318
+        handlers.resolve(promise, response);
319
+      }
320
+    }, function (error) {
321
+      if (!called) {
322
+        called = true;
323
+        handlers.reject(promise, error);
324
+      }
325
+    });
326
+  }
327
+}
328
+
329
+},{"1":1}]},{},[2])(2)
330
+});

+ 1
- 0
node_modules/lie/dist/lie.min.js View File

@@ -0,0 +1 @@
1
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Promise=e()}}(function(){return function e(t,n,r){function o(u,s){if(!n[u]){if(!t[u]){var c="function"==typeof require&&require;if(!s&&c)return c(u,!0);if(i)return i(u,!0);var f=new Error("Cannot find module '"+u+"'");throw f.code="MODULE_NOT_FOUND",f}var a=n[u]={exports:{}};t[u][0].call(a.exports,function(e){var n=t[u][1][e];return o(n?n:e)},a,a.exports,e,t,n,r)}return n[u].exports}for(var i="function"==typeof require&&require,u=0;u<r.length;u++)o(r[u]);return o}({1:[function(e,t,n){(function(e){"use strict";function n(){a=!0;for(var e,t,n=l.length;n;){for(t=l,l=[],e=-1;++e<n;)t[e]();n=l.length}a=!1}function r(e){1!==l.push(e)||a||o()}var o,i=e.MutationObserver||e.WebKitMutationObserver;if(i){var u=0,s=new i(n),c=e.document.createTextNode("");s.observe(c,{characterData:!0}),o=function(){c.data=u=++u%2}}else if(e.setImmediate||"undefined"==typeof e.MessageChannel)o="document"in e&&"onreadystatechange"in e.document.createElement("script")?function(){var t=e.document.createElement("script");t.onreadystatechange=function(){n(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(n,0)};else{var f=new e.MessageChannel;f.port1.onmessage=n,o=function(){f.port2.postMessage(0)}}var a,l=[];t.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],2:[function(e,t,n){"use strict";function r(){}function o(e){if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=j,this.queue=[],this.outcome=void 0,e!==r&&c(this,e)}function i(e,t,n){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof n&&(this.onRejected=n,this.callRejected=this.otherCallRejected)}function u(e,t,n){d(function(){var r;try{r=t(n)}catch(t){return v.reject(e,t)}r===e?v.reject(e,new TypeError("Cannot resolve promise with itself")):v.resolve(e,r)})}function s(e){var t=e&&e.then;if(e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof t)return function(){t.apply(e,arguments)}}function c(e,t){function n(t){i||(i=!0,v.reject(e,t))}function r(t){i||(i=!0,v.resolve(e,t))}function o(){t(r,n)}var i=!1,u=f(o);"error"===u.status&&n(u.value)}function f(e,t){var n={};try{n.value=e(t),n.status="success"}catch(e){n.status="error",n.value=e}return n}function a(e){return e instanceof this?e:v.resolve(new this(r),e)}function l(e){var t=new this(r);return v.reject(t,e)}function h(e){function t(e,t){function r(e){u[t]=e,++s!==o||i||(i=!0,v.resolve(f,u))}n.resolve(e).then(r,function(e){i||(i=!0,v.reject(f,e))})}var n=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var o=e.length,i=!1;if(!o)return this.resolve([]);for(var u=new Array(o),s=0,c=-1,f=new this(r);++c<o;)t(e[c],c);return f}function p(e){function t(e){n.resolve(e).then(function(e){i||(i=!0,v.resolve(s,e))},function(e){i||(i=!0,v.reject(s,e))})}var n=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var o=e.length,i=!1;if(!o)return this.resolve([]);for(var u=-1,s=new this(r);++u<o;)t(e[u]);return s}var d=e(1),v={},y=["REJECTED"],m=["FULFILLED"],j=["PENDING"];t.exports=o,o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if("function"!=typeof e&&this.state===m||"function"!=typeof t&&this.state===y)return this;var n=new this.constructor(r);if(this.state!==j){var o=this.state===m?e:t;u(n,o,this.outcome)}else this.queue.push(new i(n,e,t));return n},i.prototype.callFulfilled=function(e){v.resolve(this.promise,e)},i.prototype.otherCallFulfilled=function(e){u(this.promise,this.onFulfilled,e)},i.prototype.callRejected=function(e){v.reject(this.promise,e)},i.prototype.otherCallRejected=function(e){u(this.promise,this.onRejected,e)},v.resolve=function(e,t){var n=f(s,t);if("error"===n.status)return v.reject(e,n.value);var r=n.value;if(r)c(e,r);else{e.state=m,e.outcome=t;for(var o=-1,i=e.queue.length;++o<i;)e.queue[o].callFulfilled(t)}return e},v.reject=function(e,t){e.state=y,e.outcome=t;for(var n=-1,r=e.queue.length;++n<r;)e.queue[n].callRejected(t);return e},o.resolve=a,o.reject=l,o.all=h,o.race=p},{1:1}]},{},[2])(2)});

+ 338
- 0
node_modules/lie/dist/lie.polyfill.js View File

@@ -0,0 +1,338 @@
1
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
2
+'use strict';
3
+var immediate = _dereq_(2);
4
+
5
+/* istanbul ignore next */
6
+function INTERNAL() {}
7
+
8
+var handlers = {};
9
+
10
+var REJECTED = ['REJECTED'];
11
+var FULFILLED = ['FULFILLED'];
12
+var PENDING = ['PENDING'];
13
+
14
+module.exports = Promise;
15
+
16
+function Promise(resolver) {
17
+  if (typeof resolver !== 'function') {
18
+    throw new TypeError('resolver must be a function');
19
+  }
20
+  this.state = PENDING;
21
+  this.queue = [];
22
+  this.outcome = void 0;
23
+  if (resolver !== INTERNAL) {
24
+    safelyResolveThenable(this, resolver);
25
+  }
26
+}
27
+
28
+Promise.prototype["catch"] = function (onRejected) {
29
+  return this.then(null, onRejected);
30
+};
31
+Promise.prototype.then = function (onFulfilled, onRejected) {
32
+  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||
33
+    typeof onRejected !== 'function' && this.state === REJECTED) {
34
+    return this;
35
+  }
36
+  var promise = new this.constructor(INTERNAL);
37
+  if (this.state !== PENDING) {
38
+    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;
39
+    unwrap(promise, resolver, this.outcome);
40
+  } else {
41
+    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));
42
+  }
43
+
44
+  return promise;
45
+};
46
+function QueueItem(promise, onFulfilled, onRejected) {
47
+  this.promise = promise;
48
+  if (typeof onFulfilled === 'function') {
49
+    this.onFulfilled = onFulfilled;
50
+    this.callFulfilled = this.otherCallFulfilled;
51
+  }
52
+  if (typeof onRejected === 'function') {
53
+    this.onRejected = onRejected;
54
+    this.callRejected = this.otherCallRejected;
55
+  }
56
+}
57
+QueueItem.prototype.callFulfilled = function (value) {
58
+  handlers.resolve(this.promise, value);
59
+};
60
+QueueItem.prototype.otherCallFulfilled = function (value) {
61
+  unwrap(this.promise, this.onFulfilled, value);
62
+};
63
+QueueItem.prototype.callRejected = function (value) {
64
+  handlers.reject(this.promise, value);
65
+};
66
+QueueItem.prototype.otherCallRejected = function (value) {
67
+  unwrap(this.promise, this.onRejected, value);
68
+};
69
+
70
+function unwrap(promise, func, value) {
71
+  immediate(function () {
72
+    var returnValue;
73
+    try {
74
+      returnValue = func(value);
75
+    } catch (e) {
76
+      return handlers.reject(promise, e);
77
+    }
78
+    if (returnValue === promise) {
79
+      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));
80
+    } else {
81
+      handlers.resolve(promise, returnValue);
82
+    }
83
+  });
84
+}
85
+
86
+handlers.resolve = function (self, value) {
87
+  var result = tryCatch(getThen, value);
88
+  if (result.status === 'error') {
89
+    return handlers.reject(self, result.value);
90
+  }
91
+  var thenable = result.value;
92
+
93
+  if (thenable) {
94
+    safelyResolveThenable(self, thenable);
95
+  } else {
96
+    self.state = FULFILLED;
97
+    self.outcome = value;
98
+    var i = -1;
99
+    var len = self.queue.length;
100
+    while (++i < len) {
101
+      self.queue[i].callFulfilled(value);
102
+    }
103
+  }
104
+  return self;
105
+};
106
+handlers.reject = function (self, error) {
107
+  self.state = REJECTED;
108
+  self.outcome = error;
109
+  var i = -1;
110
+  var len = self.queue.length;
111
+  while (++i < len) {
112
+    self.queue[i].callRejected(error);
113
+  }
114
+  return self;
115
+};
116
+
117
+function getThen(obj) {
118
+  // Make sure we only access the accessor once as required by the spec
119
+  var then = obj && obj.then;
120
+  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {
121
+    return function appyThen() {
122
+      then.apply(obj, arguments);
123
+    };
124
+  }
125
+}
126
+
127
+function safelyResolveThenable(self, thenable) {
128
+  // Either fulfill, reject or reject with error
129
+  var called = false;
130
+  function onError(value) {
131
+    if (called) {
132
+      return;
133
+    }
134
+    called = true;
135
+    handlers.reject(self, value);
136
+  }
137
+
138
+  function onSuccess(value) {
139
+    if (called) {
140
+      return;
141
+    }
142
+    called = true;
143
+    handlers.resolve(self, value);
144
+  }
145
+
146
+  function tryToUnwrap() {
147
+    thenable(onSuccess, onError);
148
+  }
149
+
150
+  var result = tryCatch(tryToUnwrap);
151
+  if (result.status === 'error') {
152
+    onError(result.value);
153
+  }
154
+}
155
+
156
+function tryCatch(func, value) {
157
+  var out = {};
158
+  try {
159
+    out.value = func(value);
160
+    out.status = 'success';
161
+  } catch (e) {
162
+    out.status = 'error';
163
+    out.value = e;
164
+  }
165
+  return out;
166
+}
167
+
168
+Promise.resolve = resolve;
169
+function resolve(value) {
170
+  if (value instanceof this) {
171
+    return value;
172
+  }
173
+  return handlers.resolve(new this(INTERNAL), value);
174
+}
175
+
176
+Promise.reject = reject;
177
+function reject(reason) {
178
+  var promise = new this(INTERNAL);
179
+  return handlers.reject(promise, reason);
180
+}
181
+
182
+Promise.all = all;
183
+function all(iterable) {
184
+  var self = this;
185
+  if (Object.prototype.toString.call(iterable) !== '[object Array]') {
186
+    return this.reject(new TypeError('must be an array'));
187
+  }
188
+
189
+  var len = iterable.length;
190
+  var called = false;
191
+  if (!len) {
192
+    return this.resolve([]);
193
+  }
194
+
195
+  var values = new Array(len);
196
+  var resolved = 0;
197
+  var i = -1;
198
+  var promise = new this(INTERNAL);
199
+
200
+  while (++i < len) {
201
+    allResolver(iterable[i], i);
202
+  }
203
+  return promise;
204
+  function allResolver(value, i) {
205
+    self.resolve(value).then(resolveFromAll, function (error) {
206
+      if (!called) {
207
+        called = true;
208
+        handlers.reject(promise, error);
209
+      }
210
+    });
211
+    function resolveFromAll(outValue) {
212
+      values[i] = outValue;
213
+      if (++resolved === len && !called) {
214
+        called = true;
215
+        handlers.resolve(promise, values);
216
+      }
217
+    }
218
+  }
219
+}
220
+
221
+Promise.race = race;
222
+function race(iterable) {
223
+  var self = this;
224
+  if (Object.prototype.toString.call(iterable) !== '[object Array]') {
225
+    return this.reject(new TypeError('must be an array'));
226
+  }
227
+
228
+  var len = iterable.length;
229
+  var called = false;
230
+  if (!len) {
231
+    return this.resolve([]);
232
+  }
233
+
234
+  var i = -1;
235
+  var promise = new this(INTERNAL);
236
+
237
+  while (++i < len) {
238
+    resolver(iterable[i]);
239
+  }
240
+  return promise;
241
+  function resolver(value) {
242
+    self.resolve(value).then(function (response) {
243
+      if (!called) {
244
+        called = true;
245
+        handlers.resolve(promise, response);
246
+      }
247
+    }, function (error) {
248
+      if (!called) {
249
+        called = true;
250
+        handlers.reject(promise, error);
251
+      }
252
+    });
253
+  }
254
+}
255
+
256
+},{"2":2}],2:[function(_dereq_,module,exports){
257
+(function (global){
258
+'use strict';
259
+var Mutation = global.MutationObserver || global.WebKitMutationObserver;
260
+
261
+var scheduleDrain;
262
+
263
+{
264
+  if (Mutation) {
265
+    var called = 0;
266
+    var observer = new Mutation(nextTick);
267
+    var element = global.document.createTextNode('');
268
+    observer.observe(element, {
269
+      characterData: true
270
+    });
271
+    scheduleDrain = function () {
272
+      element.data = (called = ++called % 2);
273
+    };
274
+  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
275
+    var channel = new global.MessageChannel();
276
+    channel.port1.onmessage = nextTick;
277
+    scheduleDrain = function () {
278
+      channel.port2.postMessage(0);
279
+    };
280
+  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
281
+    scheduleDrain = function () {
282
+
283
+      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
284
+      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
285
+      var scriptEl = global.document.createElement('script');
286
+      scriptEl.onreadystatechange = function () {
287
+        nextTick();
288
+
289
+        scriptEl.onreadystatechange = null;
290
+        scriptEl.parentNode.removeChild(scriptEl);
291
+        scriptEl = null;
292
+      };
293
+      global.document.documentElement.appendChild(scriptEl);
294
+    };
295
+  } else {
296
+    scheduleDrain = function () {
297
+      setTimeout(nextTick, 0);
298
+    };
299
+  }
300
+}
301
+
302
+var draining;
303
+var queue = [];
304
+//named nextTick for less confusing stack traces
305
+function nextTick() {
306
+  draining = true;
307
+  var i, oldQueue;
308
+  var len = queue.length;
309
+  while (len) {
310
+    oldQueue = queue;
311
+    queue = [];
312
+    i = -1;
313
+    while (++i < len) {
314
+      oldQueue[i]();
315
+    }
316
+    len = queue.length;
317
+  }
318
+  draining = false;
319
+}
320
+
321
+module.exports = immediate;
322
+function immediate(task) {
323
+  if (queue.push(task) === 1 && !draining) {
324
+    scheduleDrain();
325
+  }
326
+}
327
+
328
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
329
+},{}],3:[function(_dereq_,module,exports){
330
+(function (global){
331
+'use strict';
332
+if (typeof global.Promise !== 'function') {
333
+  global.Promise = _dereq_(1);
334
+}
335
+
336
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
337
+},{"1":1}]},{},[3]);
338
+

+ 1
- 0
node_modules/lie/dist/lie.polyfill.min.js View File

@@ -0,0 +1 @@
1
+!function e(t,n,r){function o(u,c){if(!n[u]){if(!t[u]){var s="function"==typeof require&&require;if(!c&&s)return s(u,!0);if(i)return i(u,!0);var f=new Error("Cannot find module '"+u+"'");throw f.code="MODULE_NOT_FOUND",f}var a=n[u]={exports:{}};t[u][0].call(a.exports,function(e){var n=t[u][1][e];return o(n?n:e)},a,a.exports,e,t,n,r)}return n[u].exports}for(var i="function"==typeof require&&require,u=0;u<r.length;u++)o(r[u]);return o}({1:[function(e,t,n){"use strict";function r(){}function o(e){if("function"!=typeof e)throw new TypeError("resolver must be a function");this.state=w,this.queue=[],this.outcome=void 0,e!==r&&s(this,e)}function i(e,t,n){this.promise=e,"function"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),"function"==typeof n&&(this.onRejected=n,this.callRejected=this.otherCallRejected)}function u(e,t,n){v(function(){var r;try{r=t(n)}catch(t){return d.reject(e,t)}r===e?d.reject(e,new TypeError("Cannot resolve promise with itself")):d.resolve(e,r)})}function c(e){var t=e&&e.then;if(e&&("object"==typeof e||"function"==typeof e)&&"function"==typeof t)return function(){t.apply(e,arguments)}}function s(e,t){function n(t){i||(i=!0,d.reject(e,t))}function r(t){i||(i=!0,d.resolve(e,t))}function o(){t(r,n)}var i=!1,u=f(o);"error"===u.status&&n(u.value)}function f(e,t){var n={};try{n.value=e(t),n.status="success"}catch(e){n.status="error",n.value=e}return n}function a(e){return e instanceof this?e:d.resolve(new this(r),e)}function l(e){var t=new this(r);return d.reject(t,e)}function h(e){function t(e,t){function r(e){u[t]=e,++c!==o||i||(i=!0,d.resolve(f,u))}n.resolve(e).then(r,function(e){i||(i=!0,d.reject(f,e))})}var n=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var o=e.length,i=!1;if(!o)return this.resolve([]);for(var u=new Array(o),c=0,s=-1,f=new this(r);++s<o;)t(e[s],s);return f}function p(e){function t(e){n.resolve(e).then(function(e){i||(i=!0,d.resolve(c,e))},function(e){i||(i=!0,d.reject(c,e))})}var n=this;if("[object Array]"!==Object.prototype.toString.call(e))return this.reject(new TypeError("must be an array"));var o=e.length,i=!1;if(!o)return this.resolve([]);for(var u=-1,c=new this(r);++u<o;)t(e[u]);return c}var v=e(2),d={},y=["REJECTED"],m=["FULFILLED"],w=["PENDING"];t.exports=o,o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if("function"!=typeof e&&this.state===m||"function"!=typeof t&&this.state===y)return this;var n=new this.constructor(r);if(this.state!==w){var o=this.state===m?e:t;u(n,o,this.outcome)}else this.queue.push(new i(n,e,t));return n},i.prototype.callFulfilled=function(e){d.resolve(this.promise,e)},i.prototype.otherCallFulfilled=function(e){u(this.promise,this.onFulfilled,e)},i.prototype.callRejected=function(e){d.reject(this.promise,e)},i.prototype.otherCallRejected=function(e){u(this.promise,this.onRejected,e)},d.resolve=function(e,t){var n=f(c,t);if("error"===n.status)return d.reject(e,n.value);var r=n.value;if(r)s(e,r);else{e.state=m,e.outcome=t;for(var o=-1,i=e.queue.length;++o<i;)e.queue[o].callFulfilled(t)}return e},d.reject=function(e,t){e.state=y,e.outcome=t;for(var n=-1,r=e.queue.length;++n<r;)e.queue[n].callRejected(t);return e},o.resolve=a,o.reject=l,o.all=h,o.race=p},{2:2}],2:[function(e,t,n){(function(e){"use strict";function n(){a=!0;for(var e,t,n=l.length;n;){for(t=l,l=[],e=-1;++e<n;)t[e]();n=l.length}a=!1}function r(e){1!==l.push(e)||a||o()}var o,i=e.MutationObserver||e.WebKitMutationObserver;if(i){var u=0,c=new i(n),s=e.document.createTextNode("");c.observe(s,{characterData:!0}),o=function(){s.data=u=++u%2}}else if(e.setImmediate||"undefined"==typeof e.MessageChannel)o="document"in e&&"onreadystatechange"in e.document.createElement("script")?function(){var t=e.document.createElement("script");t.onreadystatechange=function(){n(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(n,0)};else{var f=new e.MessageChannel;f.port1.onmessage=n,o=function(){f.port2.postMessage(0)}}var a,l=[];t.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(e,t,n){(function(t){"use strict";"function"!=typeof t.Promise&&(t.Promise=e(1))}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{1:1}]},{},[3]);

+ 253
- 0
node_modules/lie/lib/browser.js View File

@@ -0,0 +1,253 @@
1
+'use strict';
2
+var immediate = require('immediate');
3
+
4
+/* istanbul ignore next */
5
+function INTERNAL() {}
6
+
7
+var handlers = {};
8
+
9
+var REJECTED = ['REJECTED'];
10
+var FULFILLED = ['FULFILLED'];
11
+var PENDING = ['PENDING'];
12
+
13
+module.exports = Promise;
14
+
15
+function Promise(resolver) {
16
+  if (typeof resolver !== 'function') {
17
+    throw new TypeError('resolver must be a function');
18
+  }
19
+  this.state = PENDING;
20
+  this.queue = [];
21
+  this.outcome = void 0;
22
+  if (resolver !== INTERNAL) {
23
+    safelyResolveThenable(this, resolver);
24
+  }
25
+}
26
+
27
+Promise.prototype["catch"] = function (onRejected) {
28
+  return this.then(null, onRejected);
29
+};
30
+Promise.prototype.then = function (onFulfilled, onRejected) {
31
+  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||
32
+    typeof onRejected !== 'function' && this.state === REJECTED) {
33
+    return this;
34
+  }
35
+  var promise = new this.constructor(INTERNAL);
36
+  if (this.state !== PENDING) {
37
+    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;
38
+    unwrap(promise, resolver, this.outcome);
39
+  } else {
40
+    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));
41
+  }
42
+
43
+  return promise;
44
+};
45
+function QueueItem(promise, onFulfilled, onRejected) {
46
+  this.promise = promise;
47
+  if (typeof onFulfilled === 'function') {
48
+    this.onFulfilled = onFulfilled;
49
+    this.callFulfilled = this.otherCallFulfilled;
50
+  }
51
+  if (typeof onRejected === 'function') {
52
+    this.onRejected = onRejected;
53
+    this.callRejected = this.otherCallRejected;
54
+  }
55
+}
56
+QueueItem.prototype.callFulfilled = function (value) {
57
+  handlers.resolve(this.promise, value);
58
+};
59
+QueueItem.prototype.otherCallFulfilled = function (value) {
60
+  unwrap(this.promise, this.onFulfilled, value);
61
+};
62
+QueueItem.prototype.callRejected = function (value) {
63
+  handlers.reject(this.promise, value);
64
+};
65
+QueueItem.prototype.otherCallRejected = function (value) {
66
+  unwrap(this.promise, this.onRejected, value);
67
+};
68
+
69
+function unwrap(promise, func, value) {
70
+  immediate(function () {
71
+    var returnValue;
72
+    try {
73
+      returnValue = func(value);
74
+    } catch (e) {
75
+      return handlers.reject(promise, e);
76
+    }
77
+    if (returnValue === promise) {
78
+      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));
79
+    } else {
80
+      handlers.resolve(promise, returnValue);
81
+    }
82
+  });
83
+}
84
+
85
+handlers.resolve = function (self, value) {
86
+  var result = tryCatch(getThen, value);
87
+  if (result.status === 'error') {
88
+    return handlers.reject(self, result.value);
89
+  }
90
+  var thenable = result.value;
91
+
92
+  if (thenable) {
93
+    safelyResolveThenable(self, thenable);
94
+  } else {
95
+    self.state = FULFILLED;
96
+    self.outcome = value;
97
+    var i = -1;
98
+    var len = self.queue.length;
99
+    while (++i < len) {
100
+      self.queue[i].callFulfilled(value);
101
+    }
102
+  }
103
+  return self;
104
+};
105
+handlers.reject = function (self, error) {
106
+  self.state = REJECTED;
107
+  self.outcome = error;
108
+  var i = -1;
109
+  var len = self.queue.length;
110
+  while (++i < len) {
111
+    self.queue[i].callRejected(error);
112
+  }
113
+  return self;
114
+};
115
+
116
+function getThen(obj) {
117
+  // Make sure we only access the accessor once as required by the spec
118
+  var then = obj && obj.then;
119
+  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {
120
+    return function appyThen() {
121
+      then.apply(obj, arguments);
122
+    };
123
+  }
124
+}
125
+
126
+function safelyResolveThenable(self, thenable) {
127
+  // Either fulfill, reject or reject with error
128
+  var called = false;
129
+  function onError(value) {
130
+    if (called) {
131
+      return;
132
+    }
133
+    called = true;
134
+    handlers.reject(self, value);
135
+  }
136
+
137
+  function onSuccess(value) {
138
+    if (called) {
139
+      return;
140
+    }
141
+    called = true;
142
+    handlers.resolve(self, value);
143
+  }
144
+
145
+  function tryToUnwrap() {
146
+    thenable(onSuccess, onError);
147
+  }
148
+
149
+  var result = tryCatch(tryToUnwrap);
150
+  if (result.status === 'error') {
151
+    onError(result.value);
152
+  }
153
+}
154
+
155
+function tryCatch(func, value) {
156
+  var out = {};
157
+  try {
158
+    out.value = func(value);
159
+    out.status = 'success';
160
+  } catch (e) {
161
+    out.status = 'error';
162
+    out.value = e;
163
+  }
164
+  return out;
165
+}
166
+
167
+Promise.resolve = resolve;
168
+function resolve(value) {
169
+  if (value instanceof this) {
170
+    return value;
171
+  }
172
+  return handlers.resolve(new this(INTERNAL), value);
173
+}
174
+
175
+Promise.reject = reject;
176
+function reject(reason) {
177
+  var promise = new this(INTERNAL);
178
+  return handlers.reject(promise, reason);
179
+}
180
+
181
+Promise.all = all;
182
+function all(iterable) {
183
+  var self = this;
184
+  if (Object.prototype.toString.call(iterable) !== '[object Array]') {
185
+    return this.reject(new TypeError('must be an array'));
186
+  }
187
+
188
+  var len = iterable.length;
189
+  var called = false;
190
+  if (!len) {
191
+    return this.resolve([]);
192
+  }
193
+
194
+  var values = new Array(len);
195
+  var resolved = 0;
196
+  var i = -1;
197
+  var promise = new this(INTERNAL);
198
+
199
+  while (++i < len) {
200
+    allResolver(iterable[i], i);
201
+  }
202
+  return promise;
203
+  function allResolver(value, i) {
204
+    self.resolve(value).then(resolveFromAll, function (error) {
205
+      if (!called) {
206
+        called = true;
207
+        handlers.reject(promise, error);
208
+      }
209
+    });
210
+    function resolveFromAll(outValue) {
211
+      values[i] = outValue;
212
+      if (++resolved === len && !called) {
213
+        called = true;
214
+        handlers.resolve(promise, values);
215
+      }
216
+    }
217
+  }
218
+}
219
+
220
+Promise.race = race;
221
+function race(iterable) {
222
+  var self = this;
223
+  if (Object.prototype.toString.call(iterable) !== '[object Array]') {
224
+    return this.reject(new TypeError('must be an array'));
225
+  }
226
+
227
+  var len = iterable.length;
228
+  var called = false;
229
+  if (!len) {
230
+    return this.resolve([]);
231
+  }
232
+
233
+  var i = -1;
234
+  var promise = new this(INTERNAL);
235
+
236
+  while (++i < len) {
237
+    resolver(iterable[i]);
238
+  }
239
+  return promise;
240
+  function resolver(value) {
241
+    self.resolve(value).then(function (response) {
242
+      if (!called) {
243
+        called = true;
244
+        handlers.resolve(promise, response);
245
+      }
246
+    }, function (error) {
247
+      if (!called) {
248
+        called = true;
249
+        handlers.reject(promise, error);
250
+      }
251
+    });
252
+  }
253
+}

+ 278
- 0
node_modules/lie/lib/index.js View File

@@ -0,0 +1,278 @@
1
+'use strict';
2
+var immediate = require('immediate');
3
+
4
+/* istanbul ignore next */
5
+function INTERNAL() {}
6
+
7
+var handlers = {};
8
+
9
+var REJECTED = ['REJECTED'];
10
+var FULFILLED = ['FULFILLED'];
11
+var PENDING = ['PENDING'];
12
+/* istanbul ignore else */
13
+if (!process.browser) {
14
+  // in which we actually take advantage of JS scoping
15
+  var UNHANDLED = ['UNHANDLED'];
16
+}
17
+
18
+module.exports = Promise;
19
+
20
+function Promise(resolver) {
21
+  if (typeof resolver !== 'function') {
22
+    throw new TypeError('resolver must be a function');
23
+  }
24
+  this.state = PENDING;
25
+  this.queue = [];
26
+  this.outcome = void 0;
27
+  /* istanbul ignore else */
28
+  if (!process.browser) {
29
+    this.handled = UNHANDLED;
30
+  }
31
+  if (resolver !== INTERNAL) {
32
+    safelyResolveThenable(this, resolver);
33
+  }
34
+}
35
+
36
+Promise.prototype.catch = function (onRejected) {
37
+  return this.then(null, onRejected);
38
+};
39
+Promise.prototype.then = function (onFulfilled, onRejected) {
40
+  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||
41
+    typeof onRejected !== 'function' && this.state === REJECTED) {
42
+    return this;
43
+  }
44
+  var promise = new this.constructor(INTERNAL);
45
+  /* istanbul ignore else */
46
+  if (!process.browser) {
47
+    if (this.handled === UNHANDLED) {
48
+      this.handled = null;
49
+    }
50
+  }
51
+  if (this.state !== PENDING) {
52
+    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;
53
+    unwrap(promise, resolver, this.outcome);
54
+  } else {
55
+    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));
56
+  }
57
+
58
+  return promise;
59
+};
60
+function QueueItem(promise, onFulfilled, onRejected) {
61
+  this.promise = promise;
62
+  if (typeof onFulfilled === 'function') {
63
+    this.onFulfilled = onFulfilled;
64
+    this.callFulfilled = this.otherCallFulfilled;
65
+  }
66
+  if (typeof onRejected === 'function') {
67
+    this.onRejected = onRejected;
68
+    this.callRejected = this.otherCallRejected;
69
+  }
70
+}
71
+QueueItem.prototype.callFulfilled = function (value) {
72
+  handlers.resolve(this.promise, value);
73
+};
74
+QueueItem.prototype.otherCallFulfilled = function (value) {
75
+  unwrap(this.promise, this.onFulfilled, value);
76
+};
77
+QueueItem.prototype.callRejected = function (value) {
78
+  handlers.reject(this.promise, value);
79
+};
80
+QueueItem.prototype.otherCallRejected = function (value) {
81
+  unwrap(this.promise, this.onRejected, value);
82
+};
83
+
84
+function unwrap(promise, func, value) {
85
+  immediate(function () {
86
+    var returnValue;
87
+    try {
88
+      returnValue = func(value);
89
+    } catch (e) {
90
+      return handlers.reject(promise, e);
91
+    }
92
+    if (returnValue === promise) {
93
+      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));
94
+    } else {
95
+      handlers.resolve(promise, returnValue);
96
+    }
97
+  });
98
+}
99
+
100
+handlers.resolve = function (self, value) {
101
+  var result = tryCatch(getThen, value);
102
+  if (result.status === 'error') {
103
+    return handlers.reject(self, result.value);
104
+  }
105
+  var thenable = result.value;
106
+
107
+  if (thenable) {
108
+    safelyResolveThenable(self, thenable);
109
+  } else {
110
+    self.state = FULFILLED;
111
+    self.outcome = value;
112
+    var i = -1;
113
+    var len = self.queue.length;
114
+    while (++i < len) {
115
+      self.queue[i].callFulfilled(value);
116
+    }
117
+  }
118
+  return self;
119
+};
120
+handlers.reject = function (self, error) {
121
+  self.state = REJECTED;
122
+  self.outcome = error;
123
+  /* istanbul ignore else */
124
+  if (!process.browser) {
125
+    if (self.handled === UNHANDLED) {
126
+      immediate(function () {
127
+        if (self.handled === UNHANDLED) {
128
+          process.emit('unhandledRejection', error, self);
129
+        }
130
+      });
131
+    }
132
+  }
133
+  var i = -1;
134
+  var len = self.queue.length;
135
+  while (++i < len) {
136
+    self.queue[i].callRejected(error);
137
+  }
138
+  return self;
139
+};
140
+
141
+function getThen(obj) {
142
+  // Make sure we only access the accessor once as required by the spec
143
+  var then = obj && obj.then;
144
+  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {
145
+    return function appyThen() {
146
+      then.apply(obj, arguments);
147
+    };
148
+  }
149
+}
150
+
151
+function safelyResolveThenable(self, thenable) {
152
+  // Either fulfill, reject or reject with error
153
+  var called = false;
154
+  function onError(value) {
155
+    if (called) {
156
+      return;
157
+    }
158
+    called = true;
159
+    handlers.reject(self, value);
160
+  }
161
+
162
+  function onSuccess(value) {
163
+    if (called) {
164
+      return;
165
+    }
166
+    called = true;
167
+    handlers.resolve(self, value);
168
+  }
169
+
170
+  function tryToUnwrap() {
171
+    thenable(onSuccess, onError);
172
+  }
173
+
174
+  var result = tryCatch(tryToUnwrap);
175
+  if (result.status === 'error') {
176
+    onError(result.value);
177
+  }
178
+}
179
+
180
+function tryCatch(func, value) {
181
+  var out = {};
182
+  try {
183
+    out.value = func(value);
184
+    out.status = 'success';
185
+  } catch (e) {
186
+    out.status = 'error';
187
+    out.value = e;
188
+  }
189
+  return out;
190
+}
191
+
192
+Promise.resolve = resolve;
193
+function resolve(value) {
194
+  if (value instanceof this) {
195
+    return value;
196
+  }
197
+  return handlers.resolve(new this(INTERNAL), value);
198
+}
199
+
200
+Promise.reject = reject;
201
+function reject(reason) {
202
+  var promise = new this(INTERNAL);
203
+  return handlers.reject(promise, reason);
204
+}
205
+
206
+Promise.all = all;
207
+function all(iterable) {
208
+  var self = this;
209
+  if (Object.prototype.toString.call(iterable) !== '[object Array]') {
210
+    return this.reject(new TypeError('must be an array'));
211
+  }
212
+
213
+  var len = iterable.length;
214
+  var called = false;
215
+  if (!len) {
216
+    return this.resolve([]);
217
+  }
218
+
219
+  var values = new Array(len);
220
+  var resolved = 0;
221
+  var i = -1;
222
+  var promise = new this(INTERNAL);
223
+
224
+  while (++i < len) {
225
+    allResolver(iterable[i], i);
226
+  }
227
+  return promise;
228
+  function allResolver(value, i) {
229
+    self.resolve(value).then(resolveFromAll, function (error) {
230
+      if (!called) {
231
+        called = true;
232
+        handlers.reject(promise, error);
233
+      }
234
+    });
235
+    function resolveFromAll(outValue) {
236
+      values[i] = outValue;
237
+      if (++resolved === len && !called) {
238
+        called = true;
239
+        handlers.resolve(promise, values);
240
+      }
241
+    }
242
+  }
243
+}
244
+
245
+Promise.race = race;
246
+function race(iterable) {
247
+  var self = this;
248
+  if (Object.prototype.toString.call(iterable) !== '[object Array]') {
249
+    return this.reject(new TypeError('must be an array'));
250
+  }
251
+
252
+  var len = iterable.length;
253
+  var called = false;
254
+  if (!len) {
255
+    return this.resolve([]);
256
+  }
257
+
258
+  var i = -1;
259
+  var promise = new this(INTERNAL);
260
+
261
+  while (++i < len) {
262
+    resolver(iterable[i]);
263
+  }
264
+  return promise;
265
+  function resolver(value) {
266
+    self.resolve(value).then(function (response) {
267
+      if (!called) {
268
+        called = true;
269
+        handlers.resolve(promise, response);
270
+      }
271
+    }, function (error) {
272
+      if (!called) {
273
+        called = true;
274
+        handlers.reject(promise, error);
275
+      }
276
+    });
277
+  }
278
+}

+ 7
- 0
node_modules/lie/license.md View File

@@ -0,0 +1,7 @@
1
+#Copyright (c) 2014 Calvin Metcalf 
2
+
3
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.**

+ 92
- 0
node_modules/lie/package.json View File

@@ -0,0 +1,92 @@
1
+{
2
+  "_from": "lie@3.1.1",
3
+  "_id": "lie@3.1.1",
4
+  "_inBundle": false,
5
+  "_integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
6
+  "_location": "/lie",
7
+  "_phantomChildren": {},
8
+  "_requested": {
9
+    "type": "version",
10
+    "registry": true,
11
+    "raw": "lie@3.1.1",
12
+    "name": "lie",
13
+    "escapedName": "lie",
14
+    "rawSpec": "3.1.1",
15
+    "saveSpec": null,
16
+    "fetchSpec": "3.1.1"
17
+  },
18
+  "_requiredBy": [
19
+    "/localforage"
20
+  ],
21
+  "_resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
22
+  "_shasum": "9a436b2cc7746ca59de7a41fa469b3efb76bd87e",
23
+  "_spec": "lie@3.1.1",
24
+  "_where": "/Users/christian/Documents/artesanias/node_modules/localforage",
25
+  "browser": {
26
+    "./lib/index.js": "./lib/browser.js"
27
+  },
28
+  "bugs": {
29
+    "url": "https://github.com/calvinmetcalf/lie/issues"
30
+  },
31
+  "bundleDependencies": false,
32
+  "dependencies": {
33
+    "immediate": "~3.0.5"
34
+  },
35
+  "deprecated": false,
36
+  "description": "A basic but performant promise implementation",
37
+  "devDependencies": {
38
+    "browserify": "^13.0.0",
39
+    "browserify-transform-cli": "^1.1.1",
40
+    "bundle-collapser": "^1.2.1",
41
+    "copyfiles": "^1.0.0",
42
+    "derequire": "^1.2.0",
43
+    "es3ify": "^0.2.2",
44
+    "inline-process-browser": "^1.0.0",
45
+    "istanbul": "^0.2.6",
46
+    "jshint": "^2.4.4",
47
+    "mkdirp": "^0.5.1",
48
+    "mocha": "^1.18.0",
49
+    "mocha-phantomjs": "~3.5.0",
50
+    "phantomjs": "^1.9.9",
51
+    "promises-aplus-tests": "github:calvinmetcalf/promises-tests#phantom",
52
+    "rimraf": "^2.5.4",
53
+    "uglify-js": "^2.4.13",
54
+    "unreachable-branch-transform": "^0.3.0"
55
+  },
56
+  "files": [
57
+    "lib",
58
+    "dist",
59
+    "polyfill.js"
60
+  ],
61
+  "homepage": "https://github.com/calvinmetcalf/lie#readme",
62
+  "keywords": [
63
+    "lie",
64
+    "promise",
65
+    "async",
66
+    "aplus"
67
+  ],
68
+  "license": "MIT",
69
+  "main": "lib/index.js",
70
+  "name": "lie",
71
+  "repository": {
72
+    "type": "git",
73
+    "url": "git+https://github.com/calvinmetcalf/lie.git"
74
+  },
75
+  "scripts": {
76
+    "browser": "browserify test/cover.js > test/browser.js && mocha-phantomjs test/test.html",
77
+    "build": "npm run build-node && npm run build-js && npm run build-min && npm run build-poly",
78
+    "build-js": "browserify -s Promise -p bundle-collapser/plugin . | derequire > ./dist/lie.js",
79
+    "build-min": "uglifyjs ./dist/lie.js -mc > ./dist/lie.min.js",
80
+    "build-node": "copyfiles -f src/index.js lib && browserify-transform-cli inline-process-browser unreachable-branch-transform es3ify < src/index.js > lib/browser.js",
81
+    "build-poly": "npm run build-poly-js && npm run build-poly-min",
82
+    "build-poly-js": "browserify -p bundle-collapser/plugin ./polyfill.js | derequire > ./dist/lie.polyfill.js",
83
+    "build-poly-min": "uglifyjs ./dist/lie.polyfill.js -mc > ./dist/lie.polyfill.min.js",
84
+    "cover": "istanbul cover _mocha ./test/cover.js -- -R spec && istanbul check-coverage --lines 100 --function 100 --statements 100 --branches 100",
85
+    "jshint": "jshint src",
86
+    "node": "mocha -R spec ./test/cover.js",
87
+    "prebuild": "rimraf lib dist && mkdirp lib dist",
88
+    "pretest": "npm run build",
89
+    "test": "npm run jshint && mocha -R nyan ./test/cover.js"
90
+  },
91
+  "version": "3.1.1"
92
+}

+ 4
- 0
node_modules/lie/polyfill.js View File

@@ -0,0 +1,4 @@
1
+'use strict';
2
+if (typeof global.Promise !== 'function') {
3
+  global.Promise = require('./lib');
4
+}

+ 5
- 0
node_modules/localforage/.huskyrc View File

@@ -0,0 +1,5 @@
1
+{
2
+  "hooks": {
3
+    "pre-commit": "lint-staged"
4
+  }
5
+}

+ 6
- 0
node_modules/localforage/.lintstagedrc View File

@@ -0,0 +1,6 @@
1
+{
2
+  "{src,test}/**/*.js": [
3
+    "prettier --write",
4
+    "git add"
5
+  ]
6
+}

+ 0
- 0
node_modules/localforage/.tscache/typing_tests/timestamp View File


+ 157
- 0
node_modules/localforage/CHANGELOG.md View File

@@ -0,0 +1,157 @@
1
+# About this CHANGELOG
2
+
3
+This file will include all API breakage, new features, and upgrade info in
4
+localForage's lifetime.
5
+
6
+### [1.9.0](https://github.com/mozilla/localForage/releases/tag/1.9.0)
7
+
8
+* Fixed TypeScript definition for `getItem`. It now notes that `getItem` can return `null`, so this change may cause TypeScript code that didn't account for `null` values to fail. See #980.
9
+
10
+### [1.8.1](https://github.com/mozilla/localForage/releases/tag/1.8.1)
11
+
12
+* Reverted the ESM/`module` field change in #940, which broke many builds. See: #979. Sorry about that! 😓
13
+
14
+### [1.8.0](https://github.com/mozilla/localForage/releases/tag/1.8.0)
15
+
16
+* No changes to code, but added a `module` field in `package.json` for better ESM support. See: #940.
17
+
18
+### [1.7.4](https://github.com/mozilla/localForage/releases/tag/1.7.4)
19
+
20
+* Use `openKeyCursor` instead of `openCursor` for `key()` retrieval. Props to @MeMark2 for the fix, and thanks to @lincolnthree and @f for additional testing!
21
+
22
+### [1.7.3](https://github.com/mozilla/localForage/releases/tag/1.7.3)
23
+
24
+* Add `.npmignore` file to reduce package size when installed via npm.
25
+
26
+### [1.6](https://github.com/mozilla/localForage/releases/tag/1.6.0)
27
+
28
+* Add `dropInstance()` method to localforage.
29
+* Improve IDB driver reliability when a connection gets closed.
30
+
31
+### [1.5.7]
32
+
33
+* Fix IE8 localStorage support detection.
34
+
35
+### [1.5.6]
36
+
37
+* Upgrade lie to 3.1.1 to work with yarn.
38
+
39
+### [1.5.5]
40
+
41
+* Roll back dropInstance breaking change.
42
+
43
+### [1.5.4]
44
+
45
+* Set `null` as `undefined` (for Edge).
46
+
47
+### [1.5.3]
48
+
49
+* Check whether localStorage is actually usable.
50
+
51
+### [1.5.2]
52
+
53
+* Prevent some unnecessary logs when calling `createInstance()`.
54
+
55
+### [1.5.1]
56
+
57
+* Try to re-establish IDB connection after an InvalidStateError.
58
+* Added Generics to `iterate()` TS Typings.
59
+* Define custom drivers syncronously when `_support` isn't a function.
60
+* Use the custom driver API for internal drivers, which makes possible to override parts of their implementation.
61
+
62
+### [1.5](https://github.com/mozilla/localForage/releases/tag/1.5.0)
63
+* **Major storage engine change for Safari**: We now use IndexedDB as the storage engine for Safari v10.1 (and above). This means that **pre-existing Safari** `>= 10.1` users will experience "data loss" **after upgrading your site from a previous version of localForage to v1.5**. In fact no data is lost but the engine will change so localForage will seem empty.
64
+  * You can use the [localForage 1.4 compatibility plugin](https://github.com/localForage/localForage-compatibility-1-4) after the upgrade so that all your Safari users (both old & new) continue to use the WebSQL driver.
65
+  * Alternativelly you can force a connection to WebSQL using [localForage's config](https://localforage.github.io/localForage/#settings-api-setdriver) to either keep using your existing WebSQL database or migrate to IndexedDB.
66
+
67
+### [1.4.2](https://github.com/mozilla/localForage/releases/tag/1.4.2)
68
+* Fixes #562.
69
+
70
+### [1.4.1](https://github.com/mozilla/localForage/releases/tag/1.4.1)
71
+* Fixes #520; browserify builds work properly
72
+
73
+### [1.4](https://github.com/mozilla/localForage/releases/tag/1.4.0)
74
+* Fixes #516; this version should always load the correct driver without that bug.
75
+
76
+### [1.3](https://github.com/mozilla/localForage/releases/tag/1.3.0)
77
+* We now use ES6 for our source code and `webpack` to bundle the `dist/` files.
78
+
79
+### [1.2](https://github.com/mozilla/localForage/releases/tag/1.2.0)
80
+* Iterate through the entire database using `iterate()`. ([#283](https://github.com/mozilla/localForage/pull/283); fixes [#186](https://github.com/mozilla/localForage/pull/186))
81
+
82
+### [1.1](https://github.com/mozilla/localForage/releases/tag/1.1.0)
83
+* Custom drivers can be created using `defineDriver()`. ([#282](https://github.com/mozilla/localForage/pull/282); fixes [#267](https://github.com/mozilla/localForage/pull/267))
84
+
85
+### [1.0.3](https://github.com/mozilla/localForage/releases/tag/1.0.3)
86
+* `config()` accepts a new option: `driver`, so users can set the driver during config rather than using `setDriver()`. ([#273](https://github.com/mozilla/localForage/pull/273); fixes [#168](https://github.com/mozilla/localForage/pull/168))
87
+
88
+### [1.0](https://github.com/mozilla/localForage/releases/tag/1.0.0)
89
+
90
+* It is no longer necessary to queue commands using `ready()` when using RequireJS. ([723cc94e06](https://github.com/mozilla/localForage/commit/723cc94e06af4f5ba4c53fa65524ccd5f6c4432e))
91
+* `setDriver` now accepts an array of drivers to be used, in order of preference, instead of simply a string. The string option is still supported. (eg. now one can use `setDriver(['WebSQL', 'localStorage'])` instead of `setDriver('WebSQL')`)
92
+* node-style, error-first argument method signatures are used for callbacks. Promises don't use error-first method signatures; instead they supply an error to the promise's `reject()` function.
93
+
94
+### [0.9](https://github.com/mozilla/localForage/releases/tag/0.9.1)
95
+
96
+This release drops support for some legacy browsers, though not actually the
97
+ones you might think. localForage's new policy is to support the current
98
+version of all major browsers plus up to three versions back.
99
+
100
+* Add built versions without the Promises polyfill to `dist/` directory. ([#172](https://github.com/mozilla/localForage/pull/172))
101
+* **Drop support for Firefox 3.5. Minimum version is now Firefox 25.** (Technically, Firefox 4+ seems to work.)
102
+* **Drop support for Chrome 31 and below. Minimum version is now Chrome 32.**
103
+* Fix a **lot** of bugs. Especially in Internet Exploder.
104
+* Switch to Mocha tests and test on [Sauce Labs](https://saucelabs.com/).
105
+* Add a `keys()` method. ([#180](https://github.com/mozilla/localForage/pull/180))
106
+* Check for localStorage instead of assuming it's available. ([#183](https://github.com/mozilla/localForage/pull/183))
107
+
108
+### [Version 0.8](https://github.com/mozilla/localForage/releases/tag/0.8.1)
109
+
110
+* Add support for web workers. ([#144](https://github.com/mozilla/localForage/pull/144), [#147](https://github.com/mozilla/localForage/pull/147)).
111
+
112
+### [Version 0.6.1](https://github.com/mozilla/localForage/releases/tag/0.6.1)
113
+
114
+* Put built versions back in `dist/` directory.
115
+
116
+### [Version 0.6.0](https://github.com/mozilla/localForage/releases/tag/0.6.0)
117
+
118
+* Add `localforage.config`. ([#40](https://github.com/mozilla/localForage/pull/140))
119
+* Fix iFrame bug in WebKit. ([#78](https://github.com/mozilla/localForage/issues/78))
120
+* Improve error handling. ([#60](https://github.com/mozilla/localForage/issues/60))
121
+* Remove support for `window.localForageConfig`. ([#135](https://github.com/mozilla/localForage/issues/135))
122
+
123
+### [Version 0.4](https://github.com/mozilla/localForage/releases/tag/0.4.0)
124
+
125
+* Built versions of localForage are now in the top-level directory. ([2d11c90](https://github.com/mozilla/localForage/commit/2d11c90))
126
+
127
+### [Version 0.3](https://github.com/mozilla/localForage/releases/tag/0.3.0)
128
+
129
+* Check code quality in test suite ([#124](https://github.com/mozilla/localForage/pull/124))
130
+* `_initDriver()` is called after first public API call ([#119](https://github.com/mozilla/localForage/pull/119))
131
+
132
+### [Version 0.2.1](https://github.com/mozilla/localForage/releases/tag/0.2.1)
133
+
134
+* Allow configuration of WebSQL DB size ([commit](https://github.com/mozilla/localForage/commit/6e78fff51a23e729206a03e5b750e959d8610f8c))
135
+* Use bower for JS dependencies instead of `vendor/` folder ([#109](https://github.com/mozilla/localForage/pull/109))
136
+
137
+### [Version 0.2.0](https://github.com/mozilla/localForage/releases/tag/0.2.0)
138
+
139
+* Add support for ArrayBuffer, Blob, and TypedArrays ([#54](https://github.com/mozilla/localForage/pull/54), [#73](https://github.com/mozilla/localForage/pull/73))
140
+
141
+### [Version 0.1.1](https://github.com/mozilla/localForage/releases/tag/0.1.1)
142
+
143
+* Added config options to allow users to set their own database names, etc. ([#100](https://github.com/mozilla/localForage/pull/100))
144
+
145
+---
146
+
147
+### March 16th, 2014
148
+
149
+* Moved Backbone adapter to its own repository ([b7987b3091855379d4908376b668b4b51a6fedfe](https://github.com/mozilla/localForage/commit/b7987b3091855379d4908376b668b4b51a6fedfe))
150
+
151
+### March 13th, 2014
152
+
153
+* Changed `localforage.driver` to a function instead of the string directly ([49415145021b0029d2521182de6e338e048fe5b1](https://github.com/mozilla/localForage/commit/49415145021b0029d2521182de6e338e048fe5b1))
154
+
155
+### March 4th, 2014
156
+
157
+* Changed the IndexedDB database name from `asyncStorage` to `localforage` ([f4e0156a29969a79005ac27b303d7e321a720fc6](https://github.com/mozilla/localForage/commit/f4e0156a29969a79005ac27b303d7e321a720fc6))

+ 59
- 0
node_modules/localforage/CONTRIBUTING.md View File

@@ -0,0 +1,59 @@
1
+# Filing issues
2
+
3
+Please
4
+[check the existing issues](https://github.com/mozilla/localForage/issues) to
5
+make sure your issue hasn't already been filed.
6
+
7
+If you have a bug to report, please file it.
8
+You are also encouraged to create an example (or [edit an existing one](http://codepen.io/thgreasi/pen/ojYKeE)) to showcase your issue.
9
+
10
+If you'd like to see a feature
11
+implemented, you can file an issue, but know that pull requests for small
12
+things like adding a line in a config file will get more attention than an
13
+issue asking someone else to do it.
14
+
15
+See below for [issues that have been discussed and will be rejected](#features-localforage-will-reject).
16
+
17
+# Contributing to localForage
18
+
19
+First off: thanks! Open source software (and thus all software) exists because
20
+of people like you. <3
21
+
22
+If you'd like to contribute to localForage, it's as simple as opening a pull
23
+request on GitHub. After that someone will code review your work and either
24
+ask you to fix any errors or merge the code into master. Here are a few tips:
25
+
26
+* **all drivers must have the same public API**: refer to [the API tests](https://github.com/mozilla/localForage/blob/master/test/test.api.coffee) for how we ensure this, but simply put: all drivers should share the _exact same_ outward-facing API
27
+* **do your work on a feature branch**: this keeps things clean and easy
28
+* **try to rebase master into your branch**: this keeps the commit history clean and avoids merge commits inside feature branches
29
+* **write tests**: if you're adding new features, _please_ write tests; likewise, if you're fixing a bug that wasn't previously caught by a test, please add one
30
+* **run `grunt build` before you commit**: this will build out the files in the `dist/` folder and ensure your tests pass
31
+
32
+Please commit changes at the top-level folder along with your changes in the
33
+`src/` folder--**do not make these changes separate commits**. These are the
34
+built versions of `localforage.js` and `localforage.min.js`, which are
35
+used by bower.
36
+
37
+If you have any questions, need some help, or anything else, don't feel shy!
38
+The team behind this library is often available on IRC
39
+([irc.mozilla.org](https://wiki.mozilla.org/IRC) on the `#apps` channel).
40
+
41
+## Coding Style
42
+
43
+All code can be tested for style by running the unit tests (`npm test`). This will make sure your code conforms to our styleguide. (You can read the rules in `.jshint` and `.jscsrc`.)
44
+
45
+## Features localForage will reject
46
+
47
+### node.js support
48
+
49
+localForage is a browser library with a specific focus on client-side,
50
+offline storage. It is not a general-purpose storage library and is not meant
51
+to allow for the same API on the client and the server. Implementing the
52
+localForage API wouldn't be hard (it's just localStorage with callbacks and
53
+ES6 promises), but it's a job for another library.
54
+
55
+### Legacy browser support
56
+
57
+Basically this means anything before IE 8. I know there are hacky ways to
58
+support storage with cookies or IE Userdata or whatever, but anything worse
59
+than localStorage isn't worth investing into.

+ 201
- 0
node_modules/localforage/LICENSE View File

@@ -0,0 +1,201 @@
1
+                                 Apache License
2
+                           Version 2.0, January 2004
3
+                        http://www.apache.org/licenses/
4
+
5
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+   1. Definitions.
8
+
9
+      "License" shall mean the terms and conditions for use, reproduction,
10
+      and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+      "Licensor" shall mean the copyright owner or entity authorized by
13
+      the copyright owner that is granting the License.
14
+
15
+      "Legal Entity" shall mean the union of the acting entity and all
16
+      other entities that control, are controlled by, or are under common
17
+      control with that entity. For the purposes of this definition,
18
+      "control" means (i) the power, direct or indirect, to cause the
19
+      direction or management of such entity, whether by contract or
20
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+      outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+      "You" (or "Your") shall mean an individual or Legal Entity
24
+      exercising permissions granted by this License.
25
+
26
+      "Source" form shall mean the preferred form for making modifications,
27
+      including but not limited to software source code, documentation
28
+      source, and configuration files.
29
+
30
+      "Object" form shall mean any form resulting from mechanical
31
+      transformation or translation of a Source form, including but
32
+      not limited to compiled object code, generated documentation,
33
+      and conversions to other media types.
34
+
35
+      "Work" shall mean the work of authorship, whether in Source or
36
+      Object form, made available under the License, as indicated by a
37
+      copyright notice that is included in or attached to the work
38
+      (an example is provided in the Appendix below).
39
+
40
+      "Derivative Works" shall mean any work, whether in Source or Object
41
+      form, that is based on (or derived from) the Work and for which the
42
+      editorial revisions, annotations, elaborations, or other modifications
43
+      represent, as a whole, an original work of authorship. For the purposes
44
+      of this License, Derivative Works shall not include works that remain
45
+      separable from, or merely link (or bind by name) to the interfaces of,
46
+      the Work and Derivative Works thereof.
47
+
48
+      "Contribution" shall mean any work of authorship, including
49
+      the original version of the Work and any modifications or additions
50
+      to that Work or Derivative Works thereof, that is intentionally
51
+      submitted to Licensor for inclusion in the Work by the copyright owner
52
+      or by an individual or Legal Entity authorized to submit on behalf of
53
+      the copyright owner. For the purposes of this definition, "submitted"
54
+      means any form of electronic, verbal, or written communication sent
55
+      to the Licensor or its representatives, including but not limited to
56
+      communication on electronic mailing lists, source code control systems,
57
+      and issue tracking systems that are managed by, or on behalf of, the
58
+      Licensor for the purpose of discussing and improving the Work, but
59
+      excluding communication that is conspicuously marked or otherwise
60
+      designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+      "Contributor" shall mean Licensor and any individual or Legal Entity
63
+      on behalf of whom a Contribution has been received by Licensor and
64
+      subsequently incorporated within the Work.
65
+
66
+   2. Grant of Copyright License. Subject to the terms and conditions of
67
+      this License, each Contributor hereby grants to You a perpetual,
68
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+      copyright license to reproduce, prepare Derivative Works of,
70
+      publicly display, publicly perform, sublicense, and distribute the
71
+      Work and such Derivative Works in Source or Object form.
72
+
73
+   3. Grant of Patent License. Subject to the terms and conditions of
74
+      this License, each Contributor hereby grants to You a perpetual,
75
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+      (except as stated in this section) patent license to make, have made,
77
+      use, offer to sell, sell, import, and otherwise transfer the Work,
78
+      where such license applies only to those patent claims licensable
79
+      by such Contributor that are necessarily infringed by their
80
+      Contribution(s) alone or by combination of their Contribution(s)
81
+      with the Work to which such Contribution(s) was submitted. If You
82
+      institute patent litigation against any entity (including a
83
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+      or a Contribution incorporated within the Work constitutes direct
85
+      or contributory patent infringement, then any patent licenses
86
+      granted to You under this License for that Work shall terminate
87
+      as of the date such litigation is filed.
88
+
89
+   4. Redistribution. You may reproduce and distribute copies of the
90
+      Work or Derivative Works thereof in any medium, with or without
91
+      modifications, and in Source or Object form, provided that You
92
+      meet the following conditions:
93
+
94
+      (a) You must give any other recipients of the Work or
95
+          Derivative Works a copy of this License; and
96
+
97
+      (b) You must cause any modified files to carry prominent notices
98
+          stating that You changed the files; and
99
+
100
+      (c) You must retain, in the Source form of any Derivative Works
101
+          that You distribute, all copyright, patent, trademark, and
102
+          attribution notices from the Source form of the Work,
103
+          excluding those notices that do not pertain to any part of
104
+          the Derivative Works; and
105
+
106
+      (d) If the Work includes a "NOTICE" text file as part of its
107
+          distribution, then any Derivative Works that You distribute must
108
+          include a readable copy of the attribution notices contained
109
+          within such NOTICE file, excluding those notices that do not
110
+          pertain to any part of the Derivative Works, in at least one
111
+          of the following places: within a NOTICE text file distributed
112
+          as part of the Derivative Works; within the Source form or
113
+          documentation, if provided along with the Derivative Works; or,
114
+          within a display generated by the Derivative Works, if and
115
+          wherever such third-party notices normally appear. The contents
116
+          of the NOTICE file are for informational purposes only and
117
+          do not modify the License. You may add Your own attribution
118
+          notices within Derivative Works that You distribute, alongside
119
+          or as an addendum to the NOTICE text from the Work, provided
120
+          that such additional attribution notices cannot be construed
121
+          as modifying the License.
122
+
123
+      You may add Your own copyright statement to Your modifications and
124
+      may provide additional or different license terms and conditions
125
+      for use, reproduction, or distribution of Your modifications, or
126
+      for any such Derivative Works as a whole, provided Your use,
127
+      reproduction, and distribution of the Work otherwise complies with
128
+      the conditions stated in this License.
129
+
130
+   5. Submission of Contributions. Unless You explicitly state otherwise,
131
+      any Contribution intentionally submitted for inclusion in the Work
132
+      by You to the Licensor shall be under the terms and conditions of
133
+      this License, without any additional terms or conditions.
134
+      Notwithstanding the above, nothing herein shall supersede or modify
135
+      the terms of any separate license agreement you may have executed
136
+      with Licensor regarding such Contributions.
137
+
138
+   6. Trademarks. This License does not grant permission to use the trade
139
+      names, trademarks, service marks, or product names of the Licensor,
140
+      except as required for reasonable and customary use in describing the
141
+      origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+   7. Disclaimer of Warranty. Unless required by applicable law or
144
+      agreed to in writing, Licensor provides the Work (and each
145
+      Contributor provides its Contributions) on an "AS IS" BASIS,
146
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+      implied, including, without limitation, any warranties or conditions
148
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+      PARTICULAR PURPOSE. You are solely responsible for determining the
150
+      appropriateness of using or redistributing the Work and assume any
151
+      risks associated with Your exercise of permissions under this License.
152
+
153
+   8. Limitation of Liability. In no event and under no legal theory,
154
+      whether in tort (including negligence), contract, or otherwise,
155
+      unless required by applicable law (such as deliberate and grossly
156
+      negligent acts) or agreed to in writing, shall any Contributor be
157
+      liable to You for damages, including any direct, indirect, special,
158
+      incidental, or consequential damages of any character arising as a
159
+      result of this License or out of the use or inability to use the
160
+      Work (including but not limited to damages for loss of goodwill,
161
+      work stoppage, computer failure or malfunction, or any and all
162
+      other commercial damages or losses), even if such Contributor
163
+      has been advised of the possibility of such damages.
164
+
165
+   9. Accepting Warranty or Additional Liability. While redistributing
166
+      the Work or Derivative Works thereof, You may choose to offer,
167
+      and charge a fee for, acceptance of support, warranty, indemnity,
168
+      or other liability obligations and/or rights consistent with this
169
+      License. However, in accepting such obligations, You may act only
170
+      on Your own behalf and on Your sole responsibility, not on behalf
171
+      of any other Contributor, and only if You agree to indemnify,
172
+      defend, and hold each Contributor harmless for any liability
173
+      incurred by, or claims asserted against, such Contributor by reason
174
+      of your accepting any such warranty or additional liability.
175
+
176
+   END OF TERMS AND CONDITIONS
177
+
178
+   APPENDIX: How to apply the Apache License to your work.
179
+
180
+      To apply the Apache License to your work, attach the following
181
+      boilerplate notice, with the fields enclosed by brackets "{}"
182
+      replaced with your own identifying information. (Don't include
183
+      the brackets!)  The text should be enclosed in the appropriate
184
+      comment syntax for the file format. We also recommend that a
185
+      file or class name and description of purpose be included on the
186
+      same "printed page" as the copyright notice for easier
187
+      identification within third-party archives.
188
+
189
+   Copyright 2014 Mozilla
190
+
191
+   Licensed under the Apache License, Version 2.0 (the "License");
192
+   you may not use this file except in compliance with the License.
193
+   You may obtain a copy of the License at
194
+
195
+       http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+   Unless required by applicable law or agreed to in writing, software
198
+   distributed under the License is distributed on an "AS IS" BASIS,
199
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+   See the License for the specific language governing permissions and
201
+   limitations under the License.

+ 258
- 0
node_modules/localforage/README.md View File

@@ -0,0 +1,258 @@
1
+# localForage
2
+[![Build Status](https://travis-ci.org/localForage/localForage.svg?branch=master)](http://travis-ci.org/localForage/localForage)
3
+[![NPM version](https://badge.fury.io/js/localforage.svg)](http://badge.fury.io/js/localforage)
4
+[![Dependency Status](https://img.shields.io/david/localForage/localForage.svg)](https://david-dm.org/localForage/localForage)
5
+[![npm](https://img.shields.io/npm/dm/localforage.svg?maxAge=2592000)](https://npmcharts.com/compare/localforage?minimal=true)
6
+[![jsDelivr Hits](https://data.jsdelivr.com/v1/package/npm/localforage/badge?style=rounded)](https://www.jsdelivr.com/package/npm/localforage)
7
+[![minzipped size](https://badgen.net/bundlephobia/minzip/localforage)](https://bundlephobia.com/result?p=localforage@1.9.0)
8
+
9
+localForage is a fast and simple storage library for JavaScript. localForage
10
+improves the offline experience of your web app by using asynchronous storage
11
+(IndexedDB or WebSQL) with a simple, `localStorage`-like API.
12
+
13
+localForage uses localStorage in browsers with no IndexedDB or
14
+WebSQL support. See [the wiki for detailed compatibility info][supported browsers].
15
+
16
+To use localForage, just drop a single JavaScript file into your page:
17
+
18
+```html
19
+<script src="localforage/dist/localforage.js"></script>
20
+<script>localforage.getItem('something', myCallback);</script>
21
+```
22
+Try the [live example](http://codepen.io/thgreasi/pen/ojYKeE).
23
+
24
+Download the [latest localForage from GitHub](https://github.com/localForage/localForage/releases/latest), or install with
25
+[npm](https://www.npmjs.com/):
26
+
27
+```bash
28
+npm install localforage
29
+```
30
+
31
+[supported browsers]: https://github.com/localForage/localForage/wiki/Supported-Browsers-Platforms
32
+
33
+## Support
34
+
35
+Lost? Need help? Try the
36
+[localForage API documentation](https://localforage.github.io/localForage). [localForage API文档也有中文版。](https://localforage.docschina.org)
37
+
38
+If you're having trouble using the library, running the tests, or want to contribute to localForage, please look through the [existing issues](https://github.com/localForage/localForage/issues) for your problem first before creating a new one. If you still need help, [feel free to file an issue](https://github.com/localForage/localForage/issues/new).
39
+
40
+# How to use localForage
41
+
42
+## Callbacks vs Promises
43
+
44
+Because localForage uses async storage, it has an async API.
45
+It's otherwise exactly the same as the
46
+[localStorage API](https://hacks.mozilla.org/2009/06/localstorage/).
47
+
48
+localForage has a dual API that allows you to either use Node-style callbacks
49
+or [Promises](https://www.promisejs.org/). If you are unsure which one is right for you, it's recommended to use Promises.
50
+
51
+Here's an example of the Node-style callback form:
52
+
53
+```js
54
+localforage.setItem('key', 'value', function (err) {
55
+  // if err is non-null, we got an error
56
+  localforage.getItem('key', function (err, value) {
57
+    // if err is non-null, we got an error. otherwise, value is the value
58
+  });
59
+});
60
+```
61
+
62
+And the Promise form:
63
+
64
+```js
65
+localforage.setItem('key', 'value').then(function () {
66
+  return localforage.getItem('key');
67
+}).then(function (value) {
68
+  // we got our value
69
+}).catch(function (err) {
70
+  // we got an error
71
+});
72
+```
73
+
74
+Or, use `async`/`await`:
75
+
76
+```js
77
+try {
78
+    const value = await localforage.getItem('somekey');
79
+    // This code runs once the value has been loaded
80
+    // from the offline store.
81
+    console.log(value);
82
+} catch (err) {
83
+    // This code runs if there were any errors.
84
+    console.log(err);
85
+}
86
+```
87
+
88
+For more examples, please visit [the API docs](https://localforage.github.io/localForage).
89
+
90
+## Storing Blobs, TypedArrays, and other JS objects
91
+
92
+You can store any type in localForage; you aren't limited to strings like in
93
+localStorage. Even if localStorage is your storage backend, localForage
94
+automatically does `JSON.parse()` and `JSON.stringify()` when getting/setting
95
+values.
96
+
97
+localForage supports storing all native JS objects that can be serialized to
98
+JSON, as well as ArrayBuffers, Blobs, and TypedArrays. Check the
99
+[API docs][api] for a full list of types supported by localForage.
100
+
101
+All types are supported in every storage backend, though storage limits in
102
+localStorage make storing many large Blobs impossible.
103
+
104
+[api]: https://localforage.github.io/localForage/#data-api-setitem
105
+
106
+## Configuration
107
+
108
+You can set database information with the `config()` method.
109
+Available options are `driver`, `name`, `storeName`, `version`, `size`, and
110
+`description`.
111
+
112
+Example:
113
+```javascript
114
+localforage.config({
115
+    driver      : localforage.WEBSQL, // Force WebSQL; same as using setDriver()
116
+    name        : 'myApp',
117
+    version     : 1.0,
118
+    size        : 4980736, // Size of database, in bytes. WebSQL-only for now.
119
+    storeName   : 'keyvaluepairs', // Should be alphanumeric, with underscores.
120
+    description : 'some description'
121
+});
122
+```
123
+
124
+**Note:** you must call `config()` _before_ you interact with your data. This
125
+means calling `config()` before using `getItem()`, `setItem()`, `removeItem()`,
126
+`clear()`, `key()`, `keys()` or `length()`.
127
+
128
+## Multiple instances
129
+
130
+You can create multiple instances of localForage that point to different stores
131
+using `createInstance`. All the configuration options used by
132
+[`config`](#configuration) are supported.
133
+
134
+``` javascript
135
+var store = localforage.createInstance({
136
+  name: "nameHere"
137
+});
138
+
139
+var otherStore = localforage.createInstance({
140
+  name: "otherName"
141
+});
142
+
143
+// Setting the key on one of these doesn't affect the other.
144
+store.setItem("key", "value");
145
+otherStore.setItem("key", "value2");
146
+```
147
+
148
+## RequireJS
149
+
150
+You can use localForage with [RequireJS](http://requirejs.org/):
151
+
152
+```javascript
153
+define(['localforage'], function(localforage) {
154
+    // As a callback:
155
+    localforage.setItem('mykey', 'myvalue', console.log);
156
+
157
+    // With a Promise:
158
+    localforage.setItem('mykey', 'myvalue').then(console.log);
159
+});
160
+```
161
+
162
+## TypeScript
163
+
164
+If you have the [`allowSyntheticDefaultImports` compiler option](https://www.typescriptlang.org/docs/handbook/compiler-options.html) set to `true` in your [tsconfig.json](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) (supported in TypeScript v1.8+), you should use:
165
+
166
+```javascript
167
+import localForage from "localforage";
168
+```
169
+
170
+Otherwise you should use one of the following:
171
+
172
+```javascript
173
+import * as localForage from "localforage";
174
+// or, in case that the typescript version that you are using
175
+// doesn't support ES6 style imports for UMD modules like localForage
176
+import localForage = require("localforage");
177
+```
178
+
179
+## Framework Support
180
+
181
+If you use a framework listed, there's a localForage storage driver for the
182
+models in your framework so you can store data offline with localForage. We
183
+have drivers for the following frameworks:
184
+
185
+* [AngularJS](https://github.com/ocombe/angular-localForage)
186
+* [Angular 4 and up](https://github.com/Alorel/ngforage/)
187
+* [Backbone](https://github.com/localForage/localForage-backbone)
188
+* [Ember](https://github.com/genkgo/ember-localforage-adapter)
189
+* [Vue](https://github.com/dmlzj/vlf)
190
+* [NuxtJS](https://github.com/nuxt-community/localforage-module)
191
+
192
+If you have a driver you'd like listed, please
193
+[open an issue](https://github.com/localForage/localForage/issues/new) to have it
194
+added to this list.
195
+
196
+## Custom Drivers
197
+
198
+You can create your own driver if you want; see the
199
+[`defineDriver`](https://localforage.github.io/localForage/#driver-api-definedriver) API docs.
200
+
201
+There is a [list of custom drivers on the wiki][custom drivers].
202
+
203
+[custom drivers]: https://github.com/localForage/localForage/wiki/Custom-Drivers
204
+
205
+# Working on localForage
206
+
207
+You'll need [node/npm](http://nodejs.org/) and
208
+[bower](http://bower.io/#installing-bower).
209
+
210
+To work on localForage, you should start by
211
+[forking it](https://github.com/localForage/localForage/fork) and installing its
212
+dependencies. Replace `USERNAME` with your GitHub username and run the
213
+following:
214
+
215
+```bash
216
+# Install bower globally if you don't have it:
217
+npm install -g bower
218
+
219
+# Replace USERNAME with your GitHub username:
220
+git clone git@github.com:USERNAME/localForage.git
221
+cd localForage
222
+npm install
223
+bower install
224
+```
225
+
226
+Omitting the bower dependencies will cause the tests to fail!
227
+
228
+## Running Tests
229
+
230
+You need PhantomJS installed to run local tests. Run `npm test` (or,
231
+directly: `grunt test`). Your code must also pass the
232
+[linter](http://jshint.com/).
233
+
234
+localForage is designed to run in the browser, so the tests explicitly require
235
+a browser environment. Local tests are run on a headless WebKit (using
236
+[PhantomJS](http://phantomjs.org)).
237
+
238
+When you submit a pull request, tests will be run against all browsers that
239
+localForage supports on Travis CI using [Sauce Labs](https://saucelabs.com/).
240
+
241
+## Library Size
242
+As of version 1.7.3 the payload added to your app is rather small. Served using gzip compression, localForage will add less than 10k to your total bundle size:
243
+
244
+<dl>
245
+  <dt>minified</dt><dd>`~29kB`</dd>
246
+  <dt>gzipped</dt><dd>`~8.8kB`</dd>
247
+  <dt>brotli'd</dt><dd>`~7.8kB`</dd>
248
+</dl>
249
+
250
+# License
251
+
252
+This program is free software; it is distributed under an
253
+[Apache License](https://github.com/localForage/localForage/blob/master/LICENSE).
254
+
255
+---
256
+
257
+Copyright (c) 2013-2016 [Mozilla](https://mozilla.org)
258
+([Contributors](https://github.com/localForage/localForage/graphs/contributors)).

+ 27
- 0
node_modules/localforage/bower.json View File

@@ -0,0 +1,27 @@
1
+{
2
+    "name": "localforage",
3
+    "main": ["dist/localforage.js"],
4
+    "ignore": [
5
+        ".travis.yml",
6
+        "CONTRIBUTING.md",
7
+        "config.rb",
8
+        "Gemfile",
9
+        "Gemfile.lock",
10
+        "Rakefile",
11
+        "LICENSE",
12
+        "docs*",
13
+        "examples*",
14
+        "test*",
15
+        "site*"
16
+    ],
17
+    "dependencies": {},
18
+    "devDependencies": {
19
+        "es6-promise": "~1.0.0",
20
+        "requirejs": "~2.1.10",
21
+        "mocha": "~3.4.2",
22
+        "expect": "~0.3.1",
23
+        "assert": "~0.1.0",
24
+        "modernizr": "~2.8.1"
25
+    },
26
+    "version": "1.9.0"
27
+}

+ 23
- 0
node_modules/localforage/bower_components/assert/.bower.json View File

@@ -0,0 +1,23 @@
1
+{
2
+  "name": "assert",
3
+  "main": "assert.js",
4
+  "version": "0.1.0",
5
+  "homepage": "https://github.com/jgallen23/assert",
6
+  "license": "MIT",
7
+  "ignore": [
8
+    "**/.*",
9
+    "node_modules",
10
+    "bower_components",
11
+    "test",
12
+    "tests"
13
+  ],
14
+  "_release": "0.1.0",
15
+  "_resolution": {
16
+    "type": "version",
17
+    "tag": "0.1.0",
18
+    "commit": "6a955e68d0dceba3e682faa895ef54828623e27a"
19
+  },
20
+  "_source": "https://github.com/jgallen23/assert.git",
21
+  "_target": "~0.1.0",
22
+  "_originalSource": "assert"
23
+}

+ 50
- 0
node_modules/localforage/bower_components/assert/HISTORY.md View File

@@ -0,0 +1,50 @@
1
+
2
+0.1.0 / 2014-05-11 
3
+==================
4
+
5
+  * Merge branch 'master' of github.com:Jxck/assert
6
+  * fix captureStackTrace #8
7
+  * add compatible node version to README.md
8
+  * add lint to test/index-amd.html to test/index.html
9
+  * update to Node v0.11.10
10
+  * Merge pull request #7 from DavidBruant/patch-1
11
+  * ! is as good as !!!
12
+  * Merge pull request #6 from remy/master
13
+  * Attempt to get captureStackTrace support in other browsers
14
+  * Merge pull request #4 from OscarGodson/master
15
+  * Typo in package.json
16
+  * Add package.json file so it can be used with NPM
17
+  * add Object_keys from deep-equal for fix #3
18
+  * update to Node v0.9.9 assert.js
19
+  * update to 0.9.5
20
+  * remove require.js src file from test
21
+  * Merge pull request #2 from shovon/amd-support
22
+  * Added amd support.
23
+
24
+0.0.2 / 2014-01-17
25
+==================
26
+
27
+  * Switching component.json to bower.json to avoid deprecation warnings
28
+
29
+0.0.1 / 2012-12-06 
30
+==================
31
+
32
+  * added component.json for bower
33
+  * add Object.create comatibile for issue #1
34
+  * update assert to v0.8.1
35
+  * fix README.md
36
+  * to make it perfect: s/the both-sides/both sides/
37
+  * Assert to assert
38
+  * updates README
39
+  * add README.md
40
+  * add index.html for browser test
41
+  * fix replace for browser
42
+  * mod copyright
43
+  * add common object instead of require('common')
44
+  * semmicolon
45
+  * add test-assert.js
46
+  * remove case of buffer(browser dosen't has)
47
+  * define util.inherits instead of require('util')
48
+  * export assert to global or module
49
+  * modefy license
50
+  * initial commit

+ 40
- 0
node_modules/localforage/bower_components/assert/README.md View File

@@ -0,0 +1,40 @@
1
+# assert.js
2
+
3
+**LATEST COMPATIBLE VERSION:** [node v0.11.10](https://github.com/joyent/node/blob/v0.11.10-release/lib/assert.js)
4
+
5
+assert.js is a port of the Node.js standard assertion library for the browser.
6
+The original code and tests are from Node.js, and have been modified to be browser compatible.
7
+
8
+For example, you can use it with [Mocha](http://visionmedia.github.com/mocha/) to perform tests
9
+on the **both sides** (server-side and client-side). Mocha does not supply it's own assertion library.
10
+
11
+## run the same tests on both the client-side and server-side
12
+
13
+You can use the standard assert module when running mocha on Node.js.
14
+
15
+The same tests will run in the browser if you use this library.
16
+
17
+## how to use
18
+
19
+```html
20
+<script src="assert.js"></script>
21
+<script src="path/to/testing-framework.js"></script>
22
+<script src="path/to/your/test.js"></script>
23
+```
24
+
25
+## running test of this library
26
+
27
+### browser
28
+open ```test/index.html``` in your browser,
29
+and see the console.
30
+
31
+### node.js
32
+
33
+```shell
34
+> node test/test-assert.js
35
+All OK
36
+```
37
+
38
+## license
39
+
40
+MIT (same as Node.js)

+ 436
- 0
node_modules/localforage/bower_components/assert/assert.js View File

@@ -0,0 +1,436 @@
1
+// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2
+//
3
+// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
4
+//
5
+// Copyright (c) 2011 Jxck
6
+//
7
+// Originally from node.js (http://nodejs.org)
8
+// Copyright Joyent, Inc.
9
+//
10
+// Permission is hereby granted, free of charge, to any person obtaining a copy
11
+// of this software and associated documentation files (the 'Software'), to
12
+// deal in the Software without restriction, including without limitation the
13
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
14
+// sell copies of the Software, and to permit persons to whom the Software is
15
+// furnished to do so, subject to the following conditions:
16
+//
17
+// The above copyright notice and this permission notice shall be included in
18
+// all copies or substantial portions of the Software.
19
+//
20
+// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
24
+// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
+
27
+(function(global) {
28
+
29
+// Object.create compatible in IE
30
+var create = Object.create || function(p) {
31
+  if (!p) throw Error('no type');
32
+  function f() {};
33
+  f.prototype = p;
34
+  return new f();
35
+};
36
+
37
+// UTILITY
38
+var util = {
39
+  inherits: function(ctor, superCtor) {
40
+    ctor.super_ = superCtor;
41
+    ctor.prototype = create(superCtor.prototype, {
42
+      constructor: {
43
+        value: ctor,
44
+        enumerable: false,
45
+        writable: true,
46
+        configurable: true
47
+      }
48
+    });
49
+  },
50
+  isArray: function(ar) {
51
+    return Array.isArray(ar);
52
+  },
53
+  isBoolean: function(arg) {
54
+    return typeof arg === 'boolean';
55
+  },
56
+  isNull: function(arg) {
57
+    return arg === null;
58
+  },
59
+  isNullOrUndefined: function(arg) {
60
+    return arg == null;
61
+  },
62
+  isNumber: function(arg) {
63
+    return typeof arg === 'number';
64
+  },
65
+  isString: function(arg) {
66
+    return typeof arg === 'string';
67
+  },
68
+  isSymbol: function(arg) {
69
+    return typeof arg === 'symbol';
70
+  },
71
+  isUndefined: function(arg) {
72
+    return arg === void 0;
73
+  },
74
+  isRegExp: function(re) {
75
+    return util.isObject(re) && util.objectToString(re) === '[object RegExp]';
76
+  },
77
+  isObject: function(arg) {
78
+    return typeof arg === 'object' && arg !== null;
79
+  },
80
+  isDate: function(d) {
81
+    return util.isObject(d) && util.objectToString(d) === '[object Date]';
82
+  },
83
+  isError: function(e) {
84
+    return isObject(e) &&
85
+      (objectToString(e) === '[object Error]' || e instanceof Error);
86
+  },
87
+  isFunction: function(arg) {
88
+    return typeof arg === 'function';
89
+  },
90
+  isPrimitive: function(arg) {
91
+    return arg === null ||
92
+      typeof arg === 'boolean' ||
93
+      typeof arg === 'number' ||
94
+      typeof arg === 'string' ||
95
+      typeof arg === 'symbol' ||  // ES6 symbol
96
+      typeof arg === 'undefined';
97
+  },
98
+  objectToString: function(o) {
99
+    return Object.prototype.toString.call(o);
100
+  }
101
+};
102
+
103
+var pSlice = Array.prototype.slice;
104
+
105
+// from https://github.com/substack/node-deep-equal
106
+var Object_keys = typeof Object.keys === 'function'
107
+    ? Object.keys
108
+    : function (obj) {
109
+        var keys = [];
110
+        for (var key in obj) keys.push(key);
111
+        return keys;
112
+    }
113
+;
114
+
115
+// 1. The assert module provides functions that throw
116
+// AssertionError's when particular conditions are not met. The
117
+// assert module must conform to the following interface.
118
+
119
+var assert = ok;
120
+
121
+global['assert'] = assert;
122
+
123
+if (typeof module === 'object' && typeof module.exports === 'object') {
124
+  module.exports = assert;
125
+};
126
+
127
+// 2. The AssertionError is defined in assert.
128
+// new assert.AssertionError({ message: message,
129
+//                             actual: actual,
130
+//                             expected: expected })
131
+
132
+assert.AssertionError = function AssertionError(options) {
133
+  this.name = 'AssertionError';
134
+  this.actual = options.actual;
135
+  this.expected = options.expected;
136
+  this.operator = options.operator;
137
+  if (options.message) {
138
+    this.message = options.message;
139
+    this.generatedMessage = false;
140
+  } else {
141
+    this.message = getMessage(this);
142
+    this.generatedMessage = true;
143
+  }
144
+  var stackStartFunction = options.stackStartFunction || fail;
145
+
146
+  if (Error.captureStackTrace) {
147
+    Error.captureStackTrace(this, stackStartFunction);
148
+  } else {
149
+    // try to throw an error now, and from the stack property
150
+    // work out the line that called in to assert.js.
151
+    try {
152
+      this.stack = (new Error).stack.toString();
153
+    } catch (e) {}
154
+  }
155
+};
156
+
157
+// assert.AssertionError instanceof Error
158
+util.inherits(assert.AssertionError, Error);
159
+
160
+function replacer(key, value) {
161
+  if (util.isUndefined(value)) {
162
+    return '' + value;
163
+  }
164
+  if (util.isNumber(value) && (isNaN(value) || !isFinite(value))) {
165
+    return value.toString();
166
+  }
167
+  if (util.isFunction(value) || util.isRegExp(value)) {
168
+    return value.toString();
169
+  }
170
+  return value;
171
+}
172
+
173
+function truncate(s, n) {
174
+  if (util.isString(s)) {
175
+    return s.length < n ? s : s.slice(0, n);
176
+  } else {
177
+    return s;
178
+  }
179
+}
180
+
181
+function getMessage(self) {
182
+  return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
183
+         self.operator + ' ' +
184
+         truncate(JSON.stringify(self.expected, replacer), 128);
185
+}
186
+
187
+// At present only the three keys mentioned above are used and
188
+// understood by the spec. Implementations or sub modules can pass
189
+// other keys to the AssertionError's constructor - they will be
190
+// ignored.
191
+
192
+// 3. All of the following functions must throw an AssertionError
193
+// when a corresponding condition is not met, with a message that
194
+// may be undefined if not provided.  All assertion methods provide
195
+// both the actual and expected values to the assertion error for
196
+// display purposes.
197
+
198
+function fail(actual, expected, message, operator, stackStartFunction) {
199
+  throw new assert.AssertionError({
200
+    message: message,
201
+    actual: actual,
202
+    expected: expected,
203
+    operator: operator,
204
+    stackStartFunction: stackStartFunction
205
+  });
206
+}
207
+
208
+// EXTENSION! allows for well behaved errors defined elsewhere.
209
+assert.fail = fail;
210
+
211
+// 4. Pure assertion tests whether a value is truthy, as determined
212
+// by !!guard.
213
+// assert.ok(guard, message_opt);
214
+// This statement is equivalent to assert.equal(true, !!guard,
215
+// message_opt);. To test strictly for the value true, use
216
+// assert.strictEqual(true, guard, message_opt);.
217
+
218
+function ok(value, message) {
219
+  if (!value) fail(value, true, message, '==', assert.ok);
220
+}
221
+assert.ok = ok;
222
+
223
+// 5. The equality assertion tests shallow, coercive equality with
224
+// ==.
225
+// assert.equal(actual, expected, message_opt);
226
+
227
+assert.equal = function equal(actual, expected, message) {
228
+  if (actual != expected) fail(actual, expected, message, '==', assert.equal);
229
+};
230
+
231
+// 6. The non-equality assertion tests for whether two objects are not equal
232
+// with != assert.notEqual(actual, expected, message_opt);
233
+
234
+assert.notEqual = function notEqual(actual, expected, message) {
235
+  if (actual == expected) {
236
+    fail(actual, expected, message, '!=', assert.notEqual);
237
+  }
238
+};
239
+
240
+// 7. The equivalence assertion tests a deep equality relation.
241
+// assert.deepEqual(actual, expected, message_opt);
242
+
243
+assert.deepEqual = function deepEqual(actual, expected, message) {
244
+  if (!_deepEqual(actual, expected)) {
245
+    fail(actual, expected, message, 'deepEqual', assert.deepEqual);
246
+  }
247
+};
248
+
249
+function _deepEqual(actual, expected) {
250
+  // 7.1. All identical values are equivalent, as determined by ===.
251
+  if (actual === expected) {
252
+    return true;
253
+
254
+  // } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
255
+  //   if (actual.length != expected.length) return false;
256
+  //
257
+  //   for (var i = 0; i < actual.length; i++) {
258
+  //     if (actual[i] !== expected[i]) return false;
259
+  //   }
260
+  //
261
+  //   return true;
262
+
263
+  // 7.2. If the expected value is a Date object, the actual value is
264
+  // equivalent if it is also a Date object that refers to the same time.
265
+  } else if (util.isDate(actual) && util.isDate(expected)) {
266
+    return actual.getTime() === expected.getTime();
267
+
268
+  // 7.3 If the expected value is a RegExp object, the actual value is
269
+  // equivalent if it is also a RegExp object with the same source and
270
+  // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
271
+  } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
272
+    return actual.source === expected.source &&
273
+           actual.global === expected.global &&
274
+           actual.multiline === expected.multiline &&
275
+           actual.lastIndex === expected.lastIndex &&
276
+           actual.ignoreCase === expected.ignoreCase;
277
+
278
+  // 7.4. Other pairs that do not both pass typeof value == 'object',
279
+  // equivalence is determined by ==.
280
+  } else if (!util.isObject(actual) && !util.isObject(expected)) {
281
+    return actual == expected;
282
+
283
+  // 7.5 For all other Object pairs, including Array objects, equivalence is
284
+  // determined by having the same number of owned properties (as verified
285
+  // with Object.prototype.hasOwnProperty.call), the same set of keys
286
+  // (although not necessarily the same order), equivalent values for every
287
+  // corresponding key, and an identical 'prototype' property. Note: this
288
+  // accounts for both named and indexed properties on Arrays.
289
+  } else {
290
+    return objEquiv(actual, expected);
291
+  }
292
+}
293
+
294
+function isArguments(object) {
295
+  return Object.prototype.toString.call(object) == '[object Arguments]';
296
+}
297
+
298
+function objEquiv(a, b) {
299
+  if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
300
+    return false;
301
+  // an identical 'prototype' property.
302
+  if (a.prototype !== b.prototype) return false;
303
+  //~~~I've managed to break Object.keys through screwy arguments passing.
304
+  //   Converting to array solves the problem.
305
+  if (isArguments(a)) {
306
+    if (!isArguments(b)) {
307
+      return false;
308
+    }
309
+    a = pSlice.call(a);
310
+    b = pSlice.call(b);
311
+    return _deepEqual(a, b);
312
+  }
313
+  try {
314
+    var ka = Object_keys(a),
315
+        kb = Object_keys(b),
316
+        key, i;
317
+  } catch (e) {//happens when one is a string literal and the other isn't
318
+    return false;
319
+  }
320
+  // having the same number of owned properties (keys incorporates
321
+  // hasOwnProperty)
322
+  if (ka.length != kb.length)
323
+    return false;
324
+  //the same set of keys (although not necessarily the same order),
325
+  ka.sort();
326
+  kb.sort();
327
+  //~~~cheap key test
328
+  for (i = ka.length - 1; i >= 0; i--) {
329
+    if (ka[i] != kb[i])
330
+      return false;
331
+  }
332
+  //equivalent values for every corresponding key, and
333
+  //~~~possibly expensive deep test
334
+  for (i = ka.length - 1; i >= 0; i--) {
335
+    key = ka[i];
336
+    if (!_deepEqual(a[key], b[key])) return false;
337
+  }
338
+  return true;
339
+}
340
+
341
+// 8. The non-equivalence assertion tests for any deep inequality.
342
+// assert.notDeepEqual(actual, expected, message_opt);
343
+
344
+assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
345
+  if (_deepEqual(actual, expected)) {
346
+    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
347
+  }
348
+};
349
+
350
+// 9. The strict equality assertion tests strict equality, as determined by ===.
351
+// assert.strictEqual(actual, expected, message_opt);
352
+
353
+assert.strictEqual = function strictEqual(actual, expected, message) {
354
+  if (actual !== expected) {
355
+    fail(actual, expected, message, '===', assert.strictEqual);
356
+  }
357
+};
358
+
359
+// 10. The strict non-equality assertion tests for strict inequality, as
360
+// determined by !==.  assert.notStrictEqual(actual, expected, message_opt);
361
+
362
+assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
363
+  if (actual === expected) {
364
+    fail(actual, expected, message, '!==', assert.notStrictEqual);
365
+  }
366
+};
367
+
368
+function expectedException(actual, expected) {
369
+  if (!actual || !expected) {
370
+    return false;
371
+  }
372
+
373
+  if (Object.prototype.toString.call(expected) == '[object RegExp]') {
374
+    return expected.test(actual);
375
+  } else if (actual instanceof expected) {
376
+    return true;
377
+  } else if (expected.call({}, actual) === true) {
378
+    return true;
379
+  }
380
+
381
+  return false;
382
+}
383
+
384
+function _throws(shouldThrow, block, expected, message) {
385
+  var actual;
386
+
387
+  if (util.isString(expected)) {
388
+    message = expected;
389
+    expected = null;
390
+  }
391
+
392
+  try {
393
+    block();
394
+  } catch (e) {
395
+    actual = e;
396
+  }
397
+
398
+  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
399
+            (message ? ' ' + message : '.');
400
+
401
+  if (shouldThrow && !actual) {
402
+    fail(actual, expected, 'Missing expected exception' + message);
403
+  }
404
+
405
+  if (!shouldThrow && expectedException(actual, expected)) {
406
+    fail(actual, expected, 'Got unwanted exception' + message);
407
+  }
408
+
409
+  if ((shouldThrow && actual && expected &&
410
+      !expectedException(actual, expected)) || (!shouldThrow && actual)) {
411
+    throw actual;
412
+  }
413
+}
414
+
415
+// 11. Expected to throw an error:
416
+// assert.throws(block, Error_opt, message_opt);
417
+
418
+assert.throws = function(block, /*optional*/error, /*optional*/message) {
419
+  _throws.apply(this, [true].concat(pSlice.call(arguments)));
420
+};
421
+
422
+// EXTENSION! This is annoying to write outside this module.
423
+assert.doesNotThrow = function(block, /*optional*/message) {
424
+  _throws.apply(this, [false].concat(pSlice.call(arguments)));
425
+};
426
+
427
+assert.ifError = function(err) { if (err) {throw err;}};
428
+
429
+if (typeof define === 'function' && define.amd) {
430
+  define('assert', function () {
431
+    return assert;
432
+  });
433
+}
434
+
435
+})(this);
436
+

+ 14
- 0
node_modules/localforage/bower_components/assert/bower.json View File

@@ -0,0 +1,14 @@
1
+{
2
+  "name": "assert",
3
+  "main": "assert.js",
4
+  "version": "0.1.0",
5
+  "homepage": "https://github.com/jgallen23/assert",
6
+  "license": "MIT",
7
+  "ignore": [
8
+    "**/.*",
9
+    "node_modules",
10
+    "bower_components",
11
+    "test",
12
+    "tests"
13
+  ]
14
+}

+ 12
- 0
node_modules/localforage/bower_components/assert/package.json View File

@@ -0,0 +1,12 @@
1
+{
2
+  "name": "assert",
3
+  "version": "1.0.0",
4
+  "author": "Jxck <block.rxckin.beats@gmail.com>",
5
+  "description": "Porting Node.js assert.js to browser",
6
+  "contributors": [
7
+    "Jxck <block.rxckin.beats@gmail.com>",
8
+    "Oscar Godson <oscargodson@gmail.com>",
9
+    "Remy Sharp <remy@remysharp.com>"
10
+  ],
11
+  "repository": "git@github.com:Jxck/assert.git"
12
+}

+ 15
- 0
node_modules/localforage/bower_components/es6-promise/.bower.json View File

@@ -0,0 +1,15 @@
1
+{
2
+  "name": "es6-promise",
3
+  "version": "1.0.0",
4
+  "main": "./promise.js",
5
+  "homepage": "https://github.com/components/es6-promise",
6
+  "_release": "1.0.0",
7
+  "_resolution": {
8
+    "type": "version",
9
+    "tag": "v1.0.0",
10
+    "commit": "c95149ffaa2e8162601c57d4282362eac84f929b"
11
+  },
12
+  "_source": "https://github.com/components/es6-promise.git",
13
+  "_target": "~1.0.0",
14
+  "_originalSource": "es6-promise"
15
+}

+ 5
- 0
node_modules/localforage/bower_components/es6-promise/bower.json View File

@@ -0,0 +1,5 @@
1
+{
2
+  "name": "es6-promise",
3
+  "version": "1.0.0",
4
+  "main": "./promise.js"
5
+}

+ 684
- 0
node_modules/localforage/bower_components/es6-promise/promise.js View File

@@ -0,0 +1,684 @@
1
+(function() {
2
+var define, requireModule, require, requirejs;
3
+
4
+(function() {
5
+  var registry = {}, seen = {};
6
+
7
+  define = function(name, deps, callback) {
8
+    registry[name] = { deps: deps, callback: callback };
9
+  };
10
+
11
+  requirejs = require = requireModule = function(name) {
12
+  requirejs._eak_seen = registry;
13
+
14
+    if (seen[name]) { return seen[name]; }
15
+    seen[name] = {};
16
+
17
+    if (!registry[name]) {
18
+      throw new Error("Could not find module " + name);
19
+    }
20
+
21
+    var mod = registry[name],
22
+        deps = mod.deps,
23
+        callback = mod.callback,
24
+        reified = [],
25
+        exports;
26
+
27
+    for (var i=0, l=deps.length; i<l; i++) {
28
+      if (deps[i] === 'exports') {
29
+        reified.push(exports = {});
30
+      } else {
31
+        reified.push(requireModule(resolve(deps[i])));
32
+      }
33
+    }
34
+
35
+    var value = callback.apply(this, reified);
36
+    return seen[name] = exports || value;
37
+
38
+    function resolve(child) {
39
+      if (child.charAt(0) !== '.') { return child; }
40
+      var parts = child.split("/");
41
+      var parentBase = name.split("/").slice(0, -1);
42
+
43
+      for (var i=0, l=parts.length; i<l; i++) {
44
+        var part = parts[i];
45
+
46
+        if (part === '..') { parentBase.pop(); }
47
+        else if (part === '.') { continue; }
48
+        else { parentBase.push(part); }
49
+      }
50
+
51
+      return parentBase.join("/");
52
+    }
53
+  };
54
+})();
55
+
56
+define("promise/all", 
57
+  ["./utils","exports"],
58
+  function(__dependency1__, __exports__) {
59
+    "use strict";
60
+    /* global toString */
61
+
62
+    var isArray = __dependency1__.isArray;
63
+    var isFunction = __dependency1__.isFunction;
64
+
65
+    /**
66
+      Returns a promise that is fulfilled when all the given promises have been
67
+      fulfilled, or rejected if any of them become rejected. The return promise
68
+      is fulfilled with an array that gives all the values in the order they were
69
+      passed in the `promises` array argument.
70
+
71
+      Example:
72
+
73
+      ```javascript
74
+      var promise1 = RSVP.resolve(1);
75
+      var promise2 = RSVP.resolve(2);
76
+      var promise3 = RSVP.resolve(3);
77
+      var promises = [ promise1, promise2, promise3 ];
78
+
79
+      RSVP.all(promises).then(function(array){
80
+        // The array here would be [ 1, 2, 3 ];
81
+      });
82
+      ```
83
+
84
+      If any of the `promises` given to `RSVP.all` are rejected, the first promise
85
+      that is rejected will be given as an argument to the returned promises's
86
+      rejection handler. For example:
87
+
88
+      Example:
89
+
90
+      ```javascript
91
+      var promise1 = RSVP.resolve(1);
92
+      var promise2 = RSVP.reject(new Error("2"));
93
+      var promise3 = RSVP.reject(new Error("3"));
94
+      var promises = [ promise1, promise2, promise3 ];
95
+
96
+      RSVP.all(promises).then(function(array){
97
+        // Code here never runs because there are rejected promises!
98
+      }, function(error) {
99
+        // error.message === "2"
100
+      });
101
+      ```
102
+
103
+      @method all
104
+      @for RSVP
105
+      @param {Array} promises
106
+      @param {String} label
107
+      @return {Promise} promise that is fulfilled when all `promises` have been
108
+      fulfilled, or rejected if any of them become rejected.
109
+    */
110
+    function all(promises) {
111
+      /*jshint validthis:true */
112
+      var Promise = this;
113
+
114
+      if (!isArray(promises)) {
115
+        throw new TypeError('You must pass an array to all.');
116
+      }
117
+
118
+      return new Promise(function(resolve, reject) {
119
+        var results = [], remaining = promises.length,
120
+        promise;
121
+
122
+        if (remaining === 0) {
123
+          resolve([]);
124
+        }
125
+
126
+        function resolver(index) {
127
+          return function(value) {
128
+            resolveAll(index, value);
129
+          };
130
+        }
131
+
132
+        function resolveAll(index, value) {
133
+          results[index] = value;
134
+          if (--remaining === 0) {
135
+            resolve(results);
136
+          }
137
+        }
138
+
139
+        for (var i = 0; i < promises.length; i++) {
140
+          promise = promises[i];
141
+
142
+          if (promise && isFunction(promise.then)) {
143
+            promise.then(resolver(i), reject);
144
+          } else {
145
+            resolveAll(i, promise);
146
+          }
147
+        }
148
+      });
149
+    }
150
+
151
+    __exports__.all = all;
152
+  });
153
+define("promise/asap", 
154
+  ["exports"],
155
+  function(__exports__) {
156
+    "use strict";
157
+    var browserGlobal = (typeof window !== 'undefined') ? window : {};
158
+    var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
159
+    var local = (typeof global !== 'undefined') ? global : (this === undefined? window:this);
160
+
161
+    // node
162
+    function useNextTick() {
163
+      return function() {
164
+        process.nextTick(flush);
165
+      };
166
+    }
167
+
168
+    function useMutationObserver() {
169
+      var iterations = 0;
170
+      var observer = new BrowserMutationObserver(flush);
171
+      var node = document.createTextNode('');
172
+      observer.observe(node, { characterData: true });
173
+
174
+      return function() {
175
+        node.data = (iterations = ++iterations % 2);
176
+      };
177
+    }
178
+
179
+    function useSetTimeout() {
180
+      return function() {
181
+        local.setTimeout(flush, 1);
182
+      };
183
+    }
184
+
185
+    var queue = [];
186
+    function flush() {
187
+      for (var i = 0; i < queue.length; i++) {
188
+        var tuple = queue[i];
189
+        var callback = tuple[0], arg = tuple[1];
190
+        callback(arg);
191
+      }
192
+      queue = [];
193
+    }
194
+
195
+    var scheduleFlush;
196
+
197
+    // Decide what async method to use to triggering processing of queued callbacks:
198
+    if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') {
199
+      scheduleFlush = useNextTick();
200
+    } else if (BrowserMutationObserver) {
201
+      scheduleFlush = useMutationObserver();
202
+    } else {
203
+      scheduleFlush = useSetTimeout();
204
+    }
205
+
206
+    function asap(callback, arg) {
207
+      var length = queue.push([callback, arg]);
208
+      if (length === 1) {
209
+        // If length is 1, that means that we need to schedule an async flush.
210
+        // If additional callbacks are queued before the queue is flushed, they
211
+        // will be processed by this flush that we are scheduling.
212
+        scheduleFlush();
213
+      }
214
+    }
215
+
216
+    __exports__.asap = asap;
217
+  });
218
+define("promise/config", 
219
+  ["exports"],
220
+  function(__exports__) {
221
+    "use strict";
222
+    var config = {
223
+      instrument: false
224
+    };
225
+
226
+    function configure(name, value) {
227
+      if (arguments.length === 2) {
228
+        config[name] = value;
229
+      } else {
230
+        return config[name];
231
+      }
232
+    }
233
+
234
+    __exports__.config = config;
235
+    __exports__.configure = configure;
236
+  });
237
+define("promise/polyfill", 
238
+  ["./promise","./utils","exports"],
239
+  function(__dependency1__, __dependency2__, __exports__) {
240
+    "use strict";
241
+    /*global self*/
242
+    var RSVPPromise = __dependency1__.Promise;
243
+    var isFunction = __dependency2__.isFunction;
244
+
245
+    function polyfill() {
246
+      var local;
247
+
248
+      if (typeof global !== 'undefined') {
249
+        local = global;
250
+      } else if (typeof window !== 'undefined' && window.document) {
251
+        local = window;
252
+      } else {
253
+        local = self;
254
+      }
255
+
256
+      var es6PromiseSupport = 
257
+        "Promise" in local &&
258
+        // Some of these methods are missing from
259
+        // Firefox/Chrome experimental implementations
260
+        "resolve" in local.Promise &&
261
+        "reject" in local.Promise &&
262
+        "all" in local.Promise &&
263
+        "race" in local.Promise &&
264
+        // Older version of the spec had a resolver object
265
+        // as the arg rather than a function
266
+        (function() {
267
+          var resolve;
268
+          new local.Promise(function(r) { resolve = r; });
269
+          return isFunction(resolve);
270
+        }());
271
+
272
+      if (!es6PromiseSupport) {
273
+        local.Promise = RSVPPromise;
274
+      }
275
+    }
276
+
277
+    __exports__.polyfill = polyfill;
278
+  });
279
+define("promise/promise", 
280
+  ["./config","./utils","./all","./race","./resolve","./reject","./asap","exports"],
281
+  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
282
+    "use strict";
283
+    var config = __dependency1__.config;
284
+    var configure = __dependency1__.configure;
285
+    var objectOrFunction = __dependency2__.objectOrFunction;
286
+    var isFunction = __dependency2__.isFunction;
287
+    var now = __dependency2__.now;
288
+    var all = __dependency3__.all;
289
+    var race = __dependency4__.race;
290
+    var staticResolve = __dependency5__.resolve;
291
+    var staticReject = __dependency6__.reject;
292
+    var asap = __dependency7__.asap;
293
+
294
+    var counter = 0;
295
+
296
+    config.async = asap; // default async is asap;
297
+
298
+    function Promise(resolver) {
299
+      if (!isFunction(resolver)) {
300
+        throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
301
+      }
302
+
303
+      if (!(this instanceof Promise)) {
304
+        throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
305
+      }
306
+
307
+      this._subscribers = [];
308
+
309
+      invokeResolver(resolver, this);
310
+    }
311
+
312
+    function invokeResolver(resolver, promise) {
313
+      function resolvePromise(value) {
314
+        resolve(promise, value);
315
+      }
316
+
317
+      function rejectPromise(reason) {
318
+        reject(promise, reason);
319
+      }
320
+
321
+      try {
322
+        resolver(resolvePromise, rejectPromise);
323
+      } catch(e) {
324
+        rejectPromise(e);
325
+      }
326
+    }
327
+
328
+    function invokeCallback(settled, promise, callback, detail) {
329
+      var hasCallback = isFunction(callback),
330
+          value, error, succeeded, failed;
331
+
332
+      if (hasCallback) {
333
+        try {
334
+          value = callback(detail);
335
+          succeeded = true;
336
+        } catch(e) {
337
+          failed = true;
338
+          error = e;
339
+        }
340
+      } else {
341
+        value = detail;
342
+        succeeded = true;
343
+      }
344
+
345
+      if (handleThenable(promise, value)) {
346
+        return;
347
+      } else if (hasCallback && succeeded) {
348
+        resolve(promise, value);
349
+      } else if (failed) {
350
+        reject(promise, error);
351
+      } else if (settled === FULFILLED) {
352
+        resolve(promise, value);
353
+      } else if (settled === REJECTED) {
354
+        reject(promise, value);
355
+      }
356
+    }
357
+
358
+    var PENDING   = void 0;
359
+    var SEALED    = 0;
360
+    var FULFILLED = 1;
361
+    var REJECTED  = 2;
362
+
363
+    function subscribe(parent, child, onFulfillment, onRejection) {
364
+      var subscribers = parent._subscribers;
365
+      var length = subscribers.length;
366
+
367
+      subscribers[length] = child;
368
+      subscribers[length + FULFILLED] = onFulfillment;
369
+      subscribers[length + REJECTED]  = onRejection;
370
+    }
371
+
372
+    function publish(promise, settled) {
373
+      var child, callback, subscribers = promise._subscribers, detail = promise._detail;
374
+
375
+      for (var i = 0; i < subscribers.length; i += 3) {
376
+        child = subscribers[i];
377
+        callback = subscribers[i + settled];
378
+
379
+        invokeCallback(settled, child, callback, detail);
380
+      }
381
+
382
+      promise._subscribers = null;
383
+    }
384
+
385
+    Promise.prototype = {
386
+      constructor: Promise,
387
+
388
+      _state: undefined,
389
+      _detail: undefined,
390
+      _subscribers: undefined,
391
+
392
+      then: function(onFulfillment, onRejection) {
393
+        var promise = this;
394
+
395
+        var thenPromise = new this.constructor(function() {});
396
+
397
+        if (this._state) {
398
+          var callbacks = arguments;
399
+          config.async(function invokePromiseCallback() {
400
+            invokeCallback(promise._state, thenPromise, callbacks[promise._state - 1], promise._detail);
401
+          });
402
+        } else {
403
+          subscribe(this, thenPromise, onFulfillment, onRejection);
404
+        }
405
+
406
+        return thenPromise;
407
+      },
408
+
409
+      'catch': function(onRejection) {
410
+        return this.then(null, onRejection);
411
+      }
412
+    };
413
+
414
+    Promise.all = all;
415
+    Promise.race = race;
416
+    Promise.resolve = staticResolve;
417
+    Promise.reject = staticReject;
418
+
419
+    function handleThenable(promise, value) {
420
+      var then = null,
421
+      resolved;
422
+
423
+      try {
424
+        if (promise === value) {
425
+          throw new TypeError("A promises callback cannot return that same promise.");
426
+        }
427
+
428
+        if (objectOrFunction(value)) {
429
+          then = value.then;
430
+
431
+          if (isFunction(then)) {
432
+            then.call(value, function(val) {
433
+              if (resolved) { return true; }
434
+              resolved = true;
435
+
436
+              if (value !== val) {
437
+                resolve(promise, val);
438
+              } else {
439
+                fulfill(promise, val);
440
+              }
441
+            }, function(val) {
442
+              if (resolved) { return true; }
443
+              resolved = true;
444
+
445
+              reject(promise, val);
446
+            });
447
+
448
+            return true;
449
+          }
450
+        }
451
+      } catch (error) {
452
+        if (resolved) { return true; }
453
+        reject(promise, error);
454
+        return true;
455
+      }
456
+
457
+      return false;
458
+    }
459
+
460
+    function resolve(promise, value) {
461
+      if (promise === value) {
462
+        fulfill(promise, value);
463
+      } else if (!handleThenable(promise, value)) {
464
+        fulfill(promise, value);
465
+      }
466
+    }
467
+
468
+    function fulfill(promise, value) {
469
+      if (promise._state !== PENDING) { return; }
470
+      promise._state = SEALED;
471
+      promise._detail = value;
472
+
473
+      config.async(publishFulfillment, promise);
474
+    }
475
+
476
+    function reject(promise, reason) {
477
+      if (promise._state !== PENDING) { return; }
478
+      promise._state = SEALED;
479
+      promise._detail = reason;
480
+
481
+      config.async(publishRejection, promise);
482
+    }
483
+
484
+    function publishFulfillment(promise) {
485
+      publish(promise, promise._state = FULFILLED);
486
+    }
487
+
488
+    function publishRejection(promise) {
489
+      publish(promise, promise._state = REJECTED);
490
+    }
491
+
492
+    __exports__.Promise = Promise;
493
+  });
494
+define("promise/race", 
495
+  ["./utils","exports"],
496
+  function(__dependency1__, __exports__) {
497
+    "use strict";
498
+    /* global toString */
499
+    var isArray = __dependency1__.isArray;
500
+
501
+    /**
502
+      `RSVP.race` allows you to watch a series of promises and act as soon as the
503
+      first promise given to the `promises` argument fulfills or rejects.
504
+
505
+      Example:
506
+
507
+      ```javascript
508
+      var promise1 = new RSVP.Promise(function(resolve, reject){
509
+        setTimeout(function(){
510
+          resolve("promise 1");
511
+        }, 200);
512
+      });
513
+
514
+      var promise2 = new RSVP.Promise(function(resolve, reject){
515
+        setTimeout(function(){
516
+          resolve("promise 2");
517
+        }, 100);
518
+      });
519
+
520
+      RSVP.race([promise1, promise2]).then(function(result){
521
+        // result === "promise 2" because it was resolved before promise1
522
+        // was resolved.
523
+      });
524
+      ```
525
+
526
+      `RSVP.race` is deterministic in that only the state of the first completed
527
+      promise matters. For example, even if other promises given to the `promises`
528
+      array argument are resolved, but the first completed promise has become
529
+      rejected before the other promises became fulfilled, the returned promise
530
+      will become rejected:
531
+
532
+      ```javascript
533
+      var promise1 = new RSVP.Promise(function(resolve, reject){
534
+        setTimeout(function(){
535
+          resolve("promise 1");
536
+        }, 200);
537
+      });
538
+
539
+      var promise2 = new RSVP.Promise(function(resolve, reject){
540
+        setTimeout(function(){
541
+          reject(new Error("promise 2"));
542
+        }, 100);
543
+      });
544
+
545
+      RSVP.race([promise1, promise2]).then(function(result){
546
+        // Code here never runs because there are rejected promises!
547
+      }, function(reason){
548
+        // reason.message === "promise2" because promise 2 became rejected before
549
+        // promise 1 became fulfilled
550
+      });
551
+      ```
552
+
553
+      @method race
554
+      @for RSVP
555
+      @param {Array} promises array of promises to observe
556
+      @param {String} label optional string for describing the promise returned.
557
+      Useful for tooling.
558
+      @return {Promise} a promise that becomes fulfilled with the value the first
559
+      completed promises is resolved with if the first completed promise was
560
+      fulfilled, or rejected with the reason that the first completed promise
561
+      was rejected with.
562
+    */
563
+    function race(promises) {
564
+      /*jshint validthis:true */
565
+      var Promise = this;
566
+
567
+      if (!isArray(promises)) {
568
+        throw new TypeError('You must pass an array to race.');
569
+      }
570
+      return new Promise(function(resolve, reject) {
571
+        var results = [], promise;
572
+
573
+        for (var i = 0; i < promises.length; i++) {
574
+          promise = promises[i];
575
+
576
+          if (promise && typeof promise.then === 'function') {
577
+            promise.then(resolve, reject);
578
+          } else {
579
+            resolve(promise);
580
+          }
581
+        }
582
+      });
583
+    }
584
+
585
+    __exports__.race = race;
586
+  });
587
+define("promise/reject", 
588
+  ["exports"],
589
+  function(__exports__) {
590
+    "use strict";
591
+    /**
592
+      `RSVP.reject` returns a promise that will become rejected with the passed
593
+      `reason`. `RSVP.reject` is essentially shorthand for the following:
594
+
595
+      ```javascript
596
+      var promise = new RSVP.Promise(function(resolve, reject){
597
+        reject(new Error('WHOOPS'));
598
+      });
599
+
600
+      promise.then(function(value){
601
+        // Code here doesn't run because the promise is rejected!
602
+      }, function(reason){
603
+        // reason.message === 'WHOOPS'
604
+      });
605
+      ```
606
+
607
+      Instead of writing the above, your code now simply becomes the following:
608
+
609
+      ```javascript
610
+      var promise = RSVP.reject(new Error('WHOOPS'));
611
+
612
+      promise.then(function(value){
613
+        // Code here doesn't run because the promise is rejected!
614
+      }, function(reason){
615
+        // reason.message === 'WHOOPS'
616
+      });
617
+      ```
618
+
619
+      @method reject
620
+      @for RSVP
621
+      @param {Any} reason value that the returned promise will be rejected with.
622
+      @param {String} label optional string for identifying the returned promise.
623
+      Useful for tooling.
624
+      @return {Promise} a promise that will become rejected with the given
625
+      `reason`.
626
+    */
627
+    function reject(reason) {
628
+      /*jshint validthis:true */
629
+      var Promise = this;
630
+
631
+      return new Promise(function (resolve, reject) {
632
+        reject(reason);
633
+      });
634
+    }
635
+
636
+    __exports__.reject = reject;
637
+  });
638
+define("promise/resolve", 
639
+  ["exports"],
640
+  function(__exports__) {
641
+    "use strict";
642
+    function resolve(value) {
643
+      /*jshint validthis:true */
644
+      if (value && typeof value === 'object' && value.constructor === this) {
645
+        return value;
646
+      }
647
+
648
+      var Promise = this;
649
+
650
+      return new Promise(function(resolve) {
651
+        resolve(value);
652
+      });
653
+    }
654
+
655
+    __exports__.resolve = resolve;
656
+  });
657
+define("promise/utils", 
658
+  ["exports"],
659
+  function(__exports__) {
660
+    "use strict";
661
+    function objectOrFunction(x) {
662
+      return isFunction(x) || (typeof x === "object" && x !== null);
663
+    }
664
+
665
+    function isFunction(x) {
666
+      return typeof x === "function";
667
+    }
668
+
669
+    function isArray(x) {
670
+      return Object.prototype.toString.call(x) === "[object Array]";
671
+    }
672
+
673
+    // Date.now is not available in browsers < IE9
674
+    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now#Compatibility
675
+    var now = Date.now || function() { return new Date().getTime(); };
676
+
677
+
678
+    __exports__.objectOrFunction = objectOrFunction;
679
+    __exports__.isFunction = isFunction;
680
+    __exports__.isArray = isArray;
681
+    __exports__.now = now;
682
+  });
683
+requireModule('promise/polyfill').polyfill();
684
+}());

+ 1
- 0
node_modules/localforage/bower_components/es6-promise/promise.min.js
File diff suppressed because it is too large
View File


+ 14
- 0
node_modules/localforage/bower_components/expect/.bower.json View File

@@ -0,0 +1,14 @@
1
+{
2
+  "name": "expect",
3
+  "homepage": "https://github.com/LearnBoost/expect.js",
4
+  "version": "0.3.1",
5
+  "_release": "0.3.1",
6
+  "_resolution": {
7
+    "type": "version",
8
+    "tag": "0.3.1",
9
+    "commit": "68ce6a98a5008ec0a11298e026ee00ad0142f118"
10
+  },
11
+  "_source": "https://github.com/LearnBoost/expect.js.git",
12
+  "_target": "~0.3.1",
13
+  "_originalSource": "expect"
14
+}

+ 54
- 0
node_modules/localforage/bower_components/expect/History.md View File

@@ -0,0 +1,54 @@
1
+
2
+0.3.0 / 2014-02-20
3
+==================
4
+
5
+ * renmaed to `index.js`
6
+ * added repository to package.json
7
+ * remove unused variable and merge
8
+ * simpify isDate() and remove unnecessary semicolon.
9
+ * Add .withArgs() syntax for building scenario
10
+ * eql(): fix wrong order of actual vs. expected.
11
+ * Added formatting for Error objects
12
+ * Add support for 'regexp' type and eql comparison of regular expressions.
13
+ * Better to follow the same coding style
14
+ * Use 'showDiff' flag
15
+ * Add 'actual' & 'expected' property to the thrown error
16
+ * Pass .fail() unit test
17
+ * Ignore 'script*' global leak in chrome
18
+ * Exposed object stringification function
19
+ * Use isRegExp in Assertion::throwException. Fix #25
20
+ * Cleaned up local variables
21
+
22
+0.2.0 / 2012-10-19
23
+==================
24
+
25
+  * fix isRegExp bug in some edge cases
26
+  * add closure to all assertion messages deferring costly inspects
27
+    until there is actually a failure
28
+  * fix `make test` for recent mochas
29
+  * add inspect() case for DOM elements
30
+  * relax failure msg null check
31
+  * add explicit failure through `expect().fail()`
32
+  * clarified all `empty` functionality in README example
33
+  * added docs for throwException fn/regexp signatures
34
+
35
+0.1.2 / 2012-02-04
36
+==================
37
+
38
+  * Added regexp matching support for exceptions.
39
+  * Added support for throwException callback.
40
+  * Added `throwError` synonym to `throwException`.
41
+  * Added object support for `.empty`.
42
+  * Fixed `.a('object')` with nulls, and english error in error message.
43
+  * Fix bug `indexOf` (IE). [hokaccha]
44
+  * Fixed object property checking with `undefined` as value. [vovik]
45
+
46
+0.1.1 / 2011-12-18
47
+==================
48
+
49
+  * Fixed typo
50
+
51
+0.1.0 / 2011-12-18
52
+==================
53
+
54
+  * Initial import

+ 263
- 0
node_modules/localforage/bower_components/expect/README.md View File

@@ -0,0 +1,263 @@
1
+# Expect
2
+
3
+Minimalistic BDD assertion toolkit based on
4
+[should.js](http://github.com/visionmedia/should.js)
5
+
6
+```js
7
+expect(window.r).to.be(undefined);
8
+expect({ a: 'b' }).to.eql({ a: 'b' })
9
+expect(5).to.be.a('number');
10
+expect([]).to.be.an('array');
11
+expect(window).not.to.be.an(Image);
12
+```
13
+
14
+## Features
15
+
16
+- Cross-browser: works on IE6+, Firefox, Safari, Chrome, Opera.
17
+- Compatible with all test frameworks.
18
+- Node.JS ready (`require('expect.js')`).
19
+- Standalone. Single global with no prototype extensions or shims.
20
+
21
+## How to use
22
+
23
+### Node
24
+
25
+Install it with NPM or add it to your `package.json`:
26
+
27
+```
28
+$ npm install expect.js
29
+```
30
+
31
+Then:
32
+
33
+```js
34
+var expect = require('expect.js');
35
+```
36
+
37
+### Browser
38
+
39
+Expose the `expect.js` found at the top level of this repository.
40
+
41
+```html
42
+<script src="expect.js"></script>
43
+```
44
+
45
+## API
46
+
47
+**ok**: asserts that the value is _truthy_ or not
48
+
49
+```js
50
+expect(1).to.be.ok();
51
+expect(true).to.be.ok();
52
+expect({}).to.be.ok();
53
+expect(0).to.not.be.ok();
54
+```
55
+
56
+**be** / **equal**: asserts `===` equality
57
+
58
+```js
59
+expect(1).to.be(1)
60
+expect(NaN).not.to.equal(NaN);
61
+expect(1).not.to.be(true)
62
+expect('1').to.not.be(1);
63
+```
64
+
65
+**eql**: asserts loose equality that works with objects
66
+
67
+```js
68
+expect({ a: 'b' }).to.eql({ a: 'b' });
69
+expect(1).to.eql('1');
70
+```
71
+
72
+**a**/**an**: asserts `typeof` with support for `array` type and `instanceof`
73
+
74
+```js
75
+// typeof with optional `array`
76
+expect(5).to.be.a('number');
77
+expect([]).to.be.an('array');  // works
78
+expect([]).to.be.an('object'); // works too, since it uses `typeof`
79
+
80
+// constructors
81
+expect(5).to.be.a(Number);
82
+expect([]).to.be.an(Array);
83
+expect(tobi).to.be.a(Ferret);
84
+expect(person).to.be.a(Mammal);
85
+```
86
+
87
+**match**: asserts `String` regular expression match
88
+
89
+```js
90
+expect(program.version).to.match(/[0-9]+\.[0-9]+\.[0-9]+/);
91
+```
92
+
93
+**contain**: asserts indexOf for an array or string
94
+
95
+```js
96
+expect([1, 2]).to.contain(1);
97
+expect('hello world').to.contain('world');
98
+```
99
+
100
+**length**: asserts array `.length`
101
+
102
+```js
103
+expect([]).to.have.length(0);
104
+expect([1,2,3]).to.have.length(3);
105
+```
106
+
107
+**empty**: asserts that an array is empty or not
108
+
109
+```js
110
+expect([]).to.be.empty();
111
+expect({}).to.be.empty();
112
+expect({ length: 0, duck: 'typing' }).to.be.empty();
113
+expect({ my: 'object' }).to.not.be.empty();
114
+expect([1,2,3]).to.not.be.empty();
115
+```
116
+
117
+**property**: asserts presence of an own property (and value optionally)
118
+
119
+```js
120
+expect(window).to.have.property('expect')
121
+expect(window).to.have.property('expect', expect)
122
+expect({a: 'b'}).to.have.property('a');
123
+```
124
+
125
+**key**/**keys**: asserts the presence of a key. Supports the `only` modifier
126
+
127
+```js
128
+expect({ a: 'b' }).to.have.key('a');
129
+expect({ a: 'b', c: 'd' }).to.only.have.keys('a', 'c');
130
+expect({ a: 'b', c: 'd' }).to.only.have.keys(['a', 'c']);
131
+expect({ a: 'b', c: 'd' }).to.not.only.have.key('a');
132
+```
133
+
134
+**throwException**/**throwError**: asserts that the `Function` throws or not when called
135
+
136
+```js
137
+expect(fn).to.throwError(); // synonym of throwException
138
+expect(fn).to.throwException(function (e) { // get the exception object
139
+  expect(e).to.be.a(SyntaxError);
140
+});
141
+expect(fn).to.throwException(/matches the exception message/);
142
+expect(fn2).to.not.throwException();
143
+```
144
+
145
+**withArgs**: creates anonymous function to call fn with arguments
146
+
147
+```js
148
+expect(fn).withArgs(invalid, arg).to.throwException();
149
+expect(fn).withArgs(valid, arg).to.not.throwException();
150
+```
151
+
152
+**within**: asserts a number within a range
153
+
154
+```js
155
+expect(1).to.be.within(0, Infinity);
156
+```
157
+
158
+**greaterThan**/**above**: asserts `>`
159
+
160
+```js
161
+expect(3).to.be.above(0);
162
+expect(5).to.be.greaterThan(3);
163
+```
164
+
165
+**lessThan**/**below**: asserts `<`
166
+
167
+```js
168
+expect(0).to.be.below(3);
169
+expect(1).to.be.lessThan(3);
170
+```
171
+
172
+**fail**: explicitly forces failure.
173
+
174
+```js
175
+expect().fail()
176
+expect().fail("Custom failure message")
177
+```
178
+
179
+## Using with a test framework
180
+
181
+For example, if you create a test suite with
182
+[mocha](http://github.com/visionmedia/mocha).
183
+
184
+Let's say we wanted to test the following program:
185
+
186
+**math.js**
187
+
188
+```js
189
+function add (a, b) { return a + b; };
190
+```
191
+
192
+Our test file would look like this:
193
+
194
+```js
195
+describe('test suite', function () {
196
+  it('should expose a function', function () {
197
+    expect(add).to.be.a('function');
198
+  });
199
+
200
+  it('should do math', function () {
201
+    expect(add(1, 3)).to.equal(4);
202
+  });
203
+});
204
+```
205
+
206
+If a certain expectation fails, an exception will be raised which gets captured
207
+and shown/processed by the test runner.
208
+
209
+## Differences with should.js
210
+
211
+- No need for static `should` methods like `should.strictEqual`. For example, 
212
+  `expect(obj).to.be(undefined)` works well.
213
+- Some API simplifications / changes.
214
+- API changes related to browser compatibility.
215
+
216
+## Running tests
217
+
218
+Clone the repository and install the developer dependencies:
219
+
220
+```
221
+git clone git://github.com/LearnBoost/expect.js.git expect
222
+cd expect && npm install
223
+```
224
+
225
+### Node
226
+
227
+`make test`
228
+
229
+### Browser
230
+
231
+`make test-browser`
232
+
233
+and point your browser(s) to `http://localhost:3000/test/`
234
+
235
+## Credits
236
+
237
+(The MIT License)
238
+
239
+Copyright (c) 2011 Guillermo Rauch &lt;guillermo@learnboost.com&gt;
240
+
241
+Permission is hereby granted, free of charge, to any person obtaining
242
+a copy of this software and associated documentation files (the
243
+'Software'), to deal in the Software without restriction, including
244
+without limitation the rights to use, copy, modify, merge, publish,
245
+distribute, sublicense, and/or sell copies of the Software, and to
246
+permit persons to whom the Software is furnished to do so, subject to
247
+the following conditions:
248
+
249
+The above copyright notice and this permission notice shall be
250
+included in all copies or substantial portions of the Software.
251
+
252
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
253
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
254
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
255
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
256
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
257
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
258
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
259
+
260
+### 3rd-party
261
+
262
+Heavily borrows from [should.js](http://github.com/visionmedia/should.js) by TJ
263
+Holowaychuck - MIT.

+ 1284
- 0
node_modules/localforage/bower_components/expect/index.js
File diff suppressed because it is too large
View File


+ 13
- 0
node_modules/localforage/bower_components/expect/package.json View File

@@ -0,0 +1,13 @@
1
+{
2
+    "name": "expect.js"
3
+  , "version": "0.3.1"
4
+  , "description": "BDD style assertions for node and the browser."
5
+  , "repository": {
6
+        "type": "git",
7
+        "url": "git://github.com/LearnBoost/expect.js.git"
8
+    }
9
+  , "devDependencies": {
10
+        "mocha": "*"
11
+      , "serve": "*"
12
+    }
13
+}

+ 48
- 0
node_modules/localforage/bower_components/mocha/.bower.json View File

@@ -0,0 +1,48 @@
1
+{
2
+  "name": "mocha",
3
+  "homepage": "https://mochajs.org",
4
+  "description": "simple, flexible, fun test framework",
5
+  "repository": {
6
+    "type": "git",
7
+    "url": "git://github.com/mochajs/mocha.git"
8
+  },
9
+  "main": [
10
+    "mocha.js",
11
+    "mocha.css"
12
+  ],
13
+  "ignore": [
14
+    "bin",
15
+    "editors",
16
+    "images",
17
+    "lib",
18
+    "scripts",
19
+    "test",
20
+    "assets",
21
+    "media",
22
+    ".*",
23
+    "index.js",
24
+    "karma.conf.js",
25
+    "browser-entry.js",
26
+    "Makefile",
27
+    "package.json",
28
+    "appveyor.yml"
29
+  ],
30
+  "keywords": [
31
+    "mocha",
32
+    "test",
33
+    "bdd",
34
+    "tdd",
35
+    "tap"
36
+  ],
37
+  "license": "MIT",
38
+  "version": "3.4.2",
39
+  "_release": "3.4.2",
40
+  "_resolution": {
41
+    "type": "version",
42
+    "tag": "v3.4.2",
43
+    "commit": "800963464bc4e0e09c2e85e8a9edd8d20a0bbf57"
44
+  },
45
+  "_source": "https://github.com/mochajs/mocha.git",
46
+  "_target": "~3.4.2",
47
+  "_originalSource": "mocha"
48
+}

+ 1635
- 0
node_modules/localforage/bower_components/mocha/CHANGELOG.md
File diff suppressed because it is too large
View File


+ 84
- 0
node_modules/localforage/bower_components/mocha/CONTRIBUTING.md View File

@@ -0,0 +1,84 @@
1
+# Contributing to Mocha
2
+
3
+> Please read these guidelines before submitting an issue, filing a feature request, or contributing code.
4
+
5
+## :question: Got a Question?
6
+
7
+If you have a question about using Mocha, please use the [mailing list](https://groups.google.com/group/mochajs), [StackOverflow](https://stackoverflow.com), or ask the friendly people in our [chat room](https://gitter.im/mochajs/mocha).
8
+
9
+## :bug: I Found a Bug
10
+
11
+Sorry!  It happens to the best of us.  If you've found a bug in Mocha, **please [search](https://github.com/mochajs/mocha/issues/) to see if it's already been reported**.  Otherwise, create a [new issue](https://github.com/mochajs/mocha/issues/new).  If you can fix the bug yourself, feel free to create a [pull request](#propose-a-change) thereafter.
12
+
13
+Please include *as much detail as possible* to help us reproduce and diagnose the bug.  Most importantly:
14
+
15
+- Let us know *how* you're running Mocha (options, flags, environment, browser or Node.js, etc.)
16
+- Include your test code or file(s).  If large, please provide a link to a repository or [gist](https://gist.github.com).
17
+- Please show code in JavaScript only (any version)
18
+
19
+If we need more information from you, we'll let you know.  If you don't within a reasonable time frame (TBD), your issue will be automatically closed for inactivity.
20
+
21
+## :exclamation: Propose a Change
22
+
23
+Before you get your hands dirty, please [search](https://github.com/mochajs/mocha/issues/) for a related issue, or [create a new one](https://github.com/mochajs/mocha/issues/new).  If you wish to contribute a new feature, this is doubly important!  Let's discuss your proposed changes first; we don't want you to waste time implementing a change that is at odds with the project's direction.  That said, we'll happily consider any contribution, no matter how great or small.
24
+
25
+*This paragraph would contain information about Mocha's roadmap, but it doesn't yet exist.* :poop:
26
+
27
+It's also important to understand some overarching goals of Mocha, detailed below.
28
+
29
+### :soccer: About Project Goals
30
+
31
+Mocha is a test framework.  Developers use it against anything from legacy spaghetti in IE7 to stage-0 TC39 features in Electron.  While still staying current, Mocha will only drop support for old platforms as a last resort.  If and only if Mocha cannot move forward as a project, support will be dropped.  If workarounds exist, they are preferred.
32
+
33
+Mocha adheres strictly to [semantic versioning](https://semver.org).  We are *extremely cautious* with changes that have the potential to break; given the size of Mocha's user base, it's *highly unlikely* a breaking change will slide by.
34
+
35
+Mocha's usage far outweighs its resources.  If a proposed feature would incur a maintenance penalty, it could be a hard sell.
36
+
37
+We ask you please keep these goals in mind when making or proposing changes.
38
+
39
+### :shoe: Contributing Code: Step-by-Step
40
+
41
+Follow these steps to get going.  If you are having trouble, don't be afraid to [ask for help](#got-a-question).
42
+
43
+1.  [Install Node.js 4.x or newer](https://nodejs.org/download).
44
+1.  Install [GNU Make](https://www.gnu.org/software/make/) or equivalent.
45
+1.  Follow [Github's documentation](https://help.github.com/articles/fork-a-repo/) on setting up Git, forking and cloning.
46
+1.  Create a new branch in your working copy.  Give your branch a descriptive name, such as `issue/12345`: `git checkout -b issue/12345`.
47
+1.  Execute `npm install` to install the development dependencies.
48
+1.  Make your changes and add them via `git add`.
49
+  - **Do not modify** the root `mocha.js` file directly; it is automatically generated.
50
+  - Your changes will likely be somewhere in `lib/`, `bin/` or `browser-entry.js` if your changes are browser-specific.
51
+  - Please add unit and/or integration tests (depending on the nature of your changes).
52
+  - Keep your PR focused.  Don't fix two things at once, or make formatting changes alongside bug fixes.
53
+1.  Before committing, run `npm test`.
54
+  - This will run unit tests, Node.js and browser integration tests, and lint the source code.
55
+  - The "browser" tests use Mocha to test itself; it will rebuild the root `mocha.js` file with your changes.
56
+  - **Please avoid committing changes to `mocha.js`**.
57
+  - Ultimately, your pull request will be built on our continuous integration servers ([Travis CI](https://travis-ci.org/mochajs/mocha) and [AppVeyor](https://ci.appveyor.com/project/boneskull/mocha)).  The first step to ensuring these checks pass is to test on your own machine.
58
+1.  Commit your changes.
59
+  - Use a brief message on the first line, referencing a relevant issue (e.g. `#12345`).
60
+  - Add detail in subsequent lines.
61
+1.  Push your changes to your fork.
62
+1.  Navigate to the source repository.  You should see a notification about your recent changes in your fork's branch, with a button to create a pull request.  Click it.
63
+1.  Describe your changes in detail here.  Once you're satisfied, submit the form.
64
+  - *PRO TIP*: If you've used a multi-line commit message, Github will pre-fill the PR's description with it.
65
+1.  If you have not signed our Contributor License Agreement, a friendly robot will prompt you to do so.  A CLA (electronic) signature is **required** for all contributions of code to Mocha.
66
+1.  CI will run against your changes.
67
+  - If the changes fail the checks, you will need to address those before merging.
68
+  - You don't need to make a new PR to make changes.  Instead, commit on top of your changes, and push these to your fork's branch.  The PR will be updated, and CI will re-run.
69
+  - Github will indicate if there's a conflict.  If this happens, you will need to [rebase](https://help.github.com/articles/about-git-rebase/) your branch onto the `master` branch of the source repository.  *Don't merge.*
70
+  - It's no longer necessary to "squash" your changes.
71
+1.  Be patient while your PR is reviewed.  This can take awhile ([why?](https://github.com/orgs/mochajs/projects/4)).  We may request changes; don't be afraid to question them.
72
+
73
+## :angel: I Just Want To Help
74
+
75
+*Excellent.*  Here's how:
76
+
77
+- **Handy with JavaScript?**  Please check out the issues labeled [`pr-please`](https://git.io/vXYu2).
78
+- **Can you write good (and do other stuff good too)?**  Help with the documentation.  See the [issues for our site](https://github.com/mochajs/mochajs.github.io/issues).
79
+- **Design your thing?**  [Our site](https://github.com/mochajs/mochajs.github.io) needs your magic touch.
80
+- **Know Mocha's codebase?**  We could use your help triaging issues and/or reviewing pull requests.  Please contact an [org member](https://github.com/orgs/mochajs/people), and we'll chat.
81
+- **Want to build our community?**  Mocha has a *lot* of users.  We could use your help bringing everyone together in peace and harmony.  Please contact an [org member](https://github.com/mochajs/people).
82
+- **You can sell dirt to worms?**  Let's raise Mocha's profile in the JavaScript and OSS communities.  Please contact an [org member](https://github.com/mochajs/people)!
83
+- **Wait--you write unit tests for *fun*?**  A PR which increases coverage is unlikely to be turned down.
84
+- **Are you experienced?**  If you're a seasoned Mocha user, why not help answer some questions in the [chat room](https://gitter.im/mochajs/mocha)?

+ 22
- 0
node_modules/localforage/bower_components/mocha/LICENSE View File

@@ -0,0 +1,22 @@
1
+(The MIT License)
2
+
3
+Copyright (c) 2011-2017 JS Foundation and contributors, https://js.foundation
4
+
5
+Permission is hereby granted, free of charge, to any person obtaining
6
+a copy of this software and associated documentation files (the
7
+'Software'), to deal in the Software without restriction, including
8
+without limitation the rights to use, copy, modify, merge, publish,
9
+distribute, sublicense, and/or sell copies of the Software, and to
10
+permit persons to whom the Software is furnished to do so, subject to
11
+the following conditions:
12
+
13
+The above copyright notice and this permission notice shall be
14
+included in all copies or substantial portions of the Software.
15
+
16
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
17
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 123
- 0
node_modules/localforage/bower_components/mocha/README.md View File

@@ -0,0 +1,123 @@
1
+# Mocha needs YOU!
2
+
3
+*Did you know* Mocha [is a dependency of over 100,000 projects](https://libraries.io/npm/mocha) published to npm alone?
4
+
5
+**Despite this, we're currently unable to merge most pull requests due to lack of maintenance resources.**
6
+
7
+**Are you interested in triaging issues or reviewing open PRs?  Have some time to hack on its codebase?**  If you would like to help maintain Mocha, please contact `@boneskull` on [Gitter](https://gitter.im/mochajs/mocha).
8
+
9
+*Thank you* :kissing_heart: to all of you interested in helping.  These are Mocha's immediate needs:
10
+
11
+1. Increase test coverage on Node.js and browser
12
+  - Increase integration coverage for all reporters
13
+    - `html` reporter must be tested in browser
14
+    - Basic console reporters (*not* `nyan`, `landing`, etc.) must be tested in **both** browser and Node.js contexts; PhantomJS can consume all console reporters
15
+    - Filesystem-based reporters must be tested in Node.js context
16
+  - Increase coverage against all interfaces (`exports` in particular).  Ideally this becomes a "matrix" where we repeat sets of integration tests across all interfaces.
17
+  - Refactor non-Node.js-specific tests to allow them to run in a browser context.  Node.js-specific tests include those which *require* the CLI or filesystem.  Most everything else is fair game.
18
+2.  Review current open pull requests
19
+  - We need individuals familiar with Mocha's codebase. Got questions?  Ask them in [our chat room](https://gitter.im/mochajs/mocha).
20
+  - Pull requests **must** have supporting tests.  The only exceptions are pure cosmetic or non-functional changes.
21
+  - Pull request contributors must sign the CLA.
22
+3. Close old, inactive issues and pull requests
23
+  - A bot should do this.  We need a bot. Got a bot?
24
+4. Triage issues
25
+  - If we run into "critical" bugs, they need fixing.
26
+  - "Critical" means Mocha is broken w/o workarounds for a *large percentage* of users
27
+  - Otherwise: respond to issues, close new dupe issues, confirm bugs, ask for more info, etc.
28
+
29
+Once we gain ground on the above items, we can work together formalize our contribution guidelines and governance.  For further info & ideas, please see our [projects](https://github.com/mochajs/mocha/projects/).
30
+
31
+*You needn't be a maintainer to submit a pull request for test coverage!*
32
+
33
+-- @boneskull, *Jan 17 2016*
34
+
35
+<br><br>
36
+<p align="center">
37
+  <img src="https://cldup.com/xFVFxOioAU.svg" alt="Mocha test framework"/>
38
+</p>
39
+
40
+[![Build Status](https://api.travis-ci.org/mochajs/mocha.svg?branch=master)](http://travis-ci.org/mochajs/mocha)
41
+[![Coverage Status](https://coveralls.io/repos/github/mochajs/mocha/badge.svg)](https://coveralls.io/github/mochajs/mocha)
42
+[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmochajs%2Fmocha.svg?type=shield)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmochajs%2Fmocha?ref=badge_shield)
43
+[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mochajs/mocha?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
44
+[![OpenCollective](https://opencollective.com/mochajs/backers/badge.svg)](#backers)
45
+[![OpenCollective](https://opencollective.com/mochajs/sponsors/badge.svg)](#sponsors)
46
+<br><img alt="Mocha Browser Support h/t SauceLabs" src="https://saucelabs.com/browser-matrix/mochajs.svg" width="354">
47
+
48
+  Mocha is a simple, flexible, fun JavaScript test framework for node.js and the browser. For more information view the [documentation](http://mochajs.org).
49
+
50
+## Links
51
+
52
+  - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)
53
+  - [Google Group](http://groups.google.com/group/mochajs)
54
+  - [Wiki](https://github.com/mochajs/mocha/wiki)
55
+  - Mocha [Extensions and reporters](https://github.com/mochajs/mocha/wiki)
56
+
57
+
58
+## Backers
59
+
60
+[Become a backer]((https://opencollective.com/mochajs#backer)) and show your support to our open source project.
61
+
62
+<a href="https://opencollective.com/mochajs/backer/0/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/0/avatar"></a>
63
+<a href="https://opencollective.com/mochajs/backer/1/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/1/avatar"></a>
64
+<a href="https://opencollective.com/mochajs/backer/2/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/2/avatar"></a>
65
+<a href="https://opencollective.com/mochajs/backer/3/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/3/avatar"></a>
66
+<a href="https://opencollective.com/mochajs/backer/4/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/4/avatar"></a>
67
+<a href="https://opencollective.com/mochajs/backer/5/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/5/avatar"></a>
68
+<a href="https://opencollective.com/mochajs/backer/6/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/6/avatar"></a>
69
+<a href="https://opencollective.com/mochajs/backer/7/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/7/avatar"></a>
70
+<a href="https://opencollective.com/mochajs/backer/8/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/8/avatar"></a>
71
+<a href="https://opencollective.com/mochajs/backer/9/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/9/avatar"></a>
72
+<a href="https://opencollective.com/mochajs/backer/10/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/10/avatar"></a>
73
+<a href="https://opencollective.com/mochajs/backer/11/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/11/avatar"></a>
74
+<a href="https://opencollective.com/mochajs/backer/12/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/12/avatar"></a>
75
+<a href="https://opencollective.com/mochajs/backer/13/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/13/avatar"></a>
76
+<a href="https://opencollective.com/mochajs/backer/14/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/14/avatar"></a>
77
+<a href="https://opencollective.com/mochajs/backer/15/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/15/avatar"></a>
78
+<a href="https://opencollective.com/mochajs/backer/16/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/16/avatar"></a>
79
+<a href="https://opencollective.com/mochajs/backer/17/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/17/avatar"></a>
80
+<a href="https://opencollective.com/mochajs/backer/18/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/18/avatar"></a>
81
+<a href="https://opencollective.com/mochajs/backer/19/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/19/avatar"></a>
82
+<a href="https://opencollective.com/mochajs/backer/20/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/20/avatar"></a>
83
+<a href="https://opencollective.com/mochajs/backer/21/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/21/avatar"></a>
84
+<a href="https://opencollective.com/mochajs/backer/22/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/22/avatar"></a>
85
+<a href="https://opencollective.com/mochajs/backer/23/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/23/avatar"></a>
86
+<a href="https://opencollective.com/mochajs/backer/24/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/24/avatar"></a>
87
+<a href="https://opencollective.com/mochajs/backer/25/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/25/avatar"></a>
88
+<a href="https://opencollective.com/mochajs/backer/26/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/26/avatar"></a>
89
+<a href="https://opencollective.com/mochajs/backer/27/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/27/avatar"></a>
90
+<a href="https://opencollective.com/mochajs/backer/28/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/28/avatar"></a>
91
+<a href="https://opencollective.com/mochajs/backer/29/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/29/avatar"></a>
92
+
93
+
94
+## Sponsors
95
+
96
+Does your company use Mocha?  Ask your manager or marketing team if your company would be interested in supporting our project.  Support will allow the maintainers to dedicate more time for maintenance and new features for everyone.  Also, your company's logo will show [on GitHub](https://github.com/mochajs/mocha#readme) and on [our site](https://mochajs.org)--who doesn't want a little extra exposure?  [Here's the info](https://opencollective.com/mochajs#sponsor).
97
+
98
+<a href="https://opencollective.com/mochajs/sponsor/0/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/0/avatar"></a>
99
+<a href="https://opencollective.com/mochajs/sponsor/1/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/1/avatar"></a>
100
+<a href="https://opencollective.com/mochajs/sponsor/2/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/2/avatar"></a>
101
+<a href="https://opencollective.com/mochajs/sponsor/3/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/3/avatar"></a>
102
+<a href="https://opencollective.com/mochajs/sponsor/4/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/4/avatar"></a>
103
+<a href="https://opencollective.com/mochajs/sponsor/5/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/5/avatar"></a>
104
+<a href="https://opencollective.com/mochajs/sponsor/6/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/6/avatar"></a>
105
+<a href="https://opencollective.com/mochajs/sponsor/7/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/7/avatar"></a>
106
+<a href="https://opencollective.com/mochajs/sponsor/8/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/8/avatar"></a>
107
+<a href="https://opencollective.com/mochajs/sponsor/9/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/9/avatar"></a>
108
+<a href="https://opencollective.com/mochajs/sponsor/10/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/10/avatar"></a>
109
+<a href="https://opencollective.com/mochajs/sponsor/11/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/11/avatar"></a>
110
+<a href="https://opencollective.com/mochajs/sponsor/12/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/12/avatar"></a>
111
+<a href="https://opencollective.com/mochajs/sponsor/13/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/13/avatar"></a>
112
+<a href="https://opencollective.com/mochajs/sponsor/14/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/14/avatar"></a>
113
+<a href="https://opencollective.com/mochajs/sponsor/15/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/15/avatar"></a>
114
+<a href="https://opencollective.com/mochajs/sponsor/16/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/16/avatar"></a>
115
+<a href="https://opencollective.com/mochajs/sponsor/17/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/17/avatar"></a>
116
+<a href="https://opencollective.com/mochajs/sponsor/18/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/18/avatar"></a>
117
+<a href="https://opencollective.com/mochajs/sponsor/19/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/19/avatar"></a>
118
+
119
+## License
120
+
121
+[MIT](LICENSE)
122
+
123
+[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmochajs%2Fmocha.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmochajs%2Fmocha?ref=badge_large)

+ 38
- 0
node_modules/localforage/bower_components/mocha/bower.json View File

@@ -0,0 +1,38 @@
1
+{
2
+  "name": "mocha",
3
+  "homepage": "https://mochajs.org",
4
+  "description": "simple, flexible, fun test framework",
5
+  "repository": {
6
+    "type": "git",
7
+    "url": "git://github.com/mochajs/mocha.git"
8
+  },
9
+  "main": [
10
+    "mocha.js",
11
+    "mocha.css"
12
+  ],
13
+  "ignore": [
14
+    "bin",
15
+    "editors",
16
+    "images",
17
+    "lib",
18
+    "scripts",
19
+    "test",
20
+    "assets",
21
+    "media",
22
+    ".*",
23
+    "index.js",
24
+    "karma.conf.js",
25
+    "browser-entry.js",
26
+    "Makefile",
27
+    "package.json",
28
+    "appveyor.yml"
29
+  ],
30
+  "keywords": [
31
+    "mocha",
32
+    "test",
33
+    "bdd",
34
+    "tdd",
35
+    "tap"
36
+  ],
37
+  "license": "MIT"
38
+}

+ 326
- 0
node_modules/localforage/bower_components/mocha/mocha.css View File

@@ -0,0 +1,326 @@
1
+@charset "utf-8";
2
+
3
+body {
4
+  margin:0;
5
+}
6
+
7
+#mocha {
8
+  font: 20px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
9
+  margin: 60px 50px;
10
+}
11
+
12
+#mocha ul,
13
+#mocha li {
14
+  margin: 0;
15
+  padding: 0;
16
+}
17
+
18
+#mocha ul {
19
+  list-style: none;
20
+}
21
+
22
+#mocha h1,
23
+#mocha h2 {
24
+  margin: 0;
25
+}
26
+
27
+#mocha h1 {
28
+  margin-top: 15px;
29
+  font-size: 1em;
30
+  font-weight: 200;
31
+}
32
+
33
+#mocha h1 a {
34
+  text-decoration: none;
35
+  color: inherit;
36
+}
37
+
38
+#mocha h1 a:hover {
39
+  text-decoration: underline;
40
+}
41
+
42
+#mocha .suite .suite h1 {
43
+  margin-top: 0;
44
+  font-size: .8em;
45
+}
46
+
47
+#mocha .hidden {
48
+  display: none;
49
+}
50
+
51
+#mocha h2 {
52
+  font-size: 12px;
53
+  font-weight: normal;
54
+  cursor: pointer;
55
+}
56
+
57
+#mocha .suite {
58
+  margin-left: 15px;
59
+}
60
+
61
+#mocha .test {
62
+  margin-left: 15px;
63
+  overflow: hidden;
64
+}
65
+
66
+#mocha .test.pending:hover h2::after {
67
+  content: '(pending)';
68
+  font-family: arial, sans-serif;
69
+}
70
+
71
+#mocha .test.pass.medium .duration {
72
+  background: #c09853;
73
+}
74
+
75
+#mocha .test.pass.slow .duration {
76
+  background: #b94a48;
77
+}
78
+
79
+#mocha .test.pass::before {
80
+  content: '✓';
81
+  font-size: 12px;
82
+  display: block;
83
+  float: left;
84
+  margin-right: 5px;
85
+  color: #00d6b2;
86
+}
87
+
88
+#mocha .test.pass .duration {
89
+  font-size: 9px;
90
+  margin-left: 5px;
91
+  padding: 2px 5px;
92
+  color: #fff;
93
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
94
+  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
95
+  box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
96
+  -webkit-border-radius: 5px;
97
+  -moz-border-radius: 5px;
98
+  -ms-border-radius: 5px;
99
+  -o-border-radius: 5px;
100
+  border-radius: 5px;
101
+}
102
+
103
+#mocha .test.pass.fast .duration {
104
+  display: none;
105
+}
106
+
107
+#mocha .test.pending {
108
+  color: #0b97c4;
109
+}
110
+
111
+#mocha .test.pending::before {
112
+  content: '◦';
113
+  color: #0b97c4;
114
+}
115
+
116
+#mocha .test.fail {
117
+  color: #c00;
118
+}
119
+
120
+#mocha .test.fail pre {
121
+  color: black;
122
+}
123
+
124
+#mocha .test.fail::before {
125
+  content: '✖';
126
+  font-size: 12px;
127
+  display: block;
128
+  float: left;
129
+  margin-right: 5px;
130
+  color: #c00;
131
+}
132
+
133
+#mocha .test pre.error {
134
+  color: #c00;
135
+  max-height: 300px;
136
+  overflow: auto;
137
+}
138
+
139
+#mocha .test .html-error {
140
+  overflow: auto;
141
+  color: black;
142
+  line-height: 1.5;
143
+  display: block;
144
+  float: left;
145
+  clear: left;
146
+  font: 12px/1.5 monaco, monospace;
147
+  margin: 5px;
148
+  padding: 15px;
149
+  border: 1px solid #eee;
150
+  max-width: 85%; /*(1)*/
151
+  max-width: -webkit-calc(100% - 42px);
152
+  max-width: -moz-calc(100% - 42px);
153
+  max-width: calc(100% - 42px); /*(2)*/
154
+  max-height: 300px;
155
+  word-wrap: break-word;
156
+  border-bottom-color: #ddd;
157
+  -webkit-box-shadow: 0 1px 3px #eee;
158
+  -moz-box-shadow: 0 1px 3px #eee;
159
+  box-shadow: 0 1px 3px #eee;
160
+  -webkit-border-radius: 3px;
161
+  -moz-border-radius: 3px;
162
+  border-radius: 3px;
163
+}
164
+
165
+#mocha .test .html-error pre.error {
166
+  border: none;
167
+  -webkit-border-radius: 0;
168
+  -moz-border-radius: 0;
169
+  border-radius: 0;
170
+  -webkit-box-shadow: 0;
171
+  -moz-box-shadow: 0;
172
+  box-shadow: 0;
173
+  padding: 0;
174
+  margin: 0;
175
+  margin-top: 18px;
176
+  max-height: none;
177
+}
178
+
179
+/**
180
+ * (1): approximate for browsers not supporting calc
181
+ * (2): 42 = 2*15 + 2*10 + 2*1 (padding + margin + border)
182
+ *      ^^ seriously
183
+ */
184
+#mocha .test pre {
185
+  display: block;
186
+  float: left;
187
+  clear: left;
188
+  font: 12px/1.5 monaco, monospace;
189
+  margin: 5px;
190
+  padding: 15px;
191
+  border: 1px solid #eee;
192
+  max-width: 85%; /*(1)*/
193
+  max-width: -webkit-calc(100% - 42px);
194
+  max-width: -moz-calc(100% - 42px);
195
+  max-width: calc(100% - 42px); /*(2)*/
196
+  word-wrap: break-word;
197
+  border-bottom-color: #ddd;
198
+  -webkit-box-shadow: 0 1px 3px #eee;
199
+  -moz-box-shadow: 0 1px 3px #eee;
200
+  box-shadow: 0 1px 3px #eee;
201
+  -webkit-border-radius: 3px;
202
+  -moz-border-radius: 3px;
203
+  border-radius: 3px;
204
+}
205
+
206
+#mocha .test h2 {
207
+  position: relative;
208
+}
209
+
210
+#mocha .test a.replay {
211
+  position: absolute;
212
+  top: 3px;
213
+  right: 0;
214
+  text-decoration: none;
215
+  vertical-align: middle;
216
+  display: block;
217
+  width: 15px;
218
+  height: 15px;
219
+  line-height: 15px;
220
+  text-align: center;
221
+  background: #eee;
222
+  font-size: 15px;
223
+  -webkit-border-radius: 15px;
224
+  -moz-border-radius: 15px;
225
+  border-radius: 15px;
226
+  -webkit-transition:opacity 200ms;
227
+  -moz-transition:opacity 200ms;
228
+  -o-transition:opacity 200ms;
229
+  transition: opacity 200ms;
230
+  opacity: 0.3;
231
+  color: #888;
232
+}
233
+
234
+#mocha .test:hover a.replay {
235
+  opacity: 1;
236
+}
237
+
238
+#mocha-report.pass .test.fail {
239
+  display: none;
240
+}
241
+
242
+#mocha-report.fail .test.pass {
243
+  display: none;
244
+}
245
+
246
+#mocha-report.pending .test.pass,
247
+#mocha-report.pending .test.fail {
248
+  display: none;
249
+}
250
+#mocha-report.pending .test.pass.pending {
251
+  display: block;
252
+}
253
+
254
+#mocha-error {
255
+  color: #c00;
256
+  font-size: 1.5em;
257
+  font-weight: 100;
258
+  letter-spacing: 1px;
259
+}
260
+
261
+#mocha-stats {
262
+  position: fixed;
263
+  top: 15px;
264
+  right: 10px;
265
+  font-size: 12px;
266
+  margin: 0;
267
+  color: #888;
268
+  z-index: 1;
269
+}
270
+
271
+#mocha-stats .progress {
272
+  float: right;
273
+  padding-top: 0;
274
+
275
+  /**
276
+   * Set safe initial values, so mochas .progress does not inherit these
277
+   * properties from Bootstrap .progress (which causes .progress height to
278
+   * equal line height set in Bootstrap).
279
+   */
280
+  height: auto;
281
+  -webkit-box-shadow: none;
282
+  -moz-box-shadow: none;
283
+  box-shadow: none;
284
+  background-color: initial;
285
+}
286
+
287
+#mocha-stats em {
288
+  color: black;
289
+}
290
+
291
+#mocha-stats a {
292
+  text-decoration: none;
293
+  color: inherit;
294
+}
295
+
296
+#mocha-stats a:hover {
297
+  border-bottom: 1px solid #eee;
298
+}
299
+
300
+#mocha-stats li {
301
+  display: inline-block;
302
+  margin: 0 5px;
303
+  list-style: none;
304
+  padding-top: 11px;
305
+}
306
+
307
+#mocha-stats canvas {
308
+  width: 40px;
309
+  height: 40px;
310
+}
311
+
312
+#mocha code .comment { color: #ddd; }
313
+#mocha code .init { color: #2f6fad; }
314
+#mocha code .string { color: #5890ad; }
315
+#mocha code .keyword { color: #8a6343; }
316
+#mocha code .number { color: #2f6fad; }
317
+
318
+@media screen and (max-device-width: 480px) {
319
+  #mocha {
320
+    margin: 60px 0px;
321
+  }
322
+
323
+  #mocha #stats {
324
+    position: absolute;
325
+  }
326
+}

+ 16205
- 0
node_modules/localforage/bower_components/mocha/mocha.js
File diff suppressed because it is too large
View File


+ 14
- 0
node_modules/localforage/bower_components/modernizr/.bower.json View File

@@ -0,0 +1,14 @@
1
+{
2
+  "name": "modernizr",
3
+  "homepage": "https://github.com/Modernizr/Modernizr",
4
+  "version": "2.8.3",
5
+  "_release": "2.8.3",
6
+  "_resolution": {
7
+    "type": "version",
8
+    "tag": "v2.8.3",
9
+    "commit": "d6bb30c0f12ebb3ddd01e90b0bf435e1c34e6f11"
10
+  },
11
+  "_source": "https://github.com/Modernizr/Modernizr.git",
12
+  "_target": "~2.8.1",
13
+  "_originalSource": "modernizr"
14
+}

+ 10
- 0
node_modules/localforage/bower_components/modernizr/.editorconfig View File

@@ -0,0 +1,10 @@
1
+# editorconfig.org
2
+root = true
3
+
4
+[*]
5
+indent_style = space
6
+indent_size = 2
7
+end_of_line = lf
8
+charset = utf-8
9
+trim_trailing_whitespace = true
10
+insert_final_newline = true

+ 8
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/a-download.js View File

@@ -0,0 +1,8 @@
1
+
2
+// a[download] attribute
3
+// When used on an <a>, this attribute signifies that the resource it
4
+// points to should be downloaded by the browser rather than navigating to it.
5
+// http://developers.whatwg.org/links.html#downloading-resources
6
+// By Addy Osmani
7
+
8
+Modernizr.addTest('adownload', 'download' in document.createElement('a'));

+ 4
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/audio-audiodata-api.js View File

@@ -0,0 +1,4 @@
1
+// Mozilla Audio Data API
2
+// https://wiki.mozilla.org/Audio_Data_API
3
+// by Addy Osmani
4
+Modernizr.addTest('audiodata', !!(window.Audio));

+ 4
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/audio-webaudio-api.js View File

@@ -0,0 +1,4 @@
1
+// Web Audio API
2
+// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html
3
+// By Addy Osmani
4
+Modernizr.addTest('webaudio', !!(window.webkitAudioContext || window.AudioContext));

+ 8
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/battery-api.js View File

@@ -0,0 +1,8 @@
1
+
2
+// Battery API
3
+// https://developer.mozilla.org/en/DOM/window.navigator.mozBattery
4
+// By: Paul Sayre
5
+
6
+Modernizr.addTest('battery',
7
+	!!Modernizr.prefixed('battery', navigator)
8
+);

+ 11
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/battery-level.js View File

@@ -0,0 +1,11 @@
1
+
2
+// Low Battery Level
3
+// Enable a developer to remove CPU intensive CSS/JS when battery is low
4
+// developer.mozilla.org/en/DOM/window.navigator.mozBattery
5
+// By: Paul Sayre
6
+
7
+Modernizr.addTest('lowbattery', function () {
8
+	var minLevel = 0.20,
9
+		battery = Modernizr.prefixed('battery', navigator);
10
+	return !!(battery && !battery.charging && battery.level <= minLevel);
11
+});

+ 10
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/blob-constructor.js View File

@@ -0,0 +1,10 @@
1
+// Blob constructor
2
+// http://dev.w3.org/2006/webapi/FileAPI/#constructorBlob
3
+
4
+Modernizr.addTest('blobconstructor', function () {
5
+    try {
6
+        return !!new Blob();
7
+    } catch (e) {
8
+        return false;
9
+    }
10
+});

+ 28
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/canvas-todataurl-type.js View File

@@ -0,0 +1,28 @@
1
+// canvas.toDataURL type support
2
+// http://www.w3.org/TR/html5/the-canvas-element.html#dom-canvas-todataurl
3
+
4
+// This test is asynchronous. Watch out.
5
+
6
+(function () {
7
+
8
+    if (!Modernizr.canvas) {
9
+        return false;
10
+    }
11
+
12
+    var image = new Image(),
13
+        canvas = document.createElement('canvas'),
14
+        ctx = canvas.getContext('2d');
15
+
16
+    image.onload = function() {
17
+        ctx.drawImage(image, 0, 0);
18
+
19
+        Modernizr.addTest('todataurljpeg', function() {
20
+            return canvas.toDataURL('image/jpeg').indexOf('data:image/jpeg') === 0;
21
+        });
22
+        Modernizr.addTest('todataurlwebp', function() {
23
+            return canvas.toDataURL('image/webp').indexOf('data:image/webp') === 0;
24
+        });
25
+    };
26
+
27
+    image.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==';
28
+}());

+ 9
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/contenteditable.js View File

@@ -0,0 +1,9 @@
1
+// contentEditable
2
+// http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#contenteditable
3
+
4
+// this is known to false positive in some mobile browsers
5
+// here is a whitelist of verified working browsers:
6
+// https://github.com/NielsLeenheer/html5test/blob/549f6eac866aa861d9649a0707ff2c0157895706/scripts/engine.js#L2083
7
+
8
+Modernizr.addTest('contenteditable',
9
+        'contentEditable' in document.documentElement);

+ 10
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/contentsecuritypolicy.js View File

@@ -0,0 +1,10 @@
1
+// Test for (experimental) Content Security Policy 1.1 support.
2
+//
3
+// This feature is still quite experimental, but is available now in Chrome 22.
4
+// If the `SecurityPolicy` property is available, you can be sure the browser
5
+// supports CSP. If it's not available, the browser still might support an
6
+// earlier version of the CSP spec.
7
+//
8
+// Editor's Draft: https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html
9
+
10
+Modernizr.addTest('contentsecuritypolicy', ('securityPolicy' in document || 'SecurityPolicy' in document));

+ 11
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/contextmenu.js View File

@@ -0,0 +1,11 @@
1
+// http://www.w3.org/TR/html5/interactive-elements.html#context-menus
2
+// Demo at http://thewebrocks.com/demos/context-menu/
3
+Modernizr.addTest(
4
+  'contextmenu', 
5
+  ('contextMenu' in document.documentElement && 'HTMLMenuItemElement' in window) 
6
+);
7
+
8
+
9
+
10
+
11
+

+ 15
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/cookies.js View File

@@ -0,0 +1,15 @@
1
+
2
+// by tauren
3
+// https://github.com/Modernizr/Modernizr/issues/191
4
+
5
+Modernizr.addTest('cookies', function () {
6
+  // Quick test if browser has cookieEnabled host property
7
+  if (navigator.cookieEnabled) return true;
8
+  // Create cookie
9
+  document.cookie = "cookietest=1";
10
+  var ret = document.cookie.indexOf("cookietest=") != -1;
11
+  // Delete cookie
12
+  document.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT";
13
+  return ret;
14
+});
15
+

+ 3
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/cors.js View File

@@ -0,0 +1,3 @@
1
+// cors
2
+// By Theodoor van Donge
3
+Modernizr.addTest('cors', !!(window.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest()));

+ 19
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-backgroundposition-shorthand.js View File

@@ -0,0 +1,19 @@
1
+/*
2
+    https://developer.mozilla.org/en/CSS/background-position
3
+    http://www.w3.org/TR/css3-background/#background-position
4
+
5
+    Example: http://jsfiddle.net/Blink/bBXvt/
6
+*/
7
+
8
+(function() {
9
+
10
+    var elem = document.createElement('a'),
11
+        eStyle = elem.style,
12
+        val = "right 10px bottom 10px";
13
+
14
+    Modernizr.addTest('bgpositionshorthand', function(){
15
+        eStyle.cssText = "background-position: " + val + ";";
16
+        return (eStyle.backgroundPosition === val);
17
+    });
18
+
19
+}());

+ 15
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-backgroundposition-xy.js View File

@@ -0,0 +1,15 @@
1
+/*
2
+	Allan Lei https://github.com/allanlei
3
+	
4
+	Check adapted from https://github.com/brandonaaron/jquery-cssHooks/blob/master/bgpos.js
5
+	
6
+	Test: http://jsfiddle.net/allanlei/R8AYS/
7
+*/
8
+Modernizr.addTest('bgpositionxy', function() {
9
+    return Modernizr.testStyles('#modernizr {background-position: 3px 5px;}', function(elem) {
10
+        var cssStyleDeclaration = window.getComputedStyle ? getComputedStyle(elem, null) : elem.currentStyle;
11
+        var xSupport = (cssStyleDeclaration.backgroundPositionX == '3px') || (cssStyleDeclaration['background-position-x'] == '3px');
12
+        var ySupport = (cssStyleDeclaration.backgroundPositionY == '5px') || (cssStyleDeclaration['background-position-y'] == '5px');
13
+        return xSupport && ySupport;
14
+    });
15
+});

+ 31
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-backgroundrepeat.js View File

@@ -0,0 +1,31 @@
1
+// developer.mozilla.org/en/CSS/background-repeat
2
+
3
+// test page: jsbin.com/uzesun/
4
+// http://jsfiddle.net/ryanseddon/yMLTQ/6/    
5
+
6
+(function(){
7
+
8
+
9
+function getBgRepeatValue(elem){
10
+    return (window.getComputedStyle ?
11
+             getComputedStyle(elem, null).getPropertyValue('background') :
12
+             elem.currentStyle['background']);
13
+}
14
+  
15
+
16
+Modernizr.testStyles(' #modernizr { background-repeat: round; } ', function(elem, rule){ 
17
+
18
+  Modernizr.addTest('bgrepeatround', getBgRepeatValue(elem) == 'round');
19
+
20
+});
21
+
22
+
23
+
24
+Modernizr.testStyles(' #modernizr { background-repeat: space; } ', function(elem, rule){ 
25
+
26
+  Modernizr.addTest('bgrepeatspace', getBgRepeatValue(elem) == 'space');
27
+
28
+});
29
+
30
+
31
+})();

+ 10
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-backgroundsizecover.js View File

@@ -0,0 +1,10 @@
1
+
2
+// developer.mozilla.org/en/CSS/background-size
3
+
4
+Modernizr.testStyles( '#modernizr{background-size:cover}', function( elem ) {
5
+	var style = window.getComputedStyle ?
6
+		window.getComputedStyle( elem, null )
7
+		: elem.currentStyle;
8
+		
9
+	Modernizr.addTest( 'bgsizecover', style.backgroundSize == 'cover' );
10
+});

+ 9
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-boxsizing.js View File

@@ -0,0 +1,9 @@
1
+
2
+// developer.mozilla.org/en/CSS/box-sizing
3
+// github.com/Modernizr/Modernizr/issues/248
4
+
5
+Modernizr.addTest("boxsizing",function(){
6
+    return Modernizr.testAllProps("boxSizing") && (document.documentMode === undefined || document.documentMode > 7);
7
+});
8
+
9
+

+ 12
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-calc.js View File

@@ -0,0 +1,12 @@
1
+// Method of allowing calculated values for length units, i.e. width: calc(100%-3em) http://caniuse.com/#search=calc
2
+// By @calvein
3
+
4
+Modernizr.addTest('csscalc', function() {
5
+    var prop = 'width:';
6
+    var value = 'calc(10px);';
7
+    var el = document.createElement('div');
8
+
9
+    el.style.cssText = prop + Modernizr._prefixes.join(value + prop);
10
+
11
+    return !!el.style.length;
12
+});

+ 8
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-cubicbezierrange.js View File

@@ -0,0 +1,8 @@
1
+// cubic-bezier values can't be > 1 for Webkit until bug #45761 (https://bugs.webkit.org/show_bug.cgi?id=45761) is fixed
2
+// By @calvein
3
+
4
+Modernizr.addTest('cubicbezierrange', function() {
5
+    var el = document.createElement('div');
6
+    el.style.cssText = Modernizr._prefixes.join('transition-timing-function' + ':cubic-bezier(1,0,0,1.1); ');
7
+    return !!el.style.length;
8
+});

+ 18
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-displayrunin.js View File

@@ -0,0 +1,18 @@
1
+
2
+// by alanhogan
3
+
4
+// https://github.com/Modernizr/Modernizr/issues/198
5
+// http://css-tricks.com/596-run-in/
6
+
7
+
8
+
9
+Modernizr.testStyles(' #modernizr { display: run-in; } ', function(elem, rule){ 
10
+
11
+  var ret = (window.getComputedStyle ?
12
+         getComputedStyle(elem, null).getPropertyValue('display') :
13
+         elem.currentStyle['display']);
14
+
15
+  Modernizr.addTest('display-runin', ret == 'run-in');
16
+
17
+});
18
+

+ 27
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-displaytable.js View File

@@ -0,0 +1,27 @@
1
+// display: table and table-cell test. (both are tested under one name "table-cell" )
2
+// By @scottjehl
3
+
4
+// all additional table display values are here: http://pastebin.com/Gk9PeVaQ though Scott has seen some IE false positives with that sort of weak detection.
5
+// more testing neccessary perhaps.
6
+
7
+Modernizr.addTest( "display-table",function(){
8
+  
9
+  var doc   = window.document,
10
+      docElem = doc.documentElement,   
11
+      parent  = doc.createElement( "div" ),
12
+      child = doc.createElement( "div" ),
13
+      childb  = doc.createElement( "div" ),
14
+      ret;
15
+  
16
+  parent.style.cssText = "display: table";
17
+  child.style.cssText = childb.style.cssText = "display: table-cell; padding: 10px";    
18
+          
19
+  parent.appendChild( child );
20
+  parent.appendChild( childb );
21
+  docElem.insertBefore( parent, docElem.firstChild );
22
+  
23
+  ret = child.offsetLeft < childb.offsetLeft;
24
+  docElem.removeChild(parent);
25
+  return ret; 
26
+});
27
+

+ 7
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-filters.js View File

@@ -0,0 +1,7 @@
1
+// https://github.com/Modernizr/Modernizr/issues/615
2
+// documentMode is needed for false positives in oldIE, please see issue above
3
+Modernizr.addTest('cssfilters', function() {
4
+    var el = document.createElement('div');
5
+    el.style.cssText = Modernizr._prefixes.join('filter' + ':blur(2px); ');
6
+    return !!el.style.length && ((document.documentMode === undefined || document.documentMode > 9));
7
+});

+ 205
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-hyphens.js View File

@@ -0,0 +1,205 @@
1
+/* see http://davidnewton.ca/the-current-state-of-hyphenation-on-the-web
2
+   http://davidnewton.ca/demos/hyphenation/test.html
3
+
4
+
5
+There are three tests:
6
+   1. csshyphens      - tests hyphens:auto actually adds hyphens to text
7
+   2. softhyphens     - tests that &shy; does its job
8
+   3. softhyphensfind - tests that in-browser Find functionality still works correctly with &shy;
9
+
10
+These tests currently require document.body to be present
11
+
12
+Hyphenation is language specific, sometimes.
13
+  See for more details: http://code.google.com/p/hyphenator/source/diff?spec=svn975&r=975&format=side&path=/trunk/Hyphenator.js#sc_svn975_313
14
+
15
+If loading Hyphenator.js via Modernizr.load, be cautious of issue 158: http://code.google.com/p/hyphenator/issues/detail?id=158
16
+
17
+More details at https://github.com/Modernizr/Modernizr/issues/312
18
+
19
+*/
20
+
21
+(function() {
22
+
23
+	if (!document.body){
24
+		window.console && console.warn('document.body doesn\'t exist. Modernizr hyphens test needs it.');
25
+		return;
26
+	}
27
+
28
+	// functional test of adding hyphens:auto
29
+	function test_hyphens_css() {
30
+		try {
31
+			/* create a div container and a span within that
32
+			 * these have to be appended to document.body, otherwise some browsers can give false negative */
33
+			var div = document.createElement('div'),
34
+				span = document.createElement('span'),
35
+				divStyle = div.style,
36
+				spanHeight = 0,
37
+				spanWidth = 0,
38
+				result = false,
39
+				firstChild = document.body.firstElementChild || document.body.firstChild;
40
+
41
+			div.appendChild(span);
42
+			span.innerHTML = 'Bacon ipsum dolor sit amet jerky velit in culpa hamburger et. Laborum dolor proident, enim dolore duis commodo et strip steak. Salami anim et, veniam consectetur dolore qui tenderloin jowl velit sirloin. Et ad culpa, fatback cillum jowl ball tip ham hock nulla short ribs pariatur aute. Pig pancetta ham bresaola, ut boudin nostrud commodo flank esse cow tongue culpa. Pork belly bresaola enim pig, ea consectetur nisi. Fugiat officia turkey, ea cow jowl pariatur ullamco proident do laborum velit sausage. Magna biltong sint tri-tip commodo sed bacon, esse proident aliquip. Ullamco ham sint fugiat, velit in enim sed mollit nulla cow ut adipisicing nostrud consectetur. Proident dolore beef ribs, laborum nostrud meatball ea laboris rump cupidatat labore culpa. Shankle minim beef, velit sint cupidatat fugiat tenderloin pig et ball tip. Ut cow fatback salami, bacon ball tip et in shank strip steak bresaola. In ut pork belly sed mollit tri-tip magna culpa veniam, short ribs qui in andouille ham consequat. Dolore bacon t-bone, velit short ribs enim strip steak nulla. Voluptate labore ut, biltong swine irure jerky. Cupidatat excepteur aliquip salami dolore. Ball tip strip steak in pork dolor. Ad in esse biltong. Dolore tenderloin exercitation ad pork loin t-bone, dolore in chicken ball tip qui pig. Ut culpa tongue, sint ribeye dolore ex shank voluptate hamburger. Jowl et tempor, boudin pork chop labore ham hock drumstick consectetur tri-tip elit swine meatball chicken ground round. Proident shankle mollit dolore. Shoulder ut duis t-bone quis reprehenderit. Meatloaf dolore minim strip steak, laboris ea aute bacon beef ribs elit shank in veniam drumstick qui. Ex laboris meatball cow tongue pork belly. Ea ball tip reprehenderit pig, sed fatback boudin dolore flank aliquip laboris eu quis. Beef ribs duis beef, cow corned beef adipisicing commodo nisi deserunt exercitation. Cillum dolor t-bone spare ribs, ham hock est sirloin. Brisket irure meatloaf in, boudin pork belly sirloin ball tip. Sirloin sint irure nisi nostrud aliqua. Nostrud nulla aute, enim officia culpa ham hock. Aliqua reprehenderit dolore sunt nostrud sausage, ea boudin pork loin ut t-bone ham tempor. Tri-tip et pancetta drumstick laborum. Ham hock magna do nostrud in proident. Ex ground round fatback, venison non ribeye in.';
43
+
44
+			document.body.insertBefore(div, firstChild);
45
+
46
+			/* get size of unhyphenated text */
47
+			divStyle.cssText = 'position:absolute;top:0;left:0;width:5em;text-align:justify;text-justification:newspaper;';
48
+			spanHeight = span.offsetHeight;
49
+			spanWidth = span.offsetWidth;
50
+
51
+			/* compare size with hyphenated text */
52
+			divStyle.cssText = 'position:absolute;top:0;left:0;width:5em;text-align:justify;'+
53
+												 'text-justification:newspaper;'+
54
+												 Modernizr._prefixes.join('hyphens:auto; ');
55
+
56
+			result = (span.offsetHeight != spanHeight || span.offsetWidth != spanWidth);
57
+
58
+			/* results and cleanup */
59
+			document.body.removeChild(div);
60
+			div.removeChild(span);
61
+
62
+			return result;
63
+		} catch(e) {
64
+			return false;
65
+		}
66
+	}
67
+
68
+	// for the softhyphens test
69
+	function test_hyphens(delimiter, testWidth) {
70
+		try {
71
+			/* create a div container and a span within that
72
+			 * these have to be appended to document.body, otherwise some browsers can give false negative */
73
+			var div = document.createElement('div'),
74
+				span = document.createElement('span'),
75
+				divStyle = div.style,
76
+				spanSize = 0,
77
+				result = false,
78
+				result1 = false,
79
+				result2 = false,
80
+				firstChild = document.body.firstElementChild || document.body.firstChild;
81
+
82
+			divStyle.cssText = 'position:absolute;top:0;left:0;overflow:visible;width:1.25em;';
83
+			div.appendChild(span);
84
+			document.body.insertBefore(div, firstChild);
85
+
86
+
87
+			/* get height of unwrapped text */
88
+			span.innerHTML = 'mm';
89
+			spanSize = span.offsetHeight;
90
+
91
+			/* compare height w/ delimiter, to see if it wraps to new line */
92
+			span.innerHTML = 'm' + delimiter + 'm';
93
+			result1 = (span.offsetHeight > spanSize);
94
+
95
+			/* if we're testing the width too (i.e. for soft-hyphen, not zws),
96
+			 * this is because tested Blackberry devices will wrap the text but not display the hyphen */
97
+			if (testWidth) {
98
+				/* get width of wrapped, non-hyphenated text */
99
+				span.innerHTML = 'm<br />m';
100
+				spanSize = span.offsetWidth;
101
+
102
+				/* compare width w/ wrapped w/ delimiter to see if hyphen is present */
103
+				span.innerHTML = 'm' + delimiter + 'm';
104
+				result2 = (span.offsetWidth > spanSize);
105
+			} else {
106
+				result2 = true;
107
+			}
108
+
109
+			/* results and cleanup */
110
+			if (result1 === true && result2 === true) { result = true; }
111
+			document.body.removeChild(div);
112
+			div.removeChild(span);
113
+
114
+			return result;
115
+		} catch(e) {
116
+			return false;
117
+		}
118
+	}
119
+
120
+	// testing if in-browser Find functionality will work on hyphenated text
121
+	function test_hyphens_find(delimiter) {
122
+		try {
123
+			/* create a dummy input for resetting selection location, and a div container
124
+			 * these have to be appended to document.body, otherwise some browsers can give false negative
125
+			 * div container gets the doubled testword, separated by the delimiter
126
+			 * Note: giving a width to div gives false positive in iOS Safari */
127
+			var dummy = document.createElement('input'),
128
+				div = document.createElement('div'),
129
+				testword = 'lebowski',
130
+				result = false,
131
+				textrange,
132
+				firstChild = document.body.firstElementChild || document.body.firstChild;
133
+
134
+			div.innerHTML = testword + delimiter + testword;
135
+
136
+			document.body.insertBefore(div, firstChild);
137
+			document.body.insertBefore(dummy, div);
138
+
139
+
140
+			/* reset the selection to the dummy input element, i.e. BEFORE the div container
141
+			 *   stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area */
142
+			if (dummy.setSelectionRange) {
143
+				dummy.focus();
144
+				dummy.setSelectionRange(0,0);
145
+			} else if (dummy.createTextRange) {
146
+				textrange = dummy.createTextRange();
147
+				textrange.collapse(true);
148
+				textrange.moveEnd('character', 0);
149
+				textrange.moveStart('character', 0);
150
+				textrange.select();
151
+			}
152
+
153
+			/* try to find the doubled testword, without the delimiter */
154
+			if (window.find) {
155
+				result = window.find(testword + testword);
156
+			} else {
157
+				try {
158
+					textrange = window.self.document.body.createTextRange();
159
+					result = textrange.findText(testword + testword);
160
+				} catch(e) {
161
+					result = false;
162
+				}
163
+			}
164
+
165
+			document.body.removeChild(div);
166
+			document.body.removeChild(dummy);
167
+
168
+			return result;
169
+		} catch(e) {
170
+			return false;
171
+		}
172
+	}
173
+
174
+	Modernizr.addTest("csshyphens", function() {
175
+
176
+		if (!Modernizr.testAllProps('hyphens')) return false;
177
+
178
+		/* Chrome lies about its hyphens support so we need a more robust test
179
+				crbug.com/107111
180
+		*/
181
+		try {
182
+			return test_hyphens_css();
183
+		} catch(e) {
184
+			return false;
185
+		}
186
+	});
187
+
188
+	Modernizr.addTest("softhyphens", function() {
189
+		try {
190
+			// use numeric entity instead of &shy; in case it's XHTML
191
+			return test_hyphens('&#173;', true) && test_hyphens('&#8203;', false);
192
+		} catch(e) {
193
+			return false;
194
+		}
195
+	});
196
+
197
+	Modernizr.addTest("softhyphensfind", function() {
198
+		try {
199
+			return test_hyphens_find('&#173;') && test_hyphens_find('&#8203;');
200
+		} catch(e) {
201
+			return false;
202
+		}
203
+	});
204
+
205
+})();

+ 11
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-lastchild.js View File

@@ -0,0 +1,11 @@
1
+// last-child pseudo selector
2
+// https://github.com/Modernizr/Modernizr/pull/304
3
+
4
+
5
+Modernizr.addTest('lastchild', function(){
6
+
7
+  return Modernizr.testStyles("#modernizr div {width:100px} #modernizr :last-child{width:200px;display:block}", function (elem) {
8
+    return elem.lastChild.offsetWidth > elem.firstChild.offsetWidth;
9
+  }, 2);
10
+
11
+});

+ 12
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-mask.js View File

@@ -0,0 +1,12 @@
1
+// this tests passes for webkit's proprietary `-webkit-mask` feature
2
+//   www.webkit.org/blog/181/css-masks/
3
+//   developer.apple.com/library/safari/#documentation/InternetWeb/Conceptual/SafariVisualEffectsProgGuide/Masks/Masks.html
4
+
5
+// it does not pass mozilla's implementation of `mask` for SVG
6
+
7
+//   developer.mozilla.org/en/CSS/mask
8
+//   developer.mozilla.org/En/Applying_SVG_effects_to_HTML_content
9
+
10
+// Can combine with clippaths for awesomeness: http://generic.cx/for/webkit/test.html
11
+
12
+Modernizr.addTest('cssmask', Modernizr.testAllProps('maskRepeat'));

+ 3
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-mediaqueries.js View File

@@ -0,0 +1,3 @@
1
+
2
+
3
+Modernizr.addTest('mediaqueries', Modernizr.mq('only all'));

+ 6
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-objectfit.js View File

@@ -0,0 +1,6 @@
1
+
2
+// dev.opera.com/articles/view/css3-object-fit-object-position/
3
+
4
+Modernizr.addTest('object-fit',
5
+	!!Modernizr.prefixed('objectFit')
6
+);

+ 9
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-overflow-scrolling.js View File

@@ -0,0 +1,9 @@
1
+
2
+// johanbrook.com/browsers/native-momentum-scrolling-ios-5/
3
+// introduced in iOS5b2. Possible API may change...
4
+
5
+Modernizr.addTest("overflowscrolling",function(){
6
+    return Modernizr.testAllProps("overflowScrolling");
7
+});
8
+
9
+

+ 25
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-pointerevents.js View File

@@ -0,0 +1,25 @@
1
+
2
+// developer.mozilla.org/en/CSS/pointer-events
3
+
4
+// Test and project pages:
5
+// ausi.github.com/Feature-detection-technique-for-pointer-events/
6
+// github.com/ausi/Feature-detection-technique-for-pointer-events/wiki
7
+// github.com/Modernizr/Modernizr/issues/80
8
+
9
+
10
+Modernizr.addTest('pointerevents', function(){
11
+    var element = document.createElement('x'),
12
+        documentElement = document.documentElement,
13
+        getComputedStyle = window.getComputedStyle,
14
+        supports;
15
+    if(!('pointerEvents' in element.style)){
16
+        return false;
17
+    }
18
+    element.style.pointerEvents = 'auto';
19
+    element.style.pointerEvents = 'x';
20
+    documentElement.appendChild(element);
21
+    supports = getComputedStyle &&
22
+        getComputedStyle(element, '').pointerEvents === 'auto';
23
+    documentElement.removeChild(element);
24
+    return !!supports;
25
+});

+ 13
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-positionsticky.js View File

@@ -0,0 +1,13 @@
1
+// Sticky positioning - constrains an element to be positioned inside the
2
+// intersection of its container box, and the viewport.
3
+Modernizr.addTest('csspositionsticky', function () {
4
+
5
+    var prop = 'position:';
6
+    var value = 'sticky';
7
+    var el = document.createElement('modernizr');
8
+    var mStyle = el.style;
9
+
10
+    mStyle.cssText = prop + Modernizr._prefixes.join(value + ';' + prop).slice(0, -prop.length);
11
+
12
+    return mStyle.position.indexOf(value) !== -1;
13
+});

+ 55
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-regions.js View File

@@ -0,0 +1,55 @@
1
+// CSS Regions
2
+// http://www.w3.org/TR/css3-regions/
3
+// By: Mihai Balan
4
+
5
+// We start with a CSS parser test then we check page geometry to see if it's affected by regions
6
+// Later we might be able to retire the second part, as WebKit builds with the false positives die out
7
+
8
+Modernizr.addTest('regions', function() {
9
+
10
+	/* Get the 'flowFrom' property name available in the browser. Either default or vendor prefixed.
11
+	If the property name can't be found we'll get Boolean 'false' and fail quickly */
12
+	var flowFromProperty = Modernizr.prefixed("flowFrom"),
13
+		flowIntoProperty = Modernizr.prefixed("flowInto");
14
+
15
+	if (!flowFromProperty || !flowIntoProperty){
16
+		return false;
17
+	}
18
+
19
+	/* If CSS parsing is there, try to determine if regions actually work. */
20
+	var container		= document.createElement('div'),
21
+		content			= document.createElement('div'),
22
+		region			= document.createElement('div'),
23
+
24
+	/* we create a random, unlikely to be generated flow number to make sure we don't
25
+	clash with anything more vanilla, like 'flow', or 'article', or 'f1' */
26
+	flowName = 'modernizr_flow_for_regions_check';
27
+
28
+	/* First create a div with two adjacent divs inside it. The first will be the
29
+	content, the second will be the region. To be able to distinguish between the two,
30
+	we'll give the region a particular padding */
31
+	content.innerText		= 'M';
32
+	container.style.cssText	= 'top: 150px; left: 150px; padding: 0px;';
33
+	region.style.cssText	= 'width: 50px; height: 50px; padding: 42px;';
34
+
35
+	region.style[flowFromProperty] = flowName;
36
+	container.appendChild(content);
37
+	container.appendChild(region);
38
+	document.documentElement.appendChild(container);
39
+
40
+	/* Now compute the bounding client rect, before and after attempting to flow the
41
+	content div in the region div. If regions are enabled, the after bounding rect
42
+	should reflect the padding of the region div.*/
43
+	var flowedRect, delta,
44
+		plainRect = content.getBoundingClientRect();
45
+
46
+
47
+	content.style[flowIntoProperty] = flowName;
48
+	flowedRect = content.getBoundingClientRect();
49
+
50
+	delta = flowedRect.left - plainRect.left;
51
+	document.documentElement.removeChild(container);
52
+	content = region = container = undefined;
53
+
54
+	return (delta == 42);
55
+});

+ 19
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-remunit.js View File

@@ -0,0 +1,19 @@
1
+
2
+// test by github.com/nsfmc
3
+
4
+// "The 'rem' unit ('root em') is relative to the computed
5
+// value of the 'font-size' value of the root element."
6
+// http://www.w3.org/TR/css3-values/#relative0
7
+// you can test by checking if the prop was ditched
8
+
9
+// http://snook.ca/archives/html_and_css/font-size-with-rem
10
+
11
+Modernizr.addTest('cssremunit', function(){
12
+
13
+  var div = document.createElement('div');
14
+  try {
15
+    div.style.fontSize = '3rem';
16
+  } catch(er){}
17
+  return (/rem/).test(div.style.fontSize);
18
+
19
+});

+ 8
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-resize.js View File

@@ -0,0 +1,8 @@
1
+
2
+// Test for CSS 3 UI "resize" property
3
+// http://www.w3.org/TR/css3-ui/#resize
4
+// https://developer.mozilla.org/en/CSS/resize
5
+
6
+Modernizr.addTest('cssresize', Modernizr.testAllProps('resize'));
7
+
8
+

+ 19
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-scrollbars.js View File

@@ -0,0 +1,19 @@
1
+// Stylable scrollbars detection
2
+Modernizr.addTest('cssscrollbar', function() {
3
+
4
+	var bool,
5
+
6
+		styles = "#modernizr{overflow: scroll; width: 40px }#" +
7
+			Modernizr._prefixes
8
+				.join("scrollbar{width:0px}"+' #modernizr::')
9
+				.split('#')
10
+				.slice(1)
11
+				.join('#') + "scrollbar{width:0px}";
12
+
13
+	Modernizr.testStyles(styles, function(node) {
14
+		bool = 'scrollWidth' in node && node.scrollWidth == 40;
15
+	});
16
+
17
+	return bool;
18
+
19
+});

+ 4
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-shapes.js View File

@@ -0,0 +1,4 @@
1
+
2
+// http://html.adobe.com/webplatform/layout/shapes
3
+
4
+Modernizr.addTest('shapes', Modernizr.testAllProps('shapeOutside', 'content-box', true));

+ 23
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-subpixelfont.js View File

@@ -0,0 +1,23 @@
1
+/*
2
+ * Test for SubPixel Font Rendering
3
+ * (to infer if GDI or DirectWrite is used on Windows)
4
+ * Authors: @derSchepp, @gerritvanaaken, @rodneyrehm, @yatil, @ryanseddon
5
+ * Web: https://github.com/gerritvanaaken/subpixeldetect
6
+ */
7
+Modernizr.addTest('subpixelfont', function() {
8
+    var bool,
9
+        styles = "#modernizr{position: absolute; top: -10em; visibility:hidden; font: normal 10px arial;}#subpixel{float: left; font-size: 33.3333%;}";
10
+    
11
+    // see https://github.com/Modernizr/Modernizr/blob/master/modernizr.js#L97
12
+    Modernizr.testStyles(styles, function(elem) {
13
+        var subpixel = elem.firstChild;
14
+
15
+        subpixel.innerHTML = 'This is a text written in Arial';
16
+
17
+        bool = window.getComputedStyle ?
18
+            window.getComputedStyle(subpixel, null).getPropertyValue("width") !== '44px'
19
+            : false;
20
+    }, 1, ['subpixel']);
21
+
22
+    return bool;
23
+});

+ 6
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-supports.js View File

@@ -0,0 +1,6 @@
1
+// http://dev.w3.org/csswg/css3-conditional/#at-supports
2
+// github.com/Modernizr/Modernizr/issues/648
3
+// Relies on the fact that a browser vendor should expose the CSSSupportsRule interface
4
+// http://dev.w3.org/csswg/css3-conditional/#the-csssupportsrule-interface
5
+
6
+Modernizr.addTest("supports","CSSSupportsRule" in window);

+ 10
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-userselect.js View File

@@ -0,0 +1,10 @@
1
+// -moz-user-select:none test.
2
+
3
+// by ryan seddon
4
+//https://github.com/Modernizr/Modernizr/issues/250
5
+
6
+
7
+Modernizr.addTest("userselect",function(){
8
+    return Modernizr.testAllProps("user-select");
9
+});
10
+

+ 14
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-vhunit.js View File

@@ -0,0 +1,14 @@
1
+// https://github.com/Modernizr/Modernizr/issues/572
2
+// Similar to http://jsfiddle.net/FWeinb/etnYC/
3
+Modernizr.addTest('cssvhunit', function() {
4
+    var bool;
5
+    Modernizr.testStyles("#modernizr { height: 50vh; }", function(elem, rule) {   
6
+        var height = parseInt(window.innerHeight/2,10),
7
+            compStyle = parseInt((window.getComputedStyle ?
8
+                      getComputedStyle(elem, null) :
9
+                      elem.currentStyle)["height"],10);
10
+        
11
+        bool= (compStyle == height);
12
+    });
13
+    return bool;
14
+});

+ 14
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-vmaxunit.js View File

@@ -0,0 +1,14 @@
1
+// https://github.com/Modernizr/Modernizr/issues/572
2
+// http://jsfiddle.net/glsee/JDsWQ/4/
3
+Modernizr.addTest('cssvmaxunit', function(){
4
+    var bool;
5
+    Modernizr.testStyles("#modernizr { width: 50vmax; }", function(elem, rule) {
6
+        var one_vw = window.innerWidth/100,
7
+            one_vh = window.innerHeight/100,
8
+            compWidth = parseInt((window.getComputedStyle ?
9
+                                  getComputedStyle(elem, null) :
10
+                                  elem.currentStyle)['width'],10);
11
+        bool = ( parseInt(Math.max(one_vw, one_vh)*50,10) == compWidth );
12
+    });
13
+    return bool;
14
+});

+ 14
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-vminunit.js View File

@@ -0,0 +1,14 @@
1
+// https://github.com/Modernizr/Modernizr/issues/572
2
+// http://jsfiddle.net/glsee/JRmdq/8/
3
+Modernizr.addTest('cssvminunit', function(){
4
+    var bool;
5
+    Modernizr.testStyles("#modernizr { width: 50vmin; }", function(elem, rule) {
6
+        var one_vw = window.innerWidth/100,
7
+            one_vh = window.innerHeight/100,
8
+            compWidth = parseInt((window.getComputedStyle ?
9
+                                  getComputedStyle(elem, null) :
10
+                                  elem.currentStyle)['width'],10);
11
+        bool = ( parseInt(Math.min(one_vw, one_vh)*50,10) == compWidth );
12
+    });
13
+    return bool;
14
+});

+ 14
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/css-vwunit.js View File

@@ -0,0 +1,14 @@
1
+// https://github.com/Modernizr/Modernizr/issues/572
2
+// http://jsfiddle.net/FWeinb/etnYC/
3
+Modernizr.addTest('cssvwunit', function(){
4
+    var bool;
5
+    Modernizr.testStyles("#modernizr { width: 50vw; }", function(elem, rule) {
6
+        var width = parseInt(window.innerWidth/2,10),
7
+            compStyle = parseInt((window.getComputedStyle ?
8
+                      getComputedStyle(elem, null) :
9
+                      elem.currentStyle)["width"],10);
10
+        
11
+        bool= (compStyle == width);
12
+    });
13
+    return bool;
14
+});

+ 10
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/custom-protocol-handler.js View File

@@ -0,0 +1,10 @@
1
+/*
2
+	Custom protocol handler support
3
+	http://developers.whatwg.org/timers.html#custom-handlers
4
+	
5
+	Added by @benschwarz
6
+*/
7
+
8
+Modernizr.addTest('customprotocolhandler', function () {
9
+    return !!navigator.registerProtocolHandler;
10
+});

+ 6
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/dart.js View File

@@ -0,0 +1,6 @@
1
+// Dart
2
+// By Theodoor van Donge
3
+
4
+// https://chromiumcodereview.appspot.com/9232049/
5
+
6
+Modernizr.addTest('dart', !!Modernizr.prefixed('startDart', navigator));

+ 4
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/dataview-api.js View File

@@ -0,0 +1,4 @@
1
+// DataView 
2
+// https://developer.mozilla.org/en/JavaScript_typed_arrays/DataView
3
+// By Addy Osmani
4
+Modernizr.addTest('dataview', (typeof DataView !== 'undefined' && 'getFloat64' in DataView.prototype));

+ 4
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/dom-classlist.js View File

@@ -0,0 +1,4 @@
1
+// classList
2
+// https://developer.mozilla.org/en/DOM/element.classList
3
+// By Addy Osmani
4
+Modernizr.addTest('classlist', 'classList' in document.documentElement);

+ 11
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/dom-createElement-attrs.js View File

@@ -0,0 +1,11 @@
1
+// by james a rosen.
2
+// https://github.com/Modernizr/Modernizr/issues/258
3
+
4
+Modernizr.addTest('createelement-attrs', function() {
5
+  try {
6
+    return document.createElement("<input name='test' />").getAttribute('name') == 'test';
7
+  } catch(e) {
8
+    return false;
9
+  }
10
+});
11
+

+ 0
- 0
node_modules/localforage/bower_components/modernizr/feature-detects/dom-dataset.js View File


Some files were not shown because too many files changed in this diff