diff --git a/angular.json b/angular.json
index d53184a..9922bd2 100644
--- a/angular.json
+++ b/angular.json
@@ -27,10 +27,10 @@
"src/assets"
],
"styles": [
- "src/sass/styles.scss",
"./node_modules/bootstrap/dist/css/bootstrap.css",
"./node_modules/bootstrap/dist/css/bootstrap-grid.css",
- "./node_modules/bootstrap/dist/css/bootstrap-reboot.css"
+ "./node_modules/bootstrap/dist/css/bootstrap-reboot.css",
+ "src/sass/styles.scss"
],
"scripts": [
"./node_modules/jquery/dist/jquery.min.js",
diff --git a/package-lock.json b/package-lock.json
index 35ac695..1df8c8a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -596,9 +596,9 @@
"dev": true
},
"@types/selenium-webdriver": {
- "version": "2.53.43",
- "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.43.tgz",
- "integrity": "sha512-UBYHWph6P3tutkbXpW6XYg9ZPbTKjw/YC2hGG1/GEvWwTbvezBUv3h+mmUFw79T3RFPnmedpiXdOBbXX+4l0jg==",
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.14.tgz",
+ "integrity": "sha512-4GbNCDs98uHCT/OMv40qQC/OpoPbYn9XdXeTiFwHBBFO6eJhYEPUu2zDKirXSbHlvDV8oZ9l8EQ+HrEx/YS9DQ==",
"dev": true
},
"@webassemblyjs/ast": {
@@ -876,9 +876,9 @@
}
},
"adm-zip": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz",
- "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=",
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz",
+ "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==",
"dev": true
},
"after": {
@@ -1512,6 +1512,11 @@
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
"dev": true
},
+ "bootstrap": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.2.1.tgz",
+ "integrity": "sha512-tt/7vIv3Gm2mnd/WeDx36nfGGHleil0Wg8IeB7eMrVkY0fZ5iTaBisSh8oNANc2IBsCc6vCgCNTIM/IEN0+50Q=="
+ },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1638,6 +1643,15 @@
"electron-to-chromium": "^1.3.47"
}
},
+ "browserstack": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.2.tgz",
+ "integrity": "sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==",
+ "dev": true,
+ "requires": {
+ "https-proxy-agent": "^2.2.1"
+ }
+ },
"buffer": {
"version": "4.9.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
@@ -7588,15 +7602,15 @@
"dev": true
},
"protractor": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.3.2.tgz",
- "integrity": "sha512-pw4uwwiy5lHZjIguxNpkEwJJa7hVz+bJsvaTI+IbXlfn2qXwzbF8eghW/RmrZwE2sGx82I8etb8lVjQ+JrjejA==",
+ "version": "5.4.2",
+ "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.2.tgz",
+ "integrity": "sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA==",
"dev": true,
"requires": {
- "@types/node": "^6.0.46",
"@types/q": "^0.0.32",
- "@types/selenium-webdriver": "~2.53.39",
+ "@types/selenium-webdriver": "^3.0.0",
"blocking-proxy": "^1.0.0",
+ "browserstack": "^1.5.1",
"chalk": "^1.1.3",
"glob": "^7.0.3",
"jasmine": "2.8.0",
@@ -7606,22 +7620,10 @@
"saucelabs": "^1.5.0",
"selenium-webdriver": "3.6.0",
"source-map-support": "~0.4.0",
- "webdriver-js-extender": "^1.0.0",
+ "webdriver-js-extender": "2.1.0",
"webdriver-manager": "^12.0.6"
},
"dependencies": {
- "@types/node": {
- "version": "6.14.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-6.14.2.tgz",
- "integrity": "sha512-JWB3xaVfsfnFY8Ofc9rTB/op0fqqTSqy4vBcVk1LuRJvta7KTX+D//fCkiTMeLGhdr2EbFZzQjC97gvmPilk9Q==",
- "dev": true
- },
- "adm-zip": {
- "version": "0.4.13",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz",
- "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==",
- "dev": true
- },
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
@@ -9992,50 +9994,13 @@
}
},
"webdriver-js-extender": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz",
- "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz",
+ "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==",
"dev": true,
"requires": {
- "@types/selenium-webdriver": "^2.53.35",
- "selenium-webdriver": "^2.53.2"
- },
- "dependencies": {
- "sax": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz",
- "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=",
- "dev": true
- },
- "selenium-webdriver": {
- "version": "2.53.3",
- "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz",
- "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=",
- "dev": true,
- "requires": {
- "adm-zip": "0.4.4",
- "rimraf": "^2.2.8",
- "tmp": "0.0.24",
- "ws": "^1.0.1",
- "xml2js": "0.4.4"
- }
- },
- "tmp": {
- "version": "0.0.24",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz",
- "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=",
- "dev": true
- },
- "xml2js": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz",
- "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=",
- "dev": true,
- "requires": {
- "sax": "0.6.x",
- "xmlbuilder": ">=1.0.0"
- }
- }
+ "@types/selenium-webdriver": "^3.0.0",
+ "selenium-webdriver": "^3.0.1"
}
},
"webpack": {
diff --git a/src/app/app.component.css b/src/app/app.component.css
index 588b5e9..03d64d3 100644
--- a/src/app/app.component.css
+++ b/src/app/app.component.css
@@ -1,12 +1,11 @@
-
-
-:host {
+.wrapper {
/* height: 100%; */
display: flex;
- flex-direction: column;
+ flex-direction: row;
+ align-items: stretch;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
-}
\ No newline at end of file
+}
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 4f4d8dd..3dd2176 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -1,2 +1,4 @@
-
-
+
\ No newline at end of file
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 63658c9..3118c87 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -4,17 +4,42 @@ import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
import { SidebarComponent } from './components/l2/sidebar/sidebar.component';
+import { TextFieldComponent } from './components/l1/text-field/text-field.component';
+import { ButtonComponent } from './components/l1/button/button.component';
+import { CommandPromptComponent } from './components/l2/content/command-prompt/command-prompt.component';
+import { ContentComponent } from './components/l2/content/content.component';
+import { DomOpsService } from './services/dom/dom-ops.service';
+import { JsonReaderService } from './services/io/json-reader.service';
+import { PrimaryContainerComponent } from './components/l2/content/primary-container/primary-container.component';
+import { ModalComponent } from './components/l2/content/modal/modal.component';
+import { MessageComponent } from './components/l2/content/primary-container/message/message.component';
+import { WidgetComponent } from './components/l2/content/primary-container/widget/widget.component';
+import { CardComponent } from './components/l2/content/primary-container/card/card.component';
+import { RecastOpsService } from './services/recast/recast-ops.service';
+import { GithubOpsService } from './services/github/github-ops.service';
+import { PersistenceOpsService } from './services/io/persistence-ops.service';
+import { IntentBoxComponent } from './components/l2/content/primary-container/intent-box/intent-box.component';
@NgModule({
declarations: [
AppComponent,
- SidebarComponent
+ SidebarComponent,
+ TextFieldComponent,
+ ButtonComponent,
+ CommandPromptComponent,
+ ContentComponent,
+ PrimaryContainerComponent,
+ ModalComponent,
+ MessageComponent,
+ WidgetComponent,
+ CardComponent,
+ IntentBoxComponent
],
imports: [
BrowserModule,
FormsModule
],
- providers: [],
+ providers: [DomOpsService, JsonReaderService, RecastOpsService, GithubOpsService, PersistenceOpsService],
bootstrap: [AppComponent]
})
export class AppModule { }
diff --git a/src/app/components/l1/button/button.component.html b/src/app/components/l1/button/button.component.html
new file mode 100644
index 0000000..bed565a
--- /dev/null
+++ b/src/app/components/l1/button/button.component.html
@@ -0,0 +1,3 @@
+
+ button works!
+
diff --git a/src/app/components/l1/button/button.component.scss b/src/app/components/l1/button/button.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/l1/button/button.component.ts b/src/app/components/l1/button/button.component.ts
new file mode 100644
index 0000000..9b8f53b
--- /dev/null
+++ b/src/app/components/l1/button/button.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-button',
+ templateUrl: './button.component.html',
+ styleUrls: ['./button.component.scss']
+})
+export class ButtonComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+}
diff --git a/src/app/components/l1/text-field/text-field.component.html b/src/app/components/l1/text-field/text-field.component.html
new file mode 100644
index 0000000..c9db7f6
--- /dev/null
+++ b/src/app/components/l1/text-field/text-field.component.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/components/l1/text-field/text-field.component.scss b/src/app/components/l1/text-field/text-field.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/l1/text-field/text-field.component.ts b/src/app/components/l1/text-field/text-field.component.ts
new file mode 100644
index 0000000..b6e1adf
--- /dev/null
+++ b/src/app/components/l1/text-field/text-field.component.ts
@@ -0,0 +1,25 @@
+import { Component, OnInit, Input } from '@angular/core';
+
+@Component({
+ selector: 'app-text-field',
+ templateUrl: './text-field.component.html',
+ styleUrls: ['./text-field.component.scss']
+})
+export class TextFieldComponent implements OnInit {
+
+ @Input() textFieldId: String;
+ @Input() placeHolderText: String;
+ @Input() disabled: boolean;
+ @Input() maxLength: String;
+ @Input() pattern: String;
+ @Input() readOnly: boolean;
+ @Input() type: String;
+ @Input() value: String;
+ @Input() classes: String;
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+}
diff --git a/src/app/components/l2/content/command-prompt/command-prompt.component.html b/src/app/components/l2/content/command-prompt/command-prompt.component.html
new file mode 100644
index 0000000..c761fb3
--- /dev/null
+++ b/src/app/components/l2/content/command-prompt/command-prompt.component.html
@@ -0,0 +1,30 @@
+
\ No newline at end of file
diff --git a/src/app/components/l2/content/command-prompt/command-prompt.component.scss b/src/app/components/l2/content/command-prompt/command-prompt.component.scss
new file mode 100644
index 0000000..5997f91
--- /dev/null
+++ b/src/app/components/l2/content/command-prompt/command-prompt.component.scss
@@ -0,0 +1,441 @@
+@import "./src/sass/_variables.scss";
+
+:host {
+ height: 100%;
+}
+
+a,
+a:hover,
+a:focus {
+ color: inherit;
+ text-decoration: none;
+ transition: all 0.3s;
+}
+
+.navbar {
+ padding: 15px 10px;
+ background: #fff;
+ border: none;
+ border-radius: 0 5px 5px 0;
+ margin-bottom: 40px;
+ box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.navbar-btn {
+ box-shadow: none;
+ outline: none !important;
+ border: none;
+}
+
+.line {
+ width: 100%;
+ height: 1px;
+ border-bottom: 1px dashed #ddd;
+ margin: 20px 0;
+}
+
+i,
+span {
+ display: inline-block;
+}
+
+/* ---------------------------------------------------
+ SIDEBAR STYLE
+----------------------------------------------------- */
+
+.wrapper {
+ display: flex;
+ align-items: stretch;
+ height: 100%;
+}
+
+#sidebar {
+ min-width: 250px;
+ max-width: 250px;
+ background: $theme-supplementer;
+ color: $themeColor-Dark;
+ transition: all 0.3s;
+}
+
+#sidebar.active {
+ min-width: 80px;
+ max-width: 80px;
+ text-align: center;
+}
+
+#sidebar.active .sidebar-header h3,
+#sidebar.active .CTAs {
+ display: none;
+}
+
+.sidebar-header h3 {
+ display: inline;
+ padding-left: 0.6em;
+ vertical-align: middle;
+}
+
+#sidebar.active .sidebar-header strong {
+ display: block;
+}
+
+#sidebar ul li a {
+ text-align: left;
+}
+
+#sidebar.active ul li a {
+ padding: 20px 10px;
+ text-align: center;
+ font-size: 0.85em;
+}
+
+#sidebar.active ul li a i {
+ margin-right: 0;
+ display: block;
+ font-size: 1.8em;
+ margin-bottom: 5px;
+}
+
+#sidebar.active ul ul a {
+ padding: 10px !important;
+}
+
+#sidebar.active .dropdown-toggle::after {
+ top: auto;
+ bottom: 10px;
+ right: 50%;
+ -webkit-transform: translateX(50%);
+ -ms-transform: translateX(50%);
+ transform: translateX(50%);
+}
+
+#sidebar .sidebar-header {
+ padding: 20px;
+ background:$themeColor-Dark;
+}
+
+#sidebar .sidebar-header strong {
+ display: none;
+ font-size: 1.8em;
+}
+
+#sidebar ul.components {
+ padding: 20px 0;
+ border-bottom: 3px solid $themeColor-Dark;
+}
+
+#sidebar ul li a {
+ padding: 10px;
+ font-size: 1.1em;
+ display: block;
+}
+
+#sidebar ul li a:hover {
+ color: #7386D5;
+ background: #fff;
+}
+
+#sidebar ul li a i {
+ margin-right: 10px;
+}
+
+#sidebar ul li.active>a,
+a[aria-expanded="true"] {
+ color: $theme-supplementer;
+ background:$themeColor-Dark;
+}
+
+a[data-toggle="collapse"] {
+ position: relative;
+}
+
+.dropdown-toggle::after {
+ display: block;
+ position: absolute;
+ top: 50%;
+ right: 20px;
+ transform: translateY(-50%);
+}
+
+ul ul a {
+ font-size: 0.9em !important;
+ padding-left: 30px !important;
+ background: white;
+ font-weight: bolder;
+}
+
+ul.CTAs {
+ padding: 20px;
+}
+
+ul.CTAs a {
+ text-align: center;
+ font-size: 0.9em !important;
+ display: block;
+ border-radius: 5px;
+ margin-bottom: 5px;
+}
+
+a.download {
+ background: #fff;
+ color: #7386D5;
+}
+
+a.article,
+a.article:hover {
+ background: #6d7fcc !important;
+ color: #fff !important;
+}
+
+/* ---------------------------------------------------
+ CONTENT STYLE
+----------------------------------------------------- */
+
+#content {
+ width: 100%;
+ padding: 20px;
+ min-height: 100vh;
+ transition: all 0.3s;
+}
+
+/* ---------------------------------------------------
+ MEDIAQUERIES
+----------------------------------------------------- */
+
+@media (max-width: 768px) {
+ #sidebar {
+ min-width: 80px;
+ max-width: 80px;
+ text-align: center;
+ margin-left: -80px !important;
+ }
+ .dropdown-toggle::after {
+ top: auto;
+ bottom: 10px;
+ right: 50%;
+ -webkit-transform: translateX(50%);
+ -ms-transform: translateX(50%);
+ transform: translateX(50%);
+ }
+ #sidebar.active {
+ margin-left: 0 !important;
+ }
+ #sidebar .sidebar-header h3,
+ #sidebar .CTAs {
+ display: none;
+ }
+ #sidebar .sidebar-header strong {
+ display: block;
+ }
+ #sidebar ul li a {
+ padding: 20px 10px;
+ }
+ #sidebar ul li a span {
+ font-size: 0.85em;
+ }
+ #sidebar ul li a i {
+ margin-right: 0;
+ display: block;
+ }
+ #sidebar ul ul a {
+ padding: 10px !important;
+ }
+ #sidebar ul li a i {
+ font-size: 1.3em;
+ }
+ #sidebar {
+ margin-left: 0;
+ }
+ #sidebarCollapse span {
+ display: none;
+ }
+ .text-muted {
+ color: #bcb !important;
+ }
+}
+
+@media(min-width: 576px) {
+ .card-group>.card:first-child {
+ border-top-right-radius: .25rem;
+ border-bottom-right-radius: .25rem;
+ }
+ .card-group>.card:not(:first-child):not(:last-child):not(:only-child) {
+ border-radius: .25rem;
+ }
+ .card-group>.card:last-child {
+ border-top-left-radius: .25rem;
+ border-bottom-left-radius: .25rem;
+ }
+}
+/* -------------------------------------------------
+ADDITIONS
+--------------------------------------------------*/
+.hide {
+ display: none;
+}
+
+.prompt {
+ display: flex;
+ width: 2em;
+ border-right: 1px solid #c99034;
+ background-color: #f5d38b;
+ width: 4%;
+ margin-bottom: 40px;
+ border-radius: 4px 0 0 4px;
+}
+
+.promptext {
+ animation:blinkingText 0.8s infinite;
+ color: #975f04;
+ text-align: center;
+ line-height: 2em;
+ font: 1.5em bolder;
+ margin: auto;
+}
+
+.good {
+ animation: anim .3s ease-in-out;
+}
+
+.repoLink {
+ color: #000;
+ font-weight: bolder;
+ text-decoration: underline;
+}
+
+.headerprompt {
+ display: flex;
+ width: 100%;
+}
+
+.logotext {
+ color: $theme-supplementer;
+}
+
+nav div.collapse li a.nav-link i.far {
+ color: $theme-supplementer;
+ font-size: 1.8em;
+ padding: 0.2em;
+}
+
+#loading-img {
+ background: url(http://preloaders.net/preloaders/360/Velocity.gif) center center no-repeat;
+ height: 100%;
+ z-index: 20;
+}
+
+.overlay {
+ background: #e9e9e9;
+ display: none;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ opacity: 0.5;
+}
+
+.loader {
+ border: 0px solid #f3f3f3;
+ border-radius: 50%;
+ border-top: 2px solid #3498db;
+ border-right: 2px solid #3498db;
+ width: 20px;
+ height: 20px;
+ -webkit-animation: spin 2s linear infinite; /* Safari */
+ animation: spin 2s linear infinite;
+ }
+.card:not(.widget) {
+ background: linear-gradient(to right, white, lightblue)
+}
+.light-red {
+ // background:linear-gradient(white, lightblue);
+ background: linear-gradient(to right, white, #dfc99a)
+}
+
+// f3d98c
+.featureRequest {
+ background-color : #007bff;
+ color: white;
+ font-size: 1.5em;
+ padding: 10px 20px;
+ border-radius: 30px;
+}
+
+ #featureRequest {
+ position: fixed;
+ bottom: 2em;
+ right: 2.5em;
+ }
+
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+}
+
+@keyframes anim {
+ 0% {
+ display: none;
+ opacity: 0;
+ }
+ 1% {
+ display: block;
+ opacity: 0;
+ transform: scale(0);
+ }
+ 100% {
+ opacity: 1;
+ transform: scale(1);
+ }
+}
+@keyframes blinkingText {
+ 0%{ color: #000; }
+ 49%{ color: transparent; }
+ 50%{ color: transparent; }
+ 99%{ color:transparent; }
+ 100%{ color: #000; }
+}
+
+/* --------------------------------------------------
+ OVERRIDES
+ --------------------------------------------------*/
+ .btn:not(.featureRequest) {
+ background-color: $theme-supplementer;
+ color: $themeColor-Dark
+ }
+
+ #header .navbar {
+ width: 96%;
+ }
+
+ .navbar-form {
+ width: 88%;
+ }
+
+ .form-control {
+ padding: .6rem 1em;
+ }
+
+ .container-fluid {
+ padding-left: 0.3em;
+ }
+
+ .card-group {
+ flex-direction:column;
+ }
+
+ #command.form-control {
+ width: 87%;
+ }
+
+ .ml-auto {
+ margin-left: 0!important;
+ }
+
+ .btn-info {
+ border-color: orange;
+ }
+
+ .btn-info:hover {
+ border-color: orange;
+ opacity: 1
+}
\ No newline at end of file
diff --git a/src/app/components/l2/content/command-prompt/command-prompt.component.ts b/src/app/components/l2/content/command-prompt/command-prompt.component.ts
new file mode 100644
index 0000000..c49992f
--- /dev/null
+++ b/src/app/components/l2/content/command-prompt/command-prompt.component.ts
@@ -0,0 +1,39 @@
+import { Component, OnInit } from '@angular/core';
+import { RecastOpsService } from 'src/app/services/recast/recast-ops.service';
+
+import * as $ from 'node_modules/jquery/dist/jquery';
+import { DomOpsService } from 'src/app/services/dom/dom-ops.service';
+
+@Component({
+ selector: 'app-command-prompt',
+ templateUrl: './command-prompt.component.html',
+ styleUrls: ['./command-prompt.component.scss']
+})
+export class CommandPromptComponent implements OnInit {
+
+ constructor(private recastOpsService: RecastOpsService, private domOpsService: DomOpsService) { }
+
+ ngOnInit() { }
+
+ toggleClass(event: MouseEvent) {
+ $(event.target).toggleClass('fas');
+ }
+
+ initiateDomOpsOnEnter(event: any) {
+ const code = (event.keyCode ? event.keyCode : event.which);
+ if (code === 13) {
+ $('#widgets').children().addClass('hide');
+ $('#successAlert').addClass('hide');
+ $('#dangerAlert').addClass('hide');
+ $('#intentBox').addClass('hide');
+ const command = event.target.value;
+ if (command) {
+ const text = { text: command };
+ this.recastOpsService.getAndCallProcessIntent(command, text);
+ } else {
+ // this.domOpsService.showEmptyCommandMessage('Please type some relevant words in the command box.');
+ }
+ }
+ }
+
+}
diff --git a/src/app/components/l2/content/content.component.html b/src/app/components/l2/content/content.component.html
new file mode 100644
index 0000000..276f080
--- /dev/null
+++ b/src/app/components/l2/content/content.component.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/components/l2/content/content.component.scss b/src/app/components/l2/content/content.component.scss
new file mode 100644
index 0000000..9911610
--- /dev/null
+++ b/src/app/components/l2/content/content.component.scss
@@ -0,0 +1,11 @@
+:host {
+ padding: 20px;
+ width: 100%;
+}
+
+#content {
+ // width: 100%;
+ // padding: 20px;
+ min-height: 100vh;
+ transition: all 0.3s;
+}
\ No newline at end of file
diff --git a/src/app/components/l2/content/content.component.ts b/src/app/components/l2/content/content.component.ts
new file mode 100644
index 0000000..7dd910c
--- /dev/null
+++ b/src/app/components/l2/content/content.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-content',
+ templateUrl: './content.component.html',
+ styleUrls: ['./content.component.scss']
+})
+export class ContentComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+}
diff --git a/src/app/components/l2/content/modal/modal.component.html b/src/app/components/l2/content/modal/modal.component.html
new file mode 100644
index 0000000..0b81c38
--- /dev/null
+++ b/src/app/components/l2/content/modal/modal.component.html
@@ -0,0 +1,3 @@
+
+ modal works!
+
diff --git a/src/app/components/l2/content/modal/modal.component.scss b/src/app/components/l2/content/modal/modal.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/l2/sidebar/sidebar.component.spec.ts b/src/app/components/l2/content/modal/modal.component.spec.ts
similarity index 56%
rename from src/app/components/l2/sidebar/sidebar.component.spec.ts
rename to src/app/components/l2/content/modal/modal.component.spec.ts
index f29709f..fc32a90 100644
--- a/src/app/components/l2/sidebar/sidebar.component.spec.ts
+++ b/src/app/components/l2/content/modal/modal.component.spec.ts
@@ -1,20 +1,20 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
-import { SidebarComponent } from './sidebar.component';
+import { ModalComponent } from './modal.component';
-describe('SidebarComponent', () => {
- let component: SidebarComponent;
- let fixture: ComponentFixture;
+describe('ModalComponent', () => {
+ let component: ModalComponent;
+ let fixture: ComponentFixture;
beforeEach(async(() => {
TestBed.configureTestingModule({
- declarations: [ SidebarComponent ]
+ declarations: [ ModalComponent ]
})
.compileComponents();
}));
beforeEach(() => {
- fixture = TestBed.createComponent(SidebarComponent);
+ fixture = TestBed.createComponent(ModalComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/src/app/components/l2/content/modal/modal.component.ts b/src/app/components/l2/content/modal/modal.component.ts
new file mode 100644
index 0000000..33ef435
--- /dev/null
+++ b/src/app/components/l2/content/modal/modal.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-modal',
+ templateUrl: './modal.component.html',
+ styleUrls: ['./modal.component.scss']
+})
+export class ModalComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+}
diff --git a/src/app/components/l2/content/primary-container/card/card.component.html b/src/app/components/l2/content/primary-container/card/card.component.html
new file mode 100644
index 0000000..0f9abc5
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/card/card.component.html
@@ -0,0 +1,3 @@
+
+ card works!
+
diff --git a/src/app/components/l2/content/primary-container/card/card.component.scss b/src/app/components/l2/content/primary-container/card/card.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/l2/content/primary-container/card/card.component.spec.ts b/src/app/components/l2/content/primary-container/card/card.component.spec.ts
new file mode 100644
index 0000000..e141708
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/card/card.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { CardComponent } from './card.component';
+
+describe('CardComponent', () => {
+ let component: CardComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ CardComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(CardComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/components/l2/content/primary-container/card/card.component.ts b/src/app/components/l2/content/primary-container/card/card.component.ts
new file mode 100644
index 0000000..ae25273
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/card/card.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-card',
+ templateUrl: './card.component.html',
+ styleUrls: ['./card.component.scss']
+})
+export class CardComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+}
diff --git a/src/app/components/l2/content/primary-container/intent-box/intent-box.component.html b/src/app/components/l2/content/primary-container/intent-box/intent-box.component.html
new file mode 100644
index 0000000..303058e
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/intent-box/intent-box.component.html
@@ -0,0 +1,3 @@
+
+ intent-box works!
+
diff --git a/src/app/components/l2/content/primary-container/intent-box/intent-box.component.scss b/src/app/components/l2/content/primary-container/intent-box/intent-box.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/l2/content/primary-container/intent-box/intent-box.component.ts b/src/app/components/l2/content/primary-container/intent-box/intent-box.component.ts
new file mode 100644
index 0000000..7e788e5
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/intent-box/intent-box.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-intent-box',
+ templateUrl: './intent-box.component.html',
+ styleUrls: ['./intent-box.component.scss']
+})
+export class IntentBoxComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+}
diff --git a/src/app/components/l2/content/primary-container/message/message.component.html b/src/app/components/l2/content/primary-container/message/message.component.html
new file mode 100644
index 0000000..9bee74c
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/message/message.component.html
@@ -0,0 +1,3 @@
+
+ message works!
+
diff --git a/src/app/components/l2/content/primary-container/message/message.component.scss b/src/app/components/l2/content/primary-container/message/message.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/l2/content/primary-container/message/message.component.spec.ts b/src/app/components/l2/content/primary-container/message/message.component.spec.ts
new file mode 100644
index 0000000..e860163
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/message/message.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { MessageComponent } from './message.component';
+
+describe('MessageComponent', () => {
+ let component: MessageComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ MessageComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(MessageComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/components/l2/content/primary-container/message/message.component.ts b/src/app/components/l2/content/primary-container/message/message.component.ts
new file mode 100644
index 0000000..e433839
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/message/message.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-message',
+ templateUrl: './message.component.html',
+ styleUrls: ['./message.component.scss']
+})
+export class MessageComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+}
diff --git a/src/app/components/l2/content/primary-container/primary-container.component.html b/src/app/components/l2/content/primary-container/primary-container.component.html
new file mode 100644
index 0000000..aafcf5e
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/primary-container.component.html
@@ -0,0 +1,3 @@
+
+ primary-container works!
+
diff --git a/src/app/components/l2/content/primary-container/primary-container.component.scss b/src/app/components/l2/content/primary-container/primary-container.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/l2/content/primary-container/primary-container.component.spec.ts b/src/app/components/l2/content/primary-container/primary-container.component.spec.ts
new file mode 100644
index 0000000..d939316
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/primary-container.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { PrimaryContainerComponent } from './primary-container.component';
+
+describe('PrimaryContainerComponent', () => {
+ let component: PrimaryContainerComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ PrimaryContainerComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(PrimaryContainerComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/components/l2/content/primary-container/primary-container.component.ts b/src/app/components/l2/content/primary-container/primary-container.component.ts
new file mode 100644
index 0000000..1bf2bcf
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/primary-container.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-primary-container',
+ templateUrl: './primary-container.component.html',
+ styleUrls: ['./primary-container.component.scss']
+})
+export class PrimaryContainerComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+}
diff --git a/src/app/components/l2/content/primary-container/widget/widget.component.html b/src/app/components/l2/content/primary-container/widget/widget.component.html
new file mode 100644
index 0000000..fc3bdd2
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/widget/widget.component.html
@@ -0,0 +1,3 @@
+
+ widget works!
+
diff --git a/src/app/components/l2/content/primary-container/widget/widget.component.scss b/src/app/components/l2/content/primary-container/widget/widget.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/components/l2/content/primary-container/widget/widget.component.spec.ts b/src/app/components/l2/content/primary-container/widget/widget.component.spec.ts
new file mode 100644
index 0000000..f6b4cd0
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/widget/widget.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { WidgetComponent } from './widget.component';
+
+describe('WidgetComponent', () => {
+ let component: WidgetComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ WidgetComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(WidgetComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/components/l2/content/primary-container/widget/widget.component.ts b/src/app/components/l2/content/primary-container/widget/widget.component.ts
new file mode 100644
index 0000000..06012ec
--- /dev/null
+++ b/src/app/components/l2/content/primary-container/widget/widget.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-widget',
+ templateUrl: './widget.component.html',
+ styleUrls: ['./widget.component.scss']
+})
+export class WidgetComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit() {
+ }
+
+}
diff --git a/src/app/components/l2/sidebar/sidebar.component.html b/src/app/components/l2/sidebar/sidebar.component.html
index e820978..9d03ee9 100644
--- a/src/app/components/l2/sidebar/sidebar.component.html
+++ b/src/app/components/l2/sidebar/sidebar.component.html
@@ -1,64 +1,63 @@
-
-
+
diff --git a/src/app/components/l2/sidebar/sidebar.component.scss b/src/app/components/l2/sidebar/sidebar.component.scss
index 83ee2ab..d902008 100644
--- a/src/app/components/l2/sidebar/sidebar.component.scss
+++ b/src/app/components/l2/sidebar/sidebar.component.scss
@@ -42,18 +42,13 @@ span {
/* ---------------------------------------------------
SIDEBAR STYLE
----------------------------------------------------- */
-
-.wrapper {
- display: flex;
- align-items: stretch;
-}
-
#sidebar {
min-width: 250px;
max-width: 250px;
background: $theme-supplementer;
color: $themeColor-Dark;
transition: all 0.3s;
+ height: 100%;
}
#sidebar.active {
diff --git a/src/app/configuration/config.js b/src/app/configuration/config.js
new file mode 100644
index 0000000..185187c
--- /dev/null
+++ b/src/app/configuration/config.js
@@ -0,0 +1,118 @@
+module.exports = {
+ gitToken: '96ead73c54cbbf023a73ee57af145b205d460851',
+ recasttoken: '26021d055040a9d9f1ad48476efab4a0',
+ intentSlugToOperations: {
+ createrepo: {
+ requestMethod: 'post',
+ intentMessage: 'Create a Repository in Github',
+ getDataOperation: 'getCreateRepoJson',
+ githubOperation: 'createRepository',
+ showWidgetOperation: 'showCreateRepoWidget',
+ populateDataOperation: 'populateCreateRepoData',
+ successMessage: 'Repository Added!',
+ cardMsg: 'Requested Repository has been added and is available at ',
+ cardDataUrl: 'html_url',
+ cardDataName: 'name',
+ action: { type: 'ADD_REPO' },
+ response_action: { type: 'ADD_REPO_RESPONSE' },
+ },
+ createissue: {
+ requestMethod: 'post',
+ intentMessage: 'Raise an issue in Github',
+ getDataOperation: 'getCreateIssueJson',
+ githubOperation: 'createIssue',
+ showWidgetOperation: 'showCreateIssueWidget',
+ populateDataOperation: 'populateCreateIssueData',
+ successMessage: 'Issue Created!',
+ cardMsg: 'Issue Created as requested, issue details available at ',
+ cardDataUrl: 'html_url',
+ cardDataName: 'title',
+ action: { type: 'ADD_ISSUE' },
+ response_action: { type: 'ADD_ISSUE_RESPONSE' },
+ },
+ closeissue: {
+ requestMethod: 'post',
+ intentMessage: 'Close an issue in Github',
+ getDataOperation: 'getCloseIssueJson',
+ githubOperation: 'closeIssue',
+ showWidgetOperation: 'showCloseIssueWidget',
+ populateDataOperation: 'populateCloseIssueData',
+ successMessage: 'Issue Closed!',
+ cardMsg: 'Issue Closed as requested, closed issue available at: ',
+ cardDataUrl: 'html_url',
+ cardDataName: 'title',
+ action: { type: 'CLOSE_ISSUE' },
+ response_action: { type: 'CLOSE_ISSUE_RESPONSE' },
+ },
+ addissuecomment: {
+ requestMethod: 'post',
+ intentMessage: 'Add a comment on an issue in Github',
+ getDataOperation: 'getAddCommentJson',
+ githubOperation: 'addIssueComment',
+ showWidgetOperation: 'showAddCommentWidget',
+ populateDataOperation: 'populateAddCommentData',
+ successMessage: 'Comment Added!',
+ cardMsg: 'Comment Added as Requested, view here: ',
+ cardDataUrl: 'html_url',
+ cardDataName: 'title',
+ action: { type: 'ADD_COMMENT' },
+ response_action: { type: 'ADD_ISSUE_COMMENT_RESPONSE' },
+ },
+ displaylastcomment: {
+ requestMethod: 'get',
+ intentMessage: 'Display last comment of an issue in Github',
+ getDataOperation: 'getDisplayCommentJson',
+ githubOperation: 'displayLastComment',
+ showWidgetOperation: 'showDisplayCommentWidget',
+ populateDataOperation: 'populateDisplayCommentData',
+ successMessage: 'Comment Retrieved!',
+ cardMsg: 'Please find requested comment below: ',
+ cardDataUrl: 'html_url',
+ cardDataName: 'title',
+ action: { type: 'SHOW_LAST_COMMENT' },
+ response_action: { type: 'SHOW_LAST_COMMENT_RESPONSE' },
+ },
+ addcollab: {
+ requestMethod: 'post',
+ intentMessage: 'Add a collaborator',
+ getDataOperation: 'getAddCollaboratorJson',
+ githubOperation: 'addCollaborator',
+ showWidgetOperation: 'showAddCollaboratorWidget',
+ populateDataOperation: 'populateAddCollaboratorData',
+ successMessage: 'Collaborator Added!',
+ cardMsg: 'Collaborator added, details available at ',
+ cardDataUrl: 'html_url',
+ cardDataName: 'invitee,login',
+ action: { type: 'ADD_COLLAB' },
+ response_action: { type: 'ADD_COLLAB_RESPONSE' },
+ },
+ viewrepos: {
+ requestMethod: 'get',
+ intentMessage: 'View Repositories for current user',
+ getDataOperation: 'getViewRepositoryJson',
+ githubOperation: 'viewRepositories',
+ showWidgetOperation: 'showViewRepoWidget',
+ populateDataOperation: 'populateViewRepoData',
+ successMessage: 'Showing repositories',
+ cardMsg: 'Repository Details available below: ',
+ cardDataUrl: 'html_url',
+ cardDataName: 'invitee,login',
+ action: { type: 'VIEW_REPO' },
+ response_action: { type: 'VIEW_REPO_RESPONSE' },
+ },
+ resethistory: {
+ requestMethod: 'purge',
+ intentMessage: 'Clear all Operations History',
+ successMessage: 'Purged!',
+ cardMsg: 'Purged history of all Operations and Commands!',
+ action: { type: 'CLEAR_HISTORY' },
+ response_action: { type: 'CLEAR_HISTORY_RESPONSE' },
+ },
+ addquery: {
+ action: { type: 'ADD_QUERY' },
+ },
+ },
+ constants: {
+ hiddenIntentFieldId: 'intentHidden',
+ },
+};
diff --git a/src/app/services/dom/dom-ops.service.spec.ts b/src/app/services/dom/dom-ops.service.spec.ts
new file mode 100644
index 0000000..ebdcc39
--- /dev/null
+++ b/src/app/services/dom/dom-ops.service.spec.ts
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { DomOpsService } from './dom-ops.service';
+
+describe('DomOpsService', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ providers: [DomOpsService]
+ });
+ });
+
+ it('should be created', inject([DomOpsService], (service: DomOpsService) => {
+ expect(service).toBeTruthy();
+ }));
+});
diff --git a/src/app/services/dom/dom-ops.service.ts b/src/app/services/dom/dom-ops.service.ts
new file mode 100644
index 0000000..151f9ca
--- /dev/null
+++ b/src/app/services/dom/dom-ops.service.ts
@@ -0,0 +1,507 @@
+import { Injectable } from '@angular/core';
+import * as $ from 'node_modules/jquery/dist/jquery';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class DomOpsService {
+
+ createRepoWidgetCreated: boolean = false;
+ commandCardCounter: number = 1;
+ widgets = $("#widgets");
+
+ constructor() {
+ // this.map = {
+ // addcollab,
+ // addissuecomment,z
+ // closeissue,
+ // createissue,
+ // createrepo,
+ // displaylastcomment,
+ // viewrepos,
+ // };
+ }
+
+ // showWidget(intent) {
+ // let widget = document.getElementById(intent);
+ // if (!widget) {
+ // widget = this.getWidget(intent);
+ // this.widgets.prepend(widget);
+ // }
+ // if (!this.isVisible(widget)) {
+ // widget.classList.remove("hide");
+ // $("#underWidgetLine").removeClass("hide");
+ // }
+ // }
+
+ // getWidget(intent) {
+ // const template = document.createElement("template");
+ // template.innerHTML = this.map[intent];
+ // let widget = template.content.firstChild;
+ // return widget;
+ // }
+
+ // displayIntentBox(intent) {
+ // const intentBox = document.getElementById("intentBox");
+ // if (!this.isVisible(intentBox)) {
+ // intentBox.classList.remove("hide");
+ // }
+ // $("#intentName").text(`${$config.intentSlugToOperations[intent].intentMessage} [slug: ${intent}].`);
+ // }
+
+ // showEmptyCommandMessage(message) {
+ // $("#randomModal").text(message);
+ // $("#emptyCommandMsgDisplayer").click();
+ // }
+
+ // populateRecastData(widgetName, recastResponse) {
+ // // var requestMethod = $config.intentSlugToOperations[widgetName]['requestMethod'];
+ // const operation = $config.intentSlugToOperations[widgetName].populateDataOperation;
+ // if (typeof this[operation] === "function") {
+ // this[operation](recastResponse);
+ // }
+ // }
+
+ // populateCreateRepoData(recastResponse) {
+ // const repoNameTextField = document.getElementById("repositoryName");
+ // if (repoNameTextField && recastResponse && recastResponse.entities["git-repository"] && recastResponse.entities["git-repository"].length > 0
+ // && recastResponse.entities["git-repository"]["0"].value) {
+ // const repoName = recastResponse.entities["git-repository"]["0"].value;
+ // repoNameTextField.value = repoName;
+ // }
+ // }
+
+ // populateCreateIssueData(recastResponse) {
+ // const issueTitleTextField = document.getElementById("issueTitle");
+ // const issueRepositoryTextField = document.getElementById("issueRepository");
+ // if (issueTitleTextField && recastResponse && recastResponse.entities.issue_title && recastResponse.entities.issue_title.length > 0
+ // && recastResponse.entities.issue_title["0"].value) {
+ // const issueTitle = recastResponse.entities.issue_title["0"].value;
+ // issueTitleTextField.value = issueTitle;
+ // }
+ // if (issueRepositoryTextField && recastResponse && recastResponse.entities["git-repository"] && recastResponse.entities["git-repository"].length > 0
+ // && recastResponse.entities["git-repository"]["0"].value) {
+ // const repoName = recastResponse.entities["git-repository"]["0"].value;
+ // issueRepositoryTextField.value = repoName;
+ // }
+ // }
+
+ // populateCloseIssueData(recastResponse) {
+ // const issueNumberTextField = document.getElementById("issueNumerToClose");
+ // const issueRepositoryTextField = document.getElementById("repoForIssueClose");
+ // if (issueNumberTextField && recastResponse && recastResponse.entities.issue_id && recastResponse.entities.issue_id.length > 0
+ // && recastResponse.entities.issue_id["0"].value) {
+ // const issueNumber = recastResponse.entities.issue_id["0"].value;
+ // issueNumberTextField.value = issueNumber;
+ // }
+ // if (issueRepositoryTextField && recastResponse && recastResponse.entities["git-repository"] && recastResponse.entities["git-repository"].length > 0
+ // && recastResponse.entities["git-repository"]["0"].value) {
+ // const repoName = recastResponse.entities["git-repository"]["0"].value;
+ // issueRepositoryTextField.value = repoName;
+ // }
+ // }
+
+ // populateAddCollaboratorData(recastResponse) {
+ // const collaboratorNameTextField = document.getElementById("collaboratorName");
+ // const repoForCollabTextField = document.getElementById("repoForCollab");
+ // if (collaboratorNameTextField && recastResponse && recastResponse.entities.git_collaborator && recastResponse.entities.git_collaborator.length > 0
+ // && recastResponse.entities.git_collaborator["0"].value) {
+ // const collaboratorName = recastResponse.entities.git_collaborator["0"].value;
+ // collaboratorNameTextField.value = collaboratorName;
+ // }
+ // if (repoForCollabTextField && recastResponse && recastResponse.entities["git-repository"] && recastResponse.entities["git-repository"].length > 0
+ // && recastResponse.entities["git-repository"]["0"].value) {
+ // const repoName = recastResponse.entities["git-repository"]["0"].value;
+ // repoForCollabTextField.value = repoName;
+ // }
+ // }
+
+ // populateAddCommentData(recastResponse) {
+ // const repoForIssueCommentTextField = document.getElementById("repoForIssueComment");
+ // const issueNumberTextField = document.getElementById("issueNumber");
+ // const issueCommentTextArea = document.getElementById("issueComment");
+ // if (repoForIssueCommentTextField && recastResponse && recastResponse.entities["git-repository"] && recastResponse.entities["git-repository"].length > 0
+ // && recastResponse.entities["git-repository"]["0"].value) {
+ // const repoForIssueComment = recastResponse.entities["git-repository"]["0"].value;
+ // repoForIssueCommentTextField.value = repoForIssueComment;
+ // }
+ // if (issueNumberTextField && recastResponse && recastResponse.entities.issue_id && recastResponse.entities.issue_id.length > 0
+ // && recastResponse.entities.issue_id["0"].value) {
+ // const issueNumber = recastResponse.entities.issue_id["0"].value;
+ // issueNumberTextField.value = issueNumber;
+ // }
+ // if (issueCommentTextArea && recastResponse && recastResponse.entities.issue_comment && recastResponse.entities.issue_comment.length > 0
+ // && recastResponse.entities.issue_comment["0"].value) {
+ // const issueComment = recastResponse.entities.issue_comment["0"].value;
+ // issueCommentTextArea.value = issueComment;
+ // }
+ // }
+
+ // populateDisplayCommentData(recastResponse) {
+ // const issueNumberTextField = document.getElementById("issueNumberForCommentView");
+ // const issueRepositoryTextField = document.getElementById("repoForCommentView");
+ // if (issueNumberTextField && recastResponse && recastResponse.entities.issue_id && recastResponse.entities.issue_id.length > 0
+ // && recastResponse.entities.issue_id["0"].value) {
+ // const issueNumber = recastResponse.entities.issue_id["0"].value;
+ // issueNumberTextField.value = issueNumber;
+ // }
+ // if (issueRepositoryTextField && recastResponse && recastResponse.entities["git-repository"] && recastResponse.entities["git-repository"].length > 0
+ // && recastResponse.entities["git-repository"]["0"].value) {
+ // const repoName = recastResponse.entities["git-repository"]["0"].value;
+ // issueRepositoryTextField.value = repoName;
+ // }
+ // }
+
+ // isVisible(element) {
+ // return element ? !element.classList.contains("hide") : false;
+ // }
+
+ // getDataFromFormAsJSON() {
+ // let data = {};
+ // const intent = $(`#${$config.constants.hiddenIntentFieldId}`).val();
+ // const requestMethod = $config.intentSlugToOperations[intent].requestMethod;
+ // if (intent) {
+ // const operation = $config.intentSlugToOperations[intent].getDataOperation;
+ // if (typeof this[operation] === "function") {
+ // data = this[operation]();
+ // }
+ // }
+ // return data;
+ // }
+
+ // getCreateRepoJson() {
+ // const data = {};
+ // const request = {};
+ // if (this.isVisible(document.getElementById("createrepo"))) {
+ // request.name = document.getElementById("repositoryName").value;
+ // request.description = document.getElementById("description").value;
+ // request.homepage = document.getElementById("homePageURL").value;
+ // request.private = document.getElementById("privateRepoChk").checked;
+ // request.has_issues = document.getElementById("issuesChk").checked;
+ // request.has_wiki = document.getElementById("wikiChk").checked;
+ // }
+ // data.request = request;
+ // return data;
+ // }
+
+ // getCreateIssueJson() {
+ // const data = {};
+ // data.urlParams = {};
+ // const request = {};
+ // if (this.isVisible(document.getElementById("createissue"))) {
+ // request.title = document.getElementById("issueTitle").value;
+ // request.body = document.getElementById("description").value;
+ // request.assignees = document.getElementById("assignees").value ? document.getElementById("assignees").value.split(",") : [];
+ // request.labels = document.getElementById("labels").value ? document.getElementById("labels").value.split(",") : [];
+ // data.urlParams.repoName = document.getElementById("issueRepository").value;
+ // }
+ // data.request = request;
+ // return data;
+ // }
+
+ // getCloseIssueJson() {
+ // const data = {};
+ // data.urlParams = {};
+ // if (this.isVisible(document.getElementById("closeissue"))) {
+ // data.urlParams.issueId = document.getElementById("issueNumerToClose").value;
+ // data.urlParams.repoName = document.getElementById("repoForIssueClose").value;
+ // }
+ // return data;
+ // }
+
+ // getAddCollaboratorJson() {
+ // const data = {};
+ // data.urlParams = {};
+ // if (this.isVisible(document.getElementById("addcollab"))) {
+ // data.urlParams.collaborator = document.getElementById("collaboratorName").value;
+ // data.urlParams.repoName = document.getElementById("repoForCollab").value;
+ // }
+ // return data;
+ // }
+
+ // getAddCommentJson() {
+ // const data = {};
+ // data.urlParams = {};
+ // const request = {};
+ // if (this.isVisible(document.getElementById("addissuecomment"))) {
+ // request.body = document.getElementById("issueComment").value;
+ // data.urlParams.issueId = document.getElementById("issueNumber").value;
+ // data.urlParams.repoName = document.getElementById("repoForIssueComment").value;
+ // }
+ // data.request = request;
+ // return data;
+ // }
+
+ // getDisplayCommentJson() {
+ // const data = {};
+ // data.urlParams = {};
+ // if (this.isVisible(document.getElementById("displaylastcomment"))) {
+ // data.urlParams.issueId = document.getElementById("issueNumberForCommentView").value;
+ // data.urlParams.repoName = document.getElementById("repoForCommentView").value;
+ // }
+ // return data;
+ // }
+
+ // addGitOperationHistory(data) {
+ // const intent = data.intent;
+ // let requestMethod = "";
+ // if (intent) {
+ // requestMethod = $config.intentSlugToOperations[intent].requestMethod;
+ // }
+ // const conversations = document.getElementById("conversations");
+ // let table;
+ // let comment;
+ // // Create Elements
+ // const card = document.createElement("div");
+ // const cardBody = document.createElement("div");
+ // const cardTitle = document.createElement("h5");
+ // const closeAnchor = document.createElement("a");
+ // const closeHeader = document.createElement("h6");
+ // const cardText = document.createElement("p");
+ // const cardFooter = document.createElement("div");
+ // const textMuted = document.createElement("small");
+ // const underCardLine = document.createElement("div");
+
+
+ // // Add Attributes
+ // card.classList.add("card");
+ // cardBody.classList.add("card-body");
+ // cardTitle.classList.add("card-title");
+ // closeAnchor.classList.add("close");
+ // // closeAnchor.setAttribute('href', '#');
+ // cardText.classList.add("card-text");
+ // cardFooter.classList.add("card-footer");
+ // textMuted.classList.add("text-muted");
+ // underCardLine.classList.add("line");
+
+ // // Add content
+ // closeHeader.innerHTML = "x";
+
+ // const x = this.display_ct(0, textMuted);
+ // if (data.type === "command") {
+ // // Add content
+ // cardTitle.innerHTML = "You Said";
+ // cardText.innerHTML = data.command;
+ // card.classList.add("light-red");
+ // const repeat = document.createElement("a");
+ // repeat.classList.add("btn", "btn-info", "float-right");
+ // repeat.setAttribute("role", "button");
+ // repeat.setAttribute("href", "#");
+ // repeat.setAttribute("id", `btnRepeatCommand${data.insertionCounter}`);
+ // repeat.innerHTML = "Repeat";
+ // cardText.appendChild(repeat);
+ // } else if (data.type === "response") {
+ // // Add content
+ // cardTitle.innerHTML = "Server Responded As..";
+ // if (requestMethod == "post") {
+ // cardText.innerHTML = `${$config.intentSlugToOperations[intent].cardMsg}${this.getVariable(data, $config.intentSlugToOperations[intent].cardDataName)}`;
+ // } else if (requestMethod == "get") {
+ // cardText.innerHTML = $config.intentSlugToOperations[intent].cardMsg;
+ // if (data && data.length && data.length > 0) {
+ // if (intent === "viewrepos") {
+ // table = this.createRepoTable(data);
+ // } else if (intent === "displaylastcomment") {
+ // comment = this.createCommentBody(data);
+ // }
+ // }
+ // } else if (requestMethod == "purge") {
+ // cardTitle.innerHTML = "Operation Completed!";
+ // cardText.innerHTML = data.command;
+ // }
+ // } else if (data.type = 'widget') {
+ // cardTitle.innerHTML = "Operation recorded with below data, click submit to repeat.";
+ // cardText.innerHTML = $config.intentSlugToOperations[intent].cardMsg;
+ // if (data && data.length && data.length > 0) {
+ // if (intent === "viewrepos") {
+ // table = this.createRepoTable(data);
+ // } else if (intent === "displaylastcomment") {
+ // comment = this.createCommentBody(data);
+ // }
+ // }
+ // } else {
+ // cardTitle.innerHTML = "Server Responded As..";
+ // cardText.innerHTML = `Operation failed with status: ${data.status}`;
+ // }
+
+ // // Associations
+ // closeAnchor.appendChild(closeHeader);
+ // cardTitle.appendChild(closeAnchor);
+ // cardBody.appendChild(cardTitle);
+ // cardBody.appendChild(cardText);
+ // if (comment) { cardBody.appendChild(comment); }
+ // cardFooter.appendChild(textMuted);
+ // card.appendChild(cardBody);
+ // if (table) { card.appendChild(table); }
+ // card.appendChild(cardFooter);
+
+ // conversations.insertBefore(underCardLine, conversations.firstChild);
+ // conversations.insertBefore(card, conversations.firstChild);
+ // }
+
+ // getVariable(data, commaSeparatedValue) {
+ // const arr = commaSeparatedValue.split(",");
+ // for (let i = 0; i < arr.length; i++) {
+ // data = data[arr[i]];
+ // }
+ // return data;
+ // }
+
+ // // Create table of repositories ==================================================================================================
+ // createRepoTable(data) {
+ // // Create Elements
+ // const table = document.createElement("table");
+ // const thead = document.createElement("thead");
+ // const tr_head = document.createElement("tr");
+ // const th_1 = document.createElement("th");
+ // const th_2 = document.createElement("th");
+ // const th_3 = document.createElement("th");
+ // const th_4 = document.createElement("th");
+ // const th_5 = document.createElement("th");
+ // const th_6 = document.createElement("th");
+ // const th_7 = document.createElement("th");
+
+ // // Add Attributes
+ // table.classList.add("table", "tabled-bordered", "table-striped", "table-hover");
+ // thead.classList.add("thead-dark");
+ // th_1.setAttribute("scope", "col");
+ // th_2.setAttribute("scope", "col");
+ // th_3.setAttribute("scope", "col");
+ // th_4.setAttribute("scope", "col");
+ // th_5.setAttribute("scope", "col");
+ // th_6.setAttribute("scope", "col");
+ // th_7.setAttribute("scope", "col");
+
+ // // Add Inner HTML
+ // th_1.innerHTML = "#";
+ // th_2.innerHTML = "Repository Name";
+ // th_3.innerHTML = "Repository ID";
+ // th_4.innerHTML = "Created On";
+ // th_5.innerHTML = "Created By";
+ // th_6.innerHTML = "View Raw";
+ // th_7.innerHTML = "Delete Repository";
+
+ // // Associations
+ // tr_head.appendChild(th_1);
+ // tr_head.appendChild(th_2);
+ // tr_head.appendChild(th_3);
+ // tr_head.appendChild(th_4);
+ // tr_head.appendChild(th_5);
+ // tr_head.appendChild(th_6);
+ // tr_head.appendChild(th_7);
+ // thead.appendChild(tr_head);
+ // table.appendChild(thead);
+
+
+ // for (let i = 0; i < data.length; i++) {
+ // const currentRepo = data[i];
+ // // Create Elements
+ // const tbody = document.createElement("tbody");
+ // const tr_body = document.createElement("tr");
+ // const th_vertical = document.createElement("th");
+ // const td_1 = document.createElement("td");
+ // const td_2 = document.createElement("td");
+ // const td_3 = document.createElement("td");
+ // const td_4 = document.createElement("td");
+ // const td_5 = document.createElement("td");
+ // const td_6 = document.createElement("td");
+
+ // // Add Attributes
+ // th_vertical.setAttribute("scope", "row");
+ // tr_body.setAttribute("id", `repoRow${i}`);
+
+ // // Add Inner HTML
+ // th_vertical.innerHTML = i + 1;
+ // td_1.innerHTML = currentRepo.name;
+ // td_2.innerHTML = `${currentRepo.id}`;
+ // td_3.innerHTML = currentRepo.created_at;
+ // td_4.innerHTML = `${currentRepo.owner.login}`;
+ // td_5.innerHTML = `View`;
+ // td_6.innerHTML = `Delete`;
+
+ // // Associations
+ // tr_body.appendChild(th_vertical);
+ // tr_body.appendChild(td_1);
+ // tr_body.appendChild(td_2);
+ // tr_body.appendChild(td_3);
+ // tr_body.appendChild(td_4);
+ // tr_body.appendChild(td_5);
+ // tr_body.appendChild(td_6);
+ // tbody.appendChild(tr_body);
+ // table.appendChild(tbody);
+ // }
+
+ // return table;
+ // }
+
+ // loadConversations(historyAll) {
+ // if (historyAll) {
+ // historyAll.forEach((element) => {
+ // this.addGitOperationHistory(element);
+ // });
+ // }
+ // }
+
+ // createCommentBody(data) {
+ // const commentPara = document.createElement("p");
+ // const lastComment = helper.getLatestComment(data);
+ // commentPara.classList.add("card-text");
+ // commentPara.innerHTML = `COMMENT: ${lastComment}`;
+ // return commentPara;
+ // }
+
+ // concealCodeInUrl() {
+ // window.location = "http://localhost:8080";
+ // }
+
+ // toggleModals(response) {
+ // const self = this;
+ // const promise = response.json();
+ // const intent = $(`#${$config.constants.hiddenIntentFieldId}`).val();
+ // $("#submitConfirm").addClass("hide");
+ // $("#btnCancelConfirm").click();
+ // $(".modal-backdrop").removeClass("modal-backdrop");
+ // $("#underWidgetLine").addClass("hide");
+ // $("#intentBox").addClass("hide");
+ // $("#widgets").children().addClass("hide");
+ // if (response && response.status && (response.status === 201 || response.status === 200 || response.status === 204)) {
+ // $("#successAlert").removeClass("hide");
+ // promise.then((body) => {
+ // $("#op-msg").text($config.intentSlugToOperations[intent].successMessage);
+ // $("#successAlert").removeClass("hide");
+ // const action = $config.intentSlugToOperations[intent].response_action;
+ // body.intent = intent;
+ // action.payload = body;
+ // store.dispatch(action);
+ // // self.addGitOperationHistory(body, 'response');
+ // });
+ // } else {
+ // $("#dangerAlert").removeClass("hide");
+ // // self.addGitOperationHistory(response.status);
+ // }
+ // // clear intent
+ // $(`#${$config.constants.hiddenIntentFieldId}`).val("");
+ // }
+
+ // display_ct(start, element) {
+ // this.start = start;
+ // this.element = element;
+ // const days = Math.floor(this.start / 86400);
+ // const hours = Math.floor((this.start - (days * 86400)) / 3600);
+ // const minutes = Math.floor((this.start - (days * 86400) - (hours * 3600)) / 60);
+ // const secs = Math.floor((this.start - (days * 86400) - (hours * 3600) - (minutes * 60)));
+ // let x = "";
+ // if (days != 0) {
+ // x = `${x + days} days`;
+ // }
+ // if (hours != 0) {
+ // x = `${x + hours} hours`;
+ // }
+ // if (minutes != 0) {
+ // x = `${x + minutes} minutes`;
+ // }
+ // x = `${x + secs} seconds ago`;
+ // element.innerHTML = x;
+ // this.start = this.start + 1;
+ // // setTimeout(this['display_ct](this.start, this.element)', 1000 )
+ // }
+}
diff --git a/src/app/services/general-helper.service.spec.ts b/src/app/services/general-helper.service.spec.ts
new file mode 100644
index 0000000..b52ffbd
--- /dev/null
+++ b/src/app/services/general-helper.service.spec.ts
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { GeneralHelperService } from './general-helper.service';
+
+describe('GeneralHelperService', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ providers: [GeneralHelperService]
+ });
+ });
+
+ it('should be created', inject([GeneralHelperService], (service: GeneralHelperService) => {
+ expect(service).toBeTruthy();
+ }));
+});
diff --git a/src/app/services/general-helper.service.ts b/src/app/services/general-helper.service.ts
new file mode 100644
index 0000000..2c46cec
--- /dev/null
+++ b/src/app/services/general-helper.service.ts
@@ -0,0 +1,9 @@
+import { Injectable } from '@angular/core';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class GeneralHelperService {
+
+ constructor() { }
+}
diff --git a/src/app/services/github/github-ops.service.spec.ts b/src/app/services/github/github-ops.service.spec.ts
new file mode 100644
index 0000000..00a0824
--- /dev/null
+++ b/src/app/services/github/github-ops.service.spec.ts
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { GithubOpsService } from './github-ops.service';
+
+describe('GithubOpsService', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ providers: [GithubOpsService]
+ });
+ });
+
+ it('should be created', inject([GithubOpsService], (service: GithubOpsService) => {
+ expect(service).toBeTruthy();
+ }));
+});
diff --git a/src/app/services/github/github-ops.service.ts b/src/app/services/github/github-ops.service.ts
new file mode 100644
index 0000000..85e91d2
--- /dev/null
+++ b/src/app/services/github/github-ops.service.ts
@@ -0,0 +1,318 @@
+import { Injectable } from '@angular/core';
+import { PersistenceOpsService } from '../io/persistence-ops.service';
+import { DomOpsService } from '../dom/dom-ops.service';
+import * as $ from '../../../../node_modules/jquery/dist/jquery';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class GithubOpsService {
+
+// constructor(private persistenceOpsService: PersistenceOpsService, private dom: DomOpsService) { }
+
+// getToken(code) {
+// let token = "";
+// // let self = this;
+// $.getJSON(`https://micobot.herokuapp.com/authenticate/${code}`, (data) => {
+// console.log(data.token);
+// token = data.token;
+// // set cookie here
+// this.persistenceOpsService.setCookie("gitToken", token, 30);
+// // self.authorizationToken = "token " + persistentOps.getCookie('gitToken');
+// this.dom.concealCodeInUrl();
+// });
+// return token;
+// }
+
+// getCurrentUser() {
+// let repositories = "";
+// const url = "https://api.github.com/user/";
+// fetch(url, {
+// method: "GET",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// },
+// })
+// .then((response) => {
+// response.json().then((body) => {
+// repositories = body;
+// console.log(repositories);
+// return repositories;
+// });
+// dom.toggleModals(response);
+// })
+// .catch(error => console.error("Fetch Error =\n", error));
+// return repositories;
+// }
+
+// authenticate() {
+
+// }
+
+// viewRepositories() {
+// const repositories = "";
+// const url = "https://api.github.com/user/repos";
+// fetch(url, {
+// method: "GET",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// })
+// .then((response) => {
+// // response.json().then(function(body){
+// // repositories = body;
+// // console.log(repositories);
+// // return repositories;
+// // });
+// dom.toggleModals(response);
+// })
+// .catch(error => console.error("Fetch Error =\n", error));
+// return repositories;
+// }
+
+// createRepository(newRepoJson) {
+// const url = "https://api.github.com/user/repos";
+// const responsePromise = "";
+// fetch(url, {
+// method: "POST",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// body: JSON.stringify(newRepoJson),
+// })
+// .then((response) => {
+// dom.toggleModals(response);
+// })
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// updateRepository(updateRepoJson, repoName) {
+// repoName = "Hello-World3";
+// const url = `https://api.github.com/repos/mohiit1502/${repoName}`;
+// fetch(url, {
+// method: "PATCH",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// body: JSON.stringify(updateRepoJson),
+// })
+// .then(response => response.json())
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// deleteRepository(repoName) {
+// repoName = "Hello-World2";
+// const url = `https://api.github.com/repos/mohiit1502/${repoName}`;
+// fetch(url, {
+// method: "DELETE",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// })
+// .then(response => response.json())
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// createIssue(newIssueJson, repoName) {
+// const url = `https://api.github.com/repos/mohiit1502/${repoName}/issues`;
+// fetch(url, {
+// method: "POST",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// body: JSON.stringify(newIssueJson),
+// })
+// .then((response) => {
+// dom.toggleModals(response);
+// })
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// updateIssue(updateIssueJson, repoName, issueNumber) {
+// repoName = "stack_route_prj7";
+// issueNumber = 2;
+// const url = `https://api.github.com/repos/mohiit1502/${repoName}/issues/${issueNumber}`;
+// fetch(url, {
+// method: "PATCH",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// body: JSON.stringify(updateIssueJson),
+// })
+// .then(response => response.json())
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// closeIssue(closeIssueJson, repoName, issueNumber) {
+// const url = `https://api.github.com/repos/mohiit1502/${repoName}/issues/${issueNumber}`;
+// fetch(url, {
+// method: "PATCH",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// body: JSON.stringify(closeIssueJson),
+// })
+// .then((response) => {
+// dom.toggleModals(response);
+// })
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// reopenIssue(reopenIssueJson, repoName, issueNumber) {
+// repoName = "stack_route_prj7";
+// issueNumber = 2;
+// const url = `https://api.github.com/repos/mohiit1502/${repoName}/issues/${issueNumber}`;
+// fetch(url, {
+// method: "PATCH",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// body: JSON.stringify(reopenIssueJson),
+// })
+// .then(response => response.json())
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// displayIssue(repoName, issueNumber) {
+// repoName = "stack_route_prj7";
+// issueNumber = 2;
+// const url = `https://api.github.com/repos/mohiit1502/${repoName}/issues/${issueNumber}`;
+// let issues = "";
+// fetch(url, {
+// method: "GET",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// })
+// .then((response) => {
+// response.json().then((body) => {
+// issues = body;
+// console.log(issues);
+// return issues;
+// });
+// })
+// .catch(error => console.error("Fetch Error =\n", error));
+// return issues;
+// }
+
+// addIssueComment(commentBodyJson, repoName, issueId) {
+// const url = `https://api.github.com/repos/mohiit1502/${repoName}/issues/${issueId}/comments`;
+// fetch(url, {
+// method: "POST",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// body: JSON.stringify(commentBodyJson),
+// })
+// .then((response) => {
+// dom.toggleModals(response);
+// })
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// displayLastComment(repoName, issueNumber) {
+// const url = `https://api.github.com/repos/mohiit1502/${repoName}/issues/${issueNumber}/comments`;
+// const comments = [];
+// const latestComment = "";
+// fetch(url, {
+// method: "GET",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// })
+// .then((response) => {
+// dom.toggleModals(response);
+// // response.json().then(function(body){
+// // comments = body;
+// // latestComment = githubHelper.getLatestComment(comments);
+// // console.log(comments);
+// // console.log(latestComment);
+// // });
+// })
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// displayIssuesForUser() {
+// const url = "https://api.github.com/user/issues";
+// fetch(url, {
+// method: "GET",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// })
+// .then(response => response.json())
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// displayIssuesOnRepo() {
+// repoName = "stack_route_prj7";
+// issueNumber = 2;
+// const url = `https://api.github.com/repos/mohiit1502/${repoName}/issues/`;
+// fetch(url, {
+// method: "PATCH",
+// headers: {
+// "Content-Type": "application/json; charset=utf-8",
+// Authorization: this.authorizationToken,
+// },
+// body: JSON.stringify(updateIssueJson),
+// })
+// .then(response => response.json())
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// addCollaborator(repoName, collaborator) {
+// repoName = "stack_route_prj7";
+// collaborator = "swat1508";
+// const url = `https://api.github.com/repos/mohiit1502/${repoName}/collaborators/${collaborator}`;
+// fetch(url, {
+// method: "PUT",
+// headers: {
+// "Content-Type": "application/json",
+// Authorization: this.authorizationToken,
+// },
+// })
+// .then((response) => {
+// dom.toggleModals(response);
+// })
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// removeCollaborator(repoName, collaborator) {
+// repoName = "stack_route_prj7";
+// collaborator = "swat1508";
+// const url = `https://api.github.com/repos/mohiit1502/${repoName}/collaborators/${collaborator}`;
+// fetch(url, {
+// method: "DELETE",
+// headers: {
+// "Content-Type": "application/json",
+// Authorization: this.authorizationToken,
+// },
+// })
+// .then(response => response.json())
+// .catch(error => console.error("Fetch Error =\n", error));
+// }
+
+// createUser(newuserJson) {
+
+// }
+
+// updateUser(updateUserJson) {
+
+// }
+
+// deleteUser(userId) {
+
+// }
+}
diff --git a/src/app/services/helpers/helper-service.service.ts b/src/app/services/helpers/helper-service.service.ts
new file mode 100644
index 0000000..715a74a
--- /dev/null
+++ b/src/app/services/helpers/helper-service.service.ts
@@ -0,0 +1,40 @@
+import { Injectable } from '@angular/core';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class HelperServiceService {
+
+ constructor() { }
+
+
+ getLatestComment(comments) {
+ if (comments && comments.length > 0) { return comments[comments.length - 1].body; }
+ }
+
+ compareByProperty(property) {
+ return function (a, b) {
+ if (a[property] < b[property]) return -1;
+ if (a[property] > b[property]) return 1;
+ return 0;
+ };
+ }
+
+ clone(obj) {
+ if (obj == null || typeof obj !== "object") return obj;
+ const copy = Object.assign({}, obj);
+ return copy;
+ }
+
+ concatenateAndSort(history) {
+ // let counter = 1;
+ let historyAll = [];
+ for (const property in history) {
+ if (history.hasOwnProperty(property) && Array.isArray(history[property])) {
+ historyAll = historyAll.concat(history[property]);
+ }
+ }
+ historyAll.sort(this.compareByProperty("insertionCounter"));
+ return historyAll;
+ }
+}
diff --git a/src/app/services/io/json-reader.service.spec.ts b/src/app/services/io/json-reader.service.spec.ts
new file mode 100644
index 0000000..e6675f3
--- /dev/null
+++ b/src/app/services/io/json-reader.service.spec.ts
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { JsonReaderService } from './json-reader.service';
+
+describe('JsonReaderService', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ providers: [JsonReaderService]
+ });
+ });
+
+ it('should be created', inject([JsonReaderService], (service: JsonReaderService) => {
+ expect(service).toBeTruthy();
+ }));
+});
diff --git a/src/app/services/io/json-reader.service.ts b/src/app/services/io/json-reader.service.ts
new file mode 100644
index 0000000..21416a5
--- /dev/null
+++ b/src/app/services/io/json-reader.service.ts
@@ -0,0 +1,9 @@
+import { Injectable } from '@angular/core';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class JsonReaderService {
+
+ constructor() { }
+}
diff --git a/src/app/services/io/persistence-ops.service.spec.ts b/src/app/services/io/persistence-ops.service.spec.ts
new file mode 100644
index 0000000..0371979
--- /dev/null
+++ b/src/app/services/io/persistence-ops.service.spec.ts
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { PersistenceOpsService } from './persistence-ops.service';
+
+describe('PersistenceOpsService', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ providers: [PersistenceOpsService]
+ });
+ });
+
+ it('should be created', inject([PersistenceOpsService], (service: PersistenceOpsService) => {
+ expect(service).toBeTruthy();
+ }));
+});
diff --git a/src/app/services/io/persistence-ops.service.ts b/src/app/services/io/persistence-ops.service.ts
new file mode 100644
index 0000000..df338ee
--- /dev/null
+++ b/src/app/services/io/persistence-ops.service.ts
@@ -0,0 +1,34 @@
+import { Injectable } from '@angular/core';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class PersistenceOpsService {
+
+ constructor() { }
+
+ setCookie(cname, cvalue, exdays) {
+ const d = new Date();
+ d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
+ const expires = `expires=${d.toUTCString()}`;
+ document.cookie = `${cname} =${cvalue};${expires};path=/`;
+ }
+
+ getCookie(cname) {
+ const name = `${cname}=`;
+ const decodedCookie = decodeURIComponent(document.cookie);
+ const ca = decodedCookie.split(";");
+ for (let i = 0; i < ca.length; i++) {
+ let c = ca[i];
+ while (c.charAt(0) == " ") {
+ c = c.substring(1);
+ }
+ if (c.indexOf(name) == 0) {
+ return c.substring(name.length, c.length);
+ }
+ }
+ return "";
+ }
+}
+
+
diff --git a/src/app/services/recast/recast-ops.service.spec.ts b/src/app/services/recast/recast-ops.service.spec.ts
new file mode 100644
index 0000000..f309c5c
--- /dev/null
+++ b/src/app/services/recast/recast-ops.service.spec.ts
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { RecastOpsService } from './recast-ops.service';
+
+describe('RecastOpsService', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ providers: [RecastOpsService]
+ });
+ });
+
+ it('should be created', inject([RecastOpsService], (service: RecastOpsService) => {
+ expect(service).toBeTruthy();
+ }));
+});
diff --git a/src/app/services/recast/recast-ops.service.ts b/src/app/services/recast/recast-ops.service.ts
new file mode 100644
index 0000000..d92d8a6
--- /dev/null
+++ b/src/app/services/recast/recast-ops.service.ts
@@ -0,0 +1,57 @@
+import { Injectable } from '@angular/core';
+import * as $config from "../../configuration/config";
+import * as $ from 'node_modules/jquery/dist/jquery';
+import { PersistenceOpsService } from '../io/persistence-ops.service';
+import { DomOpsService } from '../dom/dom-ops.service';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class RecastOpsService {
+ recastToken: string = $config.recasttoken;
+ requestUrl: string = "https://api.recast.ai/v2/request";
+ // store: any = PersistenceOpsService.store;
+
+ constructor(private domOpsService: DomOpsService) {}
+
+ getAndCallProcessIntent(command: string, text: {}) {
+ let self = this;
+ const url = `${this.requestUrl}?text=${command}`;
+ let bodyRelevant: any;
+ let intent = "";
+ let requestInit: any = {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json; charset=utf-8",
+ Authorization: `Token ${this.recastToken}`,
+ },
+ data: text,
+ }
+ fetch(url, requestInit)
+ .then((response) => {
+ response.json().then((body) => {
+ bodyRelevant = body.results;
+ intent = bodyRelevant.intents[0] ? bodyRelevant.intents[0].slug : "";
+ if (intent !== undefined && intent !== "") {
+ if (!Object.keys($config.intentSlugToOperations).includes(intent)) {
+ // domOpsService.showEmptyCommandMessage("Intent is either not Identified or is not supported, please try again with a different text.");
+ return;
+ }
+ $(`#${$config.constants.hiddenIntentFieldId}`).val(intent);
+ // domOpsService.displayIntentBox(intent);
+ if (intent == "resethistory") {
+ // store.dispatch($config.intentSlugToOperations.resethistory.action);
+ return;
+ }
+ // domOpsService.showWidget(intent);
+ // domOpsService.populateRecastData(intent, bodyRelevant);
+ // store.dispatch($config.intentSlugToOperations.addquery.action);
+ }
+ return intent;
+ });
+ })
+ .catch((error) => {
+ console.error("Fetch Error =\n", error);
+ });
+ }
+}
\ No newline at end of file