vk_Zodiac

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

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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();