Ya se encuentra disponible la plataforma Git en producción. Se recomienda migrar sus proyectos ASAP. GitBETA será cerrado a partir del segundo semestre de 2020.

Para guías de cómo migrar sus proyectos, véase la documentación de Gitlab sobre Importar/Exportar proyectos

test

parents
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"project": {
"name": "vvvv"
},
"apps": [
{
"root": "src",
"outDir": "dist",
"assets": [
"assets",
"favicon.ico"
],
"index": "index.html",
"main": "main.ts",
"polyfills": "polyfills.ts",
"test": "test.ts",
"tsconfig": "tsconfig.app.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app",
"styles": [
"extras/css/w3.css",
"../node_modules/ngx-toastr/toastr.css",
"extras/css/styles.css"
],
"scripts": [],
"environmentSource": "environments/environment.ts",
"environments": {
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts"
}
}
],
"e2e": {
"protractor": {
"config": "./protractor.conf.js"
}
},
"lint": [
{
"project": "src/tsconfig.app.json",
"exclude": "**/node_modules/**"
},
{
"project": "src/tsconfig.spec.json",
"exclude": "**/node_modules/**"
},
{
"project": "e2e/tsconfig.e2e.json",
"exclude": "**/node_modules/**"
}
],
"test": {
"karma": {
"config": "./karma.conf.js"
}
},
"defaults": {
"styleExt": "css",
"component": {}
}
}
# Editor configuration, see http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
max_line_length = off
trim_trailing_whitespace = false
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/dist
/tmp
/out-tsc
# dependencies
/node_modules
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
testem.log
/typings
# e2e
/e2e/*.js
/e2e/*.map
# System Files
.DS_Store
Thumbs.db
# Angular 5 Basic Demo CRUD Application/Project for Beginners
### Created By [Sangwin Gawande](http://imsangwin.com)
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.5.0.
## Feature list
* Admin Login & Logout
* User Listing
* User Searching
* User Details
* User Addition
* User Update
* User Deletion
## Angular 4 features used
* Modules
* Routes
* Services
* Components
* Browser Animations
* Forms Module
* Reactive Forms
* Directives
* Pipes
* Filters
## Libraries Used
* W3CSS front end design
* Font Awesome Icons
* Toster for success/error messages
## Development server
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
## Code scaffolding
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
import { AppPage } from './app.po';
describe('vvvv App', () => {
let page: AppPage;
beforeEach(() => {
page = new AppPage();
});
it('should display welcome message', () => {
page.navigateTo();
expect(page.getParagraphText()).toEqual('Welcome to app!');
});
});
import { browser, by, element } from 'protractor';
export class AppPage {
navigateTo() {
return browser.get('/');
}
getParagraphText() {
return element(by.css('app-root h1')).getText();
}
}
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/e2e",
"baseUrl": "./",
"module": "commonjs",
"target": "es5",
"types": [
"jasmine",
"jasminewd2",
"node"
]
}
}
image: trion/ng-cli-karma
cache:
paths:
- node_modules/
deploy_stage:
stage: deploy
environment: Stage
only:
- master
script:
- rm ./package-lock.json
- npm install
- ./node_modules/@angular/cli/bin/ng test --progress false --single-run=true --watch=false
- ./node_modules/@angular/cli/bin/ng e2e --progress false --watch=false
- ./node_modules/@angular/cli/bin/ng build --progress false --prod --base-href XXX-stage.surge.sh
- ./node_modules/.bin/surge -p dist/ --domain XXX-stage.surge.sh
\ No newline at end of file
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular/cli'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular/cli/plugins/karma')
],
client:{
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
reports: [ 'html', 'lcovonly' ],
fixWebpackSourcePaths: true
},
angularCli: {
environment: 'dev'
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
});
};
This diff is collapsed.
{
"name": "vvvv",
"version": "0.0.0",
"license": "MIT",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "^5.0.0",
"@angular/common": "^5.0.0",
"@angular/compiler": "^5.0.0",
"@angular/core": "^5.0.0",
"@angular/forms": "^5.0.0",
"@angular/http": "^5.0.0",
"@angular/platform-browser": "^5.0.0",
"@angular/platform-browser-dynamic": "^5.0.0",
"@angular/router": "^5.0.0",
"core-js": "^2.4.1",
"ngx-toastr": "^6.5.0",
"rxjs": "^5.5.2",
"zone.js": "^0.8.14"
},
"devDependencies": {
"@angular/cli": "1.5.0",
"@angular/compiler-cli": "^5.0.0",
"@angular/language-service": "^5.0.0",
"@types/jasmine": "~2.5.53",
"@types/jasminewd2": "~2.0.2",
"@types/node": "~6.0.60",
"codelyzer": "~3.2.0",
"jasmine-core": "~2.6.2",
"jasmine-spec-reporter": "~4.1.0",
"karma": "~1.7.0",
"karma-chrome-launcher": "~2.1.1",
"karma-cli": "~1.0.1",
"karma-coverage-istanbul-reporter": "^1.2.1",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.1.2",
"ts-node": "~3.2.0",
"tslint": "~5.7.0",
"typescript": "~2.4.2"
}
}
// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/lib/config.ts
const { SpecReporter } = require('jasmine-spec-reporter');
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./e2e/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'chrome'
},
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
},
onPrepare() {
require('ts-node').register({
project: 'e2e/tsconfig.e2e.json'
});
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { enableProdMode } from '@angular/core';
//Modules
import { RouterModule, Routes } from '@angular/router';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ToastrModule } from 'ngx-toastr';
// Services
import { AuthService } from './services/auth/auth.service';
import { UserService } from './services/user/user.service';
import { StudentService } from './services/student/student.service';
// Pipes
import { FilterPipe } from './pipes/filter.pipe';
import { PhonePipe } from './pipes/phone.pipe';
// Components
import { AppComponent } from './components/index/app.component';
import { StudentListComponent } from './components/student/list/student-list.component';
import { StudentDetailsComponent } from './components/student/details/student-details.component';
import { StudentAddComponent } from './components/student/add/student-add.component';
import { LoginComponent } from './components/login/login.component';
import { HomeComponent, homeChildRoutes } from './components/home/home.component';
import { HighlightStudentDirective } from './directives/highlight-student.directive';
// Parent Routes
const routes : Routes = [
{
path: '',
component: HomeComponent,
children :homeChildRoutes,
canActivate : [AuthService]
},
{
path: 'login',
component: LoginComponent
},
{
path: '**',
redirectTo: ''
}
];
@NgModule({
declarations: [
AppComponent,
StudentListComponent,
StudentDetailsComponent,
StudentAddComponent,
LoginComponent,
HomeComponent,
FilterPipe,
PhonePipe,
HighlightStudentDirective
],
imports: [
BrowserModule,
RouterModule,
RouterModule.forRoot(routes),
FormsModule,
ReactiveFormsModule,
BrowserAnimationsModule,
ToastrModule.forRoot({
timeOut: 3000,
positionClass: 'toast-bottom-right',
preventDuplicates: true,
}),
],
providers: [AuthService,UserService,StudentService],
bootstrap: [AppComponent]
})
// enableProdMode();
export class AppModule { }
/*Created By : Sangwin Gawande (http://sangw.in)*/
/*Created By : Sangwin Gawande (http://sangw.in)*/
\ No newline at end of file
<!-- Created By : Sangwin Gawande (http://sangw.in) -->
<!-- Side Bar -->
<nav class="w3-sidebar w3-bar-block w3-collapse w3-animate-left w3-card-2" style="z-index:3;width:250px;" id="mySidebar">
<!-- Logo -->
<img src="assets/sangwin-logo.png" class="logo">
<!-- Sidebar Links -->
<a class="w3-bar-item w3-button" [ngClass]="{'w3-teal': (active == '/')}" routerLink="/"> <i class="w3-medium fa fa-user"></i> User List</a>
<a class="w3-bar-item w3-button" routerLink="/add" [ngClass]="{'w3-teal': (active == '/add')}"> <i class="w3-medium fa fa-plus"></i> Add new user</a>
<a class="w3-bar-item w3-button" (click)="logOut()"><i class="w3-medium fa fa-sign-out"></i> Logout</a>
</nav>
<!-- Load main contents -->
<div class="w3-main" style="margin-left:250px;">
<div class="w3-container">
<!-- Initiate Child Routing -->
<router-outlet></router-outlet>
</div>
</div>
<!-- Created By : Sangwin Gawande (http://sangw.in) -->
\ No newline at end of file
/**
* Created By : Sangwin Gawande (http://sangw.in)
*/
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { HomeComponent } from './home.component';
describe('HomeComponent', () => {
let component: HomeComponent;
let fixture: ComponentFixture<HomeComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ HomeComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(HomeComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
/**
* Created By : Sangwin Gawande (http://sangw.in)
*/
\ No newline at end of file
/**
* Created By : Sangwin Gawande (http://sangw.in)
*/
import { Component, OnInit } from '@angular/core';
import { RouterModule, Routes ,Router} from '@angular/router';
import { ToastrService } from 'ngx-toastr';
// Components
import { StudentListComponent } from '../student/list/student-list.component';
import { StudentDetailsComponent } from '../student/details/student-details.component';
import { StudentAddComponent } from '../student/add/student-add.component';
// Services
import { routerTransition } from '../../services/config/config.service';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css'],
animations: [routerTransition()],
host: {'[@routerTransition]': ''}
})
export class HomeComponent implements OnInit {
active:string;
constructor(private router: Router,private toastr: ToastrService) {
// Detect route changes for active sidebar menu
this.router.events.subscribe((val) => {
this.routeChanged(val);
});
}
ngOnInit() {
}
// Detect route changes for active sidebar menu
routeChanged(val){
this.active = val.url;
}
// Logout User
logOut(){
this.toastr.success('Success', "Logged Out Successfully");
localStorage.removeItem('userData');
this.router.navigate(['/login']);
}
}
// Define and export child routes of HomeComponent
export const homeChildRoutes : Routes = [
{
path: '',
component: StudentListComponent
},
{
path: 'add',
component: StudentAddComponent
},
{
path: 'update/:id',
component: StudentAddComponent
},
{
path: 'detail/:id',
component: StudentDetailsComponent
}
];
/**
* Created By : Sangwin Gawande (http://sangw.in)
*/
/*Created By : Sangwin Gawande (http://sangw.in)*/
/*Created By : Sangwin Gawande (http://sangw.in)*/
\ No newline at end of file
<!-- Created By : Sangwin Gawande (http://sangw.in) -->
<!-- App component - Load Parent routes defined in app.module.ts -->
<router-outlet></router-outlet>
<!-- Created By : Sangwin Gawande (http://sangw.in) -->
\ No newline at end of file
/**
* Created By : Sangwin Gawande (http://sangw.in)
*/
import { TestBed, async } from '@angular/core/testing';
import { AppComponent } from './app.component';
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent
],
}).compileComponents();
}));
it('should create the app', async(() => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app).toBeTruthy();
}));
it(`should have as title 'app'`, async(() => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app.title).toEqual('app');
}));
it('should render title in a h1 tag', async(() => {
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
const compiled = fixture.debugElement.nativeElement;
expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!');
}));
});
/**
* Created By : Sangwin Gawande (http://sangw.in)
*/
\ No newline at end of file
/**
* Created By : Sangwin Gawande (http://sangw.in)
*/
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'Student Management By Sangwin Gawande';
// Add few students for initial listing
studentsList = [
{
id : 1,
first_name : "Sangwin",
last_name : "Gawande",
email : "sangwin@yopmail.com",
phone : 9503733178,
department : "Science"
},
{
id : 2,
first_name : "Oman",
last_name : "Umir",
email : "oman@yopmail.com",
phone : 8574889658,
department : "Commerce"
},
{
id : 3,
first_name : "Tina",
last_name : "Dillon",
email : "tina@yopmail.com",
phone : 7485889658,
department : "Science"
},
{
id : 4,
first_name : "John",
last_name : "Doe",
email : "john@yopmail.com",
phone : 9685589748,
department : "Arts"
},
{
id : 5,
first_name : "Peter",
last_name : "Parker",
email : "peter@yopmail.com",
phone : 8595856547,
department : "Engineering"
}
];
constructor() {
// Save students to localStorage
localStorage.setItem('students', JSON.stringify(this.studentsList));
}