289 lines
7.2 KiB
JavaScript
289 lines
7.2 KiB
JavaScript
var GetWeatherHazards3 = function (WeatherParameters) {
|
|
var ZoneId = WeatherParameters.ZoneId;
|
|
var HazardUrls = [];
|
|
var HazardCounter = 0;
|
|
|
|
WeatherParameters.WeatherHazardConditions =
|
|
{
|
|
ZoneId: WeatherParameters.ZoneId,
|
|
Hazards: [],
|
|
};
|
|
|
|
var Url = 'https://alerts.weather.gov/cap/wwaatmget.php?x=' + ZoneId + '&y=0';
|
|
|
|
// Load the xml file using ajax
|
|
$.ajaxCORS({
|
|
type: 'GET',
|
|
url: Url,
|
|
dataType: 'text',
|
|
crossDomain: true,
|
|
cache: false,
|
|
success: function (text) {
|
|
// IE doesn't support XML tags with colons.
|
|
text = text.replaceAll('<cap:', '<cap_');
|
|
text = text.replaceAll('</cap:', '</cap_');
|
|
|
|
var $xml = $(text);
|
|
//console.log(xml);
|
|
|
|
$xml.find('entry').each(function () {
|
|
var entry = $(this);
|
|
|
|
// Skip non-alerts.
|
|
var cap_msgType = entry.find('cap_msgType');
|
|
if (cap_msgType.text() !== 'Alert') {
|
|
return true;
|
|
}
|
|
|
|
var link = entry.find('link');
|
|
var Url = link.attr('href');
|
|
|
|
HazardUrls.push(Url);
|
|
});
|
|
|
|
if (HazardUrls.length === 0) {
|
|
PopulateHazardConditions(WeatherParameters);
|
|
console.log(WeatherParameters.WeatherHazardConditions);
|
|
return;
|
|
}
|
|
|
|
$(HazardUrls).each(function () {
|
|
var Url = this.toString();
|
|
|
|
$.ajaxCORS({
|
|
type: 'GET',
|
|
url: Url,
|
|
dataType: 'xml',
|
|
crossDomain: true,
|
|
cache: true,
|
|
success: function (xml) {
|
|
var $xml = $(xml);
|
|
console.log(xml);
|
|
|
|
var description = $xml.find('description');
|
|
WeatherParameters.WeatherHazardConditions.Hazards.push(description.text());
|
|
|
|
HazardCounter++;
|
|
if (HazardCounter === HazardUrls.length) {
|
|
PopulateHazardConditions(WeatherParameters);
|
|
console.log(WeatherParameters.WeatherHazardConditions);
|
|
}
|
|
},
|
|
error: function () {
|
|
console.error('GetWeatherHazards3 failed for Url: ' + Url);
|
|
WeatherParameters.Progress.Hazards = LoadStatuses.Failed;
|
|
},
|
|
});
|
|
});
|
|
|
|
},
|
|
error: function (xhr, error, errorThrown) {
|
|
console.error('GetWeatherHazards3 failed: ' + errorThrown);
|
|
WeatherParameters.Progress.Hazards = LoadStatuses.Failed;
|
|
},
|
|
});
|
|
};
|
|
|
|
var canvasProgress_mousemove = function (e) {
|
|
canvasProgress.css('cursor', '');
|
|
|
|
var RatioX = canvasProgress.width() / 640;
|
|
var RatioY = canvasProgress.height() / 480;
|
|
|
|
if (e.offsetX >= (70 * RatioX) && e.offsetX <= (565 * RatioX)) {
|
|
//if (e.offsetY >= (105 * RatioY) && e.offsetY <= (350 * RatioY))
|
|
if (e.offsetY >= (100 * RatioY) && e.offsetY <= (385 * RatioY)) {
|
|
// Show hand cursor.
|
|
canvasProgress.css('cursor', 'pointer');
|
|
}
|
|
}
|
|
};
|
|
var PopulateHazardConditions = function (WeatherParameters) {
|
|
if (WeatherParameters === null || (_DontLoadGifs && WeatherParameters.Progress.Hazards !== LoadStatuses.Loaded)) {
|
|
return;
|
|
}
|
|
|
|
var WeatherHazardConditions = WeatherParameters.WeatherHazardConditions;
|
|
var ZoneId = WeatherHazardConditions.ZoneId;
|
|
var Text;
|
|
var Line;
|
|
var SkipLine;
|
|
|
|
var DontLoadGifs = _DontLoadGifs;
|
|
|
|
divHazards.empty();
|
|
|
|
$(WeatherHazardConditions.Hazards).each(function () {
|
|
//Text = this.replaceAll("\n", "<br/>");
|
|
//divHazards.html(divHazards.html() + "<br/><br/>" + Text);
|
|
|
|
Text = this.toString();
|
|
|
|
SkipLine = false;
|
|
|
|
Text = Text.replaceAll('\n', ' ');
|
|
//Text = Text.replaceAll("*** ", "");
|
|
|
|
//$(Text.split("\n")).each(function ()
|
|
$(Text.split(' ')).each(function () {
|
|
Line = this.toString();
|
|
Line = Line.toUpperCase();
|
|
|
|
if (Line.startsWith('&&')) {
|
|
return false;
|
|
} else if (Line.startsWith('$$')) {
|
|
return false;
|
|
}
|
|
if (SkipLine) {
|
|
if (Line === '') {
|
|
SkipLine = false;
|
|
return true;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
if (Line.startsWith(ZoneId)) {
|
|
SkipLine = true;
|
|
return true;
|
|
} else if (Line.indexOf('>') !== -1) {
|
|
SkipLine = true;
|
|
return true;
|
|
} else if (Line.indexOf('LAT...LON ') !== -1) {
|
|
SkipLine = true;
|
|
return true;
|
|
}
|
|
|
|
//divHazards.html(divHazards.html() + "<br/>" + Line);
|
|
if (Line.indexOf('.') === 0 || Line.indexOf('*') === 0) {
|
|
divHazards.html(divHazards.html() + '<br/><br/>');
|
|
if (Line.indexOf('.') === 0 && Line.indexOf('...') !== 0) {
|
|
Line = Line.substr(1);
|
|
}
|
|
}
|
|
|
|
divHazards.html(divHazards.html() + Line + ' ');
|
|
|
|
});
|
|
|
|
divHazards.html(divHazards.html() + '<br/><br/>');
|
|
});
|
|
|
|
var DrawHazards = function () {
|
|
// Draw canvas
|
|
var canvas = canvasHazards[0];
|
|
var context = canvas.getContext('2d');
|
|
|
|
var BackGroundImage = new Image();
|
|
BackGroundImage.onload = function () {
|
|
context.drawImage(BackGroundImage, 0, 0);
|
|
|
|
if (DontLoadGifs) {
|
|
UpdateHazards();
|
|
}
|
|
|
|
if (WeatherHazardConditions.Hazards.length > 0) {
|
|
WeatherParameters.Progress.Hazards = LoadStatuses.Loaded;
|
|
} else {
|
|
WeatherParameters.Progress.Hazards = LoadStatuses.NoData;
|
|
}
|
|
|
|
UpdateWeatherCanvas(WeatherParameters, canvasHazards);
|
|
};
|
|
BackGroundImage.src = 'images/BackGround7.png';
|
|
};
|
|
|
|
var HazardsText = divHazards.html();
|
|
|
|
HazardsText = HazardsText.replaceAll('<br>', '\n');
|
|
HazardsText = HazardsText.replaceAll('<br/>', '\n');
|
|
HazardsText = HazardsText.replaceAll('<br />', '\n');
|
|
HazardsText = HazardsText.replaceAll('<br></br>', '\n');
|
|
|
|
WeatherHazardConditions.HazardsText = HazardsText;
|
|
WeatherHazardConditions.HazardsTextC = ConvertConditionsToMetric(HazardsText);
|
|
if (_Units === Units.Metric) {
|
|
HazardsText = WeatherHazardConditions.HazardsTextC;
|
|
}
|
|
|
|
var HazardsWrapped = HazardsText.wordWrap(32);
|
|
|
|
var cnvHazardsScroll;
|
|
|
|
var ShowHazardsScroll = function () {
|
|
var cnvHazardsScrollId;
|
|
var context;
|
|
|
|
cnvHazardsScrollId = 'cnvHazardsScroll';
|
|
|
|
var HazardsWrappedLines = HazardsWrapped.split('\n');
|
|
var MaxHazardsWrappedLines = 365;
|
|
if (_OperatingSystem === OperatingSystems.Andriod) {
|
|
MaxHazardsWrappedLines = 92;
|
|
}
|
|
|
|
if (HazardsWrappedLines.length > MaxHazardsWrappedLines) {
|
|
HazardsWrappedLines = HazardsWrappedLines.splice(0, MaxHazardsWrappedLines - 1);
|
|
}
|
|
var height = 0 + (HazardsWrappedLines.length * 45);
|
|
|
|
if (DontLoadGifs === false) {
|
|
// Clear the current image.
|
|
divHazardsScroll.empty();
|
|
divHazardsScroll.html('<canvas id=\'' + cnvHazardsScrollId + '\' />');
|
|
cnvHazardsScroll = $('#' + cnvHazardsScrollId);
|
|
cnvHazardsScroll.attr('width', '640'); // For Chrome.
|
|
cnvHazardsScroll.attr('height', height); // For Chrome.
|
|
}
|
|
cnvHazardsScroll = $('#' + cnvHazardsScrollId);
|
|
context = cnvHazardsScroll[0].getContext('2d');
|
|
|
|
DrawBox(context, 'rgb(112, 35, 35)', 0, 0, 640, height);
|
|
|
|
//var y = 0;
|
|
var y = 45;
|
|
|
|
$(HazardsWrappedLines).each(function () {
|
|
var HazardLine = this.toString();
|
|
|
|
DrawText(context, 'Star4000', '24pt', '#FFFFFF', 80, y, HazardLine, 1);
|
|
|
|
y += 45;
|
|
});
|
|
|
|
DrawHazards();
|
|
};
|
|
ShowHazardsScroll();
|
|
|
|
};
|
|
|
|
var UpdateHazards = function (Offset) {
|
|
var canvas = canvasHazards[0];
|
|
var context = canvas.getContext('2d');
|
|
var cnvHazardsScroll = $('#cnvHazardsScroll');
|
|
|
|
switch (Offset) {
|
|
case undefined:
|
|
break;
|
|
case 0:
|
|
_UpdateHazardsY = 0;
|
|
break;
|
|
case Infinity:
|
|
_UpdateHazardsY = cnvHazardsScroll.height();
|
|
break;
|
|
default:
|
|
_UpdateHazardsY += (385 * Offset);
|
|
if (_UpdateHazardsY > cnvHazardsScroll.height()) {
|
|
_UpdateHazardsY = cnvHazardsScroll.height();
|
|
} else if (_UpdateHazardsY < 0) {
|
|
_UpdateHazardsY = 0;
|
|
}
|
|
break;
|
|
}
|
|
|
|
DrawBox(context, 'rgb(112, 35,35)', 0, 0, 640, 385);
|
|
context.drawImage(cnvHazardsScroll[0], 0, _UpdateHazardsY, 640, 385, 0, 0, 640, 385);
|
|
|
|
|
|
};
|