Ejercicios fechas

 Mes:<input type="text" id="mes">
 Año:<input type="text" id="anyo">
 Festivos:<input type="text" id="festivos">
 <input type="button" onclick="calcular()" value="Calcular">
 <input type="button" onclick="total()" value="Total">
function calcular() {
//Obtener los valores de las cajas de texto
var mes = document.getElementById('mes').value;
var anyo = document.getElementById('anyo').value;

//Poner el resultado en el input festivos
document.getElementById('festivos').value = festivos(mes, anyo);

}

//Nos devuelve los años con más festivos
function maximoAnual(anyoDesde, anyoHasta) {
var anyo = [];
var maximo = 0;
for (var i = anyoDesde; i <= anyoHasta; i++) {
var t = total(i);
if (t === maximo) {
anyo.push(i);
}
if (t > maximo) {
anyo = [i];
maximo = t;
}
}
return [anyo, maximo];
}

//nos devuelve los meses con más festivos de un año
function mesesFestivos(anyo) {
var mes = [];
var maximo = 0;
for (var i = 1; i <= 12; i++) {
var t = festivos(i,anyo);
if (t === maximo) {
mes.push(i);
}
if (t > maximo) {
mes = [i];
maximo = t;
}
}
return [mes, maximo];
}
function total(anyo) {
var total = 0;
for (var i = 1; i <= 12; i++) {
total += festivos(i, anyo);
}
//Poner el resultado en el input festivos
return total;
}
function festivos(mes, anyo) {
var cont = 0;
var diasMes = daysInMonth(mes, anyo);
//Recorro el mes para buscar sábados y domingos
for (var i = 1; i <= diasMes; i++) {
var fecha = new Date(anyo, mes - 1, i);
//Si es sábado o domingo sumar uno al contador
if (fecha.getDay() === 6 || fecha.getDay() === 0) {
cont++;
}
}
return cont;
}

function daysInMonth(month, year) {
return new Date(year, month, 0).getDate();
}


Cesta de la compra

  <input type="text" id="producto" onkeyup="tecla(event)">
 <input type="button" onclick="comprar()" id="compra" value="Comprar">
 <input type="button" onclick="ordenar()" id="ordenar" value="Ordenar">
 <div id="cesta"></div>
var cesta = [];
function comprar() {
 var producto = document.getElementById('producto').value;
 if (producto.trim() !== "" && cesta.indexOf(producto) === -1) {
 cesta.push(producto);
 mostrar();
 } else {
 alert("Producto incorrecto o repetido");
 }
}
function tecla(event){
 if (event.keyCode===13){
 comprar();
 document.getElementById('producto').value="";
 }
}
function ordenar() {
 cesta.sort();
 mostrar();
}
function mostrar() {
 var resultado = document.getElementById('cesta');
 resultado.innerHTML = "";
 for (var i = 0; i < cesta.length; i++) {
 resultado.innerHTML += "<p>" + i + ".- "
 + cesta[i] +
 " <input type='button' value='X' onclick='borrar(" + i + ")'>" + "</p>";
 }
}
function borrar(i) {
 cesta.splice(i, 1);
 mostrar();
}

Cesta de la compra

 <input type="text" id="producto">
 <input type="button" onclick="comprar()" id="compra" value="Comprar">
 <div id="cesta"></div>
 var cesta = [];
function comprar() {
 var producto = document.getElementById('producto').value;
 if (producto.trim() !== "" && cesta.indexOf(producto) === -1) {
 cesta.push(producto);
 mostrar(cesta);
 } else {
 alert("Producto incorrecto o repetido");
 }
}
function mostrar(cesta) {
 var resultado = document.getElementById('cesta');
 resultado.innerHTML = "";
 for (var i = 0; i < cesta.length; i++) {
 resultado.innerHTML += "<p>" + i + ".- " + cesta[i] + "</p>";
 }
}

JavaScript fechas y otros

function sumar() {
var num1 = document.getElementById('num1').value;
var num2 = document.getElementById('num2').value;
var num3 = document.getElementById('num3');

num3.value = Number(num1) + Number(num2);
num3.value = suma(num1, num2);
}

var fecha = new Date();
var resultado = document.getElementById('resultado');
if (fecha.getDay() === 5) {
resultado.innerHTML = "¡por fin es viernes!!!!";
} else {
resultado.innerHTML = "Hoy NO es viernes :(";

}

var notas = [5, 4, 8, 9, 10];

//¿Cómo obtengo la suma?
var suma=0;
for (var i = 0; i < notas.length; i++) {
suma+=notas[i];
}
console.log(suma/notas.length);

