Notificari in browser

Pagina 1 din 2 1, 2  Urmatorul

Vezi subiectul anterior Vezi subiectul urmator In jos

Notificari in browser

Mesaj Scris de Zeus la data de Mar 16 Mai - 18:15

Salutare tuturor,

Facilitatea din acest subiect permite afisarea notificarilor in browser. Pentru functionare corespunzatoare browser-ul trebuie sa permita cookies si javascript, iar forumul sa aiba un certificat SSL.

Google a anuntat ca incepand cu luna septembrie a acestui an API-ul pentru notificari nu va mai fi functional pentru site-urile care nu au un certificat SSL activ.

Demonstratie





Instalare

Pentru instalarea acestei caracteristici intrati in:
Panou > Module > HTML & JAVASCRIPT > Gestiunea codurilor javascript > Creati un nou cod JavaScript

Completati rubricile cu:

  • Titlu: Notificari in browser
  • Amplasare: Toate paginile
  • Cod:

    Cod:

    $(function() {
       
        if (navigator.cookieEnabled !== true) return;
       
        var config = {
            notif_comm: false,
            forum_name: "Forumul forumurilor",
            forum_icon: "https://redcdn.net/frmste/images/sigle.png",
            recheck: 120,
            debug: false,
            lang: "ro", // "eng" or "ro"
            margin_top: 30,
            limit: 4,
            forums: [45, 43, 44]
        };
       
        config.forums = shuffle(config.forums);
     
       
        switch (config.lang) {
            case "ro":
                $lang = {
                    request_permission : "%s doreste sa va afiseze notificari",
                    allow : "Permite",
                    notallow : "Nu, multumesc"
                };
            break;
           
            case "eng":
                $lang = {
                    request_permission : "%s wants to show notifications",
                    allow : "Allow",
                    notallow : "No, thank you"
                };
            break;
        }   


        function sentNotif() {
            if (Notification.permission !== "granted") {
                if(getCookie("notif_allow") !== "") return;
                requestPermissions();
            } else if (navigator.cookieEnabled === true) {
                setCookie("notif_allow", true, 365);
               
                if (getCookie("notif_push_forum_" + config.forums[0]) !== "") {
                   
                    $posts = shuffle(JSON.parse(getCookie("notif_push_forum_" + config.forums[0])));

                    if (getCookie("notif_push_topics").indexOf($posts[0].topic_id) > -1) return;
                   
                    if (getCookie("notif_count") >= config.limit) return;
                   
                    if (getCookie("notif_wait") === "1") return;
                   
                    setCookie("notif_wait", "1", "", 3);
                   
                    viewTopic($posts[0].topic_id);

                    var notification = new Notification(config.forum_name, {
                        icon: config.forum_icon,
                        body: $posts[0].topic_title
                    });

                    notification.onclick = function() {
                        window.open($posts[0].topic_link);
                        window.focus();
                    };
                   
                    notifCount();
                }
            }
        }
       
        function notifCount() {
            if(getCookie("notif_count") === "") {
                setCookie("notif_count", 1, 1);
            } else {
                setCookie("notif_count", (Number(getCookie("notif_count") ) + 1), 1);
            }
        }

        function viewTopic($topic_id) {
            if ($topic_id === null || $topic_id === "") return;
            $seen = [];
            if (getCookie("notif_push_topics") === "") {
                $seen = [$topic_id];
                setCookie("notif_push_topics", JSON.stringify($seen), 30);
                if (config.debug === true) {
                    console.log("[DEBUG] The cookie \"notif_push_topics\" has been created");
                    console.log($seen);
                }
            } else {
                if ($.inArray($topic_id, JSON.parse(getCookie("notif_push_topics"))) === -1) {
                    setCookie("notif_push_topics", JSON.stringify(JSON.parse(getCookie("notif_push_topics")).concat($topic_id)), 30);
                    if (config.debug === true) {
                        console.log("[DEBUG] The cookie \"notif_push_topics\" has been updated");
                        console.log(JSON.parse(getCookie("notif_push_topics")));
                    }
                } else {
                    if (config.debug === true) {
                        console.log("[DEBUG] The cookie \"notif_push_topics\" is already the value " + $topic_id);
                        console.log(JSON.parse(getCookie("notif_push_topics")));
                    }
                }
            }
        }

        function requestPermissions() {
           
            if (getCookie("notif_allow") === "false") return;
           
            $("head").append('<style>.mondal_notif{position:fixed;top:' + config.margin_top + 'px;margin:0 auto;width:100%;}.mondal_notif > .container_notif{width:600px;background:#fff;box-shadow:0 0 20px rgba(0,0,0,0.3);padding:10px;text-align:center;margin:0 auto;border:1px solid #d7d7d7;margin-top:-1px}.mondal_notif > .container_notif p{font-size:16px}.mondal_notif [name="allow"],.mondal_notif [name="notallow"]{background:#39c;padding:10px;cursor:pointer;margin-right:20px;border:0;color:#fff;font-weight:400;text-transform:uppercase}.mondal_notif [name="notallow"]{background:#adadad}</style');
           
            $("body").append('  <div class="mondal_notif">' +
                                    '<div class="container_notif">' +
                                        '<p>' + $lang.request_permission.replace("%s", config.forum_name) + '</p>' +
                                        '<div class="buttons_notif">' +
                                            '<button name="allow" class="allownotif">' + $lang.allow + '</button>' +
                                            '<button name="notallow"  class="notallownotif">' + $lang.notallow + '</button>' +
                                        '</div>' +
                                    '</div>' +
                                '</div>');
                               
            $('.allownotif').on( "click", function() {
                setCookie("notif_allow", true, 7);
                Notification.requestPermission();
                $(".mondal_notif").hide();
            });
       
            $('.notallownotif').on( "click", function() {
                setCookie("notif_allow", false, 7);
                $(".mondal_notif").hide();
            });                     
                               
        }

        function reloadData() {
            for (var x = 0; x < config.forums.length; x++) {
                $id = config.forums[x];
                $.get("/feed/?f=" + $id).done(function(data) {
                    $id = config.forums[x];
                    $object = [];
                    $xml = $(data);
                    if (getCookie("notif_push_topics") === "" || getCookie("notif_push_topics") === null) {
                        setCookie("notif_push_topics", JSON.stringify([]), 30);
                    }
                    for (var i = 0; i < $xml.find("item").length; i++) {
                        if (checkDate(new Date(new Date().getTime() + -1 * 24 * 60 * 60 * 1000), $xml.find("item").find("pubDate")[i].textContent, $xml.find("item").find("pubDate")[i].textContent) && JSON.parse(getCookie("notif_push_topics")).indexOf($xml.find("item").find("link")[i].textContent.replace(/[^0-9]+/g, "")) === -1) {
                            $object.push({
                                topic_id: $xml.find("item").find("link")[i].textContent.replace(/[^0-9]+/g, ""),
                                topic_title: $xml.find("item").find("title")[i].textContent,
                                topic_date: $xml.find("item").find("pubDate")[i].textContent,
                                topic_link: $xml.find("item").find("link")[i].textContent,
                                forum_id: $xml.find("image").find("link").text().replace(/[^0-9]+/g, ""),
                                comment_id: $xml.find("item").find("comments")[i].textContent.replace(/[^0-9]+/g, ""),
                                forum_name: $xml.find("image").find("title").text()
                            });
                        }
                    }
                    if (!isEmpty($object)) {
                        $cookie_name = "notif_push_forum_" + $xml.find("image").find("link").text().replace(/[^0-9]+/g, "");
                        if (getCookie($cookie_name) === "" || getCookie($cookie_name) !== JSON.stringify($object)) {
                            if (config.debug === true) {
                                console.log("[DEBUG] The cookie \"" + $cookie_name + "\" has been saved/updated");
                                console.log($object);
                            }
                            setCookie($cookie_name, JSON.stringify($object), 30);
                        }
                    }
                });
            }
        }

        function shuffle(array) {
            var currentIndex = array.length,
                temporaryValue, randomIndex;
            while (0 !== currentIndex) {
                randomIndex = Math.floor(Math.random() * currentIndex);
                currentIndex -= 1;
                temporaryValue = array[currentIndex];
                array[currentIndex] = array[randomIndex];
                array[randomIndex] = temporaryValue;
            }
            return array;
        }

        function checkDate(from, to, check) {
            var fDate = Date.parse(from),
                lDate = Date.parse(to),
                cDate = Date.parse(check);
            if ((cDate <= lDate && cDate >= fDate)) {
                return true;
            }
            return false;
        }

        function isEmpty(obj) {
            for (var key in obj) {
                if (obj.hasOwnProperty(key))
                    return false;
            }
            return true;
        }


        function setCookie(cname, cvalue, exdays, exmins) {
            var d = new Date();
            if(exdays === "") {
                d.setTime(d.getTime() + (exmins * 60 * 1000));
            } else {
                d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
            }
            var expires = "expires=" + d.toGMTString();
            document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
        }

        function getCookie(cname) {
            var name = cname + "=";
            var decodedCookie = decodeURIComponent(document.cookie);
            var ca = decodedCookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) === ' ') {
                    c = c.substring(1);
                }
                if (c.indexOf(name) === 0) {
                    return c.substring(name.length, c.length);
                }
            }
            return "";
        }

        setTimeout(function() {
            reloadData();
            sentNotif();
        }, (config.recheck * 1000));


        window.onload = function() {
            reloadData();
            sentNotif();
        };

    });


