vk_Zodiac

Показывает знак зодиака и возраст в профайле на vk.com

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

/*  vk_Zodiac - user script used to add zodiac sign and age into vk's profile page.
    
    Created: 07.02.2011 
    Last Changed: 04.12.2020

    This script is rebuilding of a 'IMDBAge v2.5' by Thomas Stewart.
*/

// ==UserScript==
// @name            vk_Zodiac
// @namespace       https://vk.com/drumtheatre
// @description	    Показывает знак зодиака и возраст в профайле на vk.com
// @author          DRUMtheatre
// @version         0.6.4
// @include         http://vk.com/*
// @include         https://vk.com/*
// @license         CC BY-NC-SA 4.0 International. https://creativecommons.org/licenses/by-nc-sa/4.0/
// ==/UserScript==

var born = new Date();

/*
calculates tropical zodiac sign
input:  month and day
output: tropical zodiac sign with label as string
*/
function zodiac(day, month) {
        var sign;
        
        // link the month and day to the sign
        if      (day >= 21 && month ==  3 || day <= 19 && month ==  4) sign = "Овен ♈";
        else if (day >= 20 && month ==  4 || day <= 20 && month ==  5) sign = "Телец ♉";
        else if (day >= 21 && month ==  5 || day <= 20 && month ==  6) sign = "Близнецы ♊";
        else if (day >= 21 && month ==  6 || day <= 22 && month ==  7) sign = "Рак ♋";
        else if (day >= 23 && month ==  7 || day <= 22 && month ==  8) sign = "Лев ♌";
        else if (day >= 23 && month ==  8 || day <= 22 && month ==  9) sign = "Дева ♍";
        else if (day >= 23 && month ==  9 || day <= 22 && month == 10) sign = "Весы ♎";
        else if (day >= 23 && month == 10 || day <= 21 && month == 11) sign = "Скорпион ♏";
        else if (day >= 22 && month == 11 || day <= 21 && month == 12) sign = "Стрелец ♐";
        else if (day >= 22 && month == 12 || day <= 19 && month ==  1) sign = "Козерог ♑";
        else if (day >= 20 && month ==  1 || day <= 18 && month ==  2) sign = "Водолей ♒";
        else if (day >= 19 && month ==  2 || day <= 20 && month ==  3) sign = "Рыбы ♓";

        // return text with label
        return sign;
}

/*
add sign to page
input: date person is born
*/
function addSign() {

	      // find place to stick the info
        var links = document.evaluate("//a[contains(@href,'[bday]')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

        // loop over all dates
        var link = links.snapshotItem(0);

        // create a containers
        var addon1 = document.createElement("span");
        addon1.style.color = "#808080";
        addon1.setAttribute("id", "zodiac");
 
        var addon2 = document.createElement("span");
        addon2.setAttribute("id", "zodiac");
        
        // determination colors of signs
        var $ = zodiac(born.getDate(), born.getMonth() + 1);
        if ($ == "Овен ♈" || $ == "Лев ♌" || $ == "Стрелец ♐") 
        addon2.style.color = "#FF6347";
        else if ($ == "Телец ♉" || $ == "Дева ♍" || $ == "Козерог ♑")
        addon2.style.color = "#1D1D1D";
        else if ($ == "Близнецы ♊" || $ == "Весы ♎" || $ == "Водолей ♒")
        addon2.style.color = "#9D9396";
        else addon2.style.color = "#6495ED";

        // fill a containers
        addon1.innerHTML = "&nbsp;&nbsp;|&nbsp;&nbsp;";
        addon2.innerHTML = $;

        // attach them
        link.parentNode.insertBefore(addon1, link.previousSibling);
        link.parentNode.insertBefore(addon2, link.previousSibling);
}

/*
add age of person to page
input: date person is born
*/
function addAge() {

	      // find the difference between two times
        var age = new Date() - born.getTime();
          
        // convert difference into years
        age = age / (1000 * 60 * 60 * 24 * 365.242199);
        
        // get nice values
        var years =  Math.floor(age);
        var months = Math.floor((age - years) * 10);
                  
        // try to determine 'word'
        var word;
        var dozens = Math.floor(years / 10);
        var delta = years - 10 * dozens;
        if ((years < 1) || ((years > 1) && (years < 5))) word = " года";
        else if (((years > 21) && ((delta > 1) && (delta < 5))) || ((delta == 1) && (months != 0))) word = " года";
        else if (((delta == 1) && (months == 0)) && ((years != 11) && (years != 111))) word = " год";
        else word = " лет";
       
        // don't show 0 month
        if (months > 0) months = "," + months;
        else months = "";
                       
        // loop over the tag involving dates
        var links = document.evaluate("//a[contains(@href,'[bday]')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
            
        // loop over all dates
        var link = links.snapshotItem(0);

        // create a container
        var addon3 = document.createElement("span");
        addon3.setAttribute("style", "margin-left: 4px;");
        addon3.setAttribute("id", "zodiac");

        // fill a container
        addon3.innerHTML = " " + years + months + word;
            
        // attach it
        link.parentNode.insertBefore(addon3, link.previousSibling);
}

// get year from profile page
function getYear() {

	      // loop over the tag involving dates
        var y_links = document.evaluate("//a[contains(@href,'[byear]')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

        // loop over all dates
        for (var i = 0; i < y_links.snapshotLength; i++) {
             var y_link = y_links.snapshotItem(i);
             var y_href = y_link.getAttribute("href");

             // extract a year
             if (y_href.indexOf('[byear]') != -1) {

                // extract actual data
                born.setFullYear(y_href.match(/\d{1,4}/g));
                addAge();
             }
        }
}

// get dates from profile page
function getDates() {

	      // loop over the tag involving dates
        var d_links = document.evaluate("//a[contains(@href,'[bday]')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

        // loop over all dates
        for (var i = 0; i < d_links.snapshotLength; i++) {
             var d_link = d_links.snapshotItem(i);
             var d_href = d_link.getAttribute("href");

             // extract date and month
             if (d_href.indexOf('[bday]') != -1) {

                // extract actual data
                born.setMonth(parseFloat((d_href.match(/\d{1,2}/g)[1]) - 1));
                born.setDate(d_href.match(/\d{1,2}/g)[0]);
                addSign();
             }
        }
        getYear();
}

getDates();

// checking for the existence
function checkExist() {
	    var z = document.getElementById("zodiac");
	    if (!z) getDates();
}

// AJAX rebuilding function
function rebuild() {
	    var watch = document.getElementById("page_layout");
	    if (watch !== null) {
	        watch.addEventListener("DOMNodeInserted", function(e) {
	              if (e.target.className == "profile_info" || e.target.id == "wrap2") checkExist();}, false);
	    }
}

rebuild();