blob: e005d671a5592eb5746b5fa7c214dedd9b55cc4f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* WARNING: this file is supposed to be cross-browser. All browser-specific features
* should be wrapped with a function call and factored out in the "browser_dependent.js"
* file. Please, keep it this way.
*
*/
// ----------------------------- Utility Functions -------------------------
function getMonth(number) {
switch (number) {
case 0: return "January";
case 1: return "February";
case 2: return "March";
case 3: return "April";
case 4: return "May";
case 5: return "June";
case 6: return "July";
case 7: return "August";
case 8: return "September";
case 9: return "October";
case 10: return "November";
case 11: return "December";
}
}
function getDate() {
var date = new Date();
var month = getMonth(date.getMonth());
var day = date.getDate();
var year = date.getFullYear();
return month + " " + day + ", " + year;
}
function getTime() {
var time = new Date();
var hour = time.getHours();
var minute = time.getMinutes();
return ((hour < 10) ? "0" : "") + hour + ((minute < 10) ? ":0" : ":") + minute;
}
function getFullDate() {
return (new Date()).toGMTString();
}
function getISODate() {
// taken from http://321webliftoff.net/isodatetime.php, many thanks!
var today = new Date();
var year = today.getYear();
if (year < 2000) // Y2K Fix, Isaac Powell
year = year + 1900; // http://onyx.idbsu.edu/~ipowell
var month = today.getMonth() + 1;
var day = today.getDate();
var hour = today.getHours();
var hourUTC = today.getUTCHours();
var diff = hour - hourUTC;
var hourdifference = Math.abs(diff);
var minute = today.getMinutes();
var minuteUTC = today.getUTCMinutes();
var minutedifference;
var second = today.getSeconds();
var timezone;
if (minute != minuteUTC && minuteUTC < 30 && diff < 0) { hourdifference--; }
if (minute != minuteUTC && minuteUTC > 30 && diff > 0) { hourdifference--; }
if (minute != minuteUTC) {
minutedifference = ":30";
} else {
minutedifference = ":00";
}
if (hourdifference < 10) {
timezone = "0" + hourdifference + minutedifference;
} else {
timezone = "" + hourdifference + minutedifference;
}
if (diff < 0) {
timezone = "-" + timezone;
} else {
timezone = "+" + timezone;
}
if (month <= 9) month = "0" + month;
if (day <= 9) day = "0" + day;
if (hour <= 9) hour = "0" + hour;
if (minute <= 9) minute = "0" + minute;
if (second <= 9) second = "0" + second;
return year + "-" + month + "-" + day + "T" + hour + ":" + minute + ":" + second + timezone;
}
var trimRE = /(^\s+)|(\s+$)/g;
function trimWhitespace(str) {
if (!str) return '';
return str.replace(trimRE, '');
}
var saneRE = /\n+/g;
function trimNewlines(str) {
if (!str) return '';
return str.replace(saneRE, '');
}
function isWhitespace(str) {
return trimWhitespace(str).length == 0;
}
function getPreviousMeaningfulNode(node) {
if (node) {
var previous = node.previousSibling;
if (previous) {
if (previous.nodeType == NodeType.TEXT_NODE) {
if (!isWhitespace(previous.nodeValue)) {
return previous;
} else {
return getPreviousMeaningfulNode(previous);
}
} else {
return previous;
}
} else {
return node;
}
} else {
return null;
}
}
function getNextMeaningfulNode(node) {
if (node) {
var next = node.nextSibling;
if (next) {
if (next.nodeType == NodeType.TEXT_NODE) {
if (!isWhitespace(next.nodeValue)) {
return next;
} else {
return getNextMeaningfulNode(next);
}
} else {
return next;
}
} else {
return node;
}
} else {
return null;
}
}
function getPath(node) {
if (node) {
var name = node.nodeName;
if (node.parentNode) {
return getPath(node.parentNode) + "/" + name;
} else if (name != "#document") {
return name;
}
}
return "";
}
/*
* Detach the live array returned by some DOM functions
* and make it static (means that it doesn't change if you work
* on the DOM). Very useful to avoid nasty recursion when working
* on getElementByTagName()
*/
function detach(liveArray) {
var staticArray = new Array(liveArray.length);
for (var i = 0; i < liveArray.length; i++) {
staticArray[i] = liveArray[i];
}
return staticArray;
}
NodeType = {
ELEMENT_NODE: 0x01,
ATTRIBUTE_NODE: 0x02,
TEXT_NODE: 0x03,
CDATA_NODE: 0x04,
ENTITY_REFERENZE_NODE: 0x05,
ENTITY_NODE: 0x06,
SCRIPT_NODE: 0x07,
COMMENT_NODE: 0x08,
DOCUMENT_NODE: 0x09,
DOCUMENT_FRAGMENT_NODE: 0x0a,
NOTATION_NODE: 0x0b
};
// ------------------------------ end of file --------------------------