Browse Source

vergessen

burningTyger 6 years ago
parent
commit
8af765e0c9
27 changed files with 7416 additions and 0 deletions
  1. 448 0
      _brief.html
  2. 449 0
      _testbrief.html
  3. 3 0
      node_modules/json-formatter-js/.npmignore
  4. 12 0
      node_modules/json-formatter-js/.travis.yml
  5. 21 0
      node_modules/json-formatter-js/LICENSE
  6. 98 0
      node_modules/json-formatter-js/README.md
  7. 26 0
      node_modules/json-formatter-js/bower.json
  8. 4574 0
      node_modules/json-formatter-js/demo/giant.json
  9. 84 0
      node_modules/json-formatter-js/demo/index.js
  10. 12 0
      node_modules/json-formatter-js/demo/webpack.config.js
  11. 275 0
      node_modules/json-formatter-js/dist/demo/index.js
  12. 0 0
      node_modules/json-formatter-js/dist/demo/index.js.map
  13. 203 0
      node_modules/json-formatter-js/dist/json-formatter.js
  14. 0 0
      node_modules/json-formatter-js/dist/json-formatter.js.map
  15. 7 0
      node_modules/json-formatter-js/dist/src/helpers.d.ts
  16. 96 0
      node_modules/json-formatter-js/dist/src/index.d.ts
  17. 0 0
      node_modules/json-formatter-js/dist/test/spec.d.ts
  18. 91 0
      node_modules/json-formatter-js/index.html
  19. 81 0
      node_modules/json-formatter-js/package.json
  20. 13 0
      node_modules/json-formatter-js/server.js
  21. 109 0
      node_modules/json-formatter-js/src/helpers.ts
  22. 453 0
      node_modules/json-formatter-js/src/index.ts
  23. 127 0
      node_modules/json-formatter-js/src/style.less
  24. 1 0
      node_modules/json-formatter-js/src/style.less.d.ts
  25. 168 0
      node_modules/json-formatter-js/test/spec.ts
  26. 17 0
      node_modules/json-formatter-js/tsconfig.json
  27. 48 0
      node_modules/json-formatter-js/webpack.config.js

+ 448 - 0
_brief.html

@@ -0,0 +1,448 @@
+    <div class="page grid" orientation="portrait" size="A4">
+      <span class="falzmarke-oben">––</span>
+      <span class="falzmarke-unten">––</span>
+      <div class="seitenlogo">
+        <img src="daten/traeger_logo.svg" height="160px" alt="traeger_logo" />
+      </div>
+      <div class="header">
+        <img class="logo" src="daten/bk_logo.svg" alt="Briefkopf" />
+        <hr class="hr-rot hr" />
+      </div>
+      <div class="main">
+        <div class="sidebar">
+          <div class="sidebar-oben">
+            Am Zionswald 12<br />33617 Bielefeld
+            <div class="voffset-1"></div>
+            Telefon 0521 144-2467<br />Telefax 0521 144-2470<br />berufskolleg@fvbschulen.de<br />www.berufskolleg-bethel.de
+            <div class="voffset-1"></div>
+            Bürozeiten:<br />Mo. und Do.<br />07:15 – 12:30 Uhr<br />13:30 – 15:30 Uhr<br />Di., Mi. und Fr.<br />07:15 – 13:30 Uhr
+            <div class="voffset-1"></div>
+            {(new Date().toLocaleDateString('de', {day: '2-digit', month: '2-digit', year: 'numeric'}))}<br />
+            <slot name="kuerzel"></slot>
+          </div>
+          <div class="sidebar-unten">
+            Unsere Bildungsgänge:
+            <div class="voffset-1"></div>
+            <b>Berufliches Gymnasium</b><br />Erziehung und Soziales<br />(Erzieher_in / AHR)
+            <div class="voffset-1"></div>
+            <b>Fachschulen</b><br />Sozialpädagogik<br />Heilerziehungspflege<br />Heilpädagogik<br />Heilpädagogische Förderung<br />mit dem Pferd
+            <div class="voffset-1"></div>
+            <b>Fachoberschule</b><br />Gesundheit und Soziales
+            <div class="voffset-1"></div>
+            <b>Berufsfachschulen</b><br />Sozialassistenz/<br />Heilerziehung
+            <div class="voffset-1"></div>
+            <b>Weitere Informationen:</b><br />www.berufskolleg-bethel.de
+          </div>
+        </div>
+        <div class="links">
+          <div class="absender">
+            v.Bodelschwinghsche Stiftungen Bethel<br /><b>Berufskolleg Bethel </b>· Postfach 130 160 · 33544 Bielefeld
+          </div>
+          <div class="anschrift">
+            <slot name="anschrift"></slot>
+          </div>
+          <div class="anschreiben">
+            <slot></slot>
+          </div>
+        </div>
+      </div>
+    </div>
+
+<style>
+.page {
+  font-size: 1.2em;
+  line-height: 1.5;
+  font-weight: normal;
+  font-family: "Tex Gyre Heros";
+  color: #333;
+  position: relative;
+  padding: 0;
+  display: block;
+}
+.grid {
+  display: grid;
+  align-content: stretch;
+  grid-template-rows: 35mm auto;
+  grid-template-areas:
+    "header"
+    "main";
+}
+
+.header {
+  display: grid;
+  grid-area: header;
+  align-self: start;
+  margin-left: 24.1mm;
+  margin-right: 8.1mm;
+  grid-template-columns: auto;
+  grid-template-rows: auto;
+  grid-template-areas:
+    "logo"
+    "hr";
+}
+
+.logo {
+  justify-content: end;
+  margin-top: 10mm;
+  grid-area: logo;
+  margin-left: auto;
+}
+
+.hr {
+  grid-area: hr;
+  align-self: end;
+}
+
+.main {
+  grid-area: main;
+  align-content: stretch;
+  display: grid;
+  grid-template-columns: 2fr 1fr;
+  height: 100%;
+  grid-template-areas:
+    "links sidebar";
+}
+
+.links {
+  display: grid;
+  grid-area: links;
+  grid-template-rows: 10mm 40mm auto;
+  margin-bottom: 10mm;
+  grid-template-areas:
+    "absender"
+    "anschrift"
+    "anschreiben";
+}
+
+.absender {
+  grid-area: absender;
+  font-size: 7.5pt;
+  margin-left: 20mm;
+}
+
+.anschrift {
+  grid-area: anschrift;
+  font-size: 11pt;
+  margin-left: 25mm;
+}
+
+.anschreiben {
+  grid-area: anschreiben;
+  font-size: 11pt;
+  margin-left: 25mm;
+  width: 115mm;
+}
+
+.sidebar {
+  display: grid;
+  margin-right: 8.1mm;
+  justify-self: end;
+  grid-area: sidebar;
+  margin-bottom: 10mm;
+  grid-template-rows: auto;
+  grid-template-areas:
+    "sidebar-oben"
+    "sidebar-unten";
+}
+
+.sidebar-oben {
+  grid-area: sidebar-oben;
+  align-self: start;
+}
+
+.sidebar-unten {
+  grid-area: sidebar-unten;
+  align-self: end;
+}
+
+.flex-grid {
+  display: flex;
+}
+
+.col {
+  flex: 1;
+}
+
+.col-2 {
+  flex: 2;
+}
+
+@import url(normalize.css);
+@font-face {
+  font-family: 'TeX Gyre Heros';
+  src: url("texgyreheros-regular-webfont.woff") format("woff");
+  font-style: normal;
+}
+@font-face {
+  font-family: 'TeX Gyre Heros';
+  src: url("texgyreheros-bold-webfont.woff") format("woff");
+  font-style: normal;
+  font-weight: bold;
+}
+@font-face {
+  font-family: 'TeX Gyre Heros';
+  src: url("texgyreheros-italic-webfont.woff") format("woff");
+  font-style: italic;
+}
+@font-face {
+  font-family: 'TeX Gyre Heros';
+  src: url("texgyreheros-bolditalic-webfont.woff") format("woff");
+  font-style: italic;
+  font-weight: bold;
+}
+
+@media print {
+  * {
+    -webkit-print-color-adjust: exact;
+  }
+
+  .page {
+    page-break-after: always;
+    page-break-inside: avoid;
+    margin: 0;
+  }
+}
+
+/*
+Da *named pages*, also z.B. @page a3landscape noch nicht von Chrome
+unterstützt werden, gilt vorerst die Standard-Einstellung von A4 Portrait.
+Um andere Formate zu erzeugen, muss die Größe in den svelte-Koponenten
+als setup-Einstellung hinterlegt werden. Oder man verwendet ein besonderes CSS
+mit der anderen Einstellung.
+Dazu bitte ein @import 'nicht_a4_portrait.css' verwenden. Svelte ignoriert sonst
+die in den <style> tags hinterlegten @... Anweisungen.
+Link: https://www.w3.org/TR/css3-page/#using-named-pages
+*/
+
+.page[size="A4"][orientation="portrait"] {
+  page: a4portrait;
+  width: 210mm;
+  height: 296.8mm;
+}
+@page a4portrait {
+  margin: 0;
+  size: A4 portrait;
+}
+
+.page[size="A4"][orientation="landscape"] {
+  page: a4landscape;
+  width: 296.8mm;
+  height: 210mm;
+}
+@page a4landscape {
+  margin: 0;
+  size: A4 landscape;
+}
+
+.page[size="A3"][orientation="portrait"] {
+  page: a3portrait;
+  width: 296.8mm;
+  height: 420mm;
+}
+@page a3portrait {
+  margin: 0;
+  size: A3 portrait;
+}
+
+.page[size="A3"][orientation="landscape"] {
+  page: a3landscape;
+  width: 420mm;
+  height: 296.8mm;
+}
+@page a3landscape {
+  margin: 0;
+  size: A3 landscape;
+}
+
+.page[size="A5"][orientation="portrait"] {
+  page: a5portrait;
+  width: 148mm;
+  height: 210mm;
+}
+@page a5portrait {
+  margin: 0;
+  size: A5 portrait;
+}
+
+.page[size="A5"][orientation="landscape"] {
+  page: a5landscape;
+  width: 210mm;
+  height: 148mm;
+}
+@page a5landscape {
+  margin: 0;
+  size: A5 landscape;
+}
+
+@media screen {
+  .page {
+    border: 1px solid black;
+    box-shadow: 5px 5px 4px 0 silver;
+  }
+}
+
+svelte {
+  font-size: 62.5%;
+}
+
+
+/* Typography */
+h1, h2, h3, h4, h5, h6 {
+  margin-top: 0;
+  margin-bottom: 0;
+  font-weight: 400;
+}
+
+h1 {
+  font-size: 4.0em;
+  line-height: 1.2;
+  letter-spacing: -.1em;
+}
+
+h2 {
+  font-size: 3.6em;
+  line-height: 1.25;
+  letter-spacing: -.1em;
+}
+
+h3 {
+  font-size: 3.0em;
+  line-height: 1.3;
+  letter-spacing: -.1em;
+}
+
+h4 {
+  font-size: 2.4em;
+  line-height: 1.35;
+  letter-spacing: -.08em;
+}
+
+h5 {
+  font-size: 1.8em;
+  line-height: 1.5;
+  letter-spacing: -.05em;
+}
+
+h6 {
+  font-size: 1.5em;
+  line-height: 1.6;
+  letter-spacing: 0;
+}
+
+p {
+  margin-top: 0;
+}
+.voffset-halb {
+  margin-top: 0.5em;
+}
+
+.voffset-1 {
+  margin-top: 1em;
+}
+
+.voffset-2 {
+  margin-top: 2em;
+}
+
+.voffset-3 {
+  margin-top: 3em;
+}
+
+.voffset-4 {
+  margin-top: 4em;
+}
+
+.voffset-5 {
+  margin-top: 5em;
+}
+
+.voffset-6 {
+  margin-top: 6em;
+}
+
+.voffset-7 {
+  margin-top: 7em;
+}
+
+.voffset-8 {
+  margin-top: 8em;
+}
+
+.voffset-9 {
+  margin-top: 9em;
+}
+
+.voffset-10 {
+  margin-top: 10em;
+}
+
+.voffset-11 {
+  margin-top: 11em;
+}
+
+.voffset-12 {
+  margin-top: 12em;
+}
+
+.voffset-13 {
+  margin-top: 13em;
+}
+
+.voffset-14 {
+  margin-top: 14em;
+}
+
+.voffset-15 {
+  margin-top: 15em;
+}
+
+.voffset-16 {
+  margin-top: 16em;
+}
+
+.voffset-17 {
+  margin-top: 17em;
+}
+
+.voffset-18 {
+  margin-top: 18em;
+}
+
+.voffset-19 {
+  margin-top: 19em;
+}
+
+.voffset-20 {
+  margin-top: 20em;
+}
+
+.text-center {
+  text-align: center !important;
+}
+
+hr {
+  border: 0;
+  border-top: 1px solid #eee;
+  border-color: #000;
+  height: 1px;
+  margin: 3px 0;
+}
+.hr-rot {
+  border-color: #ff2700;
+  margin: 8px 0;
+}
+.hr-grau {
+  border-color: #646464 !important;
+}
+
+.falzmarke-oben {
+  position: absolute;
+  top: 105mm;
+  left: 10mm;
+}
+.falzmarke-unten {
+  position: absolute;
+  top: 210mm;
+  left: 10mm;
+}
+</style>

+ 449 - 0
_testbrief.html

