149 lines
3.7 KiB
Handlebars
149 lines
3.7 KiB
Handlebars
|
<div ng-app="App" ng-controller="AppController">
|
||
|
<form ng-submit="Submit()">
|
||
|
<input type="text" ng-model="Model.name"/>
|
||
|
<input type="text" ng-model="Model.description"/>
|
||
|
<h2>Rows</h2>
|
||
|
<div ng-repeat="Row in Model.schema track by $index">
|
||
|
<input type="text" ng-model="Row.key"/>
|
||
|
<select ng-model="Row.type" ng-options="v for v in Types"></select>
|
||
|
</div>
|
||
|
<input type="submit"/>
|
||
|
</form>
|
||
|
<form>
|
||
|
<input type="file" data-import-csv class="form-control">
|
||
|
</form>
|
||
|
</div>
|
||
|
<script>
|
||
|
var App = angular.module("App", []);
|
||
|
App.factory("Rows", [function()
|
||
|
{
|
||
|
return function(inData)
|
||
|
{
|
||
|
console.log(inData);
|
||
|
};
|
||
|
}]);
|
||
|
App.directive("importCsv", ["Rows", function(Rows)
|
||
|
{
|
||
|
|
||
|
var directive = {};
|
||
|
|
||
|
directive.link = function(inScope, inElement, inAttributes){
|
||
|
|
||
|
function handlerEnter(inEvent){
|
||
|
if(inEvent){
|
||
|
inEvent.preventDefault();
|
||
|
}
|
||
|
inElement.addClass("Import");
|
||
|
inEvent.dataTransfer.effectAllowed = 'copy';
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function handlerDrop(inEvent){
|
||
|
inElement.removeClass("Import");
|
||
|
if(inEvent){
|
||
|
inEvent.preventDefault();
|
||
|
}
|
||
|
parse(event.dataTransfer.files[0]);
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function handlerChange(inEvent){
|
||
|
inEvent.stopImmediatePropagation();
|
||
|
parse(inEvent.target.files[0]);
|
||
|
}
|
||
|
|
||
|
|
||
|
function handlerLeave()
|
||
|
{
|
||
|
inElement.removeClass("Import");
|
||
|
}
|
||
|
|
||
|
function parse(inFile)
|
||
|
{
|
||
|
Papa.parse(inFile, {
|
||
|
complete: function(inCSV)
|
||
|
{
|
||
|
Rows(inCSV.data);
|
||
|
inScope.$apply();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
|
||
|
inElement.on("dragenter dragstart dragend dragleave dragover drag drop", function (inEvent) {inEvent.preventDefault();});
|
||
|
inElement.on('dragenter', handlerEnter);
|
||
|
inElement.on('dragleave', handlerLeave);
|
||
|
inElement.on('drop', handlerDrop);
|
||
|
inElement.on('change', handlerChange);
|
||
|
inElement.on('click', function(inEvent){
|
||
|
inEvent.stopImmediatePropagation();
|
||
|
|
||
|
})
|
||
|
};
|
||
|
return directive;
|
||
|
}]);
|
||
|
App.controller("AppController", ["$scope", "$http", function($scope, $http)
|
||
|
{
|
||
|
console.log("init");
|
||
|
$scope.Types = ["date", "text", "numeric"];
|
||
|
$scope.Model = {
|
||
|
"name": "DCARD",
|
||
|
"description":"Discover Card",
|
||
|
"type": "csv",
|
||
|
"schema": [
|
||
|
{
|
||
|
"key": "Trans. Date",
|
||
|
"type": "date"
|
||
|
},
|
||
|
{
|
||
|
"key": "Post Date",
|
||
|
"type": "date"
|
||
|
},
|
||
|
{
|
||
|
"key": "Description",
|
||
|
"type": "text"
|
||
|
},
|
||
|
{
|
||
|
"key": "Amount",
|
||
|
"type": "numeric"
|
||
|
},
|
||
|
{
|
||
|
"key": "Category",
|
||
|
"type": "text"
|
||
|
}
|
||
|
],
|
||
|
"unique_constraint": {
|
||
|
"type": "key",
|
||
|
"fields": [
|
||
|
"{Post Date}",
|
||
|
"{Trans. Date}",
|
||
|
"{Description}"
|
||
|
]
|
||
|
}
|
||
|
};
|
||
|
$scope.Submit = function()
|
||
|
{
|
||
|
console.log($scope.Model);
|
||
|
|
||
|
var req = {
|
||
|
method: 'POST',
|
||
|
url: '/json',
|
||
|
data: $scope.Model
|
||
|
};
|
||
|
|
||
|
$http(req).then(
|
||
|
function(inSuccess){
|
||
|
console.log(inSuccess);
|
||
|
},
|
||
|
function(inFailure)
|
||
|
{
|
||
|
console.log(inFailure);
|
||
|
}
|
||
|
);
|
||
|
|
||
|
};
|
||
|
}]);
|
||
|
|
||
|
|
||
|
|
||
|
</script>
|