David пре 10 година
комит
6b218d942d

+ 20 - 0
back/db.py

@@ -0,0 +1,20 @@
+import pymysql
+
+class db():
+	DB = "EBA_STOCK"
+	USER = "root"
+	PASSWORD = "howdoiturnthison"
+	def __init__(self):
+		self.conn = pymysql.connect(unix_socket='/var/run/mysqld/mysqld.sock', user=db.USER, passwd=db.PASSWORD, db=db.DB)	
+
+	def products(self, _id=None):
+		ret=[]
+		if _id is None:
+			cur = self.conn.cursor()
+			cur.execute("SELECT id,nombre,precio FROM productos where id between 1000 and 2999")
+			for row in cur:
+				ret.append({"id":row[0],"nombre":row[1],"precio":row[2],"cantidad":0})
+		else:
+			pass
+
+		return ret

+ 37 - 0
back/web.py

@@ -0,0 +1,37 @@
+#!/usr/bin/env python3
+import datetime
+import json
+import urllib
+from db import db
+from flask import Flask, abort, jsonify, request
+
+PORT = 8981
+BASE_PATH="/back" #changes based on webserver
+app = Flask(__name__)
+
+
+@app.route(BASE_PATH + '/')
+def index():
+    return "Hello world"
+
+@app.route(BASE_PATH + '/raw')
+def raw_list():
+    ret={'list':
+            [{'file':'movie-1231547519.flv', 'length':'1:14:32', 'date': "2016,7,13"},
+         {'file':'movie-1231111111.flv', 'length':'0:14:32', 'date': "2016-7-12"} ]
+        }
+    return jsonify(ret)
+
+@app.route(BASE_PATH + '/cut')
+def cut_list():
+    ret=[]
+    return jsonify(ret)
+
+@app.route(BASE_PATH + '/uploaded')
+def uploaded_list():
+    ret=[]
+    return jsonify(ret)
+
+
+if __name__ == '__main__':
+    app.run(host="0.0.0.0",port=PORT, debug=True)

+ 22 - 0
front/app.js

@@ -0,0 +1,22 @@
+var app = angular.module('app', ['ngRoute', 'ui.bootstrap', 'cgNotify']); 
+
+app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
+	$locationProvider.html5Mode(true);
+	$routeProvider
+	.when('/', {
+		templateUrl: 'views/raw.html',
+		controller: 'rawCtrl'
+	})
+	.when('/processed', {
+		templateUrl: 'views/processed.html',
+		//controller: 'facturaCtrl'
+	})
+	.when('/youtube', {
+		templateUrl: 'views/youtube.html',
+		//controller: 'facturaCtrl'
+	})
+
+	.otherwise({
+		redirectTo: '/'
+	});
+}]);

+ 12 - 0
front/controllers/rawCtrl.js

@@ -0,0 +1,12 @@
+app.controller('rawCtrl', ['$scope', '$http', function ($scope, $http) {
+
+	$scope.update = function() {
+		$http.get('back/raw').success(function(data) {
+	   		$scope.rawlist = data.list; 
+		});
+	};
+
+	$scope.update();
+
+}]);
+

Разлика између датотеке није приказан због своје велике величине
+ 5 - 0
front/css/bootstrap.min.css


+ 221 - 0
front/css/style.css

