[Pkg-javascript-commits] [libjs-semanticui] 05/07: New upstream version 2.2.13+dfsg

Michael Lustfield mtecknology at debian.org
Wed Oct 4 05:12:08 UTC 2017


This is an automated email from the git hooks/post-receive script.

mtecknology pushed a commit to branch master
in repository libjs-semanticui.

commit fddb287d718873e06b988130e0114cc0cab35188
Author: Michael Lustfield <michael at lustfield.net>
Date:   Tue Oct 3 23:46:54 2017 -0500

    New upstream version 2.2.13+dfsg
---
 dist/components/accordion.min.css                  |    9 -
 dist/components/accordion.min.js                   |    1 -
 dist/components/ad.min.css                         |   10 -
 dist/components/api.min.js                         |    1 -
 dist/components/breadcrumb.min.css                 |    9 -
 dist/components/button.min.css                     |    9 -
 dist/components/card.min.css                       |    9 -
 dist/components/checkbox.min.css                   |    9 -
 dist/components/checkbox.min.js                    |    1 -
 dist/components/colorize.min.js                    |   11 -
 dist/components/comment.min.css                    |    9 -
 dist/components/container.min.css                  |    9 -
 dist/components/dimmer.min.css                     |    9 -
 dist/components/dimmer.min.js                      |    1 -
 dist/components/divider.min.css                    |    9 -
 dist/components/dropdown.min.css                   |    9 -
 dist/components/dropdown.min.js                    |    2 -
 dist/components/embed.min.css                      |    9 -
 dist/components/embed.min.js                       |    1 -
 dist/components/feed.min.css                       |    9 -
 dist/components/flag.min.css                       |    9 -
 dist/components/form.min.css                       |    9 -
 dist/components/form.min.js                        |    1 -
 dist/components/grid.min.css                       |    9 -
 dist/components/header.min.css                     |    9 -
 dist/components/icon.min.css                       |    9 -
 dist/components/image.min.css                      |    9 -
 dist/components/input.min.css                      |    9 -
 dist/components/item.min.css                       |    9 -
 dist/components/label.min.css                      |    9 -
 dist/components/list.min.css                       |    9 -
 dist/components/loader.min.css                     |    9 -
 dist/components/menu.min.css                       |    1 -
 dist/components/message.min.css                    |    9 -
 dist/components/modal.min.css                      |    9 -
 dist/components/modal.min.js                       |    1 -
 dist/components/nag.min.css                        |    9 -
 dist/components/nag.min.js                         |    1 -
 dist/components/popup.min.css                      |    9 -
 dist/components/popup.min.js                       |    1 -
 dist/components/progress.min.css                   |    9 -
 dist/components/progress.min.js                    |    1 -
 dist/components/rail.min.css                       |    9 -
 dist/components/rating.min.css                     |    9 -
 dist/components/rating.min.js                      |    1 -
 dist/components/reset.min.css                      |    9 -
 dist/components/reveal.min.css                     |    9 -
 dist/components/search.min.css                     |    9 -
 dist/components/search.min.js                      |    1 -
 dist/components/segment.min.css                    |    9 -
 dist/components/shape.min.css                      |    9 -
 dist/components/shape.min.js                       |    1 -
 dist/components/sidebar.min.css                    |    9 -
 dist/components/sidebar.min.js                     |    1 -
 dist/components/site.min.css                       |    9 -
 dist/components/site.min.js                        |    1 -
 dist/components/state.min.js                       |    1 -
 dist/components/statistic.min.css                  |    9 -
 dist/components/step.min.css                       |    9 -
 dist/components/sticky.min.css                     |    9 -
 dist/components/sticky.min.js                      |    1 -
 dist/components/tab.min.css                        |    9 -
 dist/components/tab.min.js                         |    1 -
 dist/components/table.min.css                      |    9 -
 dist/components/transition.min.css                 |    9 -
 dist/components/transition.min.js                  |    1 -
 dist/components/video.min.css                      |   10 -
 dist/components/video.min.js                       |   11 -
 dist/components/visibility.min.js                  |    1 -
 dist/components/visit.min.js                       |   11 -
 dist/semantic.min.css                              |  364 --
 dist/semantic.min.js                               |   19 -
 examples/assets/library/iframe-content.js          |  707 ---
 examples/assets/library/iframe.js                  |  642 ---
 examples/assets/library/jquery.min.js              |    4 -
 test/coverage/PhantomJS 1.9.2 (Linux)/index.html   |  320 --
 test/coverage/PhantomJS 1.9.2 (Linux)/prettify.css |    1 -
 test/coverage/PhantomJS 1.9.2 (Linux)/prettify.js  |    1 -
 ...ge-PhantomJS 1.9.2 (Linux)-20131014_012621.json |    1 -
 ...ge-PhantomJS 1.9.2 (Linux)-20131014_012811.json |    1 -
 test/fixtures/accordion.html                       |   24 -
 test/fixtures/checkbox.html                        |   46 -
 test/fixtures/dropdown.html                        |    9 -
 test/fixtures/modal.html                           |   25 -
 test/fixtures/popup.html                           |    8 -
 test/fixtures/rating.html                          |    7 -
 test/fixtures/shape.html                           |    7 -
 test/fixtures/sidebar.html                         |   25 -
 test/fixtures/tab.html                             |    8 -
 test/fixtures/transition.html                      |    1 -
 test/fixtures/video.html                           |    5 -
 test/helpers/jasmine-clog.js                       |   17 -
 test/helpers/jasmine-jquery.js                     |  705 ---
 test/helpers/jasmine-sinon.js                      |   58 -
 test/helpers/jquery-events.js                      |   28 -
 test/helpers/sinon.js                              | 4819 --------------------
 test/meteor/assets.js                              |   20 -
 test/meteor/fonts.js                               |   16 -
 test/modules/accordion.spec.js                     |   10 -
 test/modules/checkbox.spec.js                      |    8 -
 test/modules/dropdown.spec.js                      |    8 -
 test/modules/modal.spec.js                         |   10 -
 test/modules/module.spec.js                        |  218 -
 test/modules/popup.spec.js                         |    8 -
 test/modules/search.spec.js                        |    8 -
 test/modules/shape.spec.js                         |    8 -
 test/modules/sidebar.spec.js                       |    8 -
 test/modules/tab.spec.js                           |    9 -
 test/modules/transition.spec.js                    |    8 -
 test/modules/video.spec.js                         |    8 -
 110 files changed, 8662 deletions(-)

