nscomponentsreact
Version:
React Wrapper Components for NSComponents
431 lines (417 loc) • 11.1 kB
JavaScript
var nsModuleExport = function(root,name,prototype)
{
if(typeof exports === 'object' && typeof module === 'object')
{
module.exports[name] = prototype;
}
else if (typeof define === "function" && define.amd)
{
define(name,[], function () {return prototype;});
}
else if(typeof exports === 'object')
{
exports[name] = prototype;
}
else
{
root[name] = prototype;
}
};var nsIsWeb = function(root)
{
if(typeof exports === 'object' && typeof module === 'object')
{
return false;
}
else if (typeof define === "function" && define.amd)
{
return false;
}
else if(typeof exports === 'object')
{
return false;
}
else
{
return true;
}
};if(!nsIsWeb())
{
var nsutilRef = require('./nsUtil.min.js');
var NSUtil = nsutilRef.NSUtil;
}
"use strict";
/* Taken from http://www.JavascriptToolbox.com but has been modified */
var NSDateUtil = (function()
{
function NSDateUtil()
{
this.__monthNames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
this.__monthNamesShort = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
this.__dayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
this.__dayNamesShort = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
this.__dayNamesMini = new Array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa');
this.__dateFormat = "mm/dd/yyyy";
var self = this;
this.format = function(date,format,settings)
{
var retValue = "";
if(this.isValidDate(date))
{
format = format || self.__dateFormat;
settings = settings || {};
var monthNames = settings.monthNames || self.__monthNames;
var monthNamesShort = settings.monthNamesShort || self.__monthNamesShort;
var dayNames = settings.dayNames || self.__dayNames;
var dayNamesShort = settings.dayNamesShort || self.__dayNamesShort;
var objChar = getDateInFormat(date,monthNames,monthNamesShort,dayNames,dayNamesShort);
var index = 0;
var char = "";
var repeatedChar = "";
while (index < format.length)
{
char = format.charAt(index);
repeatedChar = "";
while ((format.charAt(index) === char) && (index < format.length))
{
repeatedChar += format.charAt(index);
index++;
}
if (typeof(objChar[repeatedChar]) != "undefined")
{
retValue = retValue + objChar[repeatedChar];
}
else
{
retValue = retValue + repeatedChar;
}
}
}
else
{
console.log(date + "is invalid");
}
return retValue;
};
this.parseString = function(value,format,settings)
{
format = format || this.__dateFormat;
settings = settings || {};
var monthNames = settings.monthNames || self.__monthNames;
var monthNamesShort = settings.monthNamesShort || self.__monthNamesShort;
var dayNames = settings.dayNames || self.__dayNames;
var dayNamesShort = settings.dayNamesShort || self.__dayNamesShort;
var index = 0;
var indexValue = 0;
var char = "";
var repeatedChar = "";
var x,y;
var year = new Date().getFullYear();
var month = 1;
var date = 1;
var hh = 0;
var mm = 0;
var ss = 0;
var ampm="";
while (index < format.length)
{
char = format.charAt(index);
repeatedChar = "";
while ((format.charAt(index) === char) && (index < format.length))
{
repeatedChar += format.charAt(index);
index++;
}
if (repeatedChar === "yyyy" || repeatedChar === "yy" || repeatedChar === "y")
{
if (repeatedChar === "yyyy")
{
x=4;
y=4;
}
if (repeatedChar === "yy")
{
x=2;
y=2;
}
if (repeatedChar === "y")
{
x=2;
y=4;
}
year= getInt(value,indexValue,x,y);
if (year == null)
{
return null;
}
indexValue += year.length;
if (year.length==2)
{
if (year > 70)
{
year = 1900 + (year - 0);
}
else
{
year = 2000 + (year - 0);
}
}
}
else if (repeatedChar=="MMM" || repeatedChar=="NNN")
{
month = 0;
var names = (repeatedChar == "MMM" ? (monthNames.concat(monthNamesShort)) : monthNamesShort);
for (var i=0; i < names.length; i++)
{
var month_name = names[i];
if (value.substring(indexValue,indexValue + month_name.length).toLowerCase() == month_name.toLowerCase())
{
month=(i % 12) + 1;
indexValue += month_name.length;
break;
}
}
if ((month < 1) || (month>12))
{
return null;
}
}
else if (repeatedChar == "EE" || repeatedChar == "E")
{
var names = (repeatedChar == "EE" ? dayNames : dayNamesShort);
for (var i=0; i< names.length; i++)
{
var day_name=names[i];
if (value.substring(indexValue,indexValue + day_name.length).toLowerCase() == day_name.toLowerCase())
{
indexValue += day_name.length;
break;
}
}
}
else if (repeatedChar == "MM" || repeatedChar == "M")
{
month=getInt(value,indexValue,repeatedChar.length,2);
if(month == null || (month<1) || (month>12))
{
return null;
}
indexValue += month.length;
}
else if (repeatedChar == "dd" || repeatedChar == "d")
{
date=getInt(value,indexValue,repeatedChar.length,2);
if(date == null || (date < 1)||(date > 31))
{
return null;
}
indexValue += date.length;
}
else if (repeatedChar == "hh" || repeatedChar == "h")
{
hh = getInt(value,indexValue,repeatedChar.length,2);
if(hh == null||(hh < 1)||(hh > 12))
{
return null;
}
indexValue += hh.length;
}
else if (repeatedChar == "HH" || repeatedChar == "H")
{
hh = getInt(value,indexValue,repeatedChar.length,2);
if(hh == null || (hh < 0) || (hh > 23))
{
return null;
}
indexValue += hh.length;
}
else if (repeatedChar == "KK"|| repeatedChar == "K")
{
hh = getInt(value,indexValue,repeatedChar.length,2);
if(hh == null||(hh < 0)||(hh > 11))
{
return null;
}
indexValue += hh.length;
hh++;
}
else if (repeatedChar == "kk" || repeatedChar == "k")
{
hh = getInt(value,indexValue,repeatedChar.length,2);
if(hh == null||(hh < 1)||(hh > 24))
{
return null;
}
indexValue += hh.length;
hh--;
}
else if (repeatedChar == "mm" || repeatedChar == "m")
{
mm = getInt(value,indexValue,repeatedChar.length,2);
if(mm == null || (mm < 0) || (mm > 59))
{
return null;
}
indexValue += mm.length;
}
else if (repeatedChar == "ss" || repeatedChar == "s")
{
ss = getInt(value,indexValue,repeatedChar.length,2);
if(ss == null || (ss < 0) || (ss > 59))
{
return null;
}
indexValue += ss.length;
}
else if (repeatedChar == "a")
{
if (value.substring(indexValue,indexValue + 2).toLowerCase() == "am")
{
ampm="AM";
}
else if (value.substring(indexValue,indexValue + 2).toLowerCase() == "pm")
{
ampm="PM";
}
else
{
return null;
}
indexValue += 2;
}
else
{
if (value.substring(indexValue,indexValue + repeatedChar.length) != repeatedChar)
{
return null;
}
else
{
indexValue += repeatedChar.length;
}
}
}
if (indexValue != value.length)
{
return null;
}
if (month == 2)
{
// Check for leap year
if (this.isLeapYear(year))
{
if (date > 29)
{
return null;
}
}
else
{
if (date > 28)
{
return null;
}
}
}
if ((month == 4) ||(month == 6) ||(month == 9) || (month == 11))
{
if (date > 30)
{
return null;
}
}
// Correct hours value
if (hh < 12 && ampm == "PM")
{
hh += 12;
}
else if (hh > 11 && ampm == "AM")
{
hh -= 12;
}
return new Date(year,month-1,date,hh,mm,ss);
};
this.isValidDate = function(date)
{
return date && Object.prototype.toString.call(date) === "[object Date]" && !isNaN(date);
};
var getDateInFormat = function(date,monthNames,monthNamesShort,dayNames,dayNamesShort)
{
var retValue = {};
var year = "" + date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var dayOfWeek = date.getDay();
var hour = date.getHours();
var hourIn12Format = ((hour === 0) ? 12 : ((hour > 12) ? (hour - 12) : hour));
var amorpm = (hour > 11) ? "PM" : "AM";
var minutes = date.getMinutes();
var seconds = date.getSeconds();
retValue["y"]="" + year;
retValue["yyyy"]= retValue["y"];
retValue["yy"]= retValue["y"].substring(2,4);
retValue["M"]= month;
retValue["MM"]= appendZero(retValue["M"]);
retValue["MMM"]= monthNames[retValue["M"] - 1];
retValue["NNN"]= monthNamesShort[retValue["M"] - 1];
retValue["d"]= day;
retValue["dd"]= appendZero(retValue["d"]);
retValue["E"]= dayNamesShort[dayOfWeek];
retValue["EE"]= dayNames[dayOfWeek];
retValue["H"]= hour;
retValue["HH"]= appendZero(retValue["H"]);
retValue["h"] = hourIn12Format;
retValue["hh"]= appendZero(retValue["h"]);
retValue["K"]= retValue["h"] - 1;
retValue["k"]= retValue["H"] + 1;
retValue["KK"]= appendZero(retValue["K"]);
retValue["kk"]= appendZero(retValue["k"]);
retValue["a"] = amorpm;
retValue["m"]= minutes;
retValue["mm"]= appendZero(retValue["m"]);
retValue["s"]= seconds;
retValue["ss"]= appendZero(retValue["s"]);
return retValue;
};
this.isLeapYear = function(year)
{
if(year % 4 === 0 || (year % 100 === 0 && year % 400 === 0))
{
return true;
}
return false;
};
var getInt = function(value,index,fromLength,toLength)
{
for (var count = toLength; count >= fromLength; count--)
{
var repeatedChar = value.substring(index,index + count);
if (repeatedChar.length < fromLength)
{
return null;
}
if (isInteger(repeatedChar))
{
return repeatedChar;
}
}
return null;
};
var appendZero = function(value)
{
return (value < 0 || value > 9 ? "":"0") + value;
};
var isInteger = function(value)
{
for (var i=0; i < value.length; i++)
{
if ("1234567890".indexOf(value.charAt(i))==-1)
{
return false;
}
}
return true;
};
};
return NSDateUtil;
})();
nsModuleExport(this,"NSDateUtil",NSDateUtil);