hi
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
###############################################################################
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
###############################################################################
|
||||
* text=auto
|
||||
|
||||
###############################################################################
|
||||
# Set default behavior for command prompt diff.
|
||||
#
|
||||
# This is need for earlier builds of msysgit that does not have it on by
|
||||
# default for csharp files.
|
||||
# Note: This is only used by command line
|
||||
###############################################################################
|
||||
#*.cs diff=csharp
|
||||
|
||||
###############################################################################
|
||||
# Set the merge driver for project and solution files
|
||||
#
|
||||
# Merging from the command prompt will add diff markers to the files if there
|
||||
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||
# the diff markers are never inserted). Diff markers may cause the following
|
||||
# file extensions to fail to load in VS. An alternative would be to treat
|
||||
# these files as binary and thus will always conflict and require user
|
||||
# intervention with every merge. To do so, just uncomment the entries below
|
||||
###############################################################################
|
||||
#*.sln merge=binary
|
||||
#*.csproj merge=binary
|
||||
#*.vbproj merge=binary
|
||||
#*.vcxproj merge=binary
|
||||
#*.vcproj merge=binary
|
||||
#*.dbproj merge=binary
|
||||
#*.fsproj merge=binary
|
||||
#*.lsproj merge=binary
|
||||
#*.wixproj merge=binary
|
||||
#*.modelproj merge=binary
|
||||
#*.sqlproj merge=binary
|
||||
#*.wwaproj merge=binary
|
||||
|
||||
###############################################################################
|
||||
# behavior for image files
|
||||
#
|
||||
# image files are treated as binary by default.
|
||||
###############################################################################
|
||||
#*.jpg binary
|
||||
#*.png binary
|
||||
#*.gif binary
|
||||
|
||||
###############################################################################
|
||||
# diff behavior for common document formats
|
||||
#
|
||||
# Convert binary document formats to text before diffing them. This feature
|
||||
# is only available from the command line. Turn it on by uncommenting the
|
||||
# entries below.
|
||||
###############################################################################
|
||||
#*.doc diff=astextplain
|
||||
#*.DOC diff=astextplain
|
||||
#*.docx diff=astextplain
|
||||
#*.DOCX diff=astextplain
|
||||
#*.dot diff=astextplain
|
||||
#*.DOT diff=astextplain
|
||||
#*.pdf diff=astextplain
|
||||
#*.PDF diff=astextplain
|
||||
#*.rtf diff=astextplain
|
||||
#*.RTF diff=astextplain
|
||||
+269
@@ -0,0 +1,269 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# Visual Studio 2015 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# DNX
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# TODO: Comment the next line if you want to checkin your web deploy settings
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
#*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/packages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/packages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/packages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignoreable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
package-lock.json
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
node_modules/
|
||||
orleans.codegen.cs
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Media folder + app_data
|
||||
App_Data/
|
||||
**/Media/
|
||||
Temp/
|
||||
**/Assets/app.*
|
||||
deps/*.dll
|
||||
@@ -0,0 +1,18 @@
|
||||
namespace unjo.Core
|
||||
{
|
||||
public static class Constants
|
||||
{
|
||||
public static class Sections
|
||||
{
|
||||
public const string Dashboard = "dashboard";
|
||||
|
||||
public const string Pages = "pages";
|
||||
|
||||
public const string Lists = "lists";
|
||||
|
||||
public const string Media = "media";
|
||||
|
||||
public const string Settings = "settings";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
namespace unjo.Core.Entities.Sections
|
||||
{
|
||||
/// <summary>
|
||||
/// A child section is a sub-navigation item of a section
|
||||
/// </summary>
|
||||
public interface IChildSection
|
||||
{
|
||||
/// <summary>
|
||||
/// The section alias which acts as the url slug for navigation
|
||||
/// </summary>
|
||||
public string Alias { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The name of the section (either a string or a translation key with @ prefix)
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace unjo.Core.Entities.Sections
|
||||
{
|
||||
/// <summary>
|
||||
/// A section is a main part of the backoffice application
|
||||
/// </summary>
|
||||
public interface ISection
|
||||
{
|
||||
/// <summary>
|
||||
/// The section alias which acts as the url slug for navigation
|
||||
/// </summary>
|
||||
string Alias { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The name of the section (either a string or a translation key with @ prefix)
|
||||
/// </summary>
|
||||
string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Icon of the section
|
||||
/// </summary>
|
||||
string Icon { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Children are displayed as a sub-navigation in the main nav area
|
||||
/// </summary>
|
||||
IList<IChildSection> Children { get; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
|
||||
namespace unjo.Core.Extensions
|
||||
{
|
||||
public static class StringExtensions
|
||||
{
|
||||
public static string EnsureStartsWith(this string input, string toStartWith)
|
||||
{
|
||||
if (input.StartsWith(toStartWith)) return input;
|
||||
return toStartWith + input.TrimStart(toStartWith);
|
||||
}
|
||||
|
||||
public static string EnsureStartsWith(this string input, char value)
|
||||
{
|
||||
return input.StartsWith(value.ToString(CultureInfo.InvariantCulture)) ? input : value + input;
|
||||
}
|
||||
|
||||
public static string EnsureEndsWith(this string input, char value)
|
||||
{
|
||||
return input.EndsWith(value.ToString(CultureInfo.InvariantCulture)) ? input : input + value;
|
||||
}
|
||||
|
||||
public static string EnsureEndsWith(this string input, string toEndWith)
|
||||
{
|
||||
return input.EndsWith(toEndWith.ToString(CultureInfo.InvariantCulture)) ? input : input + toEndWith;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<LangVersion>8.0</LangVersion>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,34 @@
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor
|
||||
@{
|
||||
string theme = HttpContextAccessor.HttpContext.Request.Cookies["theme"] ?? "dark";
|
||||
Layout = null;
|
||||
}
|
||||
<!DOCTYPE html>
|
||||
<html data-theme="@theme">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="robots" content="noindex,nofollow">
|
||||
<meta name="author" content="brothers">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="expires" content="0">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="~/Assets/Favicons/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="~/Assets/Favicons/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="~/Assets/Favicons/favicon-16x16.png">
|
||||
<link rel="icon" type="image/png" sizes="196x196" href="~/Assets/Favicons/android-chrome-192x192.png">
|
||||
<link rel="manifest" href="~/Assets/site.webmanifest">
|
||||
<link rel="mask-icon" href="~/Assets/Favicons/safari-pinned-tab.svg" color="#161e25">
|
||||
<meta name="msapplication-TileColor" content="#161e25">
|
||||
<meta name="theme-color" content="#161e25">
|
||||
<base href="~/">
|
||||
<environment exclude="Development">
|
||||
<link href="~/Assets/app.css" rel="stylesheet" asp-append-version="true" />
|
||||
</environment>
|
||||
<title>fifty</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script src="~/Assets/app.js" asp-append-version="true"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace unjo.Web
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
CreateHostBuilder(args).Build().Run();
|
||||
}
|
||||
|
||||
public static IHostBuilder CreateHostBuilder(string[] args) =>
|
||||
Host.CreateDefaultBuilder(args)
|
||||
.ConfigureWebHostDefaults(webBuilder =>
|
||||
{
|
||||
webBuilder.UseStartup<Startup>();
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"iisSettings": {
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
"iisExpress": {
|
||||
"applicationUrl": "http://localhost:51017",
|
||||
"sslPort": 0
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"unjo": {
|
||||
"commandName": "Project",
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "http://localhost:5000",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System.Collections.Generic;
|
||||
using unjo.Core;
|
||||
using unjo.Core.Entities.Sections;
|
||||
|
||||
namespace unjo.Web.Sections
|
||||
{
|
||||
/// <summary>
|
||||
/// The dashboard aggregates data from all sections
|
||||
/// </summary>
|
||||
public class DashboardSection : ISection
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public string Alias => Constants.Sections.Dashboard;
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Name => "@ui_sections_dashboard";
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Icon => "fth-pie-chart";
|
||||
|
||||
/// <inheritdoc />
|
||||
public IList<IChildSection> Children => null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System.Collections.Generic;
|
||||
using unjo.Core;
|
||||
using unjo.Core.Entities.Sections;
|
||||
|
||||
namespace unjo.Web.Sections
|
||||
{
|
||||
/// <summary>
|
||||
/// Global list entities
|
||||
/// </summary>
|
||||
public class ListsSection : ISection
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public string Alias => Constants.Sections.Lists;
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Name => "@ui_sections_lists";
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Icon => "fth-layers";
|
||||
|
||||
/// <inheritdoc />
|
||||
public IList<IChildSection> Children => null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System.Collections.Generic;
|
||||
using unjo.Core;
|
||||
using unjo.Core.Entities.Sections;
|
||||
|
||||
namespace unjo.Web.Sections
|
||||
{
|
||||
/// <summary>
|
||||
/// Media items (images, videos, documents) grouped in folders
|
||||
/// </summary>
|
||||
public class MediaSection : ISection
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public string Alias => Constants.Sections.Media;
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Name => "@ui_sections_media";
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Icon => "fth-image";
|
||||
|
||||
/// <inheritdoc />
|
||||
public IList<IChildSection> Children => null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System.Collections.Generic;
|
||||
using unjo.Core;
|
||||
using unjo.Core.Entities.Sections;
|
||||
|
||||
namespace unjo.Web.Sections
|
||||
{
|
||||
/// <summary>
|
||||
/// Manage the page tree in this section
|
||||
/// </summary>
|
||||
public class PagesSection : ISection
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public string Alias => Constants.Sections.Pages;
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Name => "@ui_sections_pages";
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Icon => "fth-folder";
|
||||
|
||||
/// <inheritdoc />
|
||||
public IList<IChildSection> Children => null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System.Collections.Generic;
|
||||
using unjo.Core;
|
||||
using unjo.Core.Entities.Sections;
|
||||
|
||||
namespace unjo.Web.Sections
|
||||
{
|
||||
/// <summary>
|
||||
/// Website and backoffice settings
|
||||
/// </summary>
|
||||
public class SettingsSection : ISection
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public string Alias => Constants.Sections.Settings;
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Name => "@ui_sections_settings";
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Icon => "fth-settings";
|
||||
|
||||
/// <inheritdoc />
|
||||
public IList<IChildSection> Children => null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
namespace unjo.Web
|
||||
{
|
||||
public class Startup
|
||||
{
|
||||
// This method gets called by the runtime. Use this method to add services to the container.
|
||||
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
}
|
||||
|
||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
|
||||
{
|
||||
if (env.IsDevelopment())
|
||||
{
|
||||
app.UseDeveloperExceptionPage();
|
||||
}
|
||||
|
||||
app.UseRouting();
|
||||
|
||||
app.UseEndpoints(endpoints =>
|
||||
{
|
||||
endpoints.MapGet("/", async context =>
|
||||
{
|
||||
await context.Response.WriteAsync("Hello World!");
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
import Vue from 'vue'
|
||||
import App from 'cmp/app.vue'
|
||||
import 'filter/generic.js'
|
||||
import 'directive/filedrop.js'
|
||||
|
||||
new Vue(App).$mount('#app');
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"Raven": {
|
||||
"Url": "http://127.0.0.1:9800",
|
||||
"Database": "fiftyone"
|
||||
},
|
||||
|
||||
"Redis": {
|
||||
"Url": "127.0.0.1:6379",
|
||||
"Database": 3
|
||||
},
|
||||
|
||||
"Ebanking": {
|
||||
"Automation": {
|
||||
"TwoFactorAppPath": "C:\\Users\\cee\\AppData\\Roaming\\Raiffeisen_pushTAN\\pushTAN\\Raiffeisen_pushTAN.exe"
|
||||
}
|
||||
},
|
||||
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Warning",
|
||||
"System": "Warning",
|
||||
"Microsoft": "Warning",
|
||||
"Fifty": "Debug"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
{
|
||||
"SystemUserId": "system",
|
||||
|
||||
"SessionDurationInMinutes": 60,
|
||||
|
||||
"SyncStartDate": "2018-01-01T00:00:00",
|
||||
|
||||
"AccountantPdfPassword": "r1528",
|
||||
|
||||
"Reports": {
|
||||
"StartDate": "2019-04-01T00:00:00",
|
||||
"ProgressNo": 116,
|
||||
"DueTo": {
|
||||
"Months": 1,
|
||||
"Days": 15
|
||||
},
|
||||
"InitialShare": {
|
||||
"tobi": {
|
||||
"Income_2019": 16367.12,
|
||||
"Expense_2019": -4456.84,
|
||||
"Payout_2019": -3600,
|
||||
"SVA_2019": -2100,
|
||||
"TAX_E_2019": -658,
|
||||
"TAX_U_2019": -1040.84,
|
||||
"Summary": -14493.26
|
||||
},
|
||||
"chris": {
|
||||
"Income_2019": 68447.12,
|
||||
"Expense_2019": -22159.63,
|
||||
"Payout_2019": -15000,
|
||||
"SVA_2019": -6000,
|
||||
"TAX_E_2019": -4424,
|
||||
"TAX_U_2019": -6743.76,
|
||||
"Summary": 30444.27
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"Folders": {
|
||||
"Invoices": "Media/Invoices",
|
||||
"Reports": "Media/Reports",
|
||||
"Avatars": "Media/Avatars",
|
||||
"Clients": "Media/Clients",
|
||||
"Temp": "Temp"
|
||||
},
|
||||
|
||||
"Ebanking": {
|
||||
"Automation": {
|
||||
"BrowserPath": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
|
||||
"TwoFactorAppPath": "C:\\Users\\Administrator\\AppData\\Roaming\\Raiffeisen_pushTAN\\pushTAN\\Raiffeisen_pushTAN.exe"
|
||||
},
|
||||
"Raiffeisen": {
|
||||
"Username": "3V371389",
|
||||
"Pin": "20146",
|
||||
"State": "3",
|
||||
"IBAN": "AT543406000008237885",
|
||||
"CreditcardId": "2339d46c6e72eea8472d6b498ac6d603",
|
||||
"TwoFactorPin": "52777"
|
||||
},
|
||||
"Paypal": {
|
||||
"Token": "AeQA-N0AviBKvnwM5gVhNyxAiE1Zh5uJftPeuGMHhdtlrzpL6yFB1quDeUsgzSZPtB1z2rUA4xFJjl38",
|
||||
"Secret": "EIR61tk7l9UELRnq9xB1YrXba2H0gXFgPyUjSP8YamZFR8E-BZ-kpWzPsH1XRJ-OIPpIB6HvGWxm5OXu"
|
||||
}
|
||||
},
|
||||
|
||||
"Raven": {
|
||||
"Url": "http://127.0.0.1:9800",
|
||||
"Database": "fifty"
|
||||
},
|
||||
|
||||
"Redis": {
|
||||
"Url": "127.0.0.1:6388",
|
||||
"Database": 0
|
||||
},
|
||||
|
||||
"Frontend": {
|
||||
"SearchResultsPerPage": 20,
|
||||
"FlowPerPage": 30
|
||||
},
|
||||
|
||||
"Logging": {
|
||||
"Json": true,
|
||||
"IncludeScopes": false,
|
||||
"PathFormat": "Logs/log-{Date}.txt",
|
||||
"LogLevel": {
|
||||
"Default": "Warning",
|
||||
"System": "Warning",
|
||||
"Microsoft": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
export default {
|
||||
|
||||
isDebug: process.env.NODE_ENV !== 'production',
|
||||
|
||||
apiBase: '/api',
|
||||
|
||||
countries: [
|
||||
{ value: 'austria', text: 'Austria' },
|
||||
{ value: 'germany', text: 'Germany' },
|
||||
{ value: 'usa', text: 'USA' }
|
||||
],
|
||||
|
||||
categories: [
|
||||
{ value: 'unknown', text: '' },
|
||||
{ value: 'socialInsurance', text: 'SVA' },
|
||||
{ value: 'tax', text: 'Tax' },
|
||||
{ value: 'payout', text: 'Payout' },
|
||||
{ value: 'payment', text: 'Payment' }
|
||||
]
|
||||
};
|
||||
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"name": "unjo.web",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"bin": {
|
||||
"unjo.web": "app.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "0.19.0",
|
||||
"dayjs": "1.8.16",
|
||||
"lodash": "4.17.15",
|
||||
"tiptap": "1.26.3",
|
||||
"tiptap-extensions": "1.28.3",
|
||||
"vue": "2.6.10",
|
||||
"vue-router": "3.1.3",
|
||||
"vuex": "3.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.6.3",
|
||||
"@babel/preset-env": "7.6.3",
|
||||
"aspnet-webpack": "3.0.0",
|
||||
"babel-loader": "8.0.6",
|
||||
"css-loader": "3.2.0",
|
||||
"html-webpack-plugin": "3.2.0",
|
||||
"mini-css-extract-plugin": "0.8.0",
|
||||
"node-sass": "^4.13.1",
|
||||
"optimize-css-assets-webpack-plugin": "5.0.3",
|
||||
"sass-loader": "8.0.0",
|
||||
"style-loader": "1.0.0",
|
||||
"uglifyjs-webpack-plugin": "2.2.0",
|
||||
"vue-loader": "15.7.1",
|
||||
"vue-template-compiler": "2.6.10",
|
||||
"webpack": "4.41.0",
|
||||
"webpack-cli": "3.3.9",
|
||||
"webpack-dev-server": "3.8.2",
|
||||
"webpack-hot-middleware": "2.25.0",
|
||||
"webpack-merge": "4.2.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vue-template-compiler": "2.6.10"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "webpack-dev-server --progress --hot --open",
|
||||
"debug": "webpack --progress",
|
||||
"build": "webpack --progress --config webpack.prod.js",
|
||||
"update:packages": "node wipe.js && rm -rf node_modules && npm update --save-dev && npm update --save"
|
||||
},
|
||||
"babel": {
|
||||
"presets": [
|
||||
"@babel/env"
|
||||
]
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
import Vue from 'vue';
|
||||
import VueRouter from 'vue-router';
|
||||
import Flow from 'view/flow';
|
||||
import Transaction from 'view/transaction';
|
||||
import Invoices from 'view/invoices';
|
||||
import InvoiceEdit from 'view/invoiceedit';
|
||||
import Clients from 'view/clients';
|
||||
import Client from 'view/client';
|
||||
import Changelog from 'view/changelog';
|
||||
import Rules from 'view/rules';
|
||||
import Reports from 'view/reports';
|
||||
import Report from 'view/report';
|
||||
import ReportCreate from 'view/reportcreate';
|
||||
import EventHub from 'utils/eventhub.js';
|
||||
|
||||
Vue.use(VueRouter);
|
||||
|
||||
history.scrollRestoration = 'manual';
|
||||
|
||||
const routes = [
|
||||
|
||||
// flow
|
||||
{ path: '/', component: Flow, name: 'flow', meta: { title: 'Flow' } },
|
||||
{ path: '/provider/:provider', component: Flow, name: 'flowProvider', props: true, meta: { title: 'Flow' } },
|
||||
{ path: '/provider/:provider/page/:page', component: Flow, name: 'flowProviderAndPage', props: true, meta: { title: 'Flow' } },
|
||||
{ path: '/page/:page', component: Flow, name: 'flowPage', props: true, meta: { title: 'Flow' } },
|
||||
{ path: '/transaction/edit/:id', component: Transaction, name: 'transaction', props: true, meta: { title: 'Transaction' } },
|
||||
|
||||
// invoices
|
||||
{ path: '/invoices', component: Invoices, name: 'invoices', meta: { title: 'Invoices' } },
|
||||
{ path: '/invoices/create', component: InvoiceEdit, name: 'invoiceCreate', meta: { title: 'Create invoice' } },
|
||||
{ path: '/invoices/create/:id', component: InvoiceEdit, name: 'invoiceCreateFrom', props: true, meta: { title: 'Create invoice' } },
|
||||
{ path: '/invoices/edit/:id', component: InvoiceEdit, name: 'invoiceEdit', props: true, meta: { title: 'Edit invoice' } },
|
||||
{ path: '/invoices/:year', component: Invoices, name: 'invoicesYear', props: true, meta: { title: 'Invoices' } },
|
||||
|
||||
// clients
|
||||
{ path: '/clients', component: Clients, name: 'clients', meta: { title: 'Clients' } },
|
||||
{ path: '/clients/edit/:id', component: Client, name: 'client', props: true, meta: { title: 'Client' } },
|
||||
|
||||
// changelog
|
||||
{ path: '/changelog', component: Changelog, name: 'changelog', meta: { title: 'Changelog' } },
|
||||
|
||||
// rules
|
||||
{ path: '/rules', component: Rules, name: 'rules', props: true, meta: { title: 'Rules' } },
|
||||
{ path: '/rules/items', component: Rules, name: 'rulesItems', meta: { title: 'Rules' } },
|
||||
{ path: '/rules/history', component: Rules, name: 'rulesHistory', meta: { title: 'Rules' } },
|
||||
{ path: '/rules/edit/:id?', component: Rules, name: 'rules', props: true, meta: { title: 'Rules' } },
|
||||
|
||||
// reports
|
||||
{ path: '/reports', component: Reports, name: 'reports', meta: { title: 'Reports' } },
|
||||
{ path: '/reports/edit/:id', component: Report, name: 'report', props: true, meta: { title: 'Report' } },
|
||||
{ path: '/reports/create/:type?', component: ReportCreate, name: 'reportCreate', props: true, meta: { title: 'Report' } },
|
||||
{ path: '/reports/:year', component: Reports, name: 'reportsYear', props: true, meta: { title: 'Reports' } }
|
||||
];
|
||||
|
||||
const router = new VueRouter({
|
||||
mode: 'history',
|
||||
routes: routes,
|
||||
scrollBehavior(to, from, savedPosition)
|
||||
{
|
||||
return savedPosition ? savedPosition : { x: 0, y: 0 };
|
||||
//return new Promise((resolve, reject) =>
|
||||
//{
|
||||
// EventHub.$once('page-loaded', () =>
|
||||
// {
|
||||
// console.info('pos', savedPosition);
|
||||
// resolve(savedPosition ? savedPosition : { x: 0, y: 0 });
|
||||
// });
|
||||
//});
|
||||
}
|
||||
});
|
||||
|
||||
router.beforeEach((to, from, next) =>
|
||||
{
|
||||
document.title = to.meta.title !== null ? to.meta.title + " | fifty" : "fifty";
|
||||
EventHub.$emit('dialog-close');
|
||||
next();
|
||||
});
|
||||
|
||||
export default router;
|
||||
@@ -0,0 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<location path="." inheritInChildApplications="false">
|
||||
<system.webServer>
|
||||
<handlers>
|
||||
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
|
||||
</handlers>
|
||||
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
|
||||
<environmentVariables>
|
||||
<environmentVariable name="ASPNETCORE_HTTPS_PORT" value="44308" />
|
||||
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
|
||||
</environmentVariables>
|
||||
</aspNetCore>
|
||||
<rewrite>
|
||||
<rules></rules>
|
||||
</rewrite>
|
||||
</system.webServer>
|
||||
</location>
|
||||
</configuration>
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
|
||||
<location path="." inheritInChildApplications="false">
|
||||
<system.webServer>
|
||||
<rewrite>
|
||||
<rules>
|
||||
<rule name="SSLRenewal" enabled="true" stopProcessing="true" xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)">
|
||||
<match url="\.well-known(.*)" />
|
||||
<action type="None" />
|
||||
</rule>
|
||||
<rule name="RedirectToSSL" enabled="true" stopProcessing="true" xdt:Transform="InsertIfMissing" xdt:Locator="Match(name)">
|
||||
<match url="(.*)" />
|
||||
<conditions logicalGrouping="MatchAny">
|
||||
<add input="{HTTP_HOST}" pattern="^fifty\.brothers\.studio$" negate="true" />
|
||||
<add input="{HTTPS}" pattern="^OFF$" />
|
||||
</conditions>
|
||||
<action type="Redirect" url="https://fifty\.brothers\.studio/{R:1}" redirectType="Permanent" />
|
||||
</rule>
|
||||
</rules>
|
||||
</rewrite>
|
||||
</system.webServer>
|
||||
</location>
|
||||
</configuration>
|
||||
@@ -0,0 +1,61 @@
|
||||
const path = require('path');
|
||||
const VueLoaderPlugin = require('vue-loader/lib/plugin');
|
||||
|
||||
module.exports = {
|
||||
|
||||
// entry point of the app
|
||||
context: __dirname,
|
||||
entry: { app: './app.js' },
|
||||
|
||||
// dev environment (gets overwritten by prod.js)
|
||||
mode: 'development',
|
||||
devtool: 'cheap-module-eval-source-map',
|
||||
|
||||
// output paths
|
||||
output: {
|
||||
path: path.resolve(__dirname, 'wwwroot/Assets'),
|
||||
filename: 'app.js',
|
||||
publicPath: '/Assets/'
|
||||
},
|
||||
|
||||
// map files to vue
|
||||
resolve: {
|
||||
extensions: ['.js', '.vue', '.json'],
|
||||
alias: {
|
||||
'vue$': 'vue/dist/vue.esm.js',
|
||||
'@': __dirname,
|
||||
'api': path.join(__dirname, 'Api'),
|
||||
'cmp': path.join(__dirname, 'Components'),
|
||||
'store': path.join(__dirname, 'Utils'),
|
||||
'utils': path.join(__dirname, 'Utils'),
|
||||
'view': path.join(__dirname, 'Views'),
|
||||
'filter': path.join(__dirname, 'Utils'),
|
||||
'directive': path.join(__dirname, 'Utils')
|
||||
}
|
||||
},
|
||||
|
||||
// plugins to use
|
||||
plugins: [
|
||||
new VueLoaderPlugin()
|
||||
],
|
||||
|
||||
// modules to load
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.vue$/,
|
||||
exclude: /node_modules/,
|
||||
loader: 'vue-loader'
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
exclude: /node_modules/,
|
||||
loader: 'babel-loader'
|
||||
},
|
||||
{
|
||||
test: /\.scss$/,
|
||||
use: ["style-loader", "css-loader", "sass-loader"]
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,38 @@
|
||||
const merge = require('webpack-merge');
|
||||
const config = require('./webpack.config.js');
|
||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||
const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
|
||||
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
|
||||
|
||||
module.exports = merge(config, {
|
||||
|
||||
mode: 'production',
|
||||
devtool: 'source-map',
|
||||
|
||||
plugins: [
|
||||
new MiniCssExtractPlugin({
|
||||
filename: "app.css",
|
||||
chunkFilename: "[id].css"
|
||||
})
|
||||
],
|
||||
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.scss$/,
|
||||
use: [ MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader' ]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
optimization: {
|
||||
minimizer: [
|
||||
new UglifyJsPlugin({
|
||||
cache: true,
|
||||
parallel: true,
|
||||
sourceMap: true
|
||||
}),
|
||||
new OptimizeCSSAssetsPlugin({})
|
||||
]
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,31 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29709.97
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "unjo.Web", "unjo.Web\unjo.Web.csproj", "{8C14E4B1-8C00-4B4B-869B-4D2084ABE1F3}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "unjo.Core", "unjo.Core\unjo.Core.csproj", "{7BFF3DDE-F910-4CE1-9B94-846059CE80DA}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{8C14E4B1-8C00-4B4B-869B-4D2084ABE1F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8C14E4B1-8C00-4B4B-869B-4D2084ABE1F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8C14E4B1-8C00-4B4B-869B-4D2084ABE1F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8C14E4B1-8C00-4B4B-869B-4D2084ABE1F3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7BFF3DDE-F910-4CE1-9B94-846059CE80DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7BFF3DDE-F910-4CE1-9B94-846059CE80DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7BFF3DDE-F910-4CE1-9B94-846059CE80DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7BFF3DDE-F910-4CE1-9B94-846059CE80DA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {AD3F31B9-8BBB-4334-9571-F556B9E632C9}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
Reference in New Issue
Block a user