diff --git a/dist/components/accordion.min.css b/dist/components/accordion.min.css
deleted file mode 100755
index c1e9c44..0000000
--- a/dist/components/accordion.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Accordion
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.accordion,.ui.accordion .accordion{max-width:100%}.ui.accordion .accordion{margin:1em 0 0;padding:0}.ui.accordion .accordion .title,.ui.accordion .title{cursor:pointer}.ui.accordion .title:not(.ui){padding:.5em 0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:1em;color:rgba(0,0,0,.87)}.ui.accordion .accordion .title~.content,.ui.accordion .title~.content{display:none}.ui.accordion:not(.styled) .accordion .title~.content:not(.ui),.ui.accordion:not(.styled) . [...]
\ No newline at end of file
diff --git a/dist/components/accordion.min.js b/dist/components/accordion.min.js
deleted file mode 100644
index cae2a00..0000000
--- a/dist/components/accordion.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,n,t,i){"use strict";n=void 0!==n&&n.Math==Math?n:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.accordion=function(t){var i,o=e(this),a=(new Date).getTime(),s=[],r=arguments[0],c="string"==typeof r,l=[].slice.call(arguments,1);n.requestAnimationFrame||n.mozRequestAnimationFrame||n.webkitRequestAnimationFrame||n.msRequestAnimationFrame;return o.each(function(){var d,u,g=e.isPlainObject(t)?e.extend(!0,{},e.fn.accordion.settings,t):e.extend({},e.fn [...]
\ No newline at end of file
diff --git a/dist/components/ad.min.css b/dist/components/ad.min.css
deleted file mode 100644
index ab4a55d..0000000
--- a/dist/components/ad.min.css
+++ /dev/null
@@ -1,10 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Ad
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Copyright 2013 Contributors
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.ad{display:block;overflow:hidden;margin:1em 0}.ui.ad:first-child{margin:0}.ui.ad:last-child{margin:0}.ui.ad iframe{margin:0;padding:0;border:none;overflow:hidden}.ui.leaderboard.ad{width:728px;height:90px}.ui[class*="medium rectangle"].ad{width:300px;height:250px}.ui[class*="large rectangle"].ad{width:336px;height:280px}.ui[class*="half page"].ad{width:300px;height:600px}.ui.square.ad{width:250px;height:250px}.ui[class*="small square"].ad{width:200px;height:200px}.ui[class*="small [...]
\ No newline at end of file
diff --git a/dist/components/api.min.js b/dist/components/api.min.js
deleted file mode 100644
index ab6947b..0000000
--- a/dist/components/api.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t,r,n){"use strict";var t=void 0!==t&&t.Math==Math?t:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();e.api=e.fn.api=function(r){var n,o=e(e.isFunction(this)?t:this),i=o.selector||"",s=(new Date).getTime(),a=[],u=arguments[0],c="string"==typeof u,d=[].slice.call(arguments,1);return o.each(function(){var o,l,g,f,p,m=e.isPlainObject(r)?e.extend(!0,{},e.fn.api.settings,r):e.extend({},e.fn.api.settings),v=m.namespace,b=m.metadata,h=m.selector,y=m.error,q=m [...]
\ No newline at end of file
diff --git a/dist/components/breadcrumb.min.css b/dist/components/breadcrumb.min.css
deleted file mode 100755
index b319278..0000000
--- a/dist/components/breadcrumb.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Breadcrumb
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.breadcrumb{line-height:1;display:inline-block;margin:0 0;vertical-align:middle}.ui.breadcrumb:first-child{margin-top:0}.ui.breadcrumb:last-child{margin-bottom:0}.ui.breadcrumb .divider{display:inline-block;opacity:.7;margin:0 .21428571rem 0;font-size:.92857143em;color:rgba(0,0,0,.4);vertical-align:baseline}.ui.breadcrumb a{color:#4183c4}.ui.breadcrumb a:hover{color:#1e70bf}.ui.breadcrumb .icon.divider{font-size:.85714286em;vertical-align:baseline}.ui.breadcrumb a.section{cursor:po [...]
\ No newline at end of file
diff --git a/dist/components/button.min.css b/dist/components/button.min.css
deleted file mode 100755
index 239a3a1..0000000
--- a/dist/components/button.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Button
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.button{cursor:pointer;display:inline-block;min-height:1em;outline:0;border:none;vertical-align:baseline;background:#e0e1e2 none;color:rgba(0,0,0,.6);font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;margin:0 .25em 0 0;padding:.78571429em 1.5em .78571429em;text-transform:none;text-shadow:none;font-weight:700;line-height:1em;font-style:normal;text-align:center;text-decoration:none;border-radius:.28571429rem;box-shadow:0 0 0 1px transparent inset,0 0 0 0 rgba(34,36,38,.15) [...]
\ No newline at end of file
diff --git a/dist/components/card.min.css b/dist/components/card.min.css
deleted file mode 100755
index aa7f4e8..0000000
--- a/dist/components/card.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Item
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.card,.ui.cards>.card{max-width:100%;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:290px;min-height:0;background:#fff;padding:0;border:none;border-radius:.28571429rem;box-shadow:0 1px 3px 0 #d4d4d5,0 0 0 1px #d4d4d5;-webkit-transition:box-shadow .1s ease,-webkit-transform .1s ease;transition:box-shadow .1s ease,-webkit-transform .1s ease;transition [...]
\ No newline at end of file
diff --git a/dist/components/checkbox.min.css b/dist/components/checkbox.min.css
deleted file mode 100755
index 2274cab..0000000
--- a/dist/components/checkbox.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Checkbox
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.checkbox{position:relative;display:inline-block;-webkit-backface-visibility:hidden;backface-visibility:hidden;outline:0;vertical-align:baseline;font-style:normal;min-height:17px;font-size:1rem;line-height:17px;min-width:17px}.ui.checkbox input[type=checkbox],.ui.checkbox input[type=radio]{cursor:pointer;position:absolute;top:0;left:0;opacity:0!important;outline:0;z-index:3;width:17px;height:17px}.ui.checkbox .box,.ui.checkbox label{cursor:auto;position:relative;display:block;paddi [...]
\ No newline at end of file
diff --git a/dist/components/checkbox.min.js b/dist/components/checkbox.min.js
deleted file mode 100644
index 04e359f..0000000
--- a/dist/components/checkbox.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,n,i,t){"use strict";n=void 0!==n&&n.Math==Math?n:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.checkbox=function(t){var o,a=e(this),c=a.selector||"",r=(new Date).getTime(),d=[],l=arguments[0],s="string"==typeof l,u=[].slice.call(arguments,1);return a.each(function(){var a,b,h=e.extend(!0,{},e.fn.checkbox.settings,t),g=h.className,f=h.namespace,p=h.selector,k=h.error,m="."+f,v="module-"+f,y=e(this),C=e(this).children(p.label),x=e(this).children( [...]
\ No newline at end of file
diff --git a/dist/components/colorize.min.js b/dist/components/colorize.min.js
deleted file mode 100644
index de6629d..0000000
--- a/dist/components/colorize.min.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- * # Semantic UI 2.0.0 - Colorize
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Copyright 2015 Contributors
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */
-!function(e,n,i,t){"use strict";e.fn.colorize=function(n){var i=e.isPlainObject(n)?e.extend(!0,{},e.fn.colorize.settings,n):e.extend({},e.fn.colorize.settings),o=arguments||!1;return e(this).each(function(n){var a,r,c,s,d,g,u,l,m=e(this),f=e("<canvas />")[0],h=e("<canvas />")[0],p=e("<canvas />")[0],v=new Image,w=i.colors,b=(i.paths,i.namespace),y=i.error,C=m.data("module-"+b);return l={checkPreconditions:function(){return l.debug("Checking pre-conditions"),!e.isPlainObject(w)||e.isEmpty [...]
\ No newline at end of file
diff --git a/dist/components/comment.min.css b/dist/components/comment.min.css
deleted file mode 100755
index d298823..0000000
--- a/dist/components/comment.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Comment
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.comments{margin:1.5em 0;max-width:650px}.ui.comments:first-child{margin-top:0}.ui.comments:last-child{margin-bottom:0}.ui.comments .comment{position:relative;background:0 0;margin:.5em 0 0;padding:.5em 0 0;border:none;border-top:none;line-height:1.2}.ui.comments .comment:first-child{margin-top:0;padding-top:0}.ui.comments .comment .comments{margin:0 0 .5em .5em;padding:1em 0 1em 1em}.ui.comments .comment .comments:before{position:absolute;top:0;left:0}.ui.comments .comment .commen [...]
\ No newline at end of file
diff --git a/dist/components/container.min.css b/dist/components/container.min.css
deleted file mode 100644
index dca5bde..0000000
--- a/dist/components/container.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Container
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.container{display:block;max-width:100%!important}@media only screen and (max-width:767px){.ui.container{width:auto!important;margin-left:1em!important;margin-right:1em!important}.ui.grid.container{width:auto!important}.ui.relaxed.grid.container{width:auto!important}.ui.very.relaxed.grid.container{width:auto!important}}@media only screen and (min-width:768px) and (max-width:991px){.ui.container{width:723px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{wi [...]
\ No newline at end of file
diff --git a/dist/components/dimmer.min.css b/dist/components/dimmer.min.css
deleted file mode 100755
index f8b48fa..0000000
--- a/dist/components/dimmer.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Dimmer
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.dimmable:not(body){position:relative}.ui.dimmer{display:none;position:absolute;top:0!important;left:0!important;width:100%;height:100%;text-align:center;vertical-align:middle;background-color:rgba(0,0,0,.85);opacity:0;line-height:1;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-transition:background-color .5s linear;transition:background-color .5s linear;-webkit-user-select:none;-moz-user-select:none;-ms-user-se [...]
\ No newline at end of file
diff --git a/dist/components/dimmer.min.js b/dist/components/dimmer.min.js
deleted file mode 100755
index 5f9b041..0000000
--- a/dist/components/dimmer.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,i,n,t){"use strict";i=void 0!==i&&i.Math==Math?i:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.dimmer=function(i){var t,o=e(this),a=(new Date).getTime(),r=[],s=arguments[0],d="string"==typeof s,m=[].slice.call(arguments,1);return o.each(function(){var c,u,l,f=e.isPlainObject(i)?e.extend(!0,{},e.fn.dimmer.settings,i):e.extend({},e.fn.dimmer.settings),g=f.selector,v=f.namespace,p=f.className,h=f.error,b="."+v,y="module-"+v,C=o.selector||"",w="ont [...]
\ No newline at end of file
diff --git a/dist/components/divider.min.css b/dist/components/divider.min.css
deleted file mode 100755
index 7252989..0000000
--- a/dist/components/divider.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Divider
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.divider{margin:1rem 0;line-height:1;height:0;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:rgba(0,0,0,.85);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ui.divider:not(.vertical):not(.horizontal){border-top:1px solid rgba(34,36,38,.15);border-bottom:1px solid rgba(255,255,255,.1)}.ui.grid>.column+.divider,.ui.grid>.row>.column+.divider{left:auto}.ui.horizontal.divider{display:tabl [...]
\ No newline at end of file
diff --git a/dist/components/dropdown.min.css b/dist/components/dropdown.min.css
deleted file mode 100755
index 17456f7..0000000
--- a/dist/components/dropdown.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Dropdown
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.dropdown{cursor:pointer;position:relative;display:inline-block;outline:0;text-align:left;-webkit-transition:box-shadow .1s ease,width .1s ease;transition:box-shadow .1s ease,width .1s ease;-webkit-tap-highlight-color:transparent}.ui.dropdown .menu{cursor:auto;position:absolute;display:none;outline:0;top:100%;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;margin:0;padding:0 0;background:#fff;font-size:1em;text-shadow:none;text-align:left;box-shadow:0 [...]
\ No newline at end of file
diff --git a/dist/components/dropdown.min.js b/dist/components/dropdown.min.js
deleted file mode 100644
index c3e50b6..0000000
--- a/dist/components/dropdown.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(e,t,n,i){"use strict";t=void 0!==t&&t.Math==Math?t:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.dropdown=function(i){var a,o=e(this),s=e(n),r=o.selector||"",l="ontouchstart"in n.documentElement,c=(new Date).getTime(),u=[],d=arguments[0],v="string"==typeof d,f=[].slice.call(arguments,1);return o.each(function(m){var h,g,p,b,w,x,C,S,y=e.isPlainObject(i)?e.extend(!0,{},e.fn.dropdown.settings,i):e.extend({},e.fn.dropdown.settings),A=y.className,T=y. [...]
-S.select.nextAvailable(n)):(S.add.value(o,a,t),S.set.text(S.add.variables(T.count)),S.set.activeItem(t))):s||(S.debug("Selected active value, removing label"),S.remove.selected(o)):(y.apiSettings&&y.saveRemoteData&&S.save.remoteData(a,o),S.set.text(a),S.set.value(o,a,t),t.addClass(A.active).addClass(A.selected))}))}},add:{label:function(t,n,i){var a,o=S.is.searchSelection()?H:P,s=S.escape.value(t);if(a=e("<a />").addClass(A.label).attr("data-"+I.value,s).html(V.label(s,n)),a=y.onLabelCre [...]
\ No newline at end of file
diff --git a/dist/components/embed.min.css b/dist/components/embed.min.css
deleted file mode 100644
index cee31a1..0000000
--- a/dist/components/embed.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Video
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.embed{position:relative;max-width:100%;height:0;overflow:hidden;background:#dcddde;padding-bottom:56.25%}.ui.embed embed,.ui.embed iframe,.ui.embed object{position:absolute;border:none;width:100%;height:100%;top:0;left:0;margin:0;padding:0}.ui.embed>.embed{display:none}.ui.embed>.placeholder{position:absolute;cursor:pointer;top:0;left:0;display:block;width:100%;height:100%;background-color:radial-gradient(transparent 45%,rgba(0,0,0,.3))}.ui.embed>.icon{cursor:pointer;position:abso [...]
\ No newline at end of file
diff --git a/dist/components/embed.min.js b/dist/components/embed.min.js
deleted file mode 100644
index f70a488..0000000
--- a/dist/components/embed.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,o,n,t){"use strict";o=void 0!==o&&o.Math==Math?o:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.embed=function(n){var t,r=e(this),a=r.selector||"",i=(new Date).getTime(),c=[],l=arguments[0],d="string"==typeof l,u=[].slice.call(arguments,1);return r.each(function(){var s,m=e.isPlainObject(n)?e.extend(!0,{},e.fn.embed.settings,n):e.extend({},e.fn.embed.settings),p=m.selector,f=m.className,h=m.sources,b=m.error,v=m.metadata,g=m.namespace,y=m.templa [...]
\ No newline at end of file
diff --git a/dist/components/feed.min.css b/dist/components/feed.min.css
deleted file mode 100755
index 2bd920d..0000000
--- a/dist/components/feed.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Feed
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.feed{margin:1em 0}.ui.feed:first-child{margin-top:0}.ui.feed:last-child{margin-bottom:0}.ui.feed>.event{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;width:100%;padding:.21428571rem 0;margin:0;background:0 0;border-top:none}.ui.feed>.event:first-child{border-top:0;padding-top:0}.ui.feed>.event:last-child{padding-bottom:0}.ui.feed>.event>.label{display:block;-webkit-box-flex: [...]
\ No newline at end of file
diff --git a/dist/components/flag.min.css b/dist/components/flag.min.css
deleted file mode 100755
index e158454..0000000
--- a/dist/components/flag.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Flag
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */i.flag:not(.icon){display:inline-block;width:16px;height:11px;line-height:11px;vertical-align:baseline;margin:0 .5em 0 0;text-decoration:inherit;speak:none;font-smoothing:antialiased;-webkit-backface-visibility:hidden;backface-visibility:hidden}i.flag:not(.icon):before{display:inline-block;content:'';background:url(../themes/default/assets/images/flags.png) no-repeat -108px -1976px;width:16px;height:11px}i.flag.ad:before,i.flag.andorra:before{background-position:0 0}i.flag.ae:before,i [...]
\ No newline at end of file
diff --git a/dist/components/form.min.css b/dist/components/form.min.css
deleted file mode 100755
index 6a417cc..0000000
--- a/dist/components/form.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Form
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.form{position:relative;max-width:100%}.ui.form>p{margin:1em 0}.ui.form .field{clear:both;margin:0 0 1em}.ui.form .field:last-child,.ui.form .fields:last-child .field{margin-bottom:0}.ui.form .fields .field{clear:both;margin:0}.ui.form .field>label{display:block;margin:0 0 .28571429rem 0;color:rgba(0,0,0,.87);font-size:.92857143em;font-weight:700;text-transform:none}.ui.form input:not([type]),.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],. [...]
\ No newline at end of file
diff --git a/dist/components/form.min.js b/dist/components/form.min.js
deleted file mode 100644
index 0064b28..0000000
--- a/dist/components/form.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t,n,i){"use strict";t=void 0!==t&&t.Math==Math?t:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.form=function(t){var i,r=e(this),a=r.selector||"",o=(new Date).getTime(),s=[],l=arguments[0],u=arguments[1],c="string"==typeof l,d=[].slice.call(arguments,1);return r.each(function(){var f,p,m,g,h,v,b,y,x,k,E,w,C,V,R,S,F,A,T,D=e(this),O=this,j=[],$=!1;T={initialize:function(){T.get.settings(),c?(void 0===A&&T.instantiate(),T.invoke(l)):(void 0!==A&&A. [...]
\ No newline at end of file
diff --git a/dist/components/grid.min.css b/dist/components/grid.min.css
deleted file mode 100755
index 43fb153..0000000
--- a/dist/components/grid.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Grid
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.grid{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;padding:0}.ui.grid{margin-top:-1rem;margin-bottom:-1rem;margin-left:-1rem;margin-right:-1rem}.ui.relaxed.grid{margin-left:-1.5rem;margin-right:-1.5rem}.ui[class*="very relaxed"].grid{margin-left:-2.5rem;margin-right:-2.5rem [...]
\ No newline at end of file
diff --git a/dist/components/header.min.css b/dist/components/header.min.css
deleted file mode 100755
index ac62f53..0000000
--- a/dist/components/header.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Header
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.header{border:none;margin:calc(2rem - .14285714em) 0 1rem;padding:0 0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-weight:700;line-height:1.28571429em;text-transform:none;color:rgba(0,0,0,.87)}.ui.header:first-child{margin-top:-.14285714em}.ui.header:last-child{margin-bottom:0}.ui.header .sub.header{display:block;font-weight:400;padding:0;margin:0;font-size:1rem;line-height:1.2em;color:rgba(0,0,0,.6)}.ui.header>.icon{display:table-cell;opacity:1;font-size:1.5e [...]
\ No newline at end of file
diff --git a/dist/components/icon.min.css b/dist/components/icon.min.css
deleted file mode 100755
index 49e08cc..0000000
--- a/dist/components/icon.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Icon
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */@font-face{font-family:Icons;src:url(../themes/default/assets/fonts/icons.eot);src:url(../themes/default/assets/fonts/icons.eot?#iefix) format('embedded-opentype'),url(../themes/default/assets/fonts/icons.woff2) format('woff2'),url(../themes/default/assets/fonts/icons.woff) format('woff'),url(../themes/default/assets/fonts/icons.ttf) format('truetype'),url(../themes/default/assets/fonts/icons.svg#icons) format('svg');font-style:normal;font-weight:400;font-variant:normal;text-decoratio [...]
\ No newline at end of file
diff --git a/dist/components/image.min.css b/dist/components/image.min.css
deleted file mode 100755
index 7e60283..0000000
--- a/dist/components/image.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Image
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.image{position:relative;display:inline-block;vertical-align:middle;max-width:100%;background-color:transparent}img.ui.image{display:block}.ui.image img,.ui.image svg{display:block;max-width:100%;height:auto}.ui.hidden.image,.ui.hidden.images{display:none}.ui.hidden.transition.image,.ui.hidden.transition.images{display:block;visibility:hidden}.ui.disabled.image,.ui.disabled.images{cursor:default;opacity:.45}.ui.inline.image,.ui.inline.image img,.ui.inline.image svg{display:inline-b [...]
\ No newline at end of file
diff --git a/dist/components/input.min.css b/dist/components/input.min.css
deleted file mode 100755
index c48983f..0000000
--- a/dist/components/input.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Input
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.input{position:relative;font-weight:400;font-style:normal;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;color:rgba(0,0,0,.87)}.ui.input input{margin:0;max-width:100%;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;outline:0;-webkit-tap-highlight-color:rgba(255,255,255,0);text-align:left;line-height:1.21428571em;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;padding:.67857143em 1em;background:#fff;border:1px solid rgba(34,36,38,.15);colo [...]
\ No newline at end of file
diff --git a/dist/components/item.min.css b/dist/components/item.min.css
deleted file mode 100755
index f64c15e..0000000
--- a/dist/components/item.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Item
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.items>.item{display:-webkit-box;display:-ms-flexbox;display:flex;margin:1em 0;width:100%;min-height:0;background:0 0;padding:0;border:none;border-radius:0;box-shadow:none;-webkit-transition:box-shadow .1s ease;transition:box-shadow .1s ease;z-index:''}.ui.items>.item a{cursor:pointer}.ui.items{margin:1.5em 0}.ui.items:first-child{margin-top:0!important}.ui.items:last-child{margin-bottom:0!important}.ui.items>.item:after{display:block;content:' ';height:0;clear:both;overflow:hidden [...]
\ No newline at end of file
diff --git a/dist/components/label.min.css b/dist/components/label.min.css
deleted file mode 100755
index f254835..0000000
--- a/dist/components/label.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Label
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.label{display:inline-block;line-height:1;vertical-align:baseline;margin:0 .14285714em;background-color:#e8e8e8;background-image:none;padding:.5833em .833em;color:rgba(0,0,0,.6);text-transform:none;font-weight:700;border:0 solid transparent;border-radius:.28571429rem;-webkit-transition:background .1s ease;transition:background .1s ease}.ui.label:first-child{margin-left:0}.ui.label:last-child{margin-right:0}a.ui.label{cursor:pointer}.ui.label>a{cursor:pointer;color:inherit;opacity:. [...]
\ No newline at end of file
diff --git a/dist/components/list.min.css b/dist/components/list.min.css
deleted file mode 100755
index 1ad533f..0000000
--- a/dist/components/list.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - List
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.list,ol.ui.list,ul.ui.list{list-style-type:none;margin:1em 0;padding:0 0}.ui.list:first-child,ol.ui.list:first-child,ul.ui.list:first-child{margin-top:0;padding-top:0}.ui.list:last-child,ol.ui.list:last-child,ul.ui.list:last-child{margin-bottom:0;padding-bottom:0}.ui.list .list>.item,.ui.list>.item,ol.ui.list li,ul.ui.list li{display:list-item;table-layout:fixed;list-style-type:none;list-style-position:outside;padding:.21428571em 0;line-height:1.14285714em}.ui.list>.item:after,.ui [...]
\ No newline at end of file
diff --git a/dist/components/loader.min.css b/dist/components/loader.min.css
deleted file mode 100755
index 6493ac6..0000000
--- a/dist/components/loader.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Loader
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.loader{display:none;position:absolute;top:50%;left:50%;margin:0;text-align:center;z-index:1000;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.ui.loader:before{position:absolute;content:'';top:0;left:50%;width:100%;height:100%;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loader:after{position:absolute;content:'';top:0;left:50%;width:100%;height:100%;-webkit-animation:loader .6s linear;animation:loader .6s linear;-webkit [...]
\ No newline at end of file
diff --git a/dist/components/menu.min.css b/dist/components/menu.min.css
deleted file mode 100755
index 17fc8cf..0000000
--- a/dist/components/menu.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.ui.menu{display:-webkit-box;display:-ms-flexbox;display:flex;margin:1rem 0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;background:#fff;font-weight:400;border:1px solid rgba(34,36,38,.15);box-shadow:0 1px 2px 0 rgba(34,36,38,.15);border-radius:.28571429rem;min-height:2.85714286em}.ui.menu:after{content:'';display:block;height:0;clear:both;visibility:hidden}.ui.menu:first-child{margin-top:0}.ui.menu:last-child{margin-bottom:0}.ui.menu .menu{margin:0}.ui.menu:not(.vertical [...]
\ No newline at end of file
diff --git a/dist/components/message.min.css b/dist/components/message.min.css
deleted file mode 100755
index 987d9c0..0000000
--- a/dist/components/message.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Message
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.message{position:relative;min-height:1em;margin:1em 0;background:#f8f8f9;padding:1em 1.5em;line-height:1.4285em;color:rgba(0,0,0,.87);-webkit-transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease;transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease;border-radius:.28571429rem;box-shadow:0 0 0 1px rgba(34,36,38,.22) inset,0 0 0 0 transparent}.ui.message:first-child{margin-top:0}.ui.message:last-child{margin-bottom:0}.ui.mess [...]
\ No newline at end of file
diff --git a/dist/components/modal.min.css b/dist/components/modal.min.css
deleted file mode 100755
index 3f21a3f..0000000
--- a/dist/components/modal.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Modal
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.modal{display:none;position:fixed;z-index:1001;top:50%;left:50%;text-align:left;background:#fff;border:none;box-shadow:1px 3px 3px 0 rgba(0,0,0,.2),1px 3px 15px 2px rgba(0,0,0,.2);-webkit-transform-origin:50% 25%;transform-origin:50% 25%;border-radius:.28571429rem;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;will-change:top,left,margin,transform,opacity}.ui.modal>.icon:first-child+*,.ui.modal>:first-child:not(.icon){border-top-left-radius:.2 [...]
\ No newline at end of file
diff --git a/dist/components/modal.min.js b/dist/components/modal.min.js
deleted file mode 100755
index d4d2493..0000000
--- a/dist/components/modal.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,i,n,t){"use strict";i=void 0!==i&&i.Math==Math?i:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.modal=function(t){var o,a=e(this),r=e(i),s=e(n),c=e("body"),l=a.selector||"",d=(new Date).getTime(),u=[],m=arguments[0],f="string"==typeof m,g=[].slice.call(arguments,1),h=i.requestAnimationFrame||i.mozRequestAnimationFrame||i.webkitRequestAnimationFrame||i.msRequestAnimationFrame||function(e){setTimeout(e,0)};return a.each(function(){var a,v,b,p,y,k, [...]
\ No newline at end of file
diff --git a/dist/components/nag.min.css b/dist/components/nag.min.css
deleted file mode 100755
index a534037..0000000
--- a/dist/components/nag.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Nag
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.nag{display:none;opacity:.95;position:relative;top:0;left:0;z-index:999;min-height:0;width:100%;margin:0;padding:.75em 1em;background:#555;box-shadow:0 1px 2px 0 rgba(0,0,0,.2);font-size:1rem;text-align:center;color:rgba(0,0,0,.87);border-radius:0 0 .28571429rem .28571429rem;-webkit-transition:.2s background ease;transition:.2s background ease}a.ui.nag{cursor:pointer}.ui.nag>.title{display:inline-block;margin:0 .5em;color:#fff}.ui.nag>.close.icon{cursor:pointer;opacity:.4;position [...]
\ No newline at end of file
diff --git a/dist/components/nag.min.js b/dist/components/nag.min.js
deleted file mode 100644
index 4e967c1..0000000
--- a/dist/components/nag.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,o,t,i){"use strict";o=void 0!==o&&o.Math==Math?o:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.nag=function(t){var i,n=e(this),s=n.selector||"",a=(new Date).getTime(),r=[],d=arguments[0],l="string"==typeof d,c=[].slice.call(arguments,1);return n.each(function(){var n,g=e.isPlainObject(t)?e.extend(!0,{},e.fn.nag.settings,t):e.extend({},e.fn.nag.settings),u=(g.className,g.selector),m=g.error,f=g.namespace,p="."+f,v=f+"-module",h=e(this),b=(h.find [...]
\ No newline at end of file
diff --git a/dist/components/popup.min.css b/dist/components/popup.min.css
deleted file mode 100755
index dc080ab..0000000
--- a/dist/components/popup.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Popup
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.popup{display:none;position:absolute;top:0;right:0;min-width:-webkit-min-content;min-width:-moz-min-content;min-width:min-content;z-index:1900;border:1px solid #d4d4d5;line-height:1.4285em;max-width:250px;background:#fff;padding:.833em 1em;font-weight:400;font-style:normal;color:rgba(0,0,0,.87);border-radius:.28571429rem;box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)}.ui.popup>.header{padding:0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif [...]
\ No newline at end of file
diff --git a/dist/components/popup.min.js b/dist/components/popup.min.js
deleted file mode 100644
index 5605175..0000000
--- a/dist/components/popup.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t,e,o,n){"use strict";e=void 0!==e&&e.Math==Math?e:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),t.fn.popup=function(n){var i,r=t(this),a=t(o),s=t(e),p=t("body"),l=r.selector||"",u=(new Date).getTime(),c=[],d=arguments[0],f="string"==typeof d,g=[].slice.call(arguments,1);return r.each(function(){var r,h,v,m,b,w,y=t.isPlainObject(n)?t.extend(!0,{},t.fn.popup.settings,n):t.extend({},t.fn.popup.settings),C=y.selector,T=y.className,P=y.error,x=y.metadata, [...]
\ No newline at end of file
diff --git a/dist/components/progress.min.css b/dist/components/progress.min.css
deleted file mode 100755
index ee7f23e..0000000
--- a/dist/components/progress.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Progress Bar
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.progress{position:relative;display:block;max-width:100%;border:none;margin:1em 0 2.5em;box-shadow:none;background:rgba(0,0,0,.1);padding:0;border-radius:.28571429rem}.ui.progress:first-child{margin:0 0 2.5em}.ui.progress:last-child{margin:0 0 1.5em}.ui.progress .bar{display:block;line-height:1;position:relative;width:0;min-width:2em;background:#888;border-radius:.28571429rem;-webkit-transition:width .1s ease,background-color .1s ease;transition:width .1s ease,background-color .1s  [...]
\ No newline at end of file
diff --git a/dist/components/progress.min.js b/dist/components/progress.min.js
deleted file mode 100644
index f9d7d9b..0000000
--- a/dist/components/progress.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t,n,r){"use strict";t=void 0!==t&&t.Math==Math?t:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();void 0!==t&&t.Math==Math||("undefined"!=typeof self&&self.Math==Math?self:Function("return this")());e.fn.progress=function(t){var r,a=e(this),o=a.selector||"",i=(new Date).getTime(),s=[],l=arguments[0],c="string"==typeof l,u=[].slice.call(arguments,1);return a.each(function(){var a,d,v=e.isPlainObject(t)?e.extend(!0,{},e.fn.progress.settings,t):e.extend({ [...]
\ No newline at end of file
diff --git a/dist/components/rail.min.css b/dist/components/rail.min.css
deleted file mode 100755
index 18f8679..0000000
--- a/dist/components/rail.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Rail
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.rail{position:absolute;top:0;width:300px;height:100%}.ui.left.rail{left:auto;right:100%;padding:0 2rem 0 0;margin:0 2rem 0 0}.ui.right.rail{left:100%;right:auto;padding:0 0 0 2rem;margin:0 0 0 2rem}.ui.left.internal.rail{left:0;right:auto;padding:0 0 0 2rem;margin:0 0 0 2rem}.ui.right.internal.rail{left:auto;right:0;padding:0 2rem 0 0;margin:0 2rem 0 0}.ui.dividing.rail{width:302.5px}.ui.left.dividing.rail{padding:0 2.5rem 0 0;margin:0 2.5rem 0 0;border-right:1px solid rgba(34,36, [...]
\ No newline at end of file
diff --git a/dist/components/rating.min.css b/dist/components/rating.min.css
deleted file mode 100755
index 6799e4f..0000000
--- a/dist/components/rating.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Rating
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.rating{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;white-space:nowrap;vertical-align:baseline}.ui.rating:last-child{margin-right:0}.ui.rating .icon{padding:0;margin:0;text-align:center;font-weight:400;font-style:normal;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;cursor:pointer;width:1.25em;height:auto;-webkit-transition:opacity .1s ease,background .1s ease,text-shadow .1s ease,color .1s ease;transition:opacity .1s ease,background .1s ease,text- [...]
\ No newline at end of file
diff --git a/dist/components/rating.min.js b/dist/components/rating.min.js
deleted file mode 100644
index 05cae48..0000000
--- a/dist/components/rating.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,n,t,i){"use strict";n=void 0!==n&&n.Math==Math?n:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.rating=function(n){var t,i=e(this),a=i.selector||"",o=(new Date).getTime(),r=[],s=arguments[0],l="string"==typeof s,c=[].slice.call(arguments,1);return i.each(function(){var d,u,g=e.isPlainObject(n)?e.extend(!0,{},e.fn.rating.settings,n):e.extend({},e.fn.rating.settings),m=g.namespace,v=g.className,f=g.metadata,p=g.selector,b=(g.error,"."+m),h="module [...]
\ No newline at end of file
diff --git a/dist/components/reset.min.css b/dist/components/reset.min.css
deleted file mode 100755
index a719650..0000000
--- a/dist/components/reset.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Reset
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */*,:after,:before{box-sizing:inherit}html{box-sizing:border-box}input[type=email],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;-moz-appearance:none}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1 [...]
\ No newline at end of file
diff --git a/dist/components/reveal.min.css b/dist/components/reveal.min.css
deleted file mode 100755
index 7e3967b..0000000
--- a/dist/components/reveal.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Reveal
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.reveal{display:inherit;position:relative!important;font-size:0!important}.ui.reveal>.visible.content{position:absolute!important;top:0!important;left:0!important;z-index:3!important;-webkit-transition:all .5s ease .1s;transition:all .5s ease .1s}.ui.reveal>.hidden.content{position:relative!important;z-index:2!important}.ui.active.reveal .visible.content,.ui.reveal:hover .visible.content{z-index:4!important}.ui.slide.reveal{position:relative!important;overflow:hidden!important;whit [...]
\ No newline at end of file
diff --git a/dist/components/search.min.css b/dist/components/search.min.css
deleted file mode 100755
index bf42f9c..0000000
--- a/dist/components/search.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Search
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.search{position:relative}.ui.search>.prompt{margin:0;outline:0;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(255,255,255,0);text-shadow:none;font-style:normal;font-weight:400;line-height:1.21428571em;padding:.67857143em 1em;font-size:1em;background:#fff;border:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87);box-shadow:0 0 0 0 transparent inset;-webkit-transition:background-color .1s ease,color .1s ease,box-shadow .1s ease,border-color .1s ease;transition:background-c [...]
\ No newline at end of file
diff --git a/dist/components/search.min.js b/dist/components/search.min.js
deleted file mode 100644
index 1c9fa37..0000000
--- a/dist/components/search.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t,s,n){"use strict";t=void 0!==t&&t.Math==Math?t:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.search=function(n){var i,r=e(this),a=r.selector||"",o=(new Date).getTime(),c=[],u=arguments[0],l="string"==typeof u,d=[].slice.call(arguments,1);return e(this).each(function(){var f,v=e.isPlainObject(n)?e.extend(!0,{},e.fn.search.settings,n):e.extend({},e.fn.search.settings),g=v.className,h=v.metadata,p=v.regExp,m=v.fields,b=v.selector,y=v.error,R=v.n [...]
\ No newline at end of file
diff --git a/dist/components/segment.min.css b/dist/components/segment.min.css
deleted file mode 100755
index 45fdfd2..0000000
--- a/dist/components/segment.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Segment
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.segment{position:relative;background:#fff;box-shadow:0 1px 2px 0 rgba(34,36,38,.15);margin:1rem 0;padding:1em 1em;border-radius:.28571429rem;border:1px solid rgba(34,36,38,.15)}.ui.segment:first-child{margin-top:0}.ui.segment:last-child{margin-bottom:0}.ui.vertical.segment{margin:0;padding-left:0;padding-right:0;background:none transparent;border-radius:0;box-shadow:none;border:none;border-bottom:1px solid rgba(34,36,38,.15)}.ui.vertical.segment:last-child{border-bottom:none}.ui.i [...]
\ No newline at end of file
diff --git a/dist/components/shape.min.css b/dist/components/shape.min.css
deleted file mode 100755
index 7361edf..0000000
--- a/dist/components/shape.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Shape
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.shape{position:relative;vertical-align:top;display:inline-block;-webkit-perspective:2000px;perspective:2000px;-webkit-transition:left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out,-webkit-transform .6s ease-in-out;transition:left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out,-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out;transition:transform .6s ease-in-out,left  [...]
\ No newline at end of file
diff --git a/dist/components/shape.min.js b/dist/components/shape.min.js
deleted file mode 100644
index 7dcc14a..0000000
--- a/dist/components/shape.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t,i,n){"use strict";t=void 0!==t&&t.Math==Math?t:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.shape=function(n){var a,o=e(this),r=(e("body"),(new Date).getTime()),s=[],d=arguments[0],l="string"==typeof d,u=[].slice.call(arguments,1),c=t.requestAnimationFrame||t.mozRequestAnimationFrame||t.webkitRequestAnimationFrame||t.msRequestAnimationFrame||function(e){setTimeout(e,0)};return o.each(function(){var t,g,f,m=o.selector||"",h=e.isPlainObject(n) [...]
\ No newline at end of file
diff --git a/dist/components/sidebar.min.css b/dist/components/sidebar.min.css
deleted file mode 100755
index a4696d8..0000000
--- a/dist/components/sidebar.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Sidebar
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.sidebar{position:fixed;top:0;left:0;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:none;transition:none;will-change:transform;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);visibility:hidden;-webkit-overflow-scrolling:touch;height:100%!important;max-height:100%;border-radius:0!important;margin:0!important;overflow-y:auto!important;z-index:102}.ui.sidebar>*{-webkit-backface-visibility:hidden;backface-visibility:hidden}.ui.left.si [...]
\ No newline at end of file
diff --git a/dist/components/sidebar.min.js b/dist/components/sidebar.min.js
deleted file mode 100644
index 8f9e3c9..0000000
--- a/dist/components/sidebar.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,i,n,t){"use strict";i=void 0!==i&&i.Math==Math?i:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.sidebar=function(t){var o,r=e(this),s=e(i),a=e(n),l=e("html"),c=e("head"),d=r.selector||"",u=(new Date).getTime(),f=[],b=arguments[0],h="string"==typeof b,m=[].slice.call(arguments,1),v=i.requestAnimationFrame||i.mozRequestAnimationFrame||i.webkitRequestAnimationFrame||i.msRequestAnimationFrame||function(e){setTimeout(e,0)};return r.each(function(){va [...]
\ No newline at end of file
diff --git a/dist/components/site.min.css b/dist/components/site.min.css
deleted file mode 100755
index 2245555..0000000
--- a/dist/components/site.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Site
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin);body,html{height:100%}html{font-size:14px}body{margin:0;padding:0;overflow-x:hidden;min-width:320px;background:#fff;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:14px;line-height:1.4285em;color:rgba(0,0,0,.87);font-smoothing:antialiased}h1,h2,h3,h4,h5{font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;line-height:1.28571429em;margin:calc(2rem - .1428571 [...]
\ No newline at end of file
diff --git a/dist/components/site.min.js b/dist/components/site.min.js
deleted file mode 100644
index a48a086..0000000
--- a/dist/components/site.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,n,o,i){e.site=e.fn.site=function(i){var t,s,r=(new Date).getTime(),a=[],c=arguments[0],l="string"==typeof c,u=[].slice.call(arguments,1),d=e.isPlainObject(i)?e.extend(!0,{},e.site.settings,i):e.extend({},e.site.settings),m=d.namespace,g=d.error,f="module-"+m,b=e(o),p=b,v=this,h=p.data(f);return t={initialize:function(){t.instantiate()},instantiate:function(){t.verbose("Storing instance of site",t),h=t,p.data(f,t)},normalize:function(){t.fix.console(),t.fix.requestAnimationFra [...]
\ No newline at end of file
diff --git a/dist/components/state.min.js b/dist/components/state.min.js
deleted file mode 100644
index 5b4bf5a..0000000
--- a/dist/components/state.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t,n,a){"use strict";t=void 0!==t&&t.Math==Math?t:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.state=function(t){var a,i=e(this),o=i.selector||"",s=(n.documentElement,(new Date).getTime()),c=[],r=arguments[0],l="string"==typeof r,u=[].slice.call(arguments,1);return i.each(function(){var n,d=e.isPlainObject(t)?e.extend(!0,{},e.fn.state.settings,t):e.extend({},e.fn.state.settings),v=d.error,f=d.metadata,g=d.className,b=d.namespace,x=d.states,h=d. [...]
\ No newline at end of file
diff --git a/dist/components/statistic.min.css b/dist/components/statistic.min.css
deleted file mode 100755
index a6d229e..0000000
--- a/dist/components/statistic.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Statistic
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.statistic{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:1em 0;max-width:auto}.ui.statistic+.ui.statistic{margin:0 0 0 1.5em}.ui.statistic:first-child{margin-top:0}.ui.statistic:last-child{margin-bottom:0}.ui.statistics{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-f [...]
\ No newline at end of file
diff --git a/dist/components/step.min.css b/dist/components/step.min.css
deleted file mode 100755
index f1d8ee0..0000000
--- a/dist/components/step.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Step
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.steps{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin:1em 0;background:'';box-shadow:none;line-height:1.14285714em;border-radius:.28571429rem;border:1px solid rgba(34,36,38,.15)}.ui.steps:first-child{margin-top:0}.ui.steps:last-child{margin-bottom:0}.ui.steps .step{position:relativ [...]
\ No newline at end of file
diff --git a/dist/components/sticky.min.css b/dist/components/sticky.min.css
deleted file mode 100755
index e76a796..0000000
--- a/dist/components/sticky.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Sticky
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.sticky{position:static;-webkit-transition:none;transition:none;z-index:800}.ui.sticky.bound{position:absolute;left:auto;right:auto}.ui.sticky.fixed{position:fixed;left:auto;right:auto}.ui.sticky.bound.top,.ui.sticky.fixed.top{top:0;bottom:auto}.ui.sticky.bound.bottom,.ui.sticky.fixed.bottom{top:auto;bottom:0}.ui.native.sticky{position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;position:sticky}
\ No newline at end of file
diff --git a/dist/components/sticky.min.js b/dist/components/sticky.min.js
deleted file mode 100755
index 429bbc3..0000000
--- a/dist/components/sticky.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t,o,n){"use strict";t=void 0!==t&&t.Math==Math?t:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.sticky=function(n){var i,s=e(this),r=s.selector||"",c=(new Date).getTime(),l=[],a=arguments[0],f="string"==typeof a,m=[].slice.call(arguments,1);return s.each(function(){var s,d,u,h,g,p=e.isPlainObject(n)?e.extend(!0,{},e.fn.sticky.settings,n):e.extend({},e.fn.sticky.settings),b=p.className,v=p.namespace,x=p.error,C="."+v,S="module-"+v,y=e(this),k=e(t [...]
\ No newline at end of file
diff --git a/dist/components/tab.min.css b/dist/components/tab.min.css
deleted file mode 100755
index 0b8554f..0000000
--- a/dist/components/tab.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Tab
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.tab{display:none}.ui.tab.active,.ui.tab.open{display:block}.ui.tab.loading{position:relative;overflow:hidden;display:block;min-height:250px}.ui.tab.loading *{position:relative!important;left:-10000px!important}.ui.tab.loading.segment:before,.ui.tab.loading:before{position:absolute;content:'';top:100px;left:50%;margin:-1.25em 0 0 -1.25em;width:2.5em;height:2.5em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.tab.loading.segment:after,.ui.tab.loading:after{position:absolu [...]
\ No newline at end of file
diff --git a/dist/components/tab.min.js b/dist/components/tab.min.js
deleted file mode 100644
index ab4f5a3..0000000
--- a/dist/components/tab.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t,a,n){"use strict";t=void 0!==t&&t.Math==Math?t:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.tab=function(n){var i,o=e(e.isFunction(this)?t:this),r=o.selector||"",s=(new Date).getTime(),c=[],l=arguments[0],d="string"==typeof l,u=[].slice.call(arguments,1),b=!1;return o.each(function(){var g,f,h,p,v,m,y=e.isPlainObject(n)?e.extend(!0,{},e.fn.tab.settings,n):e.extend({},e.fn.tab.settings),T=y.className,L=y.metadata,x=y.selector,A=y.error,P="."+ [...]
\ No newline at end of file
diff --git a/dist/components/table.min.css b/dist/components/table.min.css
deleted file mode 100755
index e5b882c..0000000
--- a/dist/components/table.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Table
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.table{width:100%;background:#fff;margin:1em 0;border:1px solid rgba(34,36,38,.15);box-shadow:none;border-radius:.28571429rem;text-align:left;color:rgba(0,0,0,.87);border-collapse:separate;border-spacing:0}.ui.table:first-child{margin-top:0}.ui.table:last-child{margin-bottom:0}.ui.table td,.ui.table th{-webkit-transition:background .1s ease,color .1s ease;transition:background .1s ease,color .1s ease}.ui.table thead{box-shadow:none}.ui.table thead th{cursor:auto;background:#f9fafb; [...]
\ No newline at end of file
diff --git a/dist/components/transition.min.css b/dist/components/transition.min.css
deleted file mode 100755
index ebd5949..0000000
--- a/dist/components/transition.min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * # Semantic UI 2.2.12 - Transition
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.transition{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animating.transition{-webkit-backface-visibility:hidden;backface-visibility:hidden;visibility:visible!important}.loading.transition{position:absolute;top:-99999px;left:-99999px}.hidden.transition{display:none;visibility:hidden}.vi [...]
\ No newline at end of file
diff --git a/dist/components/transition.min.js b/dist/components/transition.min.js
deleted file mode 100644
index 999b7ba..0000000
--- a/dist/components/transition.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(n,i,e,t){"use strict";i=void 0!==i&&i.Math==Math?i:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),n.fn.transition=function(){var t,a=n(this),o=a.selector||"",r=(new Date).getTime(),s=[],l=arguments,d=l[0],u=[].slice.call(arguments,1),c="string"==typeof d;i.requestAnimationFrame||i.mozRequestAnimationFrame||i.webkitRequestAnimationFrame||i.msRequestAnimationFrame;return a.each(function(i){var m,f,p,g,v,b,y,h,w,C=n(this),A=this;w={initialize:function(){m [...]
\ No newline at end of file
diff --git a/dist/components/video.min.css b/dist/components/video.min.css
deleted file mode 100755
index 517736c..0000000
--- a/dist/components/video.min.css
+++ /dev/null
@@ -1,10 +0,0 @@
-/*!
- * # Semantic UI 2.0.0 - Video
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Copyright 2014 Contributors
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.video{background-color:#ddd;position:relative;max-width:100%;padding-bottom:56.25%;height:0;overflow:hidden}.ui.video .placeholder{background-color:#333}.ui.video .play{cursor:pointer;position:absolute;top:0;left:0;z-index:10;width:100%;height:100%;background:0 0;-webkit-transition:background .2s ease;transition:background .2s ease}.ui.video .play.icon:before{position:absolute;top:50%;left:50%;z-index:11;-webkit-transform:translateX(-50%)translateY(-50%);-ms-transform:translateX(- [...]
\ No newline at end of file
diff --git a/dist/components/video.min.js b/dist/components/video.min.js
deleted file mode 100644
index 683eccf..0000000
--- a/dist/components/video.min.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- * # Semantic UI 2.0.0 - Video
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Copyright 2014 Contributorss
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */
-!function(e,o,t,n){"use strict";e.fn.video=function(t){{var a,i=e(this),r=i.selector||"",l=(new Date).getTime(),c=[],u=arguments[0],s="string"==typeof u,m=[].slice.call(arguments,1);o.requestAnimationFrame||o.mozRequestAnimationFrame||o.webkitRequestAnimationFrame||o.msRequestAnimationFrame||function(e){setTimeout(e,0)}}return i.each(function(){var d,p=e.isPlainObject(t)?e.extend(!0,{},e.fn.video.settings,t):e.extend({},e.fn.video.settings),f=p.selector,g=p.className,h=p.error,v=p.metada [...]
\ No newline at end of file
diff --git a/dist/components/visibility.min.js b/dist/components/visibility.min.js
deleted file mode 100644
index 0b838d3..0000000
--- a/dist/components/visibility.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,o,n,t){"use strict";o=void 0!==o&&o.Math==Math?o:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.visibility=function(t){var i,s=e(this),c=s.selector||"",r=(new Date).getTime(),a=[],l=arguments[0],d="string"==typeof l,u=[].slice.call(arguments,1),f=s.length,v=0;return s.each(function(){var s,b,m,g,p=e.isPlainObject(t)?e.extend(!0,{},e.fn.visibility.settings,t):e.extend({},e.fn.visibility.settings),h=p.className,P=p.namespace,x=p.error,C=p.metadata [...]
\ No newline at end of file
diff --git a/dist/components/visit.min.js b/dist/components/visit.min.js
deleted file mode 100644
index 1b734d7..0000000
--- a/dist/components/visit.min.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- * # Semantic UI 2.0.0 - Visit
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Copyright 2015 Contributors
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */
-!function(e,t,i,n){"use strict";e.visit=e.fn.visit=function(i){var o,r=e(e.isFunction(this)?t:this),s=r.selector||"",a=(new Date).getTime(),c=[],u=arguments[0],l="string"==typeof u,d=[].slice.call(arguments,1);return r.each(function(){var g,m=e.isPlainObject(i)?e.extend(!0,{},e.fn.visit.settings,i):e.extend({},e.fn.visit.settings),f=m.error,p=m.namespace,v=p+"-module",h=e(this),b=e(),y=this,k=h.data(v);g={initialize:function(){m.count?g.store(m.key.count,m.count):m.id?g.add.id(m.id):m.in [...]
\ No newline at end of file
diff --git a/dist/semantic.min.css b/dist/semantic.min.css
deleted file mode 100755
index 94ebe97..0000000
--- a/dist/semantic.min.css
+++ /dev/null
@@ -1,364 +0,0 @@
- /*
- * # Semantic UI - 2.2.12
- * https://github.com/Semantic-Org/Semantic-UI
- * http://www.semantic-ui.com/
- *
- * Copyright 2014 Contributors
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */
- at import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin);/*!
- * # Semantic UI 2.2.12 - Reset
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */*,:after,:before{box-sizing:inherit}html{box-sizing:border-box}input[type=email],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;-moz-appearance:none}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1 [...]
- * # Semantic UI 2.2.12 - Site
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */body,html{height:100%}html{font-size:14px}body{margin:0;padding:0;overflow-x:hidden;min-width:320px;background:#fff;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:14px;line-height:1.4285em;color:rgba(0,0,0,.87);font-smoothing:antialiased}h1,h2,h3,h4,h5{font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;line-height:1.28571429em;margin:calc(2rem - .14285714em) 0 1rem;font-weight:700;padding:0}h1{min-height:1rem;font-size:2rem}h2{font-size:1.71428571rem} [...]
- * # Semantic UI 2.2.12 - Button
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.button{cursor:pointer;display:inline-block;min-height:1em;outline:0;border:none;vertical-align:baseline;background:#e0e1e2 none;color:rgba(0,0,0,.6);font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;margin:0 .25em 0 0;padding:.78571429em 1.5em .78571429em;text-transform:none;text-shadow:none;font-weight:700;line-height:1em;font-style:normal;text-align:center;text-decoration:none;border-radius:.28571429rem;box-shadow:0 0 0 1px transparent inset,0 0 0 0 rgba(34,36,38,.15) [...]
- * # Semantic UI 2.2.12 - Container
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.container{display:block;max-width:100%!important}@media only screen and (max-width:767px){.ui.container{width:auto!important;margin-left:1em!important;margin-right:1em!important}.ui.grid.container{width:auto!important}.ui.relaxed.grid.container{width:auto!important}.ui.very.relaxed.grid.container{width:auto!important}}@media only screen and (min-width:768px) and (max-width:991px){.ui.container{width:723px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{wi [...]
- * # Semantic UI 2.2.12 - Divider
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.divider{margin:1rem 0;line-height:1;height:0;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:rgba(0,0,0,.85);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ui.divider:not(.vertical):not(.horizontal){border-top:1px solid rgba(34,36,38,.15);border-bottom:1px solid rgba(255,255,255,.1)}.ui.grid>.column+.divider,.ui.grid>.row>.column+.divider{left:auto}.ui.horizontal.divider{display:tabl [...]
- * # Semantic UI 2.2.12 - Flag
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */i.flag:not(.icon){display:inline-block;width:16px;height:11px;line-height:11px;vertical-align:baseline;margin:0 .5em 0 0;text-decoration:inherit;speak:none;font-smoothing:antialiased;-webkit-backface-visibility:hidden;backface-visibility:hidden}i.flag:not(.icon):before{display:inline-block;content:'';background:url(themes/default/assets/images/flags.png) no-repeat -108px -1976px;width:16px;height:11px}i.flag.ad:before,i.flag.andorra:before{background-position:0 0}i.flag.ae:before,i.fl [...]
- * # Semantic UI 2.2.12 - Header
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.header{border:none;margin:calc(2rem - .14285714em) 0 1rem;padding:0 0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-weight:700;line-height:1.28571429em;text-transform:none;color:rgba(0,0,0,.87)}.ui.header:first-child{margin-top:-.14285714em}.ui.header:last-child{margin-bottom:0}.ui.header .sub.header{display:block;font-weight:400;padding:0;margin:0;font-size:1rem;line-height:1.2em;color:rgba(0,0,0,.6)}.ui.header>.icon{display:table-cell;opacity:1;font-size:1.5e [...]
- * # Semantic UI 2.2.12 - Icon
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */@font-face{font-family:Icons;src:url(themes/default/assets/fonts/icons.eot);src:url(themes/default/assets/fonts/icons.eot?#iefix) format('embedded-opentype'),url(themes/default/assets/fonts/icons.woff2) format('woff2'),url(themes/default/assets/fonts/icons.woff) format('woff'),url(themes/default/assets/fonts/icons.ttf) format('truetype'),url(themes/default/assets/fonts/icons.svg#icons) format('svg');font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-tra [...]
- * # Semantic UI 2.2.12 - Image
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.image{position:relative;display:inline-block;vertical-align:middle;max-width:100%;background-color:transparent}img.ui.image{display:block}.ui.image img,.ui.image svg{display:block;max-width:100%;height:auto}.ui.hidden.image,.ui.hidden.images{display:none}.ui.hidden.transition.image,.ui.hidden.transition.images{display:block;visibility:hidden}.ui.disabled.image,.ui.disabled.images{cursor:default;opacity:.45}.ui.inline.image,.ui.inline.image img,.ui.inline.image svg{display:inline-b [...]
- * # Semantic UI 2.2.12 - Input
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.input{position:relative;font-weight:400;font-style:normal;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;color:rgba(0,0,0,.87)}.ui.input input{margin:0;max-width:100%;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;outline:0;-webkit-tap-highlight-color:rgba(255,255,255,0);text-align:left;line-height:1.21428571em;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;padding:.67857143em 1em;background:#fff;border:1px solid rgba(34,36,38,.15);colo [...]
- * # Semantic UI 2.2.12 - Label
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.label{display:inline-block;line-height:1;vertical-align:baseline;margin:0 .14285714em;background-color:#e8e8e8;background-image:none;padding:.5833em .833em;color:rgba(0,0,0,.6);text-transform:none;font-weight:700;border:0 solid transparent;border-radius:.28571429rem;-webkit-transition:background .1s ease;transition:background .1s ease}.ui.label:first-child{margin-left:0}.ui.label:last-child{margin-right:0}a.ui.label{cursor:pointer}.ui.label>a{cursor:pointer;color:inherit;opacity:. [...]
- * # Semantic UI 2.2.12 - List
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.list,ol.ui.list,ul.ui.list{list-style-type:none;margin:1em 0;padding:0 0}.ui.list:first-child,ol.ui.list:first-child,ul.ui.list:first-child{margin-top:0;padding-top:0}.ui.list:last-child,ol.ui.list:last-child,ul.ui.list:last-child{margin-bottom:0;padding-bottom:0}.ui.list .list>.item,.ui.list>.item,ol.ui.list li,ul.ui.list li{display:list-item;table-layout:fixed;list-style-type:none;list-style-position:outside;padding:.21428571em 0;line-height:1.14285714em}.ui.list>.item:after,.ui [...]
- * # Semantic UI 2.2.12 - Loader
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.loader{display:none;position:absolute;top:50%;left:50%;margin:0;text-align:center;z-index:1000;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.ui.loader:before{position:absolute;content:'';top:0;left:50%;width:100%;height:100%;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loader:after{position:absolute;content:'';top:0;left:50%;width:100%;height:100%;-webkit-animation:loader .6s linear;animation:loader .6s linear;-webkit [...]
- * # Semantic UI 2.2.12 - Rail
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.rail{position:absolute;top:0;width:300px;height:100%}.ui.left.rail{left:auto;right:100%;padding:0 2rem 0 0;margin:0 2rem 0 0}.ui.right.rail{left:100%;right:auto;padding:0 0 0 2rem;margin:0 0 0 2rem}.ui.left.internal.rail{left:0;right:auto;padding:0 0 0 2rem;margin:0 0 0 2rem}.ui.right.internal.rail{left:auto;right:0;padding:0 2rem 0 0;margin:0 2rem 0 0}.ui.dividing.rail{width:302.5px}.ui.left.dividing.rail{padding:0 2.5rem 0 0;margin:0 2.5rem 0 0;border-right:1px solid rgba(34,36, [...]
- * # Semantic UI 2.2.12 - Reveal
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.reveal{display:inherit;position:relative!important;font-size:0!important}.ui.reveal>.visible.content{position:absolute!important;top:0!important;left:0!important;z-index:3!important;-webkit-transition:all .5s ease .1s;transition:all .5s ease .1s}.ui.reveal>.hidden.content{position:relative!important;z-index:2!important}.ui.active.reveal .visible.content,.ui.reveal:hover .visible.content{z-index:4!important}.ui.slide.reveal{position:relative!important;overflow:hidden!important;whit [...]
- * # Semantic UI 2.2.12 - Segment
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.segment{position:relative;background:#fff;box-shadow:0 1px 2px 0 rgba(34,36,38,.15);margin:1rem 0;padding:1em 1em;border-radius:.28571429rem;border:1px solid rgba(34,36,38,.15)}.ui.segment:first-child{margin-top:0}.ui.segment:last-child{margin-bottom:0}.ui.vertical.segment{margin:0;padding-left:0;padding-right:0;background:none transparent;border-radius:0;box-shadow:none;border:none;border-bottom:1px solid rgba(34,36,38,.15)}.ui.vertical.segment:last-child{border-bottom:none}.ui.i [...]
- * # Semantic UI 2.2.12 - Step
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.steps{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin:1em 0;background:'';box-shadow:none;line-height:1.14285714em;border-radius:.28571429rem;border:1px solid rgba(34,36,38,.15)}.ui.steps:first-child{margin-top:0}.ui.steps:last-child{margin-bottom:0}.ui.steps .step{position:relativ [...]
- * # Semantic UI 2.2.12 - Breadcrumb
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.breadcrumb{line-height:1;display:inline-block;margin:0 0;vertical-align:middle}.ui.breadcrumb:first-child{margin-top:0}.ui.breadcrumb:last-child{margin-bottom:0}.ui.breadcrumb .divider{display:inline-block;opacity:.7;margin:0 .21428571rem 0;font-size:.92857143em;color:rgba(0,0,0,.4);vertical-align:baseline}.ui.breadcrumb a{color:#4183c4}.ui.breadcrumb a:hover{color:#1e70bf}.ui.breadcrumb .icon.divider{font-size:.85714286em;vertical-align:baseline}.ui.breadcrumb a.section{cursor:po [...]
- * # Semantic UI 2.2.12 - Form
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.form{position:relative;max-width:100%}.ui.form>p{margin:1em 0}.ui.form .field{clear:both;margin:0 0 1em}.ui.form .field:last-child,.ui.form .fields:last-child .field{margin-bottom:0}.ui.form .fields .field{clear:both;margin:0}.ui.form .field>label{display:block;margin:0 0 .28571429rem 0;color:rgba(0,0,0,.87);font-size:.92857143em;font-weight:700;text-transform:none}.ui.form input:not([type]),.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],. [...]
- * # Semantic UI 2.2.12 - Grid
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.grid{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;padding:0}.ui.grid{margin-top:-1rem;margin-bottom:-1rem;margin-left:-1rem;margin-right:-1rem}.ui.relaxed.grid{margin-left:-1.5rem;margin-right:-1.5rem}.ui[class*="very relaxed"].grid{margin-left:-2.5rem;margin-right:-2.5rem [...]
- * # Semantic UI 2.2.12 - Message
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.message{position:relative;min-height:1em;margin:1em 0;background:#f8f8f9;padding:1em 1.5em;line-height:1.4285em;color:rgba(0,0,0,.87);-webkit-transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease;transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease;border-radius:.28571429rem;box-shadow:0 0 0 1px rgba(34,36,38,.22) inset,0 0 0 0 transparent}.ui.message:first-child{margin-top:0}.ui.message:last-child{margin-bottom:0}.ui.mess [...]
- * # Semantic UI 2.2.12 - Table
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.table{width:100%;background:#fff;margin:1em 0;border:1px solid rgba(34,36,38,.15);box-shadow:none;border-radius:.28571429rem;text-align:left;color:rgba(0,0,0,.87);border-collapse:separate;border-spacing:0}.ui.table:first-child{margin-top:0}.ui.table:last-child{margin-bottom:0}.ui.table td,.ui.table th{-webkit-transition:background .1s ease,color .1s ease;transition:background .1s ease,color .1s ease}.ui.table thead{box-shadow:none}.ui.table thead th{cursor:auto;background:#f9fafb; [...]
- * # Semantic UI 2.2.12 - Ad
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Copyright 2013 Contributors
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.ad{display:block;overflow:hidden;margin:1em 0}.ui.ad:first-child{margin:0}.ui.ad:last-child{margin:0}.ui.ad iframe{margin:0;padding:0;border:none;overflow:hidden}.ui.leaderboard.ad{width:728px;height:90px}.ui[class*="medium rectangle"].ad{width:300px;height:250px}.ui[class*="large rectangle"].ad{width:336px;height:280px}.ui[class*="half page"].ad{width:300px;height:600px}.ui.square.ad{width:250px;height:250px}.ui[class*="small square"].ad{width:200px;height:200px}.ui[class*="small [...]
- * # Semantic UI 2.2.12 - Item
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.card,.ui.cards>.card{max-width:100%;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:290px;min-height:0;background:#fff;padding:0;border:none;border-radius:.28571429rem;box-shadow:0 1px 3px 0 #d4d4d5,0 0 0 1px #d4d4d5;-webkit-transition:box-shadow .1s ease,-webkit-transform .1s ease;transition:box-shadow .1s ease,-webkit-transform .1s ease;transition [...]
- * # Semantic UI 2.2.12 - Comment
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.comments{margin:1.5em 0;max-width:650px}.ui.comments:first-child{margin-top:0}.ui.comments:last-child{margin-bottom:0}.ui.comments .comment{position:relative;background:0 0;margin:.5em 0 0;padding:.5em 0 0;border:none;border-top:none;line-height:1.2}.ui.comments .comment:first-child{margin-top:0;padding-top:0}.ui.comments .comment .comments{margin:0 0 .5em .5em;padding:1em 0 1em 1em}.ui.comments .comment .comments:before{position:absolute;top:0;left:0}.ui.comments .comment .commen [...]
- * # Semantic UI 2.2.12 - Feed
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.feed{margin:1em 0}.ui.feed:first-child{margin-top:0}.ui.feed:last-child{margin-bottom:0}.ui.feed>.event{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;width:100%;padding:.21428571rem 0;margin:0;background:0 0;border-top:none}.ui.feed>.event:first-child{border-top:0;padding-top:0}.ui.feed>.event:last-child{padding-bottom:0}.ui.feed>.event>.label{display:block;-webkit-box-flex: [...]
- * # Semantic UI 2.2.12 - Item
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.items>.item{display:-webkit-box;display:-ms-flexbox;display:flex;margin:1em 0;width:100%;min-height:0;background:0 0;padding:0;border:none;border-radius:0;box-shadow:none;-webkit-transition:box-shadow .1s ease;transition:box-shadow .1s ease;z-index:''}.ui.items>.item a{cursor:pointer}.ui.items{margin:1.5em 0}.ui.items:first-child{margin-top:0!important}.ui.items:last-child{margin-bottom:0!important}.ui.items>.item:after{display:block;content:' ';height:0;clear:both;overflow:hidden [...]
- * # Semantic UI 2.2.12 - Statistic
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.statistic{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:1em 0;max-width:auto}.ui.statistic+.ui.statistic{margin:0 0 0 1.5em}.ui.statistic:first-child{margin-top:0}.ui.statistic:last-child{margin-bottom:0}.ui.statistics{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-f [...]
- * # Semantic UI 2.2.12 - Accordion
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.accordion,.ui.accordion .accordion{max-width:100%}.ui.accordion .accordion{margin:1em 0 0;padding:0}.ui.accordion .accordion .title,.ui.accordion .title{cursor:pointer}.ui.accordion .title:not(.ui){padding:.5em 0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:1em;color:rgba(0,0,0,.87)}.ui.accordion .accordion .title~.content,.ui.accordion .title~.content{display:none}.ui.accordion:not(.styled) .accordion .title~.content:not(.ui),.ui.accordion:not(.styled) . [...]
- * # Semantic UI 2.2.12 - Checkbox
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.checkbox{position:relative;display:inline-block;-webkit-backface-visibility:hidden;backface-visibility:hidden;outline:0;vertical-align:baseline;font-style:normal;min-height:17px;font-size:1rem;line-height:17px;min-width:17px}.ui.checkbox input[type=checkbox],.ui.checkbox input[type=radio]{cursor:pointer;position:absolute;top:0;left:0;opacity:0!important;outline:0;z-index:3;width:17px;height:17px}.ui.checkbox .box,.ui.checkbox label{cursor:auto;position:relative;display:block;paddi [...]
- * # Semantic UI 2.2.12 - Dimmer
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.dimmable:not(body){position:relative}.ui.dimmer{display:none;position:absolute;top:0!important;left:0!important;width:100%;height:100%;text-align:center;vertical-align:middle;background-color:rgba(0,0,0,.85);opacity:0;line-height:1;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-transition:background-color .5s linear;transition:background-color .5s linear;-webkit-user-select:none;-moz-user-select:none;-ms-user-se [...]
- * # Semantic UI 2.2.12 - Dropdown
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.dropdown{cursor:pointer;position:relative;display:inline-block;outline:0;text-align:left;-webkit-transition:box-shadow .1s ease,width .1s ease;transition:box-shadow .1s ease,width .1s ease;-webkit-tap-highlight-color:transparent}.ui.dropdown .menu{cursor:auto;position:absolute;display:none;outline:0;top:100%;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;margin:0;padding:0 0;background:#fff;font-size:1em;text-shadow:none;text-align:left;box-shadow:0 [...]
- * # Semantic UI 2.2.12 - Video
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.embed{position:relative;max-width:100%;height:0;overflow:hidden;background:#dcddde;padding-bottom:56.25%}.ui.embed embed,.ui.embed iframe,.ui.embed object{position:absolute;border:none;width:100%;height:100%;top:0;left:0;margin:0;padding:0}.ui.embed>.embed{display:none}.ui.embed>.placeholder{position:absolute;cursor:pointer;top:0;left:0;display:block;width:100%;height:100%;background-color:radial-gradient(transparent 45%,rgba(0,0,0,.3))}.ui.embed>.icon{cursor:pointer;position:abso [...]
- * # Semantic UI 2.2.12 - Modal
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.modal{display:none;position:fixed;z-index:1001;top:50%;left:50%;text-align:left;background:#fff;border:none;box-shadow:1px 3px 3px 0 rgba(0,0,0,.2),1px 3px 15px 2px rgba(0,0,0,.2);-webkit-transform-origin:50% 25%;transform-origin:50% 25%;border-radius:.28571429rem;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;will-change:top,left,margin,transform,opacity}.ui.modal>.icon:first-child+*,.ui.modal>:first-child:not(.icon){border-top-left-radius:.2 [...]
- * # Semantic UI 2.2.12 - Nag
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.nag{display:none;opacity:.95;position:relative;top:0;left:0;z-index:999;min-height:0;width:100%;margin:0;padding:.75em 1em;background:#555;box-shadow:0 1px 2px 0 rgba(0,0,0,.2);font-size:1rem;text-align:center;color:rgba(0,0,0,.87);border-radius:0 0 .28571429rem .28571429rem;-webkit-transition:.2s background ease;transition:.2s background ease}a.ui.nag{cursor:pointer}.ui.nag>.title{display:inline-block;margin:0 .5em;color:#fff}.ui.nag>.close.icon{cursor:pointer;opacity:.4;position [...]
- * # Semantic UI 2.2.12 - Popup
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.popup{display:none;position:absolute;top:0;right:0;min-width:-webkit-min-content;min-width:-moz-min-content;min-width:min-content;z-index:1900;border:1px solid #d4d4d5;line-height:1.4285em;max-width:250px;background:#fff;padding:.833em 1em;font-weight:400;font-style:normal;color:rgba(0,0,0,.87);border-radius:.28571429rem;box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)}.ui.popup>.header{padding:0;font-family:Lato,'Helvetica Neue',Arial,Helvetica,sans-serif [...]
- * # Semantic UI 2.2.12 - Progress Bar
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.progress{position:relative;display:block;max-width:100%;border:none;margin:1em 0 2.5em;box-shadow:none;background:rgba(0,0,0,.1);padding:0;border-radius:.28571429rem}.ui.progress:first-child{margin:0 0 2.5em}.ui.progress:last-child{margin:0 0 1.5em}.ui.progress .bar{display:block;line-height:1;position:relative;width:0;min-width:2em;background:#888;border-radius:.28571429rem;-webkit-transition:width .1s ease,background-color .1s ease;transition:width .1s ease,background-color .1s  [...]
- * # Semantic UI 2.2.12 - Rating
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.rating{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;white-space:nowrap;vertical-align:baseline}.ui.rating:last-child{margin-right:0}.ui.rating .icon{padding:0;margin:0;text-align:center;font-weight:400;font-style:normal;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;cursor:pointer;width:1.25em;height:auto;-webkit-transition:opacity .1s ease,background .1s ease,text-shadow .1s ease,color .1s ease;transition:opacity .1s ease,background .1s ease,text- [...]
- * # Semantic UI 2.2.12 - Search
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.search{position:relative}.ui.search>.prompt{margin:0;outline:0;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(255,255,255,0);text-shadow:none;font-style:normal;font-weight:400;line-height:1.21428571em;padding:.67857143em 1em;font-size:1em;background:#fff;border:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87);box-shadow:0 0 0 0 transparent inset;-webkit-transition:background-color .1s ease,color .1s ease,box-shadow .1s ease,border-color .1s ease;transition:background-c [...]
- * # Semantic UI 2.2.12 - Shape
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.shape{position:relative;vertical-align:top;display:inline-block;-webkit-perspective:2000px;perspective:2000px;-webkit-transition:left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out,-webkit-transform .6s ease-in-out;transition:left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out,-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out;transition:transform .6s ease-in-out,left  [...]
- * # Semantic UI 2.2.12 - Sidebar
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.sidebar{position:fixed;top:0;left:0;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:none;transition:none;will-change:transform;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);visibility:hidden;-webkit-overflow-scrolling:touch;height:100%!important;max-height:100%;border-radius:0!important;margin:0!important;overflow-y:auto!important;z-index:102}.ui.sidebar>*{-webkit-backface-visibility:hidden;backface-visibility:hidden}.ui.left.si [...]
- * # Semantic UI 2.2.12 - Sticky
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.sticky{position:static;-webkit-transition:none;transition:none;z-index:800}.ui.sticky.bound{position:absolute;left:auto;right:auto}.ui.sticky.fixed{position:fixed;left:auto;right:auto}.ui.sticky.bound.top,.ui.sticky.fixed.top{top:0;bottom:auto}.ui.sticky.bound.bottom,.ui.sticky.fixed.bottom{top:auto;bottom:0}.ui.native.sticky{position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;position:sticky}/*!
- * # Semantic UI 2.2.12 - Tab
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.ui.tab{display:none}.ui.tab.active,.ui.tab.open{display:block}.ui.tab.loading{position:relative;overflow:hidden;display:block;min-height:250px}.ui.tab.loading *{position:relative!important;left:-10000px!important}.ui.tab.loading.segment:before,.ui.tab.loading:before{position:absolute;content:'';top:100px;left:50%;margin:-1.25em 0 0 -1.25em;width:2.5em;height:2.5em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.tab.loading.segment:after,.ui.tab.loading:after{position:absolu [...]
- * # Semantic UI 2.2.12 - Transition
- * http://github.com/semantic-org/semantic-ui/
- *
- *
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */.transition{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animating.transition{-webkit-backface-visibility:hidden;backface-visibility:hidden;visibility:visible!important}.loading.transition{position:absolute;top:-99999px;left:-99999px}.hidden.transition{display:none;visibility:hidden}.vi [...]
\ No newline at end of file
diff --git a/dist/semantic.min.js b/dist/semantic.min.js
deleted file mode 100644
index 0233fd6..0000000
--- a/dist/semantic.min.js
+++ /dev/null
@@ -1,19 +0,0 @@
- /*
- * # Semantic UI - 2.2.12
- * https://github.com/Semantic-Org/Semantic-UI
- * http://www.semantic-ui.com/
- *
- * Copyright 2014 Contributors
- * Released under the MIT license
- * http://opensource.org/licenses/MIT
- *
- */
-!function(e,t,n,i){e.site=e.fn.site=function(i){var o,a,r=(new Date).getTime(),s=[],l=arguments[0],c="string"==typeof l,u=[].slice.call(arguments,1),d=e.isPlainObject(i)?e.extend(!0,{},e.site.settings,i):e.extend({},e.site.settings),f=d.namespace,m=d.error,g="module-"+f,v=e(n),p=v,h=this,b=p.data(g);return o={initialize:function(){o.instantiate()},instantiate:function(){o.verbose("Storing instance of site",o),b=o,p.data(g,o)},normalize:function(){o.fix.console(),o.fix.requestAnimationFra [...]
-!f.silent&&f.verbose&&f.debug&&(f.performance?d.performance.log(arguments):(d.verbose=Function.prototype.bind.call(console.info,console,f.name+":"),d.verbose.apply(console,arguments)))},error:function(){f.silent||(d.error=Function.prototype.bind.call(console.error,console,f.name+":"),d.error.apply(console,arguments))},performance:{log:function(e){var t,n,i;f.performance&&(t=(new Date).getTime(),i=a||t,n=t-i,a=t,r.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:k,"Execution Time" [...]
-if(t=String(w.get.choiceText(r,!1)),-1!==t.search(a))return i.push(this),!0;if("exact"===k.fullTextSearch&&w.exactSearch(n,t))return i.push(this),!0;if(!0===k.fullTextSearch&&w.fuzzySearch(n,t))return i.push(this),!0}if("both"==k.match||"value"==k.match){if(o=String(w.get.choiceValue(r,t)),-1!==o.search(a))return i.push(this),!0;if("exact"===k.fullTextSearch&&w.exactSearch(n,o))return i.push(this),!0;if(!0===k.fullTextSearch&&w.fuzzySearch(n,o))return i.push(this),!0}})),w.debug("Showing [...]
-n.removeClass(S.loading),i},click:function(){return l||"click"==k.on},extendSelect:function(){return k.allowAdditions||k.apiSettings},show:function(){return!w.is.disabled()&&(w.has.items()||w.has.message())},useAPI:function(){return void 0!==e.fn.api}},animate:{show:function(t,n){var i,o=n||B,a=n?function(){}:function(){w.hideSubMenus(),w.hideOthers(),w.set.active()};t=e.isFunction(t)?t:function(){},w.verbose("Doing menu show animation",o),w.set.direction(n),i=w.get.transition(n),w.is.se [...]
-console.table?console.table(s):e.each(s,function(e,t){console.log(t.Name+": "+t["Execution Time"]+"ms")}),console.groupEnd()),s=[]}},invoke:function(t,n,a){var r,s,l,c=x;return n=n||u,a=y||a,"string"==typeof t&&void 0!==c&&(t=t.split(/[\. ]/),r=t.length-1,e.each(t,function(n,i){var a=n!=r?i+t[n+1].charAt(0).toUpperCase()+t[n+1].slice(1):t;if(e.isPlainObject(c[a])&&n!=r)c=c[a];else{if(void 0!==c[a])return s=c[a],!1;if(!e.isPlainObject(c[i])||n==r)return void 0!==c[i]?(s=c[i],!1):(o.error( [...]
-percent:"{percent}%",ratio:"{value} of {total}"},className:{active:"active",error:"error",success:"success",warning:"warning"}}}(jQuery,window,document),function(e,t,n,i){"use strict";t=void 0!==t&&t.Math==Math?t:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),e.fn.rating=function(t){var n,i=e(this),o=i.selector||"",a=(new Date).getTime(),r=[],s=arguments[0],l="string"==typeof s,c=[].slice.call(arguments,1);return i.each(function(){var u,d,f=e.isPlainObject(t)?e. [...]
-v.silent||(m.error=Function.prototype.bind.call(console.error,console,v.name+":"),m.error.apply(console,arguments))},performance:{log:function(e){var t,n,i;v.performance&&(t=(new Date).getTime(),i=r||t,n=t-i,r=t,s.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:A,"Execution Time":n})),clearTimeout(m.performance.timer),m.performance.timer=setTimeout(m.performance.display,500)},display:function(){var t=v.name+":",n=0;r=!1,clearTimeout(m.performance.timer),e.each(s,function(e,t){n+ [...]
-s&&s.length>0&&f)return h.debug("Anchor link used, opening parent tab",S,s),S.hasClass(x.active)||setTimeout(function(){h.scrollTo(s)},0),h.activate.all(f),h.cache.read(f)||(h.cache.add(f,!0),h.debug("First time tab loaded calling tab init"),y.onFirstLoad.call(S[0],f,p,b)),y.onLoad.call(S[0],f,p,b),!1}})},scrollTo:function(t){var i=!!(t&&t.length>0)&&t.offset().top;!1!==i&&(h.debug("Forcing scroll to an in-page link in a hidden tab",i,t),e(n).scrollTop(i))},update:{content:function(t,n,i [...]
-v.silent||(g.error=Function.prototype.bind.call(console.error,console,v.name+":"),g.error.apply(console,arguments))},performance:{log:function(e){var t,n,i;v.performance&&(t=(new Date).getTime(),i=r||t,n=t-i,r=t,s.push({Name:e[0],Arguments:[].slice.call(e,1)||"","Execution Time":n})),clearTimeout(g.performance.timer),g.performance.timer=setTimeout(g.performance.display,500)},display:function(){var t=v.name+":",n=0;r=!1,clearTimeout(g.performance.timer),e.each(s,function(e,t){n+=t["Execut [...]
\ No newline at end of file
diff --git a/examples/assets/library/iframe-content.js b/examples/assets/library/iframe-content.js
deleted file mode 100644
index 020b317..0000000
--- a/examples/assets/library/iframe-content.js
+++ /dev/null
@@ -1,707 +0,0 @@
-/*
- * File: iframeResizer.contentWindow.js
- * Desc: Include this file in any page being loaded into an iframe
- *       to force the iframe to resize to the content size.
- * Requires: iframeResizer.js on host page.
- * Author: David J. Bradshaw - dave at bradshaw.net
- * Contributor: Jure Mav - jure.mav at gmail.com
- * Contributor: Ian Caunce - ian at hallnet.co.uk
- */
-
-;(function() {
-  'use strict';
-
-  var
-    autoResize            = true,
-    base                  = 10,
-    bodyBackground        = '',
-    bodyMargin            = 0,
-    bodyMarginStr         = '',
-    bodyPadding           = '',
-    calculateWidth        = false,
-    doubleEventList       = {'resize':1,'click':1},
-    eventCancelTimer      = 128,
-    height                = 1,
-    firstRun              = true,
-    heightCalcModeDefault = 'offset',
-    heightCalcMode        = heightCalcModeDefault,
-    initLock              = true,
-    initMsg               = '',
-    inPageLinks           = {},
-    interval              = 32,
-    logging               = false,
-    msgID                 = '[iFrameSizer]',  //Must match host page msg ID
-    msgIdLen              = msgID.length,
-    myID                  = '',
-    publicMethods         = false,
-    resetRequiredMethods  = {max:1,scroll:1,bodyScroll:1,documentElementScroll:1},
-    resizeFrom            = 'parent',
-    targetOriginDefault   = '*',
-    target                = window.parent,
-    tolerance             = 0,
-    triggerLocked         = false,
-    triggerLockedTimer    = null,
-    width                 = 1;
-
-
-  function addEventListener(el,evt,func){
-    if ('addEventListener' in window){
-      el.addEventListener(evt,func, false);
-    } else if ('attachEvent' in window){ //IE
-      el.attachEvent('on'+evt,func);
-    }
-  }
-
-  function formatLogMsg(msg){
-    return msgID + '[' + myID + ']' + ' ' + msg;
-  }
-
-  function log(msg){
-    if (logging && ('object' === typeof window.console)){
-      console.log(formatLogMsg(msg));
-    }
-  }
-
-  function warn(msg){
-    if ('object' === typeof window.console){
-      console.warn(formatLogMsg(msg));
-    }
-  }
-
-
-  function init(){
-    log('Initializing iFrame');
-    readData();
-    setMargin();
-    setBodyStyle('background',bodyBackground);
-    setBodyStyle('padding',bodyPadding);
-    injectClearFixIntoBodyElement();
-    checkHeightMode();
-    stopInfiniteResizingOfIFrame();
-    setupPublicMethods();
-    startEventListeners();
-    inPageLinks = setupInPageLinks();
-    sendSize('init','Init message from host page');
-  }
-
-  function readData(){
-
-    var data = initMsg.substr(msgIdLen).split(':');
-
-    function strBool(str){
-      return 'true' === str ? true : false;
-    }
-
-    myID               = data[0];
-    bodyMargin         = (undefined !== data[1]) ? Number(data[1])   : bodyMargin; //For V1 compatibility
-    calculateWidth     = (undefined !== data[2]) ? strBool(data[2])  : calculateWidth;
-    logging            = (undefined !== data[3]) ? strBool(data[3])  : logging;
-    interval           = (undefined !== data[4]) ? Number(data[4])   : interval;
-    publicMethods      = (undefined !== data[5]) ? strBool(data[5])  : publicMethods;
-    autoResize         = (undefined !== data[6]) ? strBool(data[6])  : autoResize;
-    bodyMarginStr      = data[7];
-    heightCalcMode     = (undefined !== data[8]) ? data[8]           : heightCalcMode;
-    bodyBackground     = data[9];
-    bodyPadding        = data[10];
-    tolerance          = (undefined !== data[11]) ? Number(data[11]) : tolerance;
-    inPageLinks.enable = (undefined !== data[12]) ? strBool(data[12]): false;
-    resizeFrom         = data[13];
-  }
-
-  function chkCSS(attr,value){
-    if (-1 !== value.indexOf('-')){
-      warn('Negative CSS value ignored for '+attr);
-      value='';
-    }
-    return value;
-  }
-
-  function setBodyStyle(attr,value){
-    if ((undefined !== value) && ('' !== value) && ('null' !== value)){
-      document.body.style[attr] = value;
-      log('Body '+attr+' set to "'+value+'"');
-    }
-  }
-
-  function setMargin(){
-    //If called via V1 script, convert bodyMargin from int to str
-    if (undefined === bodyMarginStr){
-      bodyMarginStr = bodyMargin+'px';
-    }
-    chkCSS('margin',bodyMarginStr);
-    setBodyStyle('margin',bodyMarginStr);
-  }
-
-  function stopInfiniteResizingOfIFrame(){
-    document.documentElement.style.height = '';
-    document.body.style.height = '';
-    log('HTML & body height set to "auto"');
-  }
-
-
-  function addTriggerEvent(options){
-    function addListener(eventName){
-      addEventListener(window,eventName,function(e){
-        sendSize(options.eventName,options.eventType);
-      });
-    }
-
-    if(options.eventNames && Array.prototype.map){
-      options.eventName = options.eventNames[0];
-      options.eventNames.map(addListener);
-    } else {
-      addListener(options.eventName);
-    }
-
-    log('Added event listener: ' + options.eventType);
-  }
-
-  function initEventListeners(){
-    addTriggerEvent({ eventType: 'Animation Start',           eventNames: ['animationstart','webkitAnimationStart'] });
-    addTriggerEvent({ eventType: 'Animation Iteration',       eventNames: ['animationiteration','webkitAnimationIteration'] });
-    addTriggerEvent({ eventType: 'Animation End',             eventNames: ['animationend','webkitAnimationEnd'] });
-    addTriggerEvent({ eventType: 'Device Orientation Change', eventName:  'deviceorientation' });
-    addTriggerEvent({ eventType: 'Transition End',            eventNames: ['transitionend','webkitTransitionEnd','MSTransitionEnd','oTransitionEnd','otransitionend'] });
-    addTriggerEvent({ eventType: 'Window Clicked',            eventName:  'click' });
-    //addTriggerEvent({ eventType: 'Window Mouse Down',         eventName:  'mousedown' });
-    //addTriggerEvent({ eventType: 'Window Mouse Up',           eventName:  'mouseup' });
-    if('child' === resizeFrom){
-      addTriggerEvent({ eventType: 'IFrame Resized',        eventName:  'resize' });
-    }
-  }
-
-  function checkHeightMode(){
-    if (heightCalcModeDefault !== heightCalcMode){
-      if (!(heightCalcMode in getHeight)){
-        warn(heightCalcMode + ' is not a valid option for heightCalculationMethod.');
-        heightCalcMode='bodyScroll';
-      }
-      log('Height calculation method set to "'+heightCalcMode+'"');
-    }
-  }
-
-  function startEventListeners(){
-    if ( true === autoResize ) {
-      initEventListeners();
-      setupMutationObserver();
-    }
-    else {
-      log('Auto Resize disabled');
-    }
-  }
-
-  function injectClearFixIntoBodyElement(){
-    var clearFix = document.createElement('div');
-    clearFix.style.clear = 'both';
-    clearFix.style.display = 'block'; //Guard against this having been globally redefined in CSS.
-    document.body.appendChild(clearFix);
-  }
-
-  function setupInPageLinks(){
-
-    function getPagePosition (){
-      return {
-        x: (window.pageXOffset !== undefined) ? window.pageXOffset : document.documentElement.scrollLeft,
-        y: (window.pageYOffset !== undefined) ? window.pageYOffset : document.documentElement.scrollTop
-      };
-    }
-
-    function getElementPosition(el){
-      var
-        elPosition   = el.getBoundingClientRect(),
-        pagePosition = getPagePosition();
-
-      return {
-        x: parseInt(elPosition.left,10) + parseInt(pagePosition.x,10),
-        y: parseInt(elPosition.top,10)  + parseInt(pagePosition.y,10)
-      };
-    }
-
-    function findTarget(location){
-      var hash = location.split("#")[1] || "";
-      var hashData = decodeURIComponent(hash);
-
-      function jumpToTarget(target){
-        var jumpPosition = getElementPosition(target);
-
-        log('Moving to in page link (#'+hash+') at x: '+jumpPosition.x+' y: '+jumpPosition.y);
-        sendMsg(jumpPosition.y, jumpPosition.x, 'scrollToOffset'); // X&Y reversed at sendMsg uses height/width
-      }
-
-      var target = document.getElementById(hashData) || document.getElementsByName(hashData)[0];
-
-      if (target){
-        jumpToTarget(target);
-      } else {
-        log('In page link (#' + hash + ') not found in iFrame, so sending to parent');
-        sendMsg(0,0,'inPageLink','#'+hash);
-      }
-    }
-
-    function checkLocationHash(){
-      if ('' !== location.hash && '#' !== location.hash){
-        findTarget(location.href);
-      }
-    }
-
-    function bindAnchors(){
-      function setupLink(el){
-        function linkClicked(e){
-          e.preventDefault();
-
-          /*jshint validthis:true */
-          findTarget(this.getAttribute('href'));
-        }
-
-        if ('#' !== el.getAttribute('href')){
-          addEventListener(el,'click',linkClicked);
-        }
-      }
-
-      Array.prototype.forEach.call( document.querySelectorAll( 'a[href^="#"]' ), setupLink );
-    }
-
-    function bindLocationHash(){
-      addEventListener(window,'hashchange',checkLocationHash);
-    }
-
-    function initCheck(){ //check if page loaded with location hash after init resize
-      setTimeout(checkLocationHash,eventCancelTimer);
-    }
-
-    function enableInPageLinks(){
-      if(Array.prototype.forEach && document.querySelectorAll){
-        log('Setting up location.hash handlers');
-        bindAnchors();
-        bindLocationHash();
-        initCheck();
-      } else {
-        warn('In page linking not fully supported in this browser! (See README.md for IE8 workaround)');
-      }
-    }
-
-    if(inPageLinks.enable){
-      enableInPageLinks();
-    } else {
-      log('In page linking not enabled');
-    }
-
-    return {
-      findTarget:findTarget
-    };
-  }
-
-  function setupPublicMethods(){
-    if (publicMethods) {
-      log('Enable public methods');
-
-      window.parentIFrame = {
-        close: function closeF(){
-          sendMsg(0,0,'close');
-        },
-        getId: function getIdF(){
-          return myID;
-        },
-        moveToAnchor: function moveToAnchorF(hash){
-          inPageLinks.findTarget(hash);
-        },
-        reset: function resetF(){
-          resetIFrame('parentIFrame.reset');
-        },
-        scrollTo: function scrollToF(x,y){
-          sendMsg(y,x,'scrollTo'); // X&Y reversed at sendMsg uses height/width
-        },
-        scrollToOffset: function scrollToF(x,y){
-          sendMsg(y,x,'scrollToOffset'); // X&Y reversed at sendMsg uses height/width
-        },
-        sendMessage: function sendMessageF(msg,targetOrigin){
-          sendMsg(0,0,'message',JSON.stringify(msg),targetOrigin);
-        },
-        setHeightCalculationMethod: function setHeightCalculationMethodF(heightCalculationMethod){
-          heightCalcMode = heightCalculationMethod;
-          checkHeightMode();
-        },
-        setTargetOrigin: function setTargetOriginF(targetOrigin){
-          log('Set targetOrigin: '+targetOrigin);
-          targetOriginDefault = targetOrigin;
-        },
-        size: function sizeF(customHeight, customWidth){
-          var valString = ''+(customHeight?customHeight:'')+(customWidth?','+customWidth:'');
-          lockTrigger();
-          sendSize('size','parentIFrame.size('+valString+')', customHeight, customWidth);
-        }
-      };
-    }
-  }
-
-  function initInterval(){
-    if ( 0 !== interval ){
-      log('setInterval: '+interval+'ms');
-      setInterval(function(){
-        sendSize('interval','setInterval: '+interval);
-      },Math.abs(interval));
-    }
-  }
-
-  function setupInjectElementLoadListeners(mutations){
-    function addLoadListener(element){
-      if (element.height === undefined || element.width === undefined || 0 === element.height || 0 === element.width){
-        log('Attach listener to '+element.src);
-        addEventListener(element,'load', function imageLoaded(){
-          sendSize('imageLoad','Image loaded');
-        });
-      }
-    }
-
-    mutations.forEach(function (mutation) {
-      if (mutation.type === 'attributes' && mutation.attributeName === 'src'){
-        addLoadListener(mutation.target);
-      } else if (mutation.type === 'childList'){
-        var images = mutation.target.querySelectorAll('img');
-        Array.prototype.forEach.call(images,function (image) {
-          addLoadListener(image);
-        });
-      }
-    });
-  }
-
-  function setupMutationObserver(){
-
-    var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
-
-    function createMutationObserver(){
-      var
-        target = document.querySelector('body'),
-
-        config = {
-          attributes            : true,
-          attributeOldValue     : false,
-          characterData         : true,
-          characterDataOldValue : false,
-          childList             : true,
-          subtree               : true
-        },
-
-        observer = new MutationObserver(function(mutations) {
-          sendSize('mutationObserver','mutationObserver: ' + mutations[0].target + ' ' + mutations[0].type);
-          setupInjectElementLoadListeners(mutations); //Deal with WebKit asyncing image loading when tags are injected into the page
-        });
-
-      log('Enable MutationObserver');
-      observer.observe(target, config);
-    }
-
-    if (MutationObserver){
-      if (0 > interval) {
-        initInterval();
-      } else {
-        createMutationObserver();
-      }
-    }
-    else {
-      warn('MutationObserver not supported in this browser!');
-      initInterval();
-    }
-  }
-
-
-  // document.documentElement.offsetHeight is not reliable, so
-  // we have to jump through hoops to get a better value.
-  function getBodyOffsetHeight(){
-    function getComputedBodyStyle(prop) {
-      function convertUnitsToPxForIE8(value) {
-        var PIXEL = /^\d+(px)?$/i;
-
-        if (PIXEL.test(value)) {
-          return parseInt(value,base);
-        }
-
-        var
-          style = el.style.left,
-          runtimeStyle = el.runtimeStyle.left;
-
-        el.runtimeStyle.left = el.currentStyle.left;
-        el.style.left = value || 0;
-        value = el.style.pixelLeft;
-        el.style.left = style;
-        el.runtimeStyle.left = runtimeStyle;
-
-        return value;
-      }
-
-      var
-        el = document.body,
-        retVal = 0;
-
-      if (('defaultView' in document) && ('getComputedStyle' in document.defaultView)) {
-        retVal = document.defaultView.getComputedStyle(el, null);
-        retVal = (null !== retVal) ? retVal[prop] : 0;
-      } else {//IE8
-        retVal =  convertUnitsToPxForIE8(el.currentStyle[prop]);
-      }
-
-      return parseInt(retVal,base);
-    }
-
-    return  document.body.offsetHeight +
-        getComputedBodyStyle('marginTop') +
-        getComputedBodyStyle('marginBottom');
-  }
-
-  function getBodyScrollHeight(){
-    return document.body.scrollHeight;
-  }
-
-  function getDEOffsetHeight(){
-    return document.documentElement.offsetHeight;
-  }
-
-  function getDEScrollHeight(){
-    return document.documentElement.scrollHeight;
-  }
-
-  //From https://github.com/guardian/iframe-messenger
-  function getLowestElementHeight() {
-    var
-      allElements       = document.querySelectorAll('body *'),
-      allElementsLength = allElements.length,
-      maxBottomVal      = 0,
-      timer             = new Date().getTime();
-
-    for (var i = 0; i < allElementsLength; i++) {
-      if (allElements[i].getBoundingClientRect().bottom > maxBottomVal) {
-        maxBottomVal = allElements[i].getBoundingClientRect().bottom;
-      }
-    }
-
-    timer = new Date().getTime() - timer;
-
-    log('Parsed '+allElementsLength+' HTML elements');
-    log('LowestElement bottom position calculated in ' + timer + 'ms');
-
-    return maxBottomVal;
-  }
-
-  function getAllHeights(){
-    return [
-      getBodyOffsetHeight(),
-      getBodyScrollHeight(),
-      getDEOffsetHeight(),
-      getDEScrollHeight()
-    ];
-  }
-
-  function getMaxHeight(){
-    return Math.max.apply(null,getAllHeights());
-  }
-
-  function getMinHeight(){
-    return Math.min.apply(null,getAllHeights());
-  }
-
-  function getBestHeight(){
-    return Math.max(getBodyOffsetHeight(),getLowestElementHeight());
-  }
-
-  var getHeight = {
-    offset                : getBodyOffsetHeight, //Backward compatability
-    bodyOffset            : getBodyOffsetHeight,
-    bodyScroll            : getBodyScrollHeight,
-    documentElementOffset : getDEOffsetHeight,
-    scroll                : getDEScrollHeight, //Backward compatability
-    documentElementScroll : getDEScrollHeight,
-    max                   : getMaxHeight,
-    min                   : getMinHeight,
-    grow                  : getMaxHeight,
-    lowestElement         : getBestHeight
-  };
-
-  function getWidth(){
-    return Math.max(
-      document.documentElement.scrollWidth,
-      document.body.scrollWidth
-    );
-  }
-
-  function sendSize(triggerEvent, triggerEventDesc, customHeight, customWidth){
-
-    var currentHeight,currentWidth;
-
-    function recordTrigger(){
-      if (!(triggerEvent in {'reset':1,'resetPage':1,'init':1})){
-        log( 'Trigger event: ' + triggerEventDesc );
-      }
-    }
-
-    function resizeIFrame(){
-      height = currentHeight;
-      width  = currentWidth;
-
-      sendMsg(height,width,triggerEvent);
-    }
-
-    function isDoubleFiredEvent(){
-      return  triggerLocked && (triggerEvent in doubleEventList);
-    }
-
-    function isSizeChangeDetected(){
-      function checkTolerance(a,b){
-        var retVal = Math.abs(a-b) <= tolerance;
-        return !retVal;
-      }
-
-      currentHeight = (undefined !== customHeight)  ? customHeight : getHeight[heightCalcMode]();
-      currentWidth  = (undefined !== customWidth )  ? customWidth  : getWidth();
-
-      return  checkTolerance(height,currentHeight) ||
-          (calculateWidth && checkTolerance(width,currentWidth));
-    }
-
-    function isForceResizableEvent(){
-      return !(triggerEvent in {'init':1,'interval':1,'size':1});
-    }
-
-    function isForceResizableHeightCalcMode(){
-      return (heightCalcMode in resetRequiredMethods);
-    }
-
-    function logIgnored(){
-      log('No change in size detected');
-    }
-
-    function checkDownSizing(){
-      if (isForceResizableEvent() && isForceResizableHeightCalcMode()){
-        resetIFrame(triggerEventDesc);
-      } else if (!(triggerEvent in {'interval':1})){
-        recordTrigger();
-        logIgnored();
-      }
-    }
-
-    if (!isDoubleFiredEvent()){
-      if (isSizeChangeDetected()){
-        recordTrigger();
-        lockTrigger();
-        resizeIFrame();
-      } else {
-        checkDownSizing();
-      }
-    } else {
-      log('Trigger event cancelled: '+triggerEvent);
-    }
-  }
-
-  function lockTrigger(){
-    if (!triggerLocked){
-      triggerLocked = true;
-      log('Trigger event lock on');
-    }
-    clearTimeout(triggerLockedTimer);
-    triggerLockedTimer = setTimeout(function(){
-      triggerLocked = false;
-      log('Trigger event lock off');
-      log('--');
-    },eventCancelTimer);
-  }
-
-  function triggerReset(triggerEvent){
-    height = getHeight[heightCalcMode]();
-    width  = getWidth();
-
-    sendMsg(height,width,triggerEvent);
-  }
-
-  function resetIFrame(triggerEventDesc){
-    var hcm = heightCalcMode;
-    heightCalcMode = heightCalcModeDefault;
-
-    log('Reset trigger event: ' + triggerEventDesc);
-    lockTrigger();
-    triggerReset('reset');
-
-    heightCalcMode = hcm;
-  }
-
-  function sendMsg(height,width,triggerEvent,msg,targetOrigin){
-    function setTargetOrigin(){
-      if (undefined === targetOrigin){
-        targetOrigin = targetOriginDefault;
-      } else {
-        log('Message targetOrigin: '+targetOrigin);
-      }
-    }
-
-    function sendToParent(){
-      var
-        size  = height + ':' + width,
-        message = myID + ':' +  size + ':' + triggerEvent + (undefined !== msg ? ':' + msg : '');
-
-      log('Sending message to host page (' + message + ')');
-      target.postMessage( msgID + message, targetOrigin);
-    }
-
-    setTargetOrigin();
-    sendToParent();
-  }
-
-  function receiver(event) {
-    function isMessageForUs(){
-      return msgID === (''+event.data).substr(0,msgIdLen); //''+ Protects against non-string messages
-    }
-
-    function initFromParent(){
-      initMsg = event.data;
-      target  = event.source;
-
-      init();
-      firstRun = false;
-      setTimeout(function(){ initLock = false;},eventCancelTimer);
-    }
-
-    function resetFromParent(){
-      if (!initLock){
-        log('Page size reset by host page');
-        triggerReset('resetPage');
-      } else {
-        log('Page reset ignored by init');
-      }
-    }
-
-    function resizeFromParent(){
-      sendSize('resizeParent','Parent window resized');
-    }
-
-    function getMessageType(){
-      return event.data.split(']')[1];
-    }
-
-    function isMiddleTier(){
-      return ('iFrameResize' in window);
-    }
-
-    function isInitMsg(){
-      //test if this message is from a child below us. This is an ugly test, however, updating
-      //the message format would break backwards compatibility.
-      return event.data.split(':')[2] in {'true':1,'false':1};
-    }
-
-    if (isMessageForUs()){
-      if (firstRun === false) {
-        if ('reset' === getMessageType()){
-          resetFromParent();
-        } else if ('resize' === getMessageType()){
-          resizeFromParent();
-        } else if (event.data !== initMsg && !isMiddleTier()){
-          warn('Unexpected message ('+event.data+')');
-        }
-      } else if (isInitMsg()) {
-        initFromParent();
-      } else {
-        warn('Received message of type ('+getMessageType()+') before initialization.');
-      }
-    }
-  }
-
-  addEventListener(window, 'message', receiver);
-
-})();
\ No newline at end of file
diff --git a/examples/assets/library/iframe.js b/examples/assets/library/iframe.js
deleted file mode 100644
index 2d1747d..0000000
--- a/examples/assets/library/iframe.js
+++ /dev/null
@@ -1,642 +0,0 @@
-/*
- * File: iframeResizer.js
- * Desc: Force iframes to size to content.
- * Requires: iframeResizer.contentWindow.js to be loaded into the target frame.
- * Author: David J. Bradshaw - dave at bradshaw.net
- * Contributor: Jure Mav - jure.mav at gmail.com
- * Contributor: Reed Dadoune - reed at dadoune.com
- */
-;(function() {
-  'use strict';
-
-  var
-    count                 = 0,
-    firstRun              = true,
-    logEnabled            = false,
-    msgHeader             = 'message',
-    msgHeaderLen          = msgHeader.length,
-    msgId                 = '[iFrameSizer]', //Must match iframe msg ID
-    msgIdLen              = msgId.length,
-    pagePosition          = null,
-    requestAnimationFrame = window.requestAnimationFrame,
-    resetRequiredMethods  = {max:1,scroll:1,bodyScroll:1,documentElementScroll:1},
-    settings              = {},
-    timer                 = null,
-
-    defaults              = {
-      autoResize                : true,
-      bodyBackground            : null,
-      bodyMargin                : null,
-      bodyMarginV1              : 8,
-      bodyPadding               : null,
-      checkOrigin               : true,
-      enableInPageLinks         : false,
-      enablePublicMethods       : false,
-      heightCalculationMethod   : 'offset',
-      interval                  : 32,
-      log                       : false,
-      maxHeight                 : Infinity,
-      maxWidth                  : Infinity,
-      minHeight                 : 0,
-      minWidth                  : 0,
-      resizeFrom                : 'parent',
-      scrolling                 : false,
-      sizeHeight                : true,
-      sizeWidth                 : false,
-      tolerance                 : 0,
-      closedCallback            : function(){},
-      initCallback              : function(){},
-      messageCallback           : function(){},
-      resizedCallback           : function(){},
-      scrollCallback            : function(){return true;}
-    };
-
-  function addEventListener(obj,evt,func){
-    if ('addEventListener' in window){
-      obj.addEventListener(evt,func, false);
-    } else if ('attachEvent' in window){//IE
-      obj.attachEvent('on'+evt,func);
-    }
-  }
-
-  function setupRequestAnimationFrame(){
-    var
-      vendors = ['moz', 'webkit', 'o', 'ms'],
-      x;
-
-    // Remove vendor prefixing if prefixed and break early if not
-    for (x = 0; x < vendors.length && !requestAnimationFrame; x += 1) {
-      requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
-    }
-
-    if (!(requestAnimationFrame)){
-      log(' RequestAnimationFrame not supported');
-    }
-  }
-
-  function getMyID(){
-    var retStr = 'Host page';
-
-    if (window.top!==window.self){
-      if (window.parentIFrame){
-        retStr = window.parentIFrame.getId();
-      } else {
-        retStr = 'Nested host page';
-      }
-    }
-
-    return retStr;
-  }
-
-  function formatLogMsg(msg){
-    return msgId + '[' + getMyID() + ']' + msg;
-  }
-
-  function log(msg){
-    if (logEnabled && ('object' === typeof window.console)){
-      console.log(formatLogMsg(msg));
-    }
-  }
-
-  function warn(msg){
-    if ('object' === typeof window.console){
-      console.warn(formatLogMsg(msg));
-    }
-  }
-
-  function iFrameListener(event){
-    function resizeIFrame(){
-      function resize(){
-        setSize(messageData);
-        setPagePosition();
-        settings[iframeID].resizedCallback(messageData);
-      }
-
-      ensureInRange('Height');
-      ensureInRange('Width');
-
-      syncResize(resize,messageData,'resetPage');
-    }
-
-    function closeIFrame(iframe){
-      var iframeID = iframe.id;
-
-      log(' Removing iFrame: '+iframeID);
-      iframe.parentNode.removeChild(iframe);
-      settings[iframeID].closedCallback(iframeID);
-      delete settings[iframeID];
-      log(' --');
-    }
-
-    function processMsg(){
-      var data = msg.substr(msgIdLen).split(':');
-
-      return {
-        iframe: document.getElementById(data[0]),
-        id:     data[0],
-        height: data[1],
-        width:  data[2],
-        type:   data[3]
-      };
-    }
-
-    function ensureInRange(Dimension){
-      var
-        max  = Number(settings[iframeID]['max'+Dimension]),
-        min  = Number(settings[iframeID]['min'+Dimension]),
-        dimension = Dimension.toLowerCase(),
-        size = Number(messageData[dimension]);
-
-      if (min>max){
-        throw new Error('Value for min'+Dimension+' can not be greater than max'+Dimension);
-      }
-
-      log(' Checking '+dimension+' is in range '+min+'-'+max);
-
-      if (size<min) {
-        size=min;
-        log(' Set '+dimension+' to min value');
-      }
-
-      if (size>max) {
-        size=max;
-        log(' Set '+dimension+' to max value');
-      }
-
-      messageData[dimension]=''+size;
-    }
-
-
-    function isMessageFromIFrame(){
-      function checkAllowedOrigin(){
-        function checkList(){
-          log(' Checking connection is from allowed list of origins: ' + checkOrigin);
-          var i;
-          for (i = 0; i < checkOrigin.length; i++) {
-            if (checkOrigin[i] === origin) {
-              return true;
-            }
-          }
-          return false;
-        }
-
-        function checkSingle(){
-          log(' Checking connection is from: '+remoteHost);
-          return origin == remoteHost;
-        }
-
-        return checkOrigin.constructor === Array ? checkList() : checkSingle();
-      }
-
-      var
-        origin     = event.origin,
-        checkOrigin = settings[iframeID].checkOrigin,
-        remoteHost = messageData.iframe.src.split('/').slice(0,3).join('/');
-
-      if (checkOrigin) {
-        if ((''+origin !== 'null') && !checkAllowedOrigin()) {
-          throw new Error(
-            'Unexpected message received from: ' + origin +
-            ' for ' + messageData.iframe.id +
-            '. Message was: ' + event.data +
-            '. This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.'
-          );
-        }
-      }
-
-      return true;
-    }
-
-    function isMessageForUs(){
-      return msgId === ('' + msg).substr(0,msgIdLen); //''+Protects against non-string msg
-    }
-
-    function isMessageFromMetaParent(){
-      //test if this message is from a parent above us. This is an ugly test, however, updating
-      //the message format would break backwards compatibility.
-      var retCode = messageData.type in {'true':1,'false':1,'undefined':1};
-
-      if (retCode){
-        log(' Ignoring init message from meta parent page');
-      }
-
-      return retCode;
-    }
-
-    function getMsgBody(offset){
-      return msg.substr(msg.indexOf(':')+msgHeaderLen+offset);
-    }
-
-    function forwardMsgFromIFrame(msgBody){
-      log(' MessageCallback passed: {iframe: '+ messageData.iframe.id + ', message: ' + msgBody + '}');
-      settings[iframeID].messageCallback({
-        iframe: messageData.iframe,
-        message: JSON.parse(msgBody)
-      });
-      log(' --');
-    }
-
-    function checkIFrameExists(){
-      if (null === messageData.iframe) {
-        warn(' IFrame ('+messageData.id+') not found');
-        return false;
-      }
-      return true;
-    }
-
-    function getElementPosition(target){
-      var
-        iFramePosition = target.getBoundingClientRect();
-
-      getPagePosition();
-
-      return {
-        x: parseInt(iFramePosition.left, 10) + parseInt(pagePosition.x, 10),
-        y: parseInt(iFramePosition.top, 10)  + parseInt(pagePosition.y, 10)
-      };
-    }
-
-    function scrollRequestFromChild(addOffset){
-      function reposition(){
-        pagePosition = newPosition;
-
-        scrollTo();
-
-        log(' --');
-      }
-
-      function calcOffset(){
-        return {
-          x: Number(messageData.width) + offset.x,
-          y: Number(messageData.height) + offset.y
-        };
-      }
-
-      var
-        offset = addOffset ? getElementPosition(messageData.iframe) : {x:0,y:0},
-        newPosition = calcOffset();
-
-      log(' Reposition requested from iFrame (offset x:'+offset.x+' y:'+offset.y+')');
-
-      if(window.top!==window.self){
-        if (window.parentIFrame){
-          if (addOffset){
-            parentIFrame.scrollToOffset(newPosition.x,newPosition.y);
-          } else {
-            parentIFrame.scrollTo(messageData.width,messageData.height);
-          }
-        } else {
-          warn(' Unable to scroll to requested position, window.parentIFrame not found');
-        }
-      } else {
-        reposition();
-      }
-
-    }
-
-    function scrollTo(){
-      if (false !== settings[iframeID].scrollCallback(pagePosition)){
-        setPagePosition();
-      }
-    }
-
-    function findTarget(location){
-      var hash = location.split("#")[1] || "";
-      var hashData = decodeURIComponent(hash);
-
-      function jumpToTarget(target){
-        var jumpPosition = getElementPosition(target);
-
-        log(' Moving to in page link (#'+hash+') at x: '+jumpPosition.x+' y: '+jumpPosition.y);
-        pagePosition = {
-          x: jumpPosition.x,
-          y: jumpPosition.y
-        };
-
-        scrollTo();
-        log(' --');
-      }
-
-      var target = document.getElementById(hashData) || document.getElementsByName(hashData)[0];
-
-      if(window.top!==window.self){
-        if (window.parentIFrame){
-          parentIFrame.moveToAnchor(hash);
-        } else {
-          log(' In page link #'+hash+' not found and window.parentIFrame not found');
-        }
-      } else if (target){
-        jumpToTarget(target);
-      } else {
-        log(' In page link #'+hash+' not found');
-      }
-    }
-
-    function actionMsg(){
-      switch(messageData.type){
-        case 'close':
-          closeIFrame(messageData.iframe);
-          break;
-        case 'message':
-          forwardMsgFromIFrame(getMsgBody(6));
-          break;
-        case 'scrollTo':
-          scrollRequestFromChild(false);
-          break;
-        case 'scrollToOffset':
-          scrollRequestFromChild(true);
-          break;
-        case 'inPageLink':
-          findTarget(getMsgBody(9));
-          break;
-        case 'reset':
-          resetIFrame(messageData);
-          break;
-        case 'init':
-          resizeIFrame();
-          settings[iframeID].initCallback(messageData.iframe);
-          break;
-        default:
-          resizeIFrame();
-      }
-    }
-
-    function hasSettings(iframeID){
-      var retBool = true;
-
-      if (!settings[iframeID]){
-        retBool = false;
-        warn(messageData.type + ' No settings for ' + iframeID + '. Message was: ' + msg);
-      }
-
-      return retBool;
-    }
-
-    var
-      msg = event.data,
-      messageData = {},
-      iframeID = null;
-
-    if (isMessageForUs()){
-      messageData = processMsg();
-      iframeID    = messageData.id;
-
-      if (!isMessageFromMetaParent() && hasSettings(iframeID)){
-        logEnabled  = settings[iframeID].log;
-        log(' Received: '+msg);
-
-        if ( checkIFrameExists() && isMessageFromIFrame() ){
-          actionMsg();
-          firstRun = false;
-        }
-      }
-    }
-  }
-
-
-  function getPagePosition (){
-    if(null === pagePosition){
-      pagePosition = {
-        x: (window.pageXOffset !== undefined) ? window.pageXOffset : document.documentElement.scrollLeft,
-        y: (window.pageYOffset !== undefined) ? window.pageYOffset : document.documentElement.scrollTop
-      };
-      log(' Get page position: '+pagePosition.x+','+pagePosition.y);
-    }
-  }
-
-  function setPagePosition(){
-    if(null !== pagePosition){
-      window.scrollTo(pagePosition.x,pagePosition.y);
-      log(' Set page position: '+pagePosition.x+','+pagePosition.y);
-      pagePosition = null;
-    }
-  }
-
-  function resetIFrame(messageData){
-    function reset(){
-      setSize(messageData);
-      trigger('reset','reset',messageData.iframe,messageData.id);
-    }
-
-    log(' Size reset requested by '+('init'===messageData.type?'host page':'iFrame'));
-    getPagePosition();
-    syncResize(reset,messageData,'init');
-  }
-
-  function setSize(messageData){
-    function setDimension(dimension){
-      messageData.iframe.style[dimension] = messageData[dimension] + 'px';
-      log(
-        ' IFrame (' + iframeID +
-        ') ' + dimension +
-        ' set to ' + messageData[dimension] + 'px'
-      );
-    }
-    var iframeID = messageData.iframe.id;
-    if( settings[iframeID].sizeHeight) { setDimension('height'); }
-    if( settings[iframeID].sizeWidth ) { setDimension('width'); }
-  }
-
-  function syncResize(func,messageData,doNotSync){
-    if(doNotSync!==messageData.type && requestAnimationFrame){
-      log(' Requesting animation frame');
-      requestAnimationFrame(func);
-    } else {
-      func();
-    }
-  }
-
-  function trigger(calleeMsg,msg,iframe,id){
-    if(iframe && iframe.contentWindow){
-      log('[' + calleeMsg + '] Sending msg to iframe ('+msg+')');
-      iframe.contentWindow.postMessage( msgId + msg, '*' );
-    } else {
-      warn('[' + calleeMsg + '] IFrame not found');
-      if(settings[id]) delete settings[id];
-    }
-  }
-
-
-  function setupIFrame(options){
-    function setLimits(){
-      function addStyle(style){
-        if ((Infinity !== settings[iframeID][style]) && (0 !== settings[iframeID][style])){
-          iframe.style[style] = settings[iframeID][style] + 'px';
-          log(' Set '+style+' = '+settings[iframeID][style]+'px');
-        }
-      }
-
-      addStyle('maxHeight');
-      addStyle('minHeight');
-      addStyle('maxWidth');
-      addStyle('minWidth');
-    }
-
-    function ensureHasId(iframeID){
-      if (''===iframeID){
-        iframe.id = iframeID = 'iFrameResizer' + count++;
-        logEnabled = (options || {}).log;
-        log(' Added missing iframe ID: '+ iframeID +' (' + iframe.src + ')');
-      }
-
-      return iframeID;
-    }
-
-    function setScrolling(){
-      log(' IFrame scrolling ' + (settings[iframeID].scrolling ? 'enabled' : 'disabled') + ' for ' + iframeID);
-      iframe.style.overflow = false === settings[iframeID].scrolling ? 'hidden' : 'auto';
-      iframe.scrolling      = false === settings[iframeID].scrolling ? 'no' : 'yes';
-    }
-
-    //The V1 iFrame script expects an int, where as in V2 expects a CSS
-    //string value such as '1px 3em', so if we have an int for V2, set V1=V2
-    //and then convert V2 to a string PX value.
-    function setupBodyMarginValues(){
-      if (('number'===typeof(settings[iframeID].bodyMargin)) || ('0'===settings[iframeID].bodyMargin)){
-        settings[iframeID].bodyMarginV1 = settings[iframeID].bodyMargin;
-        settings[iframeID].bodyMargin   = '' + settings[iframeID].bodyMargin + 'px';
-      }
-    }
-
-    function createOutgoingMsg(){
-      return iframeID +
-        ':' + settings[iframeID].bodyMarginV1 +
-        ':' + settings[iframeID].sizeWidth +
-        ':' + settings[iframeID].log +
-        ':' + settings[iframeID].interval +
-        ':' + settings[iframeID].enablePublicMethods +
-        ':' + settings[iframeID].autoResize +
-        ':' + settings[iframeID].bodyMargin +
-        ':' + settings[iframeID].heightCalculationMethod +
-        ':' + settings[iframeID].bodyBackground +
-        ':' + settings[iframeID].bodyPadding +
-        ':' + settings[iframeID].tolerance +
-        ':' + settings[iframeID].enableInPageLinks +
-        ':' + settings[iframeID].resizeFrom;
-    }
-
-    function init(msg){
-      //We have to call trigger twice, as we can not be sure if all
-      //iframes have completed loading when this code runs. The
-      //event listener also catches the page changing in the iFrame.
-      addEventListener(iframe,'load',function(){
-        var fr = firstRun;   // Reduce scope of var to function, because IE8's JS execution
-                                     // context stack is borked and this value gets externally
-                                     // changed midway through running this function.
-        trigger('iFrame.onload',msg,iframe);
-        if (!fr && settings[iframeID].heightCalculationMethod in resetRequiredMethods){
-          resetIFrame({
-            iframe:iframe,
-            height:0,
-            width:0,
-            type:'init'
-          });
-        }
-      });
-      trigger('init',msg,iframe);
-    }
-
-    function checkOptions(options){
-      if ('object' !== typeof options){
-        throw new TypeError('Options is not an object.');
-      }
-    }
-
-    function processOptions(options){
-      options = options || {};
-      settings[iframeID] = {};
-
-      checkOptions(options);
-
-      for (var option in defaults) {
-        if (defaults.hasOwnProperty(option)){
-          settings[iframeID][option] = options.hasOwnProperty(option) ? options[option] : defaults[option];
-        }
-      }
-
-      logEnabled = settings[iframeID].log;
-    }
-
-    var
-      /*jshint validthis:true */
-      iframe   = this,
-      iframeID = ensureHasId(iframe.id);
-
-    processOptions(options);
-    setScrolling();
-    setLimits();
-    setupBodyMarginValues();
-    init(createOutgoingMsg());
-  }
-
-  function throttle(fn,time){
-    if (null === timer){
-      timer = setTimeout(function(){
-        timer = null;
-        fn();
-      }, time);
-    }
-  }
-
-  function winResize(){
-    throttle(function(){
-      for (var iframeId in settings){
-        if('parent' === settings[iframeId].resizeFrom){
-          trigger('Window resize','resize',document.getElementById(iframeId),iframeId);
-        }
-      }
-    },66);
-  }
-
-  function factory(){
-
-    setupRequestAnimationFrame();
-    addEventListener(window,'message',iFrameListener);
-    addEventListener(window,'resize', winResize);
-
-    function init(element, options){
-      if(!element.tagName) {
-        throw new TypeError('Object is not a valid DOM element');
-      } else if ('IFRAME' !== element.tagName.toUpperCase()) {
-        throw new TypeError('Expected <IFRAME> tag, found <'+element.tagName+'>.');
-      } else {
-        setupIFrame.call(element, options);
-      }
-    }
-
-    return function iFrameResizeF(options,target){
-      switch (typeof(target)){
-        case 'undefined':
-        case 'string':
-          Array.prototype.forEach.call( document.querySelectorAll( target || 'iframe' ), function (element) {
-            init(element, options);
-          });
-          break;
-        case 'object':
-          init(target, options);
-          break;
-        default:
-          throw new TypeError('Unexpected data type ('+typeof(target)+').');
-      }
-    };
-  }
-
-  function createJQueryPublicMethod($){
-    $.fn.iFrameResize = function $iFrameResizeF(options) {
-      return this.filter('iframe').each(function (index, element) {
-        setupIFrame.call(element, options);
-      }).end();
-    };
-  }
-
-  if (window.jQuery) { createJQueryPublicMethod(jQuery); }
-
-  if (typeof define === 'function' && define.amd) {
-    define([],factory);
-  } else if (typeof module === 'object' && typeof module.exports === 'object') { //Node for browserfy
-    module.exports = factory();
-  } else {
-    window.iFrameResize = window.iFrameResize || factory();
-  }
-
-})();
\ No newline at end of file
diff --git a/examples/assets/library/jquery.min.js b/examples/assets/library/jquery.min.js
deleted file mode 100644
index 49990d6..0000000
--- a/examples/assets/library/jquery.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r= [...]
-return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(functio [...]
-void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c [...]
diff --git a/test/coverage/PhantomJS 1.9.2 (Linux)/index.html b/test/coverage/PhantomJS 1.9.2 (Linux)/index.html
deleted file mode 100644
index 826e6ff..0000000
--- a/test/coverage/PhantomJS 1.9.2 (Linux)/index.html	
+++ /dev/null
@@ -1,320 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
-    <title>Code coverage report for All files</title>
-    <meta charset="utf-8">
-
-    <link rel="stylesheet" href="prettify.css">
-
-    <style>
-        body, html {
-            margin:0; padding: 0;
-        }
-        body {
-            font-family: Helvetica Neue, Helvetica,Arial;
-            font-size: 10pt;
-        }
-        div.header, div.footer {
-            background: #eee;
-            padding: 1em;
-        }
-        div.header {
-            z-index: 100;
-            position: fixed;
-            top: 0;
-            border-bottom: 1px solid #666;
-            width: 100%;
-        }
-        div.footer {
-            border-top: 1px solid #666;
-        }
-        div.body {
-            margin-top: 10em;
-        }
-        div.meta {
-            font-size: 90%;
-            text-align: center;
-        }
-        h1, h2, h3 {
-            font-weight: normal;
-        }
-        h1 {
-            font-size: 12pt;
-        }
-        h2 {
-            font-size: 10pt;
-        }
-        pre {
-            font-family: Consolas, Menlo, Monaco, monospace;
-            margin: 0;
-            padding: 0;
-            line-height: 14px;
-            font-size: 14px;
-            -moz-tab-size: 2;
-            -o-tab-size:  2;
-            tab-size: 2;
-        }
-
-        div.path { font-size: 110%; }
-        div.path a:link, div.path a:visited { color: #000; }
-        table.coverage { border-collapse: collapse; margin:0; padding: 0 }
-
-        table.coverage td {
-            margin: 0;
-            padding: 0;
-            color: #111;
-            vertical-align: top;
-        }
-        table.coverage td.line-count {
-            width: 50px;
-            text-align: right;
-            padding-right: 5px;
-        }
-        table.coverage td.line-coverage {
-            color: #777 !important;
-            text-align: right;
-            border-left: 1px solid #666;
-            border-right: 1px solid #666;
-        }
-
-        table.coverage td.text {
-        }
-
-        table.coverage td span.cline-any {
-            display: inline-block;
-            padding: 0 5px;
-            width: 40px;
-        }
-        table.coverage td span.cline-neutral {
-            background: #eee;
-        }
-        table.coverage td span.cline-yes {
-            background: #b5d592;
-            color: #999;
-        }
-        table.coverage td span.cline-no {
-            background: #fc8c84;
-        }
-
-        .cstat-yes { color: #111; }
-        .cstat-no { background: #fc8c84; color: #111; }
-        .fstat-no { background: #ffc520; color: #111 !important; }
-        .cbranch-no { background:  yellow !important; color: #111; }
-        .missing-if-branch {
-            display: inline-block;
-            margin-right: 10px;
-            position: relative;
-            padding: 0 4px;
-            background: black;
-            color: yellow;
-            xtext-decoration: line-through;
-        }
-        .missing-if-branch .typ {
-            color: inherit !important;
-        }
-
-        .entity, .metric { font-weight: bold; }
-        .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }
-        .metric small { font-size: 80%; font-weight: normal; color: #666; }
-
-        div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }
-        div.coverage-summary td, div.coverage-summary table  th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }
-        div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }
-        div.coverage-summary th.file { border-right: none !important; }
-        div.coverage-summary th.pic { border-left: none !important; text-align: right; }
-        div.coverage-summary th.pct { border-right: none !important; }
-        div.coverage-summary th.abs { border-left: none !important; text-align: right; }
-        div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }
-        div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }
-        div.coverage-summary td.file { text-align: right; border-left: 1px solid #666; white-space: nowrap;  }
-        div.coverage-summary td.pic { min-width: 120px !important;  }
-        div.coverage-summary a:link { text-decoration: none; color: #000; }
-        div.coverage-summary a:visited { text-decoration: none; color: #333; }
-        div.coverage-summary a:hover { text-decoration: underline; }
-        div.coverage-summary tfoot td { border-top: 1px solid #666; }
-
-        div.coverage-summary .yui3-datatable-sort-indicator, div.coverage-summary .dummy-sort-indicator {
-            height: 10px;
-            width: 7px;
-            display: inline-block;
-            margin-left: 0.5em;
-        }
-        div.coverage-summary .yui3-datatable-sort-indicator {
-            background: url("http://yui.yahooapis.com/3.6.0/build/datatable-sort/assets/skins/sam/sort-arrow-sprite.png") no-repeat scroll 0 0 transparent;
-        }
-        div.coverage-summary .yui3-datatable-sorted .yui3-datatable-sort-indicator {
-            background-position: 0 -20px;
-        }
-        div.coverage-summary .yui3-datatable-sorted-desc .yui3-datatable-sort-indicator {
-            background-position: 0 -10px;
-        }
-
-        .high { background: #b5d592 !important; }
-        .medium { background: #ffe87c !important; }
-        .low { background: #fc8c84 !important; }
-
-        span.cover-fill, span.cover-empty {
-            display:inline-block;
-            border:1px solid #444;
-            background: white;
-            height: 12px;
-        }
-        span.cover-fill {
-            background: #ccc;
-            border-right: 1px solid #444;
-        }
-        span.cover-empty {
-            background: white;
-            border-left: none;
-        }
-        span.cover-full {
-            border-right: none !important;
-        }
-        pre.prettyprint {
-            border: none !important;
-            padding: 0 !important;
-            margin: 0 !important;
-        }
-        .com { color: #999 !important; }
-    </style>
-</head>
-<body>
-<div class="header high">
-    <h1>Code coverage report for <span class="entity">All files</span></h1>
-    <h2>
-        
-        Statements: <span class="metric">100% <small>(0 / 0)</small></span>     
-        
-        
-        Branches: <span class="metric">100% <small>(0 / 0)</small></span>     
-        
-        
-        Functions: <span class="metric">100% <small>(0 / 0)</small></span>     
-        
-        
-        Lines: <span class="metric">100% <small>(0 / 0)</small></span>     
-        
-    </h2>
-    <div class="path"></div>
-</div>
-<div class="body">
-<div class="coverage-summary">
-<table>
-<thead>
-<tr>
-   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
-   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
-   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
-   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
-   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
-   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
-   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
-   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
-</tr>
-</thead>
-<tbody></tbody>
-</table>
-</div>
-</div>
-<div class="footer">
-    <div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Mon Oct 14 2013 01:28:11 GMT-0400 (EDT)</div>
-</div>
-
-<script src="prettify.js"></script>
-
-<script src="http://yui.yahooapis.com/3.6.0/build/yui/yui-min.js"></script>
-<script>
-
-    YUI().use('datatable', function (Y) {
-
-        var formatters = {
-          pct: function (o) {
-              o.className += o.record.get('classes')[o.column.key];
-              try {
-                  return o.value.toFixed(2) + '%';
-              } catch (ex) { return o.value + '%'; }
-          },
-          html: function (o) {
-              o.className += o.record.get('classes')[o.column.key];
-              return o.record.get(o.column.key + '_html');
-          }
-        },
-          defaultFormatter = function (o) {
-              o.className += o.record.get('classes')[o.column.key];
-              return o.value;
-          };
-
-        function getColumns(theadNode) {
-            var colNodes = theadNode.all('tr th'),
-                cols = [],
-                col;
-            colNodes.each(function (colNode) {
-                col = {
-                    key: colNode.getAttribute('data-col'),
-                    label: colNode.get('innerHTML') || ' ',
-                    sortable: !colNode.getAttribute('data-nosort'),
-                    className: colNode.getAttribute('class'),
-                    type: colNode.getAttribute('data-type'),
-                    allowHTML: colNode.getAttribute('data-html') === 'true' || colNode.getAttribute('data-fmt') === 'html'
-                };
-                col.formatter = formatters[colNode.getAttribute('data-fmt')] || defaultFormatter;
-                cols.push(col);
-            });
-            return cols;
-        }
-
-        function getRowData(trNode, cols) {
-            var tdNodes = trNode.all('td'),
-                    i,
-                    row = { classes: {} },
-                    node,
-                    name;
-            for (i = 0; i < cols.length; i += 1) {
-                name = cols[i].key;
-                node = tdNodes.item(i);
-                row[name] = node.getAttribute('data-value') || node.get('innerHTML');
-                row[name + '_html'] = node.get('innerHTML');
-                row.classes[name] = node.getAttribute('class');
-                //Y.log('Name: ' + name + '; Value: ' + row[name]);
-                if (cols[i].type === 'number') { row[name] = row[name] * 1; }
-            }
-            //Y.log(row);
-            return row;
-        }
-
-        function getData(tbodyNode, cols) {
-            var data = [];
-            tbodyNode.all('tr').each(function (trNode) {
-                data.push(getRowData(trNode, cols));
-            });
-            return data;
-        }
-
-        function replaceTable(node) {
-            if (!node) { return; }
-            var cols = getColumns(node.one('thead')),
-                data = getData(node.one('tbody'), cols),
-                table,
-                parent = node.get('parentNode');
-
-            table = new Y.DataTable({
-                columns: cols,
-                data: data,
-                sortBy: 'file'
-            });
-            parent.set('innerHTML', '');
-            table.render(parent);
-        }
-
-        Y.on('domready', function () {
-            replaceTable(Y.one('div.coverage-summary table'));
-            if (typeof prettyPrint === 'function') {
-                prettyPrint();
-            }
-        });
-    });
-</script>
-</body>
-</html>
diff --git a/test/coverage/PhantomJS 1.9.2 (Linux)/prettify.css b/test/coverage/PhantomJS 1.9.2 (Linux)/prettify.css
deleted file mode 100644
index b317a7c..0000000
--- a/test/coverage/PhantomJS 1.9.2 (Linux)/prettify.css	
+++ /dev/null
@@ -1 +0,0 @@
-.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding [...]
diff --git a/test/coverage/PhantomJS 1.9.2 (Linux)/prettify.js b/test/coverage/PhantomJS 1.9.2 (Linux)/prettify.js
deleted file mode 100644
index ef51e03..0000000
--- a/test/coverage/PhantomJS 1.9.2 (Linux)/prettify.js	
+++ /dev/null
@@ -1 +0,0 @@
-window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,expl [...]
diff --git a/test/coverage/coverage-PhantomJS 1.9.2 (Linux)-20131014_012621.json b/test/coverage/coverage-PhantomJS 1.9.2 (Linux)-20131014_012621.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/test/coverage/coverage-PhantomJS 1.9.2 (Linux)-20131014_012621.json	
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/test/coverage/coverage-PhantomJS 1.9.2 (Linux)-20131014_012811.json b/test/coverage/coverage-PhantomJS 1.9.2 (Linux)-20131014_012811.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/test/coverage/coverage-PhantomJS 1.9.2 (Linux)-20131014_012811.json	
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/test/fixtures/accordion.html b/test/fixtures/accordion.html
deleted file mode 100644
index 9eb409f..0000000
--- a/test/fixtures/accordion.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<div class="ui accordion">
-  <div class="active title">
-    <i class="dropdown icon"></i>
-    What is a dog?
-  </div>
-  <div class="active content">
-    <p>A dog is a type of domesticated animal. Known for its loyalty and faithfulness, it can be found as a welcome guest in many households across the world.</p>
-  </div>
-  <div class="title">
-    <i class="dropdown icon"></i>
-    What kinds of dogs are there?
-  </div>
-  <div class="content">
-    <p>There are many breeds of dogs. Each breed varies in size and temperament. Owners often select a breed of dog that they find to be compatible with their own lifestyle and desires from a companion.</p>
-  </div>
-  <div class="title">
-    <i class="dropdown icon"></i>
-    How do you acquire a dog?
-  </div>
-  <div class="content">
-    <p>Three common ways for a prospective owner to acquire a dog is from pet shops, private owners, or shelters.</p>
-    <p>A pet shop may be the most convenient way to buy a dog. Buying a dog from a private owner allows you to assess the pedigree and upbringing of your dog before choosing to take it home. Lastly, finding your dog from a shelter, helps give a good home to a dog who may not find one so readily.</p>
-  </div>
-</div>
\ No newline at end of file
diff --git a/test/fixtures/checkbox.html b/test/fixtures/checkbox.html
deleted file mode 100644
index 49a7eca..0000000
--- a/test/fixtures/checkbox.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<div class="ui form">
-  <div class="grouped inline fields">
-    <div class="field">
-      <div class="ui radio checkbox">
-        <input type="radio" name="fruit" checked="checked" />
-        <label>Apples</label>
-      </div>
-    </div>
-    <div class="field">
-      <div class="ui radio checkbox">
-        <input type="radio" name="fruit" />
-        <label>Oranges</label>
-      </div>
-    </div>
-    <div class="field">
-      <div class="ui radio checkbox">
-        <input type="radio" name="fruit" />
-        <label>Pears</label>
-      </div>
-    </div>
-    <div class="field">
-      <div class="ui radio checkbox">
-        <input type="radio" name="fruit" />
-        <label>Grapefruit</label>
-      </div>
-    </div>
-  </div>
-  <div class="field">
-    <div class="ui checkbox">
-      <input type="checkbox">
-      <label>Poodle</label>
-    </div>
-  </div>
-  <div class="field">
-    <div class="ui toggle checkbox">
-      <input type="checkbox" name="pet" />
-      <label>Allow other people to pet my dog</label>
-    </div>
-  </div>
-  <div class="field">
-    <div class="ui slider checkbox">
-      <input type="checkbox" name="pet" />
-      <label>Allow other people to pet my dog</label>
-    </div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/test/fixtures/dropdown.html b/test/fixtures/dropdown.html
deleted file mode 100644
index 3db338c..0000000
--- a/test/fixtures/dropdown.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<div class="ui selection dropdown">
-  <input type="hidden" name="gender">
-  <i class="dropdown icon"></i>
-  <div class="default text">Gender</div>
-  <div class="menu">
-    <div class="item" data-value="male">Male</div>
-    <div class="item" data-value="female">Female</div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/test/fixtures/modal.html b/test/fixtures/modal.html
deleted file mode 100644
index dcbf57a..0000000
--- a/test/fixtures/modal.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<div class="ui test modal">
-  <i class="close icon"></i>
-  <div class="header">
-    Profile Picture
-  </div>
-  <div class="content">
-    <div class="left">
-      <img class="ui fluid image">
-    </div>
-    <div class="right">
-      <div class="ui header">Are you sure you want to upload that?</div>
-      <p>I mean it's not really the best profile photo.</p>
-      <p>It's resampled to like two times the size it's suppose to be. Our image detection software also says it might even be inappropriate.</p>
-    </div>
-  </div>
-  <div class="actions">
-    <div class="ui black button">
-      Cancel
-    </div>
-    <div class="ui green right labeled icon button">
-      Add Photo
-      <i class="checkmark icon"></i>
-    </div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/test/fixtures/popup.html b/test/fixtures/popup.html
deleted file mode 100644
index a94a4bb..0000000
--- a/test/fixtures/popup.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<i class="circular heart icon link" data-content="Top Left" data-position="top left"></i>
-<i class="circular heart icon link" data-content="Top Center" data-position="top center"></i>
-<i class="circular heart icon link" data-content="Top Right" data-position="top right"></i>
-<i class="circular heart icon link" data-content="Left Center" data-position="left center"></i>
-<i class="circular heart icon link" data-content="Right Center" data-position="right center"></i>
-<i class="circular heart icon link" data-content="Bottom Left" data-position="bottom left"></i>
-<i class="circular heart icon link" data-content="Bottom Center" data-position="bottom center"></i>
-<i class="circular heart icon link" data-content="Bottom Right" data-position="bottom right"></i>
\ No newline at end of file
diff --git a/test/fixtures/rating.html b/test/fixtures/rating.html
deleted file mode 100644
index 09a85fd..0000000
--- a/test/fixtures/rating.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="ui star rating">
-  <i class="icon"></i>
-  <i class="icon"></i>
-  <i class="icon"></i>
-  <i class="icon"></i>
-  <i class="icon"></i>
-</div>
\ No newline at end of file
diff --git a/test/fixtures/shape.html b/test/fixtures/shape.html
deleted file mode 100644
index a392038..0000000
--- a/test/fixtures/shape.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="ui shape">
-  <div class="sides">
-    <div class="active side">This side is visible.</div>
-    <div class="side">This side is not visible.</div>
-    <div class="side">This side is not visible.</div>
-  </div>
-</div>
\ No newline at end of file
diff --git a/test/fixtures/sidebar.html b/test/fixtures/sidebar.html
deleted file mode 100644
index eb941b6..0000000
--- a/test/fixtures/sidebar.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<div class="ui red vertical demo sidebar menu">
-  <a class="item">
-    <i class="home icon"></i>
-    Home
-  </a>
-  <a class="active item">
-    <i class="heart icon"></i>
-    Current Section
-  </a>
-  <a class="item">
-    <i class="facebook icon"></i>
-    Like us on Facebook
-  </a>
-  <div class="item">
-    <b>More</b>
-    <div class="menu">
-      <a class="item">About</a>
-      <a class="item">Contact Us</a>
-    </div>
-  </div>
-</div>
-<div class="ui disabled teal toggle button">
-  <i class="left arrow icon"></i>
-  Trigger Sidebar
-</div>
\ No newline at end of file
diff --git a/test/fixtures/tab.html b/test/fixtures/tab.html
deleted file mode 100644
index 8e9399f..0000000
--- a/test/fixtures/tab.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<div class="ui menu">
-  <a class="active item" data-tab="first">First</a>
-  <a class="item" data-tab="second">Second</a>
-  <a class="item" data-tab="third">Third</a>
-</div>
-<div class="ui active tab segment" data-tab="first">First</div>
-<div class="ui tab segment" data-tab="second">Second</div>
-<div class="ui tab segment" data-tab="third">Third</div>
\ No newline at end of file
diff --git a/test/fixtures/transition.html b/test/fixtures/transition.html
deleted file mode 100644
index a8f0ea8..0000000
--- a/test/fixtures/transition.html
+++ /dev/null
@@ -1 +0,0 @@
-<div class="ui image"></div>
\ No newline at end of file
diff --git a/test/fixtures/video.html b/test/fixtures/video.html
deleted file mode 100644
index 73bb646..0000000
--- a/test/fixtures/video.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<div class="ui video">
-  <div class="play"></div>
-  <div class="placeholder"></div>
-  <div class="embed"></div>
-</div>
\ No newline at end of file
diff --git a/test/helpers/jasmine-clog.js b/test/helpers/jasmine-clog.js
deleted file mode 100644
index 5f2ac1b..0000000
--- a/test/helpers/jasmine-clog.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// Allow for console.log to not break IE
-if (typeof window.console == "undefined" || typeof window.console.log == "undefined") {
-  window.console = {
-    log  : function() {},
-    info : function(){},
-    warn : function(){}
-  };
-}
-if(typeof window.console.group == 'undefined' || typeof window.console.groupEnd == 'undefined' || typeof window.console.groupCollapsed == 'undefined') {
-  window.console.group = function(){};
-  window.console.groupEnd = function(){};
-  window.console.groupCollapsed = function(){};
-}
-if(typeof window.console.markTimeline == 'undefined') {
-  window.console.markTimeline = function(){};
-}
-window.console.clear = function(){};
diff --git a/test/helpers/jasmine-jquery.js b/test/helpers/jasmine-jquery.js
deleted file mode 100644
index 14539ea..0000000
--- a/test/helpers/jasmine-jquery.js
+++ /dev/null
@@ -1,705 +0,0 @@
-/*!
-Jasmine-jQuery: a set of jQuery helpers for Jasmine tests.
-
-Version 1.5.91
-
-https://github.com/velesin/jasmine-jquery
-
-Copyright (c) 2010-2013 Wojciech Zawistowski, Travis Jeffery
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-+function (jasmine, $) { "use strict";
-
-  jasmine.spiedEventsKey = function (selector, eventName) {
-    return [$(selector).selector, eventName].toString()
-  }
-
-  jasmine.getFixtures = function () {
-    return jasmine.currentFixtures_ = jasmine.currentFixtures_ || new jasmine.Fixtures()
-  }
-
-  jasmine.getStyleFixtures = function () {
-    return jasmine.currentStyleFixtures_ = jasmine.currentStyleFixtures_ || new jasmine.StyleFixtures()
-  }
-
-  jasmine.Fixtures = function () {
-    this.containerId = 'jasmine-fixtures'
-    this.fixturesCache_ = {}
-    this.fixturesPath = 'spec/javascripts/fixtures'
-  }
-
-  jasmine.Fixtures.prototype.set = function (html) {
-    this.cleanUp()
-    return this.createContainer_(html)
-  }
-
-  jasmine.Fixtures.prototype.appendSet= function (html) {
-    this.addToContainer_(html)
-  }
-
-  jasmine.Fixtures.prototype.preload = function () {
-    this.read.apply(this, arguments)
-  }
-
-  jasmine.Fixtures.prototype.load = function () {
-    this.cleanUp()
-    this.createContainer_(this.read.apply(this, arguments))
-  }
-
-  jasmine.Fixtures.prototype.appendLoad = function () {
-    this.addToContainer_(this.read.apply(this, arguments))
-  }
-
-  jasmine.Fixtures.prototype.read = function () {
-    var htmlChunks = []
-      , fixtureUrls = arguments
-
-    for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
-      htmlChunks.push(this.getFixtureHtml_(fixtureUrls[urlIndex]))
-    }
-
-    return htmlChunks.join('')
-  }
-
-  jasmine.Fixtures.prototype.clearCache = function () {
-    this.fixturesCache_ = {}
-  }
-
-  jasmine.Fixtures.prototype.cleanUp = function () {
-    $('#' + this.containerId).remove()
-  }
-
-  jasmine.Fixtures.prototype.sandbox = function (attributes) {
-    var attributesToSet = attributes || {}
-    return $('<div id="sandbox" />').attr(attributesToSet)
-  }
-
-  jasmine.Fixtures.prototype.createContainer_ = function (html) {
-    var container = $('<div>')
-    .attr('id', this.containerId)
-    .html(html)
-
-    $(document.body).append(container)
-    return container
-  }
-
-  jasmine.Fixtures.prototype.addToContainer_ = function (html){
-    var container = $(document.body).find('#'+this.containerId).append(html)
-    if(!container.length){
-      this.createContainer_(html)
-    }
-  }
-
-  jasmine.Fixtures.prototype.getFixtureHtml_ = function (url) {
-    if (typeof this.fixturesCache_[url] === 'undefined') {
-      this.loadFixtureIntoCache_(url)
-    }
-    return this.fixturesCache_[url]
-  }
-
-  jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function (relativeUrl) {
-    var self = this
-      , url = this.makeFixtureUrl_(relativeUrl)
-      , request = $.ajax({
-        async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
-        cache: false,
-        url: url,
-        success: function (data, status, $xhr) {
-          self.fixturesCache_[relativeUrl] = $xhr.responseText
-        },
-        error: function (jqXHR, status, errorThrown) {
-          throw new Error('Fixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + errorThrown.message + ')')
-        }
-      })
-  }
-
-  jasmine.Fixtures.prototype.makeFixtureUrl_ = function (relativeUrl){
-    return this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
-  }
-
-  jasmine.Fixtures.prototype.proxyCallTo_ = function (methodName, passedArguments) {
-    return this[methodName].apply(this, passedArguments)
-  }
-
-
-  jasmine.StyleFixtures = function () {
-    this.fixturesCache_ = {}
-    this.fixturesNodes_ = []
-    this.fixturesPath = 'spec/javascripts/fixtures'
-  }
-
-  jasmine.StyleFixtures.prototype.set = function (css) {
-    this.cleanUp()
-    this.createStyle_(css)
-  }
-
-  jasmine.StyleFixtures.prototype.appendSet = function (css) {
-    this.createStyle_(css)
-  }
-
-  jasmine.StyleFixtures.prototype.preload = function () {
-    this.read_.apply(this, arguments)
-  }
-
-  jasmine.StyleFixtures.prototype.load = function () {
-    this.cleanUp()
-    this.createStyle_(this.read_.apply(this, arguments))
-  }
-
-  jasmine.StyleFixtures.prototype.appendLoad = function () {
-    this.createStyle_(this.read_.apply(this, arguments))
-  }
-
-  jasmine.StyleFixtures.prototype.cleanUp = function () {
-    while(this.fixturesNodes_.length) {
-      this.fixturesNodes_.pop().remove()
-    }
-  }
-
-  jasmine.StyleFixtures.prototype.createStyle_ = function (html) {
-    var styleText = $('<div></div>').html(html).text()
-      , style = $('<style>' + styleText + '</style>')
-
-    this.fixturesNodes_.push(style)
-    $('head').append(style)
-  }
-
-  jasmine.StyleFixtures.prototype.clearCache = jasmine.Fixtures.prototype.clearCache
-  jasmine.StyleFixtures.prototype.read_ = jasmine.Fixtures.prototype.read
-  jasmine.StyleFixtures.prototype.getFixtureHtml_ = jasmine.Fixtures.prototype.getFixtureHtml_
-  jasmine.StyleFixtures.prototype.loadFixtureIntoCache_ = jasmine.Fixtures.prototype.loadFixtureIntoCache_
-  jasmine.StyleFixtures.prototype.makeFixtureUrl_ = jasmine.Fixtures.prototype.makeFixtureUrl_
-  jasmine.StyleFixtures.prototype.proxyCallTo_ = jasmine.Fixtures.prototype.proxyCallTo_
-
-  jasmine.getJSONFixtures = function () {
-    return jasmine.currentJSONFixtures_ = jasmine.currentJSONFixtures_ || new jasmine.JSONFixtures()
-  }
-
-  jasmine.JSONFixtures = function () {
-    this.fixturesCache_ = {}
-    this.fixturesPath = 'spec/javascripts/fixtures/json'
-  }
-
-  jasmine.JSONFixtures.prototype.load = function () {
-    this.read.apply(this, arguments)
-    return this.fixturesCache_
-  }
-
-  jasmine.JSONFixtures.prototype.read = function () {
-    var fixtureUrls = arguments
-
-    for(var urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++) {
-      this.getFixtureData_(fixtureUrls[urlIndex])
-    }
-
-    return this.fixturesCache_
-  }
-
-  jasmine.JSONFixtures.prototype.clearCache = function () {
-    this.fixturesCache_ = {}
-  }
-
-  jasmine.JSONFixtures.prototype.getFixtureData_ = function (url) {
-    if (!this.fixturesCache_[url]) this.loadFixtureIntoCache_(url)
-    return this.fixturesCache_[url]
-  }
-
-  jasmine.JSONFixtures.prototype.loadFixtureIntoCache_ = function (relativeUrl) {
-    var self = this
-      , url = this.fixturesPath.match('/$') ? this.fixturesPath + relativeUrl : this.fixturesPath + '/' + relativeUrl
-
-    $.ajax({
-      async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
-      cache: false,
-      dataType: 'json',
-      url: url,
-      success: function (data) {
-        self.fixturesCache_[relativeUrl] = data
-      },
-      error: function (jqXHR, status, errorThrown) {
-        throw new Error('JSONFixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + errorThrown.message + ')')
-      }
-    })
-  }
-
-  jasmine.JSONFixtures.prototype.proxyCallTo_ = function (methodName, passedArguments) {
-    return this[methodName].apply(this, passedArguments)
-  }
-
-  jasmine.JQuery = function () {}
-
-  jasmine.JQuery.browserTagCaseIndependentHtml = function (html) {
-    return $('<div/>').append(html).html()
-  }
-
-  jasmine.JQuery.elementToString = function (element) {
-    var domEl = $(element).get(0)
-
-    if (domEl === undefined || domEl.cloneNode)
-      return $('<div />').append($(element).clone()).html()
-    else
-      return element.toString()
-  }
-
-  jasmine.JQuery.matchersClass = {}
-
-  !function (namespace) {
-    var data = {
-        spiedEvents: {}
-      , handlers:    []
-    }
-
-    namespace.events = {
-      spyOn: function (selector, eventName) {
-        var handler = function (e) {
-          data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)] = jasmine.util.argsToArray(arguments)
-        }
-
-        $(selector).on(eventName, handler)
-        data.handlers.push(handler)
-
-        return {
-          selector: selector,
-          eventName: eventName,
-          handler: handler,
-          reset: function (){
-            delete data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
-          }
-        }
-      },
-
-      args: function (selector, eventName) {
-        var actualArgs = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
-
-        if (!actualArgs) {
-          throw "There is no spy for " + eventName + " on " + selector.toString() + ". Make sure to create a spy using spyOnEvent."
-        }
-
-        return actualArgs
-      },
-
-      wasTriggered: function (selector, eventName) {
-        return !!(data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)])
-      },
-
-      wasTriggeredWith: function (selector, eventName, expectedArgs, env) {
-        var actualArgs = jasmine.JQuery.events.args(selector, eventName).slice(1)
-        if (Object.prototype.toString.call(expectedArgs) !== '[object Array]') {
-          actualArgs = actualArgs[0]
-        }
-        return env.equals_(expectedArgs, actualArgs)
-      },
-
-      wasPrevented: function (selector, eventName) {
-        var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
-          , e = args ? args[0] : undefined
-
-        return e && e.isDefaultPrevented()
-      },
-
-      wasStopped: function (selector, eventName) {
-        var args = data.spiedEvents[jasmine.spiedEventsKey(selector, eventName)]
-          , e = args ? args[0] : undefined
-        return e && e.isPropagationStopped()
-      },
-
-      cleanUp: function () {
-        data.spiedEvents = {}
-        data.handlers    = []
-      }
-    }
-  }(jasmine.JQuery)
-
-  !function (){
-    var jQueryMatchers = {
-      toHaveClass: function (className) {
-        return this.actual.hasClass(className)
-      },
-
-      toHaveCss: function (css){
-        for (var prop in css){
-          var value = css[prop]
-          // see issue #147 on gh
-          ;if (value === 'auto' && this.actual.get(0).style[prop] === 'auto') continue
-          if (this.actual.css(prop) !== value) return false
-        }
-        return true
-      },
-
-      toBeVisible: function () {
-        return this.actual.is(':visible')
-      },
-
-      toBeHidden: function () {
-        return this.actual.is(':hidden')
-      },
-
-      toBeSelected: function () {
-        return this.actual.is(':selected')
-      },
-
-      toBeChecked: function () {
-        return this.actual.is(':checked')
-      },
-
-      toBeEmpty: function () {
-        return this.actual.is(':empty')
-      },
-
-      toExist: function () {
-        return this.actual.length
-      },
-
-      toHaveLength: function (length) {
-        return this.actual.length === length
-      },
-
-      toHaveAttr: function (attributeName, expectedAttributeValue) {
-        return hasProperty(this.actual.attr(attributeName), expectedAttributeValue)
-      },
-
-      toHaveProp: function (propertyName, expectedPropertyValue) {
-        return hasProperty(this.actual.prop(propertyName), expectedPropertyValue)
-      },
-
-      toHaveId: function (id) {
-        return this.actual.attr('id') == id
-      },
-
-      toHaveHtml: function (html) {
-        return this.actual.html() == jasmine.JQuery.browserTagCaseIndependentHtml(html)
-      },
-
-      toContainHtml: function (html){
-        var actualHtml = this.actual.html()
-          , expectedHtml = jasmine.JQuery.browserTagCaseIndependentHtml(html)
-
-        return (actualHtml.indexOf(expectedHtml) >= 0)
-      },
-
-      toHaveText: function (text) {
-        var trimmedText = $.trim(this.actual.text())
-
-        if (text && $.isFunction(text.test)) {
-          return text.test(trimmedText)
-        } else {
-          return trimmedText == text
-        }
-      },
-
-      toContainText: function (text) {
-        var trimmedText = $.trim(this.actual.text())
-
-        if (text && $.isFunction(text.test)) {
-          return text.test(trimmedText)
-        } else {
-          return trimmedText.indexOf(text) != -1
-        }
-      },
-
-      toHaveValue: function (value) {
-        return this.actual.val() === value
-      },
-
-      toHaveData: function (key, expectedValue) {
-        return hasProperty(this.actual.data(key), expectedValue)
-      },
-
-      toBe: function (selector) {
-        return this.actual.is(selector)
-      },
-
-      toContain: function (selector) {
-        return this.actual.find(selector).length
-      },
-
-      toBeMatchedBy: function (selector) {
-        return this.actual.filter(selector).length
-      },
-
-      toBeDisabled: function (selector){
-        return this.actual.is(':disabled')
-      },
-
-      toBeFocused: function (selector) {
-        return this.actual[0] === this.actual[0].ownerDocument.activeElement
-      },
-
-      toHandle: function (event) {
-        var events = $._data(this.actual.get(0), "events")
-
-        if(!events || !event || typeof event !== "string") {
-          return false
-        }
-
-        var namespaces = event.split(".")
-          , eventType = namespaces.shift()
-          , sortedNamespaces = namespaces.slice(0).sort()
-          , namespaceRegExp = new RegExp("(^|\\.)" + sortedNamespaces.join("\\.(?:.*\\.)?") + "(\\.|$)")
-
-        if(events[eventType] && namespaces.length) {
-          for(var i = 0; i < events[eventType].length; i++) {
-            var namespace = events[eventType][i].namespace
-
-            if(namespaceRegExp.test(namespace)) {
-              return true
-            }
-          }
-        } else {
-          return events[eventType] && events[eventType].length > 0
-        }
-      },
-
-      toHandleWith: function (eventName, eventHandler) {
-        var normalizedEventName = eventName.split('.')[0]
-          , stack = $._data(this.actual.get(0), "events")[normalizedEventName]
-
-        for (var i = 0; i < stack.length; i++) {
-          if (stack[i].handler == eventHandler) return true
-        }
-
-        return false
-      }
-    }
-
-    var hasProperty = function (actualValue, expectedValue) {
-      if (expectedValue === undefined) return actualValue !== undefined
-
-      return actualValue == expectedValue
-    }
-
-    var bindMatcher = function (methodName) {
-      var builtInMatcher = jasmine.Matchers.prototype[methodName]
-
-      jasmine.JQuery.matchersClass[methodName] = function () {
-        if (this.actual
-          && (this.actual instanceof $
-            || jasmine.isDomNode(this.actual))) {
-              this.actual = $(this.actual)
-              var result = jQueryMatchers[methodName].apply(this, arguments)
-                , element
-
-              if (this.actual.get && (element = this.actual.get()[0]) && !$.isWindow(element) && element.tagName !== "HTML")
-                this.actual = jasmine.JQuery.elementToString(this.actual)
-
-              return result
-            }
-
-            if (builtInMatcher) {
-              return builtInMatcher.apply(this, arguments)
-            }
-
-            return false
-      }
-    }
-
-    for(var methodName in jQueryMatchers) {
-      bindMatcher(methodName)
-    }
-  }()
-
-  beforeEach(function () {
-    this.addMatchers(jasmine.JQuery.matchersClass)
-    this.addMatchers({
-      toHaveBeenTriggeredOn: function (selector) {
-        this.message = function () {
-          return [
-            "Expected event " + this.actual + " to have been triggered on " + selector,
-            "Expected event " + this.actual + " not to have been triggered on " + selector
-          ]
-        }
-        return jasmine.JQuery.events.wasTriggered(selector, this.actual)
-      }
-    })
-    this.addMatchers({
-      toHaveBeenTriggered: function (){
-        var eventName = this.actual.eventName
-          , selector = this.actual.selector
-
-        this.message = function () {
-          return [
-            "Expected event " + eventName + " to have been triggered on " + selector,
-            "Expected event " + eventName + " not to have been triggered on " + selector
-          ]
-        }
-
-        return jasmine.JQuery.events.wasTriggered(selector, eventName)
-      }
-    })
-    this.addMatchers({
-      toHaveBeenTriggeredOnAndWith: function () {
-        var selector = arguments[0]
-          , expectedArgs = arguments[1]
-          , wasTriggered = jasmine.JQuery.events.wasTriggered(selector, this.actual)
-
-        this.message = function () {
-          if (wasTriggered) {
-            var actualArgs = jasmine.JQuery.events.args(selector, this.actual, expectedArgs)[1]
-            return [
-              "Expected event " + this.actual + " to have been triggered with " + jasmine.pp(expectedArgs) + "  but it was triggered with " + jasmine.pp(actualArgs),
-              "Expected event " + this.actual + " not to have been triggered with " + jasmine.pp(expectedArgs) + " but it was triggered with " + jasmine.pp(actualArgs)
-            ]
-          } else {
-            return [
-              "Expected event " + this.actual + " to have been triggered on " + selector,
-              "Expected event " + this.actual + " not to have been triggered on " + selector
-            ]
-          }
-        }
-
-        return wasTriggered && jasmine.JQuery.events.wasTriggeredWith(selector, this.actual, expectedArgs, this.env)
-      }
-    })
-    this.addMatchers({
-      toHaveBeenPreventedOn: function (selector) {
-        this.message = function () {
-          return [
-            "Expected event " + this.actual + " to have been prevented on " + selector,
-            "Expected event " + this.actual + " not to have been prevented on " + selector
-          ]
-        }
-
-        return jasmine.JQuery.events.wasPrevented(selector, this.actual)
-      }
-    })
-    this.addMatchers({
-      toHaveBeenPrevented: function () {
-        var eventName = this.actual.eventName
-          , selector = this.actual.selector
-        this.message = function () {
-          return [
-            "Expected event " + eventName + " to have been prevented on " + selector,
-            "Expected event " + eventName + " not to have been prevented on " + selector
-          ]
-        }
-
-        return jasmine.JQuery.events.wasPrevented(selector, eventName)
-      }
-    })
-    this.addMatchers({
-      toHaveBeenStoppedOn: function (selector) {
-        this.message = function () {
-          return [
-            "Expected event " + this.actual + " to have been stopped on " + selector,
-            "Expected event " + this.actual + " not to have been stopped on " + selector
-          ]
-        }
-
-        return jasmine.JQuery.events.wasStopped(selector, this.actual)
-      }
-    })
-    this.addMatchers({
-      toHaveBeenStopped: function () {
-        var eventName = this.actual.eventName
-          , selector = this.actual.selector
-        this.message = function () {
-          return [
-            "Expected event " + eventName + " to have been stopped on " + selector,
-            "Expected event " + eventName + " not to have been stopped on " + selector
-          ]
-        }
-        return jasmine.JQuery.events.wasStopped(selector, eventName)
-      }
-    })
-    jasmine.getEnv().addEqualityTester(function (a, b) {
-      if(a instanceof jQuery && b instanceof jQuery) {
-        if(a.size() != b.size()) {
-          return jasmine.undefined
-        }
-        else if(a.is(b)) {
-          return true
-        }
-      }
-
-      return jasmine.undefined
-    })
-  })
-
-  afterEach(function () {
-    jasmine.getFixtures().cleanUp()
-    jasmine.getStyleFixtures().cleanUp()
-    jasmine.JQuery.events.cleanUp()
-  })
-}(window.jasmine, window.jQuery)
-
-+function (jasmine, global) { "use strict";
-
-  global.readFixtures = function () {
-    return jasmine.getFixtures().proxyCallTo_('read', arguments)
-  }
-
-  global.preloadFixtures = function () {
-    jasmine.getFixtures().proxyCallTo_('preload', arguments)
-  }
-
-  global.loadFixtures = function () {
-    jasmine.getFixtures().proxyCallTo_('load', arguments)
-  }
-
-  global.appendLoadFixtures = function () {
-    jasmine.getFixtures().proxyCallTo_('appendLoad', arguments)
-  }
-
-  global.setFixtures = function (html) {
-    return jasmine.getFixtures().proxyCallTo_('set', arguments)
-  }
-
-  global.appendSetFixtures = function () {
-    jasmine.getFixtures().proxyCallTo_('appendSet', arguments)
-  }
-
-  global.sandbox = function (attributes) {
-    return jasmine.getFixtures().sandbox(attributes)
-  }
-
-  global.spyOnEvent = function (selector, eventName) {
-    return jasmine.JQuery.events.spyOn(selector, eventName)
-  }
-
-  global.preloadStyleFixtures = function () {
-    jasmine.getStyleFixtures().proxyCallTo_('preload', arguments)
-  }
-
-  global.loadStyleFixtures = function () {
-    jasmine.getStyleFixtures().proxyCallTo_('load', arguments)
-  }
-
-  global.appendLoadStyleFixtures = function () {
-    jasmine.getStyleFixtures().proxyCallTo_('appendLoad', arguments)
-  }
-
-  global.setStyleFixtures = function (html) {
-    jasmine.getStyleFixtures().proxyCallTo_('set', arguments)
-  }
-
-  global.appendSetStyleFixtures = function (html) {
-    jasmine.getStyleFixtures().proxyCallTo_('appendSet', arguments)
-  }
-
-  global.loadJSONFixtures = function () {
-    return jasmine.getJSONFixtures().proxyCallTo_('load', arguments)
-  }
-
-  global.getJSONFixture = function (url) {
-    return jasmine.getJSONFixtures().proxyCallTo_('read', arguments)[url]
-  }
-}(jasmine, window);
\ No newline at end of file
diff --git a/test/helpers/jasmine-sinon.js b/test/helpers/jasmine-sinon.js
deleted file mode 100644
index c935653..0000000
--- a/test/helpers/jasmine-sinon.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/* global jasmine */
-
-'use strict';
-
-(function(jasmine, beforeEach) {
-
-  var sinon = (typeof require === 'function' && typeof module === 'object') ? require('sinon') : window.sinon,
-    spyMatchers = 'called calledOnce calledTwice calledThrice calledBefore calledAfter calledOn alwaysCalledOn calledWith alwaysCalledWith calledWithExactly alwaysCalledWithExactly calledWithMatch alwaysCalledWithMatch'.split(' '),
-    i = spyMatchers.length,
-    spyMatcherHash = {},
-    unusualMatchers = {
-      "returned": "toHaveReturned",
-      "alwaysReturned": "toHaveAlwaysReturned",
-      "threw": "toHaveThrown",
-      "alwaysThrew": "toHaveAlwaysThrown"
-    },
-
-    createCustomMatcher = function(arg) {
-      return sinon.match(function (val) {
-        return jasmine.getEnv().equals_(val, arg);
-      });
-    },
-
-    getMatcherFunction = function(sinonName, matcherName) {
-      var original = jasmine.Matchers.prototype[matcherName];
-      return function () {
-        if (jasmine.isSpy(this.actual) && original) {
-          return original.apply(this, arguments);
-        }
-        var sinonProperty = this.actual[sinonName];
-        var args = Array.prototype.slice.call(arguments);
-
-        for (var i = 0; i < args.length; i++) {
-          if (args[i] && (typeof args[i].jasmineMatches === 'function' || args[i] instanceof jasmine.Matchers.ObjectContaining)) {
-            args[i] = createCustomMatcher(args[i]);
-          }
-        }
-
-        return (typeof sinonProperty === 'function') ? sinonProperty.apply(this.actual, args) : sinonProperty;
-      };
-    };
-
-  while(i--) {
-    var sinonName = spyMatchers[i],
-      matcherName = "toHaveBeen" + sinonName.charAt(0).toUpperCase() + sinonName.slice(1);
-
-    spyMatcherHash[matcherName] = getMatcherFunction(sinonName, matcherName);
-  }
-
-  for (var j in unusualMatchers) {
-    spyMatcherHash[unusualMatchers[j]] = getMatcherFunction(j, unusualMatchers[j]);
-  }
-
-  beforeEach(function() {
-    this.addMatchers(spyMatcherHash);
-  });
-
-})(jasmine, beforeEach);
\ No newline at end of file
diff --git a/test/helpers/jquery-events.js b/test/helpers/jquery-events.js
deleted file mode 100644
index d956e56..0000000
--- a/test/helpers/jquery-events.js
+++ /dev/null
@@ -1,28 +0,0 @@
-(function($) {
-    $.events = function(selector, root) {
-        var s = [];
-        $(selector || '*', root).addBack().each(function() {
-            // the following line is the only change
-            var e = $._data(this, 'events');
-            if(!e) return;
-            s.push(this.tagName);
-            if(this.id) s.push('#', this.id);
-            if(this.className) s.push('.', this.className.replace(/ +/g, '.'));
-            for(var p in e) {
-                var r = e[p],
-                    h = r.length - r.delegateCount;
-                if(h)
-                    s.push('\n', h, ' ', p, ' handler', h > 1 ? 's' : '');
-                if(r.delegateCount) {
-                    for(var q = 0; q < r.length; q++)
-                        if(r[q].selector) s.push('\n', p, ' for ', r[q].selector);
-                }
-            }
-            s.push('\n\n');
-        });
-        return s.join('');
-    }
-    $.fn.events = function(selector) {
-        return $.events(selector, this);
-    }
-})(jQuery);
\ No newline at end of file
diff --git a/test/helpers/sinon.js b/test/helpers/sinon.js
deleted file mode 100644
index 4112185..0000000
--- a/test/helpers/sinon.js
+++ /dev/null
@@ -1,4819 +0,0 @@
-/**
- * Sinon.JS 1.9.1, 2014/04/03
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
- *
- * (The BSD License)
- *
- * Copyright (c) 2010-2014, Christian Johansen, christian at cjohansen.no
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- *     * Redistributions of source code must retain the above copyright notice,
- *       this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright notice,
- *       this list of conditions and the following disclaimer in the documentation
- *       and/or other materials provided with the distribution.
- *     * Neither the name of Christian Johansen nor the names of his contributors
- *       may be used to endorse or promote products derived from this software
- *       without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-this.sinon = (function () {
-var samsam, formatio;
-function define(mod, deps, fn) { if (mod == "samsam") { samsam = deps(); } else { formatio = fn(samsam); } }
-define.amd = true;
-((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) ||
- (typeof module === "object" &&
-      function (m) { module.exports = m(); }) || // Node
- function (m) { this.samsam = m(); } // Browser globals
-)(function () {
-    var o = Object.prototype;
-    var div = typeof document !== "undefined" && document.createElement("div");
-
-    function isNaN(value) {
-        // Unlike global isNaN, this avoids type coercion
-        // typeof check avoids IE host object issues, hat tip to
-        // lodash
-        var val = value; // JsLint thinks value !== value is "weird"
-        return typeof value === "number" && value !== val;
-    }
-
-    function getClass(value) {
-        // Returns the internal [[Class]] by calling Object.prototype.toString
-        // with the provided value as this. Return value is a string, naming the
-        // internal class, e.g. "Array"
-        return o.toString.call(value).split(/[ \]]/)[1];
-    }
-
-    /**
-     * @name samsam.isArguments
-     * @param Object object
-     *
-     * Returns ``true`` if ``object`` is an ``arguments`` object,
-     * ``false`` otherwise.
-     */
-    function isArguments(object) {
-        if (typeof object !== "object" || typeof object.length !== "number" ||
-                getClass(object) === "Array") {
-            return false;
-        }
-        if (typeof object.callee == "function") { return true; }
-        try {
-            object[object.length] = 6;
-            delete object[object.length];
-        } catch (e) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * @name samsam.isElement
-     * @param Object object
-     *
-     * Returns ``true`` if ``object`` is a DOM element node. Unlike
-     * Underscore.js/lodash, this function will return ``false`` if ``object``
-     * is an *element-like* object, i.e. a regular object with a ``nodeType``
-     * property that holds the value ``1``.
-     */
-    function isElement(object) {
-        if (!object || object.nodeType !== 1 || !div) { return false; }
-        try {
-            object.appendChild(div);
-            object.removeChild(div);
-        } catch (e) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * @name samsam.keys
-     * @param Object object
-     *
-     * Return an array of own property names.
-     */
-    function keys(object) {
-        var ks = [], prop;
-        for (prop in object) {
-            if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); }
-        }
-        return ks;
-    }
-
-    /**
-     * @name samsam.isDate
-     * @param Object value
-     *
-     * Returns true if the object is a ``Date``, or *date-like*. Duck typing
-     * of date objects work by checking that the object has a ``getTime``
-     * function whose return value equals the return value from the object's
-     * ``valueOf``.
-     */
-    function isDate(value) {
-        return typeof value.getTime == "function" &&
-            value.getTime() == value.valueOf();
-    }
-
-    /**
-     * @name samsam.isNegZero
-     * @param Object value
-     *
-     * Returns ``true`` if ``value`` is ``-0``.
-     */
-    function isNegZero(value) {
-        return value === 0 && 1 / value === -Infinity;
-    }
-
-    /**
-     * @name samsam.equal
-     * @param Object obj1
-     * @param Object obj2
-     *
-     * Returns ``true`` if two objects are strictly equal. Compared to
-     * ``===`` there are two exceptions:
-     *
-     *   - NaN is considered equal to NaN
-     *   - -0 and +0 are not considered equal
-     */
-    function identical(obj1, obj2) {
-        if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) {
-            return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2);
-        }
-    }
-
-
-    /**
-     * @name samsam.deepEqual
-     * @param Object obj1
-     * @param Object obj2
-     *
-     * Deep equal comparison. Two values are "deep equal" if:
-     *
-     *   - They are equal, according to samsam.identical
-     *   - They are both date objects representing the same time
-     *   - They are both arrays containing elements that are all deepEqual
-     *   - They are objects with the same set of properties, and each property
-     *     in ``obj1`` is deepEqual to the corresponding property in ``obj2``
-     *
-     * Supports cyclic objects.
-     */
-    function deepEqualCyclic(obj1, obj2) {
-
-        // used for cyclic comparison
-        // contain already visited objects
-        var objects1 = [],
-            objects2 = [],
-        // contain paths (position in the object structure)
-        // of the already visited objects
-        // indexes same as in objects arrays
-            paths1 = [],
-            paths2 = [],
-        // contains combinations of already compared objects
-        // in the manner: { "$1['ref']$2['ref']": true }
-            compared = {};
-
-        /**
-         * used to check, if the value of a property is an object
-         * (cyclic logic is only needed for objects)
-         * only needed for cyclic logic
-         */
-        function isObject(value) {
-
-            if (typeof value === 'object' && value !== null &&
-                    !(value instanceof Boolean) &&
-                    !(value instanceof Date)    &&
-                    !(value instanceof Number)  &&
-                    !(value instanceof RegExp)  &&
-                    !(value instanceof String)) {
-
-                return true;
-            }
-
-            return false;
-        }
-
-        /**
-         * returns the index of the given object in the
-         * given objects array, -1 if not contained
-         * only needed for cyclic logic
-         */
-        function getIndex(objects, obj) {
-
-            var i;
-            for (i = 0; i < objects.length; i++) {
-                if (objects[i] === obj) {
-                    return i;
-                }
-            }
-
-            return -1;
-        }
-
-        // does the recursion for the deep equal check
-        return (function deepEqual(obj1, obj2, path1, path2) {
-            var type1 = typeof obj1;
-            var type2 = typeof obj2;
-
-            // == null also matches undefined
-            if (obj1 === obj2 ||
-                    isNaN(obj1) || isNaN(obj2) ||
-                    obj1 == null || obj2 == null ||
-                    type1 !== "object" || type2 !== "object") {
-
-                return identical(obj1, obj2);
-            }
-
-            // Elements are only equal if identical(expected, actual)
-            if (isElement(obj1) || isElement(obj2)) { return false; }
-
-            var isDate1 = isDate(obj1), isDate2 = isDate(obj2);
-            if (isDate1 || isDate2) {
-                if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) {
-                    return false;
-                }
-            }
-
-            if (obj1 instanceof RegExp && obj2 instanceof RegExp) {
-                if (obj1.toString() !== obj2.toString()) { return false; }
-            }
-
-            var class1 = getClass(obj1);
-            var class2 = getClass(obj2);
-            var keys1 = keys(obj1);
-            var keys2 = keys(obj2);
-
-            if (isArguments(obj1) || isArguments(obj2)) {
-                if (obj1.length !== obj2.length) { return false; }
-            } else {
-                if (type1 !== type2 || class1 !== class2 ||
-                        keys1.length !== keys2.length) {
-                    return false;
-                }
-            }
-
-            var key, i, l,
-                // following vars are used for the cyclic logic
-                value1, value2,
-                isObject1, isObject2,
-                index1, index2,
-                newPath1, newPath2;
-
-            for (i = 0, l = keys1.length; i < l; i++) {
-                key = keys1[i];
-                if (!o.hasOwnProperty.call(obj2, key)) {
-                    return false;
-                }
-
-                // Start of the cyclic logic
-
-                value1 = obj1[key];
-                value2 = obj2[key];
-
-                isObject1 = isObject(value1);
-                isObject2 = isObject(value2);
-
-                // determine, if the objects were already visited
-                // (it's faster to check for isObject first, than to
-                // get -1 from getIndex for non objects)
-                index1 = isObject1 ? getIndex(objects1, value1) : -1;
-                index2 = isObject2 ? getIndex(objects2, value2) : -1;
-
-                // determine the new paths of the objects
-                // - for non cyclic objects the current path will be extended
-                //   by current property name
-                // - for cyclic objects the stored path is taken
-                newPath1 = index1 !== -1
-                    ? paths1[index1]
-                    : path1 + '[' + JSON.stringify(key) + ']';
-                newPath2 = index2 !== -1
-                    ? paths2[index2]
-                    : path2 + '[' + JSON.stringify(key) + ']';
-
-                // stop recursion if current objects are already compared
-                if (compared[newPath1 + newPath2]) {
-                    return true;
-                }
-
-                // remember the current objects and their paths
-                if (index1 === -1 && isObject1) {
-                    objects1.push(value1);
-                    paths1.push(newPath1);
-                }
-                if (index2 === -1 && isObject2) {
-                    objects2.push(value2);
-                    paths2.push(newPath2);
-                }
-
-                // remember that the current objects are already compared
-                if (isObject1 && isObject2) {
-                    compared[newPath1 + newPath2] = true;
-                }
-
-                // End of cyclic logic
-
-                // neither value1 nor value2 is a cycle
-                // continue with next level
-                if (!deepEqual(value1, value2, newPath1, newPath2)) {
-                    return false;
-                }
-            }
-
-            return true;
-
-        }(obj1, obj2, '$1', '$2'));
-    }
-
-    var match;
-
-    function arrayContains(array, subset) {
-        if (subset.length === 0) { return true; }
-        var i, l, j, k;
-        for (i = 0, l = array.length; i < l; ++i) {
-            if (match(array[i], subset[0])) {
-                for (j = 0, k = subset.length; j < k; ++j) {
-                    if (!match(array[i + j], subset[j])) { return false; }
-                }
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * @name samsam.match
-     * @param Object object
-     * @param Object matcher
-     *
-     * Compare arbitrary value ``object`` with matcher.
-     */
-    match = function match(object, matcher) {
-        if (matcher && typeof matcher.test === "function") {
-            return matcher.test(object);
-        }
-
-        if (typeof matcher === "function") {
-            return matcher(object) === true;
-        }
-
-        if (typeof matcher === "string") {
-            matcher = matcher.toLowerCase();
-            var notNull = typeof object === "string" || !!object;
-            return notNull &&
-                (String(object)).toLowerCase().indexOf(matcher) >= 0;
-        }
-
-        if (typeof matcher === "number") {
-            return matcher === object;
-        }
-
-        if (typeof matcher === "boolean") {
-            return matcher === object;
-        }
-
-        if (getClass(object) === "Array" && getClass(matcher) === "Array") {
-            return arrayContains(object, matcher);
-        }
-
-        if (matcher && typeof matcher === "object") {
-            var prop;
-            for (prop in matcher) {
-                if (!match(object[prop], matcher[prop])) {
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        throw new Error("Matcher was not a string, a number, a " +
-                        "function, a boolean or an object");
-    };
-
-    return {
-        isArguments: isArguments,
-        isElement: isElement,
-        isDate: isDate,
-        isNegZero: isNegZero,
-        identical: identical,
-        deepEqual: deepEqualCyclic,
-        match: match,
-        keys: keys
-    };
-});
-((typeof define === "function" && define.amd && function (m) {
-    define("formatio", ["samsam"], m);
-}) || (typeof module === "object" && function (m) {
-    module.exports = m(require("samsam"));
-}) || function (m) { this.formatio = m(this.samsam); }
-)(function (samsam) {
-
-    var formatio = {
-        excludeConstructors: ["Object", /^.$/],
-        quoteStrings: true
-    };
-
-    var hasOwn = Object.prototype.hasOwnProperty;
-
-    var specialObjects = [];
-    if (typeof global !== "undefined") {
-        specialObjects.push({ object: global, value: "[object global]" });
-    }
-    if (typeof document !== "undefined") {
-        specialObjects.push({
-            object: document,
-            value: "[object HTMLDocument]"
-        });
-    }
-    if (typeof window !== "undefined") {
-        specialObjects.push({ object: window, value: "[object Window]" });
-    }
-
-    function functionName(func) {
-        if (!func) { return ""; }
-        if (func.displayName) { return func.displayName; }
-        if (func.name) { return func.name; }
-        var matches = func.toString().match(/function\s+([^\(]+)/m);
-        return (matches && matches[1]) || "";
-    }
-
-    function constructorName(f, object) {
-        var name = functionName(object && object.constructor);
-        var excludes = f.excludeConstructors ||
-                formatio.excludeConstructors || [];
-
-        var i, l;
-        for (i = 0, l = excludes.length; i < l; ++i) {
-            if (typeof excludes[i] === "string" && excludes[i] === name) {
-                return "";
-            } else if (excludes[i].test && excludes[i].test(name)) {
-                return "";
-            }
-        }
-
-        return name;
-    }
-
-    function isCircular(object, objects) {
-        if (typeof object !== "object") { return false; }
-        var i, l;
-        for (i = 0, l = objects.length; i < l; ++i) {
-            if (objects[i] === object) { return true; }
-        }
-        return false;
-    }
-
-    function ascii(f, object, processed, indent) {
-        if (typeof object === "string") {
-            var qs = f.quoteStrings;
-            var quote = typeof qs !== "boolean" || qs;
-            return processed || quote ? '"' + object + '"' : object;
-        }
-
-        if (typeof object === "function" && !(object instanceof RegExp)) {
-            return ascii.func(object);
-        }
-
-        processed = processed || [];
-
-        if (isCircular(object, processed)) { return "[Circular]"; }
-
-        if (Object.prototype.toString.call(object) === "[object Array]") {
-            return ascii.array.call(f, object, processed);
-        }
-
-        if (!object) { return String((1/object) === -Infinity ? "-0" : object); }
-        if (samsam.isElement(object)) { return ascii.element(object); }
-
-        if (typeof object.toString === "function" &&
-                object.toString !== Object.prototype.toString) {
-            return object.toString();
-        }
-
-        var i, l;
-        for (i = 0, l = specialObjects.length; i < l; i++) {
-            if (object === specialObjects[i].object) {
-                return specialObjects[i].value;
-            }
-        }
-
-        return ascii.object.call(f, object, processed, indent);
-    }
-
-    ascii.func = function (func) {
-        return "function " + functionName(func) + "() {}";
-    };
-
-    ascii.array = function (array, processed) {
-        processed = processed || [];
-        processed.push(array);
-        var i, l, pieces = [];
-        for (i = 0, l = array.length; i < l; ++i) {
-            pieces.push(ascii(this, array[i], processed));
-        }
-        return "[" + pieces.join(", ") + "]";
-    };
-
-    ascii.object = function (object, processed, indent) {
-        processed = processed || [];
-        processed.push(object);
-        indent = indent || 0;
-        var pieces = [], properties = samsam.keys(object).sort();
-        var length = 3;
-        var prop, str, obj, i, l;
-
-        for (i = 0, l = properties.length; i < l; ++i) {
-            prop = properties[i];
-            obj = object[prop];
-
-            if (isCircular(obj, processed)) {
-                str = "[Circular]";
-            } else {
-                str = ascii(this, obj, processed, indent + 2);
-            }
-
-            str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str;
-            length += str.length;
-            pieces.push(str);
-        }
-
-        var cons = constructorName(this, object);
-        var prefix = cons ? "[" + cons + "] " : "";
-        var is = "";
-        for (i = 0, l = indent; i < l; ++i) { is += " "; }
-
-        if (length + indent > 80) {
-            return prefix + "{\n  " + is + pieces.join(",\n  " + is) + "\n" +
-                is + "}";
-        }
-        return prefix + "{ " + pieces.join(", ") + " }";
-    };
-
-    ascii.element = function (element) {
-        var tagName = element.tagName.toLowerCase();
-        var attrs = element.attributes, attr, pairs = [], attrName, i, l, val;
-
-        for (i = 0, l = attrs.length; i < l; ++i) {
-            attr = attrs.item(i);
-            attrName = attr.nodeName.toLowerCase().replace("html:", "");
-            val = attr.nodeValue;
-            if (attrName !== "contenteditable" || val !== "inherit") {
-                if (!!val) { pairs.push(attrName + "=\"" + val + "\""); }
-            }
-        }
-
-        var formatted = "<" + tagName + (pairs.length > 0 ? " " : "");
-        var content = element.innerHTML;
-
-        if (content.length > 20) {
-            content = content.substr(0, 20) + "[...]";
-        }
-
-        var res = formatted + pairs.join(" ") + ">" + content +
-                "</" + tagName + ">";
-
-        return res.replace(/ contentEditable="inherit"/, "");
-    };
-
-    function Formatio(options) {
-        for (var opt in options) {
-            this[opt] = options[opt];
-        }
-    }
-
-    Formatio.prototype = {
-        functionName: functionName,
-
-        configure: function (options) {
-            return new Formatio(options);
-        },
-
-        constructorName: function (object) {
-            return constructorName(this, object);
-        },
-
-        ascii: function (object, processed, indent) {
-            return ascii(this, object, processed, indent);
-        }
-    };
-
-    return Formatio.prototype;
-});
-/*jslint eqeqeq: false, onevar: false, forin: true, nomen: false, regexp: false, plusplus: false*/
-/*global module, require, __dirname, document*/
-/**
- * Sinon core utilities. For internal use only.
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-var sinon = (function (formatio) {
-    var div = typeof document != "undefined" && document.createElement("div");
-    var hasOwn = Object.prototype.hasOwnProperty;
-
-    function isDOMNode(obj) {
-        var success = false;
-
-        try {
-            obj.appendChild(div);
-            success = div.parentNode == obj;
-        } catch (e) {
-            return false;
-        } finally {
-            try {
-                obj.removeChild(div);
-            } catch (e) {
-                // Remove failed, not much we can do about that
-            }
-        }
-
-        return success;
-    }
-
-    function isElement(obj) {
-        return div && obj && obj.nodeType === 1 && isDOMNode(obj);
-    }
-
-    function isFunction(obj) {
-        return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply);
-    }
-
-    function isReallyNaN(val) {
-        return typeof val === 'number' && isNaN(val);
-    }
-
-    function mirrorProperties(target, source) {
-        for (var prop in source) {
-            if (!hasOwn.call(target, prop)) {
-                target[prop] = source[prop];
-            }
-        }
-    }
-
-    function isRestorable (obj) {
-        return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon;
-    }
-
-    var sinon = {
-        wrapMethod: function wrapMethod(object, property, method) {
-            if (!object) {
-                throw new TypeError("Should wrap property of object");
-            }
-
-            if (typeof method != "function") {
-                throw new TypeError("Method wrapper should be function");
-            }
-
-            var wrappedMethod = object[property],
-                error;
-
-            if (!isFunction(wrappedMethod)) {
-                error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
-                                    property + " as function");
-            }
-
-            if (wrappedMethod.restore && wrappedMethod.restore.sinon) {
-                error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
-            }
-
-            if (wrappedMethod.calledBefore) {
-                var verb = !!wrappedMethod.returns ? "stubbed" : "spied on";
-                error = new TypeError("Attempted to wrap " + property + " which is already " + verb);
-            }
-
-            if (error) {
-                if (wrappedMethod._stack) {
-                    error.stack += '\n--------------\n' + wrappedMethod._stack;
-                }
-                throw error;
-            }
-
-            // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem
-            // when using hasOwn.call on objects from other frames.
-            var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property);
-            object[property] = method;
-            method.displayName = property;
-            // Set up a stack trace which can be used later to find what line of
-            // code the original method was created on.
-            method._stack = (new Error('Stack Trace for original')).stack;
-
-            method.restore = function () {
-                // For prototype properties try to reset by delete first.
-                // If this fails (ex: localStorage on mobile safari) then force a reset
-                // via direct assignment.
-                if (!owned) {
-                    delete object[property];
-                }
-                if (object[property] === method) {
-                    object[property] = wrappedMethod;
-                }
-            };
-
-            method.restore.sinon = true;
-            mirrorProperties(method, wrappedMethod);
-
-            return method;
-        },
-
-        extend: function extend(target) {
-            for (var i = 1, l = arguments.length; i < l; i += 1) {
-                for (var prop in arguments[i]) {
-                    if (arguments[i].hasOwnProperty(prop)) {
-                        target[prop] = arguments[i][prop];
-                    }
-
-                    // DONT ENUM bug, only care about toString
-                    if (arguments[i].hasOwnProperty("toString") &&
-                        arguments[i].toString != target.toString) {
-                        target.toString = arguments[i].toString;
-                    }
-                }
-            }
-
-            return target;
-        },
-
-        create: function create(proto) {
-            var F = function () {};
-            F.prototype = proto;
-            return new F();
-        },
-
-        deepEqual: function deepEqual(a, b) {
-            if (sinon.match && sinon.match.isMatcher(a)) {
-                return a.test(b);
-            }
-
-            if (typeof a != 'object' || typeof b != 'object') {
-                if (isReallyNaN(a) && isReallyNaN(b)) {
-                    return true;
-                } else {
-                    return a === b;
-                }
-            }
-
-            if (isElement(a) || isElement(b)) {
-                return a === b;
-            }
-
-            if (a === b) {
-                return true;
-            }
-
-            if ((a === null && b !== null) || (a !== null && b === null)) {
-                return false;
-            }
-
-            if (a instanceof RegExp && b instanceof RegExp) {
-              return (a.source === b.source) && (a.global === b.global) &&
-                (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline);
-            }
-
-            var aString = Object.prototype.toString.call(a);
-            if (aString != Object.prototype.toString.call(b)) {
-                return false;
-            }
-
-            if (aString == "[object Date]") {
-                return a.valueOf() === b.valueOf();
-            }
-
-            var prop, aLength = 0, bLength = 0;
-
-            if (aString == "[object Array]" && a.length !== b.length) {
-                return false;
-            }
-
-            for (prop in a) {
-                aLength += 1;
-
-                if (!deepEqual(a[prop], b[prop])) {
-                    return false;
-                }
-            }
-
-            for (prop in b) {
-                bLength += 1;
-            }
-
-            return aLength == bLength;
-        },
-
-        functionName: function functionName(func) {
-            var name = func.displayName || func.name;
-
-            // Use function decomposition as a last resort to get function
-            // name. Does not rely on function decomposition to work - if it
-            // doesn't debugging will be slightly less informative
-            // (i.e. toString will say 'spy' rather than 'myFunc').
-            if (!name) {
-                var matches = func.toString().match(/function ([^\s\(]+)/);
-                name = matches && matches[1];
-            }
-
-            return name;
-        },
-
-        functionToString: function toString() {
-            if (this.getCall && this.callCount) {
-                var thisValue, prop, i = this.callCount;
-
-                while (i--) {
-                    thisValue = this.getCall(i).thisValue;
-
-                    for (prop in thisValue) {
-                        if (thisValue[prop] === this) {
-                            return prop;
-                        }
-                    }
-                }
-            }
-
-            return this.displayName || "sinon fake";
-        },
-
-        getConfig: function (custom) {
-            var config = {};
-            custom = custom || {};
-            var defaults = sinon.defaultConfig;
-
-            for (var prop in defaults) {
-                if (defaults.hasOwnProperty(prop)) {
-                    config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop];
-                }
-            }
-
-            return config;
-        },
-
-        format: function (val) {
-            return "" + val;
-        },
-
-        defaultConfig: {
-            injectIntoThis: true,
-            injectInto: null,
-            properties: ["spy", "stub", "mock", "clock", "server", "requests"],
-            useFakeTimers: true,
-            useFakeServer: true
-        },
-
-        timesInWords: function timesInWords(count) {
-            return count == 1 && "once" ||
-                count == 2 && "twice" ||
-                count == 3 && "thrice" ||
-                (count || 0) + " times";
-        },
-
-        calledInOrder: function (spies) {
-            for (var i = 1, l = spies.length; i < l; i++) {
-                if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) {
-                    return false;
-                }
-            }
-
-            return true;
-        },
-
-        orderByFirstCall: function (spies) {
-            return spies.sort(function (a, b) {
-                // uuid, won't ever be equal
-                var aCall = a.getCall(0);
-                var bCall = b.getCall(0);
-                var aId = aCall && aCall.callId || -1;
-                var bId = bCall && bCall.callId || -1;
-
-                return aId < bId ? -1 : 1;
-            });
-        },
-
-        log: function () {},
-
-        logError: function (label, err) {
-            var msg = label + " threw exception: ";
-            sinon.log(msg + "[" + err.name + "] " + err.message);
-            if (err.stack) { sinon.log(err.stack); }
-
-            setTimeout(function () {
-                err.message = msg + err.message;
-                throw err;
-            }, 0);
-        },
-
-        typeOf: function (value) {
-            if (value === null) {
-                return "null";
-            }
-            else if (value === undefined) {
-                return "undefined";
-            }
-            var string = Object.prototype.toString.call(value);
-            return string.substring(8, string.length - 1).toLowerCase();
-        },
-
-        createStubInstance: function (constructor) {
-            if (typeof constructor !== "function") {
-                throw new TypeError("The constructor should be a function.");
-            }
-            return sinon.stub(sinon.create(constructor.prototype));
-        },
-
-        restore: function (object) {
-            if (object !== null && typeof object === "object") {
-                for (var prop in object) {
-                    if (isRestorable(object[prop])) {
-                        object[prop].restore();
-                    }
-                }
-            }
-            else if (isRestorable(object)) {
-                object.restore();
-            }
-        }
-    };
-
-    var isNode = typeof module !== "undefined" && module.exports;
-    var isAMD = typeof define === 'function' && typeof define.amd === 'object' && define.amd;
-
-    if (isAMD) {
-        define(function(){
-            return sinon;
-        });
-    } else if (isNode) {
-        try {
-            formatio = require("formatio");
-        } catch (e) {}
-        module.exports = sinon;
-        module.exports.spy = require("./sinon/spy");
-        module.exports.spyCall = require("./sinon/call");
-        module.exports.behavior = require("./sinon/behavior");
-        module.exports.stub = require("./sinon/stub");
-        module.exports.mock = require("./sinon/mock");
-        module.exports.collection = require("./sinon/collection");
-        module.exports.assert = require("./sinon/assert");
-        module.exports.sandbox = require("./sinon/sandbox");
-        module.exports.test = require("./sinon/test");
-        module.exports.testCase = require("./sinon/test_case");
-        module.exports.assert = require("./sinon/assert");
-        module.exports.match = require("./sinon/match");
-    }
-
-    if (formatio) {
-        var formatter = formatio.configure({ quoteStrings: false });
-        sinon.format = function () {
-            return formatter.ascii.apply(formatter, arguments);
-        };
-    } else if (isNode) {
-        try {
-            var util = require("util");
-            sinon.format = function (value) {
-                return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value;
-            };
-        } catch (e) {
-            /* Node, but no util module - would be very old, but better safe than
-             sorry */
-        }
-    }
-
-    return sinon;
-}(typeof formatio == "object" && formatio));
-
-/* @depend ../sinon.js */
-/*jslint eqeqeq: false, onevar: false, plusplus: false*/
-/*global module, require, sinon*/
-/**
- * Match functions
- *
- * @author Maximilian Antoni (mail at maxantoni.de)
- * @license BSD
- *
- * Copyright (c) 2012 Maximilian Antoni
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== 'undefined' && module.exports;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function assertType(value, type, name) {
-        var actual = sinon.typeOf(value);
-        if (actual !== type) {
-            throw new TypeError("Expected type of " + name + " to be " +
-                type + ", but was " + actual);
-        }
-    }
-
-    var matcher = {
-        toString: function () {
-            return this.message;
-        }
-    };
-
-    function isMatcher(object) {
-        return matcher.isPrototypeOf(object);
-    }
-
-    function matchObject(expectation, actual) {
-        if (actual === null || actual === undefined) {
-            return false;
-        }
-        for (var key in expectation) {
-            if (expectation.hasOwnProperty(key)) {
-                var exp = expectation[key];
-                var act = actual[key];
-                if (match.isMatcher(exp)) {
-                    if (!exp.test(act)) {
-                        return false;
-                    }
-                } else if (sinon.typeOf(exp) === "object") {
-                    if (!matchObject(exp, act)) {
-                        return false;
-                    }
-                } else if (!sinon.deepEqual(exp, act)) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-    matcher.or = function (m2) {
-        if (!arguments.length) {
-            throw new TypeError("Matcher expected");
-        } else if (!isMatcher(m2)) {
-            m2 = match(m2);
-        }
-        var m1 = this;
-        var or = sinon.create(matcher);
-        or.test = function (actual) {
-            return m1.test(actual) || m2.test(actual);
-        };
-        or.message = m1.message + ".or(" + m2.message + ")";
-        return or;
-    };
-
-    matcher.and = function (m2) {
-        if (!arguments.length) {
-            throw new TypeError("Matcher expected");
-        } else if (!isMatcher(m2)) {
-            m2 = match(m2);
-        }
-        var m1 = this;
-        var and = sinon.create(matcher);
-        and.test = function (actual) {
-            return m1.test(actual) && m2.test(actual);
-        };
-        and.message = m1.message + ".and(" + m2.message + ")";
-        return and;
-    };
-
-    var match = function (expectation, message) {
-        var m = sinon.create(matcher);
-        var type = sinon.typeOf(expectation);
-        switch (type) {
-        case "object":
-            if (typeof expectation.test === "function") {
-                m.test = function (actual) {
-                    return expectation.test(actual) === true;
-                };
-                m.message = "match(" + sinon.functionName(expectation.test) + ")";
-                return m;
-            }
-            var str = [];
-            for (var key in expectation) {
-                if (expectation.hasOwnProperty(key)) {
-                    str.push(key + ": " + expectation[key]);
-                }
-            }
-            m.test = function (actual) {
-                return matchObject(expectation, actual);
-            };
-            m.message = "match(" + str.join(", ") + ")";
-            break;
-        case "number":
-            m.test = function (actual) {
-                return expectation == actual;
-            };
-            break;
-        case "string":
-            m.test = function (actual) {
-                if (typeof actual !== "string") {
-                    return false;
-                }
-                return actual.indexOf(expectation) !== -1;
-            };
-            m.message = "match(\"" + expectation + "\")";
-            break;
-        case "regexp":
-            m.test = function (actual) {
-                if (typeof actual !== "string") {
-                    return false;
-                }
-                return expectation.test(actual);
-            };
-            break;
-        case "function":
-            m.test = expectation;
-            if (message) {
-                m.message = message;
-            } else {
-                m.message = "match(" + sinon.functionName(expectation) + ")";
-            }
-            break;
-        default:
-            m.test = function (actual) {
-              return sinon.deepEqual(expectation, actual);
-            };
-        }
-        if (!m.message) {
-            m.message = "match(" + expectation + ")";
-        }
-        return m;
-    };
-
-    match.isMatcher = isMatcher;
-
-    match.any = match(function () {
-        return true;
-    }, "any");
-
-    match.defined = match(function (actual) {
-        return actual !== null && actual !== undefined;
-    }, "defined");
-
-    match.truthy = match(function (actual) {
-        return !!actual;
-    }, "truthy");
-
-    match.falsy = match(function (actual) {
-        return !actual;
-    }, "falsy");
-
-    match.same = function (expectation) {
-        return match(function (actual) {
-            return expectation === actual;
-        }, "same(" + expectation + ")");
-    };
-
-    match.typeOf = function (type) {
-        assertType(type, "string", "type");
-        return match(function (actual) {
-            return sinon.typeOf(actual) === type;
-        }, "typeOf(\"" + type + "\")");
-    };
-
-    match.instanceOf = function (type) {
-        assertType(type, "function", "type");
-        return match(function (actual) {
-            return actual instanceof type;
-        }, "instanceOf(" + sinon.functionName(type) + ")");
-    };
-
-    function createPropertyMatcher(propertyTest, messagePrefix) {
-        return function (property, value) {
-            assertType(property, "string", "property");
-            var onlyProperty = arguments.length === 1;
-            var message = messagePrefix + "(\"" + property + "\"";
-            if (!onlyProperty) {
-                message += ", " + value;
-            }
-            message += ")";
-            return match(function (actual) {
-                if (actual === undefined || actual === null ||
-                        !propertyTest(actual, property)) {
-                    return false;
-                }
-                return onlyProperty || sinon.deepEqual(value, actual[property]);
-            }, message);
-        };
-    }
-
-    match.has = createPropertyMatcher(function (actual, property) {
-        if (typeof actual === "object") {
-            return property in actual;
-        }
-        return actual[property] !== undefined;
-    }, "has");
-
-    match.hasOwn = createPropertyMatcher(function (actual, property) {
-        return actual.hasOwnProperty(property);
-    }, "hasOwn");
-
-    match.bool = match.typeOf("boolean");
-    match.number = match.typeOf("number");
-    match.string = match.typeOf("string");
-    match.object = match.typeOf("object");
-    match.func = match.typeOf("function");
-    match.array = match.typeOf("array");
-    match.regexp = match.typeOf("regexp");
-    match.date = match.typeOf("date");
-
-    if (commonJSModule) {
-        module.exports = match;
-    } else {
-        sinon.match = match;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
-  * @depend ../sinon.js
-  * @depend match.js
-  */
-/*jslint eqeqeq: false, onevar: false, plusplus: false*/
-/*global module, require, sinon*/
-/**
-  * Spy calls
-  *
-  * @author Christian Johansen (christian at cjohansen.no)
-  * @author Maximilian Antoni (mail at maxantoni.de)
-  * @license BSD
-  *
-  * Copyright (c) 2010-2013 Christian Johansen
-  * Copyright (c) 2013 Maximilian Antoni
-  */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== 'undefined' && module.exports;
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function throwYieldError(proxy, text, args) {
-        var msg = sinon.functionName(proxy) + text;
-        if (args.length) {
-            msg += " Received [" + slice.call(args).join(", ") + "]";
-        }
-        throw new Error(msg);
-    }
-
-    var slice = Array.prototype.slice;
-
-    var callProto = {
-        calledOn: function calledOn(thisValue) {
-            if (sinon.match && sinon.match.isMatcher(thisValue)) {
-                return thisValue.test(this.thisValue);
-            }
-            return this.thisValue === thisValue;
-        },
-
-        calledWith: function calledWith() {
-            for (var i = 0, l = arguments.length; i < l; i += 1) {
-                if (!sinon.deepEqual(arguments[i], this.args[i])) {
-                    return false;
-                }
-            }
-
-            return true;
-        },
-
-        calledWithMatch: function calledWithMatch() {
-            for (var i = 0, l = arguments.length; i < l; i += 1) {
-                var actual = this.args[i];
-                var expectation = arguments[i];
-                if (!sinon.match || !sinon.match(expectation).test(actual)) {
-                    return false;
-                }
-            }
-            return true;
-        },
-
-        calledWithExactly: function calledWithExactly() {
-            return arguments.length == this.args.length &&
-                this.calledWith.apply(this, arguments);
-        },
-
-        notCalledWith: function notCalledWith() {
-            return !this.calledWith.apply(this, arguments);
-        },
-
-        notCalledWithMatch: function notCalledWithMatch() {
-            return !this.calledWithMatch.apply(this, arguments);
-        },
-
-        returned: function returned(value) {
-            return sinon.deepEqual(value, this.returnValue);
-        },
-
-        threw: function threw(error) {
-            if (typeof error === "undefined" || !this.exception) {
-                return !!this.exception;
-            }
-
-            return this.exception === error || this.exception.name === error;
-        },
-
-        calledWithNew: function calledWithNew() {
-            return this.proxy.prototype && this.thisValue instanceof this.proxy;
-        },
-
-        calledBefore: function (other) {
-            return this.callId < other.callId;
-        },
-
-        calledAfter: function (other) {
-            return this.callId > other.callId;
-        },
-
-        callArg: function (pos) {
-            this.args[pos]();
-        },
-
-        callArgOn: function (pos, thisValue) {
-            this.args[pos].apply(thisValue);
-        },
-
-        callArgWith: function (pos) {
-            this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1)));
-        },
-
-        callArgOnWith: function (pos, thisValue) {
-            var args = slice.call(arguments, 2);
-            this.args[pos].apply(thisValue, args);
-        },
-
-        "yield": function () {
-            this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0)));
-        },
-
-        yieldOn: function (thisValue) {
-            var args = this.args;
-            for (var i = 0, l = args.length; i < l; ++i) {
-                if (typeof args[i] === "function") {
-                    args[i].apply(thisValue, slice.call(arguments, 1));
-                    return;
-                }
-            }
-            throwYieldError(this.proxy, " cannot yield since no callback was passed.", args);
-        },
-
-        yieldTo: function (prop) {
-            this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1)));
-        },
-
-        yieldToOn: function (prop, thisValue) {
-            var args = this.args;
-            for (var i = 0, l = args.length; i < l; ++i) {
-                if (args[i] && typeof args[i][prop] === "function") {
-                    args[i][prop].apply(thisValue, slice.call(arguments, 2));
-                    return;
-                }
-            }
-            throwYieldError(this.proxy, " cannot yield to '" + prop +
-                "' since no callback was passed.", args);
-        },
-
-        toString: function () {
-            var callStr = this.proxy.toString() + "(";
-            var args = [];
-
-            for (var i = 0, l = this.args.length; i < l; ++i) {
-                args.push(sinon.format(this.args[i]));
-            }
-
-            callStr = callStr + args.join(", ") + ")";
-
-            if (typeof this.returnValue != "undefined") {
-                callStr += " => " + sinon.format(this.returnValue);
-            }
-
-            if (this.exception) {
-                callStr += " !" + this.exception.name;
-
-                if (this.exception.message) {
-                    callStr += "(" + this.exception.message + ")";
-                }
-            }
-
-            return callStr;
-        }
-    };
-
-    callProto.invokeCallback = callProto.yield;
-
-    function createSpyCall(spy, thisValue, args, returnValue, exception, id) {
-        if (typeof id !== "number") {
-            throw new TypeError("Call id is not a number");
-        }
-        var proxyCall = sinon.create(callProto);
-        proxyCall.proxy = spy;
-        proxyCall.thisValue = thisValue;
-        proxyCall.args = args;
-        proxyCall.returnValue = returnValue;
-        proxyCall.exception = exception;
-        proxyCall.callId = id;
-
-        return proxyCall;
-    }
-    createSpyCall.toString = callProto.toString; // used by mocks
-
-    if (commonJSModule) {
-        module.exports = createSpyCall;
-    } else {
-        sinon.spyCall = createSpyCall;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-
-/**
-  * @depend ../sinon.js
-  * @depend call.js
-  */
-/*jslint eqeqeq: false, onevar: false, plusplus: false*/
-/*global module, require, sinon*/
-/**
-  * Spy functions
-  *
-  * @author Christian Johansen (christian at cjohansen.no)
-  * @license BSD
-  *
-  * Copyright (c) 2010-2013 Christian Johansen
-  */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== 'undefined' && module.exports;
-    var push = Array.prototype.push;
-    var slice = Array.prototype.slice;
-    var callId = 0;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function spy(object, property) {
-        if (!property && typeof object == "function") {
-            return spy.create(object);
-        }
-
-        if (!object && !property) {
-            return spy.create(function () { });
-        }
-
-        var method = object[property];
-        return sinon.wrapMethod(object, property, spy.create(method));
-    }
-
-    function matchingFake(fakes, args, strict) {
-        if (!fakes) {
-            return;
-        }
-
-        for (var i = 0, l = fakes.length; i < l; i++) {
-            if (fakes[i].matches(args, strict)) {
-                return fakes[i];
-            }
-        }
-    }
-
-    function incrementCallCount() {
-        this.called = true;
-        this.callCount += 1;
-        this.notCalled = false;
-        this.calledOnce = this.callCount == 1;
-        this.calledTwice = this.callCount == 2;
-        this.calledThrice = this.callCount == 3;
-    }
-
-    function createCallProperties() {
-        this.firstCall = this.getCall(0);
-        this.secondCall = this.getCall(1);
-        this.thirdCall = this.getCall(2);
-        this.lastCall = this.getCall(this.callCount - 1);
-    }
-
-    var vars = "a,b,c,d,e,f,g,h,i,j,k,l";
-    function createProxy(func) {
-        // Retain the function length:
-        var p;
-        if (func.length) {
-            eval("p = (function proxy(" + vars.substring(0, func.length * 2 - 1) +
-                ") { return p.invoke(func, this, slice.call(arguments)); });");
-        }
-        else {
-            p = function proxy() {
-                return p.invoke(func, this, slice.call(arguments));
-            };
-        }
-        return p;
-    }
-
-    var uuid = 0;
-
-    // Public API
-    var spyApi = {
-        reset: function () {
-            this.called = false;
-            this.notCalled = true;
-            this.calledOnce = false;
-            this.calledTwice = false;
-            this.calledThrice = false;
-            this.callCount = 0;
-            this.firstCall = null;
-            this.secondCall = null;
-            this.thirdCall = null;
-            this.lastCall = null;
-            this.args = [];
-            this.returnValues = [];
-            this.thisValues = [];
-            this.exceptions = [];
-            this.callIds = [];
-            if (this.fakes) {
-                for (var i = 0; i < this.fakes.length; i++) {
-                    this.fakes[i].reset();
-                }
-            }
-        },
-
-        create: function create(func) {
-            var name;
-
-            if (typeof func != "function") {
-                func = function () { };
-            } else {
-                name = sinon.functionName(func);
-            }
-
-            var proxy = createProxy(func);
-
-            sinon.extend(proxy, spy);
-            delete proxy.create;
-            sinon.extend(proxy, func);
-
-            proxy.reset();
-            proxy.prototype = func.prototype;
-            proxy.displayName = name || "spy";
-            proxy.toString = sinon.functionToString;
-            proxy._create = sinon.spy.create;
-            proxy.id = "spy#" + uuid++;
-
-            return proxy;
-        },
-
-        invoke: function invoke(func, thisValue, args) {
-            var matching = matchingFake(this.fakes, args);
-            var exception, returnValue;
-
-            incrementCallCount.call(this);
-            push.call(this.thisValues, thisValue);
-            push.call(this.args, args);
-            push.call(this.callIds, callId++);
-
-            try {
-                if (matching) {
-                    returnValue = matching.invoke(func, thisValue, args);
-                } else {
-                    returnValue = (this.func || func).apply(thisValue, args);
-                }
-
-                var thisCall = this.getCall(this.callCount - 1);
-                if (thisCall.calledWithNew() && typeof returnValue !== 'object') {
-                    returnValue = thisValue;
-                }
-            } catch (e) {
-                exception = e;
-            }
-
-            push.call(this.exceptions, exception);
-            push.call(this.returnValues, returnValue);
-
-            createCallProperties.call(this);
-
-            if (exception !== undefined) {
-                throw exception;
-            }
-
-            return returnValue;
-        },
-
-        getCall: function getCall(i) {
-            if (i < 0 || i >= this.callCount) {
-                return null;
-            }
-
-            return sinon.spyCall(this, this.thisValues[i], this.args[i],
-                                    this.returnValues[i], this.exceptions[i],
-                                    this.callIds[i]);
-        },
-
-        getCalls: function () {
-            var calls = [];
-            var i;
-
-            for (i = 0; i < this.callCount; i++) {
-                calls.push(this.getCall(i));
-            }
-
-            return calls;
-        },
-
-        calledBefore: function calledBefore(spyFn) {
-            if (!this.called) {
-                return false;
-            }
-
-            if (!spyFn.called) {
-                return true;
-            }
-
-            return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1];
-        },
-
-        calledAfter: function calledAfter(spyFn) {
-            if (!this.called || !spyFn.called) {
-                return false;
-            }
-
-            return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1];
-        },
-
-        withArgs: function () {
-            var args = slice.call(arguments);
-
-            if (this.fakes) {
-                var match = matchingFake(this.fakes, args, true);
-
-                if (match) {
-                    return match;
-                }
-            } else {
-                this.fakes = [];
-            }
-
-            var original = this;
-            var fake = this._create();
-            fake.matchingArguments = args;
-            fake.parent = this;
-            push.call(this.fakes, fake);
-
-            fake.withArgs = function () {
-                return original.withArgs.apply(original, arguments);
-            };
-
-            for (var i = 0; i < this.args.length; i++) {
-                if (fake.matches(this.args[i])) {
-                    incrementCallCount.call(fake);
-                    push.call(fake.thisValues, this.thisValues[i]);
-                    push.call(fake.args, this.args[i]);
-                    push.call(fake.returnValues, this.returnValues[i]);
-                    push.call(fake.exceptions, this.exceptions[i]);
-                    push.call(fake.callIds, this.callIds[i]);
-                }
-            }
-            createCallProperties.call(fake);
-
-            return fake;
-        },
-
-        matches: function (args, strict) {
-            var margs = this.matchingArguments;
-
-            if (margs.length <= args.length &&
-                sinon.deepEqual(margs, args.slice(0, margs.length))) {
-                return !strict || margs.length == args.length;
-            }
-        },
-
-        printf: function (format) {
-            var spy = this;
-            var args = slice.call(arguments, 1);
-            var formatter;
-
-            return (format || "").replace(/%(.)/g, function (match, specifier) {
-                formatter = spyApi.formatters[specifier];
-
-                if (typeof formatter == "function") {
-                    return formatter.call(null, spy, args);
-                } else if (!isNaN(parseInt(specifier, 10))) {
-                    return sinon.format(args[specifier - 1]);
-                }
-
-                return "%" + specifier;
-            });
-        }
-    };
-
-    function delegateToCalls(method, matchAny, actual, notCalled) {
-        spyApi[method] = function () {
-            if (!this.called) {
-                if (notCalled) {
-                    return notCalled.apply(this, arguments);
-                }
-                return false;
-            }
-
-            var currentCall;
-            var matches = 0;
-
-            for (var i = 0, l = this.callCount; i < l; i += 1) {
-                currentCall = this.getCall(i);
-
-                if (currentCall[actual || method].apply(currentCall, arguments)) {
-                    matches += 1;
-
-                    if (matchAny) {
-                        return true;
-                    }
-                }
-            }
-
-            return matches === this.callCount;
-        };
-    }
-
-    delegateToCalls("calledOn", true);
-    delegateToCalls("alwaysCalledOn", false, "calledOn");
-    delegateToCalls("calledWith", true);
-    delegateToCalls("calledWithMatch", true);
-    delegateToCalls("alwaysCalledWith", false, "calledWith");
-    delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch");
-    delegateToCalls("calledWithExactly", true);
-    delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly");
-    delegateToCalls("neverCalledWith", false, "notCalledWith",
-        function () { return true; });
-    delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch",
-        function () { return true; });
-    delegateToCalls("threw", true);
-    delegateToCalls("alwaysThrew", false, "threw");
-    delegateToCalls("returned", true);
-    delegateToCalls("alwaysReturned", false, "returned");
-    delegateToCalls("calledWithNew", true);
-    delegateToCalls("alwaysCalledWithNew", false, "calledWithNew");
-    delegateToCalls("callArg", false, "callArgWith", function () {
-        throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
-    });
-    spyApi.callArgWith = spyApi.callArg;
-    delegateToCalls("callArgOn", false, "callArgOnWith", function () {
-        throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
-    });
-    spyApi.callArgOnWith = spyApi.callArgOn;
-    delegateToCalls("yield", false, "yield", function () {
-        throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
-    });
-    // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
-    spyApi.invokeCallback = spyApi.yield;
-    delegateToCalls("yieldOn", false, "yieldOn", function () {
-        throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
-    });
-    delegateToCalls("yieldTo", false, "yieldTo", function (property) {
-        throw new Error(this.toString() + " cannot yield to '" + property +
-            "' since it was not yet invoked.");
-    });
-    delegateToCalls("yieldToOn", false, "yieldToOn", function (property) {
-        throw new Error(this.toString() + " cannot yield to '" + property +
-            "' since it was not yet invoked.");
-    });
-
-    spyApi.formatters = {
-        "c": function (spy) {
-            return sinon.timesInWords(spy.callCount);
-        },
-
-        "n": function (spy) {
-            return spy.toString();
-        },
-
-        "C": function (spy) {
-            var calls = [];
-
-            for (var i = 0, l = spy.callCount; i < l; ++i) {
-                var stringifiedCall = "    " + spy.getCall(i).toString();
-                if (/\n/.test(calls[i - 1])) {
-                    stringifiedCall = "\n" + stringifiedCall;
-                }
-                push.call(calls, stringifiedCall);
-            }
-
-            return calls.length > 0 ? "\n" + calls.join("\n") : "";
-        },
-
-        "t": function (spy) {
-            var objects = [];
-
-            for (var i = 0, l = spy.callCount; i < l; ++i) {
-                push.call(objects, sinon.format(spy.thisValues[i]));
-            }
-
-            return objects.join(", ");
-        },
-
-        "*": function (spy, args) {
-            var formatted = [];
-
-            for (var i = 0, l = args.length; i < l; ++i) {
-                push.call(formatted, sinon.format(args[i]));
-            }
-
-            return formatted.join(", ");
-        }
-    };
-
-    sinon.extend(spy, spyApi);
-
-    spy.spyCall = sinon.spyCall;
-
-    if (commonJSModule) {
-        module.exports = spy;
-    } else {
-        sinon.spy = spy;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend ../sinon.js
- */
-/*jslint eqeqeq: false, onevar: false*/
-/*global module, require, sinon, process, setImmediate, setTimeout*/
-/**
- * Stub behavior
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @author Tim Fischbach (mail at timfischbach.de)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== 'undefined' && module.exports;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    var slice = Array.prototype.slice;
-    var join = Array.prototype.join;
-    var proto;
-
-    var nextTick = (function () {
-        if (typeof process === "object" && typeof process.nextTick === "function") {
-            return process.nextTick;
-        } else if (typeof setImmediate === "function") {
-            return setImmediate;
-        } else {
-            return function (callback) {
-                setTimeout(callback, 0);
-            };
-        }
-    })();
-
-    function throwsException(error, message) {
-        if (typeof error == "string") {
-            this.exception = new Error(message || "");
-            this.exception.name = error;
-        } else if (!error) {
-            this.exception = new Error("Error");
-        } else {
-            this.exception = error;
-        }
-
-        return this;
-    }
-
-    function getCallback(behavior, args) {
-        var callArgAt = behavior.callArgAt;
-
-        if (callArgAt < 0) {
-            var callArgProp = behavior.callArgProp;
-
-            for (var i = 0, l = args.length; i < l; ++i) {
-                if (!callArgProp && typeof args[i] == "function") {
-                    return args[i];
-                }
-
-                if (callArgProp && args[i] &&
-                    typeof args[i][callArgProp] == "function") {
-                    return args[i][callArgProp];
-                }
-            }
-
-            return null;
-        }
-
-        return args[callArgAt];
-    }
-
-    function getCallbackError(behavior, func, args) {
-        if (behavior.callArgAt < 0) {
-            var msg;
-
-            if (behavior.callArgProp) {
-                msg = sinon.functionName(behavior.stub) +
-                    " expected to yield to '" + behavior.callArgProp +
-                    "', but no object with such a property was passed.";
-            } else {
-                msg = sinon.functionName(behavior.stub) +
-                    " expected to yield, but no callback was passed.";
-            }
-
-            if (args.length > 0) {
-                msg += " Received [" + join.call(args, ", ") + "]";
-            }
-
-            return msg;
-        }
-
-        return "argument at index " + behavior.callArgAt + " is not a function: " + func;
-    }
-
-    function callCallback(behavior, args) {
-        if (typeof behavior.callArgAt == "number") {
-            var func = getCallback(behavior, args);
-
-            if (typeof func != "function") {
-                throw new TypeError(getCallbackError(behavior, func, args));
-            }
-
-            if (behavior.callbackAsync) {
-                nextTick(function() {
-                    func.apply(behavior.callbackContext, behavior.callbackArguments);
-                });
-            } else {
-                func.apply(behavior.callbackContext, behavior.callbackArguments);
-            }
-        }
-    }
-
-    proto = {
-        create: function(stub) {
-            var behavior = sinon.extend({}, sinon.behavior);
-            delete behavior.create;
-            behavior.stub = stub;
-
-            return behavior;
-        },
-
-        isPresent: function() {
-            return (typeof this.callArgAt == 'number' ||
-                    this.exception ||
-                    typeof this.returnArgAt == 'number' ||
-                    this.returnThis ||
-                    this.returnValueDefined);
-        },
-
-        invoke: function(context, args) {
-            callCallback(this, args);
-
-            if (this.exception) {
-                throw this.exception;
-            } else if (typeof this.returnArgAt == 'number') {
-                return args[this.returnArgAt];
-            } else if (this.returnThis) {
-                return context;
-            }
-
-            return this.returnValue;
-        },
-
-        onCall: function(index) {
-            return this.stub.onCall(index);
-        },
-
-        onFirstCall: function() {
-            return this.stub.onFirstCall();
-        },
-
-        onSecondCall: function() {
-            return this.stub.onSecondCall();
-        },
-
-        onThirdCall: function() {
-            return this.stub.onThirdCall();
-        },
-
-        withArgs: function(/* arguments */) {
-            throw new Error('Defining a stub by invoking "stub.onCall(...).withArgs(...)" is not supported. ' +
-                            'Use "stub.withArgs(...).onCall(...)" to define sequential behavior for calls with certain arguments.');
-        },
-
-        callsArg: function callsArg(pos) {
-            if (typeof pos != "number") {
-                throw new TypeError("argument index is not number");
-            }
-
-            this.callArgAt = pos;
-            this.callbackArguments = [];
-            this.callbackContext = undefined;
-            this.callArgProp = undefined;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        callsArgOn: function callsArgOn(pos, context) {
-            if (typeof pos != "number") {
-                throw new TypeError("argument index is not number");
-            }
-            if (typeof context != "object") {
-                throw new TypeError("argument context is not an object");
-            }
-
-            this.callArgAt = pos;
-            this.callbackArguments = [];
-            this.callbackContext = context;
-            this.callArgProp = undefined;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        callsArgWith: function callsArgWith(pos) {
-            if (typeof pos != "number") {
-                throw new TypeError("argument index is not number");
-            }
-
-            this.callArgAt = pos;
-            this.callbackArguments = slice.call(arguments, 1);
-            this.callbackContext = undefined;
-            this.callArgProp = undefined;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        callsArgOnWith: function callsArgWith(pos, context) {
-            if (typeof pos != "number") {
-                throw new TypeError("argument index is not number");
-            }
-            if (typeof context != "object") {
-                throw new TypeError("argument context is not an object");
-            }
-
-            this.callArgAt = pos;
-            this.callbackArguments = slice.call(arguments, 2);
-            this.callbackContext = context;
-            this.callArgProp = undefined;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        yields: function () {
-            this.callArgAt = -1;
-            this.callbackArguments = slice.call(arguments, 0);
-            this.callbackContext = undefined;
-            this.callArgProp = undefined;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        yieldsOn: function (context) {
-            if (typeof context != "object") {
-                throw new TypeError("argument context is not an object");
-            }
-
-            this.callArgAt = -1;
-            this.callbackArguments = slice.call(arguments, 1);
-            this.callbackContext = context;
-            this.callArgProp = undefined;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        yieldsTo: function (prop) {
-            this.callArgAt = -1;
-            this.callbackArguments = slice.call(arguments, 1);
-            this.callbackContext = undefined;
-            this.callArgProp = prop;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-        yieldsToOn: function (prop, context) {
-            if (typeof context != "object") {
-                throw new TypeError("argument context is not an object");
-            }
-
-            this.callArgAt = -1;
-            this.callbackArguments = slice.call(arguments, 2);
-            this.callbackContext = context;
-            this.callArgProp = prop;
-            this.callbackAsync = false;
-
-            return this;
-        },
-
-
-        "throws": throwsException,
-        throwsException: throwsException,
-
-        returns: function returns(value) {
-            this.returnValue = value;
-            this.returnValueDefined = true;
-
-            return this;
-        },
-
-        returnsArg: function returnsArg(pos) {
-            if (typeof pos != "number") {
-                throw new TypeError("argument index is not number");
-            }
-
-            this.returnArgAt = pos;
-
-            return this;
-        },
-
-        returnsThis: function returnsThis() {
-            this.returnThis = true;
-
-            return this;
-        }
-    };
-
-    // create asynchronous versions of callsArg* and yields* methods
-    for (var method in proto) {
-        // need to avoid creating anotherasync versions of the newly added async methods
-        if (proto.hasOwnProperty(method) &&
-            method.match(/^(callsArg|yields)/) &&
-            !method.match(/Async/)) {
-            proto[method + 'Async'] = (function (syncFnName) {
-                return function () {
-                    var result = this[syncFnName].apply(this, arguments);
-                    this.callbackAsync = true;
-                    return result;
-                };
-            })(method);
-        }
-    }
-
-    if (commonJSModule) {
-        module.exports = proto;
-    } else {
-        sinon.behavior = proto;
-    }
-}(typeof sinon == "object" && sinon || null));
-/**
- * @depend ../sinon.js
- * @depend spy.js
- * @depend behavior.js
- */
-/*jslint eqeqeq: false, onevar: false*/
-/*global module, require, sinon*/
-/**
- * Stub functions
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== 'undefined' && module.exports;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function stub(object, property, func) {
-        if (!!func && typeof func != "function") {
-            throw new TypeError("Custom stub should be function");
-        }
-
-        var wrapper;
-
-        if (func) {
-            wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func;
-        } else {
-            wrapper = stub.create();
-        }
-
-        if (!object && typeof property === "undefined") {
-            return sinon.stub.create();
-        }
-
-        if (typeof property === "undefined" && typeof object == "object") {
-            for (var prop in object) {
-                if (typeof object[prop] === "function") {
-                    stub(object, prop);
-                }
-            }
-
-            return object;
-        }
-
-        return sinon.wrapMethod(object, property, wrapper);
-    }
-
-    function getDefaultBehavior(stub) {
-        return stub.defaultBehavior || getParentBehaviour(stub) || sinon.behavior.create(stub);
-    }
-
-    function getParentBehaviour(stub) {
-        return (stub.parent && getCurrentBehavior(stub.parent));
-    }
-
-    function getCurrentBehavior(stub) {
-        var behavior = stub.behaviors[stub.callCount - 1];
-        return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stub);
-    }
-
-    var uuid = 0;
-
-    sinon.extend(stub, (function () {
-        var proto = {
-            create: function create() {
-                var functionStub = function () {
-                    return getCurrentBehavior(functionStub).invoke(this, arguments);
-                };
-
-                functionStub.id = "stub#" + uuid++;
-                var orig = functionStub;
-                functionStub = sinon.spy.create(functionStub);
-                functionStub.func = orig;
-
-                sinon.extend(functionStub, stub);
-                functionStub._create = sinon.stub.create;
-                functionStub.displayName = "stub";
-                functionStub.toString = sinon.functionToString;
-
-                functionStub.defaultBehavior = null;
-                functionStub.behaviors = [];
-
-                return functionStub;
-            },
-
-            resetBehavior: function () {
-                var i;
-
-                this.defaultBehavior = null;
-                this.behaviors = [];
-
-                delete this.returnValue;
-                delete this.returnArgAt;
-                this.returnThis = false;
-
-                if (this.fakes) {
-                    for (i = 0; i < this.fakes.length; i++) {
-                        this.fakes[i].resetBehavior();
-                    }
-                }
-            },
-
-            onCall: function(index) {
-                if (!this.behaviors[index]) {
-                    this.behaviors[index] = sinon.behavior.create(this);
-                }
-
-                return this.behaviors[index];
-            },
-
-            onFirstCall: function() {
-                return this.onCall(0);
-            },
-
-            onSecondCall: function() {
-                return this.onCall(1);
-            },
-
-            onThirdCall: function() {
-                return this.onCall(2);
-            }
-        };
-
-        for (var method in sinon.behavior) {
-            if (sinon.behavior.hasOwnProperty(method) &&
-                !proto.hasOwnProperty(method) &&
-                method != 'create' &&
-                method != 'withArgs' &&
-                method != 'invoke') {
-                proto[method] = (function(behaviorMethod) {
-                    return function() {
-                        this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this);
-                        this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments);
-                        return this;
-                    };
-                }(method));
-            }
-        }
-
-        return proto;
-    }()));
-
-    if (commonJSModule) {
-        module.exports = stub;
-    } else {
-        sinon.stub = stub;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend ../sinon.js
- * @depend stub.js
- */
-/*jslint eqeqeq: false, onevar: false, nomen: false*/
-/*global module, require, sinon*/
-/**
- * Mock functions.
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== 'undefined' && module.exports;
-    var push = [].push;
-    var match;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    match = sinon.match;
-
-    if (!match && commonJSModule) {
-        match = require("./match");
-    }
-
-    function mock(object) {
-        if (!object) {
-            return sinon.expectation.create("Anonymous mock");
-        }
-
-        return mock.create(object);
-    }
-
-    sinon.mock = mock;
-
-    sinon.extend(mock, (function () {
-        function each(collection, callback) {
-            if (!collection) {
-                return;
-            }
-
-            for (var i = 0, l = collection.length; i < l; i += 1) {
-                callback(collection[i]);
-            }
-        }
-
-        return {
-            create: function create(object) {
-                if (!object) {
-                    throw new TypeError("object is null");
-                }
-
-                var mockObject = sinon.extend({}, mock);
-                mockObject.object = object;
-                delete mockObject.create;
-
-                return mockObject;
-            },
-
-            expects: function expects(method) {
-                if (!method) {
-                    throw new TypeError("method is falsy");
-                }
-
-                if (!this.expectations) {
-                    this.expectations = {};
-                    this.proxies = [];
-                }
-
-                if (!this.expectations[method]) {
-                    this.expectations[method] = [];
-                    var mockObject = this;
-
-                    sinon.wrapMethod(this.object, method, function () {
-                        return mockObject.invokeMethod(method, this, arguments);
-                    });
-
-                    push.call(this.proxies, method);
-                }
-
-                var expectation = sinon.expectation.create(method);
-                push.call(this.expectations[method], expectation);
-
-                return expectation;
-            },
-
-            restore: function restore() {
-                var object = this.object;
-
-                each(this.proxies, function (proxy) {
-                    if (typeof object[proxy].restore == "function") {
-                        object[proxy].restore();
-                    }
-                });
-            },
-
-            verify: function verify() {
-                var expectations = this.expectations || {};
-                var messages = [], met = [];
-
-                each(this.proxies, function (proxy) {
-                    each(expectations[proxy], function (expectation) {
-                        if (!expectation.met()) {
-                            push.call(messages, expectation.toString());
-                        } else {
-                            push.call(met, expectation.toString());
-                        }
-                    });
-                });
-
-                this.restore();
-
-                if (messages.length > 0) {
-                    sinon.expectation.fail(messages.concat(met).join("\n"));
-                } else {
-                    sinon.expectation.pass(messages.concat(met).join("\n"));
-                }
-
-                return true;
-            },
-
-            invokeMethod: function invokeMethod(method, thisValue, args) {
-                var expectations = this.expectations && this.expectations[method];
-                var length = expectations && expectations.length || 0, i;
-
-                for (i = 0; i < length; i += 1) {
-                    if (!expectations[i].met() &&
-                        expectations[i].allowsCall(thisValue, args)) {
-                        return expectations[i].apply(thisValue, args);
-                    }
-                }
-
-                var messages = [], available, exhausted = 0;
-
-                for (i = 0; i < length; i += 1) {
-                    if (expectations[i].allowsCall(thisValue, args)) {
-                        available = available || expectations[i];
-                    } else {
-                        exhausted += 1;
-                    }
-                    push.call(messages, "    " + expectations[i].toString());
-                }
-
-                if (exhausted === 0) {
-                    return available.apply(thisValue, args);
-                }
-
-                messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({
-                    proxy: method,
-                    args: args
-                }));
-
-                sinon.expectation.fail(messages.join("\n"));
-            }
-        };
-    }()));
-
-    var times = sinon.timesInWords;
-
-    sinon.expectation = (function () {
-        var slice = Array.prototype.slice;
-        var _invoke = sinon.spy.invoke;
-
-        function callCountInWords(callCount) {
-            if (callCount == 0) {
-                return "never called";
-            } else {
-                return "called " + times(callCount);
-            }
-        }
-
-        function expectedCallCountInWords(expectation) {
-            var min = expectation.minCalls;
-            var max = expectation.maxCalls;
-
-            if (typeof min == "number" && typeof max == "number") {
-                var str = times(min);
-
-                if (min != max) {
-                    str = "at least " + str + " and at most " + times(max);
-                }
-
-                return str;
-            }
-
-            if (typeof min == "number") {
-                return "at least " + times(min);
-            }
-
-            return "at most " + times(max);
-        }
-
-        function receivedMinCalls(expectation) {
-            var hasMinLimit = typeof expectation.minCalls == "number";
-            return !hasMinLimit || expectation.callCount >= expectation.minCalls;
-        }
-
-        function receivedMaxCalls(expectation) {
-            if (typeof expectation.maxCalls != "number") {
-                return false;
-            }
-
-            return expectation.callCount == expectation.maxCalls;
-        }
-
-        function verifyMatcher(possibleMatcher, arg){
-            if (match && match.isMatcher(possibleMatcher)) {
-                return possibleMatcher.test(arg);
-            } else {
-                return true;
-            }
-        }
-
-        return {
-            minCalls: 1,
-            maxCalls: 1,
-
-            create: function create(methodName) {
-                var expectation = sinon.extend(sinon.stub.create(), sinon.expectation);
-                delete expectation.create;
-                expectation.method = methodName;
-
-                return expectation;
-            },
-
-            invoke: function invoke(func, thisValue, args) {
-                this.verifyCallAllowed(thisValue, args);
-
-                return _invoke.apply(this, arguments);
-            },
-
-            atLeast: function atLeast(num) {
-                if (typeof num != "number") {
-                    throw new TypeError("'" + num + "' is not number");
-                }
-
-                if (!this.limitsSet) {
-                    this.maxCalls = null;
-                    this.limitsSet = true;
-                }
-
-                this.minCalls = num;
-
-                return this;
-            },
-
-            atMost: function atMost(num) {
-                if (typeof num != "number") {
-                    throw new TypeError("'" + num + "' is not number");
-                }
-
-                if (!this.limitsSet) {
-                    this.minCalls = null;
-                    this.limitsSet = true;
-                }
-
-                this.maxCalls = num;
-
-                return this;
-            },
-
-            never: function never() {
-                return this.exactly(0);
-            },
-
-            once: function once() {
-                return this.exactly(1);
-            },
-
-            twice: function twice() {
-                return this.exactly(2);
-            },
-
-            thrice: function thrice() {
-                return this.exactly(3);
-            },
-
-            exactly: function exactly(num) {
-                if (typeof num != "number") {
-                    throw new TypeError("'" + num + "' is not a number");
-                }
-
-                this.atLeast(num);
-                return this.atMost(num);
-            },
-
-            met: function met() {
-                return !this.failed && receivedMinCalls(this);
-            },
-
-            verifyCallAllowed: function verifyCallAllowed(thisValue, args) {
-                if (receivedMaxCalls(this)) {
-                    this.failed = true;
-                    sinon.expectation.fail(this.method + " already called " + times(this.maxCalls));
-                }
-
-                if ("expectedThis" in this && this.expectedThis !== thisValue) {
-                    sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " +
-                        this.expectedThis);
-                }
-
-                if (!("expectedArguments" in this)) {
-                    return;
-                }
-
-                if (!args) {
-                    sinon.expectation.fail(this.method + " received no arguments, expected " +
-                        sinon.format(this.expectedArguments));
-                }
-
-                if (args.length < this.expectedArguments.length) {
-                    sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) +
-                        "), expected " + sinon.format(this.expectedArguments));
-                }
-
-                if (this.expectsExactArgCount &&
-                    args.length != this.expectedArguments.length) {
-                    sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) +
-                        "), expected " + sinon.format(this.expectedArguments));
-                }
-
-                for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
-
-                    if (!verifyMatcher(this.expectedArguments[i],args[i])) {
-                        sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
-                            ", didn't match " + this.expectedArguments.toString());
-                    }
-
-                    if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
-                        sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
-                            ", expected " + sinon.format(this.expectedArguments));
-                    }
-                }
-            },
-
-            allowsCall: function allowsCall(thisValue, args) {
-                if (this.met() && receivedMaxCalls(this)) {
-                    return false;
-                }
-
-                if ("expectedThis" in this && this.expectedThis !== thisValue) {
-                    return false;
-                }
-
-                if (!("expectedArguments" in this)) {
-                    return true;
-                }
-
-                args = args || [];
-
-                if (args.length < this.expectedArguments.length) {
-                    return false;
-                }
-
-                if (this.expectsExactArgCount &&
-                    args.length != this.expectedArguments.length) {
-                    return false;
-                }
-
-                for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
-                    if (!verifyMatcher(this.expectedArguments[i],args[i])) {
-                        return false;
-                    }
-
-                    if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
-                        return false;
-                    }
-                }
-
-                return true;
-            },
-
-            withArgs: function withArgs() {
-                this.expectedArguments = slice.call(arguments);
-                return this;
-            },
-
-            withExactArgs: function withExactArgs() {
-                this.withArgs.apply(this, arguments);
-                this.expectsExactArgCount = true;
-                return this;
-            },
-
-            on: function on(thisValue) {
-                this.expectedThis = thisValue;
-                return this;
-            },
-
-            toString: function () {
-                var args = (this.expectedArguments || []).slice();
-
-                if (!this.expectsExactArgCount) {
-                    push.call(args, "[...]");
-                }
-
-                var callStr = sinon.spyCall.toString.call({
-                    proxy: this.method || "anonymous mock expectation",
-                    args: args
-                });
-
-                var message = callStr.replace(", [...", "[, ...") + " " +
-                    expectedCallCountInWords(this);
-
-                if (this.met()) {
-                    return "Expectation met: " + message;
-                }
-
-                return "Expected " + message + " (" +
-                    callCountInWords(this.callCount) + ")";
-            },
-
-            verify: function verify() {
-                if (!this.met()) {
-                    sinon.expectation.fail(this.toString());
-                } else {
-                    sinon.expectation.pass(this.toString());
-                }
-
-                return true;
-            },
-
-            pass: function(message) {
-              sinon.assert.pass(message);
-            },
-            fail: function (message) {
-                var exception = new Error(message);
-                exception.name = "ExpectationError";
-
-                throw exception;
-            }
-        };
-    }());
-
-    if (commonJSModule) {
-        module.exports = mock;
-    } else {
-        sinon.mock = mock;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend ../sinon.js
- * @depend stub.js
- * @depend mock.js
- */
-/*jslint eqeqeq: false, onevar: false, forin: true*/
-/*global module, require, sinon*/
-/**
- * Collections of stubs, spies and mocks.
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== 'undefined' && module.exports;
-    var push = [].push;
-    var hasOwnProperty = Object.prototype.hasOwnProperty;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function getFakes(fakeCollection) {
-        if (!fakeCollection.fakes) {
-            fakeCollection.fakes = [];
-        }
-
-        return fakeCollection.fakes;
-    }
-
-    function each(fakeCollection, method) {
-        var fakes = getFakes(fakeCollection);
-
-        for (var i = 0, l = fakes.length; i < l; i += 1) {
-            if (typeof fakes[i][method] == "function") {
-                fakes[i][method]();
-            }
-        }
-    }
-
-    function compact(fakeCollection) {
-        var fakes = getFakes(fakeCollection);
-        var i = 0;
-        while (i < fakes.length) {
-          fakes.splice(i, 1);
-        }
-    }
-
-    var collection = {
-        verify: function resolve() {
-            each(this, "verify");
-        },
-
-        restore: function restore() {
-            each(this, "restore");
-            compact(this);
-        },
-
-        verifyAndRestore: function verifyAndRestore() {
-            var exception;
-
-            try {
-                this.verify();
-            } catch (e) {
-                exception = e;
-            }
-
-            this.restore();
-
-            if (exception) {
-                throw exception;
-            }
-        },
-
-        add: function add(fake) {
-            push.call(getFakes(this), fake);
-            return fake;
-        },
-
-        spy: function spy() {
-            return this.add(sinon.spy.apply(sinon, arguments));
-        },
-
-        stub: function stub(object, property, value) {
-            if (property) {
-                var original = object[property];
-
-                if (typeof original != "function") {
-                    if (!hasOwnProperty.call(object, property)) {
-                        throw new TypeError("Cannot stub non-existent own property " + property);
-                    }
-
-                    object[property] = value;
-
-                    return this.add({
-                        restore: function () {
-                            object[property] = original;
-                        }
-                    });
-                }
-            }
-            if (!property && !!object && typeof object == "object") {
-                var stubbedObj = sinon.stub.apply(sinon, arguments);
-
-                for (var prop in stubbedObj) {
-                    if (typeof stubbedObj[prop] === "function") {
-                        this.add(stubbedObj[prop]);
-                    }
-                }
-
-                return stubbedObj;
-            }
-
-            return this.add(sinon.stub.apply(sinon, arguments));
-        },
-
-        mock: function mock() {
-            return this.add(sinon.mock.apply(sinon, arguments));
-        },
-
-        inject: function inject(obj) {
-            var col = this;
-
-            obj.spy = function () {
-                return col.spy.apply(col, arguments);
-            };
-
-            obj.stub = function () {
-                return col.stub.apply(col, arguments);
-            };
-
-            obj.mock = function () {
-                return col.mock.apply(col, arguments);
-            };
-
-            return obj;
-        }
-    };
-
-    if (commonJSModule) {
-        module.exports = collection;
-    } else {
-        sinon.collection = collection;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/
-/*global module, require, window*/
-/**
- * Fake timer API
- * setTimeout
- * setInterval
- * clearTimeout
- * clearInterval
- * tick
- * reset
- * Date
- *
- * Inspired by jsUnitMockTimeOut from JsUnit
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-if (typeof sinon == "undefined") {
-    var sinon = {};
-}
-
-(function (global) {
-    // node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref()
-    // browsers, a number.
-    // see https://github.com/cjohansen/Sinon.JS/pull/436
-    var timeoutResult = setTimeout(function() {}, 0);
-    var addTimerReturnsObject = typeof timeoutResult === 'object';
-    clearTimeout(timeoutResult);
-
-    var id = 1;
-
-    function addTimer(args, recurring) {
-        if (args.length === 0) {
-            throw new Error("Function requires at least 1 parameter");
-        }
-
-        if (typeof args[0] === "undefined") {
-            throw new Error("Callback must be provided to timer calls");
-        }
-
-        var toId = id++;
-        var delay = args[1] || 0;
-
-        if (!this.timeouts) {
-            this.timeouts = {};
-        }
-
-        this.timeouts[toId] = {
-            id: toId,
-            func: args[0],
-            callAt: this.now + delay,
-            invokeArgs: Array.prototype.slice.call(args, 2)
-        };
-
-        if (recurring === true) {
-            this.timeouts[toId].interval = delay;
-        }
-
-        if (addTimerReturnsObject) {
-            return {
-                id: toId,
-                ref: function() {},
-                unref: function() {}
-            };
-        }
-        else {
-            return toId;
-        }
-    }
-
-    function parseTime(str) {
-        if (!str) {
-            return 0;
-        }
-
-        var strings = str.split(":");
-        var l = strings.length, i = l;
-        var ms = 0, parsed;
-
-        if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) {
-            throw new Error("tick only understands numbers and 'h:m:s'");
-        }
-
-        while (i--) {
-            parsed = parseInt(strings[i], 10);
-
-            if (parsed >= 60) {
-                throw new Error("Invalid time " + str);
-            }
-
-            ms += parsed * Math.pow(60, (l - i - 1));
-        }
-
-        return ms * 1000;
-    }
-
-    function createObject(object) {
-        var newObject;
-
-        if (Object.create) {
-            newObject = Object.create(object);
-        } else {
-            var F = function () {};
-            F.prototype = object;
-            newObject = new F();
-        }
-
-        newObject.Date.clock = newObject;
-        return newObject;
-    }
-
-    sinon.clock = {
-        now: 0,
-
-        create: function create(now) {
-            var clock = createObject(this);
-
-            if (typeof now == "number") {
-                clock.now = now;
-            }
-
-            if (!!now && typeof now == "object") {
-                throw new TypeError("now should be milliseconds since UNIX epoch");
-            }
-
-            return clock;
-        },
-
-        setTimeout: function setTimeout(callback, timeout) {
-            return addTimer.call(this, arguments, false);
-        },
-
-        clearTimeout: function clearTimeout(timerId) {
-            if (!this.timeouts) {
-                this.timeouts = [];
-            }
-
-            if (timerId in this.timeouts) {
-                delete this.timeouts[timerId];
-            }
-        },
-
-        setInterval: function setInterval(callback, timeout) {
-            return addTimer.call(this, arguments, true);
-        },
-
-        clearInterval: function clearInterval(timerId) {
-            this.clearTimeout(timerId);
-        },
-
-        setImmediate: function setImmediate(callback) {
-            var passThruArgs = Array.prototype.slice.call(arguments, 1);
-
-            return addTimer.call(this, [callback, 0].concat(passThruArgs), false);
-        },
-
-        clearImmediate: function clearImmediate(timerId) {
-            this.clearTimeout(timerId);
-        },
-
-        tick: function tick(ms) {
-            ms = typeof ms == "number" ? ms : parseTime(ms);
-            var tickFrom = this.now, tickTo = this.now + ms, previous = this.now;
-            var timer = this.firstTimerInRange(tickFrom, tickTo);
-
-            var firstException;
-            while (timer && tickFrom <= tickTo) {
-                if (this.timeouts[timer.id]) {
-                    tickFrom = this.now = timer.callAt;
-                    try {
-                      this.callTimer(timer);
-                    } catch (e) {
-                      firstException = firstException || e;
-                    }
-                }
-
-                timer = this.firstTimerInRange(previous, tickTo);
-                previous = tickFrom;
-            }
-
-            this.now = tickTo;
-
-            if (firstException) {
-              throw firstException;
-            }
-
-            return this.now;
-        },
-
-        firstTimerInRange: function (from, to) {
-            var timer, smallest = null, originalTimer;
-
-            for (var id in this.timeouts) {
-                if (this.timeouts.hasOwnProperty(id)) {
-                    if (this.timeouts[id].callAt < from || this.timeouts[id].callAt > to) {
-                        continue;
-                    }
-
-                    if (smallest === null || this.timeouts[id].callAt < smallest) {
-                        originalTimer = this.timeouts[id];
-                        smallest = this.timeouts[id].callAt;
-
-                        timer = {
-                            func: this.timeouts[id].func,
-                            callAt: this.timeouts[id].callAt,
-                            interval: this.timeouts[id].interval,
-                            id: this.timeouts[id].id,
-                            invokeArgs: this.timeouts[id].invokeArgs
-                        };
-                    }
-                }
-            }
-
-            return timer || null;
-        },
-
-        callTimer: function (timer) {
-            if (typeof timer.interval == "number") {
-                this.timeouts[timer.id].callAt += timer.interval;
-            } else {
-                delete this.timeouts[timer.id];
-            }
-
-            try {
-                if (typeof timer.func == "function") {
-                    timer.func.apply(null, timer.invokeArgs);
-                } else {
-                    eval(timer.func);
-                }
-            } catch (e) {
-              var exception = e;
-            }
-
-            if (!this.timeouts[timer.id]) {
-                if (exception) {
-                  throw exception;
-                }
-                return;
-            }
-
-            if (exception) {
-              throw exception;
-            }
-        },
-
-        reset: function reset() {
-            this.timeouts = {};
-        },
-
-        Date: (function () {
-            var NativeDate = Date;
-
-            function ClockDate(year, month, date, hour, minute, second, ms) {
-                // Defensive and verbose to avoid potential harm in passing
-                // explicit undefined when user does not pass argument
-                switch (arguments.length) {
-                case 0:
-                    return new NativeDate(ClockDate.clock.now);
-                case 1:
-                    return new NativeDate(year);
-                case 2:
-                    return new NativeDate(year, month);
-                case 3:
-                    return new NativeDate(year, month, date);
-                case 4:
-                    return new NativeDate(year, month, date, hour);
-                case 5:
-                    return new NativeDate(year, month, date, hour, minute);
-                case 6:
-                    return new NativeDate(year, month, date, hour, minute, second);
-                default:
-                    return new NativeDate(year, month, date, hour, minute, second, ms);
-                }
-            }
-
-            return mirrorDateProperties(ClockDate, NativeDate);
-        }())
-    };
-
-    function mirrorDateProperties(target, source) {
-        if (source.now) {
-            target.now = function now() {
-                return target.clock.now;
-            };
-        } else {
-            delete target.now;
-        }
-
-        if (source.toSource) {
-            target.toSource = function toSource() {
-                return source.toSource();
-            };
-        } else {
-            delete target.toSource;
-        }
-
-        target.toString = function toString() {
-            return source.toString();
-        };
-
-        target.prototype = source.prototype;
-        target.parse = source.parse;
-        target.UTC = source.UTC;
-        target.prototype.toUTCString = source.prototype.toUTCString;
-
-        for (var prop in source) {
-            if (source.hasOwnProperty(prop)) {
-                target[prop] = source[prop];
-            }
-        }
-
-        return target;
-    }
-
-    var methods = ["Date", "setTimeout", "setInterval",
-                   "clearTimeout", "clearInterval"];
-
-    if (typeof global.setImmediate !== "undefined") {
-        methods.push("setImmediate");
-    }
-
-    if (typeof global.clearImmediate !== "undefined") {
-        methods.push("clearImmediate");
-    }
-
-    function restore() {
-        var method;
-
-        for (var i = 0, l = this.methods.length; i < l; i++) {
-            method = this.methods[i];
-
-            if (global[method].hadOwnProperty) {
-                global[method] = this["_" + method];
-            } else {
-                try {
-                    delete global[method];
-                } catch (e) {}
-            }
-        }
-
-        // Prevent multiple executions which will completely remove these props
-        this.methods = [];
-    }
-
-    function stubGlobal(method, clock) {
-        clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(global, method);
-        clock["_" + method] = global[method];
-
-        if (method == "Date") {
-            var date = mirrorDateProperties(clock[method], global[method]);
-            global[method] = date;
-        } else {
-            global[method] = function () {
-                return clock[method].apply(clock, arguments);
-            };
-
-            for (var prop in clock[method]) {
-                if (clock[method].hasOwnProperty(prop)) {
-                    global[method][prop] = clock[method][prop];
-                }
-            }
-        }
-
-        global[method].clock = clock;
-    }
-
-    sinon.useFakeTimers = function useFakeTimers(now) {
-        var clock = sinon.clock.create(now);
-        clock.restore = restore;
-        clock.methods = Array.prototype.slice.call(arguments,
-                                                   typeof now == "number" ? 1 : 0);
-
-        if (clock.methods.length === 0) {
-            clock.methods = methods;
-        }
-
-        for (var i = 0, l = clock.methods.length; i < l; i++) {
-            stubGlobal(clock.methods[i], clock);
-        }
-
-        return clock;
-    };
-}(typeof global != "undefined" && typeof global !== "function" ? global : this));
-
-sinon.timers = {
-    setTimeout: setTimeout,
-    clearTimeout: clearTimeout,
-    setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
-    clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate: undefined),
-    setInterval: setInterval,
-    clearInterval: clearInterval,
-    Date: Date
-};
-
-if (typeof module !== 'undefined' && module.exports) {
-    module.exports = sinon;
-}
-
-/*jslint eqeqeq: false, onevar: false*/
-/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/
-/**
- * Minimal Event interface implementation
- *
- * Original implementation by Sven Fuchs: https://gist.github.com/995028
- * Modifications and tests by Christian Johansen.
- *
- * @author Sven Fuchs (svenfuchs at artweb-design.de)
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2011 Sven Fuchs, Christian Johansen
- */
-
-if (typeof sinon == "undefined") {
-    this.sinon = {};
-}
-
-(function () {
-    var push = [].push;
-
-    sinon.Event = function Event(type, bubbles, cancelable, target) {
-        this.initEvent(type, bubbles, cancelable, target);
-    };
-
-    sinon.Event.prototype = {
-        initEvent: function(type, bubbles, cancelable, target) {
-            this.type = type;
-            this.bubbles = bubbles;
-            this.cancelable = cancelable;
-            this.target = target;
-        },
-
-        stopPropagation: function () {},
-
-        preventDefault: function () {
-            this.defaultPrevented = true;
-        }
-    };
-
-    sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) {
-        this.initEvent(type, false, false, target);
-        this.loaded = progressEventRaw.loaded || null;
-        this.total = progressEventRaw.total || null;
-    };
-
-    sinon.ProgressEvent.prototype = new sinon.Event();
-
-    sinon.ProgressEvent.prototype.constructor =  sinon.ProgressEvent;
-
-    sinon.CustomEvent = function CustomEvent(type, customData, target) {
-        this.initEvent(type, false, false, target);
-        this.detail = customData.detail || null;
-    };
-
-    sinon.CustomEvent.prototype = new sinon.Event();
-
-    sinon.CustomEvent.prototype.constructor =  sinon.CustomEvent;
-
-    sinon.EventTarget = {
-        addEventListener: function addEventListener(event, listener) {
-            this.eventListeners = this.eventListeners || {};
-            this.eventListeners[event] = this.eventListeners[event] || [];
-            push.call(this.eventListeners[event], listener);
-        },
-
-        removeEventListener: function removeEventListener(event, listener) {
-            var listeners = this.eventListeners && this.eventListeners[event] || [];
-
-            for (var i = 0, l = listeners.length; i < l; ++i) {
-                if (listeners[i] == listener) {
-                    return listeners.splice(i, 1);
-                }
-            }
-        },
-
-        dispatchEvent: function dispatchEvent(event) {
-            var type = event.type;
-            var listeners = this.eventListeners && this.eventListeners[type] || [];
-
-            for (var i = 0; i < listeners.length; i++) {
-                if (typeof listeners[i] == "function") {
-                    listeners[i].call(this, event);
-                } else {
-                    listeners[i].handleEvent(event);
-                }
-            }
-
-            return !!event.defaultPrevented;
-        }
-    };
-}());
-
-/**
- * @depend ../../sinon.js
- * @depend event.js
- */
-/*jslint eqeqeq: false, onevar: false*/
-/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/
-/**
- * Fake XMLHttpRequest object
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-// wrapper for global
-(function(global) {
-    if (typeof sinon === "undefined") {
-        global.sinon = {};
-    }
-
-    var supportsProgress = typeof ProgressEvent !== "undefined";
-    var supportsCustomEvent = typeof CustomEvent !== "undefined";
-    sinon.xhr = { XMLHttpRequest: global.XMLHttpRequest };
-    var xhr = sinon.xhr;
-    xhr.GlobalXMLHttpRequest = global.XMLHttpRequest;
-    xhr.GlobalActiveXObject = global.ActiveXObject;
-    xhr.supportsActiveX = typeof xhr.GlobalActiveXObject != "undefined";
-    xhr.supportsXHR = typeof xhr.GlobalXMLHttpRequest != "undefined";
-    xhr.workingXHR = xhr.supportsXHR ? xhr.GlobalXMLHttpRequest : xhr.supportsActiveX
-                                     ? function() { return new xhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false;
-    xhr.supportsCORS = 'withCredentials' in (new sinon.xhr.GlobalXMLHttpRequest());
-
-    /*jsl:ignore*/
-    var unsafeHeaders = {
-        "Accept-Charset": true,
-        "Accept-Encoding": true,
-        "Connection": true,
-        "Content-Length": true,
-        "Cookie": true,
-        "Cookie2": true,
-        "Content-Transfer-Encoding": true,
-        "Date": true,
-        "Expect": true,
-        "Host": true,
-        "Keep-Alive": true,
-        "Referer": true,
-        "TE": true,
-        "Trailer": true,
-        "Transfer-Encoding": true,
-        "Upgrade": true,
-        "User-Agent": true,
-        "Via": true
-    };
-    /*jsl:end*/
-
-    function FakeXMLHttpRequest() {
-        this.readyState = FakeXMLHttpRequest.UNSENT;
-        this.requestHeaders = {};
-        this.requestBody = null;
-        this.status = 0;
-        this.statusText = "";
-        this.upload = new UploadProgress();
-        if (sinon.xhr.supportsCORS) {
-            this.withCredentials = false;
-        }
-
-
-        var xhr = this;
-        var events = ["loadstart", "load", "abort", "loadend"];
-
-        function addEventListener(eventName) {
-            xhr.addEventListener(eventName, function (event) {
-                var listener = xhr["on" + eventName];
-
-                if (listener && typeof listener == "function") {
-                    listener.call(this, event);
-                }
-            });
-        }
-
-        for (var i = events.length - 1; i >= 0; i--) {
-            addEventListener(events[i]);
-        }
-
-        if (typeof FakeXMLHttpRequest.onCreate == "function") {
-            FakeXMLHttpRequest.onCreate(this);
-        }
-    }
-
-    // An upload object is created for each
-    // FakeXMLHttpRequest and allows upload
-    // events to be simulated using uploadProgress
-    // and uploadError.
-    function UploadProgress() {
-        this.eventListeners = {
-            "progress": [],
-            "load": [],
-            "abort": [],
-            "error": []
-        }
-    }
-
-    UploadProgress.prototype.addEventListener = function(event, listener) {
-        this.eventListeners[event].push(listener);
-    };
-
-    UploadProgress.prototype.removeEventListener = function(event, listener) {
-        var listeners = this.eventListeners[event] || [];
-
-        for (var i = 0, l = listeners.length; i < l; ++i) {
-            if (listeners[i] == listener) {
-                return listeners.splice(i, 1);
-            }
-        }
-    };
-
-    UploadProgress.prototype.dispatchEvent = function(event) {
-        var listeners = this.eventListeners[event.type] || [];
-
-        for (var i = 0, listener; (listener = listeners[i]) != null; i++) {
-            listener(event);
-        }
-    };
-
-    function verifyState(xhr) {
-        if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
-            throw new Error("INVALID_STATE_ERR");
-        }
-
-        if (xhr.sendFlag) {
-            throw new Error("INVALID_STATE_ERR");
-        }
-    }
-
-    // filtering to enable a white-list version of Sinon FakeXhr,
-    // where whitelisted requests are passed through to real XHR
-    function each(collection, callback) {
-        if (!collection) return;
-        for (var i = 0, l = collection.length; i < l; i += 1) {
-            callback(collection[i]);
-        }
-    }
-    function some(collection, callback) {
-        for (var index = 0; index < collection.length; index++) {
-            if(callback(collection[index]) === true) return true;
-        }
-        return false;
-    }
-    // largest arity in XHR is 5 - XHR#open
-    var apply = function(obj,method,args) {
-        switch(args.length) {
-        case 0: return obj[method]();
-        case 1: return obj[method](args[0]);
-        case 2: return obj[method](args[0],args[1]);
-        case 3: return obj[method](args[0],args[1],args[2]);
-        case 4: return obj[method](args[0],args[1],args[2],args[3]);
-        case 5: return obj[method](args[0],args[1],args[2],args[3],args[4]);
-        }
-    };
-
-    FakeXMLHttpRequest.filters = [];
-    FakeXMLHttpRequest.addFilter = function(fn) {
-        this.filters.push(fn)
-    };
-    var IE6Re = /MSIE 6/;
-    FakeXMLHttpRequest.defake = function(fakeXhr,xhrArgs) {
-        var xhr = new sinon.xhr.workingXHR();
-        each(["open","setRequestHeader","send","abort","getResponseHeader",
-              "getAllResponseHeaders","addEventListener","overrideMimeType","removeEventListener"],
-             function(method) {
-                 fakeXhr[method] = function() {
-                   return apply(xhr,method,arguments);
-                 };
-             });
-
-        var copyAttrs = function(args) {
-            each(args, function(attr) {
-              try {
-                fakeXhr[attr] = xhr[attr]
-              } catch(e) {
-                if(!IE6Re.test(navigator.userAgent)) throw e;
-              }
-            });
-        };
-
-        var stateChange = function() {
-            fakeXhr.readyState = xhr.readyState;
-            if(xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) {
-                copyAttrs(["status","statusText"]);
-            }
-            if(xhr.readyState >= FakeXMLHttpRequest.LOADING) {
-                copyAttrs(["responseText"]);
-            }
-            if(xhr.readyState === FakeXMLHttpRequest.DONE) {
-                copyAttrs(["responseXML"]);
-            }
-            if(fakeXhr.onreadystatechange) fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr });
-        };
-        if(xhr.addEventListener) {
-          for(var event in fakeXhr.eventListeners) {
-              if(fakeXhr.eventListeners.hasOwnProperty(event)) {
-                  each(fakeXhr.eventListeners[event],function(handler) {
-                      xhr.addEventListener(event, handler);
-                  });
-              }
-          }
-          xhr.addEventListener("readystatechange",stateChange);
-        } else {
-          xhr.onreadystatechange = stateChange;
-        }
-        apply(xhr,"open",xhrArgs);
-    };
-    FakeXMLHttpRequest.useFilters = false;
-
-    function verifyRequestOpened(xhr) {
-        if (xhr.readyState != FakeXMLHttpRequest.OPENED) {
-            throw new Error("INVALID_STATE_ERR - " + xhr.readyState);
-        }
-    }
-
-    function verifyRequestSent(xhr) {
-        if (xhr.readyState == FakeXMLHttpRequest.DONE) {
-            throw new Error("Request done");
-        }
-    }
-
-    function verifyHeadersReceived(xhr) {
-        if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) {
-            throw new Error("No headers received");
-        }
-    }
-
-    function verifyResponseBodyType(body) {
-        if (typeof body != "string") {
-            var error = new Error("Attempted to respond to fake XMLHttpRequest with " +
-                                 body + ", which is not a string.");
-            error.name = "InvalidBodyException";
-            throw error;
-        }
-    }
-
-    sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, {
-        async: true,
-
-        open: function open(method, url, async, username, password) {
-            this.method = method;
-            this.url = url;
-            this.async = typeof async == "boolean" ? async : true;
-            this.username = username;
-            this.password = password;
-            this.responseText = null;
-            this.responseXML = null;
-            this.requestHeaders = {};
-            this.sendFlag = false;
-            if(sinon.FakeXMLHttpRequest.useFilters === true) {
-                var xhrArgs = arguments;
-                var defake = some(FakeXMLHttpRequest.filters,function(filter) {
-                    return filter.apply(this,xhrArgs)
-                });
-                if (defake) {
-                  return sinon.FakeXMLHttpRequest.defake(this,arguments);
-                }
-            }
-            this.readyStateChange(FakeXMLHttpRequest.OPENED);
-        },
-
-        readyStateChange: function readyStateChange(state) {
-            this.readyState = state;
-
-            if (typeof this.onreadystatechange == "function") {
-                try {
-                    this.onreadystatechange();
-                } catch (e) {
-                    sinon.logError("Fake XHR onreadystatechange handler", e);
-                }
-            }
-
-            this.dispatchEvent(new sinon.Event("readystatechange"));
-
-            switch (this.readyState) {
-                case FakeXMLHttpRequest.DONE:
-                    this.dispatchEvent(new sinon.Event("load", false, false, this));
-                    this.dispatchEvent(new sinon.Event("loadend", false, false, this));
-                    this.upload.dispatchEvent(new sinon.Event("load", false, false, this));
-                    if (supportsProgress) {
-                        this.upload.dispatchEvent(new sinon.ProgressEvent('progress', {loaded: 100, total: 100}));
-                    }
-                    break;
-            }
-        },
-
-        setRequestHeader: function setRequestHeader(header, value) {
-            verifyState(this);
-
-            if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) {
-                throw new Error("Refused to set unsafe header \"" + header + "\"");
-            }
-
-            if (this.requestHeaders[header]) {
-                this.requestHeaders[header] += "," + value;
-            } else {
-                this.requestHeaders[header] = value;
-            }
-        },
-
-        // Helps testing
-        setResponseHeaders: function setResponseHeaders(headers) {
-            verifyRequestOpened(this);
-            this.responseHeaders = {};
-
-            for (var header in headers) {
-                if (headers.hasOwnProperty(header)) {
-                    this.responseHeaders[header] = headers[header];
-                }
-            }
-
-            if (this.async) {
-                this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED);
-            } else {
-                this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED;
-            }
-        },
-
-        // Currently treats ALL data as a DOMString (i.e. no Document)
-        send: function send(data) {
-            verifyState(this);
-
-            if (!/^(get|head)$/i.test(this.method)) {
-                if (this.requestHeaders["Content-Type"]) {
-                    var value = this.requestHeaders["Content-Type"].split(";");
-                    this.requestHeaders["Content-Type"] = value[0] + ";charset=utf-8";
-                } else {
-                    this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
-                }
-
-                this.requestBody = data;
-            }
-
-            this.errorFlag = false;
-            this.sendFlag = this.async;
-            this.readyStateChange(FakeXMLHttpRequest.OPENED);
-
-            if (typeof this.onSend == "function") {
-                this.onSend(this);
-            }
-
-            this.dispatchEvent(new sinon.Event("loadstart", false, false, this));
-        },
-
-        abort: function abort() {
-            this.aborted = true;
-            this.responseText = null;
-            this.errorFlag = true;
-            this.requestHeaders = {};
-
-            if (this.readyState > sinon.FakeXMLHttpRequest.UNSENT && this.sendFlag) {
-                this.readyStateChange(sinon.FakeXMLHttpRequest.DONE);
-                this.sendFlag = false;
-            }
-
-            this.readyState = sinon.FakeXMLHttpRequest.UNSENT;
-
-            this.dispatchEvent(new sinon.Event("abort", false, false, this));
-
-            this.upload.dispatchEvent(new sinon.Event("abort", false, false, this));
-
-            if (typeof this.onerror === "function") {
-                this.onerror();
-            }
-        },
-
-        getResponseHeader: function getResponseHeader(header) {
-            if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
-                return null;
-            }
-
-            if (/^Set-Cookie2?$/i.test(header)) {
-                return null;
-            }
-
-            header = header.toLowerCase();
-
-            for (var h in this.responseHeaders) {
-                if (h.toLowerCase() == header) {
-                    return this.responseHeaders[h];
-                }
-            }
-
-            return null;
-        },
-
-        getAllResponseHeaders: function getAllResponseHeaders() {
-            if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
-                return "";
-            }
-
-            var headers = "";
-
-            for (var header in this.responseHeaders) {
-                if (this.responseHeaders.hasOwnProperty(header) &&
-                    !/^Set-Cookie2?$/i.test(header)) {
-                    headers += header + ": " + this.responseHeaders[header] + "\r\n";
-                }
-            }
-
-            return headers;
-        },
-
-        setResponseBody: function setResponseBody(body) {
-            verifyRequestSent(this);
-            verifyHeadersReceived(this);
-            verifyResponseBodyType(body);
-
-            var chunkSize = this.chunkSize || 10;
-            var index = 0;
-            this.responseText = "";
-
-            do {
-                if (this.async) {
-                    this.readyStateChange(FakeXMLHttpRequest.LOADING);
-                }
-
-                this.responseText += body.substring(index, index + chunkSize);
-                index += chunkSize;
-            } while (index < body.length);
-
-            var type = this.getResponseHeader("Content-Type");
-
-            if (this.responseText &&
-                (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) {
-                try {
-                    this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText);
-                } catch (e) {
-                    // Unable to parse XML - no biggie
-                }
-            }
-
-            if (this.async) {
-                this.readyStateChange(FakeXMLHttpRequest.DONE);
-            } else {
-                this.readyState = FakeXMLHttpRequest.DONE;
-            }
-        },
-
-        respond: function respond(status, headers, body) {
-            this.status = typeof status == "number" ? status : 200;
-            this.statusText = FakeXMLHttpRequest.statusCodes[this.status];
-            this.setResponseHeaders(headers || {});
-            this.setResponseBody(body || "");
-        },
-
-        uploadProgress: function uploadProgress(progressEventRaw) {
-            if (supportsProgress) {
-                this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw));
-            }
-        },
-
-        uploadError: function uploadError(error) {
-            if (supportsCustomEvent) {
-                this.upload.dispatchEvent(new sinon.CustomEvent("error", {"detail": error}));
-            }
-        }
-    });
-
-    sinon.extend(FakeXMLHttpRequest, {
-        UNSENT: 0,
-        OPENED: 1,
-        HEADERS_RECEIVED: 2,
-        LOADING: 3,
-        DONE: 4
-    });
-
-    // Borrowed from JSpec
-    FakeXMLHttpRequest.parseXML = function parseXML(text) {
-        var xmlDoc;
-
-        if (typeof DOMParser != "undefined") {
-            var parser = new DOMParser();
-            xmlDoc = parser.parseFromString(text, "text/xml");
-        } else {
-            xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
-            xmlDoc.async = "false";
-            xmlDoc.loadXML(text);
-        }
-
-        return xmlDoc;
-    };
-
-    FakeXMLHttpRequest.statusCodes = {
-        100: "Continue",
-        101: "Switching Protocols",
-        200: "OK",
-        201: "Created",
-        202: "Accepted",
-        203: "Non-Authoritative Information",
-        204: "No Content",
-        205: "Reset Content",
-        206: "Partial Content",
-        300: "Multiple Choice",
-        301: "Moved Permanently",
-        302: "Found",
-        303: "See Other",
-        304: "Not Modified",
-        305: "Use Proxy",
-        307: "Temporary Redirect",
-        400: "Bad Request",
-        401: "Unauthorized",
-        402: "Payment Required",
-        403: "Forbidden",
-        404: "Not Found",
-        405: "Method Not Allowed",
-        406: "Not Acceptable",
-        407: "Proxy Authentication Required",
-        408: "Request Timeout",
-        409: "Conflict",
-        410: "Gone",
-        411: "Length Required",
-        412: "Precondition Failed",
-        413: "Request Entity Too Large",
-        414: "Request-URI Too Long",
-        415: "Unsupported Media Type",
-        416: "Requested Range Not Satisfiable",
-        417: "Expectation Failed",
-        422: "Unprocessable Entity",
-        500: "Internal Server Error",
-        501: "Not Implemented",
-        502: "Bad Gateway",
-        503: "Service Unavailable",
-        504: "Gateway Timeout",
-        505: "HTTP Version Not Supported"
-    };
-
-    sinon.useFakeXMLHttpRequest = function () {
-        sinon.FakeXMLHttpRequest.restore = function restore(keepOnCreate) {
-            if (xhr.supportsXHR) {
-                global.XMLHttpRequest = xhr.GlobalXMLHttpRequest;
-            }
-
-            if (xhr.supportsActiveX) {
-                global.ActiveXObject = xhr.GlobalActiveXObject;
-            }
-
-            delete sinon.FakeXMLHttpRequest.restore;
-
-            if (keepOnCreate !== true) {
-                delete sinon.FakeXMLHttpRequest.onCreate;
-            }
-        };
-        if (xhr.supportsXHR) {
-            global.XMLHttpRequest = sinon.FakeXMLHttpRequest;
-        }
-
-        if (xhr.supportsActiveX) {
-            global.ActiveXObject = function ActiveXObject(objId) {
-                if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) {
-
-                    return new sinon.FakeXMLHttpRequest();
-                }
-
-                return new xhr.GlobalActiveXObject(objId);
-            };
-        }
-
-        return sinon.FakeXMLHttpRequest;
-    };
-
-    sinon.FakeXMLHttpRequest = FakeXMLHttpRequest;
-
-})(typeof global === "object" ? global : this);
-
-if (typeof module !== 'undefined' && module.exports) {
-    module.exports = sinon;
-}
-
-/**
- * @depend fake_xml_http_request.js
- */
-/*jslint eqeqeq: false, onevar: false, regexp: false, plusplus: false*/
-/*global module, require, window*/
-/**
- * The Sinon "server" mimics a web server that receives requests from
- * sinon.FakeXMLHttpRequest and provides an API to respond to those requests,
- * both synchronously and asynchronously. To respond synchronously, canned
- * answers have to be provided upfront.
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-if (typeof sinon == "undefined") {
-    var sinon = {};
-}
-
-sinon.fakeServer = (function () {
-    var push = [].push;
-    function F() {}
-
-    function create(proto) {
-        F.prototype = proto;
-        return new F();
-    }
-
-    function responseArray(handler) {
-        var response = handler;
-
-        if (Object.prototype.toString.call(handler) != "[object Array]") {
-            response = [200, {}, handler];
-        }
-
-        if (typeof response[2] != "string") {
-            throw new TypeError("Fake server response body should be string, but was " +
-                                typeof response[2]);
-        }
-
-        return response;
-    }
-
-    var wloc = typeof window !== "undefined" ? window.location : {};
-    var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host);
-
-    function matchOne(response, reqMethod, reqUrl) {
-        var rmeth = response.method;
-        var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase();
-        var url = response.url;
-        var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl));
-
-        return matchMethod && matchUrl;
-    }
-
-    function match(response, request) {
-        var requestUrl = request.url;
-
-        if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) {
-            requestUrl = requestUrl.replace(rCurrLoc, "");
-        }
-
-        if (matchOne(response, this.getHTTPMethod(request), requestUrl)) {
-            if (typeof response.response == "function") {
-                var ru = response.url;
-                var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []);
-                return response.response.apply(response, args);
-            }
-
-            return true;
-        }
-
-        return false;
-    }
-
-    function log(response, request) {
-        var str;
-
-        str =  "Request:\n"  + sinon.format(request)  + "\n\n";
-        str += "Response:\n" + sinon.format(response) + "\n\n";
-
-        sinon.log(str);
-    }
-
-    return {
-        create: function () {
-            var server = create(this);
-            this.xhr = sinon.useFakeXMLHttpRequest();
-            server.requests = [];
-
-            this.xhr.onCreate = function (xhrObj) {
-                server.addRequest(xhrObj);
-            };
-
-            return server;
-        },
-
-        addRequest: function addRequest(xhrObj) {
-            var server = this;
-            push.call(this.requests, xhrObj);
-
-            xhrObj.onSend = function () {
-                server.handleRequest(this);
-
-                if (server.autoRespond && !server.responding) {
-                    setTimeout(function () {
-                        server.responding = false;
-                        server.respond();
-                    }, server.autoRespondAfter || 10);
-
-                    server.responding = true;
-                }
-            };
-        },
-
-        getHTTPMethod: function getHTTPMethod(request) {
-            if (this.fakeHTTPMethods && /post/i.test(request.method)) {
-                var matches = (request.requestBody || "").match(/_method=([^\b;]+)/);
-                return !!matches ? matches[1] : request.method;
-            }
-
-            return request.method;
-        },
-
-        handleRequest: function handleRequest(xhr) {
-            if (xhr.async) {
-                if (!this.queue) {
-                    this.queue = [];
-                }
-
-                push.call(this.queue, xhr);
-            } else {
-                this.processRequest(xhr);
-            }
-        },
-
-        respondWith: function respondWith(method, url, body) {
-            if (arguments.length == 1 && typeof method != "function") {
-                this.response = responseArray(method);
-                return;
-            }
-
-            if (!this.responses) { this.responses = []; }
-
-            if (arguments.length == 1) {
-                body = method;
-                url = method = null;
-            }
-
-            if (arguments.length == 2) {
-                body = url;
-                url = method;
-                method = null;
-            }
-
-            push.call(this.responses, {
-                method: method,
-                url: url,
-                response: typeof body == "function" ? body : responseArray(body)
-            });
-        },
-
-        respond: function respond() {
-            if (arguments.length > 0) this.respondWith.apply(this, arguments);
-            var queue = this.queue || [];
-            var requests = queue.splice(0);
-            var request;
-
-            while(request = requests.shift()) {
-                this.processRequest(request);
-            }
-        },
-
-        processRequest: function processRequest(request) {
-            try {
-                if (request.aborted) {
-                    return;
-                }
-
-                var response = this.response || [404, {}, ""];
-
-                if (this.responses) {
-                    for (var l = this.responses.length, i = l - 1; i >= 0; i--) {
-                        if (match.call(this, this.responses[i], request)) {
-                            response = this.responses[i].response;
-                            break;
-                        }
-                    }
-                }
-
-                if (request.readyState != 4) {
-                    log(response, request);
-
-                    request.respond(response[0], response[1], response[2]);
-                }
-            } catch (e) {
-                sinon.logError("Fake server request processing", e);
-            }
-        },
-
-        restore: function restore() {
-            return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments);
-        }
-    };
-}());
-
-if (typeof module !== 'undefined' && module.exports) {
-    module.exports = sinon;
-}
-
-/**
- * @depend fake_server.js
- * @depend fake_timers.js
- */
-/*jslint browser: true, eqeqeq: false, onevar: false*/
-/*global sinon*/
-/**
- * Add-on for sinon.fakeServer that automatically handles a fake timer along with
- * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery
- * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead,
- * it polls the object for completion with setInterval. Dispite the direct
- * motivation, there is nothing jQuery-specific in this file, so it can be used
- * in any environment where the ajax implementation depends on setInterval or
- * setTimeout.
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function () {
-    function Server() {}
-    Server.prototype = sinon.fakeServer;
-
-    sinon.fakeServerWithClock = new Server();
-
-    sinon.fakeServerWithClock.addRequest = function addRequest(xhr) {
-        if (xhr.async) {
-            if (typeof setTimeout.clock == "object") {
-                this.clock = setTimeout.clock;
-            } else {
-                this.clock = sinon.useFakeTimers();
-                this.resetClock = true;
-            }
-
-            if (!this.longestTimeout) {
-                var clockSetTimeout = this.clock.setTimeout;
-                var clockSetInterval = this.clock.setInterval;
-                var server = this;
-
-                this.clock.setTimeout = function (fn, timeout) {
-                    server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
-
-                    return clockSetTimeout.apply(this, arguments);
-                };
-
-                this.clock.setInterval = function (fn, timeout) {
-                    server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
-
-                    return clockSetInterval.apply(this, arguments);
-                };
-            }
-        }
-
-        return sinon.fakeServer.addRequest.call(this, xhr);
-    };
-
-    sinon.fakeServerWithClock.respond = function respond() {
-        var returnVal = sinon.fakeServer.respond.apply(this, arguments);
-
-        if (this.clock) {
-            this.clock.tick(this.longestTimeout || 0);
-            this.longestTimeout = 0;
-
-            if (this.resetClock) {
-                this.clock.restore();
-                this.resetClock = false;
-            }
-        }
-
-        return returnVal;
-    };
-
-    sinon.fakeServerWithClock.restore = function restore() {
-        if (this.clock) {
-            this.clock.restore();
-        }
-
-        return sinon.fakeServer.restore.apply(this, arguments);
-    };
-}());
-
-/**
- * @depend ../sinon.js
- * @depend collection.js
- * @depend util/fake_timers.js
- * @depend util/fake_server_with_clock.js
- */
-/*jslint eqeqeq: false, onevar: false, plusplus: false*/
-/*global require, module*/
-/**
- * Manages fake collections as well as fake utilities such as Sinon's
- * timers and fake XHR implementation in one convenient object.
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-if (typeof module !== 'undefined' && module.exports) {
-    var sinon = require("../sinon");
-    sinon.extend(sinon, require("./util/fake_timers"));
-}
-
-(function () {
-    var push = [].push;
-
-    function exposeValue(sandbox, config, key, value) {
-        if (!value) {
-            return;
-        }
-
-        if (config.injectInto && !(key in config.injectInto)) {
-            config.injectInto[key] = value;
-            sandbox.injectedKeys.push(key);
-        } else {
-            push.call(sandbox.args, value);
-        }
-    }
-
-    function prepareSandboxFromConfig(config) {
-        var sandbox = sinon.create(sinon.sandbox);
-
-        if (config.useFakeServer) {
-            if (typeof config.useFakeServer == "object") {
-                sandbox.serverPrototype = config.useFakeServer;
-            }
-
-            sandbox.useFakeServer();
-        }
-
-        if (config.useFakeTimers) {
-            if (typeof config.useFakeTimers == "object") {
-                sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers);
-            } else {
-                sandbox.useFakeTimers();
-            }
-        }
-
-        return sandbox;
-    }
-
-    sinon.sandbox = sinon.extend(sinon.create(sinon.collection), {
-        useFakeTimers: function useFakeTimers() {
-            this.clock = sinon.useFakeTimers.apply(sinon, arguments);
-
-            return this.add(this.clock);
-        },
-
-        serverPrototype: sinon.fakeServer,
-
-        useFakeServer: function useFakeServer() {
-            var proto = this.serverPrototype || sinon.fakeServer;
-
-            if (!proto || !proto.create) {
-                return null;
-            }
-
-            this.server = proto.create();
-            return this.add(this.server);
-        },
-
-        inject: function (obj) {
-            sinon.collection.inject.call(this, obj);
-
-            if (this.clock) {
-                obj.clock = this.clock;
-            }
-
-            if (this.server) {
-                obj.server = this.server;
-                obj.requests = this.server.requests;
-            }
-
-            return obj;
-        },
-
-        restore: function () {
-            sinon.collection.restore.apply(this, arguments);
-            this.restoreContext();
-        },
-
-        restoreContext: function () {
-            if (this.injectedKeys) {
-                for (var i = 0, j = this.injectedKeys.length; i < j; i++) {
-                    delete this.injectInto[this.injectedKeys[i]];
-                }
-                this.injectedKeys = [];
-            }
-        },
-
-        create: function (config) {
-            if (!config) {
-                return sinon.create(sinon.sandbox);
-            }
-
-            var sandbox = prepareSandboxFromConfig(config);
-            sandbox.args = sandbox.args || [];
-            sandbox.injectedKeys = [];
-            sandbox.injectInto = config.injectInto;
-            var prop, value, exposed = sandbox.inject({});
-
-            if (config.properties) {
-                for (var i = 0, l = config.properties.length; i < l; i++) {
-                    prop = config.properties[i];
-                    value = exposed[prop] || prop == "sandbox" && sandbox;
-                    exposeValue(sandbox, config, prop, value);
-                }
-            } else {
-                exposeValue(sandbox, config, "sandbox", value);
-            }
-
-            return sandbox;
-        }
-    });
-
-    sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer;
-
-    if (typeof module !== 'undefined' && module.exports) {
-        module.exports = sinon.sandbox;
-    }
-}());
-
-/**
- * @depend ../sinon.js
- * @depend stub.js
- * @depend mock.js
- * @depend sandbox.js
- */
-/*jslint eqeqeq: false, onevar: false, forin: true, plusplus: false*/
-/*global module, require, sinon*/
-/**
- * Test function, sandboxes fakes
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== 'undefined' && module.exports;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function test(callback) {
-        var type = typeof callback;
-
-        if (type != "function") {
-            throw new TypeError("sinon.test needs to wrap a test function, got " + type);
-        }
-
-        return function () {
-            var config = sinon.getConfig(sinon.config);
-            config.injectInto = config.injectIntoThis && this || config.injectInto;
-            var sandbox = sinon.sandbox.create(config);
-            var exception, result;
-            var args = Array.prototype.slice.call(arguments).concat(sandbox.args);
-
-            try {
-                result = callback.apply(this, args);
-            } catch (e) {
-                exception = e;
-            }
-
-            if (typeof exception !== "undefined") {
-                sandbox.restore();
-                throw exception;
-            }
-            else {
-                sandbox.verifyAndRestore();
-            }
-
-            return result;
-        };
-    }
-
-    test.config = {
-        injectIntoThis: true,
-        injectInto: null,
-        properties: ["spy", "stub", "mock", "clock", "server", "requests"],
-        useFakeTimers: true,
-        useFakeServer: true
-    };
-
-    if (commonJSModule) {
-        module.exports = test;
-    } else {
-        sinon.test = test;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend ../sinon.js
- * @depend test.js
- */
-/*jslint eqeqeq: false, onevar: false, eqeqeq: false*/
-/*global module, require, sinon*/
-/**
- * Test case, sandboxes all test functions
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon) {
-    var commonJSModule = typeof module !== 'undefined' && module.exports;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon || !Object.prototype.hasOwnProperty) {
-        return;
-    }
-
-    function createTest(property, setUp, tearDown) {
-        return function () {
-            if (setUp) {
-                setUp.apply(this, arguments);
-            }
-
-            var exception, result;
-
-            try {
-                result = property.apply(this, arguments);
-            } catch (e) {
-                exception = e;
-            }
-
-            if (tearDown) {
-                tearDown.apply(this, arguments);
-            }
-
-            if (exception) {
-                throw exception;
-            }
-
-            return result;
-        };
-    }
-
-    function testCase(tests, prefix) {
-        /*jsl:ignore*/
-        if (!tests || typeof tests != "object") {
-            throw new TypeError("sinon.testCase needs an object with test functions");
-        }
-        /*jsl:end*/
-
-        prefix = prefix || "test";
-        var rPrefix = new RegExp("^" + prefix);
-        var methods = {}, testName, property, method;
-        var setUp = tests.setUp;
-        var tearDown = tests.tearDown;
-
-        for (testName in tests) {
-            if (tests.hasOwnProperty(testName)) {
-                property = tests[testName];
-
-                if (/^(setUp|tearDown)$/.test(testName)) {
-                    continue;
-                }
-
-                if (typeof property == "function" && rPrefix.test(testName)) {
-                    method = property;
-
-                    if (setUp || tearDown) {
-                        method = createTest(property, setUp, tearDown);
-                    }
-
-                    methods[testName] = sinon.test(method);
-                } else {
-                    methods[testName] = tests[testName];
-                }
-            }
-        }
-
-        return methods;
-    }
-
-    if (commonJSModule) {
-        module.exports = testCase;
-    } else {
-        sinon.testCase = testCase;
-    }
-}(typeof sinon == "object" && sinon || null));
-
-/**
- * @depend ../sinon.js
- * @depend stub.js
- */
-/*jslint eqeqeq: false, onevar: false, nomen: false, plusplus: false*/
-/*global module, require, sinon*/
-/**
- * Assertions matching the test spy retrieval interface.
- *
- * @author Christian Johansen (christian at cjohansen.no)
- * @license BSD
- *
- * Copyright (c) 2010-2013 Christian Johansen
- */
-
-(function (sinon, global) {
-    var commonJSModule = typeof module !== "undefined" && module.exports;
-    var slice = Array.prototype.slice;
-    var assert;
-
-    if (!sinon && commonJSModule) {
-        sinon = require("../sinon");
-    }
-
-    if (!sinon) {
-        return;
-    }
-
-    function verifyIsStub() {
-        var method;
-
-        for (var i = 0, l = arguments.length; i < l; ++i) {
-            method = arguments[i];
-
-            if (!method) {
-                assert.fail("fake is not a spy");
-            }
-
-            if (typeof method != "function") {
-                assert.fail(method + " is not a function");
-            }
-
-            if (typeof method.getCall != "function") {
-                assert.fail(method + " is not stubbed");
-            }
-        }
-    }
-
-    function failAssertion(object, msg) {
-        object = object || global;
-        var failMethod = object.fail || assert.fail;
-        failMethod.call(object, msg);
-    }
-
-    function mirrorPropAsAssertion(name, method, message) {
-        if (arguments.length == 2) {
-            message = method;
-            method = name;
-        }
-
-        assert[name] = function (fake) {
-            verifyIsStub(fake);
-
-            var args = slice.call(arguments, 1);
-            var failed = false;
-
-            if (typeof method == "function") {
-                failed = !method(fake);
-            } else {
-                failed = typeof fake[method] == "function" ?
-                    !fake[method].apply(fake, args) : !fake[method];
-            }
-
-            if (failed) {
-                failAssertion(this, fake.printf.apply(fake, [message].concat(args)));
-            } else {
-                assert.pass(name);
-            }
-        };
-    }
-
-    function exposedName(prefix, prop) {
-        return !prefix || /^fail/.test(prop) ? prop :
-            prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1);
-    }
-
-    assert = {
-        failException: "AssertError",
-
-        fail: function fail(message) {
-            var error = new Error(message);
-            error.name = this.failException || assert.failException;
-
-            throw error;
-        },
-
-        pass: function pass(assertion) {},
-
-        callOrder: function assertCallOrder() {
-            verifyIsStub.apply(null, arguments);
-            var expected = "", actual = "";
-
-            if (!sinon.calledInOrder(arguments)) {
-                try {
-                    expected = [].join.call(arguments, ", ");
-                    var calls = slice.call(arguments);
-                    var i = calls.length;
-                    while (i) {
-                        if (!calls[--i].called) {
-                            calls.splice(i, 1);
-                        }
-                    }
-                    actual = sinon.orderByFirstCall(calls).join(", ");
-                } catch (e) {
-                    // If this fails, we'll just fall back to the blank string
-                }
-
-                failAssertion(this, "expected " + expected + " to be " +
-                              "called in order but were called as " + actual);
-            } else {
-                assert.pass("callOrder");
-            }
-        },
-
-        callCount: function assertCallCount(method, count) {
-            verifyIsStub(method);
-
-            if (method.callCount != count) {
-                var msg = "expected %n to be called " + sinon.timesInWords(count) +
-                    " but was called %c%C";
-                failAssertion(this, method.printf(msg));
-            } else {
-                assert.pass("callCount");
-            }
-        },
-
-        expose: function expose(target, options) {
-            if (!target) {
-                throw new TypeError("target is null or undefined");
-            }
-
-            var o = options || {};
-            var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix;
-            var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail;
-
-            for (var method in this) {
-                if (method != "export" && (includeFail || !/^(fail)/.test(method))) {
-                    target[exposedName(prefix, method)] = this[method];
-                }
-            }
-
-            return target;
-        },
-
-        match: function match(actual, expectation) {
-            var matcher = sinon.match(expectation);
-            if (matcher.test(actual)) {
-                assert.pass("match");
-            } else {
-                var formatted = [
-                    "expected value to match",
-                    "    expected = " + sinon.format(expectation),
-                    "    actual = " + sinon.format(actual)
-                ]
-                failAssertion(this, formatted.join("\n"));
-            }
-        }
-    };
-
-    mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called");
-    mirrorPropAsAssertion("notCalled", function (spy) { return !spy.called; },
-                          "expected %n to not have been called but was called %c%C");
-    mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C");
-    mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C");
-    mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C");
-    mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t");
-    mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t");
-    mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new");
-    mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new");
-    mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C");
-    mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C");
-    mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C");
-    mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C");
-    mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C");
-    mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C");
-    mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C");
-    mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C");
-    mirrorPropAsAssertion("threw", "%n did not throw exception%C");
-    mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C");
-
-    if (commonJSModule) {
-        module.exports = assert;
-    } else {
-        sinon.assert = assert;
-    }
-}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global));
-
-return sinon;}.call(typeof window != 'undefined' && window || {}));
\ No newline at end of file
diff --git a/test/meteor/assets.js b/test/meteor/assets.js
deleted file mode 100644
index 40f4b40..0000000
--- a/test/meteor/assets.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var assets = [
-	'dist/themes/default/assets/images/flags.png',
-];
-
-// Check that the font files are downloadable. Meteor places assets at /packages/<packageName>/.
-assets.forEach(function (path) {
-  Tinytest.addAsync('image ' + path + ' is shipped', function (test, done) {
-    HTTP.get('/packages/semantic_ui/' + path, function callback(error, result) {
-      if (error) {
-        test.fail({message: 'Image failed to load'});
-      }
-      else {
-        test.isTrue(result.content.length > 10000, 'Image ' + path + ' could not be downloaded');
-      }
-      done();
-    });
-  });
-});
-
-
diff --git a/test/meteor/fonts.js b/test/meteor/fonts.js
deleted file mode 100644
index 195d515..0000000
--- a/test/meteor/fonts.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// Check that the font files are downloadable. Meteor places assets at /packages/<packageName>/.
-['eot', 'otf', 'svg', 'ttf', 'woff']
-  .forEach(function (extension) {
-    Tinytest.addAsync(extension + ' fonts are shipped', function (test, done) {
-      HTTP.get('/packages/semantic_ui/dist/themes/default/assets/fonts/icons.' + extension, function callback(error, result) {
-        if (error) {
-          test.fail({message: 'Font failed to load'});
-        }
-        else {
-          test.isTrue(result.content.length > 10000, extension + ' font could not be downloaded');
-        }
-        done();
-      });
-    });
-  })
-;
\ No newline at end of file
diff --git a/test/modules/accordion.spec.js b/test/modules/accordion.spec.js
deleted file mode 100644
index dde2b27..0000000
--- a/test/modules/accordion.spec.js
+++ /dev/null
@@ -1,10 +0,0 @@
-describe("UI Accordion", function() {
-
-  $.fn.dimmer.settings.debug = false;
-
-  moduleTests({
-    module  : 'accordion',
-    element : '.ui.accordion'
-  });
-
-});
\ No newline at end of file
diff --git a/test/modules/checkbox.spec.js b/test/modules/checkbox.spec.js
deleted file mode 100644
index 5c10bf2..0000000
--- a/test/modules/checkbox.spec.js
+++ /dev/null
@@ -1,8 +0,0 @@
-describe("UI Checkbox", function() {
-
-  moduleTests({
-    module  : 'checkbox',
-    element : '.ui.checkbox'
-  });
-
-});
\ No newline at end of file
diff --git a/test/modules/dropdown.spec.js b/test/modules/dropdown.spec.js
deleted file mode 100644
index 87c13cf..0000000
--- a/test/modules/dropdown.spec.js
+++ /dev/null
@@ -1,8 +0,0 @@
-describe("UI Dropdown", function() {
-
-  moduleTests({
-    module  : 'dropdown',
-    element : '.ui.dropdown'
-  });
-
-});
\ No newline at end of file
diff --git a/test/modules/modal.spec.js b/test/modules/modal.spec.js
deleted file mode 100644
index f9322fe..0000000
--- a/test/modules/modal.spec.js
+++ /dev/null
@@ -1,10 +0,0 @@
-describe("UI Modal", function() {
-
-  $.fn.dimmer.settings.debug = false;
-
-  moduleTests({
-    module  : 'modal',
-    element : '.ui.modal'
-  });
-
-});
\ No newline at end of file
diff --git a/test/modules/module.spec.js b/test/modules/module.spec.js
deleted file mode 100644
index ff26c52..0000000
--- a/test/modules/module.spec.js
+++ /dev/null
@@ -1,218 +0,0 @@
-
-function moduleTests(ui) {
-  var
-    module    = ui.module,
-    element   = ui.element,
-    singleton = ui.singleton,
-    name      = $.fn[module].settings.name,
-
-    testValue = 'Test',
-    fixtures  = jasmine.getFixtures(),
-
-    originalSettings,
-    $modules,
-    $oneModule,
-    $module,
-    $clone
-  ;
-
-  // set fixture path
-  fixtures.fixturesPath = 'base/test/fixtures/';
-
-  // disable debug
-  $.fn[module].settings.debug       = false;
-  $.fn[module].settings.performance = false;
-  $.fn[module].settings.verbose     = false;
-
-
-  beforeEach(function() {
-    // load fixtures
-    fixtures.load(module + '.html');
-    // save settings
-    originalSettings = $.fn[module].settings;
-
-    // module available in scope
-    $module       = $(element);
-
-    // one module available in fixture
-    if($module.size() == 1) {
-      $oneModule = $module;
-      $clone     = $module.clone().appendTo( $(sandbox()) );
-      $modules   = $clone.add($module);
-    }
-    // multiple modules available in fixture
-    else {
-      $modules   = $(element);
-      $clone     = $module.eq(1);
-      $oneModule = $modules.first();
-    }
-
-  });
-
-  afterEach(function() {
-    // restore settings
-    $.fn[module].settings = originalSettings;
-    // remove element
-    $(element).remove();
-  });
-
-  /*******************************
-              Module
-  *******************************/
-
-  /*-------------------
-      Instantiation
-  --------------------*/
-  describe('Module', function() {
-
-    it("allows chaining when no settings returned", function() {
-      var $chain = $modules[module]();
-      expect($chain).toExist();
-      expect($chain.size()).toBe($modules.size());
-    });
-
-    it("returns a string when one setting returned", function() {
-      var result = $oneModule[module]('setting', 'name');
-      expect(typeof result).toBe('string');
-    });
-
-    it("returns an array when multiple settings returned", function() {
-      var result = $modules[module]('setting', 'name');
-      expect( $.isArray(result) ).toBeTruthy();
-    });
-
-    it("has an instance in metadata after init", function() {
-      $oneModule[module]();
-      expect($module).toHaveData('module-' + module);
-    });
-
-  });
-
-  /*-------------------
-         Settings
-  --------------------*/
-
-  describe('Settings', function() {
-
-    it("clears settings on re-init", function() {
-      $oneModule[module]({
-        name: testValue
-      });
-
-      var retrievedValue = $oneModule[module]('setting', 'name');
-      expect(retrievedValue).toBe(testValue);
-
-      // reinit
-      $oneModule[module]();
-      retrievedValue = $oneModule[module]('setting', 'name');
-      expect(retrievedValue).toBe(name);
-    });
-
-    it("allows default settings to be changed", function() {
-      $.fn[module].settings.name = testValue;
-      $oneModule[module]();
-
-      var retrievedValue = $oneModule[module]('setting', 'name');
-      $.fn[module].settings.name = name;
-
-      expect(retrievedValue).toBe(testValue);
-    });
-
-    it("allows settings to be changed during init", function() {
-      $oneModule[module]({
-        name: testValue
-      });
-
-      var retrievedValue = $oneModule[module]('setting', 'name');
-
-      expect(retrievedValue).toBe(testValue);
-    });
-
-    it("allows settings to be changed during runtime", function() {
-      $oneModule[module]();
-
-      var retrievedValue = $oneModule[module]('setting', 'name');
-
-      expect(retrievedValue).toBe(name);
-    });
-
-  });
-
-  /*-------------------
-          Groups
-  --------------------*/
-
-  if(!singleton) {
-
-    describe('Group Contamination', function() {
-
-      it("creates settings for all instances", function() {
-        $modules[module]('setting', 'name', testValue);
-
-        var retrievedValue = $oneModule[module]('setting', 'name');
-        var clonedSetting  = $clone[module]('setting', 'name');
-
-        expect(retrievedValue).toBe(testValue);
-        expect(clonedSetting).toBe(testValue);
-
-        $oneModule[module]({
-          'name': testValue
-        });
-
-        expect(retrievedValue).toBe(testValue);
-        expect(clonedSetting).toBe(testValue);
-
-      });
-
-      it("does not change other elements settings when changing one element", function() {
-        $modules[module]();
-        $oneModule[module]('setting', 'name', testValue);
-
-        var retrievedValue = $oneModule[module]('setting', 'name');
-        var clonedSetting  = $clone[module]('setting', 'name');
-
-        expect(retrievedValue).toBe(testValue);
-        expect(clonedSetting).toBe(name);
-
-      });
-
-      it("does not change other elements when re-initialized", function() {
-        $modules[module]();
-
-        $oneModule[module]({
-          'name': testValue
-        });
-
-        var retrievedValue = $oneModule[module]('setting', 'name');
-        var clonedSetting  = $clone[module]('setting', 'name');
-
-        expect(retrievedValue).toBe(testValue);
-        expect(clonedSetting).toBe(name);
-
-      });
-
-    });
-
-  }
-
-  /*-------------------
-         Destroy
-  --------------------*/
-  describe('Destroy', function() {
-
-    it("removes all events from page", function() {
-      $module[module]('destroy');
-      if($.events().length > 0) {
-        dump($.events());
-      }
-      expect($.events().length).toBe(0);
-    });
-
-    it("removes instance metadata", function() {
-      $module[module]('destroy');
-      expect( $module.data('module-'+ module) ).toBe(undefined);
-    });
-
-  });
-
-}
\ No newline at end of file
diff --git a/test/modules/popup.spec.js b/test/modules/popup.spec.js
deleted file mode 100644
index 952cee8..0000000
--- a/test/modules/popup.spec.js
+++ /dev/null
@@ -1,8 +0,0 @@
-xdescribe("UI Popup", function() {
-
-  moduleTests({
-    module  : 'popup',
-    element : 'i.icon'
-  });
-
-});
\ No newline at end of file
diff --git a/test/modules/search.spec.js b/test/modules/search.spec.js
deleted file mode 100644
index 5dd8576..0000000
--- a/test/modules/search.spec.js
+++ /dev/null
@@ -1,8 +0,0 @@
-xdescribe("UI Search", function() {
-
-  moduleTests({
-    module    : 'search',
-    element   : '.ui.search'
-  });
-
-});
\ No newline at end of file
diff --git a/test/modules/shape.spec.js b/test/modules/shape.spec.js
deleted file mode 100644
index c0f284f..0000000
--- a/test/modules/shape.spec.js
+++ /dev/null
@@ -1,8 +0,0 @@
-describe("UI Shape", function() {
-
-  moduleTests({
-    module    : 'shape',
-    element   : '.ui.shape'
-  });
-
-});
\ No newline at end of file
diff --git a/test/modules/sidebar.spec.js b/test/modules/sidebar.spec.js
deleted file mode 100644
index 6ae09ba..0000000
--- a/test/modules/sidebar.spec.js
+++ /dev/null
@@ -1,8 +0,0 @@
-describe("UI Rating", function() {
-
-  moduleTests({
-    module  : 'rating',
-    element : '.ui.rating'
-  });
-
-});
\ No newline at end of file
diff --git a/test/modules/tab.spec.js b/test/modules/tab.spec.js
deleted file mode 100644
index 0a22ad5..0000000
--- a/test/modules/tab.spec.js
+++ /dev/null
@@ -1,9 +0,0 @@
-xdescribe("UI Tab", function() {
-
-  moduleTests({
-    module    : 'tab',
-    element   : '.ui.menu .item',
-    singleton : true
-  });
-
-});
\ No newline at end of file
diff --git a/test/modules/transition.spec.js b/test/modules/transition.spec.js
deleted file mode 100644
index ebfe8fc..0000000
--- a/test/modules/transition.spec.js
+++ /dev/null
@@ -1,8 +0,0 @@
-xdescribe("UI Transition", function() {
-
-  moduleTests({
-    module  : 'transition',
-    element : '.ui.image'
-  });
-
-});
\ No newline at end of file
diff --git a/test/modules/video.spec.js b/test/modules/video.spec.js
deleted file mode 100644
index 23ad8ac..0000000
--- a/test/modules/video.spec.js
+++ /dev/null
@@ -1,8 +0,0 @@
-describe("UI Video", function() {
-
-  moduleTests({
-    module  : 'video',
-    element : '.ui.video'
-  });
-
-});
\ No newline at end of file

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/libjs-semanticui.git



More information about the Pkg-javascript-commits mailing list