@@ -0,0 +1,449 @@
+    <div class="page grid" orientation="portrait" size="A4">
+      <span class="falzmarke-oben">––</span>
+      <span class="falzmarke-unten">––</span>
+      <div class="seitenlogo">
+        <img src="daten/logo_seite_dummy.svg" height="160px" alt="traeger_logo" />
+      </div>
+      <div class="header">
+        <img class="logo" src="daten/top_dummy.svg" alt="Briefkopf" />
+        <hr class="hr-rot hr" />
+      </div>
+      <div class="main">
+        <div class="sidebar">
+          <div class="sidebar-oben">
+            Somewhere 12<br />12345 Nowhere
+            <div class="voffset-1"></div>
+            Telefon 0123 1412617<br />Telefax 0122 14214270<br />us@thisaddress.de<br />www.thisaddress.de
+            <div class="voffset-1"></div>
+            Bürozeiten:<br />Mo. und Do.<br />07:15 – 12:30 Uhr<br />13:30 – 15:30 Uhr<br />Di., Mi. und Fr.<br />07:15 – 13:30 Uhr
+            <div class="voffset-1"></div>
+            {(new Date().toLocaleDateString('de', {day: '2-digit', month: '2-digit', year: 'numeric'}))}<br />
+            <slot name="kuerzel"></slot>
+          </div>
+          <div class="sidebar-unten">
+            Important stuff:
+            <div class="voffset-1"></div>
+            <b>This here</b><br />Foo<br />Bar
+            <div class="voffset-1"></div>
+            <b>That</b><br />Hoo<br />Haaaaaaaaa<br />jOOOOOOOO<br />weeeeeee waaaa<br />wuuu
+            <div class="voffset-1"></div>
+            <b>gggggggg</b><br />wedwedwae wedw wdweewe
+            <div class="voffset-1"></div>
+            <b>wedwedwedwed</b><br />dwedwefffff/<br />Hewq)wedwef
+            <div class="voffset-1"></div>
+            <b>Weitere Informationen:</b><br />www.thisaddress.de
+          </div>
+        </div>
+        <div class="links">
+          <div class="absender">
+            Me somewhere<br /><b>at this place</b>· Postfach 123 456 · 12345 Nowhere
+          </div>
+          <div class="anschrift">
+            <slot name="anschrift"></slot>
+          </div>
+          <div class="anschreiben">
+            <slot></slot>
+          </div>
+        </div>
+      </div>
+    </div>
+
+<style>
+.page {
+  font-size: 1.2em;
+  line-height: 1.5;
+  font-weight: normal;
+  font-family: "Tex Gyre Heros";
+  color: #333;
+  position: relative;
+  padding: 0;
+  display: block;
+}
+.grid {
+  display: grid;
+  align-content: stretch;
+  grid-template-rows: 35mm auto;
+  grid-template-areas:
+    "header"
+    "main";
+}
+
+.header {
+  display: grid;
+  grid-area: header;
+  align-self: start;
+  margin-left: 24.1mm;
+  margin-right: 8.1mm;
+  grid-template-columns: auto;
+  grid-template-rows: auto;
+  grid-template-areas:
+    "logo"
+    "hr";
+}
+
+.logo {
+  justify-content: end;
+  margin-top: 10mm;
+  grid-area: logo;
+  margin-left: auto;
+  height: 20mm;
+}
+
+.hr {
+  grid-area: hr;
+  align-self: end;
+}
+
+.main {
+  grid-area: main;
+  align-content: stretch;
+  display: grid;
+  grid-template-columns: 2fr 1fr;
+  height: 100%;
+  grid-template-areas:
+    "links sidebar";
+}
+
+.links {
+  display: grid;
+  grid-area: links;
+  grid-template-rows: 10mm 40mm auto;
+  margin-bottom: 10mm;
+  grid-template-areas:
+    "absender"
+    "anschrift"
+    "anschreiben";
+}
+
+.absender {
+  grid-area: absender;
+  font-size: 7.5pt;
+  margin-left: 20mm;
+}
+
+.anschrift {
+  grid-area: anschrift;
+  font-size: 11pt;
+  margin-left: 25mm;
+}
+
+.anschreiben {
+  grid-area: anschreiben;
+  font-size: 11pt;
+  margin-left: 25mm;
+  width: 115mm;
+}
+
+.sidebar {
+  display: grid;
+  margin-right: 8.1mm;
+  justify-self: end;
+  grid-area: sidebar;
+  margin-bottom: 10mm;
+  grid-template-rows: auto;
+  grid-template-areas:
+    "sidebar-oben"
+    "sidebar-unten";
+}
+
+.sidebar-oben {
+  grid-area: sidebar-oben;
+  align-self: start;
+}
+
+.sidebar-unten {
+  grid-area: sidebar-unten;
+  align-self: end;
+}
+
+.flex-grid {
+  display: flex;
+}
+
+.col {
+  flex: 1;
+}
+
+.col-2 {
+  flex: 2;
+}
+
+@import url(normalize.css);
+@font-face {
+  font-family: 'TeX Gyre Heros';
+  src: url("texgyreheros-regular-webfont.woff") format("woff");
+  font-style: normal;
+}
+@font-face {
+  font-family: 'TeX Gyre Heros';
+  src: url("texgyreheros-bold-webfont.woff") format("woff");
+  font-style: normal;
+  font-weight: bold;
+}
+@font-face {
+  font-family: 'TeX Gyre Heros';
+  src: url("texgyreheros-italic-webfont.woff") format("woff");
+  font-style: italic;
+}
+@font-face {
+  font-family: 'TeX Gyre Heros';
+  src: url("texgyreheros-bolditalic-webfont.woff") format("woff");
+  font-style: italic;
+  font-weight: bold;
+}
+
+@media print {
+  * {
+    -webkit-print-color-adjust: exact;
+  }
+
+  .page {
+    page-break-after: always;
+    page-break-inside: avoid;
+    margin: 0;
+  }
+}
+
+/*
+Da *named pages*, also z.B. @page a3landscape noch nicht von Chrome
+unterstützt werden, gilt vorerst die Standard-Einstellung von A4 Portrait.
+Um andere Formate zu erzeugen, muss die Größe in den svelte-Koponenten
+als setup-Einstellung hinterlegt werden. Oder man verwendet ein besonderes CSS
+mit der anderen Einstellung.
+Dazu bitte ein @import 'nicht_a4_portrait.css' verwenden. Svelte ignoriert sonst
+die in den <style> tags hinterlegten @... Anweisungen.
+Link: https://www.w3.org/TR/css3-page/#using-named-pages
+*/
+
+.page[size="A4"][orientation="portrait"] {
+  page: a4portrait;
+  width: 210mm;
+  height: 296.8mm;
+}
+@page a4portrait {
+  margin: 0;
+  size: A4 portrait;
+}
+
+.page[size="A4"][orientation="landscape"] {
+  page: a4landscape;
+  width: 296.8mm;
+  height: 210mm;
+}
+@page a4landscape {
+  margin: 0;
+  size: A4 landscape;
+}
+
+.page[size="A3"][orientation="portrait"] {
+  page: a3portrait;
+  width: 296.8mm;
+  height: 420mm;
+}
+@page a3portrait {
+  margin: 0;
+  size: A3 portrait;
+}
+
+.page[size="A3"][orientation="landscape"] {
+  page: a3landscape;
+  width: 420mm;
+  height: 296.8mm;
+}
+@page a3landscape {
+  margin: 0;
+  size: A3 landscape;
+}
+
+.page[size="A5"][orientation="portrait"] {
+  page: a5portrait;
+  width: 148mm;
+  height: 210mm;
+}
+@page a5portrait {
+  margin: 0;
+  size: A5 portrait;
+}
+
+.page[size="A5"][orientation="landscape"] {
+  page: a5landscape;
+  width: 210mm;
+  height: 148mm;
+}
+@page a5landscape {
+  margin: 0;
+  size: A5 landscape;
+}
+
+@media screen {
+  .page {
+    border: 1px solid black;
+    box-shadow: 5px 5px 4px 0 silver;
+  }
+}
+
+svelte {
+  font-size: 62.5%;
+}
+
+
+/* Typography */
+h1, h2, h3, h4, h5, h6 {
+  margin-top: 0;
+  margin-bottom: 0;
+  font-weight: 400;
+}
+
+h1 {
+  font-size: 4.0em;
+  line-height: 1.2;
+  letter-spacing: -.1em;
+}
+
+h2 {
+  font-size: 3.6em;
+  line-height: 1.25;
+  letter-spacing: -.1em;
+}
+
+h3 {
+  font-size: 3.0em;
+  line-height: 1.3;
+  letter-spacing: -.1em;
+}
+
+h4 {
+  font-size: 2.4em;
+  line-height: 1.35;
+  letter-spacing: -.08em;
+}
+
+h5 {
+  font-size: 1.8em;
+  line-height: 1.5;
+  letter-spacing: -.05em;
+}
+
+h6 {
+  font-size: 1.5em;
+  line-height: 1.6;
+  letter-spacing: 0;
+}
+
+p {
+  margin-top: 0;
+}
+.voffset-halb {
+  margin-top: 0.5em;
+}
+
+.voffset-1 {
+  margin-top: 1em;
+}
+
+.voffset-2 {
+  margin-top: 2em;
+}
+
+.voffset-3 {
+  margin-top: 3em;
+}
+
+.voffset-4 {
+  margin-top: 4em;
+}
+
+.voffset-5 {
+  margin-top: 5em;
+}
+
+.voffset-6 {
+  margin-top: 6em;
+}
+
+.voffset-7 {
+  margin-top: 7em;
+}
+
+.voffset-8 {
+  margin-top: 8em;
+}
+
+.voffset-9 {
+  margin-top: 9em;
+}
+
+.voffset-10 {
+  margin-top: 10em;
+}
+
+.voffset-11 {
+  margin-top: 11em;
+}
+
+.voffset-12 {
+  margin-top: 12em;
+}
+
+.voffset-13 {
+  margin-top: 13em;
+}
+
+.voffset-14 {
+  margin-top: 14em;
+}
+
+.voffset-15 {
+  margin-top: 15em;
+}
+
+.voffset-16 {
+  margin-top: 16em;
+}
+
+.voffset-17 {
+  margin-top: 17em;
+}
+
+.voffset-18 {
+  margin-top: 18em;
+}
+
+.voffset-19 {
+  margin-top: 19em;
+}
+
+.voffset-20 {
+  margin-top: 20em;
+}
+
+.text-center {
+  text-align: center !important;
+}
+
+hr {
+  border: 0;
+  border-top: 1px solid #eee;
+  border-color: #000;
+  height: 1px;
+  margin: 3px 0;
+}
+.hr-rot {
+  border-color: #ff2700;
+  margin: 8px 0;
+}
+.hr-grau {
+  border-color: #646464 !important;
+}
+
+.falzmarke-oben {
+  position: absolute;
+  top: 105mm;
+  left: 10mm;
+}
+.falzmarke-unten {
+  position: absolute;
+  top: 210mm;
+  left: 10mm;
+}
+</style>

+ 3 - 0
node_modules/json-formatter-js/.npmignore

@@ -0,0 +1,3 @@
+.idea
+node_modules
+*.log

+ 12 - 0
node_modules/json-formatter-js/.travis.yml

@@ -0,0 +1,12 @@
+sudo: required
+dist: trusty
+language: node_js
+node_js: stable
+before_install:
+  - export CHROME_BIN=/usr/bin/google-chrome
+  - export DISPLAY=:99.0
+  - sh -e /etc/init.d/xvfb start
+  - sudo apt-get update
+  - sudo apt-get install -y libappindicator1 fonts-liberation
+  - wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
+  - sudo dpkg -i google-chrome*.deb

+ 21 - 0
node_modules/json-formatter-js/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Mohsen Azimi
+
+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.

+ 98 - 0
node_modules/json-formatter-js/README.md

