Moved to webpack and started on new style

pull/1425/head
Jamie.Rees 7 years ago
parent 03a8319f5c
commit dbade585e2

@ -0,0 +1,3 @@
**/*.js
**/*.js.map
**/*.css

@ -7,14 +7,10 @@ import { ILocalUser } from './auth/IUserLogin';
import { ICustomizationSettings } from './interfaces/ISettings';
import style from './app.component.css';
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './app.component.html',
styles: [style]
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {

@ -2,7 +2,7 @@ import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FormsModule } from '@angular/forms';
import { MdButtonModule, MdCardModule } from '@angular/material';
import { MdButtonModule, MdCardModule, MdInputModule, MdTabsModule } from '@angular/material';
import { RouterModule, Routes } from '@angular/router';
import { HttpModule } from '@angular/http';
@ -81,7 +81,9 @@ const routes: Routes = [
MdButtonModule,
NgbModule.forRoot(),
DragulaModule,
MdCardModule
MdCardModule,
MdInputModule,
MdTabsModule
],
declarations: [
AppComponent,

@ -5,7 +5,7 @@ import { AuthHttp, AuthConfig } from 'angular2-jwt';
export function authHttpServiceFactory(http: Http, options: RequestOptions) {
return new AuthHttp(new AuthConfig({
tokenName: 'id_token',
tokenGetter: (() => localStorage.getItem('id_token')),
tokenGetter: (() => localStorage.getItem('id_token')!),
globalHeaders: [{ 'Content-Type': 'application/json' }],
}), http, options);
}

@ -31,7 +31,9 @@ export class AuthService extends ServiceHelpers {
claims(): ILocalUser {
if (this.loggedIn()) {
var token = localStorage.getItem('id_token');
if (!token) {
throw "Invalid token";
}
var json = this.jwtHelper.decodeToken(token);
var roles = json["http://schemas.microsoft.com/ws/2008/06/identity/claims/role"]
var name = json["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"];

@ -1,7 +1,6 @@
import { Component } from '@angular/core';
@Component({
moduleId: module.id,
template: '<h2>Page not found</h2>'
})
export class PageNotFoundComponent { }

@ -6,9 +6,8 @@ import { IRequestCountModel } from '../interfaces/IRequestModel';
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './landingpage.component.html',
styleUrls: ['./landingpage.component.css']
styleUrls: ['./landingpage.component.scss']
})
export class LandingPageComponent implements OnInit {

@ -9,7 +9,6 @@ import { NotificationService } from '../services/notification.service';
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './login.component.html',
})
export class LoginComponent {

@ -17,7 +17,6 @@ import { IMovieRequestModel } from '../interfaces/IRequestModel';
@Component({
selector: 'movie-requests',
moduleId: module.id,
templateUrl: './movierequests.component.html'
})
export class MovieRequestsComponent implements OnInit, OnDestroy {

@ -4,7 +4,6 @@ import { IMediaBase } from '../interfaces/IRequestModel';
@Component({
selector: 'request-card',
moduleId: module.id,
templateUrl: './request-card.component.html'
})
export class RequestCardComponent {

@ -4,7 +4,6 @@ import { RequestService } from '../services/request.service';
import { ITvRequestModel, IMovieRequestModel, IRequestGrid } from '../interfaces/IRequestModel';
@Component({
moduleId: module.id,
templateUrl: './request-grid.component.html'
})
export class RequestGridComponent implements OnInit {

@ -2,7 +2,6 @@
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './request.component.html'
})
export class RequestComponent {

@ -17,7 +17,6 @@ import { ITvRequestModel } from '../interfaces/IRequestModel';
@Component({
selector: 'tv-requests',
moduleId: module.id,
templateUrl: './tvrequests.component.html'
})
export class TvRequestsComponent implements OnInit, OnDestroy {

@ -49,13 +49,13 @@
<span *ngIf="result.available" class="label label-success">Available</span>
<span *ngIf="result.approved && !result.available" class="label label-info">Processing Request</span>
<div *ngIf="result.requested && !result.available; then requested else notRequested"></div>
<template #requested>
<ng-template #requested>
<span *ngIf="!result.available" class="label label-warning">Pending Approval</span>
</template>
</ng-template>
<template #notRequested>
<ng-template #notRequested>
<span *ngIf="!result.available" class="label label-danger">Not Yet Requested</span>
</template>
</ng-template>
<span id="{{id}}netflixTab"></span>
@ -87,12 +87,12 @@
</div>
<div *ngIf="!result.available">
<div *ngIf="result.requested; then requestedBtn else notRequestedBtn"></div>
<template #requestedBtn>
<ng-template #requestedBtn>
<button style="text-align: right" class="btn btn-primary-outline disabled" [disabled]><i class="fa fa-check"></i> Requested</button>
</template>
<template #notRequestedBtn>
</ng-template>
<ng-template #notRequestedBtn>
<button id="{{result.id}}" style="text-align: right" class="btn btn-primary-outline" (click)="request(result)"><i class="fa fa-plus"></i> Request</button>
</template>
</ng-template>
</div>
<!--{{#if_eq type "tv"}}
{{#if_eq tvFullyAvailable true}}

@ -14,7 +14,6 @@ import { IRequestEngineResult } from '../interfaces/IRequestEngineResult';
@Component({
selector: 'movie-search',
moduleId: module.id,
templateUrl: './moviesearch.component.html',
})
export class MovieSearchComponent implements OnInit, OnDestroy {

@ -31,6 +31,12 @@
<div [hidden]="!showMovie">
<movie-search></movie-search>
<md-tab-group>
<md-tab label="Tab 1">
<input mdInput placeholder="Movie Search" value="d">
</md-tab>
<md-tab label="Tab 2">Content 2</md-tab>
</md-tab-group>
</div>
<!--

@ -1,7 +1,5 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './search.component.html',
})
export class SearchComponent implements OnInit {
@ -16,7 +14,7 @@ export class SearchComponent implements OnInit {
selectTab() {
this.showMovie = !this.showMovie;
this.showTv = !this.showTv;
this.showTv = !this.showTv;
}

@ -47,13 +47,13 @@
<span *ngIf="ep.available" class="label label-success">Available</span>
<span *ngIf="ep.approved && !ep.available" class="label label-info">Processing Request</span>
<div *ngIf="ep.requested && !ep.available; then requested else notRequested"></div>
<template #requested>
<ng-template #requested>
<span *ngIf="!ep.available" class="label label-warning">Pending Approval</span>
</template>
</ng-template>
<template #notRequested>
<ng-template #notRequested>
<span *ngIf="!ep.available" class="label label-danger">Not Yet Requested</span>
</template>
</ng-template>
</td>
<td>

@ -14,9 +14,8 @@ import { IEpisodesRequested } from "../interfaces/IRequestModel";
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './seriesinformation.component.html',
styleUrls: ['./seriesinformation.component.css']
styleUrls: ['./seriesinformation.component.scss']
})
export class SeriesInformationComponent implements OnInit, OnDestroy {

@ -59,13 +59,13 @@
<span *ngIf="result.available" class="label label-success">Available</span>
<span *ngIf="result.approved && !result.available" class="label label-info">Processing Request</span>
<div *ngIf="result.requested && !result.available; then requested else notRequested"></div>
<template #requested>
<ng-template #requested>
<span *ngIf="!result.available" class="label label-warning">Pending Approval</span>
</template>
</ng-template>
<template #notRequested>
<ng-template #notRequested>
<span *ngIf="!result.available" class="label label-danger">Not Yet Requested</span>
</template>
</ng-template>
<span id="{{id}}netflixTab"></span>

@ -13,12 +13,9 @@ import { NotificationService } from '../services/notification.service';
import { ISearchTvResult } from '../interfaces/ISearchTvResult';
import { IRequestEngineResult } from '../interfaces/IRequestEngineResult';
import template from './tvsearch.component.html';
@Component({
selector: 'tv-search',
moduleId: module.id,
template: template,
templateUrl: './tvsearch.component.html',
})
export class TvSearchComponent implements OnInit, OnDestroy {

@ -37,7 +37,7 @@ export class IdentityService extends ServiceAuthHelpers {
}
hasRole(role: string): boolean {
var roles = localStorage.getItem("roles") as string[];
var roles = localStorage.getItem("roles") as string[] | null;
if (roles) {
if (roles.indexOf(role) > -1) {
return true;

@ -6,7 +6,6 @@ import { NotificationService } from "../../services/notification.service";
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './customization.component.html',
})
export class CustomizationComponent implements OnInit {

@ -6,7 +6,6 @@ import { NotificationService } from "../../services/notification.service";
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './emby.component.html',
})
export class EmbyComponent implements OnInit {

@ -6,7 +6,6 @@ import { NotificationService } from "../../services/notification.service";
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './landingpage.component.html',
})
export class LandingPageComponent implements OnInit {

@ -6,7 +6,6 @@ import { NotificationService } from "../../services/notification.service";
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './ombi.component.html',
})
export class OmbiComponent implements OnInit {

@ -11,7 +11,6 @@ import { NotificationService } from "../../services/notification.service";
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './plex.component.html',
})
export class PlexComponent implements OnInit, OnDestroy {

@ -10,7 +10,6 @@ import { NotificationService } from "../../services/notification.service";
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './radarr.component.html',
})
export class RadarrComponent implements OnInit {

@ -1,7 +1,6 @@
import { Component } from '@angular/core';
@Component({
selector: 'settings-menu',
moduleId: module.id,
templateUrl: './settingsmenu.component.html'
})
export class SettingsMenuComponent {

@ -10,7 +10,6 @@ import { NotificationService } from "../../services/notification.service";
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './sonarr.component.html',
})
export class SonarrComponent implements OnInit, OnDestroy {

@ -5,7 +5,6 @@ import { IdentityService } from '../services/identity.service';
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './usermanagement.component.html'
})
export class UserManagementComponent implements OnInit {

@ -8,7 +8,6 @@ import { NotificationService } from '../../services/notification.service';
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './createadmin.component.html',
})
export class CreateAdminComponent {

@ -8,7 +8,6 @@ import { IEmbySettings } from '../../interfaces/ISettings';
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './emby.component.html',
})
export class EmbyComponent {

@ -4,7 +4,6 @@ import { Router } from '@angular/router';
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './mediaserver.component.html',
})
export class MediaServerComponent {

@ -8,7 +8,6 @@ import { IPlexAuthentication } from '../../interfaces/IPlex';
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './plex.component.html',
})
export class PlexComponent {

@ -4,7 +4,6 @@ import { Router } from '@angular/router';
@Component({
selector: 'ombi',
moduleId: module.id,
templateUrl: './welcome.component.html',
})
export class WelcomeComponent {

@ -0,0 +1,24 @@
import './polyfills';
import 'bootstrap/dist/js/bootstrap';
import 'pace-progress';
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
if (module['hot']) {
module['hot'].accept();
module['hot'].dispose(() => {
// Before restarting the app, we create a new root element and dispose the old one
const oldRootElem = document.querySelector('app');
const newRootElem = document.createElement('app');
if (oldRootElem && oldRootElem.parentNode) {
oldRootElem.parentNode.insertBefore(newRootElem, oldRootElem);
}
modulePromise.then(appModule => appModule.destroy());
});
} else {
enableProdMode();
}
const modulePromise = platformBrowserDynamic().bootstrapModule(AppModule);

@ -1,4 +1,3 @@
// TypeScript transpiles our app to ES5 but some dependencies are written in ES6 so must polyfill
import 'core-js/es6/string';
import 'core-js/es6/array';
import 'core-js/es6/object';
@ -6,9 +5,7 @@ import 'core-js/es6/object';
import 'core-js/es7/reflect';
import 'zone.js/dist/zone';
import { config } from './config';
if (config.env === config.envs.local) {
if (module['hot']) {
Error['stackTraceLimit'] = Infinity;
require('zone.js/dist/long-stack-trace-zone');
}

@ -11,17 +11,28 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>bin\Debug\netcoreapp1.1\Swagger.xml</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<Content Include="wwwroot\**" />
</ItemGroup>
<!-- Files not to show in IDE -->
<Content Remove="package-lock.json" />
<Compile Remove="wwwroot\dist\**" />
<ItemGroup>
<Content Remove="wwwroot/systemjs.config.js.map" />
<Content Remove="wwwroot\systemjs.config.js" />
<!-- Files not to publish (note that the 'dist' subfolders are re-added below) -->
<Content Remove="ClientApp\**" />
<Content Remove="wwwroot\dist\**" />
<EmbeddedResource Remove="wwwroot\dist\**" />
<None Remove="wwwroot\dist\**" />
</ItemGroup>
<Target Name="RunWebpack" AfterTargets="ComputeFilesToPublish">
<ItemGroup>
<DistFiles Include="wwwroot\dist\**" />
<ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
<RelativePath>%(DistFiles.Identity)</RelativePath>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</ResolvedFileToPublish>
</ItemGroup>
</Target>
<ItemGroup>
<PackageReference Include="AutoMapper" Version="6.0.2" />
@ -59,63 +70,5 @@
<ProjectReference Include="..\Ombi.Settings\Ombi.Settings.csproj" />
<ProjectReference Include="..\Ombi.TheMovieDbApi\Ombi.Api.TheMovieDb.csproj" />
</ItemGroup>
<ItemGroup>
<Content Update="wwwroot\app\interfaces\ISonarr - Copy.js">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\interfaces\ISonarr - Copy.js.map">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\interfaces\ISonarr - Copy.ts">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\requests\request - Copy.component.js">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\requests\request - Copy.component.js.map">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\requests\request - Copy.component.ts">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\requests\request-grid - Copy.component.html">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\requests\request-card.component.js">
<DependentUpon>request-card.component.ts</DependentUpon>
</Content>
<Content Update="wwwroot\app\requests\request-grid - Copy.component.js">
<DependentUpon>request-grid - Copy.component.ts</DependentUpon>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\requests\request-card.component.js.map">
<DependentUpon>request-card.component.js</DependentUpon>
</Content>
<Content Update="wwwroot\app\requests\request-grid - Copy.component.js.map">
<DependentUpon>request-grid - Copy.component.js</DependentUpon>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\requests\request-grid - Copy.component.ts">
<DependentUpon>request-grid - Copy.component.html</DependentUpon>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\services\applications\sonarr - Copy.service.js">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\services\applications\sonarr - Copy.service.ts">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\settings\radarr\sonarr.component.js">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\settings\radarr\sonarr.component.js.map">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Update="wwwroot\app\settings\radarr\sonarr.component.ts">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>
</Project>

@ -9,6 +9,7 @@ using Hangfire.SQLite;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.AspNetCore.StaticFiles;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
@ -128,6 +129,10 @@ namespace Ombi
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
}
app.UseHangfireServer();

@ -1,4 +1,5 @@
$primary-colour: #df691a;
@import '../base.scss';
$primary-colour: #df691a;
$primary-colour-outline: #ff761b;
$bg-colour: #333333;
$bg-colour-disabled: #252424;

@ -1,8 +1,6 @@
@import "./bootstrap.css";
//@import "./lib/tether.css";
@import "../node_modules/primeng/resources/themes/omega/theme.scss";
@import "../node_modules/@angular/material/prebuilt-themes/deeppurple-amber";
@import "./lib/primeng.css";
//@import "~primeng/resources/themes/omega/theme.scss";
$fa-font-path: "../fonts/lib";
@import "../bower_components/font-awesome/scss/font-awesome.scss";
/*@import './Themes/plex.scss';*/
/*$fa-font-path: "../fonts/lib";
@import "../bower_components/font-awesome/scss/font-awesome.scss";*/

