<commit_before>
/* Sistema de comprobación del soporte de tecnologías requeridas */
ARProgrezz.Support = {};
(function (namespace) {

    'use strict';

    var GEO_TIMEOUT = 8000; // (ms)
    var SIGNAL_ON_COLOR = "#55FC18"; // green
    var SIGNAL_OFF_COLOR = "#666666"; // gray

    // Tecnologías activadas
    namespace.video = null;
    namespace.gyroscope = null;
    namespace.geolocation = null;

    // Funciones de activación/desactivación
    namespace.onChangeVideo = null;
    namespace.onChangeGyroscope = null;
    namespace.onChangeGeolocation = null;

    // Vídeo stream
    namespace.videoStream = null;

    // Callback de obtención de coordenadas
    namespace.geoCallback = null;

    // Tecnologías soportadas
    var available = {
        video: false,
        gyroscope: false,
        geolocation: false
    };

    /* Comprobación de acceso a vídeo, giroscopio, y geolocalización */
    namespace.check = function (end_function) {
        checkGeolocation(function () {

            if (!available.geolocation) { // Si no hay acceso a la geolocalización, se detiene la carga
                alert(">> El visor no ha podido iniciarse por no ser capaz de acceder a la geolocalización <<");
                return;
            }

            checkGyroscope(function () {

                if (!available.gyroscope) { // Sin giroscopio, no es necesario comprobar la carga del vídeo
                    available.video = false;
                    namespace.video = false;
                    if (end_function) {
                        end_function();
                    }
                    return;
                }

                checkVideoCamera(function () {
                    if (end_function) {
                        end_function();
                    }
                });
            });
        });
    };

    /* Acceso al vídeo */
    function accessVideo (constraints, end_function) {

        navigator.getUserMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia);

        if (navigator.getUserMedia) {

            var signal = {flag: ARProgrezz.Utils.Flags.WAIT};

            navigator.getUserMedia(
                constraints, // Reestricciones de acceso a la cámara trasera
                function (localMediaStream) { // Obteniendo datos de vídeo
                    namespace.video = true;
                    available.video = true;
                    namespace.videoStream = localMediaStream;
                    signal.flag = ARProgrezz.Utils.Flags.SUCCESS;
                },
                function () { // Vídeo no accesible
                    available.video = false;
                    namespace.video = false;
                    signal.flag = ARProgrezz.Utils.Flags.SUCCESS;
                }
            );
            ARProgrezz.Utils.waitCallback(signal, end_function);
        } else {

            available.video = false;
            namespace.video = false;
            end_function();
        }
    }

    /* Acceso a la cámara de vídeo (getUserMedia) */
    function checkVideoCamera (end_function) {

        // Accediendo a la cámara trasera dependiendo del navegador
        var nav = navigator.userAgent.toLowerCase();

        if (nav.indexOf("chrome") !== -1) { // En Chrome se utiliza por defecto la cámara frontal, por lo que se selecciona la trasera de forma manual

            MediaStreamTrack.getSources(function (sourceInfos) {

                // Seleccionando la cámara trasera del dispositivo
                var i, s = Object.keys(sourceInfos), videoSource = null;
                for (i = 0; i < s.length; i += 1) {
                    if (sourceInfos[s[i]].kind === 'video' && sourceInfos[s[i]].facing !== 'user') {
                        videoSource = sourceInfos[s[i]].id;
                    }
                }

                accessVideo({video: {optional: [{sourceId: videoSource}]}, audio: false}, end_function);
            });
        } else if (nav.indexOf("firefox") !== -1) { // En Firefox el usuario decide que cámara compartir
            accessVideo({video: true, audio: false}, end_function);
        } else { // Otros navegadores - Acceso estándar
            accessVideo({video: true, audio: false}, end_function);
        }
    }

    /* Acceso al giroscopio */
    function checkGyroscope (end_function) {

        if (window.DeviceOrientationEvent) {

            var signal = {flag: ARProgrezz.Utils.Flags.WAIT};

            var EVENT_TIME = 1000;
            var count = 0;

            var onEvent = function () {

                count += 1;
            };

            var onEnd = function () {

                window.removeEventListener('deviceorientation', onEvent, false);

                if (count > 1) {
                    available.gyroscope = true;
                    namespace.gyroscope = true;
                } else {
                    available.gyroscope = false;
                    namespace.gyroscope = false;
                }
                signal.flag = ARProgrezz.Utils.Flags.SUCCESS;
            };

            window.addEventListener('deviceorientation', onEvent, false);
            ARProgrezz.Utils.waitCallback(signal, end_function);
            setTimeout(onEnd, EVENT_TIME);
        } else {

            available.gyroscope = false;
            namespace.gyroscope = false;
            end_function();
        }
    }

    /* Acceso a la geolocalización */
    function checkGeolocation (end_function) {

        if (navigator.geolocation) {

            var signal = {flag: ARProgrezz.Utils.Flags.WAIT};

            // Callback de acceso a la geolocalización
            namespace.geoCallback = function () {

                if (namespace.geolocation !== null) {
                    return;
                }

                namespace.geolocation = true;
                available.geolocation = true;
                signal.flag = ARProgrezz.Utils.Flags.SUCCESS;
            };
            navigator.geolocation.watchPosition(function (data) {
                namespace.geoCallback(data);
            });

            setTimeout(function () {
                if (signal.flag === ARProgrezz.Utils.Flags.WAIT) {
                    available.geolocation = false;
                    namespace.geolocation = false;
                    signal.flag = ARProgrezz.Utils.Flags.SUCCESS;
                }
            }, GEO_TIMEOUT);

            ARProgrezz.Utils.waitCallback(signal, end_function);
        } else {

            available.geolocation = false;
            namespace.geolocation = false;
            end_function();
        }
    }

    /* Comprobación de soporte de WebGL */
    namespace.webglAvailable = function () {
        try {
            var canvas = document.createElement('canvas');
            return !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));
        } catch (e) {
            console.log(e);
            return false;
        }
    };<commit_msg>Añadiendo alertas de geolocalizacion<commit_after>
