Added Docker stuff.

This commit is contained in:
msinkec
2020-07-08 13:56:33 +02:00
commit 4e27767ac1
119 changed files with 12738 additions and 0 deletions

View File

@@ -0,0 +1,220 @@
'use strict';
angular
.module('sloDialectsAdmin')
.component('new', {
templateUrl: 'components/new/new.template.html',
controller: ['$http', '$routeParams', 'dialectSelect', '$location', '$scope', '$timeout', 'Config', function NewController($http, $routeParams, dialectSelect, $location, $scope, $timeout, Config) {
var vm = this;
vm.id = parseInt($routeParams.id);
vm.selectItems = dialectSelect;
vm.uploadFile = uploadFile;
vm.createNewAnalysisItem = createNewAnalysisItem;
vm.deleteAnalysisItem = deleteAnalysisItem;
vm.save = save;
vm.go = go;
vm.cancel = cancel;
vm.deleteAudio = deleteAudio;
var audioPath;
vm.analysisPlaceholders = [
'Naglas', 'Dolgi samoglasniki', 'Kratki naglašeni samoglasniki', 'Nenaglašeni samoglasniki', 'Soglasniki', 'Oblikoslovni pojavi', 'Leksika'
];
if(vm.id && vm.id > 0){
getAllDialectData(vm.id);
}
function uploadFile(event){
//document.getElementById('audio').classList.remove('hidden');
//console.log(document.getElementById('selected'));
document.getElementById('selected').classList.remove('hidden');
document.getElementById('selected').innerText = document.getElementById('audio').value;
var file = event.target.files[0];
vm.fileFormData = new FormData();
vm.fileFormData.append('file',file);
file = null;
/*
vm.dialectData.audioFile = file;
vm.dialectData.audio = file.name;
var files = document.getElementById('audio').files[0];
*/
};
function getAllDialectData(id){
getDialectData(id);
getAnalysisData(id);
}
function getDialectData(id){
$http.get('../api/dialects/'+id).then(function (result) {
vm.dialectData = result.data;
audioPath = Config.APP_PATH + vm.dialectData.audio;
if(vm.dialectData.audio){
var audio = document.createElement('AUDIO')
audio.id = 'audioID';
audio.controls = true;
audio.currentTime = 0;
document.getElementById('putAudio').appendChild(audio);
document.getElementById('audioID').src = audioPath;
}
}, function (error) {
console.log('Error getting dialects');
});
}
function getAnalysisData(id){
$http.get('../api/dialects/'+id+'/analysis/').then(function (result) {
vm.analysisData = prepareAnalysisData(result.data);
}, function (error) {
console.log('Error getting analysis');
});
}
function prepareAnalysisData(analysis) {
var _analysisData = [];
analysis.forEach(function (a) {
_analysisData[a.section] = _analysisData[a.section] || [];
_analysisData[a.section].push({
id: a.id,
section: a.section,
maintext: a.maintext,
examples: a.examples
});
});
return _analysisData;
}
function createNewAnalysisItem(dialect_id, section_id){
return $http.post('../api/dialects/'+dialect_id+'/analysis', {"section_id": section_id}).then(function(result){
// add also to view model
vm.analysisData = vm.analysisData || [];
vm.analysisData[section_id] = vm.analysisData[section_id] || [];
vm.analysisData[section_id].push({
id: result.data.id,
section: section_id,
maintext: '',
examples: ''
});
console.log('Successfuly created new analysis item.', result);
}, function(error){
console.log('Error creating new analysis item.', error);
});
}
function deleteAnalysisItem(dialect_id, analysis_id){
if(confirm('Ali ste prepričani, da želite izbrisati ta vnos? ' + dialect_id + ' ' + analysis_id)){
$http.delete('../api/dialects/'+dialect_id+'/analysis/'+analysis_id).then(function(response){
// remove from view model
for(var i in vm.analysisData){
vm.analysisData[i] = _.filter(vm.analysisData[i], function(e){
return e.id != analysis_id;
});
}
console.log('Deleted analysis item with id', analysis_id + '. Response: ', response);
}, function(err){
console.log('Error deleting item ', analysis_id+':', err);
});
}
}
function deleteAudio(delete_id, audio) {
if(confirm('Ali ste prepričani, da želite izbrisati ta posnetek? ' + audio)){
if(delete_id && delete_id > 0){
document.getElementById('putAudio').removeChild(document.getElementById('putAudio').firstChild);
//console.log(delete_id);
var promise1 = $http.delete('../api/dialects/' + delete_id + '/audio', {
}).then(function(response){
getAllDialectData(delete_id);
//location.reload();
console.log('Datoteka je izbrisana.');
}, function(error){
alert('Prišlo je do napake pri brisanju.');
console.log('Error', error);
});
}
}
}
function save(dialect_id, goBack){
if(dialect_id && dialect_id > 0){
var promise1 = $http.put('../api/dialects/'+dialect_id, {
analysisData: vm.analysisData,
dialectData: vm.dialectData
}).then(function(response){
//alert('Narečje je bilo uspešno shranjeno.');
}, function(error){
alert('Prišlo je do napake pri shranjevanju.');
console.log('Error', error);
});
if(vm.fileFormData){
if(document.getElementById('putAudio').firstChild){
document.getElementById('putAudio').removeChild(document.getElementById('putAudio').firstChild);
}
var promise2 = $http({
method: 'POST',
url: '../api/dialects/'+vm.id+'/files',
data: vm.fileFormData,
headers: {'Content-Type': undefined, 'Process-Data': false},
}).then(function(response){
//console.log(response);
if(!goBack){
location.reload();
//console.log(response);
}
console.log('File uploaded.');
}, function(error){
console.log('Error uploading file:', error);
});
if(goBack){
Promise.all([promise1, promise2]).then(function() {
go('/');
});
} else {
Promise.all([promise1, promise2]).then(function() {
go('edit/'+vm.id);
});
}
} else {
if(goBack){
Promise.all([promise1]).then(function() {
go('/');
});
} else {
go('edit/'+vm.id);
}
}
} else {
console.log('Dialect missing, cannot save.');
}
}
function go(path){
$location.path(path);
$timeout(function() {
$scope.$apply();
}, 0);
}
function cancel(path){
if(confirm("Nov vnos se ne bo shranil, ali želite nadaljevati?")) {
$http.delete('../api/dialects/'+vm.id).then(function(result){
go(path);
}, function(error){
console.log('Error deleting entry:', error);
});
}
}
}]
});