@@ -0,0 +1,98 @@
+# JSON Formatter
+
+[![Build Status](https://travis-ci.org/mohsen1/json-formatter-js.svg?branch=master)](https://travis-ci.org/mohsen1/json-formatter-js)
+
+> Render JSON objects in HTML with a **collapsible** navigation.
+
+JSON Formatter started as an [AngularJS directive](https://github.com/mohsen1/json-formatter). This is pure JavaScript implementation of the same module.
+
+**[Live Demo](http://azimi.me/json-formatter-js/)**
+
+### Usage
+
+Install via npm
+
+```shell
+npm install --save json-formatter-js
+```
+include `json-formatter.js` from `dist` folder in your page.
+```js
+import JSONFormatter from 'json-formatter-js'
+
+const myJSON = {ans: 42};
+
+const formatter = new JSONFormatter(myJSON);
+
+document.body.appendChild(formatter.render());
+
+```
+
+### API
+
+#### `JSONFormatter(json [, open [, config] ])`
+
+##### `json` (`Object`) - **required**
+The JSON object you want to render. It has to be an object or array. Do NOT pass raw JSON string.
+##### `open` (`Number`)
+Default: `1`
+This number indicates up to how many levels the rendered tree should expand. Set it to `0` to make the whole tree collapsed or set it to `Infinity` to expand the tree deeply
+##### `config` (`Object`)
+Default:
+```js
+{
+  hoverPreviewEnabled: false,
+  hoverPreviewArrayCount: 100,
+  hoverPreviewFieldCount: 5,
+  theme: '',
+  animateOpen: true,
+  animateClose: true
+}
+```
+Available configurations:
+##### Hover Preview
+* `hoverPreviewEnabled`:  enable preview on hover.
+* `hoverPreviewArrayCount`: number of array items to show in preview Any array larger than this number will be shown as `Array[XXX]` where `XXX` is length of the array.
+* `hoverPreviewFieldCount`: number of object properties to show for object preview. Any object with more properties that thin number will be truncated.
+
+##### Theme
+* `theme`: a string that can be any of these options: `['dark']`. Look at [`src/style.less`](src/style.less) for making new themes.
+
+##### Animation
+* `animateOpen`: enable animation when expanding json object. True by default.
+* `animateClose`: enable animation when closing json object. True by default.
+
+#### `openAtDepth([depth])`
+
+```js
+const formatter = new Formatter({ ... });
+document.body.appendChild(formatter.render());
+formatter.openAtDepth(3);
+```
+
+##### `depth` (`Number`)
+Default: `1`
+This number indicates up to how many levels the rendered tree should open. It allows use cases such as collapse all levels (with value `0`) or expand all levels (with value `Infinity`).
+
+### Development
+Install the dependencies:
+
+```
+npm install
+```
+
+Run the dev server
+
+```
+npm start
+```
+
+#### Running tests
+
+**Once:**
+
+```shell
+npm test
+```
+
+### License
+[MIT](./LICENSE)

+ 26 - 0
node_modules/json-formatter-js/bower.json

@@ -0,0 +1,26 @@
+{
+  "name": "json-formatter-js",
+  "version": "2.0.0",
+  "authors": [
+    "Mohsen Azimi <me@azimi.me>"
+  ],
+  "main": [
+    "dist/json-formatter.js",
+    "dist/style.css"
+  ],
+  "moduleType": [
+    "node"
+  ],
+  "keywords": [
+    "json"
+  ],
+  "license": "MIT",
+  "homepage": "mohsen1/json-formatter-js",
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests"
+  ]
+}

+ 4574 - 0
node_modules/json-formatter-js/demo/giant.json

@@ -0,0 +1,4574 @@
+{
+    "swagger": "2.0",
+    "info": {
+        "version": "1.1",
+        "title": "Twitter REST API This is interesting in so many cases"
+    },
+    "host": "api.twitter.com",
+    "basePath": "/1.1",
+    "schemes": [
+        "http",
+        "https"
+    ],
+    "consumes": [
+        "application/json"
+    ],
+    "produces": [
+        "application/json"
+    ],
+    "securityDefinitions": {
+        "oauth": {
+            "type": "oauth2",
+            "flow": "implicit",
+            "authorizationUrl": "https://twitter.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token",
+            "scopes": {
+                "basic": "to read any and all data related to twitter this is interesting op\n"
+            }
+        }
+    },
+    "security": [
+        {
+            "oauth": [
+                "basic"
+            ]
+        }
+    ],
+    "paths": {
+        "/statuses/mentions_timeline": {
+            "get": {
+                "description": "Returns the 20 most recent mentions for the authenticating kkkkkkk user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "count",
+                        "in": "query",
+                        "description": "Specifies the number of tweets to try and retrieve",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "since_id",
+                        "in": "query",
+                        "description": "Returns result with an ID greater than the specified ID",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "max_id",
+                        "in": "query",
+                        "description": "Returns results with an ID less than or equal to the specified ID",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "trim_user",
+                        "in": "query",
+                        "description": "When set to either true, t or 1, each tweet returned in a timeline will include a user object",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "contributor_details",
+                        "in": "query",
+                        "description": "This parameter enhances the contributors element of the status response",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "The entities node will be disincluded when set to false",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Tweets"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/statuses/user_timeline": {
+            "get": {
+                "description": "Returns a collection of the most recent Tweets posted by the User",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "count",
+                        "in": "query",
+                        "description": "Specifies the number of tweets to try and rppetrieve",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "since_id",
+                        "in": "query",
+                        "description": "Returns result with an ID greater than the specified ID",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "max_id",
+                        "in": "query",
+                        "description": "Returns results with an ID less than or equal to the specified ID",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "trim_user",
+                        "in": "query",
+                        "description": "When set to either true, t or 1, each tweet returned in a timeline will include a user object",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "exclude_replies",
+                        "in": "query",
+                        "description": "This paramters will prevent from appearing in the returned timeline",
+                        "required": false,
+                        "type": "boolean"
+                    },
+                    {
+                        "name": "contributor_details",
+                        "in": "query",
+                        "description": "This paramters enhances the contributors element of the status response to include the screen_name of the contributor",
+                        "required": false,
+                        "type": "boolean"
+                    },
+                    {
+                        "name": "include_rts",
+                        "in": "query",
+                        "description": "When set to false, the timeline will strip any native retweet",
+                        "required": false,
+                        "type": "boolean"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Tweets"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/statuses/home_timeline": {
+            "get": {
+                "description": "Returns a collection of the most recent Tweets",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "since_id",
+                        "in": "query",
+                        "description": "Returns result with an ID greater than the specified ID",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "max_id",
+                        "in": "query",
+                        "description": "Returns results with an ID less than or equal to the specified ID",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "trim_user",
+                        "in": "query",
+                        "description": "When set to either true, t or 1, each tweet returned in a timeline will include a user object",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "exclude_replies",
+                        "in": "query",
+                        "description": "This paramters will prevent from appearing in the returned timeline",
+                        "required": false,
+                        "type": "boolean"
+                    },
+                    {
+                        "name": "contributor_details",
+                        "in": "query",
+                        "description": "This paramters enhances the contributors element of the status response to include the screen_name of the contributor",
+                        "required": false,
+                        "type": "boolean"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Tweets"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/statuses/retweets/{id}": {
+            "post": {
+                "description": "Retweens a tweet",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "id",
+                        "in": "path",
+                        "description": "The numerical ID of the desired status",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "trim_user",
+                        "in": "query",
+                        "description": "When set to either true, t or 1, each tweet returned in a timeline will include a user object",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Tweets"
+                        }
+                    }
+                }
+            }
+        },
+        "/statuses/show/{id}": {
+            "get": {
+                "description": "Retruns a single Tweet",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "id",
+                        "in": "path",
+                        "description": "The numerical ID of the desired status",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "trim_user",
+                        "in": "query",
+                        "description": "When set to either true, t or 1, each tweet returned in a timeline will include a user object",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_my_retweet",
+                        "in": "query",
+                        "description": "When set to either true, t or 1, any Tweets returned that have been retweeted by the authenticating",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "type": "string",
+                        "in": "query",
+                        "description": "The entities node will be disincluded when set to false",
+                        "required": false
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success if that matters wd sw",
+                        "schema": {
+                            "$ref": "#/definitions/Tweets"
+                        }
+                    }
+                }
+            }
+        },
+        "/statuses/destroy/{id}": {
+            "post": {
+                "description": "Destroys the status specified by the required ID parameter",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "id",
+                        "in": "path",
+                        "description": "The numerical ID of the desired status",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "trim_user",
+                        "in": "query",
+                        "description": "When set to either true, t or 1, each tweet returned in a timeline will include a user object",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Tweets"
+                        }
+                    }
+                }
+            }
+        },
+        "/statuses/update": {
+            "post": {
+                "description": "Updates the authenticating user's status",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "status",
+                        "in": "query",
+                        "description": "The text of your status update",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "in_reply_to_status_id",
+                        "in": "query",
+                        "description": "The ID of an existing status",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "lat",
+                        "in": "query",
+                        "description": "The latitude of the location",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "long",
+                        "in": "query",
+                        "description": "The longitude of the location",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "place_id",
+                        "in": "query",
+                        "description": "A place in the world",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "display_coordinates",
+                        "in": "query",
+                        "description": "Whether or not to put a pin on the exact coordinates a tweet",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "trim_user",
+                        "in": "query",
+                        "description": "When set to either true, t or 1, each tweet returned in a timeline will include a user object",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Tweets"
+                        }
+                    },
+                    "403": {
+                        "description": "Error"
+                    }
+                }
+            }
+        },
+        "/statuses/oembed": {
+            "get": {
+                "description": "Returns information allowing the creation of an embedded representation",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "id",
+                        "in": "query",
+                        "description": "The tweet/status id to return embed code for",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "url",
+                        "in": "query",
+                        "description": "The encoded URL of the Tweet status to be embedded",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "maxwidth",
+                        "in": "query",
+                        "description": "The maximum width in pixels that the embed should be rendered at",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "hide_media",
+                        "in": "query",
+                        "description": "Specifies whether the embedded tweet should automatically show the original message in the case that the embedded Tweet is a reply",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "hide_thread",
+                        "in": "query",
+                        "description": "Specifies whether the embedded Tweet html should include a 'script' element pointing to widgets.js",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "align",
+                        "in": "query",
+                        "description": "Specifies whether the embedded Tweet should be left aligned",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "related",
+                        "in": "query",
+                        "description": "A value for the TWT related parameters",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "lang",
+                        "in": "query",
+                        "description": "Languages code for the rendered embed",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Tweets"
+                        }
+                    }
+                }
+            }
+        },
+        "/lists/list": {
+            "get": {
+                "description": "Return all lists the authenticating or specified user subscribes to, including their own.",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user for whom to return results for Hey jeremey ijikjkhj,kb kukj",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "The ID of the user for whom to return results for",
+                        "required": true,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Lists"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/lists/statuses": {
+            "get": {
+                "description": "Returns a timeline of tweets authored by memebers of the specified list",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list by its slug instead of its numerical id",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The user ID of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "since_id",
+                        "in": "query",
+                        "description": "Returns results with an ID greater than the sepcified ID",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "max_id",
+                        "in": "query",
+                        "description": "Returns results with an ID less than or equal to the specified ID",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "count",
+                        "in": "query",
+                        "description": "Specifies the number of results to retrieve per page",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "Entities are ON by default",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_rts",
+                        "in": "query",
+                        "description": "When set to either true, t or 1, the list timeline will contain native retweets in addition to the standard stream of tweets",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Tweets"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/lists/members/destroy": {
+            "get": {
+                "description": "Returns the list of memebers destroy",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list by its slug instrad of its numerical id",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "The id of the user for whom to remove from the list",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user for whom to remove from the list",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The is of the user who wons the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success"
+                    }
+                }
+            }
+        },
+        "/lists/memberships": {
+            "get": {
+                "description": "Returns the lists of the specified user has been added to",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "The id of the user for whom to return results for",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user for whom to return results for",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "cursor",
+                        "in": "query",
+                        "description": "Breaks the results into pages",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "filter_to_owned_lists",
+                        "in": "query",
+                        "description": "When set to true, t or 1, will return just lists the authenticating user owns",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Cursor_lists"
+                        }
+                    }
+                }
+            }
+        },
+        "/lists/subscribers": {
+            "get": {
+                "description": "Returns the subscribers of the specified list",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list by its slug insted of its numerical id",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "the screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The user ID of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "cursor",
+                        "in": "query",
+                        "description": "Breaks the results into pages",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "Wehn set to either true, t or 1",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "When set to either true, t or 1",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Cursor_lists"
+                        }
+                    }
+                }
+            }
+        },
+        "/lists/subscribers/create": {
+            "post": {
+                "description": "Subscribes the authenticated user to the specified list",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list being requested by a slug",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "the screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The user ID of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Lists"
+                        }
+                    }
+                }
+            }
+        },
+        "/lists/subscribers/show": {
+            "get": {
+                "description": "Check if the specified user is a subscriber of the specified list",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list being requested by a slug",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "The id of the user for whom to remove from the list",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user for whom to remove from the list",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The is of the user who wons the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "Wehn set to either true, t or 1",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "When set to either true, t or 1",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Users"
+                        }
+                    }
+                }
+            }
+        },
+        "/lists/subscribers/destroy": {
+            "get": {
+                "description": "Returns list of subscribers destroy",
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list being requested by a slug",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "the screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The user ID of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success"
+                    }
+                }
+            }
+        },
+        "/lists/members/create_all": {
+            "get": {
+                "description": "Returns lists of members create_all",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list being requested by a slug",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "the screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The user ID of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "The id of the user for whom to remove from the list",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user for whom to remove from the list",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success"
+                    }
+                }
+            }
+        },
+        "/list/members/show": {
+            "get": {
+                "description": "Check if the specified user is a member of the specified list",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list being requested by a slug",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "The id of the user for whom to remove from the list",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user for whom to remove from the list",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The user ID of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "Wehn set to either true, t or 1",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "When set to either true, t or 1",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Users"
+                        }
+                    }
+                }
+            }
+        },
+        "/list/members": {
+            "get": {
+                "description": "Returns the members of the specified list",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list being requested by a slug",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The user ID of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "Wehn set to either true, t or 1",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "When set to either true, t or 1",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "cursor",
+                        "in": "query",
+                        "description": "Breaks the results into pages",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Users"
+                        }
+                    }
+                }
+            }
+        },
+        "/list/members/create": {
+            "post": {
+                "description": "Returns list of members create",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list being requested by a slug",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user for whom to remove from the list",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The user ID of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success"
+                    }
+                }
+            }
+        },
+        "/lists/destroy": {
+            "post": {
+                "description": "Returns list of destroy",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list being requested by a slug",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The user ID of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Lists"
+                        }
+                    }
+                }
+            }
+        },
+        "/lists/update": {
+            "post": {
+                "description": "Returns lists of updates",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list being requested by a slug",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The user ID of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "name",
+                        "in": "query",
+                        "description": "The name for the list",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "mode",
+                        "in": "query",
+                        "description": "Whether your list is public or private",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "description",
+                        "in": "query",
+                        "description": "The description to give the list",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success"
+                    }
+                }
+            }
+        },
+        "/lists/create": {
+            "post": {
+                "description": "Returns list of create",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "name",
+                        "in": "query",
+                        "description": "The name for the list",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "mode",
+                        "in": "query",
+                        "description": "Whether your list is public or private",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "description",
+                        "in": "query",
+                        "description": "The description to give the list",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Lists"
+                        }
+                    }
+                }
+            }
+        },
+        "/lists/show": {
+            "get": {
+                "description": "Returns list of show",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list being requested by a slug",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The user ID of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Lists"
+                        }
+                    }
+                }
+            }
+        },
+        "/lists/subscriptions": {
+            "get": {
+                "description": "Returns list of subscriptions",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "The id of the user for whom to return results for",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "count",
+                        "in": "query",
+                        "description": "The amount of results to return per page",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "cursor",
+                        "in": "query",
+                        "description": "Breaks the results into pages",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Cursor_lists"
+                        }
+                    }
+                }
+            }
+        },
+        "/list/members/destroy_all": {
+            "get": {
+                "description": "Returns lists of destroy all",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "list_id",
+                        "in": "query",
+                        "description": "The numerical id of the list",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "slug",
+                        "in": "query",
+                        "description": "You can identify a list being requested by a slug",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "The id of the user for whom to remove from the list",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user for whom to remove from the list",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_screen_name",
+                        "in": "query",
+                        "description": "The screen name of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "owner_id",
+                        "in": "query",
+                        "description": "The user ID of the user who owns the list being requested by a slug",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Cursor_lists"
+                        }
+                    }
+                }
+            }
+        },
+        "/direct_messages/sent": {
+            "get": {
+                "description": "return 20 most recent direct messages sent",
+                "parameters": [
+                    {
+                        "name": "since_id",
+                        "in": "query",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "max_id",
+                        "in": "query",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "count",
+                        "in": "query",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "page",
+                        "in": "query",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Messages"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/direct_messages/show": {
+            "get": {
+                "description": "returns a single direct message specified by an id",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "id",
+                        "in": "query",
+                        "description": "ID of direct message",
+                        "type": "string",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Messages"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/search/tweets": {
+            "get": {
+                "description": "returns collection of relevant Tweets matching query",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "q",
+                        "in": "query",
+                        "description": "URL-encoded search query of 500 characters max",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "geocode",
+                        "in": "query",
+                        "description": "returns tweets by users located within given radius",
+                        "type": "string",
+                        "required": false
+                    },
+                    {
+                        "name": "lang",
+                        "in": "query",
+                        "description": "restricts tweets to a given language",
+                        "type": "string",
+                        "required": false
+                    },
+                    {
+                        "name": "locale",
+                        "in": "query",
+                        "description": "language of query you are sending",
+                        "type": "string",
+                        "required": false
+                    },
+                    {
+                        "name": "result_type",
+                        "in": "query",
+                        "description": "specifies type of search results you prefer",
+                        "type": "string",
+                        "required": false
+                    },
+                    {
+                        "name": "count",
+                        "in": "query",
+                        "description": "number of tweets to return",
+                        "type": "string"
+                    },
+                    {
+                        "name": "until",
+                        "in": "query",
+                        "description": "returns tweets created before given date",
+                        "type": "string"
+                    },
+                    {
+                        "name": "since_id",
+                        "in": "query",
+                        "description": "return results with ID greater than specified",
+                        "type": "string"
+                    },
+                    {
+                        "name": "max_id",
+                        "in": "query",
+                        "description": "returns results with an ID less than/equal to specified ID",
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    },
+                    {
+                        "name": "callback",
+                        "in": "query",
+                        "description": "response will use the callback with given name",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Tweets"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/saved_searches/list": {
+            "get": {
+                "description": "Returns the authenticated user's saved search queries",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Query"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/saved_searches/show/{id}": {
+            "get": {
+                "description": "Retrieve the information for the saved search represented by the given id",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "id",
+                        "in": "path",
+                        "description": "The id of the saved search",
+                        "required": true,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Query"
+                        }
+                    }
+                }
+            }
+        },
+        "/saved_searches/create": {
+            "post": {
+                "description": "Create a new saved search for the authenticated user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "query",
+                        "in": "query",
+                        "description": "The query of the search the user would like to save",
+                        "required": true,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Query"
+                        }
+                    }
+                }
+            }
+        },
+        "/saved_searches/destroy/{id}": {
+            "post": {
+                "description": "Destroy a saved search for the authenticating user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "id",
+                        "in": "path",
+                        "description": "The id of the saved search",
+                        "required": true,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Query"
+                        }
+                    }
+                }
+            }
+        },
+        "/direct_messages": {
+            "get": {
+                "description": "return 20 most recent direct messages sent to user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "since_id",
+                        "in": "query",
+                        "description": "return results with ID greater than specified",
+                        "type": "string"
+                    },
+                    {
+                        "name": "max_id",
+                        "in": "query",
+                        "description": "returns results with an ID less than/equal to specified ID",
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "whether or not to include status",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Messages"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/direct_messages/destroy": {
+            "post": {
+                "description": "destroys direct messages specified in required ID",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "id",
+                        "in": "query",
+                        "description": "ID of direct message to delete",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Messages"
+                        }
+                    }
+                }
+            }
+        },
+        "/direct_messages/new": {
+            "post": {
+                "description": "sends a new direct message to specified user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "description",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "screen name of user receiving message",
+                        "type": "string"
+                    },
+                    {
+                        "name": "text",
+                        "in": "query",
+                        "description": "text of your direct message",
+                        "type": "string",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Messages"
+                        }
+                    }
+                }
+            }
+        },
+        "/friends/ids": {
+            "get": {
+                "description": "returns a cursored collection of user IDs followed by user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "ID of user for whom to return results for",
+                        "type": "string"
+                    },
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "screen name of user for whom to return results for",
+                        "type": "string"
+                    },
+                    {
+                        "name": "cursor",
+                        "in": "query",
+                        "description": "causes list of connections to be broken in pages",
+                        "type": "string"
+                    },
+                    {
+                        "name": "stringify_ids",
+                        "in": "query",
+                        "description": "IDs converted to strings",
+                        "type": "string"
+                    },
+                    {
+                        "name": "count",
+                        "in": "query",
+                        "description": "number of IDs to attempt retrieval of",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Cursor_ids"
+                        }
+                    }
+                }
+            }
+        },
+        "/followers/ids": {
+            "get": {
+                "description": "returns a cursored collection of user IDs following the user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "ID of user for whom to return results for",
+                        "type": "string"
+                    },
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "screen name of user for whom to return results for",
+                        "type": "string"
+                    },
+                    {
+                        "name": "cursor",
+                        "in": "query",
+                        "description": "causes list of connections to be broken in pages",
+                        "type": "string"
+                    },
+                    {
+                        "name": "stringify_ids",
+                        "in": "query",
+                        "description": "IDs converted to strings",
+                        "type": "string"
+                    },
+                    {
+                        "name": "count",
+                        "in": "query",
+                        "description": "number of IDs to attempt retrieval of",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Cursor_ids"
+                        }
+                    }
+                }
+            }
+        },
+        "/friendships/incoming": {
+            "get": {
+                "description": "returns collection of IDs of users with pending follow request",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "cursor",
+                        "in": "query",
+                        "description": "causes list of connections to be broken in pages",
+                        "type": "string"
+                    },
+                    {
+                        "name": "stringify_ids",
+                        "in": "query",
+                        "description": "IDs converted to strings",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Cursor_ids"
+                        }
+                    }
+                }
+            }
+        },
+        "/friendships/outgoing": {
+            "get": {
+                "description": "returns collection of IDs of users with pending follow request from the user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "cursor",
+                        "in": "query",
+                        "description": "causes list of connections to be broken in pages",
+                        "type": "string"
+                    },
+                    {
+                        "name": "stringify_ids",
+                        "in": "query",
+                        "description": "IDs converted to strings",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Cursor_ids"
+                        }
+                    }
+                }
+            }
+        },
+        "/friendships/create": {
+            "post": {
+                "description": "allows users to follow user sepcified by ID",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "screen name of user for whom to befriend",
+                        "type": "string"
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "ID of user for whom to befriend",
+                        "type": "string"
+                    },
+                    {
+                        "name": "follow",
+                        "in": "query",
+                        "description": "enable notifications for target user",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Users"
+                        }
+                    }
+                }
+            }
+        },
+        "/friendships/destroy": {
+            "post": {
+                "description": "allows user to unfollow user psecified by ID",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "screen name of user for whom to befriend",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "ID of user for whom to befriend",
+                        "type": "string",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Users"
+                        }
+                    }
+                }
+            }
+        },
+        "/friendships/update": {
+            "post": {
+                "description": "Allows one to enable or disable settings for specified user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "screen name of user for whom to befriend",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "ID of user for whom to befriend",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "device",
+                        "in": "query",
+                        "description": "enable/disable device notifications for user",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "retweets",
+                        "in": "query",
+                        "description": "enable/disable retweets from target user",
+                        "type": "string",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Friendship"
+                        }
+                    }
+                }
+            }
+        },
+        "/friendships/show": {
+            "get": {
+                "description": "returns detailed info about relationship between two users",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "source_id",
+                        "in": "query",
+                        "description": "user id of subject user",
+                        "type": "string"
+                    },
+                    {
+                        "name": "source_screen_name",
+                        "in": "query",
+                        "description": "screen_name of subject user",
+                        "type": "string"
+                    },
+                    {
+                        "name": "target_id",
+                        "in": "query",
+                        "description": "user id of target user",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "target_screen_name",
+                        "in": "query",
+                        "description": "screen name of target user",
+                        "type": "string",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Friendship"
+                        }
+                    }
+                }
+            }
+        },
+        "/account/settings": {
+            "get": {
+                "summary": "returns settings for user",
+                "description": "returns settings for user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Settings"
+                        }
+                    }
+                }
+            },
+            "post": {
+                "summary": "updates user's settings",
+                "description": "updates user's settings",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "trend_location_woeid",
+                        "in": "query",
+                        "description": "the Yahoo! Where On Earth ID to user as defaul tend location",
+                        "type": "string"
+                    },
+                    {
+                        "name": "sleep_time_enabled",
+                        "in": "query",
+                        "description": "enables/disables sleep time, silencing notifications",
+                        "type": "string"
+                    },
+                    {
+                        "name": "start_sleep_time",
+                        "in": "query",
+                        "description": "the hour that sleep time should begin if enabled",
+                        "type": "string"
+                    },
+                    {
+                        "name": "end_sleep_time",
+                        "in": "query",
+                        "description": "the hour that sleep time should end if enabled",
+                        "type": "string"
+                    },
+                    {
+                        "name": "time_zone",
+                        "in": "query",
+                        "description": "timezone dates and times should be displayed in",
+                        "type": "string"
+                    },
+                    {
+                        "name": "lang",
+                        "in": "query",
+                        "description": "language which Twitter should render in for the user",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Settings"
+                        }
+                    }
+                }
+            }
+        },
+        "/account/update_delivery_device": {
+            "post": {
+                "summary": "sets which device Twitter delivers updates to for user",
+                "description": "sets which device Twitter delivers updates to for user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "device",
+                        "in": "query",
+                        "description": "must be one of sms, none",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Settings"
+                        }
+                    }
+                }
+            }
+        },
+        "/account/update_profile": {
+            "post": {
+                "summary": "sets values that users ar eable to set under Account tab",
+                "description": "sets values that users ar eable to set under Account tab",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "name",
+                        "in": "query",
+                        "description": "full name of profile",
+                        "type": "string"
+                    },
+                    {
+                        "name": "url",
+                        "in": "query",
+                        "description": "url associated with profile",
+                        "type": "string"
+                    },
+                    {
+                        "name": "location",
+                        "in": "query",
+                        "description": "city or country describing where user of account is.",
+                        "type": "string"
+                    },
+                    {
+                        "name": "description",
+                        "in": "query",
+                        "description": "a description of user owning account",
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "whether or not to include statuses in response",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Settings"
+                        }
+                    }
+                }
+            }
+        },
+        "/account/update_profile_background_image": {
+            "post": {
+                "summary": "updates user's profile background image",
+                "description": "updates user's profile background image",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "consumes": [
+                    "multipart/form-data"
+                ],
+                "parameters": [
+                    {
+                        "name": "tile",
+                        "in": "query",
+                        "description": "whether or not to tile background image",
+                        "type": "string"
+                    },
+                    {
+                        "name": "use",
+                        "in": "query",
+                        "description": "display background image or not",
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "whether or not to include status in returned user objects",
+                        "type": "string"
+                    },
+                    {
+                        "name": "file",
+                        "in": "formData",
+                        "description": "image to replace background image of profile",
+                        "required": true,
+                        "type": "file"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Settings"
+                        }
+                    }
+                }
+            }
+        },
+        "/account/update_profile_colors": {
+            "post": {
+                "summary": "sets one or more hex values that controls color scheme",
+                "description": "sets one or more hex values that controls color scheme",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "profile_background_color",
+                        "in": "query",
+                        "description": "profile background color",
+                        "type": "string"
+                    },
+                    {
+                        "name": "profile_link_color",
+                        "in": "query",
+                        "description": "profile link color",
+                        "type": "string"
+                    },
+                    {
+                        "name": "profile_sidebar_border_color",
+                        "in": "query",
+                        "description": "profile sidebar's border color",
+                        "type": "string"
+                    },
+                    {
+                        "name": "profile_sidebar_fill_color",
+                        "in": "query",
+                        "description": "profile's sidebar background color",
+                        "type": "string"
+                    },
+                    {
+                        "name": "profile_text_color",
+                        "in": "query",
+                        "description": "profile text color",
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "whether or not to include statuses",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Settings"
+                        }
+                    }
+                }
+            }
+        },
+        "/account/update_profile_image": {
+            "post": {
+                "summary": "updates user's profile image",
+                "description": "updates user's profile image",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "consumes": [
+                    "multipart/form-data"
+                ],
+                "parameters": [
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "whether or not to include statuses",
+                        "type": "string"
+                    },
+                    {
+                        "name": "image",
+                        "in": "formData",
+                        "description": "image to be set as profile image",
+                        "type": "file",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Settings"
+                        }
+                    }
+                }
+            }
+        },
+        "/blocks/list": {
+            "get": {
+                "summary": "disallows retweets and device notifications from a user",
+                "description": "disallows retweets and device notifications from a user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "whether or not to include statuses in response",
+                        "type": "string"
+                    },
+                    {
+                        "name": "cursor",
+                        "in": "query",
+                        "description": "breaks block of user to be broken up into pages",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Cursor_users"
+                        }
+                    }
+                }
+            }
+        },
+        "/blocks/ids": {
+            "get": {
+                "summary": "returns array of numeric user ids of blocked users",
+                "description": "returns array of numeric user ids of blocked users",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "stringify_ids",
+                        "in": "query",
+                        "description": "returns array of numeric IDs as string IDs",
+                        "type": "string"
+                    },
+                    {
+                        "name": "cursor",
+                        "in": "query",
+                        "description": "breaks up block of user IDs into pages",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Cursor_users"
+                        }
+                    }
+                }
+            }
+        },
+        "/blocks/create": {
+            "post": {
+                "summary": "blocks the specified user",
+                "description": "blocks the specified user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "screen name of user to be blocked",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "ID of user to be blocked",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "whether or not to skip statuses",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Users"
+                        }
+                    }
+                }
+            }
+        },
+        "/blocks/destroy": {
+            "post": {
+                "summary": "un-blocks the specified user",
+                "description": "un-blocks the specified user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "screen name of user to be un-blocked",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "ID of user to be un-blocked",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "whether or not to skip statuses",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Users"
+                        }
+                    }
+                }
+            }
+        },
+        "/users/lookup": {
+            "get": {
+                "summary": "returns fully-hydrated user objects up to 100",
+                "description": "returns fully-hydrated user objects up to 100",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "screen name of user to lookup",
+                        "type": "string"
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "ID of user to lookup",
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Users"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/users/show": {
+            "get": {
+                "summary": "returns a variety of info about specified user",
+                "description": "returns a variety of info about specified user",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "screen name of user to be shown",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "ID of user to be shown",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/Users"
+                        }
+                    }
+                }
+            }
+        },
+        "/users/search": {
+            "get": {
+                "summary": "simple relevance-based user search",
+                "description": "simple relevance-based user search",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "q",
+                        "in": "query",
+                        "description": "the search query to run against people search",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "page",
+                        "in": "query",
+                        "description": "specifies the page of results to receive",
+                        "type": "string"
+                    },
+                    {
+                        "name": "count",
+                        "in": "query",
+                        "description": "number of people to return per page",
+                        "type": "string"
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Users"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/users/contributees": {
+            "get": {
+                "summary": "collection of users specified user can contribute to",
+                "description": "collection of users specified user can contribute to",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "screen name of user that is contributed to",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "ID of user to that is contributed to",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "whether or not to skip statuses",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Users"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/users/contributors": {
+            "get": {
+                "summary": "collection of users that can contribute to specified account",
+                "description": "collection of users that can contribute to specified account",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "screen name of user contributing",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "ID of user contributing",
+                        "type": "string",
+                        "required": true
+                    },
+                    {
+                        "name": "include_entities",
+                        "in": "query",
+                        "description": "whether or not to include entities",
+                        "type": "string"
+                    },
+                    {
+                        "name": "skip_status",
+                        "in": "query",
+                        "description": "whether or not to skip statuses",
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Users"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/geo/id/{place_id}": {
+            "get": {
+                "description": "Returns all the information about a know place",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "place_id",
+                        "in": "path",
+                        "description": "A place in the world",
+                        "required": true,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Places"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/geo/reverse_geoncode": {
+            "get": {
+                "description": "Given a latitude and a longitude, searches for up to 20 places that can be used as a place_id when updatting a status",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "lat",
+                        "in": "query",
+                        "description": "The latitude to search around",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "long",
+                        "in": "query",
+                        "description": "The longtitude to search around",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "accuracy",
+                        "in": "query",
+                        "description": "A hint on region in which to search",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "granularity",
+                        "in": "query",
+                        "description": "This is the minimal granularity of place types to return",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "max_results",
+                        "in": "query",
+                        "description": "A hint as to the number of results to return",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "callback",
+                        "in": "query",
+                        "description": "If supplied, the responses will use the JSON format with a callback of the given name",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Places"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/geo/search": {
+            "get": {
+                "description": "Search for places that can be attached to a statuses/updates",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "lat",
+                        "in": "query",
+                        "description": "The latitude to search around",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "long",
+                        "in": "query",
+                        "description": "The longtitude to search around",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "query",
+                        "in": "query",
+                        "description": "Free-form text to match against while executing a geo-based query",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "ip",
+                        "in": "query",
+                        "description": "An Ip address",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "accuracy",
+                        "in": "query",
+                        "description": "A hint on region in which to search",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "granularity",
+                        "in": "query",
+                        "description": "This is the minimal granularity of place types to return",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "contained_within",
+                        "in": "query",
+                        "description": "This is the place_id which you would like to restrict the search results to",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "attribute:street_address",
+                        "in": "query",
+                        "description": "This parameter searches for places which have this givven street address",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "callback",
+                        "in": "query",
+                        "description": "If supplied, the responses will use the JSON format with a callback of the given name",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Places"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/geo/similar_places": {
+            "get": {
+                "description": "Locates places near the given coordinates which are similar in name",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "lat",
+                        "in": "query",
+                        "description": "The latitude to search around",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "long",
+                        "in": "query",
+                        "description": "The longtitude to search around",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "name",
+                        "in": "query",
+                        "description": "The name a place is known as",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "contained_within",
+                        "in": "query",
+                        "description": "This is the place_id which you would like to restrict the search results to",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "attribute:street_address",
+                        "in": "query",
+                        "description": "This parameter searches for places which have this givven street address",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "callback",
+                        "in": "query",
+                        "description": "If supplied, the responses will use the JSON format with a callback of the given name",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Places"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/geo/places": {
+            "get": {
+                "description": "Create a new place object at the given latitude and logitude",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "lat",
+                        "in": "query",
+                        "description": "The latitude to search around",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "long",
+                        "in": "query",
+                        "description": "The longtitude to search around",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "name",
+                        "in": "query",
+                        "description": "The name a place is known as",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "token",
+                        "in": "query",
+                        "description": "The token found in the response from geo/similar_places",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "contained_within",
+                        "in": "query",
+                        "description": "This is the place_id which you would like to restrict the search results to",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "attribute:street_address",
+                        "in": "query",
+                        "description": "This parameter searches for places which have this givven street address",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "callback",
+                        "in": "query",
+                        "description": "If supplied, the responses will use the JSON format with a callback of the given name",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Places"
+                        }
+                    }
+                }
+            }
+        },
+        "/trends/place": {
+            "get": {
+                "description": "Returns the top 10 trending topics for a specific WOEID",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "id",
+                        "in": "query",
+                        "description": "The yahoo where on earch id",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "exclude",
+                        "in": "query",
+                        "description": "Setting this equal to hashtages will remove all hashtages from the trends list",
+                        "required": true,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/TrendInfo"
+                        }
+                    }
+                }
+            }
+        },
+        "/trends/available": {
+            "get": {
+                "description": "Returns the availability",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Location"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/trends/closest": {
+            "get": {
+                "description": "Returns the location that Twitter has trending topic information for",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "lat",
+                        "in": "query",
+                        "description": "If provided with a long parameter the available trend locations wil be stored by distance",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "long",
+                        "in": "query",
+                        "description": "If provided with a lat parameters the available trend locations will be sorted by distance",
+                        "required": true,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Location"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/users/report_spam": {
+            "post": {
+                "description": "Returna users report spam",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "screen_name",
+                        "in": "query",
+                        "description": "The ID or screen_name of the user you want to report as a spammer",
+                        "required": false,
+                        "type": "string"
+                    },
+                    {
+                        "name": "user_id",
+                        "in": "query",
+                        "description": "The ID of the user you want to report as a spammer",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Users"
+                        }
+                    }
+                }
+            }
+        },
+        "/help/configuration": {
+            "get": {
+                "description": "Returns the current configuration used by Twitter including twitter.com slugs which are not usernames",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Help_Config"
+                        }
+                    }
+                }
+            }
+        },
+        "/help/languages": {
+            "get": {
+                "description": "Returns the list of languages supported by Twitter along with the language code supported by Twitter",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "type": "array",
+                            "items": {
+                                "$ref": "#/definitions/Help_Language"
+                            }
+                        }
+                    }
+                }
+            }
+        },
+        "/help/privacy": {
+            "get": {
+                "description": "Returns Twitter's privacy policy",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Help_Privacy"
+                        }
+                    }
+                }
+            }
+        },
+        "/help/tos": {
+            "get": {
+                "description": "Returns the Twitter Terms of Service",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "schema": {
+                            "$ref": "#/definitions/Help_Tos"
+                        }
+                    }
+                }
+            }
+        },
+        "/application/rate_limit_status": {
+            "get": {
+                "description": "Returns the current rate limits for methods belonging to the specified resource families",
+                "security": [
+                    {
+                        "oauth": [
+                            "basic"
+                        ]
+                    }
+                ],
+                "parameters": [
+                    {
+                        "name": "resources",
+                        "in": "query",
+                        "description": "A comma-separated list of resource families you want to know the current rate limit disposition for",
+                        "required": false,
+                        "type": "array",
+                        "items": {
+                            "type": "string"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success"
+                    }
+                }
+            }
+        }
+    },
+    "definitions": {
+        "Tweets": {
+            "type": "object",
+            "properties": {
+                "contributors": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/Contributors"
+                    }
+                },
+                "coordinates": {
+                    "$ref": "#/definitions/Coordinates"
+                },
+                "created_at": {
+                    "type": "string"
+                },
+                "current_user_retweet": {
+                    "$ref": "#/definitions/Tweets"
+                },
+                "entities": {
+                    "$ref": "#/definitions/Entities"
+                },
+                "favorite_count": {
+                    "type": "integer"
+                },
+                "favorited": {
+                    "type": "boolean"
+                },
+                "filter_level": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "id_str": {
+                    "type": "string"
+                },
+                "in_reply_to_screen_name": {
+                    "type": "string"
+                },
+                "in_reply_to_status_id": {
+                    "type": "integer"
+                },
+                "in_reply_to_status_id_str": {
+                    "type": "string"
+                },
+                "in_reply_to_user_id": {
+                    "type": "integer"
+                },
+                "in_reply_to_user_id_str": {
+                    "type": "string"
+                },
+                "lang": {
+                    "type": "string"
+                },
+                "place": {
+                    "$ref": "#/definitions/Places"
+                },
+                "possibly_sensitive": {
+                    "type": "boolean"
+                },
+                "quoted_status_id": {
+                    "type": "integer"
+                },
+                "quoted_status_id_str": {
+                    "type": "string"
+                },
+                "quoted_status": {
+                    "$ref": "#/definitions/Tweets"
+                },
+                "scopes": {
+                    "type": "object",
+                    "additionalProperties": {}
+                },
+                "retweet_count": {
+                    "type": "integer"
+                },
+                "retweeted": {
+                    "type": "boolean"
+                },
+                "retweeted_status": {
+                    "$ref": "#/definitions/Tweets"
+                },
+                "source": {
+                    "type": "string"
+                },
+                "text": {
+                    "type": "string"
+                },
+                "truncated": {
+                    "type": "string"
+                },
+                "user": {
+                    "$ref": "#/definitions/Users"
+                },
+                "withheld_copyright": {
+                    "type": "boolean"
+                },
+                "withheld_countries": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "withheld_scope": {
+                    "type": "string"
+                }
+            }
+        },
+        "Contributors": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "id_str": {
+                    "type": "string"
+                },
+                "screen_name": {
+                    "type": "string"
+                }
+            }
+        },
+        "Coordinates": {
+            "type": "object",
+            "properties": {
+                "coordinates": {
+                    "type": "array",
+                    "items": {
+                        "type": "number"
+                    }
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "Users": {
+            "type": "object",
+            "properties": {
+                "contributors_enabled": {
+                    "type": "boolean"
+                },
+                "created_at": {
+                    "type": "string"
+                },
+                "default_profile": {
+                    "type": "boolean"
+                },
+                "default_profile_image": {
+                    "type": "boolean"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "entities": {
+                    "$ref": "#/definitions/Entities"
+                },
+                "favorites_count": {
+                    "type": "integer"
+                },
+                "follow_request_sent": {
+                    "type": "boolean"
+                },
+                "following": {
+                    "type": "boolean"
+                },
+                "followers_count": {
+                    "type": "integer"
+                },
+                "friends_count": {
+                    "type": "integer"
+                },
+                "geo_enabled": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "id_str": {
+                    "type": "string"
+                },
+                "is_translator": {
+                    "type": "boolean"
+                },
+                "lang": {
+                    "type": "string"
+                },
+                "listed_count": {
+                    "type": "integer"
+                },
+                "location": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "notifications": {
+                    "type": "boolean"
+                },
+                "profile_background_color": {
+                    "type": "string"
+                },
+                "profile_background_image_url": {
+                    "type": "string"
+                },
+                "profile_background_image_url_https": {
+                    "type": "string"
+                },
+                "profile_background_tile": {
+                    "type": "string"
+                },
+                "profile_banner_url": {
+                    "type": "string"
+                },
+                "profile_image_url": {
+                    "type": "string"
+                },
+                "profile_image_url_https": {
+                    "type": "string"
+                },
+                "profile_link_color": {
+                    "type": "string"
+                },
+                "profile_sidebar_border_color": {
+                    "type": "string"
+                },
+                "profile_sidebar_fill_color": {
+                    "type": "string"
+                },
+                "profile_text_color": {
+                    "type": "string"
+                },
+                "profile_use_background_image": {
+                    "type": "boolean"
+                },
+                "protected": {
+                    "type": "boolean"
+                },
+                "screen_name": {
+                    "type": "string"
+                },
+                "show_all_inline_media": {
+                    "type": "boolean"
+                },
+                "status": {
+                    "$ref": "#/definitions/Tweets"
+                },
+                "statuses_count": {
+                    "type": "integer"
+                },
+                "time_zone": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                },
+                "utc_offset": {
+                    "type": "integer"
+                },
+                "verified": {
+                    "type": "boolean"
+                },
+                "withheld_in_countries": {
+                    "type": "string"
+                },
+                "withheld_scope": {
+                    "type": "string"
+                }
+            }
+        },
+        "Entities": {
+            "type": "object",
+            "properties": {
+                "hashtags": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/Hashtags"
+                    }
+                },
+                "media": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/Media"
+                    }
+                },
+                "urls": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/URL"
+                    }
+                },
+                "user_mentions": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/User_Mention"
+                    }
+                }
+            }
+        },
+        "Hashtags": {
+            "type": "object",
+            "properties": {
+                "indices": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                },
+                "text": {
+                    "type": "string"
+                }
+            }
+        },
+        "Media": {
+            "type": "object",
+            "properties": {
+                "display_url": {
+                    "type": "string"
+                },
+                "expanded_url": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "id_str": {
+                    "type": "string"
+                },
+                "indices": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                },
+                "media_url": {
+                    "type": "string"
+                },
+                "media_url_https": {
+                    "type": "string"
+                },
+                "sizes": {
+                    "$ref": "#/definitions/Sizes"
+                },
+                "source_status_id": {
+                    "type": "integer"
+                },
+                "source_status_id_str": {
+                    "type": "integer"
+                },
+                "type": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                }
+            }
+        },
+        "Size": {
+            "type": "object",
+            "properties": {
+                "h": {
+                    "type": "integer"
+                },
+                "resize": {
+                    "type": "string"
+                },
+                "w": {
+                    "type": "integer"
+                }
+            }
+        },
+        "Sizes": {
+            "type": "object",
+            "properties": {
+                "thumb": {
+                    "$ref": "#/definitions/Size"
+                },
+                "large": {
+                    "$ref": "#/definitions/Size"
+                },
+                "medium": {
+                    "$ref": "#/definitions/Size"
+                },
+                "small": {
+                    "$ref": "#/definitions/Size"
+                }
+            }
+        },
+        "URL": {
+            "type": "object",
+            "properties": {
+                "display_url": {
+                    "type": "string"
+                },
+                "expanded_url": {
+                    "type": "string"
+                },
+                "indices": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                }
+            }
+        },
+        "User_Mention": {
+            "type": "object",
+            "properties": {
+                "id": {
+                    "type": "integer"
+                },
+                "id_str": {
+                    "type": "string"
+                },
+                "indices": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                },
+                "name": {
+                    "type": "string"
+                },
+                "screen_name": {
+                    "type": "string"
+                }
+            }
+        },
+        "Places": {
+            "type": "object",
+            "properties": {
+                "attributes": {
+                    "type": "object",
+                    "additionalProperties": {}
+                },
+                "bounding_box": {
+                    "$ref": "#/definitions/Bounding_box"
+                },
+                "country": {
+                    "type": "string"
+                },
+                "country_code": {
+                    "type": "string"
+                },
+                "full_name": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "place_type": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                }
+            }
+        },
+        "Bounding_box": {
+            "type": "object",
+            "properties": {
+                "coordinates": {
+                    "type": "array",
+                    "items": {
+                        "type": "array",
+                        "items": {
+                            "type": "number"
+                        }
+                    }
+                },
+                "type": {
+                    "type": "string"
+                }
+            }
+        },
+        "Lists": {
+            "type": "object",
+            "properties": {
+                "created_at": {
+                    "type": "string"
+                },
+                "slug": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "description": {
+                    "type": "string"
+                },
+                "mode": {
+                    "type": "string"
+                },
+                "following": {
+                    "type": "boolean"
+                },
+                "user": {
+                    "$ref": "#/definitions/Users"
+                },
+                "member_count": {
+                    "type": "integer"
+                },
+                "id_str": {
+                    "type": "string"
+                },
+                "subscriber_count": {
+                    "type": "integer"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "uri": {
+                    "type": "string"
+                }
+            }
+        },
+        "Cursor_lists": {
+            "type": "object",
+            "properties": {
+                "previous_cursor": {
+                    "type": "integer"
+                },
+                "lists": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/Lists"
+                    }
+                },
+                "previous_cursor_str": {
+                    "type": "string"
+                },
+                "next_cursor": {
+                    "type": "integer"
+                },
+                "next_cursor_str": {
+                    "type": "string"
+                }
+            }
+        },
+        "Cursor_users": {
+            "type": "object",
+            "properties": {
+                "previous_cursor": {
+                    "type": "integer"
+                },
+                "users": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/Users"
+                    }
+                },
+                "previous_cursor_str": {
+                    "type": "string"
+                },
+                "next_cursor": {
+                    "type": "integer"
+                },
+                "next_cursor_str": {
+                    "type": "string"
+                }
+            }
+        },
+        "Cursor_ids": {
+            "type": "object",
+            "properties": {
+                "previous_cursor": {
+                    "type": "integer"
+                },
+                "users": {
+                    "type": "array",
+                    "items": {
+                        "type": "integer"
+                    }
+                },
+                "previous_cursor_str": {
+                    "type": "string"
+                },
+                "next_cursor": {
+                    "type": "integer"
+                },
+                "next_cursor_str": {
+                    "type": "string"
+                }
+            }
+        },
+        "Messages": {
+            "type": "object",
+            "properties": {
+                "created_at": {
+                    "type": "string"
+                },
+                "entities": {
+                    "$ref": "#/definitions/Entities"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "id_string": {
+                    "type": "string"
+                },
+                "recipient": {
+                    "$ref": "#/definitions/Users"
+                },
+                "recipient_id": {
+                    "type": "integer"
+                },
+                "recipient_screen_name": {
+                    "type": "string"
+                },
+                "sender": {
+                    "$ref": "#/definitions/Users"
+                },
+                "sender_id": {
+                    "type": "integer"
+                },
+                "sender_screen_name": {
+                    "type": "string"
+                },
+                "text": {
+                    "type": "string"
+                }
+            }
+        },
+        "Query": {
+            "type": "object",
+            "properties": {
+                "created_at": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "id_str": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "position": {
+                    "type": "string"
+                },
+                "query": {
+                    "type": "string"
+                }
+            }
+        },
+        "Friendship": {
+            "type": "object",
+            "properties": {
+                "relationship": {
+                    "$ref": "#/definitions/Targets"
+                },
+                "source": {
+                    "$ref": "#/definitions/Source"
+                }
+            }
+        },
+        "Targets": {
+            "type": "object",
+            "properties": {
+                "target": {
+                    "$ref": "#/definitions/Target"
+                }
+            }
+        },
+        "Target": {
+            "type": "object",
+            "properties": {
+                "id_str": {
+                    "type": "string"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "followed_by": {
+                    "type": "boolean"
+                },
+                "screen_name": {
+                    "type": "string"
+                },
+                "following": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "Source": {
+            "type": "object",
+            "properties": {
+                "can_dm": {
+                    "type": "boolean"
+                },
+                "blocking": {
+                    "type": "boolean"
+                },
+                "id_str": {
+                    "type": "boolean"
+                },
+                "all_replies": {
+                    "type": "boolean"
+                },
+                "want_retweets": {
+                    "type": "boolean"
+                },
+                "id": {
+                    "type": "integer"
+                },
+                "marked_spam": {
+                    "type": "boolean"
+                },
+                "followed_by": {
+                    "type": "boolean"
+                },
+                "notifications_enable": {
+                    "type": "boolean"
+                },
+                "screen_name": {
+                    "type": "string"
+                },
+                "following": {
+                    "type": "boolean"
+                }
+            }
+        },
+        "Settings": {
+            "type": "object",
+            "properties": {
+                "sleep_time": {
+                    "$ref": "#/definitions/Sleep"
+                },
+                "use_cookie_personalization": {
+                    "type": "boolean"
+                },
+                "trend_location": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/Location"
+                    }
+                },
+                "language": {
+                    "type": "string"
+                },
+                "discoverable_by_email": {
+                    "type": "boolean"
+                },
+                "always_use_https": {
+                    "type": "boolean"
+                },
+                "protected": {
+                    "type": "boolean"
+                },
+                "geo_enabled": {
+                    "type": "boolean"
+                },
+                "show_all_inline_media": {
+                    "type": "boolean"
+                },
+                "screen_name": {
+                    "type": "string"
+                }
+            }
+        },
+        "Sleep": {
+            "type": "object",
+            "properties": {
+                "end_time": {
+                    "type": "string"
+                },
+                "enabled": {
+                    "type": "boolean"
+                },
+                "start_time": {
+                    "type": "string"
+                }
+            }
+        },
+        "Location": {
+            "type": "object",
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "placeType": {
+                    "$ref": "#/definitions/PlaceType"
+                },
+                "woeid": {
+                    "type": "integer"
+                },
+                "country": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                },
+                "countryCode": {
+                    "type": "string"
+                },
+                "parentid": {
+                    "type": "integer"
+                }
+            }
+        },
+        "PlaceType": {
+            "type": "object",
+            "properties": {
+                "name": {
+                    "type": "string"
+                },
+                "code": {
+                    "type": "integer"
+                }
+            }
+        },
+        "TrendInfo": {
+            "type": "object",
+            "properties": {
+                "as_of": {
+                    "type": "string"
+                },
+                "created_at": {
+                    "type": "string"
+                },
+                "locations": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/Location"
+                    }
+                },
+                "trends": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/Trends"
+                    }
+                }
+            }
+        },
+        "Trends": {
+            "type": "object",
+            "properties": {
+                "events": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                },
+                "promoted_content": {
+                    "type": "string"
+                },
+                "query": {
+                    "type": "string"
+                },
+                "url": {
+                    "type": "string"
+                }
+            }
+        },
+        "Help_Config": {
+            "type": "object",
+            "properties": {
+                "dm_text_character_limit": {
+                    "type": "integer"
+                },
+                "characters_reserved_per_media": {
+                    "type": "integer"
+                },
+                "max_media_per_upload": {
+                    "type": "integer"
+                },
+                "non_username_paths": {
+                    "type": "array",
+                    "items": {
+                        "type": "string"
+                    }
+                },
+                "photo_size_limit": {
+                    "type": "integer"
+                },
+                "photo_sizes": {
+                    "$ref": "#/definitions/Sizes"
+                }
+            }
+        },
+        "Help_Language": {
+            "type": "object",
+            "properties": {
+                "code": {
+                    "type": "string"
+                },
+                "status": {
+                    "type": "string"
+                },
+                "name": {
+                    "type": "string"
+                }
+            }
+        },
+        "Help_Privacy": {
+            "type": "object",
+            "properties": {
+                "privacy": {
+                    "type": "string"
+                }
+            }
+        },
+        "Help_Tos": {
+            "type": "object",
+            "properties": {
+                "Tos": {
+                    "type": "string"
+                }
+            }
+        }
+    }
+}