In variabila config exista alte variabile care permit personalizarea

  • forum_name - numele forumului
  • forum_icon - icon-ul de afisat in notificare
  • recheck - interval de timp in secunde pentru reverificarea notificarilor.
  • debug - mod dezvoltator (permite true sau
  • false)
  • lang - limba prestabilita (valori disponibile: eng sau
  • ro)
  • margin_top - distanta in pixeli a pop-up-ului fata de antent
  • limit - limita de notificari de afisat in decurs de 24 ore
  • forums - ID-urile forumurilor dorite


Ultima editare efectuata de catre Zeus in Mier 26 Iul - 22:41, editata de 1 ori
avatar
Zeus
Membru onorific
Membru onorific

Mesaje : 4173
Localizare : Bucuresti, Romania
Data înscrierii : 19/02/2012
Multumiri : 641
Niciun avertisment

Vezi profilul utilizatorului https://github.com/zeusmaximus

Sus In jos

Re: Notificari in browser

Mesaj Scris de Ionut la data de Mar 16 Mai - 18:43

Foarte frumos, am crezut că s-a actualizat brownser-ul de îmi apărea acea notificare. clap
avatar
Ionut
Contribuitor suport
Contribuitor suport

Mesaje : 771
Varsta : 19
Data înscrierii : 01/11/2015
Multumiri : 123
Niciun avertisment

