Sistema web para crear proyecto web nuevo

This commit is contained in:
2020-07-03 17:21:55 -04:00
parent af3507bda5
commit ad3952501f
53 changed files with 2437 additions and 0 deletions

View File

@ -0,0 +1,26 @@
@extends('layout.base')
@section('page_content')
<h1 class="ui header">Crear Proyecto</h1>
<div class="ui steps">
<div class="@if (!isset($step) or $step == 1) active @elseif($step > 1) completed @endif step">
<i class="clipboard icon"></i>
<div class="content">
Formulario
</div>
</div>
<div class="@if (isset($step) and $step == 2) active @elseif(isset($step) and $step > 2) completed @endif step">
<i class="tasks icon"></i>
<div class="content">
Confirmar
</div>
</div>
<div class="@if (isset($step) and $step == 3) active @endif step">
<i class="cogs icon"></i>
<div class="content">
Crear
</div>
</div>
</div>
@yield('content')
@endsection

View File

@ -0,0 +1,68 @@
@extends('create.base')
@section('content')
<form class="ui form" method="post" action="{{$urls->base}}/create/2">
<div class="field">
<label>Nombre</label>
<input type="text" name="nombre" />
</div>
<div class="field">
<label>Descripción</label>
<input type="text" name="descripcion" />
</div>
<div class="field">
<label>Dependencias</label>
<div class="ui multiple search selection dropdown" id="dependencias">
<i class="dropdown icon"></i>
<input type="hidden" name="dependencias[]" multiple="multiple" value="{{implode(',', $defaults->require)}}" />
<div class="default text">Dependencias</div>
<div class="menu">
@foreach ($defaults->require as $dep)
<div class="item" data-value="{{$dep}}">{{$dep}}</div>
@endforeach
</div>
</div>
</div>
<div class="field">
<label>Dependencias Dev</label>
<div class="ui multiple search selection dropdown" id="dependencias-dev">
<input type="hidden" name="dependencias-dev[]" multiple="multiple" value="{{implode(',', $defaults->{'require-dev'})}}"/>
<i class="dropdown icon"></i>
<div class="default text">Dependencias</div>
<div class="menu">
@foreach ($defaults->{'require-dev'} as $dep)
<div class="item" data-value="{{$dep}}">{{$dep}}</div>
@endforeach
</div>
</div>
</div>
<div class="field">
<button class="ui button">
Siguiente
<i class="right chevron icon"></i>
</button>
</div>
</form>
@endsection
@push('global_script')
let step1 = {
id: '#dependencias',
id2: '#dependencias-dev',
setup: function() {
$(this.id).dropdown({
apiSettings: {
preserveHTML: false,
url: '{{$urls->api}}/dependencies/search?query={query}'
}
})
$(this.id2).dropdown({
apiSettings: {
preserveHTML: false,
url: '{{$urls->api}}/dependencies/search?query={query}'
}
})
}
}
step1.setup()
@endpush

View File

@ -0,0 +1,30 @@
@extends('create.base')
@section('content')
@if (!$exists)
<div class="ui success icon message">
<i class="check icon"></i>
No existe
</div>
@else
<div class="ui error icon message">
<i class="times icon"></i>
Proyecto ya existe
</div>
@endif
<div class="ui segment">
<div class="header">
composer.json
</div>
<pre class="content">{{$composer}}</pre>
</div>
@if (!$exists)
<form class="ui form" method="post" action="{{$urls->base}}/create/3">
<input type="hidden" name="composer" value="{{$composer}}" />
<button class="ui button">
Siguiente
<i class="right chevron icon"></i>
</button>
</form>
@endif
@endsection

View File

@ -0,0 +1,140 @@
@extends('create.base')
@section('content')
<div class="ui indicating progress" id="progress">
<div class="bar">
<div class="progress"></div>
</div>
<div class="label">
</div>
</div>
@endsection
@push('scripts')
<script type="text/javascript">
let project = {
progress: '#progress',
bar: null,
setup: function() {
this.bar = $(this.progress)
this.bar.progress()
this.start()
},
advanceProgress: function(percent, Total, length, start) {
start = (typeof start === 'undefined') ? 0 : start
let p = (percent / Total) * 100 * length / 100 + start
this.bar.progress('set percent', p)
},
buildXHR: function(length, start) {
start = (typeof start === 'undefined') ? 0 : start
let xhr = new window.XMLHttpRequest()
xhr.upload.addEventListener('progress', (e) => {
if (e.lengthComputable) {
this.advanceProgress(e.loaded, e.total, 2, start)
}
}, false)
xhr.addEventListener('progress', (e) => {
if (e.lengthComputable) {
this.advanceProgress(e.loaded, e.total, length - 2, start + 2)
}
}, false)
return xhr
},
send: function(messages, url, next, length, start, method, data) {
this.bar.progress('set label', messages.init)
method = (typeof method === 'undefined') ? 'GET' : method
start = (typeof start === 'undefined') ? 0 : start
let settings = {
type: method,
url: url,
xhr: () => {
return this.buildXHR(length, start)
},
success: (data) => {
if (data.estado) {
this.bar.progress('set label', messages.success)
if (typeof next !== 'undefined' || next !== null) {
next(start + length)
}
return
}
this.error(messages.error)
console.debug(data)
},
error: (xhr) => {
this.error('No se pudo conectar a ' + url + '. ' + xhr.statusText)
}
}
if (method.toLowerCase() == 'post') {
settings['data'] = data
}
return $.ajax(settings)
},
start: function() {
project.send({
init: 'Creando repo',
success: 'Repo creado',
error: 'No se pudo crear repo'
}, '{{$urls->gitea->url}}/user/repos?token={{$urls->gitea->api_key}}', project.createFolder, 5, 0, 'POST', {
auto_init: true,
default_branch: 'master',
name: '{{$name}}'
})
}, // 5
createFolder: function(start) {
project.send({
init: 'Creando carpeta principal',
success: 'Carpeta principal creada',
error: 'No se pudo crear la carpeta principal.'
}, '{{$urls->api}}/create/{{$name}}/folder', project.createSubfolders, 5, start)
}
createSubfolders: function(start) {
project.send({
init: 'Creando subcarpetas',
success: 'Subcarpetas creadas',
error: 'No se pudo crear las subcarpetas'
}, '{{$urls->api}}/create/{{$name}}/subfolders', project.gitInit, 5, start)
}, // 5 + 5: 10
gitInit: function(start) {
project.send({
init: 'Iniciando Git',
success: 'Git iniciado',
error: 'No se pudo iniciar Git'
}, '{{$urls->api}}/create/{{$name}}/git/init', project.addComposer, 5, start)
}, // 10 + 5: 15
addComposer: function(start) {
project.send({
init: 'Agregando e instalando Composer',
success: 'Composer instalado',
error: 'No se pudo instalar composer'
}, '{{$urls->api}}/create/{{$name}}/composer', project.addFiles, 10, start, 'POST', {composer: {!!json_encode($composer)!!}})
}, // 15 + 10: 25
addFiles: function(start) {
project.send({
init: 'Creando archivos',
success: 'Archivos creados',
error: 'No se pudo crear los archivos'
}, '{{$urls->api}}/create/{{$name}}/files', project.gitPush, 65, start)
}, // 25 + 65: 90
gitPush: function(start) {
project.send({
init: 'Git Push',
success: 'Proyecto listo y en repo',
error: 'No se pudo subir el proyecto al repo'
}, '{{$urls->api}}/create/{{$name}}/git/push', null, 10, start).then(() => {
project.end()
})
}, // 90 + 10: 100
end: function() {
window.location = '{{$urls->base}}'
return
},
error: function(msg) {
this.bar.progress('set error', 'Se ha producido un error. ' + msg)
}
}
$(document).ready(() => {
project.setup()
})
</script>
@endpush

View File

@ -0,0 +1,10 @@
@extends('layout.base')
@section('page_content')
<h1 class="ui header">Proyectos</h1>
<div class="ui celled list">
@foreach ($projects as $project)
<a class="item" href="{{$urls->base}}/project/{{$project->name}}">{{$project->name}}</a>
@endforeach
</div>
@endsection

View File

@ -0,0 +1,5 @@
<!DOCTYPE html>
<html lang="es">
@include('layout.head')
@include('layout.body')
</html>

View File

@ -0,0 +1,9 @@
<body>
@include('layout.header')
<div class="ui container">
<div class="ui basic segment">
@yield('page_content')
</div>
</div>
@include('layout.footer')
</body>

View File

@ -0,0 +1 @@
@include('layout.scripts')

View File

@ -0,0 +1,5 @@
<head>
<meta charset="utf-8" />
<title>@yield('page_title')</title>
@include('layout.styles')
</head>

View File

@ -0,0 +1,3 @@
<header class="ui container">
@include('layout.menu')
</header>

View File

@ -0,0 +1,4 @@
<nav class="ui menu">
<a class="item" href="{{$urls->base}}">Inicio</a>
<a class="item" href="{{$urls->base}}/create">Crear</a>
</nav>

View File

@ -0,0 +1,13 @@
@if (isset($assets->scripts))
@foreach ($assets->scripts as $script)
<script type="text/javascript" src="{{$script}}"></script>
@endforeach
@endif
<script type="text/javascript">
$(document).ready(() => {
@stack('global_script')
})
</script>
@stack('scripts')

View File

@ -0,0 +1,16 @@
@if (isset($assets->styles))
@foreach ($assets->styles as $style)
<link rel="stylesheet" type="text/css" href="{{$style}}" />
@endforeach
@endif
@if (isset($assets->fonts))
@foreach ($assets->fonts as $font)
<link href="{{$font}}" />
@endforeach
@endif
@stack('styles')
<style type="text/css">
@stack('global_style')
</style>

View File

@ -0,0 +1,9 @@
@extends('layout.base')
@section('page_content')
<h1 class="ui header">
Proyecto - {{$project->name ?? $project}}
@yield('title')
</h1>
@yield('content')
@endsection

View File

@ -0,0 +1,50 @@
@extends('projects.base')
@section('title')
- Agregar Controlador
@endsection
@section('content')
<form class="ui form" method="post" action="{{$urls->base}}/project/{{$project->base_name}}/controllers/add">
<div class="field">
<label>Nombre</label>
<input type="text" name="name" />
</div>
<div class="two fields">
<div class="field">
<label>Espacio</label>
<div class="ui selection dropdown" id="space">
<input type="hidden" name="space" />
<i class="dropdown icon"></i>
<div class="default text">Espacio</div>
<div class="menu">
@foreach ($subfolders as $folder)
<div class="item" data-value="{{$folder}}">{{$folder}}</div>
@endforeach
</div>
</div>
</div>
<div class="field">
<label>Vista</label>
<div class="ui selection dropdown" id="views">
<input type="hidden" name="template" />
<i class="dropdown icon"></i>
<div class="default text">Vista</div>
<div class="menu">
@foreach ($views as $view)
<div class="item" data-value="{{$view}}">{{$view}}</div>
@endforeach
</div>
</div>
</div>
</div>
<div class="field">
<button class="ui button">Agregar</button>
</div>
</form>
@endsection
@push('global_script')
$('#space').dropdown()
$('#views').dropdown()
@endpush

View File

@ -0,0 +1,63 @@
@extends('projects.base')
@section('title')
- Agregar Ruta
@endsection
@section('content')
<form class="ui form" method="post" action="{{$urls->base}}/project/{{$project->base_name}}/routes/add">
<div class="field">
<label>Ruta</label>
<input type="text" name="name" />
</div>
<div class="three fields">
<div class="field">
<label>Espacio</label>
<div class="ui selection dropdown" id="space">
<input type="hidden" name="space" />
<i class="dropdown icon"></i>
<div class="default text">Espacio</div>
<div class="menu">
@foreach ($subfolders as $subfolder)
<div class="item" data-value="{{$subfolder}}">{{$subfolder}}</div>
@endforeach
</div>
</div>
</div>
<div class="field">
<label>Grupo</label>
<div class="ui search selection dropdown" id="group">
<input type="hidden" name="group" />
<i class="dropdown icon"></i>
<div class="default text">Grupo</div>
<div class="menu">
</div>
</div>
</div>
<div class="field">
<label>Controlador</label>
<div class="ui selection dropdown" id="controller">
<input type="hidden" name="controller" />
<i class="dropdown icon"></i>
<div class="default text">Controlador</div>
<div class="menu">
@foreach ($controllers as $controller)
<div class="item" data-value="{{$controller}}">{{$controller}}</div>
@endforeach
</div>
</div>
</div>
</div>
<div class="field">
<button class="ui button">Agregar</button>
</div>
</form>
@endsection
@push('global_script')
$('#space').dropdown()
$('#group').dropdown({
allowAdditions: true
})
$('#controller').dropdown()
@endpush

View File

@ -0,0 +1,123 @@
@extends('projects.base')
@section('content')
<div class="ui segment">
<h3 class="header">
GIT
</h3>
<pre>{{implode(PHP_EOL, $project->git)}}</pre>
</div>
<div class="ui segment">
<h3 class="header">
Composer
</h3>
<pre>{{json_encode($project->composer, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)}}</pre>
</div>
<div class="ui segment">
<h3 class="header">
Config
</h3>
<div class="ui celled list">
@foreach ($project->config as $config)
<div class="item">
{{$config}}
</div>
@endforeach
</div>
</div>
<div class="ui segment">
<h3 class="header">
<div class="ui grid">
<div class="ten wide column">
Controllers
</div>
<div class="six wide right aligned column">
<a href="{{$urls->base}}/project/{{$project->base_name}}/controllers/add">
<i class="plus icon"></i>
</a>
</div>
</div>
</h3>
@if ($project->controllers !== null and count((array) $project->controllers) > 0)
<div class="ui celled list">
@foreach ($project->controllers as $path => $controller)
<div class="item">
{{$controller}}
</div>
@endforeach
</div>
@endif
</div>
<div class="ui segment">
<h3 class="header">
<div class="ui grid">
<div class="ten wide column">
Services
</div>
<div class="six wide right aligned column">
<a href="{{$urls->base}}/project/{{$project->base_name}}/service/add">
<i class="plus icon"></i>
</a>
</div>
</div>
</h3>
@if ($project->services !== null and count((array) $project->services) > 0)
<div class="ui list">
@foreach ($project->services as $path => $service)
<div class="item">
{{$path}}
<pre>{{json_encode($service, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)}}</pre>
</div>
@endforeach
</div>
@endif
</div>
<div class="ui segment">
<h3 class="header">
<div class="ui grid">
<div class="ten wide column">
Routes
</div>
<div class="six wide right aligned column">
<a href="{{$urls->base}}/project/{{$project->base_name}}/routes/add">
<i class="plus icon"></i>
</a>
</div>
</div>
</h3>
@if ($project->routes !== null and count((array) $project->routes) > 0)
<div class="ui list">
@foreach ($project->routes as $path => $routes)
@foreach ($routes as $route)
<div class="item">
{{$route}}
</div>
@endforeach
@endforeach
</div>
@endif
</div>
<div class="ui segment">
<h3 class="header">
<div class="ui grid">
<div class="ten wide column">
Views
</div>
<div class="six wide right aligned column">
<a href="{{$urls->base}}/project/{{$project->base_name}}/views/add">
<i class="plus icon"></i>
</a>
</div>
</div>
</h3>
@if ($project->views !== null and count((array) $project->views) > 0)
<div class="ui list">
@foreach ($project->views as $path => $view)
<div class="item">
{{$view}}
</div>
@endforeach
</div>
@endif
</div>
@endsection

View File

@ -0,0 +1,58 @@
@extends('projects.base')
@section('title')
- Agregar Vista
@endsection
@section('content')
<form class="ui form" method="post" action="{{$urls->base}}/project/{{$project->base_name}}/views/add">
<div class="field">
<label>Nombre</label>
<input type="text" name="name" />
</div>
<div class="three fields">
<div class="field">
<label>Subcarpeta *</label>
<div class="ui search selection dropdown" id="subcarpetas">
<input type="hidden" name="location" />
<i class="dropdown icon"></i>
<div class="default text">Subcarpeta</div>
<div class="menu">
@foreach ($subfolders as $subcarpeta)
<div class="item" data-value="{{$subcarpeta}}">{{$subcarpeta}}</div>
@endforeach
</div>
</div>
</div>
<div class="field">
<label>Extiende *</label>
<div class="ui selection dropdown" id="extends">
<input type="hidden" name="extends" />
<i class="dropdown icon"></i>
<div class="default text">Extiende</div>
<div class="menu">
@foreach ($views as $view)
<div class="item" data-value="{{$view}}">{{$view}}</div>
@endforeach
</div>
</div>
</div>
<div class="field">
<label>Sección *</label>
<input type="text" name="seccion" />
</div>
</div>
<div class="field">
<button class="ui button">
Agregar
</button>
</div>
</form>
@endsection
@push('global_script')
$('#subcarpetas').dropdown({
allowAdditions: true
})
$('#extends').dropdown()
@endpush