@ -1 +1 @@

<ombi>Loading..</ombi>

@ -0,0 +1,2 @@
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>

@ -1,26 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ombi</title>
<base href="@Url.Content("~/")" />
<script src="@Url.Content("~/lib/pace.js")?v=@ViewBag.AssemblyVersion"></script>
<link href="@Url.Content("~/css/lib/pace-theme-flash.css")" rel="stylesheet" />
<link href="@Url.Content("~/css/base.css")" rel="stylesheet" type="text/css"/>
<link href="@Url.Content("~/css/Themes/plex.css")" rel="stylesheet" type="text/css" />
@*<link href="@Url.Content("~/css/lib/primeng.css")" rel="stylesheet" />*@
<script src="@Url.Content("~/lib/system.js")?v="></script>
<script src="@Url.Content("~/lib/jquery.js")?v="></script>
<script src="@Url.Content("~/lib/tether.js")?v="></script>
<script src="@Url.Content("~/lib/bootstrap.js")?v="></script>
<script src="@Url.Content("~/systemjs.config.js")?v="></script>
</head>
<body>
@RenderBody()
<ombi></ombi>
</body>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ombi</title>
<base href="/" />
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="~/dist/main.css" asp-append-version="true" />
<link rel="stylesheet" href="~/dist/vendor.css" asp-append-version="true" />
<script src="~/dist/vendor.js" asp-append-version="true" defer></script>
<script src="~/dist/main.js" asp-append-version="true" defer></script>
</head>
<body>
@RenderBody()
</body>
</html>