Vezi profilul utilizatorului http://hhttp://invisionpower.rpgwars.net/

Sus In jos

Re: Notificari in browser

Mesaj Scris de mihai la data de Mar 16 Mai - 20:32

am mai văzut site-uri, în care eu am probleme cu pc-ul (uneori), și când dau să caut, îmi apar și notificările, uneorii și informații din IT, apar și notificările acolo... good job!
avatar
mihai
Traducator
Traducator

Mesaje : 845
Varsta : 20
Localizare : Bucharest, Romania
Data înscrierii : 25/09/2014
Multumiri : 72
1 avertisment

Vezi profilul utilizatorului http://help.forumgratuit.ro/

Sus In jos

Re: Notificari in browser

Mesaj Scris de Nocti la data de Mar 16 Mai - 20:55

Thanks. Da
avatar
Nocti
Membru Forumgratuit

Mesaje : 239
Varsta : 18
Data înscrierii : 04/06/2014
Multumiri : 3
Niciun avertisment

Vezi profilul utilizatorului http://www.infinigame.biz/

Sus In jos

Re: Notificari in browser

Mesaj Scris de mr.franta la data de Mar 16 Mai - 20:59

Foarte reusit,este un topbar pe invizibil sa spun asa.Imi place mult!


Daca v-am fost de ajutor apasati butonul  
avatar
mr.franta
Asistent
Asistent

Mesaje : 1307
Varsta : 30
Localizare : Giurgiu
Data înscrierii : 18/02/2012
Multumiri : 112
Niciun avertisment

Vezi profilul utilizatorului http://www.frannnta-design.com/

Sus In jos

Re: Notificari in browser

Mesaj Scris de Lucifer la data de Mar 16 Mai - 21:41

O sa implemented ai eu codul asta ! Multumim mult!
avatar
Lucifer
Asistent
Asistent

Mesaje : 826
Varsta : 15
Localizare : Constanţa
Data înscrierii : 21/05/2016
Multumiri : 101
Niciun avertisment

Vezi profilul utilizatorului https://www.fgdesign.biz/

Sus In jos

Re: Notificari in browser