@@ -0,0 +1,221 @@
+body,html{
+	width: 100%;
+	min-height: 100%;
+	margin: 0px 0px;
+	font-family: Century Gothic, sans-serif;
+}
+
+.modal-content { position:fixed !important; left: 5%; right: 5%; width: 90%; top: 5%; height: 90%; }
+.modal-content > .ng-scope { background-color:white; }
+.column { width:50%; float:left;}
+div > .column::after{clear:both;}
+
+.warn { background-color:#E7DFBB !important; color:black;}
+a:focus{ color:white !important; }
+.navbar{
+	width: 100%;
+/*	height: 60px;*/
+	background-color: #324875;
+	color: white;
+	font-family: Century Gothic, sans-serif;
+}
+
+.nav-wrap{
+	padding-top: 6px;
+	padding-left: 10px;
+}
+
+.menu{
+	float:right;
+	margin-top: 14px;
+	margin-right: 50px;
+	text-transform: capitalize;
+	font-size: 11pt;
+}
+
+.menu li{
+	display: inline;
+	list-style-type: none;
+	margin-left: 10px;
+}
+.menu a{
+	color: white;
+	text-decoration: none;
+
+}
+
+.menu a:hover{
+	color: #CCCCCC;
+}
+.clear{
+	clear: both;
+}
+
+.container{
+	width: 60%;
+	min-width:1300px;
+	height: 100%;
+	margin: 0px auto;
+	background-color: #F3F6F9;
+	padding: 20px;
+}
+
+.columnas{ width:100%;  }
+.columnLeft, .columnRight {
+	width:47%;
+	margin:1%;
+	margin-left: 0px;
+	float:left;
+}
+.labelblock label { 
+	display:inline-block; 
+	min-width: 90px; 
+	margin-bottom: 5px;
+	font-size:15px;
+}
+
+.labelblock{
+	margin-bottom: 10px;
+}
+
+#ex1, #ex2 {
+	width: 80%;
+	display:inline-block;
+}
+
+#ex1_value, #ex2_value{
+	color: #324875;
+	font-weight: bold;
+	font-size: 12pt;
+}
+#cantidad { width:60px; }
+
+.form-control{
+    height: 25px; 
+    width: 100%; 
+    background-color: transparent;  
+    border-style: solid;  
+    border-width: 0px 0px 1px 0px;  
+    border-color: #324875; 
+    outline:0; 
+} 
+
+h1{
+	color: #324875;
+	font-size: 20pt;
+	margin-top: 0px;
+}
+
+.best-table{
+	width: 100%;
+	font-size:15px;
+	border-spacing:0px;
+}
+.best-table th{
+	color: #324875;
+font-weight: bold;
+font-size: 11pt;
+padding: 10px 8px;
+text-transform: uppercase;
+}
+
+.best-table td{
+	border-bottom: 1px solid #CCC;
+color: #4D4D4D;
+padding: 6px 8px;
+text-align: center;
+}
+
+.best-table tr{
+	border-bottom: 2px solid #6678B1;
+}
+
+.product-cell{
+	width: 50%;
+}
+
+.delete{
+	border: none!important;
+	cursor:pointer;
+	color: #324875;
+
+}
+
+.total-table{
+	width: 60%!important;
+	margin: 0px 45%!important;
+	margin-top: 20px;
+}
+
+.css-button{
+	text-transform: uppercase;
+    text-decoration: inherit;
+    border-radius: 6px 6px 6px 6px;
+    border: 1px solid #3866A3;
+    padding: 6px 14px;
+    cursor: pointer;
+    color: #FFFFFF;
+    display: inline-block;
+    background-color: #324875;
+}
+
+.css-button:hover {
+    background-color: #56688C;
+}
+
+.css-button:active {
+    position:relative;
+    top: 1px;
+}
+
+.factura-datos{
+	color: #324875;
+	font-weight: bold;
+	font-size: 12pt;
+	padding: 10px 8px;
+}
+
+.preview{
+	border: 1px solid #D6DAE3;
+	padding: 20px;
+	margin: 20px 0px;
+}
+
+.best-table img{
+	width: 15px;
+	cursor: pointer;
+}
+
+.best-table .tleft td { text-align:left !important;}
+.left {float:left;}
+.right{float:right;}
+
+#camaras > img { max-width: 45%; }
+
+@media print {
+	.noimprimir { display: none; }
+	a:after{ content: "" !important; }
+	html, body {
+		width: 210mm;
+		height: 297mm;
+		font-size: 10px !important;
+	}
+
+	table { table-layout: fixed !important; width: 95%; }
+	td:first-child, th:first-child { width: 200px !important }
+	table td, table th {
+		margin:0px;
+		border-spacing:0px;
+		border: 0px;
+		width: 100px;
+		overflow: hidden;
+		display: inline-block;
+		white-space: nowrap;
+	}
+	@page {
+		size: A4 portrait;
+		margin: 6mm 6mm 6mm 6mm;
+		
+	}
+
+}