+ 84 - 0
node_modules/json-formatter-js/demo/index.js

@@ -0,0 +1,84 @@
+var JSONFormatter = require('../dist/json-formatter.js').default;
+
+var live = document.getElementById('live');
+var hoverPreviewEnabledCheckbox = document.getElementById('hoverPreviewEnabled');
+
+function render() {
+    live.style.backgroundColor = 'transparent';
+    var result = document.getElementById('live-result');
+    try {
+        var formatter = new JSONFormatter(JSON.parse(live.value), 1, { hoverPreviewEnabled: hoverPreviewEnabledCheckbox.checked });
+        result.innerHTML = '';
+        result.appendChild(formatter.render());
+    } catch (e) {
+        live.style.backgroundColor = 'rgba(255, 87, 34, 0.35)';
+    }
+}
+live.addEventListener('keyup', render);
+hoverPreviewEnabledCheckbox.addEventListener('change', render);
+render();
+
+
+var complex = {
+    numbers: [
+        1,
+        2,
+        3
+    ],
+    boolean: true,
+    'null': null,
+    number: 123,
+    anObject: {
+        a: 'b',
+        c: 'd',
+        e: 'f\"'
+    },
+    string: 'Hello World',
+    url: 'https://github.com/mohsen1/json-formatter-js',
+    date: 'Sun Aug 03 2014 20:46:55 GMT-0700 (PDT)',
+    func: function add(a, b) { return a + b; }
+};
+
+var deep = { a: { b: { c: { d: {} } } } };
+
+var examples = [
+    { title: 'Complex', json: complex },
+    { title: 'Number', json: 42 },
+    { title: 'null', json: null },
+    { title: 'Empty Object', json: Object.create(null) },
+    { title: 'Empty Array', json: [] },
+    { title: 'Deep', json: deep },
+    { title: 'Dark', json: complex, config: { theme: 'dark' } }
+];
+
+var result = document.querySelector('.result');
+
+examples.forEach(function (example) {
+    var title = document.createElement('h3');
+    var formatter = new JSONFormatter(example.json, 1, example.config);
+
+    title.innerText = example.title;
+
+    result.appendChild(title)
+    var el = formatter.render();
+
+    if (example.config && example.config.theme === 'dark') {
+        el.style.backgroundColor = '#1E1E1E';
+    }
+
+    result.appendChild(el);
+});
+
+fetch('demo/giant.json').then(function (resp) {
+    resp.json().then(function (giant) {
+        var giantFormatter = new JSONFormatter(giant, 2, { hoverPreviewEnabled: true });
+        var title = document.createElement('h3');
+
+        title.innerText = 'Giant JSON';
+        result.appendChild(title);
+
+        console.time('Rendering giant JSON');
+        result.appendChild(giantFormatter.render());
+        console.timeEnd('Rendering giant JSON');
+    });
+})