/* Sistema de comprobación del soporte de tecnologías requeridas */
ARProgrezz.Support = {};
(function (namespace) {

    'use strict';

    var GEO_TIMEOUT = 80000; // (ms)
    var SIGNAL_ON_COLOR = "#55FC18"; // green
    var SIGNAL_OFF_COLOR = "#666666"; // gray

    // Tecnologías activadas
    namespace.video = null;
    namespace.gyroscope = null;
    namespace.geolocation = null;

    // Funciones de activación/desactivación
    namespace.onChangeVideo = null;
    namespace.onChangeGyroscope = null;
    namespace.onChangeGeolocation = null;

    // Vídeo stream
    namespace.videoStream = null;

    // Callback de obtención de coordenadas
    namespace.geoCallback = null;

    // Tecnologías soportadas
    var available = {
        video: false,
        gyroscope: false,
        geolocation: false
    };

    /* Comprobación de acceso a vídeo, giroscopio, y geolocalización */
    namespace.check = function (end_function) {
        checkGeolocation(function () {

            if (!available.geolocation) { // Si no hay acceso a la geolocalización, se detiene la carga
                alert(">> El visor no ha podido iniciarse por no ser capaz de acceder a la geolocalización <<");
                return;
            }

            checkGyroscope(function () {

                if (!available.gyroscope) { // Sin giroscopio, no es necesario comprobar la carga del vídeo
                    available.video = false;
                    namespace.video = false;
                    if (end_function) {
                        end_function();
                    }
                    return;
                }

                checkVideoCamera(function () {
                    if (end_function) {
                        end_function();
                    }
                });
            });
        });
    };

    /* Acceso al vídeo */
    function accessVideo (constraints, end_function) {

        navigator.getUserMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia);

        if (navigator.getUserMedia) {

            var signal = {flag: ARProgrezz.Utils.Flags.WAIT};

            navigator.getUserMedia(
                constraints, // Reestricciones de acceso a la cámara trasera
                function (localMediaStream) { // Obteniendo datos de vídeo
                    namespace.video = true;
                    available.video = true;
                    namespace.videoStream = localMediaStream;
                    signal.flag = ARProgrezz.Utils.Flags.SUCCESS;
                },
                function () { // Vídeo no accesible
                    available.video = false;
                    namespace.video = false;
                    signal.flag = ARProgrezz.Utils.Flags.SUCCESS;
                }
            );
            ARProgrezz.Utils.waitCallback(signal, end_function);
        } else {

            available.video = false;
            namespace.video = false;
            end_function();
        }
    }

    /* Acceso a la cámara de vídeo (getUserMedia) */
    function checkVideoCamera (end_function) {

        // Accediendo a la cámara trasera dependiendo del navegador
        var nav = navigator.userAgent.toLowerCase();

        if (nav.indexOf("chrome") !== -1) { // En Chrome se utiliza por defecto la cámara frontal, por lo que se selecciona la trasera de forma manual

            MediaStreamTrack.getSources(function (sourceInfos) {

                // Seleccionando la cámara trasera del dispositivo
                var i, s = Object.keys(sourceInfos), videoSource = null;
                for (i = 0; i < s.length; i += 1) {
                    if (sourceInfos[s[i]].kind === 'video' && sourceInfos[s[i]].facing !== 'user') {
                        videoSource = sourceInfos[s[i]].id;
                    }
                }

                accessVideo({video: {optional: [{sourceId: videoSource}]}, audio: false}, end_function);
            });
        } else if (nav.indexOf("firefox") !== -1) { // En Firefox el usuario decide que cámara compartir
            accessVideo({video: true, audio: false}, end_function);
        } else { // Otros navegadores - Acceso estándar
            accessVideo({video: true, audio: false}, end_function);
        }
    }

    /* Acceso al giroscopio */
    function checkGyroscope (end_function) {

        if (window.DeviceOrientationEvent) {

            var signal = {flag: ARProgrezz.Utils.Flags.WAIT};

            var EVENT_TIME = 1000;
            var count = 0;

            var onEvent = function () {

                count += 1;
            };

            var onEnd = function () {

                window.removeEventListener('deviceorientation', onEvent, false);

                if (count > 1) {
                    available.gyroscope = true;
                    namespace.gyroscope = true;
                } else {
                    available.gyroscope = false;
                    namespace.gyroscope = false;
                }
                signal.flag = ARProgrezz.Utils.Flags.SUCCESS;
            };

            window.addEventListener('deviceorientation', onEvent, false);
            ARProgrezz.Utils.waitCallback(signal, end_function);
            setTimeout(onEnd, EVENT_TIME);
        } else {

            available.gyroscope = false;
            namespace.gyroscope = false;
            end_function();
        }
    }

    /* Acceso a la geolocalización */
    function checkGeolocation (end_function) {

        if (navigator.geolocation) {
alert("Existe geo");
            var signal = {flag: ARProgrezz.Utils.Flags.WAIT};

            // Callback de acceso a la geolocalización
            namespace.geoCallback = function () {

                if (namespace.geolocation !== null) {
                    return;
                }

                namespace.geolocation = true;
                available.geolocation = true;
                signal.flag = ARProgrezz.Utils.Flags.SUCCESS;
            };
            navigator.geolocation.watchPosition(function (data) {
                alert("Conseguido");
                namespace.geoCallback(data);
            });

            setTimeout(function () {
                if (signal.flag === ARProgrezz.Utils.Flags.WAIT) {
                    available.geolocation = false;
                    namespace.geolocation = false;
                    signal.flag = ARProgrezz.Utils.Flags.SUCCESS;
                }
            }, GEO_TIMEOUT);

            ARProgrezz.Utils.waitCallback(signal, end_function);
        } else {

            available.geolocation = false;
            namespace.geolocation = false;
            end_function();
        }
    }

    /* Comprobación de soporte de WebGL */
    namespace.webglAvailable = function () {
        try {
            var canvas = document.createElement('canvas');
            return !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));
        } catch (e) {
            console.log(e);
            return false;
        }
    };
{'fraction_non_alphanumeric': 0.09695349328079927, 'fraction_numerical': 0.003588264265109407, 'mean_word_length': 1.596638655462185, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1720650', 'n_tokens_mistral': 3936, 'n_tokens_neox': 3726, 'n_words': 854}