function suma(num1, num2) {
return Number(num1) + Number(num2);
}

Ejemplo muy simple angular

core.js

var actores = angular.module('actores', []);

function mainController($scope, $http) {
	$scope.formData = {};

	// when landing on the page, get all todos and show them
	$http.get('http://localhost/api.php/actor/')
		.success(function(data) {
			$scope.actores = data;
		})
		.error(function(data) {
			console.log('Error: ' + data);
		});


}

index.html

<!doctype html><!doctype html>
<!-- ASSIGN OUR ANGULAR MODULE --><html ng-app="actores"><head> <!-- META --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"><!-- Optimize mobile viewport -->
 <title>Angular actor App</title>
 <!-- SCROLLS --> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
<!-- load bootstrap -->
 <!-- SPELLS -->
 <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script><!-- load angular --> <script src="core.js"></script>
</head>
<!-- SET THE CONTROLLER AND GET ALL actores WITH INITIALIZE FUNCTION --><body ng-controller="mainController"> 
<div class="container">
 <!-- HEADER AND actor COUNT --> 
<div class="jumbotron text-center"> 
<h1>Actores <span class="label label-info">{{ actores.length }}</span></h1> </div>
 <!-- actor LIST --> 
<div id="actor-list" class="row">
 <div class="col-sm-4 col-sm-offset-4">
 <!-- LOOP OVER THE actores IN $scope.actores --> 
<div class="checkbox" ng-repeat="actor in actores"> 
<label> {{ actor.first_name }} {{ actor.last_name }} </label> </div>
 </div> 
</div>
 </div>
</body></html>

Consumir servicios rest con angular

Algunas páginas muy explicativas:

https://carlosazaustre.es/blog/tutorial-ejemplo-de-aplicacion-web-con-angular-js-y-api-rest-con-node/

https://www.cursoangularjs.es/

https://www.toptal.com/angular-js/un-tutorial-paso-a-paso-para-tu-primera-aplicaci%C3%B3n-angularjs/es

Websocket

HTML5 incorpora tecnología de websockets:

https://developer.mozilla.org/es/docs/Web/API/WebSocket

Usarla en javascript es fácil. Para el siguiente ejemplo utilizamos la página echo.websocket.org que acepta conexiones y devuelve lo mismo que le mandas (echo)

<!DOCTYPE html>
<meta charset=”utf-8″ />
<title>WebSocket Test</title>
<script language=”javascript” type=”text/javascript”>

var wsUri = “ws://echo.websocket.org/”;
var output;

function init()
{
output = document.getElementById(“output”);
testWebSocket();
}

function testWebSocket()
{
websocket = new WebSocket(wsUri);
websocket.onopen = function(evt) { onOpen(evt) };
websocket.onclose = function(evt) { onClose(evt) };
websocket.onmessage = function(evt) { onMessage(evt) };
websocket.onerror = function(evt) { onError(evt) };
}

function onOpen(evt)
{
writeToScreen(“CONNECTED”);
doSend(“WebSocket rocks”);
}

function onClose(evt)
{
writeToScreen(“DISCONNECTED”);
}

function onMessage(evt)
{
writeToScreen(‘<span style=”color: blue;”>RESPONSE: ‘ + evt.data+'</span>’);
websocket.close();
}

function onError(evt)
{
writeToScreen(‘<span style=”color: red;”>ERROR:</span> ‘ + evt.data);
}

function doSend(message)
{
writeToScreen(“SENT: ” + message);
websocket.send(message);
}

function writeToScreen(message)
{
var pre = document.createElement(“p”);
pre.style.wordWrap = “break-word”;
pre.innerHTML = message;
output.appendChild(pre);
}

window.addEventListener(“load”, init, false);

</script>

<h2>WebSocket Test</h2>

<div id=”output”></div>

HTML5 en los navegadores

Los nuevos estándar HTML5 y CSS3 han incorporado una serie de características interesantes pero, por desgracia, no todos los navegadores las han implementado en la misma medida. Y tenemos el problema de los navegadores antiguos.

Para saber si podemos usar una característica HTML5 es conveniente usar la siguiente página:

www.caniuse.com/

Nos indica a partir de que versión de navegador se puede usar y cual es el porcentaje global.

Si queremos asegurarnos que todos los navegadores usan una característica podemos usar Polyfill. Un polyfill es un código que nos permite ‘simular’ una característica HTML5 en navegadores que no la soporten.

Aquí hay una lista muy actualizada:

https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills

La librería modernizr nos permite saber lo que podemos usar en un navegador:

https://modernizr.com/