+ 12 - 0
node_modules/json-formatter-js/demo/webpack.config.js

@@ -0,0 +1,12 @@
+
+var path = require('path');
+
+module.exports = {
+    devtool: 'sourcemap',
+    context: __dirname,
+    entry: './index.js',
+    output: {
+        path: path.join(__dirname, '../dist/demo'),
+        filename: 'index.js'
+    }
+}

File diff suppressed because it is too large
+ 275 - 0
node_modules/json-formatter-js/dist/demo/index.js


File diff suppressed because it is too large
+ 0 - 0
node_modules/json-formatter-js/dist/demo/index.js.map


File diff suppressed because it is too large
+ 203 - 0
node_modules/json-formatter-js/dist/json-formatter.js


File diff suppressed because it is too large
+ 0 - 0
node_modules/json-formatter-js/dist/json-formatter.js.map


+ 7 - 0
node_modules/json-formatter-js/dist/src/helpers.d.ts

@@ -0,0 +1,7 @@
+export declare function isObject(value: any): boolean;
+export declare function getObjectName(object: Object): string;
+export declare function getType(object: Object): string;
+export declare function getValuePreview(object: Object, value: string): string;
+export declare function getPreview(object: string): string;
+export declare function cssClass(className: string): string;
+export declare function createElement(type: string, className?: string, content?: Element | string): Element;