Mesaj Scris de Atracción la data de Mier 17 Mai - 11:07

Arata super bine ! L-am testat pe forumul personal si functioneaza perfect.
avatar
Atracción
Membru onorific
Membru onorific

Mesaje : 1850
Varsta : 19
Data înscrierii : 19/11/2012
Multumiri : 11
Niciun avertisment

Vezi profilul utilizatorului http://help.forumgratuit.ro/forum

Sus In jos

Re: Notificari in browser

Mesaj Scris de SSYT la data de Dum 21 Mai - 22:22

Un cod superb, foarte frumos @Zeus. Un astfel de cod ofera puțină culoare unui forum.


avatar
SSYT
Administrator
Administrator

Mesaje : 1398
Varsta : 23
Localizare : France, Aisne
Data înscrierii : 10/08/2015
Multumiri : 195
Niciun avertisment

Vezi profilul utilizatorului http://help.forumgratuit.ro

Sus In jos

Re: Notificari in browser

Mesaj Scris de Dan Ţeca la data de Mier 14 Iun - 12:48

@Zeus a scris:Personalizarea notificarilor din cod:

var forums = [6, 4, 5, 16];

Inlocuiti sirul de numere din acea linie cu ID-urile sectiuniilor dorite.
Cred că nu am înţeles - ce înseamnă ID-ul unei secţiuni? Este vorba de numărul acela din adresa web a forumului cu "f" în faţă sau nr. cu "c" (de la categorie)? Sau e cu totul altceva? Unde-l găsesc?
avatar
Dan Ţeca
Membru nou

Mesaje : 4
Varsta : 50
Data înscrierii : 08/03/2017
Multumiri : 0
Niciun avertisment

Vezi profilul utilizatorului http://non-partid.forumgratuit.ro

Sus In jos

Re: Notificari in browser

Mesaj Scris de Zachary la data de Joi 15 Iun - 15:39

@Dan Ţeca a scris:
@Zeus a scris:Personalizarea notificarilor din cod:

var forums = [6, 4, 5, 16];

Inlocuiti sirul de numere din acea linie cu ID-urile sectiuniilor dorite.
Cred că nu am înţeles - ce înseamnă ID-ul unei secţiuni? Este vorba de numărul acela din adresa web a forumului cu "f" în faţă sau nr. cu "c" (de la categorie)? Sau e cu totul altceva? Unde-l găsesc?

"Este vorba de numărul acela din adresa web a forumului cu "f" în faţă sau nr. cu "c" (de la categorie)?" -> răspunsul este cel îngroșat. Fericit
avatar
Zachary
Membru activ

Mesaje : 2412
Localizare : România
Data înscrierii : 08/05/2013
Multumiri : 194
Niciun avertisment

Vezi profilul utilizatorului http://www.forumgratuit.ro

Sus In jos

Re: Notificari in browser

Mesaj Scris de Dan Ţeca la data de Lun 19 Iun - 17:12

@Zeus a scris:Codul este inca in faza de dezvoltare, in caz de functionare necorespunzatoare postati aici. A face cu ochiul
Din păcate nu funcţionează. Supărat
După ce l-am implementat, într-adevăr, site-ul m-a întrebat dacă accept notificări (şi am răspuns Allow), dar nu primesc nicio notificare de la secţiunile respective, deşi am personalizat corect la var forums
Şi cauza nu este de la Chrome-ul meu - notificările altor site-uri (Facebook etc.) merg bine.
avatar
Dan Ţeca
Membru nou

Mesaje : 4
Varsta : 50
Data înscrierii : 08/03/2017
Multumiri : 0
Niciun avertisment

Vezi profilul utilizatorului http://non-partid.forumgratuit.ro

Sus In jos

Re: Notificari in browser

Mesaj Scris de Zeus la data de Mar 20 Iun - 13:10

Intr-adevar exista o problema in cod care impiedica functionarea corespunzatoare.

Voi revizui codul si voi reveni cu edit.
avatar
Zeus
Membru onorific
Membru onorific

Mesaje : 4173
Localizare : Bucuresti, Romania
Data înscrierii : 19/02/2012
Multumiri : 641
Niciun avertisment

Vezi profilul utilizatorului https://github.com/zeusmaximus

Sus In jos

Pagina 1 din 2 1, 2  Urmatorul

Vezi subiectul anterior Vezi subiectul urmator Sus


Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum