deploy.sh 0.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/.eslintignore +1 -0
  2. package/.eslintrc +7 -9
  3. package/.github/workflows/ci.yml +48 -0
  4. package/.husky/pre-commit +5 -0
  5. package/{test/fixtures/unknown/.gitkeep → .prettierrc} +0 -0
  6. package/.release-it.json +5 -0
  7. package/CHANGELOG.md +26 -0
  8. package/README.md +5 -6
  9. package/__tests__/fixtures/unknown/.gitkeep +0 -0
  10. package/__tests__/lib/classifier.test.js +49 -0
  11. package/__tests__/lib/helpers/util.test.js +57 -0
  12. package/bin/deploy-delete.js +14 -0
  13. package/bin/deploy-deploy.js +34 -59
  14. package/bin/deploy-list.js +25 -52
  15. package/bin/deploy-login.js +36 -52
  16. package/bin/deploy-logout.js +9 -40
  17. package/bin/deploy-logs.js +22 -48
  18. package/bin/deploy-open.js +14 -37
  19. package/bin/deploy-register.js +37 -50
  20. package/bin/deploy-server.js +8 -5
  21. package/bin/deploy-whoami.js +8 -37
  22. package/bin/deploy.js +145 -19
  23. package/{test/fixtures → examples}/docker/Dockerfile +0 -0
  24. package/examples/docker/index.js +12 -0
  25. package/examples/node/index.js +8 -0
  26. package/{test/fixtures → examples}/node/package.json +0 -0
  27. package/examples/static/index.html +22 -0
  28. package/{test/fixtures → examples}/static/main.css +4 -2
  29. package/examples/static/out.gifcd +0 -0
  30. package/generate-docs.js +55 -0
  31. package/index.js +54 -55
  32. package/jsdoc.json +6 -3
  33. package/lib/classifier.js +24 -17
  34. package/lib/deploy.js +56 -64
  35. package/lib/helpers/cli.js +178 -207
  36. package/lib/helpers/util.js +94 -21
  37. package/lib/models/deployment.js +415 -474
  38. package/lib/models/request.js +77 -66
  39. package/lib/models/user.js +119 -144
  40. package/lib/server.js +187 -97
  41. package/lib/static/not-found.html +30 -0
  42. package/lib/static/page-could-not-load.html +30 -0
  43. package/lib/static/static-server.js +70 -0
  44. package/package.json +47 -34
  45. package/website/README.md +41 -0
  46. package/website/babel.config.js +3 -0
  47. package/website/docs/api/_category_.yml +1 -0
  48. package/website/docs/api/lib/classifier.js.md +11 -0
  49. package/website/docs/api/lib/deploy.js.md +13 -0
  50. package/website/docs/api/lib/helpers/cli.js.md +193 -0
  51. package/website/docs/api/lib/helpers/util.js.md +65 -0
  52. package/website/docs/api/lib/models/deployment.js.md +171 -0
  53. package/website/docs/api/lib/models/request.js.md +67 -0
  54. package/website/docs/api/lib/models/user.js.md +92 -0
  55. package/website/docs/api/lib/server.js.md +0 -0
  56. package/website/docs/api/lib/static/static-server.js.md +0 -0
  57. package/website/docs/intro.md +57 -0
  58. package/website/docusaurus.config.js +82 -0
  59. package/website/package-lock.json +25218 -0
  60. package/website/package.json +39 -0
  61. package/website/sidebars.js +31 -0
  62. package/website/src/components/HomepageFeatures/index.js +79 -0
  63. package/website/src/components/HomepageFeatures/styles.module.css +11 -0
  64. package/website/src/css/custom.css +39 -0
  65. package/website/src/pages/index.js +57 -0
  66. package/website/src/pages/index.module.css +23 -0
  67. package/website/static/.nojekyll +0 -0
  68. package/website/static/example.gif +0 -0
  69. package/website/static/example.mov +0 -0
  70. package/website/static/img/favicon.ico +0 -0
  71. package/website/static/img/intro/deploy.png +0 -0
  72. package/website/static/img/intro/logs.png +0 -0
  73. package/{docs → website/static/img}/logo.png +0 -0
  74. package/{docs → website/static/img}/logo.pxm +0 -0
  75. package/{docs → website/static/img}/logo@2x.png +0 -0
  76. package/.npmignore +0 -9
  77. package/.travis.yml +0 -9
  78. package/TODO.md +0 -12
  79. package/docs/code/classifier.js.html +0 -116
  80. package/docs/code/deploy.js.html +0 -138
  81. package/docs/code/fonts/OpenSans-Bold-webfont.eot +0 -0
  82. package/docs/code/fonts/OpenSans-Bold-webfont.svg +0 -1830
  83. package/docs/code/fonts/OpenSans-Bold-webfont.woff +0 -0
  84. package/docs/code/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  85. package/docs/code/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  86. package/docs/code/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  87. package/docs/code/fonts/OpenSans-Italic-webfont.eot +0 -0
  88. package/docs/code/fonts/OpenSans-Italic-webfont.svg +0 -1830
  89. package/docs/code/fonts/OpenSans-Italic-webfont.woff +0 -0
  90. package/docs/code/fonts/OpenSans-Light-webfont.eot +0 -0
  91. package/docs/code/fonts/OpenSans-Light-webfont.svg +0 -1831
  92. package/docs/code/fonts/OpenSans-Light-webfont.woff +0 -0
  93. package/docs/code/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  94. package/docs/code/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  95. package/docs/code/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  96. package/docs/code/fonts/OpenSans-Regular-webfont.eot +0 -0
  97. package/docs/code/fonts/OpenSans-Regular-webfont.svg +0 -1831
  98. package/docs/code/fonts/OpenSans-Regular-webfont.woff +0 -0
  99. package/docs/code/fonts/OpenSans-Semibold-webfont.eot +0 -0
  100. package/docs/code/fonts/OpenSans-Semibold-webfont.svg +0 -1830
  101. package/docs/code/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  102. package/docs/code/fonts/OpenSans-Semibold-webfont.woff +0 -0
  103. package/docs/code/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  104. package/docs/code/fonts/OpenSans-SemiboldItalic-webfont.svg +0 -1830
  105. package/docs/code/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  106. package/docs/code/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  107. package/docs/code/global.html +0 -325
  108. package/docs/code/helpers_cli.js.html +0 -351
  109. package/docs/code/helpers_util.js.html +0 -127
  110. package/docs/code/index.html +0 -81
  111. package/docs/code/models_deployment.js.html +0 -593
  112. package/docs/code/models_request.js.html +0 -150
  113. package/docs/code/models_user.js.html +0 -232
  114. package/docs/code/module-lib_classifier.html +0 -246
  115. package/docs/code/module-lib_deploy.html +0 -350
  116. package/docs/code/module-lib_helpers_cli.html +0 -2067
  117. package/docs/code/module-lib_helpers_util.html +0 -608
  118. package/docs/code/module-models_deployment-Deployment.html +0 -359
  119. package/docs/code/module-models_deployment-DeploymentSchema.html +0 -359
  120. package/docs/code/module-models_deployment.Deployment.html +0 -359
  121. package/docs/code/module-models_deployment.html +0 -1851
  122. package/docs/code/module-models_request-Request.html +0 -409
  123. package/docs/code/module-models_request-RequestSchema.html +0 -359
  124. package/docs/code/module-models_request.html +0 -446
  125. package/docs/code/module-models_user-User.html +0 -306
  126. package/docs/code/module-models_user-UserSchema.html +0 -306
  127. package/docs/code/module-models_user.User.html +0 -306
  128. package/docs/code/module-models_user.html +0 -1200
  129. package/docs/code/scripts/linenumber.js +0 -25
  130. package/docs/code/scripts/prettify/Apache-License-2.0.txt +0 -202
  131. package/docs/code/scripts/prettify/lang-css.js +0 -2
  132. package/docs/code/scripts/prettify/prettify.js +0 -28
  133. package/docs/code/styles/jsdoc-default.css +0 -692
  134. package/docs/code/styles/prettify-jsdoc.css +0 -111
  135. package/docs/code/styles/prettify-tomorrow.css +0 -132
  136. package/docs/example-docker.gif +0 -0
  137. package/docs/example-node.gif +0 -0
  138. package/docs/example-static.gif +0 -0
  139. package/docs/index.html +0 -50
  140. package/docs/main.css +0 -12
  141. package/docs/psychic-min.css +0 -1
  142. package/lib/helpers/static-server.js +0 -69
  143. package/test/fixtures/docker/index.js +0 -12
  144. package/test/fixtures/node/index.js +0 -8
  145. package/test/fixtures/static/index.html +0 -14
  146. package/test/lib/classifier.js +0 -51
  147. package/test/lib/helpers/util.js +0 -30