@ -1,2 +1,3 @@
@using Ombi
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@using Ombi
@addTagHelper "*, Microsoft.AspNetCore.Mvc.TagHelpers"
@addTagHelper "*, Microsoft.AspNetCore.SpaServices"

@ -1,3 +1,3 @@
@{
@{
Layout = "_Layout";
}

@ -1,337 +1,59 @@
/// <binding BeforeBuild='build' ProjectOpened='watch' />
/// <binding BeforeBuild='build' />
'use strict';
var gulp = require('gulp');
var sass = require('gulp-sass');
var changed = require('gulp-changed');
var rename = require('gulp-rename');
var uglify = require('gulp-uglify');
var sourcemaps = require('gulp-sourcemaps');
var path = require('path');
var del = require('del');
var merge = require('merge-stream');
var gulpif = require('gulp-if');
var runSequence = require('run-sequence');
var cleancss = require('gulp-clean-css');
var filter = require('gulp-filter');
var systemJSBuilder = require('systemjs-builder');
var run = require('gulp-run');
var fs = require('fs');
var wwwroot = './wwwroot';
const gulp = require('gulp');
const run = require('gulp-run');
const runSequence = require('run-sequence');
const del = require('del');
const path = require('path');
var paths = {
wwwroot: wwwroot,
npm: { // These will be resolved automatically and copied to output directory as its name, only works for pre-bundled modules e.g. angular
src: [
'@angular/animations',
'@angular/animations/browser',
'@angular/core',
'@angular/common',
'@angular/compiler',
'@angular/platform-browser',
'@angular/platform-browser-dynamic',
'@angular/http',
'@angular/router',
'@angular/forms',
'@angular/platform-browser/animations',
'@angular/material',
'@ng-bootstrap/ng-bootstrap',
'ngx-infinite-scroll'
],
dest: './lib'
},
lib: { // These are simple single-file dependencies with optional rename, for more files or folders use modules
src: [
{
file: './node_modules/systemjs/dist/system.src.js',
rename: 'system'
},
{
file: './node_modules/systemjs/dist/system-polyfills.src.js',
rename: 'system-polyfills'
},
{
file: './node_modules/jquery/dist/jquery.min.js',
rename: 'jquery'
},
'./bower_components/PACE/pace.js',
'./node_modules/bootstrap/dist/js/bootstrap.js',
'./node_modules/tether/dist/js/tether.js',
'./node_modules/angular2-jwt/angular2-jwt.js',
'./node_modules/dragula/dist/dragula.js'
const outputDir = './wwwroot/dist';
],
dest: './lib/'
},
libcss: [ // Normal css files to be copied
{
src: [
'./bower_components/font-awesome/css/font-awesome.css',
'./bower_components/PACE/themes/orange/pace-theme-barber-shop.css',
'./bower_components/PACE/themes/orange/pace-theme-big-counter.css',
'./bower_components/PACE/themes/orange/pace-theme-fill-left.css',
'./bower_components/PACE/themes/orange/pace-theme-flash.css',
'./bower_components/PACE/themes/orange/pace-theme-flat-top.css',
'./bower_components/PACE/themes/orange/pace-theme-loading-bar.css',
'./node_modules/primeng/resources/primeng.css',
'./node_modules/tether/dist/css/tether.css',
'./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css',
'./node_modules/dragula/dist/dragula.js'
],
dest: './css/lib/'
},
{
src: './Styles/**/*.css',
dest: './css',
filter: '**/*.css'
}
],
libfonts: [ // Library fonts
{
src: [
'./bower_components/font-awesome/fonts/*'
],
dest: './fonts/lib/'
},
{
src: [
'./node_modules/primeng/resources/themes/omega/fonts/*'
],
dest: './css/fonts/'
}
],
libimages: [ // Library images
{
src: [
'./node_modules/primeng/resources/themes/omega/images/*'
],
dest: './images/'
}
],
modules: [ // This is for modules with multiple files that require each other, used when npm can't be used
{
name: 'zone.js',
src: ['./node_modules/zone.js/**/*.js'],
dest: './lib/zone.js/'
},
{
name: 'rxjs',
src: ['./node_modules/rxjs/**/*.js', '!./node_modules/rxjs/src/**/*.js'],
dest: './lib/rxjs/'
},
{
name: 'core-js',
src: ['./node_modules/core-js/**/*.js'],
dest: './lib/core-js/'
},
{
name: 'primeng',
src: './node_modules/primeng/**/*.js',
dest: './lib/primeng/'
},
{
name: 'ng2-dragula',
src: './node_modules/ng2-dragula/**/*.js',
dest: './lib/ng2-dragula/'
}
],
sass: // Simple sass->css compilation
{
src: ['./Styles/**/*.scss', '!./Styles/primeng/**'],
dest: './css/',
filter: '**/*.css'
},
bundle: { // This is the config for the bundler, you shouldn't need to change this
root: './',
dest: './lib/bundle.js',
bundle: 'app/main.js',
app: 'app/**/*',
config: {
baseURL: wwwroot,
packages: {
'.': {
defaultExtension: 'js'
}
},
map: {
text: 'app/text-loader'
},
meta: {
'*.css': {
loader: 'text'
},
'*.html': {
loader: 'text'
}
},
paths: {
'*': 'lib/*',
'app/*': 'app/*'
}
}
function getEnvOptions() {
var options = [];
if (global.prod) {
options.push('--env.prod');
}
}
gulp.task('npm', function () {
var streams = []
for (let module of paths.npm.src) {
let file = require.resolve(module);
streams.push(
gulp.src(file)
.pipe(gulpif(global.full, sourcemaps.init()))
.pipe(gulpif(global.full, uglify({ source_map: true })))
.pipe(rename((path => { path.basename = module })))
.pipe(gulpif(global.full, sourcemaps.write('../maps')))
.pipe(gulp.dest(path.join(paths.wwwroot, paths.npm.dest)))
);
if (global.analyse) {
options.push('--env.analyse');
}
return merge(streams);
})
gulp.task('lib', function () {
var streams = []
for (let module of paths.lib.src) {
streams.push(
gulp.src(typeof module === "string" ? module : module.file)
.pipe(gulpif(global.full, sourcemaps.init()))
.pipe(gulpif(global.full, uglify({ source_map: true })))
.pipe(rename(function (path) {
if (typeof module !== "string" && module.rename) {
path.basename = module.rename;
}
}))
.pipe(gulpif(global.full, sourcemaps.write('maps')))
.pipe(gulp.dest(path.join(paths.wwwroot, paths.lib.dest)))
);
}
return merge(streams);
})
gulp.task('libcss', function () {
var streams = []
for (let module of paths.libcss) {
var f = filter("**/*.css", { restore: true });
streams.push(
gulp.src(module.src)
.pipe(f)
.pipe(gulpif(global.full, sourcemaps.init()))
.pipe(gulpif(global.full, cleancss()))
.pipe(gulpif(global.full, sourcemaps.write(`${module.name ? '.' : ''}./maps/${module.name ? module.name : ''}`)))
.pipe(f.restore)
.pipe(gulp.dest(path.join(paths.wwwroot, module.dest)))
);
}
return merge(streams);
})
gulp.task('libfonts', function () {
var streams = []
for (let module of paths.libfonts) {
streams.push(
gulp.src(module.src)
.pipe(gulp.dest(path.join(paths.wwwroot, module.dest)))
);
}
return merge(streams);
})
gulp.task('libimages', function () {
var streams = []
for (let module of paths.libimages) {
streams.push(
gulp.src(module.src)
.pipe(gulp.dest(path.join(paths.wwwroot, module.dest)))
);
if (options.length > 0) {
return " " + options.join(" ");
} else {
return "";
}
return merge(streams);
})
gulp.task('modules', function () {
var streams = []
for (let module of paths.modules) {
streams.push(
gulp.src(module.src)
.pipe(gulpif(global.full, sourcemaps.init()))
.pipe(gulpif(global.full, uglify({ source_map: true })))
.pipe(gulpif(global.full, sourcemaps.write(`${module.name ? '.' : ''}./maps/${module.name ? module.name : ''}`)))
.pipe(gulp.dest(path.join(paths.wwwroot, module.dest)))
);
}
return merge(streams);
})
}
gulp.task('sass', function () {
return gulp.src(paths.sass.src)
.pipe(changed(paths.sass.dest))
.pipe(gulpif(global.full, sourcemaps.init()))
.pipe(sass({ outputStyle: global.full ? 'compressed' : 'nested' }).on('error', sass.logError))
.pipe(gulpif(global.full, sourcemaps.write('maps')))
.pipe(gulp.dest(path.join(paths.wwwroot, paths.sass.dest)))
gulp.task('vendor', function () {
return run('webpack --config webpack.config.vendor.js' + getEnvOptions()).exec();
});
gulp.task('main', function () {
return run('webpack --config webpack.config.js' + getEnvOptions()).exec();
});
gulp.task('bundle', ['typescript_firstrun'], function () {
var builder = new systemJSBuilder(paths.bundle.root);
builder.config(paths.bundle.config);
gulp.task('test_compile', function () {
return run('webpack boot-tests=./ClientApp/test/boot-tests.ts' + getEnvOptions()).exec();
});
del.sync(path.join(paths.wwwroot, paths.bundle.dest), { force: true });
return builder.bundle(paths.bundle.bundle + (global.full ? '' : ' - [' + paths.bundle.app + ']'), path.join(paths.wwwroot, paths.bundle.dest), {
sourceMaps: global.full
})
})
gulp.task('test_run', function () {
return run('karma start ClientApp/test/karma.conf.js').exec();
});
gulp.task('clean', function () {
return del([
paths.sass.dest + paths.sass.filter,
paths.lib.dest,
paths.bundle.dest,
...paths.modules.map(m => m.dest),
...paths.libcss.map(m => m.dest + (m.filter ? m.filter : '')),
...paths.libfonts.map(m => m.dest)
].map(x => path.join(paths.wwwroot, x)), { force: true });
gulp.task('prod_var', function () {
global.prod = true;
})
// Runs the TypeScript compiler
function runTSC() {
return run('tsc').exec();
}
// Allows app to bundle libs on first run by compiling the app first, only compiles if entry point doesn't exist
gulp.task('typescript_firstrun', function () {
var bundle = path.join(paths.wwwroot, paths.bundle.bundle);
var exists = fs.existsSync(bundle);
if (!exists) {
console.log(`'${bundle}' doesn't exist - compiling TypeScript`);
return runTSC();
}
gulp.task('analyse_var', function () {
global.analyse = true;
})
gulp.task('typescript', function () {
return runTSC();
gulp.task('clean', function() {
del.sync(outputDir, { force: true });
});
uglify().on('error',
function(err) {
gutil.log(gutil.colors.red('[Error]'), err.toString());
this.emit('end');
});
gulp.task('fullvar', () => { global.full = true });
gulp.task('copy', ['lib', 'libcss', 'libfonts', 'libimages', 'npm', 'modules']);
gulp.task('compile', callback => runSequence('copy', 'sass', callback));
gulp.task('build', callback => runSequence('compile', 'bundle', callback));
gulp.task('full', callback => runSequence('clean', 'compile', callback));
// Use this in a build server environment to compile and bundle everything
gulp.task('publish', callback => runSequence('fullvar', 'full', 'typescript', 'bundle', callback));
// Auto compiles sass files on change, note that this doesn't seem to pick up new files at the moment
gulp.task('watch', function () {
gulp.watch(paths.sass.src, ['sass']);
gulp.watch('./Styles/**/*.css', ['libcss']); // legacy css
});
gulp.task('test', callback => runSequence('test_compile', 'test_run'));
gulp.task('build', callback => runSequence('vendor', 'main', callback));
gulp.task('analyse', callback => runSequence('analyse_var', 'build'));
gulp.task('full', callback => runSequence('clean', 'build'));
gulp.task('publish', callback => runSequence('prod_var', 'build'));

File diff suppressed because it is too large Load Diff

@ -1,51 +1,74 @@
{
"name": "ombi",
"version": "1.0.0",
"name": "Ombi",
"private": true,
"version": "1.0.0",
"scripts": {
"test": "gulp test"
},
"dependencies": {
"@angular/animations": "^4.1.0",
"@angular/common": "^4.1.0",
"@angular/compiler": "^4.1.0",
"@angular/compiler-cli": "^4.1.0",
"@angular/core": "^4.1.0",
"@angular/forms": "^4.1.0",
"@angular/http": "^4.1.0",
"@angular/material": "^2.0.0-beta.3",
"@angular/platform-browser": "^4.1.0",
"@angular/platform-browser-dynamic": "^4.1.0",
"@angular/platform-server": "^4.1.0",
"@angular/router": "^4.1.0",
"@ng-bootstrap/ng-bootstrap": "^1.0.0-alpha.25",
"@types/jquery": "^2.0.33",
"@types/systemjs": "^0.20.2",
"angular2-jwt": "^0.2.0",
"@angular/animations": "4.1.3",
"@angular/common": "^4.1.3",
"@angular/compiler": "4.1.3",
"@angular/core": "4.1.3",
"@angular/forms": "4.1.3",
"@angular/http": "4.1.3",
"@angular/material": "2.0.0-beta.5",
"@angular/platform-browser": "4.1.3",
"@angular/platform-browser-dynamic": "4.1.3",
"@angular/platform-server": "4.1.3",
"@angular/router": "4.1.3",
"@covalent/core": "^1.0.0-beta.4",
"@ng-bootstrap/ng-bootstrap": "^1.0.0-alpha.26",
"@types/core-js": "^0.9.41",
"@types/node": "7.0.23",
"angular2-jwt": "^0.2.3",
"angular2-moment": "^1.3.3",
"bootstrap": "3.3.6",
"angular2-template-loader": "0.6.2",
"aspnet-webpack": "^1.0.29",
"awesome-typescript-loader": "3.1.3",
"bootstrap": "^3.3.7",
"bootswatch": "^3.3.7",
"core-js": "^2.4.1",
"css": "2.2.1",
"css-loader": "0.28.4",
"del": "^2.2.2",
"gulp": "~3.9.1",
"gulp-changed": "^1.3.0",
"gulp-clean-css": "^3.0.4",
"gulp-filter": "^5.0.0",
"gulp-if": "^2.0.2",
"gulp-rename": "^1.2.2",
"event-source-polyfill": "0.0.9",
"expose-loader": "0.7.3",
"extract-text-webpack-plugin": "^2.1.0",
"file-loader": "0.11.1",
"font-awesome": "^4.7.0",
"gulp": "^3.9.1",
"gulp-run": "^1.7.1",
"gulp-sass": "^2.3.2",
"gulp-sourcemaps": "^1.9.0",
"gulp-systemjs-builder": "^0.15.0",
"gulp-uglify": "^1.5.4",
"jquery": "2.2.1",
"merge-stream": "^1.0.1",
"nanoscroller": "^0.8.7",
"ng2-dragula": "^1.3.1",
"ngx-infinite-scroll": "^0.4.1",
"primeng": "^2.0.5",
"hammerjs": "^2.0.8",
"html-loader": "0.4.5",
"jquery": "3.2.1",
"ng2-dragula": "^1.5.0",
"ngx-infinite-scroll": "^0.5.1",
"node-sass": "^4.5.3",
"pace-progress": "^1.0.2",
"primeng": "^4.0.3",
"reflect-metadata": "0.1.10",
"run-sequence": "^1.2.2",
"rxjs": "^5.0.3",
"systemjs": "^0.19.41",
"systemjs-builder": "^0.15.34",
"tether": "^1.4.0",
"typescript": "^2.3.0",
"zone.js": "^0.8.5"
"rxjs": "5.4.0",
"sass-loader": "^6.0.5",
"to-string-loader": "1.1.5",
"typescript": "2.3.4",
"url-loader": "0.5.8",
"webpack": "^2.6.1",
"webpack-bundle-analyzer": "^2.8.2",
"webpack-hot-middleware": "2.18.0",
"zone.js": "0.8.11"
},
"devDependencies": {
"@types/chai": "4.0.0",
"@types/jasmine": "2.5.48",
"chai": "4.0.1",
"jasmine-core": "2.6.2",
"karma": "1.7.0",
"karma-chai": "0.1.0",
"karma-chrome-launcher": "2.1.1",
"karma-cli": "1.0.1",
"karma-jasmine": "1.1.0",
"karma-webpack": "2.0.3"
}
}

@ -1,8 +1,7 @@
{
"compilerOptions": {
"target": "es5",
"lib": [ "es5", "es2015" ],
"module": "commonjs",
"lib": [ "es6", "dom" ],
"moduleResolution": "node",
"sourceMap": true,
"strictNullChecks": true,
@ -16,5 +15,5 @@
"experimentalDecorators": true,
"skipLibCheck": true
},
"compileOnSave": true
"exclude": [ "bin", "node_modules" ]
}

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

Loading…
Cancel
Save