+ 96 - 0
node_modules/json-formatter-js/dist/src/index.d.ts

@@ -0,0 +1,96 @@
+import './style.less';
+export interface JSONFormatterConfiguration {
+    hoverPreviewEnabled?: boolean;
+    hoverPreviewArrayCount?: number;
+    hoverPreviewFieldCount?: number;
+    animateOpen?: boolean;
+    animateClose?: boolean;
+    theme?: string;
+}
+/**
+ * @class JSONFormatter
+ *
+ * JSONFormatter allows you to render JSON objects in HTML with a
+ * **collapsible** navigation.
+*/
+export default class JSONFormatter {
+    json: any;
+    private open;
+    private config;
+    private key;
+    private _isOpen;
+    private element;
+    /**
+     * @param {object} json The JSON object you want to render. It has to be an
+     * object or array. Do NOT pass raw JSON string.
+     *
+     * @param {number} [open=1] his number indicates up to how many levels the
+     * rendered tree should expand. Set it to `0` to make the whole tree collapsed
+     * or set it to `Infinity` to expand the tree deeply
+     *
+     * @param {object} [config=defaultConfig] -
+     *  defaultConfig = {
+     *   hoverPreviewEnabled: false,
+     *   hoverPreviewArrayCount: 100,
+     *   hoverPreviewFieldCount: 5
+     * }
+     *
+     * Available configurations:
+     *  #####Hover Preview
+     * * `hoverPreviewEnabled`:  enable preview on hover
+     * * `hoverPreviewArrayCount`: number of array items to show in preview Any
+     *    array larger than this number will be shown as `Array[XXX]` where `XXX`
+     *    is length of the array.
+     * * `hoverPreviewFieldCount`: number of object properties to show for object
+     *   preview. Any object with more properties that thin number will be
+     *   truncated.
+     *
+     * @param {string} [key=undefined] The key that this object in it's parent
+     * context
+    */
+    constructor(json: any, open?: number, config?: JSONFormatterConfiguration, key?: string);
+    private isOpen;
+    private readonly isDate;
+    private readonly isUrl;
+    private readonly isArray;
+    private readonly isObject;
+    private readonly isEmptyObject;
+    private readonly isEmpty;
+    private readonly hasKey;
+    private readonly constructorName;
+    private readonly type;
+    private readonly keys;
+    /**
+     * Toggles `isOpen` state
+     *
+    */
+    toggleOpen(): void;
+    /**
+    * Open all children up to a certain depth.
+    * Allows actions such as expand all/collapse all
+    *
+    */
+    openAtDepth(depth?: number): void;
+    /**
+     * Generates inline preview
+     *
+     * @returns {string}
+    */
+    getInlinepreview(): string;
+    /**
+     * Renders an HTML element and installs event listeners
+     *
+     * @returns {HTMLDivElement}
+    */
+    render(): HTMLDivElement;
+    /**
+     * Appends all the children to children element
+     * Animated option is used when user triggers this via a click
+    */
+    appendChildren(animated?: boolean): void;
+    /**
+     * Removes all the children from children element
+     * Animated option is used when user triggers this via a click
+    */
+    removeChildren(animated?: boolean): void;
+}

+ 0 - 0
node_modules/json-formatter-js/dist/test/spec.d.ts


+ 91 - 0
node_modules/json-formatter-js/index.html

@@ -0,0 +1,91 @@
+<html>
+  <head>
+    <script defer src="dist/demo/index.js"></script>
+    <style type="text/css">
+    body {
+      max-width: 800px;
+      margin: 20px auto;
+      font-family: sans-serif;
+    }
+    .gh {
+      text-align: right;
+    }
+    .result  h3 + div {
+      border: 1px solid lightgray;
+      border-radius: 5px;
+      padding: 10px;
+    }
+    h1 code {
+      font-size: 2em;
+    }
+    pre {
+      font-size: 1.5rem;
+      background: #efefef;
+      padding: 1em;
+    }
+    textarea {
+      font-family: monospace;
+    }
+    </style>
+  </head>
+  <body>
+    <div class="intro">
+      <div class="gh">
+        <iframe
+          src="http://ghbtns.com/github-btn.html?user=mohsen1&repo=json-formatter-js&type=watch&size=large&count=true"
+          frameborder="0"
+          width="170"
+          height="30"
+          scrolling="0">
+        </iframe>
+        <iframe
+          src="http://ghbtns.com/github-btn.html?user=mohsen1&repo=json-formatter-js&type=fork&size=large&count=true"
+          frameborder="0"
+          width="170"
+          height="30"
+          scrolling="0">
+        </iframe>
+      </div>
+      <h1><code>JSONFormatter</code></h1>
+      <p>
+        Render JSON objects in HTML with a <b>collapsible</b> navigation.
+      </p>
+      <p><b><a href="https://github.com/mohsen1/json-formatter-js">JSON Formatter project on GitHub</a></b></p>
+    </div>
+    <h2>Usage</h2>
+    <div class="usage">
+      <p>Simple usage in ES6</p>
+      <pre>
+import JSONFormatter from 'json-formatter-js'
+
+const myJSON = {ans: 42};
+
+const formatter = new JSONFormatter(myJSON);
+
+document.body.appendChild(formatter.render());
+      </pre>
+    </div>
+    <h2>Playground</h2>
+    <div class="playground">
+      <p>Updating the JSON value in this textarea renders a new formatter on the right.</p>
+      <table>
+        <tr>
+          <td>
+            <textarea id="live" name="" id="" cols="30" rows="10">{"foo": 42}</textarea>
+          </td>
+          <td>
+            <div id="live-result"></div>
+          </td>
+        </tr>
+        <tr>
+          <p>
+            <input type="checkbox" id="hoverPreviewEnabled">
+            <label for="hoverPreviewEnabled"><code>hoverPreviewEnabled</code></label>
+          </p>
+        </tr>
+      </table>
+    </div>
+    <h2>Examples</h2>
+    <div class="result"></div>
+  </body>
+</html>

+ 81 - 0
node_modules/json-formatter-js/package.json

@@ -0,0 +1,81 @@
+{
+  "_from": "json-formatter-js",
+  "_id": "json-formatter-js@2.2.0",
+  "_inBundle": false,
+  "_integrity": "sha1-HtmHIj7y8dlFMEWX+q54tYCoISs=",
+  "_location": "/json-formatter-js",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "tag",
+    "registry": true,
+    "raw": "json-formatter-js",
+    "name": "json-formatter-js",
+    "escapedName": "json-formatter-js",
+    "rawSpec": "",
+    "saveSpec": null,
+    "fetchSpec": "latest"
+  },
+  "_requiredBy": [
+    "#USER",
+    "/"
+  ],
+  "_resolved": "https://registry.npmjs.org/json-formatter-js/-/json-formatter-js-2.2.0.tgz",
+  "_shasum": "1ed987223ef2f1d945304597faae78b580a8212b",
+  "_spec": "json-formatter-js",
+  "_where": "/home/zorro/Documents/Sahib/zweiachtzehn",
+  "author": {
+    "name": "Mohsen Azimi",
+    "email": "me@azimi.me"
+  },
+  "bugs": {
+    "url": "https://github.com/mohsen1/json-formatter-js/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "JSON Formatter core library ",
+  "devDependencies": {
+    "@types/jest": "^19.2.2",
+    "chai": "^3.2.0",
+    "css-loader": "^0.26.1",
+    "jest": "^19.0.2",
+    "less": "^2.7.1",
+    "less-loader": "^2.2.3",
+    "minimist": "^1.2.0",
+    "mocha": "^3.2.0",
+    "style-loader": "^0.13.1",
+    "ts-jest": "^19.0.6",
+    "ts-loader": "^2.0.0",
+    "typescript": "^2.2.2",
+    "webpack": "^2.2.1",
+    "webpack-dev-server": "^1.16.2"
+  },
+  "homepage": "https://github.com/mohsen1/json-formatter-js#readme",
+  "jest": {
+    "transform": {
+      ".(ts|tsx)": "<rootDir>/node_modules/ts-jest/preprocessor.js"
+    },
+    "testRegex": "(test/.*|\\.(test|spec))\\.(ts|tsx|js)$",
+    "moduleFileExtensions": [
+      "ts",
+      "tsx",
+      "js"
+    ]
+  },
+  "keywords": [
+    "json"
+  ],
+  "license": "MIT",
+  "main": "dist/json-formatter.js",
+  "name": "json-formatter-js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/mohsen1/json-formatter-js.git"
+  },
+  "scripts": {
+    "build": "webpack && webpack --config demo/webpack.config.js",
+    "start": "node server.js",
+    "test": "jest"
+  },
+  "types": "dist/src/index.d.js",
+  "version": "2.2.0"
+}

+ 13 - 0
node_modules/json-formatter-js/server.js

@@ -0,0 +1,13 @@
+'use strict';
+var webpack = require('webpack');
+var webpackDevServer = require('webpack-dev-server');
+var PORT = process.env.PORT || 8080;
+var config = require("./webpack.config.js");
+config.entry.app.unshift(`webpack-dev-server/client?http://localhost:{PORT}/`, "webpack/hot/dev-server");
+var compiler = webpack(config);
+var server = new webpackDevServer(compiler, {
+  progress: true,
+  quiet: true,
+  publicPath: config.output.publicPath
+});
+server.listen(PORT, console.log.bind(null, `Development server started at http://localhost:${PORT}`));

+ 109 - 0
node_modules/json-formatter-js/src/helpers.ts