@@ -1,111 +0,0 @@
1
- /* JSDoc prettify.js theme */
2
-
3
- /* plain text */
4
- .pln {
5
- color: #000000;
6
- font-weight: normal;
7
- font-style: normal;
8
- }
9
-
10
- /* string content */
11
- .str {
12
- color: hsl(104, 100%, 24%);
13
- font-weight: normal;
14
- font-style: normal;
15
- }
16
-
17
- /* a keyword */
18
- .kwd {
19
- color: #000000;
20
- font-weight: bold;
21
- font-style: normal;
22
- }
23
-
24
- /* a comment */
25
- .com {
26
- font-weight: normal;
27
- font-style: italic;
28
- }
29
-
30
- /* a type name */
31
- .typ {
32
- color: #000000;
33
- font-weight: normal;
34
- font-style: normal;
35
- }
36
-
37
- /* a literal value */
38
- .lit {
39
- color: #006400;
40
- font-weight: normal;
41
- font-style: normal;
42
- }
43
-
44
- /* punctuation */
45
- .pun {
46
- color: #000000;
47
- font-weight: bold;
48
- font-style: normal;
49
- }
50
-
51
- /* lisp open bracket */
52
- .opn {
53
- color: #000000;
54
- font-weight: bold;
55
- font-style: normal;
56
- }
57
-
58
- /* lisp close bracket */
59
- .clo {
60
- color: #000000;
61
- font-weight: bold;
62
- font-style: normal;
63
- }
64
-
65
- /* a markup tag name */
66
- .tag {
67
- color: #006400;
68
- font-weight: normal;
69
- font-style: normal;
70
- }
71
-
72
- /* a markup attribute name */
73
- .atn {
74
- color: #006400;
75
- font-weight: normal;
76
- font-style: normal;
77
- }
78
-
79
- /* a markup attribute value */
80
- .atv {
81
- color: #006400;
82
- font-weight: normal;
83
- font-style: normal;
84
- }
85
-
86
- /* a declaration */
87
- .dec {
88
- color: #000000;
89
- font-weight: bold;
90
- font-style: normal;
91
- }
92
-
93
- /* a variable name */
94
- .var {
95
- color: #000000;
96
- font-weight: normal;
97
- font-style: normal;
98
- }
99
-
100
- /* a function name */
101
- .fun {
102
- color: #000000;
103
- font-weight: bold;
104
- font-style: normal;
105
- }
106
-
107
- /* Specify class=linenums on a pre to get line numbering */
108
- ol.linenums {
109
- margin-top: 0;
110
- margin-bottom: 0;
111
- }
@@ -1,132 +0,0 @@
1
- /* Tomorrow Theme */
2
- /* Original theme - https://github.com/chriskempson/tomorrow-theme */
3
- /* Pretty printing styles. Used with prettify.js. */
4
- /* SPAN elements with the classes below are added by prettyprint. */
5
- /* plain text */
6
- .pln {
7
- color: #4d4d4c; }
8
-
9
- @media screen {
10
- /* string content */
11
- .str {
12
- color: hsl(104, 100%, 24%); }
13
-
14
- /* a keyword */
15
- .kwd {
16
- color: hsl(240, 100%, 50%); }
17
-
18
- /* a comment */
19
- .com {
20
- color: hsl(0, 0%, 60%); }
21
-
22
- /* a type name */
23
- .typ {
24
- color: hsl(240, 100%, 32%); }
25
-
26
- /* a literal value */
27
- .lit {
28
- color: hsl(240, 100%, 40%); }
29
-
30
- /* punctuation */
31
- .pun {
32
- color: #000000; }
33
-
34
- /* lisp open bracket */
35
- .opn {
36
- color: #000000; }
37
-
38
- /* lisp close bracket */
39
- .clo {
40
- color: #000000; }
41
-
42
- /* a markup tag name */
43
- .tag {
44
- color: #c82829; }
45
-
46
- /* a markup attribute name */
47
- .atn {
48
- color: #f5871f; }
49
-
50
- /* a markup attribute value */
51
- .atv {
52
- color: #3e999f; }
53
-
54
- /* a declaration */
55
- .dec {
56
- color: #f5871f; }
57
-
58
- /* a variable name */
59
- .var {
60
- color: #c82829; }
61
-
62
- /* a function name */
63
- .fun {
64
- color: #4271ae; } }
65
- /* Use higher contrast and text-weight for printable form. */
66
- @media print, projection {
67
- .str {
68
- color: #060; }
69
-
70
- .kwd {
71
- color: #006;
72
- font-weight: bold; }
73
-
74
- .com {
75
- color: #600;
76
- font-style: italic; }
77
-
78
- .typ {
79
- color: #404;
80
- font-weight: bold; }
81
-
82
- .lit {
83
- color: #044; }
84
-
85
- .pun, .opn, .clo {
86
- color: #440; }
87
-
88
- .tag {
89
- color: #006;
90
- font-weight: bold; }
91
-
92
- .atn {
93
- color: #404; }
94
-
95
- .atv {
96
- color: #060; } }
97
- /* Style */
98
- /*
99
- pre.prettyprint {
100
- background: white;
101
- font-family: Consolas, Monaco, 'Andale Mono', monospace;
102
- font-size: 12px;
103
- line-height: 1.5;
104
- border: 1px solid #ccc;
105
- padding: 10px; }
106
- */
107
-
108
- /* Specify class=linenums on a pre to get line numbering */
109
- ol.linenums {
110
- margin-top: 0;
111
- margin-bottom: 0; }
112
-
113
- /* IE indents via margin-left */
114
- li.L0,
115
- li.L1,
116
- li.L2,
117
- li.L3,
118
- li.L4,
119
- li.L5,
120
- li.L6,
121
- li.L7,
122
- li.L8,
123
- li.L9 {
124
- /* */ }
125
-
126
- /* Alternate shading for lines */
127
- li.L1,
128
- li.L3,
129
- li.L5,
130
- li.L7,
131
- li.L9 {
132
- /* */ }
Binary file
Binary file
Binary file
package/docs/index.html DELETED
@@ -1,50 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8">
5
- <title>deploy.sh</title>
6
- <link href="./psychic-min.css" rel="stylesheet" type="text/css"/>
7
- <link href="./main.css" rel="stylesheet" type="text/css"/>
8
- <script>
9
- document.addEventListener('DOMContentLoaded', function(){
10
- document.querySelector('#example-switcher').onchange = function(e) {
11
- document.querySelector('#example-image').src = e.target.value;
12
- }
13
- }, false);
14
- </script>
15
- </head>
16
- <body>
17
- <div style="height:100%;width:100%;position:relative;">
18
- <div class="navbar navbar-center">
19
- <div class="container">
20
- <div class="navbar-title">
21
- <a href="https://github.com/gabrielcsapo/deploy.sh" class="text-black tooltip-bottom" data-tooltip="☁️ open source continuous deployment service">deploy.sh</a>
22
- </div>
23
- <div class="nav">
24
- <a class="text-black" href="./code/index.html">Docs</a>
25
- <a class="text-black" href="https://github.com/gabrielcsapo/deploy.sh">Source</a>
26
- </div>
27
- </div>
28
- </div>
29
- <div class="text-center">
30
- <div style="position:absolute;top:50%;transform:translateY(-50%);">
31
- <pre style="width:50%;margin:0 auto 30px;"> npm install deploy.sh -g </pre>
32
- <select style="display:inline-block;" id="example-switcher">
33
- <option value="example-static.gif"> static website </option>
34
- <option value="example-node.gif"> node application </option>
35
- <option value="example-docker.gif"> docker image </option>
36
- </select>
37
- <br/>
38
- <br/>
39
- <img id="example-image" src="./example-static.gif" alt="static example being uploaded">
40
- </div>
41
- <br/>
42
- </div>
43
- <div class="navbar navbar-center" style="bottom:0px;position:absolute;">
44
- <div class="container text-center">
45
- <div class="text-black">Made with ☕️ by @gabrielcsapo</div>
46
- </div>
47
- </div>
48
- </div>
49
- </body>
50
- </html>
package/docs/main.css DELETED
@@ -1,12 +0,0 @@
1
- html, body {
2
- width: 100%;
3
- height: 100%;
4
- font-family: "Helvetica Neue", "Helvetica";
5
- }
6
- h3 {
7
- margin-top: 0;
8
- }
9
- img {
10
- max-height: 450px;
11
- width: 100%;
12
- }
@@ -1 +0,0 @@
1
- /*! 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:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}hr{display:block;box-sizing:content-box;text-align:center;border:0;height:0;border-top:1px solid #cfcfc4;border-bottom:1px solid rgba(255,255,255,.3)}hr.ellipsis{border-top:0;border-bottom:0}hr.ellipsis:before{font-weight:400;font-style:italic;font-size:28px;letter-spacing:.6em;font-size:13px;content:'...';display:inline-block;margin-left:.6em;color:#000;position:relative}pre{display:block;padding:10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;white-space:normal;background-color:#f5f5f5;border-radius:5px;border-left:.3rem solid transparent}blockquote{padding:10px 20px;font-size:17.5px;border-left:5px solid #eee}code{border-radius:0;display:block;padding:1rem 1.5rem;white-space:pre}a{color:#0079ad;text-decoration:none;font-weight:300}small{color:inherit;font-size:75%;font-weight:400}.alert{padding:10px 0 10px 10px;border-radius:5px;border:1px solid #cfcfc4;position:relative}.alert>.alert-close{font-size:25px;line-height:15px;position:absolute;right:10px;top:10px}.alert.alert-white{background-color:#fff;border:1px solid #e6e6e6}.alert.alert-white *{color:#000}.alert.alert-black{background-color:#000;border:1px solid #000}.alert.alert-black *{color:#fff}.alert.alert-default{background-color:#cfcfc4;border:1px solid #bdbdae}.alert.alert-default *{color:#fff}.alert.alert-primary{background-color:#779ecb;border:1px solid #608dc2}.alert.alert-primary *{color:#fff}.alert.alert-success{background-color:#7d7;border:1px solid #5cd65c}.alert.alert-success *{color:#fff}.alert.alert-info{background-color:#9bddff;border:1px solid #72cfff}.alert.alert-info *{color:#fff}.alert.alert-warning{background-color:#ffb347;border:1px solid #ffa626}.alert.alert-warning *{color:#fff}.alert.alert-danger{background-color:#ff6961;border:1px solid #ff483e}.alert.alert-danger *{color:#fff}.badge{display:table-cell;padding:8px 8px 8px 8px;border-radius:100px;border:1px solid #cfcfc4;text-align:center;vertical-align:middle}.badge.badge-white{background-color:#fff;color:#000}.badge.border-white{color:#000}.badge.badge-black{background-color:#000;color:#fff}.badge.border-black{color:#000}.badge.badge-default{background-color:#cfcfc4;color:#fff}.badge.border-default{color:#cfcfc4}.badge.badge-primary{background-color:#779ecb;color:#fff}.badge.border-primary{color:#779ecb}.badge.badge-success{background-color:#7d7;color:#fff}.badge.border-success{color:#7d7}.badge.badge-info{background-color:#9bddff;color:#fff}.badge.border-info{color:#9bddff}.badge.badge-warning{background-color:#ffb347;color:#fff}.badge.border-warning{color:#ffb347}.badge.badge-danger{background-color:#ff6961;color:#fff}.badge.border-danger{color:#ff6961}label{display:inline-block;margin-bottom:.5rem}input,select,textarea{display:block;padding:.375rem 1% .375rem 1%;line-height:1.5}select{background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='50px' height='50px' fill='#adadad'><polyline points='46.139,15.518 25.166,36.49 4.193,15.519'/></svg>");background-color:#fff;border:1px solid #cfcfc4;background-repeat:no-repeat;background-position:right 10px top 5px;background-size:16px 16px;padding:5px 30px 5px 15px;width:auto;text-align:center;border-radius:5px;appearance:none;-webkit-appearance:none;outline:0}select:active,select:focus{outline:0}select.input-white{border-color:#fff}select.input-black{border-color:#a6a6a6}select.input-default{border-color:#eeeeea}select.input-primary{border-color:#cfdded}select.input-success{border-color:#cff3cf}select.input-info{border-color:#dcf3ff}select.input-warning{border-color:#ffe4bf}select.input-danger{border-color:#ffcbc8}input,textarea{width:98%;margin:0;padding:.375rem 1% .375rem 1%;background-color:#fff;background-image:none;border:1px solid #cfcfc4;border-radius:.25rem}input:focus,textarea:focus{border-color:#779ecb;outline:0}input.input-white,textarea.input-white{border-color:#fff}input.input-white:focus,textarea.input-white:focus{border-color:#bfbfbf}input.input-black,textarea.input-black{border-color:#a6a6a6}input.input-black:focus,textarea.input-black:focus{border-color:#000}input.input-default,textarea.input-default{border-color:#eeeeea}input.input-default:focus,textarea.input-default:focus{border-color:#a2a28c}input.input-primary,textarea.input-primary{border-color:#cfdded}input.input-primary:focus,textarea.input-primary:focus{border-color:#4375af}input.input-success,textarea.input-success{border-color:#cff3cf}input.input-success:focus,textarea.input-success:focus{border-color:#3c3}input.input-info,textarea.input-info{border-color:#dcf3ff}input.input-info:focus,textarea.input-info:focus{border-color:#35baff}input.input-warning,textarea.input-warning{border-color:#ffe4bf}input.input-warning:focus,textarea.input-warning:focus{border-color:#f49000}input.input-danger,textarea.input-danger{border-color:#ffcbc8}input.input-danger:focus,textarea.input-danger:focus{border-color:#ff1509}.btn-group{margin:10px;display:inline-block}.btn-group>.btn{margin:-3px;border-radius:0}.btn-group>.btn:first-child{border-radius:5px 0 0 5px}.btn-group>.btn:last-child{border-radius:0 5px 5px 0}.btn{padding:12px 18px;margin:10px;cursor:pointer;display:inline-block;text-align:center;background-color:#fff;border-radius:5px;border:1px solid #cfcfc4;color:#655d5d}.btn:hover{border-color:#d6d6cd}.btn:active{opacity:.5}.btn:focus{outline:0}.btn.btn-block{width:100%}.btn.border-white{color:#fff}.btn.border-white:active,.btn.border-white:hover{border-color:#fff}.btn.border-white:active{border-color:#d9d9d9;opacity:.5}.btn.btn-white{color:#000;border:1px solid #d9d9d9;background-color:#fff}.btn.btn-white:active,.btn.btn-white:hover{border-color:#d9d9d9}.btn.btn-white:hover{background-color:#fff}.btn.btn-white:active{background-color:#d9d9d9;opacity:.5}.btn.border-black{color:#000}.btn.border-black:active,.btn.border-black:hover{border-color:#262626}.btn.border-black:active{border-color:#000;opacity:.5}.btn.btn-black{color:#fff;border:1px solid #000;background-color:#000}.btn.btn-black:active,.btn.btn-black:hover{border-color:#000}.btn.btn-black:hover{background-color:#262626}.btn.btn-black:active{background-color:#000;opacity:.5}.btn.border-default{color:#cfcfc4}.btn.border-default:active,.btn.border-default:hover{border-color:#d6d6cd}.btn.border-default:active{border-color:#b4b4a3;opacity:.5}.btn.btn-default{color:#fff;border:1px solid #b4b4a3;background-color:#cfcfc4}.btn.btn-default:active,.btn.btn-default:hover{border-color:#b4b4a3}.btn.btn-default:hover{background-color:#d6d6cd}.btn.btn-default:active{background-color:#b4b4a3;opacity:.5}.btn.border-primary{color:#779ecb}.btn.border-primary:active,.btn.border-primary:hover{border-color:#8badd3}.btn.border-primary:active{border-color:#5485be;opacity:.5}.btn.btn-primary{color:#fff;border:1px solid #5485be;background-color:#779ecb}.btn.btn-primary:active,.btn.btn-primary:hover{border-color:#5485be}.btn.btn-primary:hover{background-color:#8badd3}.btn.btn-primary:active{background-color:#5485be;opacity:.5}.btn.border-success{color:#7d7}.btn.border-success:active,.btn.border-success:hover{border-color:#8be28b}.btn.border-success:active{border-color:#4ed34e;opacity:.5}.btn.btn-success{color:#fff;border:1px solid #4ed34e;background-color:#7d7}.btn.btn-success:active,.btn.btn-success:hover{border-color:#4ed34e}.btn.btn-success:hover{background-color:#8be28b}.btn.btn-success:active{background-color:#4ed34e;opacity:.5}.btn.border-info{color:#9bddff}.btn.border-info:active,.btn.border-info:hover{border-color:#aae2ff}.btn.border-info:active{border-color:#5dc8ff;opacity:.5}.btn.btn-info{color:#fff;border:1px solid #5dc8ff;background-color:#9bddff}.btn.btn-info:active,.btn.btn-info:hover{border-color:#5dc8ff}.btn.btn-info:hover{background-color:#aae2ff}.btn.btn-info:active{background-color:#5dc8ff;opacity:.5}.btn.border-warning{color:#ffb347}.btn.border-warning:active,.btn.border-warning:hover{border-color:#ffbe63}.btn.border-warning:active{border-color:#ff9f16;opacity:.5}.btn.btn-warning{color:#fff;border:1px solid #ff9f16;background-color:#ffb347}.btn.btn-warning:active,.btn.btn-warning:hover{border-color:#ff9f16}.btn.btn-warning:hover{background-color:#ffbe63}.btn.btn-warning:active{background-color:#ff9f16;opacity:.5}.btn.border-danger{color:#ff6961}.btn.border-danger:active,.btn.border-danger:hover{border-color:#ff7f79}.btn.border-danger:active{border-color:#ff372c;opacity:.5}.btn.btn-danger{color:#fff;border:1px solid #ff372c;background-color:#ff6961}.btn.btn-danger:active,.btn.btn-danger:hover{border-color:#ff372c}.btn.btn-danger:hover{background-color:#ff7f79}.btn.btn-danger:active{background-color:#ff372c;opacity:.5}.grid{width:100%}.grid:after{clear:both;visibility:hidden;display:block;font-size:0;content:' ';height:0}.grid>*>*{word-wrap:break-word}.grid>div{float:left;box-sizing:border-box;min-height:1px}.grid>.col-0-12{display:none}.grid>.col-1-12{width:8.333333333333332%;margin-left:0;margin-right:0}.grid>.col-2-12{width:16.666666666666664%;margin-left:0;margin-right:0}.grid>.col-3-12{width:25%;margin-left:0;margin-right:0}.grid>.col-4-12{width:33.33333333333333%;margin-left:0;margin-right:0}.grid>.col-5-12{width:41.66666666666667%;margin-left:0;margin-right:0}.grid>.col-6-12{width:50%;margin-left:0;margin-right:0}.grid>.col-7-12{width:58.333333333333336%;margin-left:0;margin-right:0}.grid>.col-8-12{width:66.66666666666666%;margin-left:0;margin-right:0}.grid>.col-9-12{width:75%;margin-left:0;margin-right:0}.grid>.col-10-12{width:83.33333333333334%;margin-left:0;margin-right:0}.grid>.col-11-12{width:91.66666666666666%;margin-left:0;margin-right:0}.grid>.col-12-12{width:100%;margin-left:0;margin-right:0}@media screen and (min-width:16em){.grid>.col-xs-0-12{display:none}.grid>.col-xs-1-12{width:8.3333%;margin-left:0;margin-right:0}.grid>.col-xs-2-12{width:16.6666%;margin-left:0;margin-right:0}.grid>.col-xs-3-12{width:25%;margin-left:0;margin-right:0}.grid>.col-xs-4-12{width:33.3333%;margin-left:0;margin-right:0}.grid>.col-xs-5-12{width:41.6666%;margin-left:0;margin-right:0}.grid>.col-xs-6-12{width:50%;margin-left:0;margin-right:0}.grid>.col-xs-7-12{width:58.3333%;margin-left:0;margin-right:0}.grid>.col-xs-8-12{width:66.6666%;margin-left:0;margin-right:0}.grid>.col-xs-9-12{width:75%;margin-left:0;margin-right:0}.grid>.col-xs-10-12{width:83.3333%;margin-left:0;margin-right:0}.grid>.col-xs-11-12{width:91.6666%;margin-left:0;margin-right:0}.grid>.col-xs-12-12{width:100%;margin-left:0;margin-right:0}}@media screen and (min-width:32em){.grid>.col-sm-0-12{display:none}.grid>.col-sm-1-12{width:8.3333%;margin-left:0;margin-right:0}.grid>.col-sm-2-12{width:16.6666%;margin-left:0;margin-right:0}.grid>.col-sm-3-12{width:25%;margin-left:0;margin-right:0}.grid>.col-sm-4-12{width:33.3333%;margin-left:0;margin-right:0}.grid>.col-sm-5-12{width:41.6666%;margin-left:0;margin-right:0}.grid>.col-sm-6-12{width:50%;margin-left:0;margin-right:0}.grid>.col-sm-7-12{width:58.3333%;margin-left:0;margin-right:0}.grid>.col-sm-8-12{width:66.6666%;margin-left:0;margin-right:0}.grid>.col-sm-9-12{width:75%;margin-left:0;margin-right:0}.grid>.col-sm-10-12{width:83.3333%;margin-left:0;margin-right:0}.grid>.col-sm-11-12{width:91.6666%;margin-left:0;margin-right:0}.grid>.col-sm-12-12{width:100%;margin-left:0;margin-right:0}}@media screen and (min-width:48em){.grid>.col-md-0-12{display:none}.grid>.col-md-1-12{width:8.3333%;margin-left:0;margin-right:0}.grid>.col-md-2-12{width:16.6666%;margin-left:0;margin-right:0}.grid>.col-md-3-12{width:25%;margin-left:0;margin-right:0}.grid>.col-md-4-12{width:33.3333%;margin-left:0;margin-right:0}.grid>.col-md-5-12{width:41.6666%;margin-left:0;margin-right:0}.grid>.col-md-6-12{width:50%;margin-left:0;margin-right:0}.grid>.col-md-7-12{width:58.3333%;margin-left:0;margin-right:0}.grid>.col-md-8-12{width:66.6666%;margin-left:0;margin-right:0}.grid>.col-md-9-12{width:75%;margin-left:0;margin-right:0}.grid>.col-md-10-12{width:83.3333%;margin-left:0;margin-right:0}.grid>.col-md-11-12{width:91.6666%;margin-left:0;margin-right:0}.grid>.col-md-12-12{width:100%;margin-left:0;margin-right:0}}@media screen and (min-width:64em){.grid>.col-lg-0-12{display:none}.grid>.col-lg-1-12{width:8.3333%;margin-left:0;margin-right:0}.grid>.col-lg-2-12{width:16.6666%;margin-left:0;margin-right:0}.grid>.col-lg-3-12{width:25%;margin-left:0;margin-right:0}.grid>.col-lg-4-12{width:33.3333%;margin-left:0;margin-right:0}.grid>.col-lg-5-12{width:41.6666%;margin-left:0;margin-right:0}.grid>.col-lg-6-12{width:50%;margin-left:0;margin-right:0}.grid>.col-lg-7-12{width:58.3333%;margin-left:0;margin-right:0}.grid>.col-lg-8-12{width:66.6666%;margin-left:0;margin-right:0}.grid>.col-lg-9-12{width:75%;margin-left:0;margin-right:0}.grid>.col-lg-10-12{width:83.3333%;margin-left:0;margin-right:0}.grid>.col-lg-11-12{width:91.6666%;margin-left:0;margin-right:0}.grid>.col-lg-12-12{width:100%;margin-left:0;margin-right:0}}@media screen and (min-width:80em){.grid>.col-xl-0-12{display:none}.grid>.col-xl-1-12{width:8.3333%;margin-left:0;margin-right:0}.grid>.col-xl-2-12{width:16.6666%;margin-left:0;margin-right:0}.grid>.col-xl-3-12{width:25%;margin-left:0;margin-right:0}.grid>.col-xl-4-12{width:33.3333%;margin-left:0;margin-right:0}.grid>.col-xl-5-12{width:41.6666%;margin-left:0;margin-right:0}.grid>.col-xl-6-12{width:50%;margin-left:0;margin-right:0}.grid>.col-xl-7-12{width:58.3333%;margin-left:0;margin-right:0}.grid>.col-xl-8-12{width:66.6666%;margin-left:0;margin-right:0}.grid>.col-xl-9-12{width:75%;margin-left:0;margin-right:0}.grid>.col-xl-10-12{width:83.3333%;margin-left:0;margin-right:0}.grid>.col-xl-11-12{width:91.6666%;margin-left:0;margin-right:0}.grid>.col-xl-12-12{width:100%;margin-left:0;margin-right:0}}body{margin:0}.text-white,.text-white>*{color:#fff!important}.background-white{background-color:#fff!important}.border-white{border-color:#fff!important}.text-black,.text-black>*{color:#000!important}.background-black{background-color:#000!important}.border-black{border-color:#000!important}.text-default,.text-default>*{color:#cfcfc4!important}.background-default{background-color:#cfcfc4!important}.border-default{border-color:#cfcfc4!important}.text-primary,.text-primary>*{color:#779ecb!important}.background-primary{background-color:#779ecb!important}.border-primary{border-color:#779ecb!important}.text-success,.text-success>*{color:#7d7!important}.background-success{background-color:#7d7!important}.border-success{border-color:#7d7!important}.text-info,.text-info>*{color:#9bddff!important}.background-info{background-color:#9bddff!important}.border-info{border-color:#9bddff!important}.text-warning,.text-warning>*{color:#ffb347!important}.background-warning{background-color:#ffb347!important}.border-warning{border-color:#ffb347!important}.text-danger,.text-danger>*{color:#ff6961!important}.background-danger{background-color:#ff6961!important}.border-danger{border-color:#ff6961!important}.responsive{width:100%;height:auto}.text-right{text-align:right}.text-left{text-align:left}.text-center{text-align:center}.list{list-style:none;margin:0;padding:0}.list>.list-item{clear:both;min-height:30px;height:auto;line-height:30px;overflow:auto;padding:10px;border:1px solid #cfcfc4;border-bottom:0 solid transparent}.list>.list-item>.badge{float:right;line-height:20px}.list>.list-item.list-item-white{color:#000;border-color:#fff;background-color:#fff}.list>.list-item.list-item-white *{color:#000}.list>.list-item.list-item-black{color:#fff;border-color:#333;background-color:#000}.list>.list-item.list-item-black *{color:#fff}.list>.list-item.list-item-default{color:#fff;border-color:#d9d9d0;background-color:#cfcfc4}.list>.list-item.list-item-default *{color:#fff}.list>.list-item.list-item-primary{color:#fff;border-color:#92b1d5;background-color:#779ecb}.list>.list-item.list-item-primary *{color:#fff}.list>.list-item.list-item-success{color:#fff;border-color:#92e492;background-color:#7d7}.list>.list-item.list-item-success *{color:#fff}.list>.list-item.list-item-info{color:#fff;border-color:#afe4ff;background-color:#9bddff}.list>.list-item.list-item-info *{color:#fff}.list>.list-item.list-item-warning{color:#fff;border-color:#ffc26c;background-color:#ffb347}.list>.list-item.list-item-warning *{color:#fff}.list>.list-item.list-item-danger{color:#fff;border-color:#ff8781;background-color:#ff6961}.list>.list-item.list-item-danger *{color:#fff}.list>.list-item:first-child{border-radius:5px 5px 0 0}.list>.list-item:last-child{border-bottom:1px solid #cfcfc4;border-radius:0 0 5px 5px}.list>.list-item:only-child{border-radius:5px}.list>.list-item>.list-item-right{float:right}.list>.list-item>.list-item-left{float:left}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(50,50,50,.6);z-index:99999;opacity:0;pointer-events:none}.modal.active,.modal.modal-active,.modal:target{opacity:1;pointer-events:auto}.modal.modal-absolute{position:absolute;z-index:1}.modal.modal-absolute>div{position:absolute}.modal>div{min-width:400px;max-width:90%;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);padding:5px 20px 13px 20px;border-radius:0;background:#fff}.modal.modal-white>div{border-left:10px solid #fff;color:#000}.modal.modal-black>div{border-left:10px solid #000;color:#000}.modal.modal-default>div{border-left:10px solid #cfcfc4;color:#000}.modal.modal-primary>div{border-left:10px solid #779ecb;color:#000}.modal.modal-success>div{border-left:10px solid #7d7;color:#000}.modal.modal-info>div{border-left:10px solid #9bddff;color:#000}.modal.modal-warning>div{border-left:10px solid #ffb347;color:#000}.modal.modal-danger>div{border-left:10px solid #ff6961;color:#000}.modal-close{line-height:25px;position:absolute;right:5px;text-align:center;top:5px;width:24px;text-decoration:none}.navbar *{font-weight:300;display:inline-block;text-decoration:none}.navbar{position:relative;min-height:50px;width:100%;display:table}.navbar>.container{border-width:0 0 1px 0}.navbar.navbar-fixed{position:fixed;z-index:100000}.navbar.navbar-center>.container{border-width:0 1px 1px 1px;margin:0 auto;width:50%;position:relative}.navbar.navbar-center>.container>.navbar-content{margin:0}.navbar.border-white>.container{border-style:solid}.navbar.navbar-white>.container{background-color:#fff}.navbar.navbar-white>.container>.nav a.active,.navbar.navbar-white>.container>.nav a:hover,.navbar.navbar-white>.container>.nav a:target{background-color:#fff}.navbar.border-black>.container{border-style:solid}.navbar.navbar-black>.container{background-color:#000}.navbar.navbar-black>.container>.nav a.active,.navbar.navbar-black>.container>.nav a:hover,.navbar.navbar-black>.container>.nav a:target{background-color:#a6a6a6}.navbar.border-default>.container{border-style:solid}.navbar.navbar-default>.container{background-color:#cfcfc4}.navbar.navbar-default>.container>.nav a.active,.navbar.navbar-default>.container>.nav a:hover,.navbar.navbar-default>.container>.nav a:target{background-color:#eeeeea}.navbar.border-primary>.container{border-style:solid}.navbar.navbar-primary>.container{background-color:#779ecb}.navbar.navbar-primary>.container>.nav a.active,.navbar.navbar-primary>.container>.nav a:hover,.navbar.navbar-primary>.container>.nav a:target{background-color:#cfdded}.navbar.border-success>.container{border-style:solid}.navbar.navbar-success>.container{background-color:#7d7}.navbar.navbar-success>.container>.nav a.active,.navbar.navbar-success>.container>.nav a:hover,.navbar.navbar-success>.container>.nav a:target{background-color:#cff3cf}.navbar.border-info>.container{border-style:solid}.navbar.navbar-info>.container{background-color:#9bddff}.navbar.navbar-info>.container>.nav a.active,.navbar.navbar-info>.container>.nav a:hover,.navbar.navbar-info>.container>.nav a:target{background-color:#dcf3ff}.navbar.border-warning>.container{border-style:solid}.navbar.navbar-warning>.container{background-color:#ffb347}.navbar.navbar-warning>.container>.nav a.active,.navbar.navbar-warning>.container>.nav a:hover,.navbar.navbar-warning>.container>.nav a:target{background-color:#ffe4bf}.navbar.border-danger>.container{border-style:solid}.navbar.navbar-danger>.container{background-color:#ff6961}.navbar.navbar-danger>.container>.nav a.active,.navbar.navbar-danger>.container>.nav a:hover,.navbar.navbar-danger>.container>.nav a:target{background-color:#ffcbc8}.navbar>.container{clear:both;margin:0 auto 0 auto;display:table;width:100%;height:60px}.navbar>.container>.nav{float:right;margin:0 20px 0 0;display:inline-block}.navbar>.container>.nav>select{background-color:transparent}.navbar>.container>.nav>a{padding:20px 10px 22px 10px}.navbar>.container>.nav>a:active,.navbar>.container>.nav>a:hover,.navbar>.container>.nav>a:target{opacity:.6}.navbar .navbar-title{float:left;display:inline-block;margin:20px 0 0 20px}.panel{border:1px solid #cfcfc4;border-radius:5px}.panel.panel-white{border:1px solid #fff}.panel.panel-white .panel-footer,.panel.panel-white>.panel-heading{background-color:#fff;color:#000}.panel.panel-black{border:1px solid #000}.panel.panel-black .panel-footer,.panel.panel-black>.panel-heading{background-color:#000;color:#fff}.panel.panel-default{border:1px solid #cfcfc4}.panel.panel-default .panel-footer,.panel.panel-default>.panel-heading{background-color:#cfcfc4;color:#fff}.panel.panel-primary{border:1px solid #779ecb}.panel.panel-primary .panel-footer,.panel.panel-primary>.panel-heading{background-color:#779ecb;color:#fff}.panel.panel-success{border:1px solid #7d7}.panel.panel-success .panel-footer,.panel.panel-success>.panel-heading{background-color:#7d7;color:#fff}.panel.panel-info{border:1px solid #9bddff}.panel.panel-info .panel-footer,.panel.panel-info>.panel-heading{background-color:#9bddff;color:#fff}.panel.panel-warning{border:1px solid #ffb347}.panel.panel-warning .panel-footer,.panel.panel-warning>.panel-heading{background-color:#ffb347;color:#fff}.panel.panel-danger{border:1px solid #ff6961}.panel.panel-danger .panel-footer,.panel.panel-danger>.panel-heading{background-color:#ff6961;color:#fff}.panel .panel-footer,.panel .panel-heading,.panel>.panel-body{padding:15px}.panel>.panel-heading{top:0}.panel>.panel-footer{bottom:0}.tooltip,[data-tooltip]{position:relative;cursor:pointer}.tooltip:after,.tooltip:before,[data-tooltip]:after,[data-tooltip]:before{position:absolute;visibility:hidden;opacity:0;-webkit-transition:opacity .2s ease-in-out,visibility .2s ease-in-out,-webkit-transform .2s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .2s ease-in-out,visibility .2s ease-in-out,-webkit-transform .2s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .2s ease-in-out,visibility .2s ease-in-out,transform .2s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .2s ease-in-out,visibility .2s ease-in-out,transform .2s cubic-bezier(.71,1.7,.77,1.24),-webkit-transform .2s cubic-bezier(.71,1.7,.77,1.24);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);pointer-events:none}.tooltip:focus:after,.tooltip:focus:before,.tooltip:hover:after,.tooltip:hover:before,[data-tooltip]:focus:after,[data-tooltip]:focus:before,[data-tooltip]:hover:after,[data-tooltip]:hover:before{visibility:visible;opacity:1}.tooltip:before,[data-tooltip]:before{z-index:1001;border:6px solid transparent;background:0 0;content:""}.tooltip:after,[data-tooltip]:after{z-index:1000;padding:8px;min-width:160px;width:auto;background-color:#000;background-color:rgba(51,51,51,.9);color:#fff;content:attr(data-tooltip);font-size:14px;line-height:1.2}.tooltip-top:after,.tooltip-top:before,.tooltip:after,.tooltip:before,[data-tooltip]:after,[data-tooltip]:before{bottom:100%;left:50%}.tooltip-top:before,.tooltip:before,[data-tooltip]:before{margin-left:-6px;margin-bottom:-12px;border-top-color:#000;border-top-color:rgba(51,51,51,.9)}.tooltip-top:after,.tooltip:after,[data-tooltip]:after{margin-left:-80px}.tooltip-top:focus:after,.tooltip-top:focus:before,.tooltip-top:hover:after,.tooltip-top:hover:before,.tooltip:focus:after,.tooltip:focus:before,.tooltip:hover:after,.tooltip:hover:before,[data-tooltip]:focus:after,[data-tooltip]:focus:before,[data-tooltip]:hover:after,[data-tooltip]:hover:before{-webkit-transform:translateY(-12px);transform:translateY(-12px)}.tooltip-left:after,.tooltip-left:before{right:100%;bottom:50%;left:auto}.tooltip-left:before{margin-left:0;margin-right:-12px;margin-bottom:0;border-top-color:transparent;border-left-color:#000;border-left-color:rgba(51,51,51,.9)}.tooltip-left:focus:after,.tooltip-left:focus:before,.tooltip-left:hover:after,.tooltip-left:hover:before{-webkit-transform:translateX(-12px);transform:translateX(-12px)}.tooltip-bottom:after,.tooltip-bottom:before{top:100%;bottom:auto;left:50%}.tooltip-bottom:before{margin-top:-12px;margin-bottom:0;border-top-color:transparent;border-bottom-color:#000;border-bottom-color:rgba(51,51,51,.9)}.tooltip-bottom:focus:after,.tooltip-bottom:focus:before,.tooltip-bottom:hover:after,.tooltip-bottom:hover:before{-webkit-transform:translateY(12px);transform:translateY(12px)}.tooltip-right:after,.tooltip-right:before{bottom:50%;left:100%}.tooltip-right:before{margin-bottom:0;margin-left:-12px;border-top-color:transparent;border-right-color:#000;border-right-color:rgba(51,51,51,.9)}.tooltip-right:focus:after,.tooltip-right:focus:before,.tooltip-right:hover:after,.tooltip-right:hover:before{-webkit-transform:translateX(12px);transform:translateX(12px)}.tooltip-left:before,.tooltip-right:before{top:3px}.tooltip-left:after,.tooltip-right:after{margin-left:0;margin-bottom:-16px}[class^=tooltip-]{border-bottom:1px dotted #000;text-decoration:none}.progress{width:100%;border:1px solid #cfcfc4;text-align:center}.progress .progress-fill{font-size:16px;height:15px;padding:10px 0 10px 0;background-color:#779ecb}.progress .progress-fill.progress-fill-white{background-color:#fff;color:#000}.progress .progress-fill.progress-fill-white:hover{background-color:#fff}.progress .progress-fill.progress-fill-black{background-color:#000;color:#fff}.progress .progress-fill.progress-fill-black:hover{background-color:#404040}.progress .progress-fill.progress-fill-default{background-color:#cfcfc4;color:#fff}.progress .progress-fill.progress-fill-default:hover{background-color:#dbdbd3}.progress .progress-fill.progress-fill-primary{background-color:#779ecb;color:#fff}.progress .progress-fill.progress-fill-primary:hover{background-color:#99b6d8}.progress .progress-fill.progress-fill-success{background-color:#7d7;color:#fff}.progress .progress-fill.progress-fill-success:hover{background-color:#99e599}.progress .progress-fill.progress-fill-info{background-color:#9bddff;color:#fff}.progress .progress-fill.progress-fill-info:hover{background-color:#b4e6ff}.progress .progress-fill.progress-fill-warning{background-color:#ffb347;color:#fff}.progress .progress-fill.progress-fill-warning:hover{background-color:#ffc675}.progress .progress-fill.progress-fill-danger{background-color:#ff6961;color:#fff}.progress .progress-fill.progress-fill-danger:hover{background-color:#ff8f89}.spinner-overlay{position:relative;top:0;left:0;width:100%;height:100%;z-index:3}.spinner-wrapper{text-align:center;position:relative;top:calc(50% - 50px)}.spinner-wrapper>.spinner{min-height:30px;min-width:30px}.spinner-message{box-sizing:border-box;width:100%;margin-top:30px;text-align:center;font-weight:400;z-index:100;outline:0}.spinner{display:inline-block;min-height:20px;height:auto;min-width:20px;width:auto;background-color:transparent;animation:rotation .7s infinite linear;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid transparent;border-top:3px solid #2180c0;border-radius:100%}.spinner.spinner-absolute{position:absolute}.spinner.spinner-white{border-top:3px solid #fff}.spinner.spinner-white.spinner-done{border-color:#fff;border-width:3px 3px 3px 3px}.spinner.spinner-white.done:after{border-width:0 3px 0 3px}.spinner.spinner-black{border-top:3px solid #000}.spinner.spinner-black.spinner-done{border-color:#000;border-width:3px 3px 3px 3px}.spinner.spinner-black.done:after{border-width:0 3px 0 3px}.spinner.spinner-default{border-top:3px solid #cfcfc4}.spinner.spinner-default.spinner-done{border-color:#cfcfc4;border-width:3px 3px 3px 3px}.spinner.spinner-default.done:after{border-width:0 3px 0 3px}.spinner.spinner-primary{border-top:3px solid #779ecb}.spinner.spinner-primary.spinner-done{border-color:#779ecb;border-width:3px 3px 3px 3px}.spinner.spinner-primary.done:after{border-width:0 3px 0 3px}.spinner.spinner-success{border-top:3px solid #7d7}.spinner.spinner-success.spinner-done{border-color:#7d7;border-width:3px 3px 3px 3px}.spinner.spinner-success.done:after{border-width:0 3px 0 3px}.spinner.spinner-info{border-top:3px solid #9bddff}.spinner.spinner-info.spinner-done{border-color:#9bddff;border-width:3px 3px 3px 3px}.spinner.spinner-info.done:after{border-width:0 3px 0 3px}.spinner.spinner-warning{border-top:3px solid #ffb347}.spinner.spinner-warning.spinner-done{border-color:#ffb347;border-width:3px 3px 3px 3px}.spinner.spinner-warning.done:after{border-width:0 3px 0 3px}.spinner.spinner-danger{border-top:3px solid #ff6961}.spinner.spinner-danger.spinner-done{border-color:#ff6961;border-width:3px 3px 3px 3px}.spinner.spinner-danger.done:after{border-width:0 3px 0 3px}@-moz-keyframes rotation{from{transform:rotate(0)}to{transform:rotate(359deg)}}@-webkit-keyframes rotation{from{transform:rotate(0)}to{transform:rotate(359deg)}}@-o-keyframes rotation{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(359deg)}}.table{text-align:center;word-break:break-all}.table.table-white{border:none}.table.table-white thead>tr>th{color:#fff}.table.table-white td,.table.table-white th{color:#fff;border-bottom:.1rem solid #fff}.table.table-black{border:none}.table.table-black thead>tr>th{color:#000}.table.table-black td,.table.table-black th{color:#0d0d0d;border-bottom:.1rem solid #000}.table.table-default{border:none}.table.table-default thead>tr>th{color:#cfcfc4}.table.table-default td,.table.table-default th{color:#d1d1c7;border-bottom:.1rem solid #cfcfc4}.table.table-primary{border:none}.table.table-primary thead>tr>th{color:#779ecb}.table.table-primary td,.table.table-primary th{color:#7ea3ce;border-bottom:.1rem solid #779ecb}.table.table-success{border:none}.table.table-success thead>tr>th{color:#7d7}.table.table-success td,.table.table-success th{color:#7edf7e;border-bottom:.1rem solid #7d7}.table.table-info{border:none}.table.table-info thead>tr>th{color:#9bddff}.table.table-info td,.table.table-info th{color:#a0dfff;border-bottom:.1rem solid #9bddff}.table.table-warning{border:none}.table.table-warning thead>tr>th{color:#ffb347}.table.table-warning td,.table.table-warning th{color:#ffb750;border-bottom:.1rem solid #ffb347}.table.table-danger{border:none}.table.table-danger thead>tr>th{color:#ff6961}.table.table-danger td,.table.table-danger th{color:#ff7069;border-bottom:.1rem solid #ff6961}.table thead>tr>th{font-weight:700}.table tbody tr:last-child>th{border-bottom:0}.table tfoot td:empty{padding:0}.table td,.table th{border-bottom:.1rem solid #e1e1e1;text-align:left;padding:10px}.table.responsive{border-collapse:collapse;border-spacing:0;display:table}
@@ -1,69 +0,0 @@
1
- const http = require('http');
2
- const Url = require('url');
3
- const fs = require('fs');
4
- const path = require('path');
5
-
6
- const port = process.env.PORT;
7
-
8
- const map = {
9
- '.ico': 'image/x-icon',
10
- '.html': 'text/html',
11
- '.js': 'text/javascript',
12
- '.json': 'application/json',
13
- '.css': 'text/css',
14
- '.png': 'image/png',
15
- '.jpg': 'image/jpeg',
16
- '.wav': 'audio/wav',
17
- '.mp3': 'audio/mpeg',
18
- '.svg': 'image/svg+xml',
19
- '.pdf': 'application/pdf',
20
- '.doc': 'application/msword'
21
- };
22
-
23
- const cache = {};
24
-
25
- http.createServer((req, res) => {
26
- let { url } = req;
27
-
28
- if (url === '/') url = '/index.html';
29
-
30
- console.log(`${req.method} ${url}`); // eslint-disable-line
31
-
32
- const parsedUrl = Url.parse(url);
33
- let pathname = `.${parsedUrl.pathname}`;
34
-
35
- if(cache[pathname]) {
36
- res.setHeader('Content-Type', cache[pathname]['Content-Type']);
37
- return res.end(cache[pathname]['data']);
38
- }
39
-
40
- const ext = path.parse(pathname).ext;
41
-
42
- fs.exists(pathname, (exist) => {
43
- if (!exist) {
44
- res.statusCode = 404;
45
- res.end(`File ${pathname} not found!`);
46
- return;
47
- }
48
-
49
- if (fs.statSync(pathname).isDirectory()) pathname += '/index' + ext;
50
-
51
- fs.readFile(pathname, (err, data) => {
52
- if (err) {
53
- res.statusCode = 500;
54
- res.end(`Error getting the file: ${err}.`);
55
- } else {
56
- cache[pathname] = {
57
- 'Content-Type': map[ext] || 'text/plain',
58
- data
59
- };
60
- // if the file is found, set Content-type and send data
61
- res.setHeader('Content-Type', map[ext] || 'text/plain');
62
- res.end(data);
63
- }
64
- });
65
- });
66
-
67
- }).listen(parseInt(port), () => {
68
- console.log(`Server listening on port ${port}`); // eslint-disable-line
69
- });
@@ -1,12 +0,0 @@
1
- const http = require('http');
2
- const port = process.env.PORT || 8000;
3
-
4
- const server = http.createServer((req, res) => {
5
- res.writeHead(200, { 'Content-type': 'text/html; charset=utf-8' });
6
- res.write('Hello World 🌎');
7
- res.end();
8
- });
9
-
10
- server.listen(port, () => {
11
- console.log('🚀 server has liftoff');
12
- });
@@ -1,8 +0,0 @@
1
- const express = require('express');
2
- const app = express();
3
-
4
- app.get('/', (req, res) => {
5
- res.send('hello world');
6
- });
7
-
8
- app.listen(process.env.PORT);
@@ -1,14 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8">
5
- <link rel="stylesheet" href="./main.css">
6
- <title>Hello World</title>
7
- </head>
8
- <body>
9
- <div style="text-align:center;width:100%;position:absolute;top:50%;transform:translateY(-50%);">
10
- <h1> Welcome </h1>
11
- <small> <i> This is deployed on the ⛅️ </i> </small>
12
- </div>
13
- </body>
14
- </html>
@@ -1,51 +0,0 @@
1
- const test = require('tape');
2
- const path = require('path');
3
-
4
- const classifier = require('../../lib/classifier');
5
-
6
- test('@lib/classifier', (t) => {
7
- t.plan(4);
8
-
9
- const baseDirectory = path.resolve(__dirname, '..', 'fixtures');
10
-
11
- t.test('should be able to classify static site', (t) => {
12
- const directory = path.resolve(baseDirectory, 'static');
13
- const output = classifier(directory);
14
- t.deepEqual(output, {
15
- type: 'static',
16
- build: `\n FROM mhart/alpine-node:base-8\n WORKDIR ${directory}\n ADD . .\n\n CMD ["node", "index.js"]\n `
17
- });
18
- t.end();
19
- });
20
-
21
- t.test('should be able to classify node site', (t) => {
22
- const directory = path.resolve(baseDirectory, 'node');
23
- const output = classifier(directory);
24
- t.deepEqual(output, {
25
- type: 'node',
26
- build: `\n FROM mhart/alpine-node:8\n WORKDIR ${directory}\n ADD . .\n\n RUN npm install\n\n CMD ["npm", "start"]\n `
27
- });
28
- t.end();
29
- });
30
-
31
- t.test('should be able to classify docker site', (t) => {
32
- const directory = path.resolve(baseDirectory, 'docker');
33
- const output = classifier(directory);
34
-
35
- t.deepEqual(output, {
36
- type: 'docker',
37
- build: `FROM mhart/alpine-node:8\nWORKDIR ${directory}\nADD . .\n\nCMD ["node", "index.js"]\n`
38
- });
39
- t.end();
40
- });
41
-
42
- t.test('should be able to classify unknown deploy target', (t) => {
43
- const directory = path.resolve(baseDirectory, 'unknown');
44
- const output = classifier(directory);
45
-
46
- t.deepEqual(output, {
47
- type: 'unknown'
48
- });
49
- t.end();
50
- });
51
- });
@@ -1,30 +0,0 @@
1
- const test = require('tape');
2
-
3
- const { getPort, hash, contains } = require('../../../lib/helpers/util');
4
-
5
- test('@lib/util', (t) => {
6
- t.plan(3);
7
-
8
- t.test('@getPort: should be able return a valid port', (t) => {
9
- getPort((error, port) => {
10
- t.ok(!error);
11
- t.ok(Number.isInteger(port));
12
- t.end();
13
- });
14
- });
15
-
16
- t.test('@hash: should return a proper lowercase hash', (t) => {
17
- const ret = hash(6);
18
- t.ok(ret.length, 6);
19
- t.ok(ret.toLowerCase(), ret);
20
- t.end();
21
- });
22
-
23
- t.test('@contains: should be able to return a proper conditional for truthy and false cases', (t) => {
24
- t.ok(contains(['index.html', 'main.css'], ['index.html', '!Dockerfile', '!package.json']));
25
- t.notOk(contains(['index.html', 'main.css', 'Dockerfile'], ['index.html', '!Dockerfile', '!package.json']));
26
- t.notOk(contains([], ['index.html', '!Dockerfile', '!package.json']));
27
- t.end();
28
- });
29
-
30
- });