Files added to repository
This commit is contained in:
		
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					# DataBank-Extension
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Clone this repository
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					git clone http://git.wacanal.cloud/ernie/databank-extension.git
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2. Open Google Chrome and go to the option "Extensions->Manage Extensions"
 | 
				
			||||||
 | 
					3. Once in the extension manager, select "Load unpacked"
 | 
				
			||||||
 | 
					4. Select the cloned repository
 | 
				
			||||||
							
								
								
									
										5
									
								
								background.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								background.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					chrome.browserAction.onClicked.addListener(function(tab){
 | 
				
			||||||
 | 
					     chrome.tabs.create({
 | 
				
			||||||
 | 
					        url: ("index.html")
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										0
									
								
								content.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								content.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										325
									
								
								estilo.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										325
									
								
								estilo.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,325 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Al cuerpo de la
 | 
				
			||||||
 | 
					pagina se aplica el tamaño de fuente
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					 html{
 | 
				
			||||||
 | 
						overflow: scroll;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 body {
 | 
				
			||||||
 | 
					  font-size: 12px;
 | 
				
			||||||
 | 
					  background-size: cover;
 | 
				
			||||||
 | 
					  background: linear-gradient(rgba(255,255,255,0.7), rgba(255, 255, 255, 0.7)), url("https://images-ext-2.discordapp.net/external/I4WDr_mFwmEPpd1gYZpWqmZ8Fod844njMPCXgLycCfk/https/www.incimages.com/uploaded_files/image/1920x1080/getty_913017342_415366.jpg?width=1191&height=670");
 | 
				
			||||||
 | 
					  background-size: 1850px 850px;
 | 
				
			||||||
 | 
					  font-family: 'Varela Round', sans-serif;
 | 
				
			||||||
 | 
					  font-size: 13px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * se aplica el ancho, margen centrado
 | 
				
			||||||
 | 
					 * borde de un pixel con redondeado, y rellenado
 | 
				
			||||||
 | 
					 * a la izquierda y derecha
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#Contenedor{
 | 
				
			||||||
 | 
						width: 400px;
 | 
				
			||||||
 | 
						margin: 50px auto;
 | 
				
			||||||
 | 
						height: 400px;
 | 
				
			||||||
 | 
						border-radius:8px;
 | 
				
			||||||
 | 
						padding: 0px 9px 0px 9px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Aplicando al icono de usuario el color de fondo,
 | 
				
			||||||
 | 
					 * rellenado de 20px y un redondeado de 120px en forma
 | 
				
			||||||
 | 
					 * de un circulo
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					.Icon span{
 | 
				
			||||||
 | 
					      background: #A8A6A6;
 | 
				
			||||||
 | 
					      padding: 20px;
 | 
				
			||||||
 | 
					      border-radius: 120px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Se aplica al contenedor madre un margen de tamaño 10px hacia la cabecera y pie,
 | 
				
			||||||
 | 
					 * color de fuente blanco,un tamaño de fuente 50px y texto centrado.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					.Icon{
 | 
				
			||||||
 | 
					     margin-top: 10px;
 | 
				
			||||||
 | 
					     margin-bottom:10px; 
 | 
				
			||||||
 | 
					     color: #FFF;
 | 
				
			||||||
 | 
					     font-size: 50px;
 | 
				
			||||||
 | 
					     text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Se aplica al contenedor donde muestra en el pie
 | 
				
			||||||
 | 
					 * la opción de olvidaste tu contraseña?
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					.opcioncontra{
 | 
				
			||||||
 | 
						text-align: center;
 | 
				
			||||||
 | 
						margin-top: 20px;
 | 
				
			||||||
 | 
						font-size: 14px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * En las siguientes lineas
 | 
				
			||||||
 | 
					 * se define el diseño adaptable, para que
 | 
				
			||||||
 | 
					 * se muestre en los dispositivos móviles
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/******************************************/
 | 
				
			||||||
 | 
					/***    DISEÑO PARA MOVILES 320        ****/
 | 
				
			||||||
 | 
					/******************************************/
 | 
				
			||||||
 | 
					@media only screen and (max-width:320px){
 | 
				
			||||||
 | 
						#Contenedor{
 | 
				
			||||||
 | 
							width: 100%;
 | 
				
			||||||
 | 
							height: auto;
 | 
				
			||||||
 | 
							margin: 0px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/******************************************/
 | 
				
			||||||
 | 
					/***    DISEÑO PARA MOVILES 240        ****/
 | 
				
			||||||
 | 
					/******************************************/
 | 
				
			||||||
 | 
					@media only screen and (max-width:240px){
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.buttonAddPass {
 | 
				
			||||||
 | 
						position: relative;
 | 
				
			||||||
 | 
						top: 100px;
 | 
				
			||||||
 | 
					    left: 1217px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.buttonAddUser {
 | 
				
			||||||
 | 
						text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  	/* Modal styles */
 | 
				
			||||||
 | 
						.modal .modal-dialog {
 | 
				
			||||||
 | 
							max-width: 450px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.modal .modal-header, .modal .modal-body, .modal .modal-footer {
 | 
				
			||||||
 | 
							padding: 20px 30px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.modal .modal-content {
 | 
				
			||||||
 | 
							border-radius: 3px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.modal .modal-footer {
 | 
				
			||||||
 | 
							background: #ecf0f1;
 | 
				
			||||||
 | 
							border-radius: 0 0 3px 3px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    .modal .modal-title {
 | 
				
			||||||
 | 
					        display: inline-block;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
						.modal .form-control {
 | 
				
			||||||
 | 
							border-radius: 2px;
 | 
				
			||||||
 | 
							box-shadow: none;
 | 
				
			||||||
 | 
							border-color: #dddddd;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.modal textarea.form-control {
 | 
				
			||||||
 | 
							resize: vertical;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.modal .btn {
 | 
				
			||||||
 | 
							border-radius: 2px;
 | 
				
			||||||
 | 
							min-width: 100px;
 | 
				
			||||||
 | 
						}	
 | 
				
			||||||
 | 
						.modal form label {
 | 
				
			||||||
 | 
							font-weight: normal;
 | 
				
			||||||
 | 
						}	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Table styles */
 | 
				
			||||||
 | 
						.table-responsive {
 | 
				
			||||||
 | 
					        margin: 30px 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
						.table-wrapper {
 | 
				
			||||||
 | 
							min-width: 1000px;
 | 
				
			||||||
 | 
					        background: #fff;
 | 
				
			||||||
 | 
					        padding: 20px 25px;
 | 
				
			||||||
 | 
							border-radius: 3px;
 | 
				
			||||||
 | 
					        box-shadow: 0 1px 1px rgba(0,0,0,.05);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
						.table-title {        
 | 
				
			||||||
 | 
							padding-bottom: 15px;
 | 
				
			||||||
 | 
							background: #435d7d;
 | 
				
			||||||
 | 
							color: #fff;
 | 
				
			||||||
 | 
							padding: 16px 30px;
 | 
				
			||||||
 | 
							margin: -20px -25px 10px;
 | 
				
			||||||
 | 
							border-radius: 3px 3px 0 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .table-title h2 {
 | 
				
			||||||
 | 
							margin: 5px 0 0;
 | 
				
			||||||
 | 
							font-size: 24px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.table-title .btn-group {
 | 
				
			||||||
 | 
							float: right;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.table-title .btn {
 | 
				
			||||||
 | 
							color: #fff;
 | 
				
			||||||
 | 
							float: right;
 | 
				
			||||||
 | 
							font-size: 13px;
 | 
				
			||||||
 | 
							border: none;
 | 
				
			||||||
 | 
							min-width: 50px;
 | 
				
			||||||
 | 
							border-radius: 2px;
 | 
				
			||||||
 | 
							border: none;
 | 
				
			||||||
 | 
							outline: none !important;
 | 
				
			||||||
 | 
							margin-left: 10px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.table-title .btn i {
 | 
				
			||||||
 | 
							float: left;
 | 
				
			||||||
 | 
							font-size: 21px;
 | 
				
			||||||
 | 
							margin-right: 5px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						.table-title .btn span {
 | 
				
			||||||
 | 
							float: left;
 | 
				
			||||||
 | 
							margin-top: 2px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    table.table tr th, table.table tr td {
 | 
				
			||||||
 | 
					        border-color: #e9e9e9;
 | 
				
			||||||
 | 
							padding: 12px 15px;
 | 
				
			||||||
 | 
							vertical-align: middle;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
						table.table tr th:first-child {
 | 
				
			||||||
 | 
							width: 250px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						table.table tr th:last-child {
 | 
				
			||||||
 | 
							width: 130px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    table.table-striped tbody tr:nth-of-type(odd) {
 | 
				
			||||||
 | 
					    	background-color: #fcfcfc;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						table.table-striped.table-hover tbody tr:hover {
 | 
				
			||||||
 | 
							background: #f5f5f5;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    table.table th i {
 | 
				
			||||||
 | 
					        font-size: 13px;
 | 
				
			||||||
 | 
					        margin: 0 5px;
 | 
				
			||||||
 | 
					        cursor: pointer;
 | 
				
			||||||
 | 
					    }	
 | 
				
			||||||
 | 
					    table.table td:last-child i {
 | 
				
			||||||
 | 
							opacity: 0.9;
 | 
				
			||||||
 | 
							font-size: 22px;
 | 
				
			||||||
 | 
					        margin: 0 5px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
						table.table td a {
 | 
				
			||||||
 | 
							font-weight: bold;
 | 
				
			||||||
 | 
							color: #566787;
 | 
				
			||||||
 | 
							display: inline-block;
 | 
				
			||||||
 | 
							text-decoration: none;
 | 
				
			||||||
 | 
							outline: none !important;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						table.table td a:hover {
 | 
				
			||||||
 | 
							color: #2196F3;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						table.table td a.edit {
 | 
				
			||||||
 | 
					        color: #FFC107;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    table.table td a.delete {
 | 
				
			||||||
 | 
					        color: #F44336;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    table.table td i {
 | 
				
			||||||
 | 
					        font-size: 19px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
						table.table .avatar {
 | 
				
			||||||
 | 
							border-radius: 50%;
 | 
				
			||||||
 | 
							vertical-align: middle;
 | 
				
			||||||
 | 
							margin-right: 10px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						a {
 | 
				
			||||||
 | 
							cursor:pointer;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.passCaja{
 | 
				
			||||||
 | 
							color:transparent;
 | 
				
			||||||
 | 
							cursor:default;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.ojo{
 | 
				
			||||||
 | 
							cursor:pointer;
 | 
				
			||||||
 | 
							color:  #7e9ac7 ; 
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						#opcionesContraseña{
 | 
				
			||||||
 | 
							height: 45px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.nav_menu{
 | 
				
			||||||
 | 
							margin-top: 30px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.nav_menu_tabs{
 | 
				
			||||||
 | 
							display: inline-block;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.nav_menu_botones{
 | 
				
			||||||
 | 
							float: right;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*mostrar y ocultar tablas compartido y privado*/
 | 
				
			||||||
 | 
						.archivosOcultos{
 | 
				
			||||||
 | 
							display:none !important;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.modal-compartir{
 | 
				
			||||||
 | 
							/*text-align: center;*/
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.multiselect-container{
 | 
				
			||||||
 | 
							overflow:scroll;
 | 
				
			||||||
 | 
							max-height: 200px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.isDisabled {
 | 
				
			||||||
 | 
							color: currentColor;
 | 
				
			||||||
 | 
							cursor: not-allowed;
 | 
				
			||||||
 | 
							opacity: 0.5;
 | 
				
			||||||
 | 
							text-decoration: none;
 | 
				
			||||||
 | 
							pointer-events: none; 
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						#archivosCompartidosList{
 | 
				
			||||||
 | 
							overflow:scroll;
 | 
				
			||||||
 | 
							max-height: 200px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						#archivosCompartidosConmigoList{
 | 
				
			||||||
 | 
							overflow:scroll;
 | 
				
			||||||
 | 
							max-height: 200px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.qrCode{
 | 
				
			||||||
 | 
							display: block;
 | 
				
			||||||
 | 
							margin: auto;
 | 
				
			||||||
 | 
							margin-top: 50px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.badgebox
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							opacity: 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.badgebox + .badge
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							/* Move the check mark away when unchecked */
 | 
				
			||||||
 | 
							text-indent: -999999px;
 | 
				
			||||||
 | 
							/* Makes the badge's width stay the same checked and unchecked */
 | 
				
			||||||
 | 
							width: 27px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.badgebox:focus + .badge
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							/* Set something to make the badge looks focused */
 | 
				
			||||||
 | 
							/* This really depends on the application, in my case it was: */
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/* Adding a light border */
 | 
				
			||||||
 | 
							box-shadow: inset 0px 0px 5px;
 | 
				
			||||||
 | 
							/* Taking the difference out of the padding */
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						.badgebox:checked + .badge
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							/* Move the check mark back when checked */
 | 
				
			||||||
 | 
							text-indent: 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								icon128.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								icon128.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 2.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								icon16.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								icon16.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 500 B  | 
							
								
								
									
										
											BIN
										
									
								
								icon32.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								icon32.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 749 B  | 
							
								
								
									
										
											BIN
										
									
								
								icon48.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								icon48.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 1.0 KiB  | 
							
								
								
									
										72
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
							<html lang="es">
 | 
				
			||||||
 | 
							<head>
 | 
				
			||||||
 | 
							    <title>Proyecto ES</title>
 | 
				
			||||||
 | 
							    <meta charset="UTF-8">
 | 
				
			||||||
 | 
								<!-- vinculo a bootstrap -->
 | 
				
			||||||
 | 
								<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
 | 
				
			||||||
 | 
								<!-- Temas-->
 | 
				
			||||||
 | 
								<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
 | 
				
			||||||
 | 
								<!-- se vincula al hoja de estilo para definir el aspecto del formulario de login-->  
 | 
				
			||||||
 | 
								<link rel="stylesheet" type="text/css" href="./estilo.css">
 | 
				
			||||||
 | 
								<link rel="stylesheet" href="http://cdn.datatables.net/1.10.20/css/jquery.dataTables.min.css">
 | 
				
			||||||
 | 
								<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round">
 | 
				
			||||||
 | 
								<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
 | 
				
			||||||
 | 
								<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
 | 
				
			||||||
 | 
								<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
 | 
				
			||||||
 | 
								<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.16/css/bootstrap-multiselect.css">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<!--<script src="https://unpkg.com/loglevel/dist/loglevel.min.js" defer>-->
 | 
				
			||||||
 | 
								</script>
 | 
				
			||||||
 | 
								<script type="module" src="./scripts/plog.js" defer></script>
 | 
				
			||||||
 | 
								<script type="module" src="script.js" defer></script>
 | 
				
			||||||
 | 
								<script type="text/javascript" src="./scripts/qrcode.js" defer></script>
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
								<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js" defer></script>
 | 
				
			||||||
 | 
								<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js" defer></script>
 | 
				
			||||||
 | 
								<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.16/js/bootstrap-multiselect.js" defer></script>
 | 
				
			||||||
 | 
								<script src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js" defer></script>
 | 
				
			||||||
 | 
								<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous" defer></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							</head>
 | 
				
			||||||
 | 
							<body>
 | 
				
			||||||
 | 
							 <div id="Contenedor">
 | 
				
			||||||
 | 
								<div class="Icon">
 | 
				
			||||||
 | 
									<!--Icono de usuario-->
 | 
				
			||||||
 | 
									<span class="glyphicon glyphicon-user"></span>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
									<div class="input-group input-group-lg">
 | 
				
			||||||
 | 
									<span class="input-group-addon" id="sizing-addon1"><i class="glyphicon glyphicon-user"></i></span>
 | 
				
			||||||
 | 
									<input type="text"  class="form-control" name="usuario" placeholder="Usuario" id="Usuario" aria-describedby="sizing-addon1" required>
 | 
				
			||||||
 | 
									</div>
 | 
				
			||||||
 | 
									<br>
 | 
				
			||||||
 | 
									<div class="input-group input-group-lg">
 | 
				
			||||||
 | 
									<span class="input-group-addon" id="Span1"><i class="glyphicon glyphicon-lock"></i></span>
 | 
				
			||||||
 | 
									<input type="password"  id= "Contraseña" name="contra" class="form-control" placeholder="Contraseña" aria-describedby="sizing-addon1" required>
 | 
				
			||||||
 | 
									<span class="input-group-btn">
 | 
				
			||||||
 | 
										<div class="btn-group">
 | 
				
			||||||
 | 
											<button type="button" id="opcionesContraseña" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
 | 
				
			||||||
 | 
											<span class="caret"></span>
 | 
				
			||||||
 | 
											<span class="sr-only">Desplegar menú</span>
 | 
				
			||||||
 | 
											</button>
 | 
				
			||||||
 | 
											<ul class="dropdown-menu" role="menu">
 | 
				
			||||||
 | 
											<li><a id = "generarContraseña" >Generar Contraseña</a></li>
 | 
				
			||||||
 | 
											<li><a id = "verContraseña">Ver</a></li>
 | 
				
			||||||
 | 
											</ul>
 | 
				
			||||||
 | 
										</div>
 | 
				
			||||||
 | 
									</span>
 | 
				
			||||||
 | 
									</div>
 | 
				
			||||||
 | 
									<br>
 | 
				
			||||||
 | 
									<button class="btn btn-lg btn-primary btn-block btn-signin" id="IngresoLog" type="submit">Entrar</button>
 | 
				
			||||||
 | 
									<button class="btn btn-lg btn-primary btn-block btn-signup" id="RegistroLog" type="submit">Registrarse</button>
 | 
				
			||||||
 | 
							 </div>
 | 
				
			||||||
 | 
								<!-- libreria Jquery  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>-->
 | 
				
			||||||
 | 
								<!-- AES -->
 | 
				
			||||||
 | 
								<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script>
 | 
				
			||||||
 | 
								<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										32
									
								
								manifest.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								manifest.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "manifest_version": 2,
 | 
				
			||||||
 | 
					  "name": "SE",
 | 
				
			||||||
 | 
					  "version": "1.0.0",
 | 
				
			||||||
 | 
					  "description": "Extension for SecureDataBank",
 | 
				
			||||||
 | 
					  "icons": {
 | 
				
			||||||
 | 
					    "128": "icon128.png",
 | 
				
			||||||
 | 
					    "32": "icon32.png",
 | 
				
			||||||
 | 
					    "48": "icon48.png"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "browser_action": {
 | 
				
			||||||
 | 
					    "default_icon": {
 | 
				
			||||||
 | 
					      "16": "icon16.png",
 | 
				
			||||||
 | 
					      "32": "icon32.png"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "default_title": "Extension for SecureDataBank"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "content_security_policy": "script-src 'self' https://unpkg.com/ https://fonts.googleapis.com/ https://cdn.datatables.net/ https://maxcdn.bootstrapcdn.com/ https://ajax.googleapis.com/ https://cdnjs.cloudflare.com/; object-src 'self'",
 | 
				
			||||||
 | 
					  "background": 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "scripts": ["background.js"],
 | 
				
			||||||
 | 
						"persistent": false
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  "content_scripts": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "matches": ["<all_urls>"],
 | 
				
			||||||
 | 
					      "js": ["content.js"],
 | 
				
			||||||
 | 
					      "run_at": "document_end"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										75
									
								
								scripts/contraseñaSeguras.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								scripts/contraseñaSeguras.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
				
			|||||||
 | 
					let caracteresEspeciales_cantidad = 0;
 | 
				
			||||||
 | 
					let numeros_cantidad = 0;
 | 
				
			||||||
 | 
					let mayusculas_cantidad = 0;
 | 
				
			||||||
 | 
					let minusculas_cantidad = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let longitud_contraseña = 25; //Longitud
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let contraseña = new Array(); //Contraseña final
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let caracteres_especiales = '!^$+=#€?@';
 | 
				
			||||||
 | 
					let numeros = '0123456789'; 
 | 
				
			||||||
 | 
					let mayusculas = 'ABCDEFGHJKLMNOPQRSTUVWXYZ';
 | 
				
			||||||
 | 
					let minusculas = 'abcdefghijklmnopqrstuvwxyz';
 | 
				
			||||||
 | 
					let cadenaAleatoria = '!^$+=#€?@0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const shuffleArray = array => {
 | 
				
			||||||
 | 
					    for (let i = array.length - 1; i > 0; i--) {
 | 
				
			||||||
 | 
					      const j = Math.floor(Math.random() * (i + 1));
 | 
				
			||||||
 | 
					      const temp = array[i];
 | 
				
			||||||
 | 
					      array[i] = array[j];
 | 
				
			||||||
 | 
					      array[j] = temp;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function rellenarContraseña(longitud){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    longitud_contraseña = longitud;
 | 
				
			||||||
 | 
					    cantidad();
 | 
				
			||||||
 | 
					    let index =  {index : 0}; //Para poder pasar por referencia
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    relleno(caracteresEspeciales_cantidad, caracteres_especiales, index);
 | 
				
			||||||
 | 
					    relleno(numeros_cantidad, numeros, index);
 | 
				
			||||||
 | 
					    relleno(mayusculas_cantidad, mayusculas, index);
 | 
				
			||||||
 | 
					    relleno(minusculas_cantidad, minusculas, index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(contraseña.length < longitud_contraseña){
 | 
				
			||||||
 | 
					        let diferencia = longitud_contraseña - contraseña.length;
 | 
				
			||||||
 | 
					        relleno(diferencia,cadenaAleatoria, index);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    shuffleArray(contraseña);
 | 
				
			||||||
 | 
					    let cadena = contraseña.toString();
 | 
				
			||||||
 | 
					    cadena = cadena.replaceAll(',', '');
 | 
				
			||||||
 | 
					    return cadena;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function cantidad(){
 | 
				
			||||||
 | 
					    caracteresEspeciales_cantidad = Math.floor(Math.random()*(20-15+1)+15) * (longitud_contraseña/100);
 | 
				
			||||||
 | 
					    numeros_cantidad = Math.floor(Math.random()*(25-20+1)+20) * (longitud_contraseña/100);
 | 
				
			||||||
 | 
					    mayusculas_cantidad = Math.floor(Math.random()*(25-20+1)+20) * (longitud_contraseña/100);
 | 
				
			||||||
 | 
					    minusculas_cantidad = Math.floor(Math.random()*(30-25+1)+25) * (longitud_contraseña/100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    caracteresEspeciales_cantidad = caracteresEspeciales_cantidad % 1 < 0.5 ? Math.trunc(caracteresEspeciales_cantidad) : Math.ceil(caracteresEspeciales_cantidad);
 | 
				
			||||||
 | 
					    numeros_cantidad = numeros_cantidad % 1 < 0.5 ? Math.trunc(numeros_cantidad) : Math.ceil(numeros_cantidad);
 | 
				
			||||||
 | 
					    mayusculas_cantidad = mayusculas_cantidad % 1 < 0.5 ? Math.trunc(mayusculas_cantidad) : Math.ceil(mayusculas_cantidad);
 | 
				
			||||||
 | 
					    minusculas_cantidad = minusculas_cantidad % 1 < 0.5 ? Math.trunc(minusculas_cantidad) : Math.ceil(minusculas_cantidad);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function relleno(cantidad, cadena, index){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let longitud = cadena.length-1;
 | 
				
			||||||
 | 
					    let i = index.index;
 | 
				
			||||||
 | 
					    while(cantidad !== 0){ //Se puede hacer ya que cantidad no se pasa por referencia si no por valor.
 | 
				
			||||||
 | 
					        contraseña.push(cadena.charAt(Math.floor(Math.random()*(longitud-0+1)+0)));
 | 
				
			||||||
 | 
					        i++;
 | 
				
			||||||
 | 
					        cantidad--;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    index.index = i;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { rellenarContraseña }
 | 
				
			||||||
							
								
								
									
										252
									
								
								scripts/html.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										252
									
								
								scripts/html.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,252 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * HTML de las tablas de los datos guardados
 | 
				
			||||||
 | 
					 * @returns devuelve el HTML con las tablas de los datos guardados
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					 export function bodyHTML(){
 | 
				
			||||||
 | 
					    var html=
 | 
				
			||||||
 | 
					    `<div class="container nav_menu">
 | 
				
			||||||
 | 
					      <div>
 | 
				
			||||||
 | 
					        <ul class="nav nav-pills nav_menu_tabs" role="tablist">
 | 
				
			||||||
 | 
					          <li role="presentation" class="active"><a id="aPrivate" href="#divPrivate">Archivos Privados <!--<span class="badge">42</span>--></a></li>
 | 
				
			||||||
 | 
					          <li role="presentation"><a id="aShare" href="#divShare">Archivos Compartidos</a></li>
 | 
				
			||||||
 | 
					          <li role="presentation"><a id="a2FA" href="#div2FA">2FA</a></li>
 | 
				
			||||||
 | 
					          <!--<li role="presentation"><a href="#">Messages <span class="badge">3</span></a></li>-->
 | 
				
			||||||
 | 
					        </ul>
 | 
				
			||||||
 | 
					        <div class = "nav_menu_botones"><button id="cerrarSesion" type="button" class="btn btn-secondary">Cerrar Sesión</button></div>
 | 
				
			||||||
 | 
					        <div class = "nav_menu_botones"><button id="subirDatos" type="button" class="btn btn-success" >Subir datos</button> </div>
 | 
				
			||||||
 | 
					        <div class = "nav_menu_botones"><button type="button" id="compartirDatosButton" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">Compartir</button> </div>
 | 
				
			||||||
 | 
					        <div id = "archivosCompartidosButton" class="archivosOcultos nav_menu_botones btn-group">
 | 
				
			||||||
 | 
					          <button type="button" class="btn btn-default dropdown-toggle"
 | 
				
			||||||
 | 
					                  data-toggle="dropdown">
 | 
				
			||||||
 | 
					            ArchivosCompartidos <span class="caret"></span>
 | 
				
			||||||
 | 
					          </button>
 | 
				
			||||||
 | 
					          <ul id = "archivosCompartidosList" class="dropdown-menu" role="menu">
 | 
				
			||||||
 | 
					          </ul>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id = "archivosCompartidosConmigoButton" class="archivosOcultos nav_menu_botones btn-group">
 | 
				
			||||||
 | 
					        <button type="button" class="btn btn-default dropdown-toggle"
 | 
				
			||||||
 | 
					                data-toggle="dropdown">
 | 
				
			||||||
 | 
					          ArchivosCompartidosConmigo <span class="caret"></span>
 | 
				
			||||||
 | 
					        </button> 
 | 
				
			||||||
 | 
					        <ul id = "archivosCompartidosConmigoList" class="dropdown-menu" role="menu">
 | 
				
			||||||
 | 
					        </ul>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    <div id="divPrivate">
 | 
				
			||||||
 | 
					        <div class="container">
 | 
				
			||||||
 | 
					          <div class="table-responsive">
 | 
				
			||||||
 | 
					            <div class="table-wrapper">
 | 
				
			||||||
 | 
					              <div class="table-title">
 | 
				
			||||||
 | 
					                <div class="row">
 | 
				
			||||||
 | 
					                  <div class="col-xs-6">
 | 
				
			||||||
 | 
					                    <h2><b>Usuarios</b></h2>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <div class="col-xs-6">
 | 
				
			||||||
 | 
					                    <button class="btn btn-success" id="añadirN" data-toggle="modal" data-target="#addU" type="submit"><i class="material-icons"></i> <span>Nuevo Usuario</span></button>						
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              <table class="table table-striped table-hover" id="tablaUsuarios">
 | 
				
			||||||
 | 
					                <thead>
 | 
				
			||||||
 | 
					                  <tr>
 | 
				
			||||||
 | 
					                    <th>Descripcion</th>
 | 
				
			||||||
 | 
					                    <th>Url</th>
 | 
				
			||||||
 | 
					                    <th>Usuario</th>
 | 
				
			||||||
 | 
					                    <th>Password</th>
 | 
				
			||||||
 | 
					                    <th>Acciones</th>
 | 
				
			||||||
 | 
					                  </tr>
 | 
				
			||||||
 | 
					                </thead>
 | 
				
			||||||
 | 
					                <tbody id="usuariosTable">
 | 
				
			||||||
 | 
					                </tbody>
 | 
				
			||||||
 | 
					              </table>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        <div class="container">
 | 
				
			||||||
 | 
					          <div class="table-responsive">
 | 
				
			||||||
 | 
					            <div class="table-wrapper">
 | 
				
			||||||
 | 
					              <div class="table-title">
 | 
				
			||||||
 | 
					                <div class="row">
 | 
				
			||||||
 | 
					                  <div class="col-xs-6">
 | 
				
			||||||
 | 
					                    <h2><b>Notas</b></h2>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <div class="col-xs-6">
 | 
				
			||||||
 | 
					                    <button class="btn btn-success" id="añadirN" data-toggle="modal" data-target="#addU" type="submit"><i class="material-icons"></i> <span>Nueva Nota</span></button>						
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              <table class="table table-striped table-hover"  id="tablaNotas">
 | 
				
			||||||
 | 
					                <thead>
 | 
				
			||||||
 | 
					                  <tr>
 | 
				
			||||||
 | 
					                    <th>Nombre</th>
 | 
				
			||||||
 | 
					                    <th>Descripcion</th>
 | 
				
			||||||
 | 
					                    <th>Acciones</th>
 | 
				
			||||||
 | 
					                  </tr>
 | 
				
			||||||
 | 
					                </thead>
 | 
				
			||||||
 | 
					                <tbody id="notasTable">
 | 
				
			||||||
 | 
					                </tbody>
 | 
				
			||||||
 | 
					              </table>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					        <div class="container">
 | 
				
			||||||
 | 
					        <div class="table-responsive">
 | 
				
			||||||
 | 
					          <div class="table-wrapper">
 | 
				
			||||||
 | 
					            <div class="table-title">
 | 
				
			||||||
 | 
					              <div class="row">
 | 
				
			||||||
 | 
					                <div class="col-xs-6">
 | 
				
			||||||
 | 
					                  <h2><b>Tarjetas de Crédito</b></h2>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="col-xs-6">
 | 
				
			||||||
 | 
					                  <button class="btn btn-success" id="añadirN" data-toggle="modal" data-target="#addU" type="submit"><i class="material-icons"></i> <span>Nueva Tarjeta de Crédito</span></button>						
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <table class="table table-striped table-hover" id="tablaTarjetasCredito">
 | 
				
			||||||
 | 
					              <thead>
 | 
				
			||||||
 | 
					                <tr>
 | 
				
			||||||
 | 
					                  <th>Nombre Entidad</th>
 | 
				
			||||||
 | 
					                  <th>Número de Tarjeta</th>
 | 
				
			||||||
 | 
					                  <th>Fecha de Caducidad</th>
 | 
				
			||||||
 | 
					                  <th>Nombre del Titular</th>
 | 
				
			||||||
 | 
					                  <th>Código De Seguridad</th>
 | 
				
			||||||
 | 
					                  <th>Acciones</th>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					              </thead>
 | 
				
			||||||
 | 
					              <tbody id="tarjetasTable">
 | 
				
			||||||
 | 
					              </tbody>
 | 
				
			||||||
 | 
					            </table>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <div class="container">
 | 
				
			||||||
 | 
					      <div class="table-responsive">
 | 
				
			||||||
 | 
					        <div class="table-wrapper">
 | 
				
			||||||
 | 
					          <div class="table-title">
 | 
				
			||||||
 | 
					            <div class="row">
 | 
				
			||||||
 | 
					              <div class="col-xs-6">
 | 
				
			||||||
 | 
					                <h2><b>Cuentas Bancarias</b></h2>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              <div class="col-xs-6">
 | 
				
			||||||
 | 
					                <button class="btn btn-success" id="añadirN" data-toggle="modal" data-target="#addU" type="submit"><i class="material-icons"></i> <span>Nueva Cuenta Bancaria</span></button>						
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <table class="table table-striped table-hover" id="tablaCuentasBancarias">
 | 
				
			||||||
 | 
					            <thead>
 | 
				
			||||||
 | 
					              <tr>
 | 
				
			||||||
 | 
					                <th>Nombre Entidad</th>
 | 
				
			||||||
 | 
					                <th>IBAN</th>
 | 
				
			||||||
 | 
					                <th>Usuario Banca Online</th>
 | 
				
			||||||
 | 
					                <th>Contraseña Banca Online</th>
 | 
				
			||||||
 | 
					                <th>Acciones</th>
 | 
				
			||||||
 | 
					              </tr>
 | 
				
			||||||
 | 
					            </thead>
 | 
				
			||||||
 | 
					            <tbody id="cuentasTable">
 | 
				
			||||||
 | 
					            </tbody>
 | 
				
			||||||
 | 
					          </table>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <div id=divShare class="archivosOcultos">
 | 
				
			||||||
 | 
					      <div class="container">
 | 
				
			||||||
 | 
					        <div class="table-responsive">
 | 
				
			||||||
 | 
					          <div class="table-wrapper">
 | 
				
			||||||
 | 
					            <div class="table-title">
 | 
				
			||||||
 | 
					              <div class="row">
 | 
				
			||||||
 | 
					                <div class="col-xs-6">
 | 
				
			||||||
 | 
					                  <h2><b>Usuarios</b></h2>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="col-xs-6">
 | 
				
			||||||
 | 
					                  <button class="btn btn-success" id="añadirN" data-toggle="modal" data-target="#addU" type="submit"><i class="material-icons"></i> <span>Nuevo Usuario</span></button>						
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <table class="table table-striped table-hover" id="tablaUsuarios">
 | 
				
			||||||
 | 
					              <thead>
 | 
				
			||||||
 | 
					                <tr>
 | 
				
			||||||
 | 
					                  <th>Descripcion</th>
 | 
				
			||||||
 | 
					                  <th>Url</th>
 | 
				
			||||||
 | 
					                  <th>Usuario</th>
 | 
				
			||||||
 | 
					                  <th>Password</th>
 | 
				
			||||||
 | 
					                  <th>Acciones</th>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					              </thead>
 | 
				
			||||||
 | 
					              <tbody id="usuariosTableCompartidos">
 | 
				
			||||||
 | 
					              </tbody>
 | 
				
			||||||
 | 
					            </table>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      <div class="container">
 | 
				
			||||||
 | 
					        <div class="table-responsive">
 | 
				
			||||||
 | 
					          <div class="table-wrapper">
 | 
				
			||||||
 | 
					            <div class="table-title">
 | 
				
			||||||
 | 
					              <div class="row">
 | 
				
			||||||
 | 
					                <div class="col-xs-6">
 | 
				
			||||||
 | 
					                  <h2><b>Notas</b></h2>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="col-xs-6">
 | 
				
			||||||
 | 
					                  <button class="btn btn-success" id="añadirN" data-toggle="modal" data-target="#addU" type="submit"><i class="material-icons"></i> <span>Nueva Nota</span></button>						
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <table class="table table-striped table-hover"  id="tablaNotas">
 | 
				
			||||||
 | 
					              <thead>
 | 
				
			||||||
 | 
					                <tr>
 | 
				
			||||||
 | 
					                  <th>Nombre</th>
 | 
				
			||||||
 | 
					                  <th>Descripcion</th>
 | 
				
			||||||
 | 
					                  <th>Acciones</th>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					              </thead>
 | 
				
			||||||
 | 
					              <tbody id="notasTableCompartidos">
 | 
				
			||||||
 | 
					              </tbody>
 | 
				
			||||||
 | 
					            </table>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div id=div2FA class="archivosOcultos">
 | 
				
			||||||
 | 
					      <div class="container" style="text-align:center">
 | 
				
			||||||
 | 
					      <p style="margin-top:50px"><h2>Active y escane el código QR para aplicar el doble factor TOTP</h2></p>
 | 
				
			||||||
 | 
					        <svg class="qrCode" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
				
			||||||
 | 
					          <g id="qrcode"/>
 | 
				
			||||||
 | 
					        </svg>
 | 
				
			||||||
 | 
					          <label style="margin:40px" for="act2FA" class="btn btn-info qrCode">Activar <input type="checkbox" id="act2FA" class="badgebox"><span class="badge">✓</span></label>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    `;
 | 
				
			||||||
 | 
					    return html;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export function bodyFA(){
 | 
				
			||||||
 | 
					    let html = `<div id="Contenedor">
 | 
				
			||||||
 | 
					    <div class="Icon">
 | 
				
			||||||
 | 
					      <!--Icono de usuario-->
 | 
				
			||||||
 | 
					      <span class="glyphicon glyphicon-user"></span>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					      <div class="input-group input-group-lg">
 | 
				
			||||||
 | 
					      <span class="input-group-addon" id="sizing-addon1"><i class="glyphicon glyphicon-user"></i></span>
 | 
				
			||||||
 | 
					      <input type="text"  class="form-control" name="secret" placeholder="Code TOTP" id="secret" aria-describedby="sizing-addon1" required>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <br>
 | 
				
			||||||
 | 
					      <button class="btn btn-lg btn-primary btn-block btn-signup" id="checkcodeFA" type="submit">Comprobar</button>
 | 
				
			||||||
 | 
					   </div>`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   return html;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
							
								
								
									
										26
									
								
								scripts/modales/modalCompartir.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								scripts/modales/modalCompartir.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					export function modalCompartir(){
 | 
				
			||||||
 | 
					    //<option value="1">One</option>
 | 
				
			||||||
 | 
					    var html= `<!-- Modal compartir-->
 | 
				
			||||||
 | 
					<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
 | 
				
			||||||
 | 
					  <div class="modal-dialog" role="document">
 | 
				
			||||||
 | 
					    <div class="modal-content">
 | 
				
			||||||
 | 
					      <div class="modal-header">
 | 
				
			||||||
 | 
					        <h5 class="modal-title" id="exampleModalLabel">Compartir</h5>
 | 
				
			||||||
 | 
					        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
 | 
				
			||||||
 | 
					          <span aria-hidden="true">×</span>
 | 
				
			||||||
 | 
					        </button>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <div class="modal-body modal-compartir">
 | 
				
			||||||
 | 
					      <select id="multiSelect" multiple="multiple">
 | 
				
			||||||
 | 
					      </select>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <div class="modal-footer">
 | 
				
			||||||
 | 
					        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
 | 
				
			||||||
 | 
					        <button id= "compartirDatos" type="button" class="btn btn-primary">Compartir Datos</button>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					    `;
 | 
				
			||||||
 | 
					    return html;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										130
									
								
								scripts/modales/modalCrear.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								scripts/modales/modalCrear.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,130 @@
 | 
				
			|||||||
 | 
					export function modal(){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var html = `<!-- Modal -->
 | 
				
			||||||
 | 
					    <div class="modal fade" id="addU" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
 | 
				
			||||||
 | 
					        <div class="modal-dialog">
 | 
				
			||||||
 | 
					            <div class="modal-content">
 | 
				
			||||||
 | 
					                <div class="modal-header">
 | 
				
			||||||
 | 
					                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					                    </button>
 | 
				
			||||||
 | 
					                     <h4 class="modal-title" id="myModalLabel">Añadir Nuevos Datos</h4>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="modal-body">
 | 
				
			||||||
 | 
					                    <div role="tabpanel">
 | 
				
			||||||
 | 
					                        <!-- Nav tabs -->
 | 
				
			||||||
 | 
					                        <ul class="nav nav-tabs" role="tablist">
 | 
				
			||||||
 | 
					                            <li role="presentation" class="active"><a href="#NuevoUsuarioTab" aria-controls="NuevoUsuarioTab" role="tab" data-toggle="tab">Nuevo Usuario</a>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					                            </li>
 | 
				
			||||||
 | 
					                            <li role="presentation"><a href="#NuevaNotaTab" aria-controls="NuevaNotaTab" role="tab" data-toggle="tab">Nueva Nota</a>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					                            </li>
 | 
				
			||||||
 | 
					                            <li role="presentation"><a href="#NuevaTarjetaDeCréditoTab" aria-controls="NuevaTarjetaDeCréditoTab" role="tab" data-toggle="tab">Nueva Tarjeta de Crédito</a>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					                            </li>
 | 
				
			||||||
 | 
					                            <li role="presentation"><a href="#NuevaCuentaBancariaTab" aria-controls="NuevaCuentaBancariaTab" role="tab" data-toggle="tab">Nueva Cuenta Bancaria</a>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					                            </li>
 | 
				
			||||||
 | 
					                        </ul>
 | 
				
			||||||
 | 
					                        </br>
 | 
				
			||||||
 | 
					                        <!-- Tab panes -->
 | 
				
			||||||
 | 
					                        <div class="tab-content">
 | 
				
			||||||
 | 
					                            <div role="tabpanel" class="tab-pane active" id="NuevoUsuarioTab">
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="DescripcionModal">Descripción</label>
 | 
				
			||||||
 | 
					                                <input type="text" class="form-control" id="DescripcionModal" placeholder="Introduce Descripción">
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="URLModal">URL</label>
 | 
				
			||||||
 | 
					                                <input type="url" class="form-control" id="URLModal" placeholder="URL">
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="UsuarioModal">Usuario</label>
 | 
				
			||||||
 | 
					                                <input type="text" class="form-control" id="UsuarioModal" placeholder="Introduce Usuario">
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="ContraseñaModal">Contraseña</label>
 | 
				
			||||||
 | 
					                                <div class="input-group ">
 | 
				
			||||||
 | 
					                                  <input type="password" class="form-control" id="ContraseñaModal" placeholder="Introduce Contraseña" aria-describedby="sizing-addon1">
 | 
				
			||||||
 | 
					                                  <span class="input-group-btn">
 | 
				
			||||||
 | 
					                                    <div class="btn-group">
 | 
				
			||||||
 | 
					                                      <button type="button" id="opcionesContraseñaa" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
 | 
				
			||||||
 | 
					                                      <span class="caret"></span>
 | 
				
			||||||
 | 
					                                      <span class="sr-only">Desplegar menú</span>
 | 
				
			||||||
 | 
					                                      </button>
 | 
				
			||||||
 | 
					                                      <ul class="dropdown-menu" role="menu">
 | 
				
			||||||
 | 
					                                      <li><a id = "generarContraseña" >Generar Contraseña</a></li>
 | 
				
			||||||
 | 
					                                      <li><a id = "verContraseña">Ver</a></li>
 | 
				
			||||||
 | 
					                                      </ul>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                  </span>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					                            <div role="tabpanel" class="tab-pane" id="NuevaNotaTab">
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="NombreNota">Nombre</label>
 | 
				
			||||||
 | 
					                                <input type="text" class="form-control" id="NombreNota" placeholder="Introduce Nombre">
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="textoNota">Texto Nota</label>
 | 
				
			||||||
 | 
					                                <textarea class="form-control" id="textoNota" rows="3"></textarea>
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					                            <div role="tabpanel" class="tab-pane" id="NuevaTarjetaDeCréditoTab">
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="nombreEntidad">Nombre Entidad</label>
 | 
				
			||||||
 | 
					                                <input type="text" class="form-control" id="nombreEntidad" placeholder="Introduce Nombre de la Entidad/Banco">
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="numTarjeta">Número tarjeta</label>
 | 
				
			||||||
 | 
					                                <input type="text" class="form-control" id="numTarjeta" placeholder="Introduce el número de la tarjeta" maxlength=16>
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="fechaCaducidad">Fecha de Caducidad</label>
 | 
				
			||||||
 | 
					                                <input type="date" class="form-control" id="fechaCaducidad" placeholder="Introduce la fecha de caducidad">
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="nombreTitular">Nombre Titular</label>
 | 
				
			||||||
 | 
					                                <input type="text" class="form-control" id="nombreTitular" placeholder="Introduce Nombre del Titular">
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="codigoDeSeguridad">Código de seguridad</label>
 | 
				
			||||||
 | 
					                                <input type="text" class="form-control" id="codigoDeSeguridad" placeholder="Introduce el código de seguridad" maxlength=3>
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                              
 | 
				
			||||||
 | 
					                            <div role="tabpanel" class="tab-pane" id="NuevaCuentaBancariaTab">
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="nombreEntidadBancaria">Nombre Entidad</label>
 | 
				
			||||||
 | 
					                                <input type="text" class="form-control" id="nombreEntidadBancaria" placeholder="Introduce Nombre de la Entidad/Banco">
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="IBAN">Número de cuenta (IBAN)</label>
 | 
				
			||||||
 | 
					                                <input type="text" class="form-control" id="IBAN" placeholder="Introduce el número de la cuenta Bancaria" maxlength=24>
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="usuarioBancario">Usuario Banca Online</label>
 | 
				
			||||||
 | 
					                                <input type="text" class="form-control" id="usuarioBancario" placeholder="Introduce el usuario de la Banca Online">
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                              <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="contraseñaBancario">Contraseña Banca Online</label>
 | 
				
			||||||
 | 
					                                <input type="password" class="form-control" id="contraseñaBancario" placeholder="Introduce la contraseña de la Banca Online">
 | 
				
			||||||
 | 
					                              </div>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="modal-footer">
 | 
				
			||||||
 | 
					                    <button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
 | 
				
			||||||
 | 
					                    <button type="button" id="añadirModal" class="btn btn-primary save">Guardar Cambios</button>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>`
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    return html;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
							
								
								
									
										151
									
								
								scripts/modales/modalesEditar.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								scripts/modales/modalesEditar.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,151 @@
 | 
				
			|||||||
 | 
					export function modalEUsuario(){
 | 
				
			||||||
 | 
					    var html = `<!-- Modal Editar Usuario -->
 | 
				
			||||||
 | 
					    <div class="modal fade" id="editarUsuarioModal" tabindex="-1" role="dialog" aria-hidden="true">
 | 
				
			||||||
 | 
					      <div class="modal-dialog" role="document">
 | 
				
			||||||
 | 
					        <div class="modal-content">
 | 
				
			||||||
 | 
					          <div class="modal-header">
 | 
				
			||||||
 | 
					            <h5 class="modal-title" id="exampleModalLabel">Editar Usuario</h5>
 | 
				
			||||||
 | 
					            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
 | 
				
			||||||
 | 
					              <span aria-hidden="true">×</span>
 | 
				
			||||||
 | 
					            </button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="modal-body">
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="DescripcionModalEditarUsuario">Descripción</label>
 | 
				
			||||||
 | 
					              <input type="text" class="form-control" id="DescripcionModalEditarUsuario" placeholder="">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="URLModalEditarUsuario">URL</label>
 | 
				
			||||||
 | 
					              <input type="url" class="form-control" id="URLModalEditarUsuario" placeholder="">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="UsuarioModalEditarUsuario">Usuario</label>
 | 
				
			||||||
 | 
					              <input type="text" class="form-control" id="UsuarioModalEditarUsuario" placeholder="">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="ContraseñaModalEditarUsuario">Contraseña</label>
 | 
				
			||||||
 | 
					              <input type="password" class="form-control" id="ContraseñaModalEditarUsuario" placeholder="">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="modal-footer">
 | 
				
			||||||
 | 
					            <button type="button" class="btn btn-secondary" data-dismiss="modal">Descartar</button>
 | 
				
			||||||
 | 
					            <button type="button" id = "modalConfirmacionEditarUsuario" class="btn btn-primary">Guardar Cambios</button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>`;
 | 
				
			||||||
 | 
					    return html;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					 export function modalENota(){
 | 
				
			||||||
 | 
					    var html = `<!-- Modal Editar Notas -->
 | 
				
			||||||
 | 
					    <div class="modal fade" id="editarNotaModal" tabindex="-1" role="dialog" aria-hidden="true">
 | 
				
			||||||
 | 
					      <div class="modal-dialog" role="document">
 | 
				
			||||||
 | 
					        <div class="modal-content">
 | 
				
			||||||
 | 
					          <div class="modal-header">
 | 
				
			||||||
 | 
					            <h5 class="modal-title" id="exampleModalLabel">Editar Nota</h5>
 | 
				
			||||||
 | 
					            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
 | 
				
			||||||
 | 
					              <span aria-hidden="true">×</span>
 | 
				
			||||||
 | 
					            </button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="modal-body">
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="NombreNota">Nombre</label>
 | 
				
			||||||
 | 
					              <input type="text" class="form-control" id="EditarNombreNota" placeholder="Introduce Nombre">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="textoNota">Texto Nota</label>
 | 
				
			||||||
 | 
					              <textarea class="form-control" id="EditartextoNota" rows="3"></textarea>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="modal-footer">
 | 
				
			||||||
 | 
					            <button type="button" class="btn btn-secondary" data-dismiss="modal">Descartar</button>
 | 
				
			||||||
 | 
					            <button type="button" id = "modalConfirmacionEditarNota" class="btn btn-primary">Guardar Cambios</button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>`;
 | 
				
			||||||
 | 
					    return html;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					 export function modalEditTarjetaCredito(){
 | 
				
			||||||
 | 
					    var html = `<!-- Modal Editar Tarjeta -->
 | 
				
			||||||
 | 
					    <div class="modal fade" id="editarTarjetaCreditoModal" tabindex="-1" role="dialog" aria-hidden="true">
 | 
				
			||||||
 | 
					      <div class="modal-dialog" role="document">
 | 
				
			||||||
 | 
					        <div class="modal-content">
 | 
				
			||||||
 | 
					          <div class="modal-header">
 | 
				
			||||||
 | 
					            <h5 class="modal-title" id="exampleModalLabel">Editar Tarjeta de Crédito</h5>
 | 
				
			||||||
 | 
					            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
 | 
				
			||||||
 | 
					              <span aria-hidden="true">×</span>
 | 
				
			||||||
 | 
					            </button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="modal-body">
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="nombreEntidadModalEditarTarjetaCredito">Nombre Entidad</label>
 | 
				
			||||||
 | 
					              <input type="text" class="form-control" id="nombreEntidadModalEditarTarjetaCredito" placeholder="">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="numTarjetaModalEditarTarjetaCredito">Número Tarjeta</label>
 | 
				
			||||||
 | 
					              <input type="text" class="form-control" id="numTarjetaModalEditarTarjetaCredito" placeholder="">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="fechaCaducidadModalEditarTarjetaCredito">Fecha Caducidad</label>
 | 
				
			||||||
 | 
					              <input type="date" class="form-control" id="fechaCaducidadModalEditarTarjetaCredito" placeholder="">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="nombreTitularModalEditarTarjetaCredito">Nombre Titular</label>
 | 
				
			||||||
 | 
					              <input type="text" class="form-control" id="nombreTitularModalEditarTarjetaCredito" placeholder="">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="codigoDeSeguridadEditarTarjetaCredito">Código Seguridad</label>
 | 
				
			||||||
 | 
					              <input type="text" class="form-control" id="codigoDeSeguridadModalEditarTarjetaCredito" placeholder="">
 | 
				
			||||||
 | 
					             </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="modal-footer">
 | 
				
			||||||
 | 
					            <button type="button" class="btn btn-secondary" data-dismiss="modal">Descartar</button>
 | 
				
			||||||
 | 
					            <button type="button" id = "modalConfirmacionEditarTarjetaCredito" class="btn btn-primary">Guardar Cambios</button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>`;
 | 
				
			||||||
 | 
					    return html;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export function modalEditCuentaBancaria(){
 | 
				
			||||||
 | 
					    var html = `<!-- Modal Editar Cuenta -->
 | 
				
			||||||
 | 
					    <div class="modal fade" id="editarCuentaBancariaModal" tabindex="-1" role="dialog" aria-hidden="true">
 | 
				
			||||||
 | 
					      <div class="modal-dialog" role="document">
 | 
				
			||||||
 | 
					        <div class="modal-content">
 | 
				
			||||||
 | 
					          <div class="modal-header">
 | 
				
			||||||
 | 
					            <h5 class="modal-title" id="exampleModalLabel">Editar Cuenta Bancaria</h5>
 | 
				
			||||||
 | 
					            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
 | 
				
			||||||
 | 
					              <span aria-hidden="true">×</span>
 | 
				
			||||||
 | 
					            </button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="modal-body">
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="nombreEntidadBancariaModalEditarCuentaBancaria">Nombre Entidad</label>
 | 
				
			||||||
 | 
					              <input type="text" class="form-control" id="nombreEntidadBancariaModalEditarCuentaBancaria" placeholder="">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="IBANModalEditarCuentaBancaria">IBAN</label>
 | 
				
			||||||
 | 
					              <input type="text" class="form-control" id="IBANModalEditarCuentaBancaria" placeholder="">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="usuarioBancarioModalEditarCuentaBancaria">Fecha Caducidad</label>
 | 
				
			||||||
 | 
					              <input type="text" class="form-control" id="usuarioBancarioModalEditarCuentaBancaria" placeholder="">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="form-group">
 | 
				
			||||||
 | 
					              <label for="contraseñaBancarioModalEditarCuentaBancaria">Nombre Titular</label>
 | 
				
			||||||
 | 
					              <input type="password" class="form-control" id="contraseñaBancarioModalEditarCuentaBancaria" placeholder="">
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="modal-footer">
 | 
				
			||||||
 | 
					            <button type="button" class="btn btn-secondary" data-dismiss="modal">Descartar</button>
 | 
				
			||||||
 | 
					            <button type="button" id = "modalConfirmacionEditarCuentaBancaria" class="btn btn-primary">Guardar Cambios</button>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>`;
 | 
				
			||||||
 | 
					    return html;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
							
								
								
									
										75
									
								
								scripts/plantillas.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								scripts/plantillas.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
				
			|||||||
 | 
					//////////////Plantillas
 | 
				
			||||||
 | 
					export function plantillaUsuario(descripcion, url, usuario, contraseña){
 | 
				
			||||||
 | 
					    if(descripcion != ""){
 | 
				
			||||||
 | 
					      this.descripcion = descripcion;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(url != ""){
 | 
				
			||||||
 | 
					      this.url = url;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(usuario != ""){
 | 
				
			||||||
 | 
					      this.usuario = usuario;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(contraseña != ""){
 | 
				
			||||||
 | 
					      this.contraseña = contraseña;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  export function plantillaNota(nombre, textoNota){
 | 
				
			||||||
 | 
					    if(nombre != ""){
 | 
				
			||||||
 | 
					      this.nombre = nombre;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(textoNota != ""){
 | 
				
			||||||
 | 
					      this.textoNota = textoNota;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  //---------------------------
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * plantilla para crear un objeto de tipo Tarjeta de Crédito
 | 
				
			||||||
 | 
					   * @param {*} nombreEntidad nombre del banco
 | 
				
			||||||
 | 
					   * @param {*} numTarjeta nombre de la tarjeta guardada
 | 
				
			||||||
 | 
					   * @param {*} fechaCaducidad fecha de caducidad de la tarjeta guardada
 | 
				
			||||||
 | 
					   * @param {*} nombreTitular nombre del titular de la tarjeta
 | 
				
			||||||
 | 
					   * @param {*} codigoDeSeguridad código de seguridad de la tarjeta (CCV, CVV)
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					 export function plantillaTarjetaCredito(nombreEntidad, numTarjeta,fechaCaducidad,nombreTitular,codigoDeSeguridad){
 | 
				
			||||||
 | 
					    if(nombreEntidad != ""){
 | 
				
			||||||
 | 
					      this.nombreEntidad = nombreEntidad;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(numTarjeta != ""){
 | 
				
			||||||
 | 
					      this.numTarjeta = numTarjeta;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(fechaCaducidad != ""){
 | 
				
			||||||
 | 
					      this.fechaCaducidad = fechaCaducidad;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(nombreTitular != ""){
 | 
				
			||||||
 | 
					      this.nombreTitular = nombreTitular;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(codigoDeSeguridad != ""){
 | 
				
			||||||
 | 
					      this.codigoDeSeguridad = codigoDeSeguridad;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * plantilla para crear un objeto de tipo Cuenta Bancaria
 | 
				
			||||||
 | 
					   * @param {*} nombreEntidadBancaria nombre del banco
 | 
				
			||||||
 | 
					   * @param {*} IBAN número completo de la cuenta bancaria
 | 
				
			||||||
 | 
					   * @param {*} usuarioBancario usuario con el que acceder a la banca online
 | 
				
			||||||
 | 
					   * @param {*} contraseñaBancario contraseña para acceder a la banca online
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					   export function plantillaCuentaBancaria(nombreEntidadBancaria, IBAN,usuarioBancario,contraseñaBancario){
 | 
				
			||||||
 | 
					    if(nombreEntidadBancaria != ""){
 | 
				
			||||||
 | 
					      this.nombreEntidadBancaria = nombreEntidadBancaria;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(IBAN != ""){
 | 
				
			||||||
 | 
					      this.IBAN = IBAN;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(usuarioBancario != ""){
 | 
				
			||||||
 | 
					      this.usuarioBancario = usuarioBancario;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(contraseñaBancario != ""){
 | 
				
			||||||
 | 
					      this.contraseñaBancario = contraseñaBancario;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
							
								
								
									
										173
									
								
								scripts/plog.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								scripts/plog.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,173 @@
 | 
				
			|||||||
 | 
					!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.plog=e():"undefined"!=typeof global?global.plog=e():"undefined"!=typeof self&&(self.plog=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
 | 
				
			||||||
 | 
					    var InMemoryStorage = function() {
 | 
				
			||||||
 | 
					      this.events = [];
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    InMemoryStorage.prototype.append = function(event) {
 | 
				
			||||||
 | 
					      this.events.push(event);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    InMemoryStorage.prototype.clear = function() {
 | 
				
			||||||
 | 
					      this.events = [];
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    InMemoryStorage.prototype.getEvents = function() {
 | 
				
			||||||
 | 
					      return this.events;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    module.exports = InMemoryStorage;
 | 
				
			||||||
 | 
					    },{}],2:[function(require,module,exports){
 | 
				
			||||||
 | 
					    var INDEX_KEY = 'plog-index';
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    function initialize() {
 | 
				
			||||||
 | 
					      saveIndex({firstId: 0, nextId: 0});
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    function saveIndex(index) {
 | 
				
			||||||
 | 
					      localStorage[INDEX_KEY] = JSON.stringify(index);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    function loadIndex() {
 | 
				
			||||||
 | 
					      return JSON.parse(localStorage[INDEX_KEY]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    function foreachKey(callback) {
 | 
				
			||||||
 | 
					      var index = loadIndex();
 | 
				
			||||||
 | 
					      for (var id = index.firstId; id < index.nextId; id++) {
 | 
				
			||||||
 | 
					        callback('plog-event-' + id);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    var LocalStorage = function(opts) {
 | 
				
			||||||
 | 
					      opts = opts || {};
 | 
				
			||||||
 | 
					      this.maxSize = opts.maxSize || 100;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					      if (typeof localStorage[INDEX_KEY] === 'undefined') {
 | 
				
			||||||
 | 
					        initialize();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    LocalStorage.prototype.clear = function() {
 | 
				
			||||||
 | 
					      foreachKey(function(key) {
 | 
				
			||||||
 | 
					        delete localStorage[key];
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      initialize();
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    LocalStorage.prototype.purgeOldEvents = function() {
 | 
				
			||||||
 | 
					      var eventsToPurge = Math.round(this.maxSize * 0.2);
 | 
				
			||||||
 | 
					      var index = loadIndex();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					      for (var i = 0; i < eventsToPurge; i++) {
 | 
				
			||||||
 | 
					        var key = 'plog-event-' + (index.firstId + i);
 | 
				
			||||||
 | 
					        delete localStorage[key];
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					      index.firstId += eventsToPurge;
 | 
				
			||||||
 | 
					      saveIndex(index);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    LocalStorage.prototype.getEvents = function() {
 | 
				
			||||||
 | 
					      var events = [];
 | 
				
			||||||
 | 
					      foreachKey(function(key) {
 | 
				
			||||||
 | 
					        var event = localStorage[key];
 | 
				
			||||||
 | 
					        events.push(JSON.parse(event));
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      return events;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    LocalStorage.prototype.append = function(event) {
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					      var index = loadIndex();
 | 
				
			||||||
 | 
					      var currentSize = index.nextId - index.firstId;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					      if (currentSize + 1 > this.maxSize) {
 | 
				
			||||||
 | 
					        this.purgeOldEvents();
 | 
				
			||||||
 | 
					        index = loadIndex();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					      var key = 'plog-event-' + index.nextId;
 | 
				
			||||||
 | 
					      localStorage[key] = JSON.stringify(event);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					      index.nextId++;
 | 
				
			||||||
 | 
					      saveIndex(index);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    module.exports = LocalStorage;
 | 
				
			||||||
 | 
					    },{}],3:[function(require,module,exports){
 | 
				
			||||||
 | 
					    var plog = {};
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    plog.storages = {
 | 
				
			||||||
 | 
					      LocalStorage: require('./LocalStorage'),
 | 
				
			||||||
 | 
					      InMemoryStorage: require('./InMemoryStorage')
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    plog.level = {
 | 
				
			||||||
 | 
					      DEBUG: 0,
 | 
				
			||||||
 | 
					      INFO: 1,
 | 
				
			||||||
 | 
					      WARN: 2,
 | 
				
			||||||
 | 
					      ERROR: 3,
 | 
				
			||||||
 | 
					      FATAL: 4,
 | 
				
			||||||
 | 
					      getName: function(level) {
 | 
				
			||||||
 | 
					        for (var x in this) {
 | 
				
			||||||
 | 
					          if (this[x] === level) return x;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return level;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    var currentStorage, currentLevel;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    plog.reset = function() {
 | 
				
			||||||
 | 
					      currentStorage = new plog.storages.LocalStorage();
 | 
				
			||||||
 | 
					      currentLevel = plog.level.INFO;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    plog.reset();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    plog.useStorage = function(storage) {
 | 
				
			||||||
 | 
					      currentStorage = storage;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    plog.getStorage = function() {
 | 
				
			||||||
 | 
					      return currentStorage;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    plog.getLevel = function() {
 | 
				
			||||||
 | 
					      return currentLevel;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    plog.setLevel = function(level) {
 | 
				
			||||||
 | 
					      currentLevel = level;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    function write(level, msg) {
 | 
				
			||||||
 | 
					      if (level < currentLevel) return;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					      var event = {
 | 
				
			||||||
 | 
					        level: level,
 | 
				
			||||||
 | 
					        date: new Date(),
 | 
				
			||||||
 | 
					        message: msg
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					      currentStorage.append(event);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					      console.log(event.date.toISOString() + ': ' + plog.level.getName(level) + ': ' + event.message);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    function createWriteFunc(level) {
 | 
				
			||||||
 | 
					      return function(msg) {
 | 
				
			||||||
 | 
					        write(level, msg);
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    for (var levelName in plog.level) {
 | 
				
			||||||
 | 
					      if (plog.level.hasOwnProperty(levelName)) {
 | 
				
			||||||
 | 
					        plog[levelName.toLowerCase()] = createWriteFunc(plog.level[levelName]);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    module.exports = plog;
 | 
				
			||||||
 | 
					    },{"./InMemoryStorage":1,"./LocalStorage":2}]},{},[3])
 | 
				
			||||||
 | 
					    (3)
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
							
								
								
									
										614
									
								
								scripts/qrcode.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										614
									
								
								scripts/qrcode.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,614 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @fileoverview
 | 
				
			||||||
 | 
					 * - Using the 'QRCode for Javascript library'
 | 
				
			||||||
 | 
					 * - Fixed dataset of 'QRCode for Javascript library' for support full-spec.
 | 
				
			||||||
 | 
					 * - this library has no dependencies.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author davidshimjs
 | 
				
			||||||
 | 
					 * @see <a href="http://www.d-project.com/" target="_blank">http://www.d-project.com/</a>
 | 
				
			||||||
 | 
					 * @see <a href="http://jeromeetienne.github.com/jquery-qrcode/" target="_blank">http://jeromeetienne.github.com/jquery-qrcode/</a>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					var QRCode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(function () {
 | 
				
			||||||
 | 
						//---------------------------------------------------------------------
 | 
				
			||||||
 | 
						// QRCode for JavaScript
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// Copyright (c) 2009 Kazuhiko Arase
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// URL: http://www.d-project.com/
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// Licensed under the MIT license:
 | 
				
			||||||
 | 
						//   http://www.opensource.org/licenses/mit-license.php
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// The word "QR Code" is registered trademark of 
 | 
				
			||||||
 | 
						// DENSO WAVE INCORPORATED
 | 
				
			||||||
 | 
						//   http://www.denso-wave.com/qrcode/faqpatent-e.html
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						//---------------------------------------------------------------------
 | 
				
			||||||
 | 
						function QR8bitByte(data) {
 | 
				
			||||||
 | 
							this.mode = QRMode.MODE_8BIT_BYTE;
 | 
				
			||||||
 | 
							this.data = data;
 | 
				
			||||||
 | 
							this.parsedData = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Added to support UTF-8 Characters
 | 
				
			||||||
 | 
							for (var i = 0, l = this.data.length; i < l; i++) {
 | 
				
			||||||
 | 
								var byteArray = [];
 | 
				
			||||||
 | 
								var code = this.data.charCodeAt(i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (code > 0x10000) {
 | 
				
			||||||
 | 
									byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);
 | 
				
			||||||
 | 
									byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);
 | 
				
			||||||
 | 
									byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);
 | 
				
			||||||
 | 
									byteArray[3] = 0x80 | (code & 0x3F);
 | 
				
			||||||
 | 
								} else if (code > 0x800) {
 | 
				
			||||||
 | 
									byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);
 | 
				
			||||||
 | 
									byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);
 | 
				
			||||||
 | 
									byteArray[2] = 0x80 | (code & 0x3F);
 | 
				
			||||||
 | 
								} else if (code > 0x80) {
 | 
				
			||||||
 | 
									byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);
 | 
				
			||||||
 | 
									byteArray[1] = 0x80 | (code & 0x3F);
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									byteArray[0] = code;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								this.parsedData.push(byteArray);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							this.parsedData = Array.prototype.concat.apply([], this.parsedData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (this.parsedData.length != this.data.length) {
 | 
				
			||||||
 | 
								this.parsedData.unshift(191);
 | 
				
			||||||
 | 
								this.parsedData.unshift(187);
 | 
				
			||||||
 | 
								this.parsedData.unshift(239);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						QR8bitByte.prototype = {
 | 
				
			||||||
 | 
							getLength: function (buffer) {
 | 
				
			||||||
 | 
								return this.parsedData.length;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							write: function (buffer) {
 | 
				
			||||||
 | 
								for (var i = 0, l = this.parsedData.length; i < l; i++) {
 | 
				
			||||||
 | 
									buffer.put(this.parsedData[i], 8);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						function QRCodeModel(typeNumber, errorCorrectLevel) {
 | 
				
			||||||
 | 
							this.typeNumber = typeNumber;
 | 
				
			||||||
 | 
							this.errorCorrectLevel = errorCorrectLevel;
 | 
				
			||||||
 | 
							this.modules = null;
 | 
				
			||||||
 | 
							this.moduleCount = 0;
 | 
				
			||||||
 | 
							this.dataCache = null;
 | 
				
			||||||
 | 
							this.dataList = [];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						QRCodeModel.prototype={addData:function(data){var newData=new QR8bitByte(data);this.dataList.push(newData);this.dataCache=null;},isDark:function(row,col){if(row<0||this.moduleCount<=row||col<0||this.moduleCount<=col){throw new Error(row+","+col);}
 | 
				
			||||||
 | 
						return this.modules[row][col];},getModuleCount:function(){return this.moduleCount;},make:function(){this.makeImpl(false,this.getBestMaskPattern());},makeImpl:function(test,maskPattern){this.moduleCount=this.typeNumber*4+17;this.modules=new Array(this.moduleCount);for(var row=0;row<this.moduleCount;row++){this.modules[row]=new Array(this.moduleCount);for(var col=0;col<this.moduleCount;col++){this.modules[row][col]=null;}}
 | 
				
			||||||
 | 
						this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-7,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(test,maskPattern);if(this.typeNumber>=7){this.setupTypeNumber(test);}
 | 
				
			||||||
 | 
						if(this.dataCache==null){this.dataCache=QRCodeModel.createData(this.typeNumber,this.errorCorrectLevel,this.dataList);}
 | 
				
			||||||
 | 
						this.mapData(this.dataCache,maskPattern);},setupPositionProbePattern:function(row,col){for(var r=-1;r<=7;r++){if(row+r<=-1||this.moduleCount<=row+r)continue;for(var c=-1;c<=7;c++){if(col+c<=-1||this.moduleCount<=col+c)continue;if((0<=r&&r<=6&&(c==0||c==6))||(0<=c&&c<=6&&(r==0||r==6))||(2<=r&&r<=4&&2<=c&&c<=4)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}},getBestMaskPattern:function(){var minLostPoint=0;var pattern=0;for(var i=0;i<8;i++){this.makeImpl(true,i);var lostPoint=QRUtil.getLostPoint(this);if(i==0||minLostPoint>lostPoint){minLostPoint=lostPoint;pattern=i;}}
 | 
				
			||||||
 | 
						return pattern;},createMovieClip:function(target_mc,instance_name,depth){var qr_mc=target_mc.createEmptyMovieClip(instance_name,depth);var cs=1;this.make();for(var row=0;row<this.modules.length;row++){var y=row*cs;for(var col=0;col<this.modules[row].length;col++){var x=col*cs;var dark=this.modules[row][col];if(dark){qr_mc.beginFill(0,100);qr_mc.moveTo(x,y);qr_mc.lineTo(x+cs,y);qr_mc.lineTo(x+cs,y+cs);qr_mc.lineTo(x,y+cs);qr_mc.endFill();}}}
 | 
				
			||||||
 | 
						return qr_mc;},setupTimingPattern:function(){for(var r=8;r<this.moduleCount-8;r++){if(this.modules[r][6]!=null){continue;}
 | 
				
			||||||
 | 
						this.modules[r][6]=(r%2==0);}
 | 
				
			||||||
 | 
						for(var c=8;c<this.moduleCount-8;c++){if(this.modules[6][c]!=null){continue;}
 | 
				
			||||||
 | 
						this.modules[6][c]=(c%2==0);}},setupPositionAdjustPattern:function(){var pos=QRUtil.getPatternPosition(this.typeNumber);for(var i=0;i<pos.length;i++){for(var j=0;j<pos.length;j++){var row=pos[i];var col=pos[j];if(this.modules[row][col]!=null){continue;}
 | 
				
			||||||
 | 
						for(var r=-2;r<=2;r++){for(var c=-2;c<=2;c++){if(r==-2||r==2||c==-2||c==2||(r==0&&c==0)){this.modules[row+r][col+c]=true;}else{this.modules[row+r][col+c]=false;}}}}}},setupTypeNumber:function(test){var bits=QRUtil.getBCHTypeNumber(this.typeNumber);for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[Math.floor(i/3)][i%3+this.moduleCount-8-3]=mod;}
 | 
				
			||||||
 | 
						for(var i=0;i<18;i++){var mod=(!test&&((bits>>i)&1)==1);this.modules[i%3+this.moduleCount-8-3][Math.floor(i/3)]=mod;}},setupTypeInfo:function(test,maskPattern){var data=(this.errorCorrectLevel<<3)|maskPattern;var bits=QRUtil.getBCHTypeInfo(data);for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<6){this.modules[i][8]=mod;}else if(i<8){this.modules[i+1][8]=mod;}else{this.modules[this.moduleCount-15+i][8]=mod;}}
 | 
				
			||||||
 | 
						for(var i=0;i<15;i++){var mod=(!test&&((bits>>i)&1)==1);if(i<8){this.modules[8][this.moduleCount-i-1]=mod;}else if(i<9){this.modules[8][15-i-1+1]=mod;}else{this.modules[8][15-i-1]=mod;}}
 | 
				
			||||||
 | 
						this.modules[this.moduleCount-8][8]=(!test);},mapData:function(data,maskPattern){var inc=-1;var row=this.moduleCount-1;var bitIndex=7;var byteIndex=0;for(var col=this.moduleCount-1;col>0;col-=2){if(col==6)col--;while(true){for(var c=0;c<2;c++){if(this.modules[row][col-c]==null){var dark=false;if(byteIndex<data.length){dark=(((data[byteIndex]>>>bitIndex)&1)==1);}
 | 
				
			||||||
 | 
						var mask=QRUtil.getMask(maskPattern,row,col-c);if(mask){dark=!dark;}
 | 
				
			||||||
 | 
						this.modules[row][col-c]=dark;bitIndex--;if(bitIndex==-1){byteIndex++;bitIndex=7;}}}
 | 
				
			||||||
 | 
						row+=inc;if(row<0||this.moduleCount<=row){row-=inc;inc=-inc;break;}}}}};QRCodeModel.PAD0=0xEC;QRCodeModel.PAD1=0x11;QRCodeModel.createData=function(typeNumber,errorCorrectLevel,dataList){var rsBlocks=QRRSBlock.getRSBlocks(typeNumber,errorCorrectLevel);var buffer=new QRBitBuffer();for(var i=0;i<dataList.length;i++){var data=dataList[i];buffer.put(data.mode,4);buffer.put(data.getLength(),QRUtil.getLengthInBits(data.mode,typeNumber));data.write(buffer);}
 | 
				
			||||||
 | 
						var totalDataCount=0;for(var i=0;i<rsBlocks.length;i++){totalDataCount+=rsBlocks[i].dataCount;}
 | 
				
			||||||
 | 
						if(buffer.getLengthInBits()>totalDataCount*8){throw new Error("code length overflow. ("
 | 
				
			||||||
 | 
						+buffer.getLengthInBits()
 | 
				
			||||||
 | 
						+">"
 | 
				
			||||||
 | 
						+totalDataCount*8
 | 
				
			||||||
 | 
						+")");}
 | 
				
			||||||
 | 
						if(buffer.getLengthInBits()+4<=totalDataCount*8){buffer.put(0,4);}
 | 
				
			||||||
 | 
						while(buffer.getLengthInBits()%8!=0){buffer.putBit(false);}
 | 
				
			||||||
 | 
						while(true){if(buffer.getLengthInBits()>=totalDataCount*8){break;}
 | 
				
			||||||
 | 
						buffer.put(QRCodeModel.PAD0,8);if(buffer.getLengthInBits()>=totalDataCount*8){break;}
 | 
				
			||||||
 | 
						buffer.put(QRCodeModel.PAD1,8);}
 | 
				
			||||||
 | 
						return QRCodeModel.createBytes(buffer,rsBlocks);};QRCodeModel.createBytes=function(buffer,rsBlocks){var offset=0;var maxDcCount=0;var maxEcCount=0;var dcdata=new Array(rsBlocks.length);var ecdata=new Array(rsBlocks.length);for(var r=0;r<rsBlocks.length;r++){var dcCount=rsBlocks[r].dataCount;var ecCount=rsBlocks[r].totalCount-dcCount;maxDcCount=Math.max(maxDcCount,dcCount);maxEcCount=Math.max(maxEcCount,ecCount);dcdata[r]=new Array(dcCount);for(var i=0;i<dcdata[r].length;i++){dcdata[r][i]=0xff&buffer.buffer[i+offset];}
 | 
				
			||||||
 | 
						offset+=dcCount;var rsPoly=QRUtil.getErrorCorrectPolynomial(ecCount);var rawPoly=new QRPolynomial(dcdata[r],rsPoly.getLength()-1);var modPoly=rawPoly.mod(rsPoly);ecdata[r]=new Array(rsPoly.getLength()-1);for(var i=0;i<ecdata[r].length;i++){var modIndex=i+modPoly.getLength()-ecdata[r].length;ecdata[r][i]=(modIndex>=0)?modPoly.get(modIndex):0;}}
 | 
				
			||||||
 | 
						var totalCodeCount=0;for(var i=0;i<rsBlocks.length;i++){totalCodeCount+=rsBlocks[i].totalCount;}
 | 
				
			||||||
 | 
						var data=new Array(totalCodeCount);var index=0;for(var i=0;i<maxDcCount;i++){for(var r=0;r<rsBlocks.length;r++){if(i<dcdata[r].length){data[index++]=dcdata[r][i];}}}
 | 
				
			||||||
 | 
						for(var i=0;i<maxEcCount;i++){for(var r=0;r<rsBlocks.length;r++){if(i<ecdata[r].length){data[index++]=ecdata[r][i];}}}
 | 
				
			||||||
 | 
						return data;};var QRMode={MODE_NUMBER:1<<0,MODE_ALPHA_NUM:1<<1,MODE_8BIT_BYTE:1<<2,MODE_KANJI:1<<3};var QRErrorCorrectLevel={L:1,M:0,Q:3,H:2};var QRMaskPattern={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var QRUtil={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:(1<<10)|(1<<8)|(1<<5)|(1<<4)|(1<<2)|(1<<1)|(1<<0),G18:(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(1<<5)|(1<<2)|(1<<0),G15_MASK:(1<<14)|(1<<12)|(1<<10)|(1<<4)|(1<<1),getBCHTypeInfo:function(data){var d=data<<10;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)>=0){d^=(QRUtil.G15<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G15)));}
 | 
				
			||||||
 | 
						return((data<<10)|d)^QRUtil.G15_MASK;},getBCHTypeNumber:function(data){var d=data<<12;while(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)>=0){d^=(QRUtil.G18<<(QRUtil.getBCHDigit(d)-QRUtil.getBCHDigit(QRUtil.G18)));}
 | 
				
			||||||
 | 
						return(data<<12)|d;},getBCHDigit:function(data){var digit=0;while(data!=0){digit++;data>>>=1;}
 | 
				
			||||||
 | 
						return digit;},getPatternPosition:function(typeNumber){return QRUtil.PATTERN_POSITION_TABLE[typeNumber-1];},getMask:function(maskPattern,i,j){switch(maskPattern){case QRMaskPattern.PATTERN000:return(i+j)%2==0;case QRMaskPattern.PATTERN001:return i%2==0;case QRMaskPattern.PATTERN010:return j%3==0;case QRMaskPattern.PATTERN011:return(i+j)%3==0;case QRMaskPattern.PATTERN100:return(Math.floor(i/2)+Math.floor(j/3))%2==0;case QRMaskPattern.PATTERN101:return(i*j)%2+(i*j)%3==0;case QRMaskPattern.PATTERN110:return((i*j)%2+(i*j)%3)%2==0;case QRMaskPattern.PATTERN111:return((i*j)%3+(i+j)%2)%2==0;default:throw new Error("bad maskPattern:"+maskPattern);}},getErrorCorrectPolynomial:function(errorCorrectLength){var a=new QRPolynomial([1],0);for(var i=0;i<errorCorrectLength;i++){a=a.multiply(new QRPolynomial([1,QRMath.gexp(i)],0));}
 | 
				
			||||||
 | 
						return a;},getLengthInBits:function(mode,type){if(1<=type&&type<10){switch(mode){case QRMode.MODE_NUMBER:return 10;case QRMode.MODE_ALPHA_NUM:return 9;case QRMode.MODE_8BIT_BYTE:return 8;case QRMode.MODE_KANJI:return 8;default:throw new Error("mode:"+mode);}}else if(type<27){switch(mode){case QRMode.MODE_NUMBER:return 12;case QRMode.MODE_ALPHA_NUM:return 11;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 10;default:throw new Error("mode:"+mode);}}else if(type<41){switch(mode){case QRMode.MODE_NUMBER:return 14;case QRMode.MODE_ALPHA_NUM:return 13;case QRMode.MODE_8BIT_BYTE:return 16;case QRMode.MODE_KANJI:return 12;default:throw new Error("mode:"+mode);}}else{throw new Error("type:"+type);}},getLostPoint:function(qrCode){var moduleCount=qrCode.getModuleCount();var lostPoint=0;for(var row=0;row<moduleCount;row++){for(var col=0;col<moduleCount;col++){var sameCount=0;var dark=qrCode.isDark(row,col);for(var r=-1;r<=1;r++){if(row+r<0||moduleCount<=row+r){continue;}
 | 
				
			||||||
 | 
						for(var c=-1;c<=1;c++){if(col+c<0||moduleCount<=col+c){continue;}
 | 
				
			||||||
 | 
						if(r==0&&c==0){continue;}
 | 
				
			||||||
 | 
						if(dark==qrCode.isDark(row+r,col+c)){sameCount++;}}}
 | 
				
			||||||
 | 
						if(sameCount>5){lostPoint+=(3+sameCount-5);}}}
 | 
				
			||||||
 | 
						for(var row=0;row<moduleCount-1;row++){for(var col=0;col<moduleCount-1;col++){var count=0;if(qrCode.isDark(row,col))count++;if(qrCode.isDark(row+1,col))count++;if(qrCode.isDark(row,col+1))count++;if(qrCode.isDark(row+1,col+1))count++;if(count==0||count==4){lostPoint+=3;}}}
 | 
				
			||||||
 | 
						for(var row=0;row<moduleCount;row++){for(var col=0;col<moduleCount-6;col++){if(qrCode.isDark(row,col)&&!qrCode.isDark(row,col+1)&&qrCode.isDark(row,col+2)&&qrCode.isDark(row,col+3)&&qrCode.isDark(row,col+4)&&!qrCode.isDark(row,col+5)&&qrCode.isDark(row,col+6)){lostPoint+=40;}}}
 | 
				
			||||||
 | 
						for(var col=0;col<moduleCount;col++){for(var row=0;row<moduleCount-6;row++){if(qrCode.isDark(row,col)&&!qrCode.isDark(row+1,col)&&qrCode.isDark(row+2,col)&&qrCode.isDark(row+3,col)&&qrCode.isDark(row+4,col)&&!qrCode.isDark(row+5,col)&&qrCode.isDark(row+6,col)){lostPoint+=40;}}}
 | 
				
			||||||
 | 
						var darkCount=0;for(var col=0;col<moduleCount;col++){for(var row=0;row<moduleCount;row++){if(qrCode.isDark(row,col)){darkCount++;}}}
 | 
				
			||||||
 | 
						var ratio=Math.abs(100*darkCount/moduleCount/moduleCount-50)/5;lostPoint+=ratio*10;return lostPoint;}};var QRMath={glog:function(n){if(n<1){throw new Error("glog("+n+")");}
 | 
				
			||||||
 | 
						return QRMath.LOG_TABLE[n];},gexp:function(n){while(n<0){n+=255;}
 | 
				
			||||||
 | 
						while(n>=256){n-=255;}
 | 
				
			||||||
 | 
						return QRMath.EXP_TABLE[n];},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)};for(var i=0;i<8;i++){QRMath.EXP_TABLE[i]=1<<i;}
 | 
				
			||||||
 | 
						for(var i=8;i<256;i++){QRMath.EXP_TABLE[i]=QRMath.EXP_TABLE[i-4]^QRMath.EXP_TABLE[i-5]^QRMath.EXP_TABLE[i-6]^QRMath.EXP_TABLE[i-8];}
 | 
				
			||||||
 | 
						for(var i=0;i<255;i++){QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]]=i;}
 | 
				
			||||||
 | 
						function QRPolynomial(num,shift){if(num.length==undefined){throw new Error(num.length+"/"+shift);}
 | 
				
			||||||
 | 
						var offset=0;while(offset<num.length&&num[offset]==0){offset++;}
 | 
				
			||||||
 | 
						this.num=new Array(num.length-offset+shift);for(var i=0;i<num.length-offset;i++){this.num[i]=num[i+offset];}}
 | 
				
			||||||
 | 
						QRPolynomial.prototype={get:function(index){return this.num[index];},getLength:function(){return this.num.length;},multiply:function(e){var num=new Array(this.getLength()+e.getLength()-1);for(var i=0;i<this.getLength();i++){for(var j=0;j<e.getLength();j++){num[i+j]^=QRMath.gexp(QRMath.glog(this.get(i))+QRMath.glog(e.get(j)));}}
 | 
				
			||||||
 | 
						return new QRPolynomial(num,0);},mod:function(e){if(this.getLength()-e.getLength()<0){return this;}
 | 
				
			||||||
 | 
						var ratio=QRMath.glog(this.get(0))-QRMath.glog(e.get(0));var num=new Array(this.getLength());for(var i=0;i<this.getLength();i++){num[i]=this.get(i);}
 | 
				
			||||||
 | 
						for(var i=0;i<e.getLength();i++){num[i]^=QRMath.gexp(QRMath.glog(e.get(i))+ratio);}
 | 
				
			||||||
 | 
						return new QRPolynomial(num,0).mod(e);}};function QRRSBlock(totalCount,dataCount){this.totalCount=totalCount;this.dataCount=dataCount;}
 | 
				
			||||||
 | 
						QRRSBlock.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];QRRSBlock.getRSBlocks=function(typeNumber,errorCorrectLevel){var rsBlock=QRRSBlock.getRsBlockTable(typeNumber,errorCorrectLevel);if(rsBlock==undefined){throw new Error("bad rs block @ typeNumber:"+typeNumber+"/errorCorrectLevel:"+errorCorrectLevel);}
 | 
				
			||||||
 | 
						var length=rsBlock.length/3;var list=[];for(var i=0;i<length;i++){var count=rsBlock[i*3+0];var totalCount=rsBlock[i*3+1];var dataCount=rsBlock[i*3+2];for(var j=0;j<count;j++){list.push(new QRRSBlock(totalCount,dataCount));}}
 | 
				
			||||||
 | 
						return list;};QRRSBlock.getRsBlockTable=function(typeNumber,errorCorrectLevel){switch(errorCorrectLevel){case QRErrorCorrectLevel.L:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+0];case QRErrorCorrectLevel.M:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+1];case QRErrorCorrectLevel.Q:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+2];case QRErrorCorrectLevel.H:return QRRSBlock.RS_BLOCK_TABLE[(typeNumber-1)*4+3];default:return undefined;}};function QRBitBuffer(){this.buffer=[];this.length=0;}
 | 
				
			||||||
 | 
						QRBitBuffer.prototype={get:function(index){var bufIndex=Math.floor(index/8);return((this.buffer[bufIndex]>>>(7-index%8))&1)==1;},put:function(num,length){for(var i=0;i<length;i++){this.putBit(((num>>>(length-i-1))&1)==1);}},getLengthInBits:function(){return this.length;},putBit:function(bit){var bufIndex=Math.floor(this.length/8);if(this.buffer.length<=bufIndex){this.buffer.push(0);}
 | 
				
			||||||
 | 
						if(bit){this.buffer[bufIndex]|=(0x80>>>(this.length%8));}
 | 
				
			||||||
 | 
						this.length++;}};var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]];
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						function _isSupportCanvas() {
 | 
				
			||||||
 | 
							return typeof CanvasRenderingContext2D != "undefined";
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// android 2.x doesn't support Data-URI spec
 | 
				
			||||||
 | 
						function _getAndroid() {
 | 
				
			||||||
 | 
							var android = false;
 | 
				
			||||||
 | 
							var sAgent = navigator.userAgent;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (/android/i.test(sAgent)) { // android
 | 
				
			||||||
 | 
								android = true;
 | 
				
			||||||
 | 
								var aMat = sAgent.toString().match(/android ([0-9]\.[0-9])/i);
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								if (aMat && aMat[1]) {
 | 
				
			||||||
 | 
									android = parseFloat(aMat[1]);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return android;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						var svgDrawer = (function() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var Drawing = function (el, htOption) {
 | 
				
			||||||
 | 
								this._el = el;
 | 
				
			||||||
 | 
								this._htOption = htOption;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Drawing.prototype.draw = function (oQRCode) {
 | 
				
			||||||
 | 
								var _htOption = this._htOption;
 | 
				
			||||||
 | 
								var _el = this._el;
 | 
				
			||||||
 | 
								var nCount = oQRCode.getModuleCount();
 | 
				
			||||||
 | 
								var nWidth = Math.floor(_htOption.width / nCount);
 | 
				
			||||||
 | 
								var nHeight = Math.floor(_htOption.height / nCount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								this.clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								function makeSVG(tag, attrs) {
 | 
				
			||||||
 | 
									var el = document.createElementNS('http://www.w3.org/2000/svg', tag);
 | 
				
			||||||
 | 
									for (var k in attrs)
 | 
				
			||||||
 | 
										if (attrs.hasOwnProperty(k)) el.setAttribute(k, attrs[k]);
 | 
				
			||||||
 | 
									return el;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var svg = makeSVG("svg" , {'viewBox': '0 0 ' + String(nCount) + " " + String(nCount), 'width': '100%', 'height': '100%', 'fill': _htOption.colorLight});
 | 
				
			||||||
 | 
								svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink");
 | 
				
			||||||
 | 
								_el.appendChild(svg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								svg.appendChild(makeSVG("rect", {"fill": _htOption.colorLight, "width": "100%", "height": "100%"}));
 | 
				
			||||||
 | 
								svg.appendChild(makeSVG("rect", {"fill": _htOption.colorDark, "width": "1", "height": "1", "id": "template"}));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								for (var row = 0; row < nCount; row++) {
 | 
				
			||||||
 | 
									for (var col = 0; col < nCount; col++) {
 | 
				
			||||||
 | 
										if (oQRCode.isDark(row, col)) {
 | 
				
			||||||
 | 
											var child = makeSVG("use", {"x": String(col), "y": String(row)});
 | 
				
			||||||
 | 
											child.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#template")
 | 
				
			||||||
 | 
											svg.appendChild(child);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							Drawing.prototype.clear = function () {
 | 
				
			||||||
 | 
								while (this._el.hasChildNodes())
 | 
				
			||||||
 | 
									this._el.removeChild(this._el.lastChild);
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							return Drawing;
 | 
				
			||||||
 | 
						})();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var useSVG = document.documentElement.tagName.toLowerCase() === "svg";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Drawing in DOM by using Table tag
 | 
				
			||||||
 | 
						var Drawing = useSVG ? svgDrawer : !_isSupportCanvas() ? (function () {
 | 
				
			||||||
 | 
							var Drawing = function (el, htOption) {
 | 
				
			||||||
 | 
								this._el = el;
 | 
				
			||||||
 | 
								this._htOption = htOption;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Draw the QRCode
 | 
				
			||||||
 | 
							 * 
 | 
				
			||||||
 | 
							 * @param {QRCode} oQRCode
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.draw = function (oQRCode) {
 | 
				
			||||||
 | 
					            var _htOption = this._htOption;
 | 
				
			||||||
 | 
					            var _el = this._el;
 | 
				
			||||||
 | 
								var nCount = oQRCode.getModuleCount();
 | 
				
			||||||
 | 
								var nWidth = Math.floor(_htOption.width / nCount);
 | 
				
			||||||
 | 
								var nHeight = Math.floor(_htOption.height / nCount);
 | 
				
			||||||
 | 
								var aHTML = ['<table style="border:0;border-collapse:collapse;">'];
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								for (var row = 0; row < nCount; row++) {
 | 
				
			||||||
 | 
									aHTML.push('<tr>');
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									for (var col = 0; col < nCount; col++) {
 | 
				
			||||||
 | 
										aHTML.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:' + nWidth + 'px;height:' + nHeight + 'px;background-color:' + (oQRCode.isDark(row, col) ? _htOption.colorDark : _htOption.colorLight) + ';"></td>');
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									aHTML.push('</tr>');
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								aHTML.push('</table>');
 | 
				
			||||||
 | 
								_el.innerHTML = aHTML.join('');
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								// Fix the margin values as real size.
 | 
				
			||||||
 | 
								var elTable = _el.childNodes[0];
 | 
				
			||||||
 | 
								var nLeftMarginTable = (_htOption.width - elTable.offsetWidth) / 2;
 | 
				
			||||||
 | 
								var nTopMarginTable = (_htOption.height - elTable.offsetHeight) / 2;
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								if (nLeftMarginTable > 0 && nTopMarginTable > 0) {
 | 
				
			||||||
 | 
									elTable.style.margin = nTopMarginTable + "px " + nLeftMarginTable + "px";	
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Clear the QRCode
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.clear = function () {
 | 
				
			||||||
 | 
								this._el.innerHTML = '';
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return Drawing;
 | 
				
			||||||
 | 
						})() : (function () { // Drawing in Canvas
 | 
				
			||||||
 | 
							function _onMakeImage() {
 | 
				
			||||||
 | 
								this._elImage.src = this._elCanvas.toDataURL("image/png");
 | 
				
			||||||
 | 
								this._elImage.style.display = "block";
 | 
				
			||||||
 | 
								this._elCanvas.style.display = "none";			
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// Android 2.1 bug workaround
 | 
				
			||||||
 | 
							// http://code.google.com/p/android/issues/detail?id=5141
 | 
				
			||||||
 | 
							if (this._android && this._android <= 2.1) {
 | 
				
			||||||
 | 
						    	var factor = 1 / window.devicePixelRatio;
 | 
				
			||||||
 | 
						        var drawImage = CanvasRenderingContext2D.prototype.drawImage; 
 | 
				
			||||||
 | 
						    	CanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) {
 | 
				
			||||||
 | 
						    		if (("nodeName" in image) && /img/i.test(image.nodeName)) {
 | 
				
			||||||
 | 
							        	for (var i = arguments.length - 1; i >= 1; i--) {
 | 
				
			||||||
 | 
							            	arguments[i] = arguments[i] * factor;
 | 
				
			||||||
 | 
							        	}
 | 
				
			||||||
 | 
						    		} else if (typeof dw == "undefined") {
 | 
				
			||||||
 | 
						    			arguments[1] *= factor;
 | 
				
			||||||
 | 
						    			arguments[2] *= factor;
 | 
				
			||||||
 | 
						    			arguments[3] *= factor;
 | 
				
			||||||
 | 
						    			arguments[4] *= factor;
 | 
				
			||||||
 | 
						    		}
 | 
				
			||||||
 | 
						    		
 | 
				
			||||||
 | 
						        	drawImage.apply(this, arguments); 
 | 
				
			||||||
 | 
						    	};
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Check whether the user's browser supports Data URI or not
 | 
				
			||||||
 | 
							 * 
 | 
				
			||||||
 | 
							 * @private
 | 
				
			||||||
 | 
							 * @param {Function} fSuccess Occurs if it supports Data URI
 | 
				
			||||||
 | 
							 * @param {Function} fFail Occurs if it doesn't support Data URI
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							function _safeSetDataURI(fSuccess, fFail) {
 | 
				
			||||||
 | 
					            var self = this;
 | 
				
			||||||
 | 
					            self._fFail = fFail;
 | 
				
			||||||
 | 
					            self._fSuccess = fSuccess;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Check it just once
 | 
				
			||||||
 | 
					            if (self._bSupportDataURI === null) {
 | 
				
			||||||
 | 
					                var el = document.createElement("img");
 | 
				
			||||||
 | 
					                var fOnError = function() {
 | 
				
			||||||
 | 
					                    self._bSupportDataURI = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (self._fFail) {
 | 
				
			||||||
 | 
					                        self._fFail.call(self);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					                var fOnSuccess = function() {
 | 
				
			||||||
 | 
					                    self._bSupportDataURI = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (self._fSuccess) {
 | 
				
			||||||
 | 
					                        self._fSuccess.call(self);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                el.onabort = fOnError;
 | 
				
			||||||
 | 
					                el.onerror = fOnError;
 | 
				
			||||||
 | 
					                el.onload = fOnSuccess;
 | 
				
			||||||
 | 
					                el.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; // the Image contains 1px data.
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            } else if (self._bSupportDataURI === true && self._fSuccess) {
 | 
				
			||||||
 | 
					                self._fSuccess.call(self);
 | 
				
			||||||
 | 
					            } else if (self._bSupportDataURI === false && self._fFail) {
 | 
				
			||||||
 | 
					                self._fFail.call(self);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Drawing QRCode by using canvas
 | 
				
			||||||
 | 
							 * 
 | 
				
			||||||
 | 
							 * @constructor
 | 
				
			||||||
 | 
							 * @param {HTMLElement} el
 | 
				
			||||||
 | 
							 * @param {Object} htOption QRCode Options 
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							var Drawing = function (el, htOption) {
 | 
				
			||||||
 | 
					    		this._bIsPainted = false;
 | 
				
			||||||
 | 
					    		this._android = _getAndroid();
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
								this._htOption = htOption;
 | 
				
			||||||
 | 
								this._elCanvas = document.createElement("canvas");
 | 
				
			||||||
 | 
								this._elCanvas.width = htOption.width;
 | 
				
			||||||
 | 
								this._elCanvas.height = htOption.height;
 | 
				
			||||||
 | 
								el.appendChild(this._elCanvas);
 | 
				
			||||||
 | 
								this._el = el;
 | 
				
			||||||
 | 
								this._oContext = this._elCanvas.getContext("2d");
 | 
				
			||||||
 | 
								this._bIsPainted = false;
 | 
				
			||||||
 | 
								this._elImage = document.createElement("img");
 | 
				
			||||||
 | 
								this._elImage.alt = "Scan me!";
 | 
				
			||||||
 | 
								this._elImage.style.display = "none";
 | 
				
			||||||
 | 
								this._el.appendChild(this._elImage);
 | 
				
			||||||
 | 
								this._bSupportDataURI = null;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Draw the QRCode
 | 
				
			||||||
 | 
							 * 
 | 
				
			||||||
 | 
							 * @param {QRCode} oQRCode 
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.draw = function (oQRCode) {
 | 
				
			||||||
 | 
					            var _elImage = this._elImage;
 | 
				
			||||||
 | 
					            var _oContext = this._oContext;
 | 
				
			||||||
 | 
					            var _htOption = this._htOption;
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
								var nCount = oQRCode.getModuleCount();
 | 
				
			||||||
 | 
								var nWidth = _htOption.width / nCount;
 | 
				
			||||||
 | 
								var nHeight = _htOption.height / nCount;
 | 
				
			||||||
 | 
								var nRoundedWidth = Math.round(nWidth);
 | 
				
			||||||
 | 
								var nRoundedHeight = Math.round(nHeight);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								_elImage.style.display = "none";
 | 
				
			||||||
 | 
								this.clear();
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								for (var row = 0; row < nCount; row++) {
 | 
				
			||||||
 | 
									for (var col = 0; col < nCount; col++) {
 | 
				
			||||||
 | 
										var bIsDark = oQRCode.isDark(row, col);
 | 
				
			||||||
 | 
										var nLeft = col * nWidth;
 | 
				
			||||||
 | 
										var nTop = row * nHeight;
 | 
				
			||||||
 | 
										_oContext.strokeStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;
 | 
				
			||||||
 | 
										_oContext.lineWidth = 1;
 | 
				
			||||||
 | 
										_oContext.fillStyle = bIsDark ? _htOption.colorDark : _htOption.colorLight;					
 | 
				
			||||||
 | 
										_oContext.fillRect(nLeft, nTop, nWidth, nHeight);
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										// 안티 앨리어싱 방지 처리
 | 
				
			||||||
 | 
										_oContext.strokeRect(
 | 
				
			||||||
 | 
											Math.floor(nLeft) + 0.5,
 | 
				
			||||||
 | 
											Math.floor(nTop) + 0.5,
 | 
				
			||||||
 | 
											nRoundedWidth,
 | 
				
			||||||
 | 
											nRoundedHeight
 | 
				
			||||||
 | 
										);
 | 
				
			||||||
 | 
										
 | 
				
			||||||
 | 
										_oContext.strokeRect(
 | 
				
			||||||
 | 
											Math.ceil(nLeft) - 0.5,
 | 
				
			||||||
 | 
											Math.ceil(nTop) - 0.5,
 | 
				
			||||||
 | 
											nRoundedWidth,
 | 
				
			||||||
 | 
											nRoundedHeight
 | 
				
			||||||
 | 
										);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								this._bIsPainted = true;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Make the image from Canvas if the browser supports Data URI.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.makeImage = function () {
 | 
				
			||||||
 | 
								if (this._bIsPainted) {
 | 
				
			||||||
 | 
									_safeSetDataURI.call(this, _onMakeImage);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Return whether the QRCode is painted or not
 | 
				
			||||||
 | 
							 * 
 | 
				
			||||||
 | 
							 * @return {Boolean}
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.isPainted = function () {
 | 
				
			||||||
 | 
								return this._bIsPainted;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Clear the QRCode
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.clear = function () {
 | 
				
			||||||
 | 
								this._oContext.clearRect(0, 0, this._elCanvas.width, this._elCanvas.height);
 | 
				
			||||||
 | 
								this._bIsPainted = false;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * @private
 | 
				
			||||||
 | 
							 * @param {Number} nNumber
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							Drawing.prototype.round = function (nNumber) {
 | 
				
			||||||
 | 
								if (!nNumber) {
 | 
				
			||||||
 | 
									return nNumber;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								return Math.floor(nNumber * 1000) / 1000;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return Drawing;
 | 
				
			||||||
 | 
						})();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Get the type by string length
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @private
 | 
				
			||||||
 | 
						 * @param {String} sText
 | 
				
			||||||
 | 
						 * @param {Number} nCorrectLevel
 | 
				
			||||||
 | 
						 * @return {Number} type
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						function _getTypeNumber(sText, nCorrectLevel) {			
 | 
				
			||||||
 | 
							var nType = 1;
 | 
				
			||||||
 | 
							var length = _getUTF8Length(sText);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {
 | 
				
			||||||
 | 
								var nLimit = 0;
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								switch (nCorrectLevel) {
 | 
				
			||||||
 | 
									case QRErrorCorrectLevel.L :
 | 
				
			||||||
 | 
										nLimit = QRCodeLimitLength[i][0];
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case QRErrorCorrectLevel.M :
 | 
				
			||||||
 | 
										nLimit = QRCodeLimitLength[i][1];
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case QRErrorCorrectLevel.Q :
 | 
				
			||||||
 | 
										nLimit = QRCodeLimitLength[i][2];
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case QRErrorCorrectLevel.H :
 | 
				
			||||||
 | 
										nLimit = QRCodeLimitLength[i][3];
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								if (length <= nLimit) {
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									nType++;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (nType > QRCodeLimitLength.length) {
 | 
				
			||||||
 | 
								throw new Error("Too long data");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							return nType;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						function _getUTF8Length(sText) {
 | 
				
			||||||
 | 
							var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a');
 | 
				
			||||||
 | 
							return replacedText.length + (replacedText.length != sText ? 3 : 0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @class QRCode
 | 
				
			||||||
 | 
						 * @constructor
 | 
				
			||||||
 | 
						 * @example 
 | 
				
			||||||
 | 
						 * new QRCode(document.getElementById("test"), "http://jindo.dev.naver.com/collie");
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @example
 | 
				
			||||||
 | 
						 * var oQRCode = new QRCode("test", {
 | 
				
			||||||
 | 
						 *    text : "http://naver.com",
 | 
				
			||||||
 | 
						 *    width : 128,
 | 
				
			||||||
 | 
						 *    height : 128
 | 
				
			||||||
 | 
						 * });
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * oQRCode.clear(); // Clear the QRCode.
 | 
				
			||||||
 | 
						 * oQRCode.makeCode("http://map.naver.com"); // Re-create the QRCode.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param {HTMLElement|String} el target element or 'id' attribute of element.
 | 
				
			||||||
 | 
						 * @param {Object|String} vOption
 | 
				
			||||||
 | 
						 * @param {String} vOption.text QRCode link data
 | 
				
			||||||
 | 
						 * @param {Number} [vOption.width=256]
 | 
				
			||||||
 | 
						 * @param {Number} [vOption.height=256]
 | 
				
			||||||
 | 
						 * @param {String} [vOption.colorDark="#000000"]
 | 
				
			||||||
 | 
						 * @param {String} [vOption.colorLight="#ffffff"]
 | 
				
			||||||
 | 
						 * @param {QRCode.CorrectLevel} [vOption.correctLevel=QRCode.CorrectLevel.H] [L|M|Q|H] 
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						QRCode = function (el, vOption) {
 | 
				
			||||||
 | 
							this._htOption = {
 | 
				
			||||||
 | 
								width : 256, 
 | 
				
			||||||
 | 
								height : 256,
 | 
				
			||||||
 | 
								typeNumber : 4,
 | 
				
			||||||
 | 
								colorDark : "#000000",
 | 
				
			||||||
 | 
								colorLight : "#ffffff",
 | 
				
			||||||
 | 
								correctLevel : QRErrorCorrectLevel.H
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (typeof vOption === 'string') {
 | 
				
			||||||
 | 
								vOption	= {
 | 
				
			||||||
 | 
									text : vOption
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// Overwrites options
 | 
				
			||||||
 | 
							if (vOption) {
 | 
				
			||||||
 | 
								for (var i in vOption) {
 | 
				
			||||||
 | 
									this._htOption[i] = vOption[i];
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (typeof el == "string") {
 | 
				
			||||||
 | 
								el = document.getElementById(el);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (this._htOption.useSVG) {
 | 
				
			||||||
 | 
								Drawing = svgDrawer;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							this._android = _getAndroid();
 | 
				
			||||||
 | 
							this._el = el;
 | 
				
			||||||
 | 
							this._oQRCode = null;
 | 
				
			||||||
 | 
							this._oDrawing = new Drawing(this._el, this._htOption);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if (this._htOption.text) {
 | 
				
			||||||
 | 
								this.makeCode(this._htOption.text);	
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Make the QRCode
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param {String} sText link data
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						QRCode.prototype.makeCode = function (sText) {
 | 
				
			||||||
 | 
							this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);
 | 
				
			||||||
 | 
							this._oQRCode.addData(sText);
 | 
				
			||||||
 | 
							this._oQRCode.make();
 | 
				
			||||||
 | 
							this._el.title = sText;
 | 
				
			||||||
 | 
							this._oDrawing.draw(this._oQRCode);			
 | 
				
			||||||
 | 
							this.makeImage();
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Make the Image from Canvas element
 | 
				
			||||||
 | 
						 * - It occurs automatically
 | 
				
			||||||
 | 
						 * - Android below 3 doesn't support Data-URI spec.
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @private
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						QRCode.prototype.makeImage = function () {
 | 
				
			||||||
 | 
							if (typeof this._oDrawing.makeImage == "function" && (!this._android || this._android >= 3)) {
 | 
				
			||||||
 | 
								this._oDrawing.makeImage();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Clear the QRCode
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						QRCode.prototype.clear = function () {
 | 
				
			||||||
 | 
							this._oDrawing.clear();
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @name QRCode.CorrectLevel
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						QRCode.CorrectLevel = QRErrorCorrectLevel;
 | 
				
			||||||
 | 
					})();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										158
									
								
								scripts/seguridad.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										158
									
								
								scripts/seguridad.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,158 @@
 | 
				
			|||||||
 | 
					//////////////HASH, cifrar,descrifrar y base64
 | 
				
			||||||
 | 
					export function sha512(str) {
 | 
				
			||||||
 | 
					    let result = crypto.subtle.digest("SHA-512", new TextEncoder("utf-8").encode(str)).then(buf => {
 | 
				
			||||||
 | 
					      return Array.prototype.map.call(new Uint8Array(buf), x=>(('00'+x.toString(16)).slice(-2))).join('');
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					      return result;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					export function cifrar(ficheroTextoPlano, clave){ //Devuelve un objeto cryptojs, al hacer toSterng devolvera el formato json con todo
 | 
				
			||||||
 | 
					  let salt = CryptoJS.lib.WordArray.random(128 / 8); //Generamos salt
 | 
				
			||||||
 | 
					  let iv = CryptoJS.lib.WordArray.random(128 / 8); //Generamos vector de ini
 | 
				
			||||||
 | 
					  let keyderivation = CryptoJS.PBKDF2(clave, salt, { //Derivamos de la clave
 | 
				
			||||||
 | 
					    keySize: 256 / 32,
 | 
				
			||||||
 | 
					    iterations: 100
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  let encrypted = CryptoJS.AES.encrypt(ficheroTextoPlano, keyderivation, { //Fichero a cifrar, clave derivada, IV, relleno PKcs7 y el modo CBC
 | 
				
			||||||
 | 
					    iv: iv,
 | 
				
			||||||
 | 
					    padding: CryptoJS.pad.Pkcs7,
 | 
				
			||||||
 | 
					    mode: CryptoJS.mode.CBC,
 | 
				
			||||||
 | 
					    format: JsonFormatter
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  let objectCJS = JSON.parse(encrypted.toString());
 | 
				
			||||||
 | 
					  objectCJS.s = salt.toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return JSON.stringify(objectCJS);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					 export function descifrar(ficheroCifrado, clave){ //Devuelve la cadena descifrada
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  let ficherocifradoJS = JSON.parse(ficheroCifrado);
 | 
				
			||||||
 | 
					  let salt = CryptoJS.enc.Hex.parse(ficherocifradoJS.s);
 | 
				
			||||||
 | 
					  let iv = CryptoJS.enc.Hex.parse(ficherocifradoJS.iv)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  let keyderivation = CryptoJS.PBKDF2(clave, salt, { //Derivamos de la clave
 | 
				
			||||||
 | 
					    keySize: 256 / 32,
 | 
				
			||||||
 | 
					    iterations: 100
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  let decrypted = CryptoJS.AES.decrypt(ficherocifradoJS.ct, keyderivation, {
 | 
				
			||||||
 | 
					    iv: iv,
 | 
				
			||||||
 | 
					    padding: CryptoJS.pad.Pkcs7,
 | 
				
			||||||
 | 
					    mode: CryptoJS.mode.CBC
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return decrypted.toString(CryptoJS.enc.Utf8);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					export  function utf8_to_b64( str ) {
 | 
				
			||||||
 | 
					    return window.btoa(unescape(encodeURIComponent( str )));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					export  function b64_to_utf8( str ) {
 | 
				
			||||||
 | 
					    return decodeURIComponent(escape(window.atob( str )));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					export  function generarParDeClaves(){
 | 
				
			||||||
 | 
					    return crypto.subtle.generateKey(
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        name: "RSA-OAEP",
 | 
				
			||||||
 | 
					        modulusLength: 4096,
 | 
				
			||||||
 | 
					        publicExponent: new Uint8Array([1, 0, 1]),
 | 
				
			||||||
 | 
					        hash: "SHA-512"  //can be "SHA-1", "SHA-256", "SHA-384", or "SHA-512"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      true,
 | 
				
			||||||
 | 
					      ["encrypt", "decrypt"]
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					export  function exportarClave(key){
 | 
				
			||||||
 | 
					    return crypto.subtle.exportKey(
 | 
				
			||||||
 | 
					      "jwk", //  JSON Web Key
 | 
				
			||||||
 | 
					      key 
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					export  function importarClavePublica(jsonKey){
 | 
				
			||||||
 | 
					    return crypto.subtle.importKey(
 | 
				
			||||||
 | 
					      "jwk", //can be "jwk" (public or private), "spki" (public only), or "pkcs8" (private only)
 | 
				
			||||||
 | 
					      jsonKey,
 | 
				
			||||||
 | 
					      {   //these are the algorithm options
 | 
				
			||||||
 | 
					          name: "RSA-OAEP",
 | 
				
			||||||
 | 
					          hash: {name: "SHA-512"},
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      true, //SI se va a poder exportar
 | 
				
			||||||
 | 
					      ["encrypt"] //"encrypt" or "wrapKey" for public key import or
 | 
				
			||||||
 | 
					                  //"decrypt" or "unwrapKey" for private key imports
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					export  function importarClavePrivada(jsonKey){
 | 
				
			||||||
 | 
					    return crypto.subtle.importKey(
 | 
				
			||||||
 | 
					      "jwk", //can be "jwk" (public or private), "spki" (public only), or "pkcs8" (private only)
 | 
				
			||||||
 | 
					      jsonKey,
 | 
				
			||||||
 | 
					      {   //these are the algorithm options
 | 
				
			||||||
 | 
					          name: "RSA-OAEP",
 | 
				
			||||||
 | 
					          hash: {name: "SHA-512"},
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      true, //SI se va a poder exportar
 | 
				
			||||||
 | 
					      ["decrypt"] //"encrypt" or "wrapKey" for public key import or
 | 
				
			||||||
 | 
					                  //"decrypt" or "unwrapKey" for private key imports
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					export  function cifrarConPublica(publicKey, data){
 | 
				
			||||||
 | 
					    return crypto.subtle.encrypt(
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					          name: "RSA-OAEP",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      publicKey, //from generateKey or importKey above
 | 
				
			||||||
 | 
					      data //ArrayBuffer of data you want to encrypt
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					export  function descifrarConPrivada(privateKey, data){
 | 
				
			||||||
 | 
					    return crypto.subtle.decrypt(
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					          name: "RSA-OAEP",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      privateKey, //from generateKey or importKey above
 | 
				
			||||||
 | 
					      data //ArrayBuffer of the data
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					export  function CodificarDatos(data) {
 | 
				
			||||||
 | 
					    let enc = new TextEncoder();
 | 
				
			||||||
 | 
					    return enc.encode(data);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					export  function DecodificarDatos(data) {
 | 
				
			||||||
 | 
					    let enc = new TextDecoder();
 | 
				
			||||||
 | 
					    return enc.decode(data);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var JsonFormatter = {
 | 
				
			||||||
 | 
					  stringify: function(cipherParams) {
 | 
				
			||||||
 | 
					    // create json object with ciphertext
 | 
				
			||||||
 | 
					    var jsonObj = { ct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64) };
 | 
				
			||||||
 | 
					    // optionally add iv or salt
 | 
				
			||||||
 | 
					    if (cipherParams.iv) {
 | 
				
			||||||
 | 
					      jsonObj.iv = cipherParams.iv.toString();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (cipherParams.salt) {
 | 
				
			||||||
 | 
					      jsonObj.s = cipherParams.salt.toString();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // stringify json object
 | 
				
			||||||
 | 
					    return JSON.stringify(jsonObj);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function sha256(m){
 | 
				
			||||||
 | 
					  return CryptoJS.SHA256("hola").toString();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user