BIN
front/images/logo-h.png


+ 32 - 0
front/index.html

@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html ng-app="app">
+<head>
+	<title>Videos</title>
+	<meta charset="utf-8">
+	<meta name="viewport" content="width=device-width, initial-scale=1">
+	
+	<link rel="styleSheet" href="/css/style.css"/>
+	<link rel="styleSheet" href="/css/bootstrap.min.css"/>
+	<link rel="styleSheet" href="/js/angular-notify/dist/angular-notify.css"/>
+	
+	<script type="text/javascript" src="/js/angular.min.js"></script>
+	<script type="text/javascript" src="/js/ui-bootstrap-tpls-0.13.4.min.js"></script>
+	<script type="text/javascript" src="/js/angular-route.min.js"></script>
+	<script type="text/javascript" src="/js/angular-notify/dist/angular-notify.js"></script>
+	<script type="text/javascript" src="/app.js"></script>
+	<script type="text/javascript" src="/controllers/rawCtrl.js"></script>
+    <base href="/" />
+</head>
+<body>
+	<div class="navbar">
+		<div class="nav-wrap">
+				<img src="images/logo-h.png">
+				TAB RAW | TAB PROCESADO | TAB YOUTUBE
+		</div>
+	</div>
+	<div class="clear"></div>
+	<div class="container">
+		<div ng-view=""></div>
+	</div>
+</body>
+</html>

+ 83 - 0
front/js/angular-notify/angular-notify.css

@@ -0,0 +1,83 @@
+.cg-notify-message {
+    position:fixed;
+    top:0px;
+    z-index: 9999;
+    max-width:400px;
+    text-align: center;
+
+    background-color: #d9edf7;
+    color: #31708f;
+    padding: 15px;
+    border: 1px solid #bce8f1;
+    border-radius: 4px;
+
+    -webkit-transition: top 0.5s ease-out,opacity 0.2s ease-out;
+    -moz-transition: top 0.5s ease-out,opacity 0.2s ease-out;
+    -o-transition: top 0.5s ease-out,opacity 0.2s ease-out;
+    transition: top 0.5s ease-out,opacity 0.2s ease-out;    
+
+    visibility:hidden;
+
+    -webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175);
+    box-shadow: 0 6px 12px rgba(0,0,0,.175);
+}
+
+.cg-notify-message-center {
+    left:50%;
+}
+
+.cg-notify-message-left {
+    left:15px;
+}
+
+.cg-notify-message-right {
+    right:15px;
+}
+
+.cg-notify-message a {
+    font-weight:bold;
+    color:inherit;
+}
+
+.cg-notify-message a:hover {
+    color:inherit;
+}
+
+.cg-notify-close {
+    -webkit-appearance: none;
+    padding: 0;
+    cursor: pointer;
+    background: 0 0;
+    border: 0;
+    font-size: 21px;
+    font-weight: 700;
+    line-height: 1;
+    color: #000;
+    text-shadow: 0 1px 0 #fff;
+    filter: alpha(opacity=20);
+    opacity: .2;
+
+    position: absolute;
+    top: 0px;
+    right: 3px;
+    line-height: 15px;    
+}
+
+.cg-notify-close:hover, .cg-notify-close:focus {
+    color: #000;
+    text-decoration: none;
+    cursor: pointer;
+    filter: alpha(opacity=50);
+    opacity: .5;
+}
+
+.cg-notify-sr-only {
+    position: absolute;
+    width: 1px;
+    height: 1px;
+    padding: 0;
+    margin: -1px;
+    overflow: hidden;
+    clip: rect(0,0,0,0);
+    border: 0;
+}

+ 20 - 0
front/js/angular-notify/angular-notify.html

@@ -0,0 +1,20 @@
+<div class="cg-notify-message" ng-class="[$classes, 
+    $position === 'center' ? 'cg-notify-message-center' : '',
+    $position === 'left' ? 'cg-notify-message-left' : '',
+    $position === 'right' ? 'cg-notify-message-right' : '']"
+    ng-style="{'margin-left': $centerMargin}">
+
+    <div ng-show="!$messageTemplate">
+        {{$message}}
+    </div>
+
+    <div ng-show="$messageTemplate" class="cg-notify-message-template">
+        
+    </div>
+
+    <button type="button" class="cg-notify-close" ng-click="$close()">
+        <span aria-hidden="true">&times;</span>
+        <span class="cg-notify-sr-only">Close</span>
+    </button>
+
+</div>

+ 156 - 0
front/js/angular-notify/angular-notify.js

@@ -0,0 +1,156 @@
+angular.module('cgNotify', []).factory('notify',['$timeout','$http','$compile','$templateCache','$rootScope',
+    function($timeout,$http,$compile,$templateCache,$rootScope){
+
+        var startTop = 10;
+        var verticalSpacing = 15;
+        var defaultDuration = 10000;
+        var defaultTemplateUrl = 'angular-notify.html';
+        var position = 'center';
+        var container = document.body;
+        var maximumOpen = 0;
+
+        var messageElements = [];
+        var openNotificationsScope = [];
+
+        var notify = function(args){
+
+            if (typeof args !== 'object'){
+                args = {message:args};
+            }
+
+            args.duration = args.duration ? args.duration : defaultDuration;
+            args.templateUrl = args.templateUrl ? args.templateUrl : defaultTemplateUrl;
+            args.container = args.container ? args.container : container;
+            args.classes = args.classes ? args.classes : '';
+
+            var scope = args.scope ? args.scope.$new() : $rootScope.$new();
+            scope.$position = args.position ? args.position : position;
+            scope.$message = args.message;
+            scope.$classes = args.classes;
+            scope.$messageTemplate = args.messageTemplate;
+
+            if (maximumOpen > 0) {
+                var numToClose = (openNotificationsScope.length + 1) - maximumOpen;
+                for (var i = 0; i < numToClose; i++) {
+                    openNotificationsScope[i].$close();
+                }
+            }
+
+            $http.get(args.templateUrl,{cache: $templateCache}).success(function(template){
+
+                var templateElement = $compile(template)(scope);
+                templateElement.bind('webkitTransitionEnd oTransitionEnd otransitionend transitionend msTransitionEnd', function(e){
+                    if (e.propertyName === 'opacity' || e.currentTarget.style.opacity === 0 || 
+                        (e.originalEvent && e.originalEvent.propertyName === 'opacity')){
+
+                        templateElement.remove();
+                        messageElements.splice(messageElements.indexOf(templateElement),1);
+                        openNotificationsScope.splice(openNotificationsScope.indexOf(scope),1);
+                        layoutMessages();
+                    }
+                });
+
+                if (args.messageTemplate){
+                    var messageTemplateElement;
+                    for (var i = 0; i < templateElement.children().length; i ++){
+                        if (angular.element(templateElement.children()[i]).hasClass('cg-notify-message-template')){
+                            messageTemplateElement = angular.element(templateElement.children()[i]);
+                            break;
+                        }
+                    }
+                    if (messageTemplateElement){
+                        messageTemplateElement.append($compile(args.messageTemplate)(scope));
+                    } else {
+                        throw new Error('cgNotify could not find the .cg-notify-message-template element in '+args.templateUrl+'.');
+                    }
+                }
+
+                angular.element(args.container).append(templateElement);
+                messageElements.push(templateElement);
+
+                if (scope.$position === 'center'){
+                    $timeout(function(){
+                        scope.$centerMargin = '-' + (templateElement[0].offsetWidth /2) + 'px';
+                    });
+                }
+
+                scope.$close = function(){
+                    templateElement.css('opacity',0).attr('data-closing','true');
+                    layoutMessages();
+                };
+
+                var layoutMessages = function(){
+                    var j = 0;
+                    var currentY = startTop;
+                    for(var i = messageElements.length - 1; i >= 0; i --){
+                        var shadowHeight = 10;
+                        var element = messageElements[i];
+                        var height = element[0].offsetHeight;
+                        var top = currentY + height + shadowHeight;
+                        if (element.attr('data-closing')){
+                            top += 20;
+                        } else {
+                            currentY += height + verticalSpacing;
+                        }
+                        element.css('top',top + 'px').css('margin-top','-' + (height+shadowHeight) + 'px').css('visibility','visible');
+                        j ++;
+                    }
+                };
+
+                $timeout(function(){
+                    layoutMessages();
+                });
+
+                if (args.duration > 0){
+                    $timeout(function(){
+                        scope.$close();
+                    },args.duration);
+                }
+
+            }).error(function(data){
+                    throw new Error('Template specified for cgNotify ('+args.templateUrl+') could not be loaded. ' + data);
+            });
+
+            var retVal = {};
+            
+            retVal.close = function(){
+                if (scope.$close){
+                    scope.$close();
+                }
+            };
+
+            Object.defineProperty(retVal,'message',{
+                get: function(){
+                    return scope.$message;
+                },
+                set: function(val){
+                    scope.$message = val;
+                }
+            });
+
+            openNotificationsScope.push(scope);
+
+            return retVal;
+
+        };
+
+        notify.config = function(args){
+            startTop = !angular.isUndefined(args.startTop) ? args.startTop : startTop;
+            verticalSpacing = !angular.isUndefined(args.verticalSpacing) ? args.verticalSpacing : verticalSpacing;
+            defaultDuration = !angular.isUndefined(args.duration) ? args.duration : defaultDuration;
+            defaultTemplateUrl = args.templateUrl ? args.templateUrl : defaultTemplateUrl;
+            position = !angular.isUndefined(args.position) ? args.position : position;
+            container = args.container ? args.container : container;
+            maximumOpen = args.maximumOpen ? args.maximumOpen : maximumOpen;
+        };
+
+        notify.closeAll = function(){
+            for(var i = messageElements.length - 1; i >= 0; i --){
+                var element = messageElements[i];
+                element.css('opacity',0);
+            }
+        };
+
+        return notify;
+    }
+]);