View File

@@ -0,0 +1,176 @@
<div class="container">
<div class="row">
<div class="col-xs-12">
<div class="toolbar" style="left:16px;">
<button type="button" ng-click="$ctrl.go('/login')" class="btn btn-warning">Odjava</button>
</div>
<h1>Urejevalnik narečnih besedil</h1>
<div class="toolbar">
<button type="button" ng-click="$ctrl.save($ctrl.id, false)" class="btn btn-success save">Shrani</button>
<button type="button" ng-click="$ctrl.save($ctrl.id, true)" class="btn btn-default save">Shrani in zapri</button>
<button type="button" ng-click="$ctrl.cancel('/')" class="btn btn-danger">Prekliči</button>
</div>
</div>
</div>
</div>
<div class="container">
<form class="form-material" ng-submit="$ctrl.save();">
<div class="row">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">Osnovni podatki</div>
<div class="panel-body">
<div class="form-group">
<label class="col-md-12">Oznaka</label>
<div class="col-md-12">
<input type="text" id="oznaka" name="location_label" ng-model="$ctrl.dialectData.location_label" placeholder="F" class="form-control form-control-line">
</div>
</div>
<div class="form-group">
<label for="example-email" class="col-md-12">Lokacija</label>
<div class="col-md-12">
<input type="text" id="lokacija" name="location_name" ng-model="$ctrl.dialectData.location_name" placeholder="Filovci" class="form-control form-control-line">
</div>
</div>
<div class="form-group">
<label class="col-sm-12">Narečje oz. podnarečje</label>
<div class="col-sm-12">
<select id="narecje" name="dialect_key" ng-model="$ctrl.dialectData.dialect_key" class="form-control form-control-line">
<option value="">--- Izberite ---</option>
<option ng-repeat="i in $ctrl.selectItems" value="{{i.key}}">{{ i.name }}</option>
</select>
</div>
</div>
<div class="form-group">
<label for="example-email" class="col-md-12">Zemljepisna širina in dolžina</label>
<div class="form-row align-items-center">
<div class="col-md-6">
<input type="text" name="location_latitude" ng-model="$ctrl.dialectData.location_latitude" placeholder="46.662270" class="form-control form-control-line">
</div>
<div class="col-md-6">
<input type="text" name="location_longitude" ng-model="$ctrl.dialectData.location_longitude" placeholder="16.299627" class="form-control form-control-line">
</div>
</div>
</div>
<div class="form-group">
<label for="example-metainfo" class="col-md-12">Metapodatki</label>
<div class="col-md-12">
<pre><textarea name="metadata" ng-model="$ctrl.dialectData.metadata" placeholder="Posnel Janez Novak dne 1.1.2018, ..." class="form-control form-control-line" rows="2"></textarea></pre>
</div>
</div>
<div class="form-group">
<label for="example-email" class="col-md-12">Zvočni zapis (priporočeno: mp3)</label>
<div class="col-md-12">
<p ng-if="$ctrl.dialectData.audio">Naložena datoteka: {{$ctrl.dialectData.audio}}</p>
<button class="btn btn-warning" ng-if="$ctrl.dialectData.audio" type="button" ng-click="$ctrl.deleteAudio($ctrl.id, $ctrl.dialectData.audio)">Izbriši naloženo datoteko</button><br>
<p ng-if="!$ctrl.dialectData.audio">Ni naložene datoteke.</p>
<br><div id="putAudio"></div><br>
<input type="file" id="audio" style="visibility:hidden" custom-on-change="$ctrl.uploadFile">
<input ng-if="!$ctrl.dialectData.audio" type="button" value="Izberite datoteko" onclick="document.getElementById('audio').click();" class="btn btn-info"><br>
<p class="hidden" id="selected"></p>
</div>
</div>
</div><!-- panel-body -->
</div><!-- panel -->
</div>
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">Besedilo</div>
<div class="panel-body">
<div class="form-group">
<label class="col-md-12">Transkripcija</label>
<div class="col-md-12">
<textarea name="transcription" ng-model="$ctrl.dialectData.transcription" placeholder="Fˈčȧːs sọ biˈlẹː ˈiže pˈrec iˈnåčiše..." class="form-control form-control-line" rows="6"></textarea>
</div>
</div>
<div class="form-group">
<label class="col-md-12">Poknjižitev</label>
<div class="col-md-12">
<textarea name="literal_slovene" ng-model="$ctrl.dialectData.standard_slovene" placeholder="Včasih so bile hiše precej inačiše drugačne..." class="form-control form-control-line" rows="6"></textarea>
</div>
</div>
</div><!-- panel-body -->
</div><!-- panel -->
</div><!-- col -->
</div><!-- row -->
<div class="row">
<div class="col-xs-12">
<div class="panel panel-default" id="analiza">
<div class="panel-heading">Analiza</div>
<div class="panel-body">
<table class="table table-bordered">
<thead>
<tr>
<th>Sekcija</th>
<th>Opis</th>
<th>Primeri</th>
</tr>
</thead>
<tbody ng-repeat="i in [1,2,3,4,5,6,7]">
<tr class="tr-head">
<td>{{ i }}</td>
<td colspan="2">
<div class="form-group">
<div class="col-md-12">
<input type="text" name="section{{i}}" placeholder="{{$ctrl.analysisPlaceholders[i-1]}}" ng-model="$ctrl.dialectData['analysis'+i]" class="form-control form-control-line">
</div>
</div>
</td>
</tr>
<tr ng-repeat="a in $ctrl.analysisData[i]" class="analysis-items">
<td>{{i}}.{{$index+1}} <!--<a style="background:red; color:white;" href="" ng-click="$ctrl.deleteAnalysisItem(i, $index+1)">DELETE</a>-->
<button type="button" class="close" ng-click="$ctrl.deleteAnalysisItem($ctrl.id, a.id)" aria-label="Close"><span style="color:red;" title="Izbriši">×</span></button>
</td>
<td>
<div class="form-group">
<div class="col-md-12">
<textarea name="maintext[i][$index]" ng-model="$ctrl.analysisData[i][$index].maintext" class="form-control form-control-line" rows="5"></textarea>
</div>
</div>
</td>
<td>
<div class="form-group">
<div class="col-md-12">
<textarea name="example[i][$index]" ng-model="$ctrl.analysisData[i][$index].examples" class="form-control form-control-line" rows="5"></textarea>
</div>
</div>
</td>
</tr>
<tr class="analysis-items">
<td></td>
<td colspan="2">
<div class="form-group">
<div class="col-md-12">
<button type="button" class="btn btn-default" ng-click="$ctrl.createNewAnalysisItem($ctrl.id, i)">+ dodaj vnos</button>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div><!-- panel-body -->
</div><!-- panel -->
</div><!-- col -->
</div><!-- row -->
</form>
</div><!-- container -->
<div class="container">
<div class="row">
<div class="col-xs-12">
<div class="toolbar-bottom">
<button type="button" ng-click="$ctrl.save($ctrl.id, false)" class="btn btn-success save">Shrani</button>
<button type="button" ng-click="$ctrl.save($ctrl.id, true)" class="btn btn-default save">Shrani in zapri</button>
<button type="button" ng-click="$ctrl.go('/')" class="btn btn-danger">Prekliči</button>
</div>
</div>
</div>
</div>