diff options
author | Caroline Chao <caroline.chao@digia.com> | 2013-12-10 14:42:22 +0100 |
---|---|---|
committer | Caroline Chao <caroline.chao@digia.com> | 2013-12-10 14:42:22 +0100 |
commit | 9e2a27f41ab4b76851440fe0d5a11e1ae7ca9dde (patch) | |
tree | 234b14b90e9627939e2f99087c84e2ce5c1c72bb /qml/js |
Initial commitv1.1
Diffstat (limited to 'qml/js')
-rw-r--r-- | qml/js/utils.js | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/qml/js/utils.js b/qml/js/utils.js new file mode 100644 index 0000000..caa21ea --- /dev/null +++ b/qml/js/utils.js @@ -0,0 +1,277 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the FOO module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +.pragma library + +// LongTermPage utils + +function getAfternoonIndex(dayModel) +{ + var index = 0 + var count = intervalCount + if (count > 1) + index = count - 1 + return index +} + +function getTemp(isMax, dayModel) { + var temp = getTemperature(0, dayModel) + var count = dayModel.periodCount() + for (var i = 0; i < count; i++) { + var currentTemp = getTemperature(i, dayModel) + if (isMax) + temp = Math.max(temp, currentTemp) + else + temp = Math.min(temp, currentTemp) + } + return temp +} + +function getMinTemp(dayModel) +{ + return getTemp(false, dayModel) +} + +function getMaxTemp(dayModel) +{ + return getTemp(true, dayModel) +} + +function getTempFormat(temp) +{ + return temp + "°C" +} + +function isNegative(val) +{ + return val < 0 +} + +// OneDayPage utils + +function getFromTime(index, dayModel) { + var timerange = dayModel.getDayDetails(index, 'timeRange') + var pattern_time = /(.*) - .*/ + var time = timerange.replace(pattern_time, "$1") + return time +} + +function getToTime(index, dayModel) { + var timerange = dayModel.getDayDetails(index, 'timeRange') + var pattern_time = /.* - (.*)/ + var time = timerange.replace(pattern_time, "$1") + return time +} + +function getMaxMinTemp(dayModel) { + // at least 1 data per day + var minTemp = dayModel.getDayDetails(0, 'temperature') + var maxTemp = dayModel.getDayDetails(0, 'temperature') + for (var i = 1; i < dayModel.periodCount(); i++) + { + var tempTemp = dayModel.getDayDetails(i, 'temperature') + maxTemp = Math.max(tempTemp, maxTemp) + minTemp = Math.min(tempTemp, minTemp) + } + + return [minTemp, maxTemp] +} + +function getMaxTempLenght(cityModel) { + var maxLength = 1 + for (var indexDay = 0; indexDay < cityModel.daysCount(); indexDay++) { + var day = cityModel.getDayModel(indexDay) + var range = getMaxMinTemp(day) + maxLength = Math.max(range[0].toString().length, maxLength) + maxLength = Math.max(range[1].toString().length, maxLength) + } + var stringTemp = "555" // temperatures estimated between -55 and +55 + if (maxLength === 3) + stringTemp = "-" + stringTemp + return stringTemp.substring(0, maxLength) + "°C." +} + +// WeatherModel utils + +function getWindType(windspeed) +{ + var speed = parseFloat(windspeed) + if (speed <= 0.2) + return "Calm" // Calm + if (speed <= 1.5) + return "0000" // Light air + if (speed <= 3.3) + return "0025" // Light breeze + if (speed <= 5.4) + return "0050" // Glentle breeze + if (speed <= 7.9) + return "0075" // Moderate breeze + if (speed <= 10.7) + return "0100" // Fresh breeze + if (speed <= 13.8) + return "0125" // Strong breeze + if (speed <= 17.1) + return "0150" // Near gale + if (speed <= 18.0) + return "0175" // Near gale / Gale + if (speed <= 20.7) + return "0200" // Gale + if (speed <= 24.4) + return "0225" // Strong storm + if (speed <= 28.4) + return "0250" // Whole storm + if (speed <= 32.6) + return "0300" // Storm + return "0350" // Hurricane +} + +function updateDayModel(dayModel, item) +{ + var windIconUrl = getWindSymbolUrl(item.windSpeed, item.windDirectionDeg) + var weatherUrl = extractSymbolUrl(item.symbolcode) + var day = Qt.formatDate(new Date(dayModel.date), "dddd") + var timeRange = getTimeRange(item) + + dayModel.addRow(day, weatherUrl, timeRange, item.temperature, item.windSpeed, windIconUrl, item.rain, item.period) +} + +function getItemDate(item) +{ + var fromDateTime = parseDateTime(item.from) + var toDateTime = parseDateTime(item.to) + var date = (item.period === "0") ? toDateTime[0] : fromDateTime[0] + return date +} + +function getTimeRange(item) +{ + var fromDateTime = parseDateTime(item.from) + var toDateTime = parseDateTime(item.to) + var timeRange = fromDateTime[1] + " - " + toDateTime[1] + return timeRange +} + +function parseDateTime(dt) +{ + var pattern_date = /(.*)T.*/ + var pattern_time = /.*T([0-9][0-9]:[0-9][0-9]).*/ + var time = dt.replace(pattern_time, "$1") + var date = dt.replace(pattern_date, "$1") + return [date, time] +} + +function getWindSymbolUrl(windspeed, winddir) +{ + var windtype = getWindType(windspeed) + if (windtype === "Calm") + return "http://fil.nrk.no/yr/grafikk/vindpiler/32/vindstille.png" + + var iconurl = "http://fil.nrk.no/yr/grafikk/vindpiler/32/vindpil.TYPE.WINDDIRCODE.png" + var windcode = Math.round((parseFloat(winddir).toFixed(0)) / 5) * 5 + var codeLenght = windcode.toString().length; + for (var i = codeLenght; i < 3; i++) + windcode = "0" + windcode + + if (windcode === 360) + windcode = "000" + + iconurl = iconurl.replace("TYPE", windtype) + iconurl = iconurl.replace("WINDDIRCODE", windcode) + return iconurl +} + +function extractSymbolUrl(code) +{ + // In order to use yr.no weather data service, refer to their terms + // and conditions of use. http://om.yr.no/verdata/free-weather-data/ + var iconUrl = "http://symbol.yr.no/grafikk/sym/b100/__CODE__.png" + return iconUrl.replace("__CODE__", code) +} + +// Global + +function getDay(index, dayModel) +{ + var day = dayModel.getDayDetails(index, "day") + return day +} + +function getShortDate(date) +{ + return date.substr(8, 2) + "." + date.substr(5, 2) // dd.MM +} + +function getLongDate(date) +{ + return date.substr(8, 2) + "." + date.substr(5, 2) + "." + date.substr(0, 4) // dd.MM.yyyy +} + +function getRain(index, dayModel) +{ + return dayModel.getDayDetails(index, "rain") +} + +function getTemperature(index, dayModel) +{ + return dayModel.getDayDetails(index, "temperature") +} + +function getWindSpeed(index, dayModel) +{ + return dayModel.getDayDetails(index, "windSpeed") +} + +function getWindUrl(index, dayModel) +{ + var url = dayModel.getDayDetails(index, "windUrl") + return dayModel.getCachedImageFile(url) +} + +function getWeatherUrl(index, dayModel, size) +{ + var smallUrl = dayModel.getDayDetails(index, "weatherUrl") + if (size === "large") + smallUrl = smallUrl.replace("b100", "b200") + else + smallUrl = smallUrl + return dayModel.getCachedImageFile(smallUrl) +} + |