+ 83 - 0
front/js/angular-notify/dist/angular-notify.css

@@ -0,0 +1,83 @@
+.cg-notify-message {
+    position:fixed;
+    top:0px;
+    z-index: 9999;
+    max-width:400px;
+    text-align: center;
+
+    background-color: #d9edf7;
+    color: #31708f;
+    padding: 15px;
+    border: 1px solid #bce8f1;
+    border-radius: 4px;
+
+    -webkit-transition: top 0.5s ease-out,opacity 0.2s ease-out;
+    -moz-transition: top 0.5s ease-out,opacity 0.2s ease-out;
+    -o-transition: top 0.5s ease-out,opacity 0.2s ease-out;
+    transition: top 0.5s ease-out,opacity 0.2s ease-out;    
+
+    visibility:hidden;
+
+    -webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175);
+    box-shadow: 0 6px 12px rgba(0,0,0,.175);
+}
+
+.cg-notify-message-center {
+    left:50%;
+}
+
+.cg-notify-message-left {
+    left:15px;
+}
+
+.cg-notify-message-right {
+    right:15px;
+}
+
+.cg-notify-message a {
+    font-weight:bold;
+    color:inherit;
+}
+
+.cg-notify-message a:hover {
+    color:inherit;
+}
+
+.cg-notify-close {
+    -webkit-appearance: none;
+    padding: 0;
+    cursor: pointer;
+    background: 0 0;
+    border: 0;
+    font-size: 21px;
+    font-weight: 700;
+    line-height: 1;
+    color: #000;
+    text-shadow: 0 1px 0 #fff;
+    filter: alpha(opacity=20);
+    opacity: .2;
+
+    position: absolute;
+    top: 0px;
+    right: 3px;
+    line-height: 15px;    
+}
+
+.cg-notify-close:hover, .cg-notify-close:focus {
+    color: #000;
+    text-decoration: none;
+    cursor: pointer;
+    filter: alpha(opacity=50);
+    opacity: .5;
+}
+
+.cg-notify-sr-only {
+    position: absolute;
+    width: 1px;
+    height: 1px;
+    padding: 0;
+    margin: -1px;
+    overflow: hidden;
+    clip: rect(0,0,0,0);
+    border: 0;
+}

+ 184 - 0
front/js/angular-notify/dist/angular-notify.js

