مدیاویکی:Gadget-Weather.js
نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
- فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلیدهای Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-R)
- گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-Shift-R)
- اینترنت اکسپلورر/ Edge: کلید Ctrl را نگهدارید و روی دکمهٔ Refresh کلیک کنید، یا کلیدهای Ctrl-F5 را با هم فشار دهید
- اپرا: Ctrl-F5 را بفشارید.
/*
* LIVE WEATHER BY [[User:Mjbmr]]
*/
window.weather = {};
weather.object_size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
weather.status_list = {
200:["رعد و برق همراه با بارش باران سبک",6,6],
201:["رعد و برق همراه با بارش باران",6,6],
202:["رعد و برق همراه با بارش باران سنگین",6,6],
210:["رعد و برق سبک",5,5],
211:["رعد و برق",5,5],
212:["رعد و برق سنگین",5,5],
221:["رعد و برق پراکنده",5,5],
230:["رعد و برق همراه با ریز باران سبک",6,6],
231:["رعد و برق همراه با ریز باران",6,6],
232:["رعد و برق همراه با ریز باران سنگین",6,6],
300:["ریز باران متعدد و سبک",7,7],
301:["ریز باران",7,7],
302:["ریز باران متعدد و سنگین",7,7],
310:["باران نم نم متعدد و سبک",7,7],
311:["باران نم نم",7,7],
313:["باران پشت سر هم و ریز باران",7,7],
314:["باران پشت سر هم سنگین و ریز باران",9,9],
321:["زیر باران پشت سر هم",7,7],
500:["باران سبک",7,7],
501:["باران معتدل",7,7],
502:["باران متعدد و سنگین",9,9],
503:["باران بسیار شدید",9,9],
504:["باران سیل\u200cآسا",9,9],
511:["باران سرد",7,7],
520:["باران پشت سر هم متعدد و سبک",8,8],
521:["باران پشت سر هم",7,7],
522:["باران پشت سر هم متعدد و سنگین",9,9],
531:["باران پشت سر هم پراکنده",7,7],
600:["برف سبک",12,12],
601:["برف",12,12],
602:["برف سنگین",13,13],
611:["بوران برف",11,11],
612:["تگرگ پشت سر هم",10,10],
615:["برف و باران سبک",12,12],
616:["برف و باران",11,11],
620:["برف پشت سر هم و سبک",12,12],
621:["برف پشت سر هم",12,12],
622:["برف پشت سر هم و سنگین",13,13],
701:["مه",14,15],
711:["دود",14,15],
721:["غبار",14,15],
731:["گردباد",14,15],
741:["مه غلیظ",14,15],
751:["شن و ماسه",14,15],
761:["گرد و خاک",14,15],
762:["خاکستر",14,15],
771:["بوران",13,13],
781:["توفان",0,1],
800:["آسمان صاف",0,1],
801:["قسمتی ابری",2,3],
802:["ابرهای پراکنده",2,3],
803:["ابرهای تکه تکه",2,3],
804:["تمام ابری",4,4],
900:["توفان",0,1],
901:["توفان گرمسیری",0,1],
902:["تندباد",0,1],
903:["یخبندان",0,1],
904:["حرارت شدید",0,1],
905:["وزش باد",0,1],
906:["تگرگ",10,10],
951:["آرام",0,1],
952:["نسیم کم",0,1],
953:["نسیم ملایم",0,1],
954:["نسیم معتدل",0,1],
955:["نسیم تازه",0,1],
956:["نسیم سنگین",0,1],
957:["باد زیاد",0,1],
958:["باد شدید",0,1],
959:["باد خیلی شدید",0,1],
960:["توفان",0,1],
961:["توفان خشن",0,1],
962:["تندباد",0,1],
};
weather.status_image_list = {
0:'//upload.wikimedia.org/wikipedia/commons/thumb/e/e2/Weather-clear.svg/{0}px-Weather-clear.svg.png',
1:'//upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Weather-clear-night.svg/{0}px-Weather-clear-night.svg.png',
2:'//upload.wikimedia.org/wikipedia/commons/thumb/9/91/Weather-more-clouds.svg/{0}px-Weather-more-clouds.svg.png',
3:'//upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Weather-few-clouds-night.svg/{0}px-Weather-few-clouds-night.svg.png',
4:'//upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Weather-overcast.svg/{0}px-Weather-overcast.svg.png',
5:'//upload.wikimedia.org/wikipedia/commons/thumb/0/0a/Weather-storm.svg/{0}px-Weather-storm.svg.png',
6:'//upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Weather-rain-thunderstorm.svg/{0}px-Weather-rain-thunderstorm.svg.png',
7:'//upload.wikimedia.org/wikipedia/commons/thumb/4/45/Weather-overcast-rare-showers.svg/{0}px-Weather-overcast-rare-showers.svg.png',
8:'//upload.wikimedia.org/wikipedia/commons/thumb/c/c6/Weather-showers-scattered.svg/{0}px-Weather-showers-scattered.svg.png',
9:'//upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Weather-showers.svg/{0}px-Weather-showers.svg.png',
10:'//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Weather-hail-scattered.svg/{0}px-Weather-hail-scattered.svg.png',
11:'//upload.wikimedia.org/wikipedia/commons/thumb/9/93/Weather-sleet.svg/{0}px-Weather-sleet.svg.png',
12:'//upload.wikimedia.org/wikipedia/commons/thumb/8/84/Weather-snow.svg/{0}px-Weather-snow.svg.png',
13:'//upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Weather-snowy.svg/{0}px-Weather-snowy.svg.png',
14:'//upload.wikimedia.org/wikipedia/commons/thumb/1/16/Weather-day-more-fog.svg/{0}px-Weather-day-more-fog.svg.png',
15:'//upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Weather-more-fog-night.svg/{0}px-Weather-more-fog-night.svg.png',
};
weather.numbers = ["۰","۱","۲","۳","۴","۵","۶","۷","۸","۹"];
weather.loading_image_url = "//upload.wikimedia.org/wikipedia/commons/b/b6/Loading_2_transparent.gif";
weather.is_loading = false;
weather.first_run = true;
weather.timeout = 30000;
weather.sprintf = function(string) {
for (var i = 1; i < arguments.length; i++) {
var regexp = new RegExp('\\{'+(i-1)+'\\}', 'g');
string = string.replace(regexp, arguments[i]);
}
return string;
};
weather.localize_numbers = function(text) {
text = text.toString();
for (var i = 0; i < weather.numbers.length; i++) {
var regexp = new RegExp(i.toString(), 'g');
text = text.replace(regexp, weather.numbers[i]);
}
text = text.replace(/\./gi, "٫");
return text;
};
weather.run = function(){
weather.req = {"ids":{},"names":{}};
$('.weather').each(function(i, obj) {
obj = $(obj);
var id = obj.attr('data-id');
var name = obj.attr('data-name');
var day = obj.attr('data-day');
var req = obj.attr('data-req');
if(req=='holder')
{
obj.hide();
}
if(typeof day != "undefined")
{
day = parseInt(day);
if(day.toString() == "NaN")
{
day = 0;
}
} else {
day = 0;
}
if(typeof id!= "undefined")
{
if(typeof weather.req.ids[id]=="undefined")
{
weather.req.ids[id] = {"count":0};
}
if(day > weather.req.ids[id]["count"])
{
weather.req.ids[id]["count"] = day;
}
} else if(typeof name!= "undefined")
{
if(typeof weather.req.names[name]=="undefined")
{
weather.req.names[name] = {"count":0};
}
if(day > weather.req.names[name]["count"])
{
weather.req.names[name]["count"] = day;
}
}
});
if(weather.object_size(weather.req.ids)>0||weather.object_size(weather.req.names)>0)
{
$.ajax({
type: "POST",
url: '//tools.wmflabs.org/weather/api/v1',
data: JSON.stringify(weather.req),
timeout: weather.timeout,
beforeSend: function (xhr) {
$('.weather').each(function(i, obj) {
obj = $(obj);
var req = obj.attr('data-req');
if(req=='load_icon')
{
obj.empty();
var img = $('<img/>');
img.attr('src',weather.loading_image_url);
obj.append(img);
}
});
weather.is_loading = true;
},
error: function(jqXHR, txt){
weather.is_loading = false;
weather.timeout += 30000;
weather.run();
},
success: function (data) {
weather.is_loading = false;
weather.data = data;
$('.weather').each(function(i, obj) {
obj = $(obj);
var id = obj.attr('data-id');
var name = obj.attr('data-name');
if(typeof id!= "undefined")
{
if(typeof weather.data.ids[id]!= "undefined")
{
weather.pass(obj,weather.data.ids[id]);
}
} else if(typeof name!= "undefined")
{
if(typeof weather.data.names[name]!= "undefined")
{
weather.pass(obj,weather.data.names[name]);
}
} else {
weather.pass(obj,{});
}
});
$('.weather').each(function(i, obj) {
obj = $(obj);
var req = obj.attr('data-req');
if(req=='load_icon')
{
obj.empty();
}
});
},
});
}
};
weather.pass = function(obj,data){
var req = obj.attr('data-req');
var day = obj.attr('data-day');
if(typeof day != "undefined")
{
day = parseInt(day);
if(day.toString() == "NaN")
{
day = 0;
}
} else {
day = 0;
}
if(req=='temp')
{
if(day==0)
{
var temp = (data.current.main.temp - 273.15).toFixed();
if(temp=="-0")
{
temp = "0";
}
temp = weather.localize_numbers(temp);
obj.text(temp);
}
} else if(req == 'max_temp') {
if(typeof data.forecast.list[day] != "undefined")
{
var max_temp = (data.forecast.list[day].temp.max - 273.15).toFixed();
if(max_temp=="-0")
{
max_temp = "0";
}
max_temp = weather.localize_numbers(max_temp);
obj.text(max_temp);
}
} else if(req == 'min_temp') {
if(typeof data.forecast.list[day] != "undefined")
{
var min_temp = (data.forecast.list[day].temp.min - 273.15).toFixed();
if(min_temp=="-0")
{
min_temp = "0";
}
min_temp = weather.localize_numbers(min_temp);
obj.text(min_temp);
}
} else if(req == 'condition') {
var condition_id = 0;
if(day==0)
{
condition_id = data.current.weather[0].id;
} else {
if(typeof data.forecast.list[day] != "undefined")
{
condition_id = data.forecast.list[day].weather[0].id;
}
}
if(typeof weather.status_list[condition_id] != "undefined")
{
var condition = weather.status_list[condition_id][0];
obj.text(condition);
}
} else if(req == 'image') {
var size = obj.attr('data-size');
if(typeof size != "undefined")
{
size = parseInt(size);
if(size.toString() == "NaN")
{
size = 35;
}
} else {
size = 35;
}
size = size.toString();
var condition_id = 0;
var is_day = true;
if(day==0)
{
condition_id = data.current.weather[0].id;
is_day = data.current.weather[0].is_day;
} else {
if(typeof data.forecast.list[day] != "undefined")
{
condition_id = data.forecast.list[day].weather[0].id;
is_day = data.forecast.list[day].weather[0].is_day;
}
}
if(typeof weather.status_list[condition_id] != "undefined")
{
if(is_day)
{
var image_id = weather.status_list[condition_id][1];
} else {
var image_id = weather.status_list[condition_id][2];
}
var image_url = weather.sprintf(weather.status_image_list[image_id],size);
var img = $("<img/>");
img.attr('src',image_url);
obj.empty();
obj.append(img);
}
} else if(req == 'wind_speed') {
var wind_speed = 0;
if(day==0)
{
wind_speed = data.current.wind.speed;
} else {
if(typeof data.forecast.list[day] != "undefined")
{
wind_speed = data.forecast.list[day].speed;
}
}
wind_speed = wind_speed * 3.6;
wind_speed = wind_speed.toFixed()
wind_speed = weather.localize_numbers(wind_speed);
obj.text(wind_speed);
} else if(req == 'pressure') {
var pressure = 0;
if(day==0)
{
pressure = data.current.main.pressure;
} else {
if(typeof data.forecast.list[day] != "undefined")
{
pressure = data.forecast.list[day].pressure;
}
}
pressure = weather.localize_numbers(pressure);
obj.text(pressure);
} else if(req == 'humidity') {
var humidity = 0;
if(day==0)
{
humidity = data.current.main.humidity;
} else {
if(typeof data.forecast.list[day] != "undefined")
{
humidity = data.forecast.list[day].humidity;
}
}
humidity = humidity.toFixed()
humidity = weather.localize_numbers(humidity);
obj.text(humidity);
} else if(req == 'sunrise') {
var sunrise = 0;
if(day==0)
{
sunrise = data.current.sys.sunrise;
}
if(sunrise!=0)
{
var date = new Date(sunrise*1000);
var hours = date.getHours();
var hours2 = hours;
hours2 %= 12;
if(hours2==0)
{
hours2 = 12;
}
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var new_date = (hours2) + ":" + ("0" + minutes).slice(-2);
if(hours>11)
{
new_date += " ب.ظ.";
} else {
new_date += " ق.ظ.";
}
obj.text(Date.wikinews.localize_numbers(new_date));
}
} else if(req == 'sunset') {
var sunset = 0;
if(day==0)
{
sunset = data.current.sys.sunset;
}
if(sunset!=0)
{
var date = new Date(sunset*1000);
var hours = date.getHours();
var hours2 = hours;
hours2 %= 12;
if(hours2==0)
{
hours2 = 12;
}
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var new_date = (hours2) + ":" + ("0" + minutes).slice(-2);
if(hours>11)
{
new_date += " ب.ظ.";
} else {
new_date += " ق.ظ.";
}
obj.text(Date.wikinews.localize_numbers(new_date));
}
} else if(req == 'date') {
var date = 0;
if(day==0)
{
dt = data.current.dt;
} else {
if(typeof data.forecast.list[day] != "undefined")
{
dt = data.forecast.list[day].dt;
}
}
var date = new Date(dt*1000);
var months = date.getMonth() + 1;
var days = date.getDate();
var years = date.getFullYear();
var hours = date.getHours();
var hours2 = hours;
hours2 %= 12;
if(hours2==0)
{
hours2 = 12;
}
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var new_date = Date.wikinews.gregorian_to_solar([years,months,days]);
var new_date = Date.wikinews.days_names[date.getDay()] + " " + new_date[2] + " " + Date.wikinews.solar_months_names[new_date[1]] + " " + new_date[0] + " ساعت " + (hours2) + ":" + ("0" + minutes).slice(-2) + ":" + ("0" + seconds).slice(-2);
if(hours>11)
{
new_date += " ب.ظ.";
} else {
new_date += " ق.ظ.";
}
obj.text(Date.wikinews.localize_numbers(new_date));
} else if(req == 'week_day') {
var date = 0;
if(day==0)
{
dt = data.current.dt;
} else {
if(typeof data.forecast.list[day] != "undefined")
{
dt = data.forecast.list[day].dt;
}
}
var date = new Date(dt*1000);
var months = date.getMonth() + 1;
var days = date.getDate();
var years = date.getFullYear();
var hours = date.getHours();
var hours2 = hours;
hours2 %= 12;
if(hours2==0)
{
hours2 = 12;
}
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var new_date = Date.wikinews.gregorian_to_solar([years,months,days]);
var new_date = Date.wikinews.days_names[date.getDay()];
obj.text(new_date);
} else if(req == 'solar_day_month') {
var date = 0;
if(day==0)
{
dt = data.current.dt;
} else {
if(typeof data.forecast.list[day] != "undefined")
{
dt = data.forecast.list[day].dt;
}
}
var date = new Date(dt*1000);
var months = date.getMonth() + 1;
var days = date.getDate();
var years = date.getFullYear();
var new_date = Date.wikinews.gregorian_to_solar([years,months,days]);
var new_date = new_date[2] + " " + Date.wikinews.solar_months_names[new_date[1]];
obj.text(Date.wikinews.localize_numbers(new_date));
} else if(req == 'gregorian_day_month') {
var date = 0;
if(day==0)
{
dt = data.current.dt;
} else {
if(typeof data.forecast.list[day] != "undefined")
{
dt = data.forecast.list[day].dt;
}
}
var date = new Date(dt*1000);
var months = date.getMonth() + 1;
var days = date.getDate();;
var new_date = days + " " + Date.wikinews.gregorian_months_names[months];
obj.text(Date.wikinews.localize_numbers(new_date));
} else if(req == 'weather_area') {
if(weather.first_run)
{
obj.show();
weather.first_run = false;
}
}
};
$(document).ready(function() {
setInterval(weather.run,600000);
weather.run();
});