Sistema web para crear proyecto web nuevo
This commit is contained in:
26
resources/views/create/base.blade.php
Normal file
26
resources/views/create/base.blade.php
Normal 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
|
68
resources/views/create/step1.blade.php
Normal file
68
resources/views/create/step1.blade.php
Normal 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
|
30
resources/views/create/step2.blade.php
Normal file
30
resources/views/create/step2.blade.php
Normal 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
|
140
resources/views/create/step3.blade.php
Normal file
140
resources/views/create/step3.blade.php
Normal 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
|
Reference in New Issue
Block a user