@@ -0,0 +1,184 @@
+angular.module('cgNotify', []).factory('notify',['$timeout','$http','$compile','$templateCache','$rootScope',
+    function($timeout,$http,$compile,$templateCache,$rootScope){
+
+        var startTop = 10;
+        var verticalSpacing = 15;
+        var defaultDuration = 10000;
+        var defaultTemplateUrl = 'angular-notify.html';
+        var position = 'center';
+        var container = document.body;
+        var maximumOpen = 0;
+
+        var messageElements = [];
+        var openNotificationsScope = [];
+
+        var notify = function(args){
+
+            if (typeof args !== 'object'){
+                args = {message:args};
+            }
+
+            args.duration = args.duration ? args.duration : defaultDuration;
+            args.templateUrl = args.templateUrl ? args.templateUrl : defaultTemplateUrl;
+            args.container = args.container ? args.container : container;
+            args.classes = args.classes ? args.classes : '';
+
+            var scope = args.scope ? args.scope.$new() : $rootScope.$new();
+            scope.$position = args.position ? args.position : position;
+            scope.$message = args.message;
+            scope.$classes = args.classes;
+            scope.$messageTemplate = args.messageTemplate;
+
+            if (maximumOpen > 0) {
+                var numToClose = (openNotificationsScope.length + 1) - maximumOpen;
+                for (var i = 0; i < numToClose; i++) {
+                    openNotificationsScope[i].$close();
+                }
+            }
+
+            $http.get(args.templateUrl,{cache: $templateCache}).success(function(template){
+
+                var templateElement = $compile(template)(scope);
+                templateElement.bind('webkitTransitionEnd oTransitionEnd otransitionend transitionend msTransitionEnd', function(e){
+                    if (e.propertyName === 'opacity' || e.currentTarget.style.opacity === 0 || 
+                        (e.originalEvent && e.originalEvent.propertyName === 'opacity')){
+
+                        templateElement.remove();
+                        messageElements.splice(messageElements.indexOf(templateElement),1);
+                        openNotificationsScope.splice(openNotificationsScope.indexOf(scope),1);
+                        layoutMessages();
+                    }
+                });
+
+                if (args.messageTemplate){
+                    var messageTemplateElement;
+                    for (var i = 0; i < templateElement.children().length; i ++){
+                        if (angular.element(templateElement.children()[i]).hasClass('cg-notify-message-template')){
+                            messageTemplateElement = angular.element(templateElement.children()[i]);
+                            break;
+                        }
+                    }
+                    if (messageTemplateElement){
+                        messageTemplateElement.append($compile(args.messageTemplate)(scope));
+                    } else {
+                        throw new Error('cgNotify could not find the .cg-notify-message-template element in '+args.templateUrl+'.');
+                    }
+                }
+
+                angular.element(args.container).append(templateElement);
+                messageElements.push(templateElement);
+
+                if (scope.$position === 'center'){
+                    $timeout(function(){
+                        scope.$centerMargin = '-' + (templateElement[0].offsetWidth /2) + 'px';
+                    });
+                }
+
+                scope.$close = function(){
+                    templateElement.css('opacity',0).attr('data-closing','true');
+                    layoutMessages();
+                };
+
+                var layoutMessages = function(){
+                    var j = 0;
+                    var currentY = startTop;
+                    for(var i = messageElements.length - 1; i >= 0; i --){
+                        var shadowHeight = 10;
+                        var element = messageElements[i];
+                        var height = element[0].offsetHeight;
+                        var top = currentY + height + shadowHeight;
+                        if (element.attr('data-closing')){
+                            top += 20;
+                        } else {
+                            currentY += height + verticalSpacing;
+                        }
+                        element.css('top',top + 'px').css('margin-top','-' + (height+shadowHeight) + 'px').css('visibility','visible');
+                        j ++;
+                    }
+                };
+
+                $timeout(function(){
+                    layoutMessages();
+                });
+
+                if (args.duration > 0){
+                    $timeout(function(){
+                        scope.$close();
+                    },args.duration);
+                }
+
+            }).error(function(data){
+                    throw new Error('Template specified for cgNotify ('+args.templateUrl+') could not be loaded. ' + data);
+            });
+
+            var retVal = {};
+            
+            retVal.close = function(){
+                if (scope.$close){
+                    scope.$close();
+                }
+            };
+
+            Object.defineProperty(retVal,'message',{
+                get: function(){
+                    return scope.$message;
+                },
+                set: function(val){
+                    scope.$message = val;
+                }
+            });
+
+            openNotificationsScope.push(scope);
+
+            return retVal;
+
+        };
+
+        notify.config = function(args){
+            startTop = !angular.isUndefined(args.startTop) ? args.startTop : startTop;
+            verticalSpacing = !angular.isUndefined(args.verticalSpacing) ? args.verticalSpacing : verticalSpacing;
+            defaultDuration = !angular.isUndefined(args.duration) ? args.duration : defaultDuration;
+            defaultTemplateUrl = args.templateUrl ? args.templateUrl : defaultTemplateUrl;
+            position = !angular.isUndefined(args.position) ? args.position : position;
+            container = args.container ? args.container : container;
+            maximumOpen = args.maximumOpen ? args.maximumOpen : maximumOpen;
+        };
+
+        notify.closeAll = function(){
+            for(var i = messageElements.length - 1; i >= 0; i --){
+                var element = messageElements[i];
+                element.css('opacity',0);
+            }
+        };
+
+        return notify;
+    }
+]);
+
+angular.module('cgNotify').run(['$templateCache', function($templateCache) {
+  'use strict';
+
+  $templateCache.put('angular-notify.html',
+    "<div class=\"cg-notify-message\" ng-class=\"[$classes, \n" +
+    "    $position === 'center' ? 'cg-notify-message-center' : '',\n" +
+    "    $position === 'left' ? 'cg-notify-message-left' : '',\n" +
+    "    $position === 'right' ? 'cg-notify-message-right' : '']\"\n" +
+    "    ng-style=\"{'margin-left': $centerMargin}\">\n" +
+    "\n" +
+    "    <div ng-show=\"!$messageTemplate\">\n" +
+    "        {{$message}}\n" +
+    "    </div>\n" +
+    "\n" +
+    "    <div ng-show=\"$messageTemplate\" class=\"cg-notify-message-template\">\n" +
+    "        \n" +
+    "    </div>\n" +
+    "\n" +
+    "    <button type=\"button\" class=\"cg-notify-close\" ng-click=\"$close()\">\n" +
+    "        <span aria-hidden=\"true\">&times;</span>\n" +
+    "        <span class=\"cg-notify-sr-only\">Close</span>\n" +
+    "    </button>\n" +
+    "\n" +
+    "</div>"
+  );
+
+}]);

Разлика између датотеке није приказан због своје велике величине
+ 1 - 0
front/js/angular-notify/dist/angular-notify.min.css


Разлика између датотеке није приказан због своје велике величине
+ 1 - 0
front/js/angular-notify/dist/angular-notify.min.js


Разлика између датотеке није приказан због своје велике величине
+ 15 - 0
front/js/angular-route.min.js


Разлика између датотеке није приказан због своје велике величине
+ 293 - 0
front/js/angular.min.js


Разлика између датотеке није приказан због своје велике величине
+ 10 - 0
front/js/ui-bootstrap-tpls-0.13.4.min.js


Разлика између датотеке није приказан због своје велике величине
+ 9 - 0
front/js/ui-bootstrap.min.js


+ 27 - 0
front/views/raw.html

@@ -0,0 +1,27 @@
+<div>
+RAW
+<button class="btn">SUBIR</button>
+<table class="table table-striped">
+	<tr>
+		<th>Fecha</th>
+		<th>Archivo</th>
+		<th>Duracion</th>
+		<th>Editar</th>
+	</tr>
+	<tr ng-repeat="r in rawlist">
+		<td>
+			{{r.date}}
+		</td>
+		<td>
+			{{r.file}}
+		</td>
+		<td>
+			{{r.length}}
+		</td>
+		<td>
+			<a ng-href="/process/{{r.file}}">editar</a>
+		</td>
+	</tr>
+</table>
+</div>
+