@@ -0,0 +1,109 @@
+/*
+ * Escapes `"` charachters from string
+*/
+function escapeString(str: string): string {
+  return str.replace('"', '\"');
+}
+
+/*
+ * Determines if a value is an object
+*/
+export function isObject(value: any): boolean {
+  var type = typeof value;
+  return !!value && (type == 'object');
+}
+
+/*
+ * Gets constructor name of an object.
+ * From http://stackoverflow.com/a/332429
+ *
+*/
+export function getObjectName(object: Object):string {
+  if (object === undefined) {
+    return '';
+  }
+  if (object === null) {
+    return 'Object';
+  }
+  if (typeof object === 'object' && !object.constructor) {
+      return 'Object';
+  }
+
+  const funcNameRegex = /function ([^(]*)/;
+  const results = (funcNameRegex).exec((object).constructor.toString());
+  if (results && results.length > 1) {
+    return results[1];
+  } else {
+    return '';
+  }
+}
+
+/*
+ * Gets type of an object. Returns "null" for null objects
+*/
+export function getType(object: Object): string {
+  if (object === null) { return 'null'; }
+  return typeof object;
+}
+
+/*
+ * Generates inline preview for a JavaScript object based on a value
+*/
+export function getValuePreview (object: Object, value: string): string {
+  var type = getType(object);
+
+  if (type === 'null' || type === 'undefined') { return type; }
+
+  if (type === 'string') {
+    value = '"' + escapeString(value) + '"';
+  }
+  if (type === 'function'){
+
+    // Remove content of the function
+    return object.toString()
+        .replace(/[\r\n]/g, '')
+        .replace(/\{.*\}/, '') + '{…}';
+  }
+  return value;
+}
+
+/*
+ * Generates inline preview for a JavaScript object
+*/
+export function getPreview(object: string): string {
+  let value = '';
+  if (isObject(object)) {
+    value = getObjectName(object);
+    if (Array.isArray(object))
+      value += '[' + object.length + ']';
+  } else {
+    value = getValuePreview(object, object);
+  }
+  return value;
+}
+
+/*
+ * Generates a prefixed CSS class name
+*/
+export function cssClass(className:string): string {
+  return `json-formatter-${className}`;
+}
+
+/*
+  * Creates a new DOM element wiht given type and class
+  * TODO: move me to helpers
+*/
+export function createElement(type: string, className?: string, content?: Element|string): Element {
+  const el = document.createElement(type);
+  if (className) {
+    el.classList.add(cssClass(className));
+  }
+  if (content !== undefined) {
+    if (content instanceof Node) {
+      el.appendChild(content);
+    } else {
+      el.appendChild(document.createTextNode(String(content)));
+    }
+  }
+  return el;
+}

+ 453 - 0
node_modules/json-formatter-js/src/index.ts

@@ -0,0 +1,453 @@
+import {
+  isObject,
+  getObjectName,
+  getType,
+  getValuePreview,
+  getPreview,
+  cssClass,
+  createElement
+} from './helpers';
+
+import './style.less';
+
+const DATE_STRING_REGEX = /(^\d{1,4}[\.|\\/|-]\d{1,2}[\.|\\/|-]\d{1,4})(\s*(?:0?[1-9]:[0-5]|1(?=[012])\d:[0-5])\d\s*[ap]m)?$/;
+const PARTIAL_DATE_REGEX = /\d{2}:\d{2}:\d{2} GMT-\d{4}/;
+const JSON_DATE_REGEX = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/;
+
+// When toggleing, don't animated removal or addition of more than a few items
+const MAX_ANIMATED_TOGGLE_ITEMS = 10;
+
+const requestAnimationFrame = window.requestAnimationFrame || function(cb: ()=>void) { cb(); return 0; };
+
+export interface JSONFormatterConfiguration {
+  hoverPreviewEnabled?: boolean;
+  hoverPreviewArrayCount?: number;
+  hoverPreviewFieldCount?: number;
+  animateOpen?: boolean;
+  animateClose?: boolean;
+  theme?: string;
+};
+
+const _defaultConfig: JSONFormatterConfiguration = {
+  hoverPreviewEnabled: false,
+  hoverPreviewArrayCount: 100,
+  hoverPreviewFieldCount: 5,
+  animateOpen: true,
+  animateClose: true,
+  theme: null
+};
+
+
+/**
+ * @class JSONFormatter
+ *
+ * JSONFormatter allows you to render JSON objects in HTML with a
+ * **collapsible** navigation.
+*/
+export default class JSONFormatter {
+
+  // Hold the open state after the toggler is used
+  private _isOpen : boolean = null;
+
+  // A reference to the element that we render to
+  private element: Element;
+
+  /**
+   * @param {object} json The JSON object you want to render. It has to be an
+   * object or array. Do NOT pass raw JSON string.
+   *
+   * @param {number} [open=1] his number indicates up to how many levels the
+   * rendered tree should expand. Set it to `0` to make the whole tree collapsed
+   * or set it to `Infinity` to expand the tree deeply
+   *
+   * @param {object} [config=defaultConfig] -
+   *  defaultConfig = {
+   *   hoverPreviewEnabled: false,
+   *   hoverPreviewArrayCount: 100,
+   *   hoverPreviewFieldCount: 5
+   * }
+   *
+   * Available configurations:
+   *  #####Hover Preview
+   * * `hoverPreviewEnabled`:  enable preview on hover
+   * * `hoverPreviewArrayCount`: number of array items to show in preview Any
+   *    array larger than this number will be shown as `Array[XXX]` where `XXX`
+   *    is length of the array.
+   * * `hoverPreviewFieldCount`: number of object properties to show for object
+   *   preview. Any object with more properties that thin number will be
+   *   truncated.
+   *
+   * @param {string} [key=undefined] The key that this object in it's parent
+   * context
+  */
+  constructor(public json: any, private open = 1, private config: JSONFormatterConfiguration = _defaultConfig, private key?: string) {
+
+    // Setting default values for config object
+    if (this.config.hoverPreviewEnabled === undefined) {
+      this.config.hoverPreviewEnabled = _defaultConfig.hoverPreviewEnabled;
+    }
+    if (this.config.hoverPreviewArrayCount === undefined) {
+      this.config.hoverPreviewArrayCount = _defaultConfig.hoverPreviewArrayCount;
+    }
+    if (this.config.hoverPreviewFieldCount === undefined) {
+      this.config.hoverPreviewFieldCount = _defaultConfig.hoverPreviewFieldCount;
+    }
+  }
+
+  /*
+   * is formatter open?
+  */
+  private get isOpen(): boolean {
+    if (this._isOpen !== null) {
+      return this._isOpen
+    } else {
+      return this.open > 0;
+    }
+  }
+
+  /*
+   * set open state (from toggler)
+  */
+  private set isOpen(value: boolean) {
+    this._isOpen = value;
+  }
+
+  /*
+   * is this a date string?
+  */
+  private get isDate(): boolean {
+    return (this.type === 'string') &&
+      (DATE_STRING_REGEX.test(this.json) ||
+      JSON_DATE_REGEX.test(this.json) ||
+      PARTIAL_DATE_REGEX.test(this.json));
+  }
+
+  /*
+   * is this a URL string?
+  */
+  private get isUrl(): boolean {
+    return this.type === 'string' && (this.json.indexOf('http') === 0);
+  }
+
+  /*
+   * is this an array?
+  */
+  private get isArray(): boolean {
+    return Array.isArray(this.json);
+  }
+
+  /*
+   * is this an object?
+   * Note: In this context arrays are object as well
+  */
+  private get isObject(): boolean {
+    return isObject(this.json);
+  }
+
+  /*
+   * is this an empty object with no properties?
+  */
+  private get isEmptyObject(): boolean {
+    return !this.keys.length && !this.isArray;
+  }
+
+  /*
+   * is this an empty object or array?
+  */
+  private get isEmpty(): boolean {
+    return this.isEmptyObject || (this.keys && !this.keys.length && this.isArray);
+  }
+
+  /*
+   * did we recieve a key argument?
+   * This means that the formatter was called as a sub formatter of a parent formatter
+  */
+  private get hasKey(): boolean {
+    return typeof this.key !== 'undefined';
+  }
+
+  /*
+   * if this is an object, get constructor function name
+  */
+  private get constructorName(): string {
+    return getObjectName(this.json);
+  }
+
+  /*
+   * get type of this value
+   * Possible values: all JavaScript primitive types plus "array" and "null"
+  */
+  private get type(): string {
+    return getType(this.json);
+  }
+
+  /*
+   * get object keys
+   * If there is an empty key we pad it wit quotes to make it visible
+  */
+  private get keys(): string[] {
+    if (this.isObject) {
+      return Object.keys(this.json).map((key)=> key ? key : '""');
+    } else {
+      return [];
+    }
+  }
+
+  /**
+   * Toggles `isOpen` state
+   *
+  */
+  toggleOpen() {
+    this.isOpen = !this.isOpen;
+
+    if (this.element) {
+      if (this.isOpen) {
+        this.appendChildren(this.config.animateOpen);
+      } else{
+        this.removeChildren(this.config.animateClose);
+      }
+      this.element.classList.toggle(cssClass('open'));
+    }
+  }
+
+  /**
+  * Open all children up to a certain depth.
+  * Allows actions such as expand all/collapse all
+  *
+  */
+  openAtDepth(depth = 1) {
+    if (depth < 0) {
+      return;
+    }
+
+    this.open = depth;
+    this.isOpen = (depth !== 0);
+
+    if (this.element) {
+      this.removeChildren(false);
+
+      if (depth === 0) {
+        this.element.classList.remove(cssClass('open'));
+      } else {
+        this.appendChildren(this.config.animateOpen);
+        this.element.classList.add(cssClass('open'));
+      }
+    }
+  }
+
+  /**
+   * Generates inline preview
+   *
+   * @returns {string}
+  */
+  getInlinepreview() {
+    if (this.isArray) {
+
+      // if array length is greater then 100 it shows "Array[101]"
+      if (this.json.length > this.config.hoverPreviewArrayCount) {
+        return `Array[${this.json.length}]`;
+      } else {
+        return `[${this.json.map(getPreview).join(', ')}]`;
+      }
+    } else {
+
+      const keys = this.keys;
+
+      // the first five keys (like Chrome Developer Tool)
+      const narrowKeys = keys.slice(0, this.config.hoverPreviewFieldCount);
+
+      // json value schematic information
+      const kvs = narrowKeys.map(key => `${key}:${getPreview(this.json[key])}`);
+
+      // if keys count greater then 5 then show ellipsis
+      const ellipsis = keys.length >= this.config.hoverPreviewFieldCount ? '…' : '';
+
+      return `{${kvs.join(', ')}${ellipsis}}`;
+    }
+  }
+
+
+  /**
+   * Renders an HTML element and installs event listeners
+   *
+   * @returns {HTMLDivElement}
+  */
+  render(): HTMLDivElement {
+
+    // construct the root element and assign it to this.element
+    this.element = createElement('div', 'row');
+
+    // construct the toggler link
+    const togglerLink = createElement('a', 'toggler-link');
+
+    // if this is an object we need a wrapper span (toggler)
+    if (this.isObject) {
+      togglerLink.appendChild(createElement('span', 'toggler'));
+    }
+
+    // if this is child of a parent formatter we need to append the key
+    if (this.hasKey) {
+      togglerLink.appendChild(createElement('span', 'key', `${this.key}:`));
+    }
+
+    // Value for objects and arrays
+    if (this.isObject) {
+
+      // construct the value holder element
+      const value = createElement('span', 'value');
+
+      // we need a wrapper span for objects
+      const objectWrapperSpan = createElement('span');
+
+      // get constructor name and append it to wrapper span
+      var constructorName = createElement('span', 'constructor-name', this.constructorName);
+      objectWrapperSpan.appendChild(constructorName);
+
+      // if it's an array append the array specific elements like brackets and length
+      if (this.isArray) {
+        const arrayWrapperSpan = createElement('span');
+        arrayWrapperSpan.appendChild(createElement('span', 'bracket', '['));
+        arrayWrapperSpan.appendChild(createElement('span', 'number', (this.json.length)));
+        arrayWrapperSpan.appendChild(createElement('span', 'bracket', ']'));
+        objectWrapperSpan.appendChild(arrayWrapperSpan);
+      }
+
+      // append object wrapper span to toggler link
+      value.appendChild(objectWrapperSpan);
+      togglerLink.appendChild(value);
+
+    // Primitive values
+    } else {
+
+      // make a value holder element
+      const value = this.isUrl ? createElement('a') : createElement('span');
+
+      // add type and other type related CSS classes
+      value.classList.add(cssClass(this.type));
+      if (this.isDate) {
+        value.classList.add(cssClass('date'));
+      }
+      if (this.isUrl) {
+        value.classList.add(cssClass('url'));
+        value.setAttribute('href', this.json);
+      }
+
+      // Append value content to value element
+      const valuePreview = getValuePreview(this.json, this.json);
+      value.appendChild(document.createTextNode(valuePreview));
+
+      // append the value element to toggler link
+      togglerLink.appendChild(value);
+    }
+
+    // if hover preview is enabled, append the inline preview element
+    if (this.isObject && this.config.hoverPreviewEnabled) {
+      const preview = createElement('span', 'preview-text');
+      preview.appendChild(document.createTextNode(this.getInlinepreview()));
+      togglerLink.appendChild(preview);
+    }
+
+    // construct a children element
+    const children = createElement('div', 'children');
+
+    // set CSS classes for children
+    if (this.isObject) {
+      children.classList.add(cssClass('object'));
+    }
+    if (this.isArray) {
+      children.classList.add(cssClass('array'));
+    }
+    if (this.isEmpty) {
+      children.classList.add(cssClass('empty'));
+    }
+
+    // set CSS classes for root element
+    if (this.config && this.config.theme) {
+      this.element.classList.add(cssClass(this.config.theme));
+    }
+    if (this.isOpen) {
+      this.element.classList.add(cssClass('open'));
+    }
+
+    // append toggler and children elements to root element
+    this.element.appendChild(togglerLink);
+    this.element.appendChild(children);
+
+    // if formatter is set to be open call appendChildren
+    if (this.isObject && this.isOpen) {
+      this.appendChildren();
+    }
+
+    // add event listener for toggling
+    if (this.isObject) {
+      togglerLink.addEventListener('click', this.toggleOpen.bind(this));
+    }
+
+    return this.element as HTMLDivElement;
+  }
+
+  /**
+   * Appends all the children to children element
+   * Animated option is used when user triggers this via a click
+  */
+  appendChildren(animated: boolean = false) {
+    const children = this.element.querySelector(`div.${cssClass('children')}`);
+
+    if (!children || this.isEmpty) { return; }
+
+    if (animated) {
+      let index = 0;
+      const addAChild = ()=> {
+        const key = this.keys[index];
+        const formatter = new JSONFormatter(this.json[key], this.open - 1, this.config, key);
+        children.appendChild(formatter.render());
+
+        index += 1;
+
+        if (index < this.keys.length) {
+          if (index > MAX_ANIMATED_TOGGLE_ITEMS) {
+            addAChild();
+          } else {
+            requestAnimationFrame(addAChild);
+          }
+        }
+      };
+
+      requestAnimationFrame(addAChild);
+
+    } else {
+      this.keys.forEach(key => {
+        const formatter = new JSONFormatter(this.json[key], this.open - 1, this.config, key);
+        children.appendChild(formatter.render());
+      });
+    }
+  }
+
+  /**
+   * Removes all the children from children element
+   * Animated option is used when user triggers this via a click
+  */
+  removeChildren(animated: boolean = false) {
+    const childrenElement = this.element.querySelector(`div.${cssClass('children')}`) as HTMLDivElement;
+
+    if (animated) {
+      let childrenRemoved = 0;
+      const removeAChild = ()=> {
+        if (childrenElement && childrenElement.children.length) {
+          childrenElement.removeChild(childrenElement.children[0]);
+          childrenRemoved += 1;
+          if (childrenRemoved > MAX_ANIMATED_TOGGLE_ITEMS) {
+            removeAChild();
+          } else {
+            requestAnimationFrame(removeAChild);
+          }
+        }
+      };
+      requestAnimationFrame(removeAChild);
+    } else {
+      if (childrenElement) {
+        childrenElement.innerHTML = '';
+      }
+    }
+  }
+}

+ 127 - 0
node_modules/json-formatter-js/src/style.less

@@ -0,0 +1,127 @@
+.theme(
+  @default-color: black,
+  @string-color: green,
+  @number-color: blue,
+  @boolean-color: red,
+  @null-color: #855A00,
+  @undefined-color: rgb(202, 11, 105),
+  @function-color: #FF20ED,
+  @rotate-time: 100ms,
+  @toggler-opacity: 0.6,
+  @toggler-color: #45376F,
+  @bracket-color: blue,
+  @key-color: #00008B,
+  @url-color: blue ){
+
+  font-family: monospace;
+  &, a, a:hover {
+    color: @default-color;
+    text-decoration: none;
+  }
+
+  .json-formatter-row {
+    margin-left: 1rem;
+  }
+
+  .json-formatter-children {
+    &.json-formatter-empty {
+      opacity: 0.5;
+      margin-left: 1rem;
+
+      &:after { display: none; }
+      &.json-formatter-object:after { content: "No properties"; }
+      &.json-formatter-array:after { content: "[]"; }
+    }
+  }
+
+  .json-formatter-string {
+    color: @string-color;
+    white-space: pre;
+    word-wrap: break-word;
+  }
+  .json-formatter-number { color: @number-color; }
+  .json-formatter-boolean { color: @boolean-color; }
+  .json-formatter-null { color: @null-color; }
+  .json-formatter-undefined { color: @undefined-color; }
+  .json-formatter-function { color: @function-color; }
+  .json-formatter-date { background-color: fade(@default-color, 5%); }
+  .json-formatter-url {
+    text-decoration: underline;
+    color: @url-color;
+    cursor: pointer;
+  }
+
+  .json-formatter-bracket { color: @bracket-color; }
+  .json-formatter-key {
+    color: @key-color;
+    cursor: pointer;
+    padding-right: 0.2rem;
+  }
+  .json-formatter-constructor-name {
+    cursor: pointer;
+  }
+
+  .json-formatter-toggler {
+    line-height: 1.2rem;
+    font-size: 0.7rem;
+    vertical-align: middle;
+    opacity: @toggler-opacity;
+    cursor: pointer;
+    padding-right: 0.2rem;
+
+    &:after {
+      display: inline-block;
+      transition: transform @rotate-time ease-in;
+      content: "►";
+    }
+  }
+
+  // Inline preview on hover (optional)
+  > a > .json-formatter-preview-text {
+    opacity: 0;
+    transition: opacity .15s ease-in;
+    font-style: italic;
+  }
+  &:hover > a > .json-formatter-preview-text {
+    opacity: 0.6;
+  }
+
+  // Open state
+  &.json-formatter-open {
+    > .json-formatter-toggler-link .json-formatter-toggler:after{
+      transform: rotate(90deg);
+    }
+    > .json-formatter-children:after {
+      display: inline-block;
+    }
+    > a > .json-formatter-preview-text {
+      display: none;
+    }
+    &.json-formatter-empty:after {
+      display: block;
+    }
+  }
+}
+
+// Default theme
+.json-formatter-row {
+  .theme();
+}
+
+// Dark theme
+.json-formatter-dark.json-formatter-row {
+  .theme(
+    @default-color: white,
+    @string-color: #31F031,
+    @number-color: #66C2FF,
+    @boolean-color: #EC4242,
+    @null-color: #EEC97D,
+    @undefined-color: rgb(239, 143, 190),
+    @function-color: #FD48CB,
+    @rotate-time: 100ms,
+    @toggler-opacity: 0.6,
+    @toggler-color: #45376F,
+    @bracket-color: #9494FF,
+    @key-color: #23A0DB,
+    @url-color: #027BFF);
+}

+ 1 - 0
node_modules/json-formatter-js/src/style.less.d.ts

@@ -0,0 +1 @@
+export const theme: string;

+ 168 - 0
node_modules/json-formatter-js/test/spec.ts

@@ -0,0 +1,168 @@
+'use strict';
+import { default as JSONFormatter } from '../src/index';
+
+describe('null', () => {
+    it('should render "null"', () => {
+        const formatter = new JSONFormatter(null);
+        const el = formatter.render();
+        expect(el.textContent).toContain('null');
+    });
+});
+
+describe('undefined', () => {
+    it('should render "undefined"', () => {
+        const formatter = new JSONFormatter(undefined);
+
+        expect(formatter.render().textContent).toContain('undefined');
+    });
+});
+
+describe('object function constructor', () => {
+    it('should output "Format"', () => {
+        function Format() {
+        }
+        const obj = new Format();
+
+        const formatter = new JSONFormatter(obj);
+        expect(formatter['constructorName']).toEqual('Format');
+    });
+
+    it('should output "BrokenFormat"', () => {
+        const failConstructor = 'function BrokenFormat() {Object.assign(}';
+        const funcNameRegex = /function ([^(]*)/;
+        const results = (funcNameRegex).exec(failConstructor.toString());
+        expect(results[1]).toEqual('BrokenFormat');
+    });
+});
+
+
+describe('function', () => {
+    it('should render the function', () => {
+        const formatter = new JSONFormatter(function add(a, b) {
+            return a + b;
+        });
+        const elementText = formatter.render().textContent;
+
+        expect(elementText).toContain('function');
+        expect(elementText).toContain('add');
+        expect(elementText).toContain('(a, b)');
+        expect(elementText.trim().match(/function\s[^\(]*\([^\)]*\)\s*(.*)/)[1]).toEqual('{…}');
+    });
+});
+
+describe('string', () => {
+    it('should render "Hello World!"', () => {
+        const formatter = new JSONFormatter('Hello World!');
+
+        expect(formatter.render().textContent).toContain('Hello World');
+    });
+});
+
+describe('date string', () => {
+    const formatter = new JSONFormatter(new Date(0).toString());
+
+    it('should render "' + (new Date(0)).toString() + '"', () => {
+        expect(formatter.render().textContent).toContain('"' + (new Date(0)).toString() + '"');
+    });
+
+    it('should assing date class to date string', () => {
+        const formatter = new JSONFormatter('2015-12-05T18:58:53.727Z');
+        expect(formatter.render().querySelector('.json-formatter-date')).not.toBeNull();
+    });
+});
+
+describe('url string', () => {
+    const formatter = new JSONFormatter('https://example.com');
+
+    it('should render "https://example.com"', () => {
+        expect(formatter.render().textContent).toContain('"https://example.com"');
+    });
+
+    it('should make a link and add class "url"', () => {
+        expect(formatter.render().querySelector('a.json-formatter-url')).not.toEqual(null);
+    });
+});
+
+describe('openAtDepth after rendering', () => {
+    const formatter = new JSONFormatter({depth1: {depth2: {depth3: {depth4: 21}}}}, Infinity, {
+        animateOpen: false,
+        animateClose: false
+    });
+    const element = formatter.render();
+
+    it('should open at depth 1', () => {
+        formatter.openAtDepth();
+        expect(element.outerHTML).toContain('depth1');
+        expect(element.outerHTML).not.toContain('depth2');
+        expect(element.outerHTML).not.toContain('depth3');
+        expect(element.outerHTML).not.toContain('depth4');
+    });
+
+    it('should collapses all', () => {
+        formatter.openAtDepth(0);
+        expect(element.outerHTML).not.toContain('depth1');
+    });
+
+    it('should expand all', () => {
+        formatter.openAtDepth(Infinity);
+        expect(element.outerHTML).toContain('depth1');
+        expect(element.outerHTML).toContain('depth2');
+        expect(element.outerHTML).toContain('depth3');
+        expect(element.outerHTML).toContain('depth4');
+        expect(element.outerHTML).toContain('21');
+    });
+});
+
+describe('openAtDepth before any rendering', () => {
+    const formatter = new JSONFormatter({depth1: {depth2: {depth3: {depth4: 21}}}}, Infinity, {
+        animateOpen: false,
+        animateClose: false
+    });
+
+    it('should open at depth 1', () => {
+        formatter.openAtDepth();
+        const element = formatter.render();
+        expect(element.outerHTML).toContain('depth1');
+        expect(element.outerHTML).not.toContain('depth2');
+        expect(element.outerHTML).not.toContain('depth3');
+        expect(element.outerHTML).not.toContain('depth4');
+    });
+});
+
+describe('toggleOpen after rendering', () => {
+
+    it('should toggle', () => {
+        const formatter = new JSONFormatter({depth1: {depth2: {depth3: {depth4: 21}}}}, Infinity, {
+            animateOpen: false,
+            animateClose: false
+        });
+        const element = formatter.render();
+
+        expect(element.outerHTML).toContain('Object');
+        expect(element.outerHTML).toContain('depth1');
+
+        formatter.toggleOpen();
+
+        expect(element.outerHTML).toContain('Object');
+        expect(element.outerHTML).not.toContain('depth1');
+        expect(element.outerHTML).not.toContain('depth2');
+        expect(element.outerHTML).not.toContain('depth3');
+        expect(element.outerHTML).not.toContain('depth4');
+    });
+});
+
+describe('toggleOpen before any rendering', () => {
+    it('should toggle', () => {
+        const formatter = new JSONFormatter({depth1: {depth2: {depth3: {depth4: 21}}}}, Infinity, {
+            animateOpen: false,
+            animateClose: false
+        });
+        formatter.toggleOpen();
+        const element = formatter.render();
+        expect(element.outerHTML).toContain('Object');
+        expect(element.outerHTML).not.toContain('depth1');
+        expect(element.outerHTML).not.toContain('depth2');
+        expect(element.outerHTML).not.toContain('depth3');
+        expect(element.outerHTML).not.toContain('depth4');
+    });
+});

+ 17 - 0
node_modules/json-formatter-js/tsconfig.json

@@ -0,0 +1,17 @@
+{
+    "compilerOptions": {
+        "target": "es5",
+        "module": "es2015",
+        "allowSyntheticDefaultImports": false,
+        "moduleResolution": "node",
+        "sourceMap": true,
+        "lib": [
+            "dom",
+            "es2015"
+        ],
+        "types": [
+            "jest"
+        ],
+        "declaration": true
+    }
+}

+ 48 - 0
node_modules/json-formatter-js/webpack.config.js

@@ -0,0 +1,48 @@
+'use strict';
+
+var path = require('path');
+var webpack = require('webpack');
+
+module.exports = {
+  devtool: 'sourcemap',
+  entry: {
+    app: ['./src/index.ts']
+  },
+  output: {
+    path: path.join(__dirname, 'dist'),
+    publicPath: 'dist',
+    filename: 'json-formatter.js',
+    library: 'JSONFormatter',
+    libraryTarget: 'commonjs2',
+    umdNamedDefine: true
+  },
+  resolve: {
+    extensions: ['.ts', '.less']
+  },
+  module: {
+    rules: [
+      {
+        test: /\.less$/,
+        use: [
+          "style-loader",
+          "css-loader",
+          "less-loader"
+        ]
+      },
+      {
+        test: /\.ts$/,
+        loader: 'ts-loader'
+      }
+    ]
+  },
+  plugins: [
+    new webpack.optimize.UglifyJsPlugin({
+      beautify: true,
+      compress: {
+        dead_code: true
+      },
+      sourceMap: true,
+      mangle: false
+    })
+  ]
+};

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