2009-07-19 18:41:42 +02:00
/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2008-08-28 16:48:45 +02:00
2006-11-01 21:28:35 +01:00
String . prototype . trim = function ( ) {
2009-07-22 23:14:17 +02:00
return this . replace ( /(^\s+|\s+$)/g , '' ) ;
2008-07-18 21:25:26 +02:00
} ;
2006-11-01 21:28:35 +01:00
2007-07-11 07:05:03 +02:00
String . prototype . formatted = function ( ) {
2009-07-22 23:14:17 +02:00
var newString = this ;
2007-07-11 07:05:03 +02:00
2009-07-22 23:14:17 +02:00
for ( var i = 0 ; i < arguments . length ; i ++ ) {
newString = newString . replace ( "%{" + i + "}" , arguments [ i ] , "g" ) ;
}
2007-07-11 07:05:03 +02:00
2009-07-22 23:14:17 +02:00
return newString ;
2008-07-18 21:25:26 +02:00
} ;
2007-07-11 07:05:03 +02:00
2013-12-19 04:16:28 +01:00
String . prototype . formatTime = function ( hours , minutes ) {
var newString = this ;
// See http://www.gnustep.org/resources/documentation/Developer/Base/Reference/NSCalendarDate.html#method$NSCalendarDate-descriptionWithCalendarFormat$
var p = 'am' , i = hours , m = minutes ;
if ( hours > 12 ) {
p = 'pm' ;
i = hours % 12 ;
}
if ( minutes < 10 ) {
m = '0' + minutes ;
}
// %H : hour as a decimal number using 24-hour clock
newString = newString . replace ( "%H" , hours < 10 ? '0' + hours : hours ) ;
// %I : hour as a decimal number using 12-hour clock
newString = newString . replace ( "%I" , i < 10 ? '0' + i : i ) ;
// %M : minute as decimal number
newString = newString . replace ( "%M" , m ) ;
// %p : 'am' or 'pm'
newString = newString . replace ( "%p" , p ) ;
return newString ;
} ;
2007-05-25 16:26:24 +02:00
String . prototype . repeat = function ( count ) {
2009-07-22 23:14:17 +02:00
var newString = "" ;
for ( var i = 0 ; i < count ; i ++ ) {
newString += this ;
}
2007-05-25 16:26:24 +02:00
2009-07-22 23:14:17 +02:00
return newString ;
2008-07-18 21:25:26 +02:00
} ;
2007-05-25 16:26:24 +02:00
2006-11-01 21:28:35 +01:00
String . prototype . capitalize = function ( ) {
2009-07-22 23:14:17 +02:00
return this . replace ( /\w+/g ,
function ( a ) {
return ( a . charAt ( 0 ) . toUpperCase ( )
+ a . substr ( 1 ) . toLowerCase ( ) ) ;
} ) ;
2008-07-18 21:25:26 +02:00
} ;
2006-11-01 21:28:35 +01:00
2010-09-01 22:27:45 +02:00
String . prototype . cssIdToHungarianId = function ( ) {
var parts = this . split ( "-" ) ;
var newId = parts [ 0 ] ;
for ( var i = 1 ; i < parts . length ; i ++ ) {
newId += parts [ i ] . capitalize ( ) ;
}
return newId ;
}
2006-11-01 21:28:35 +01:00
String . prototype . decodeEntities = function ( ) {
2009-07-22 23:14:17 +02:00
return this . replace ( /&#(\d+);/g ,
function ( wholematch , parenmatch1 ) {
return String . fromCharCode ( + parenmatch1 ) ;
} ) ;
2008-07-18 21:25:26 +02:00
} ;
2006-11-01 21:28:35 +01:00
2006-11-07 17:13:03 +01:00
String . prototype . asDate = function ( ) {
2009-07-22 23:14:17 +02:00
var newDate ;
var date = this . split ( "/" ) ;
2007-06-11 23:23:48 +02:00
if ( date . length == 3 )
2012-03-29 20:18:29 +02:00
newDate = new Date ( date [ 2 ] , date [ 1 ] - 1 , date [ 0 ] ) ; // dd/mm/yyyy
2007-06-11 23:23:48 +02:00
else {
2009-07-22 23:14:17 +02:00
date = this . split ( "-" ) ;
if ( date . length == 3 )
2012-03-29 20:18:29 +02:00
newDate = new Date ( date [ 0 ] , date [ 1 ] - 1 , date [ 2 ] ) ; // yyyy-mm-dd
2009-07-22 23:14:17 +02:00
else {
if ( this . length == 8 ) {
newDate = new Date ( this . substring ( 0 , 4 ) ,
this . substring ( 4 , 6 ) - 1 ,
this . substring ( 6 , 8 ) ) ;
}
}
2007-06-11 23:23:48 +02:00
}
2006-11-07 17:13:03 +01:00
2009-07-22 23:14:17 +02:00
return newDate ;
2008-07-18 21:25:26 +02:00
} ;
2006-11-07 17:13:03 +01:00
2010-01-05 23:34:35 +01:00
String . prototype . asCSSIdentifier = function ( ) {
2012-02-10 06:54:20 +01:00
var characters = [ '_' , '\\.' , '#' , '@' , '\\*' , ':' , ',' , ' '
2012-02-13 20:46:08 +01:00
, "'" , '&' , '\\+' ] ;
2012-02-10 06:54:20 +01:00
var escapeds = [ '_U_' , '_D_' , '_H_' , '_A_' , '_S_' , '_C_' , '_CO_' ,
'_SP_' , '_SQ_' , '_AM_' , '_P_' ] ;
2009-07-22 23:14:17 +02:00
2010-01-05 23:34:35 +01:00
var newString = this ;
for ( var i = 0 ; i < characters . length ; i ++ ) {
var re = new RegExp ( characters [ i ] , 'g' ) ;
newString = newString . replace ( re , escapeds [ i ] ) ;
2009-07-22 23:14:17 +02:00
}
2014-03-07 03:32:36 +01:00
if ( /^\d+/ . test ( newString ) ) {
newString = '_' + newString ;
}
2009-07-22 23:14:17 +02:00
return newString ;
} ;
2009-01-16 16:33:07 +01:00
2010-05-17 16:46:49 +02:00
Date . prototype . clone = function ( ) {
var newDate = new Date ( ) ;
newDate . setTime ( this . getTime ( ) ) ;
return newDate ;
}
Date . prototype . deltaDays = function ( otherDate ) {
var day1 = this . getTime ( ) ;
var day2 = otherDate . getTime ( ) ;
if ( day1 > day2 ) {
var tmp = day2 ;
day2 = day1 ;
day1 = tmp ;
}
return Math . floor ( ( day2 - day1 ) / 86400000 ) ;
}
2006-11-01 21:28:35 +01:00
Date . prototype . daysUpTo = function ( otherDate ) {
2009-07-22 23:14:17 +02:00
var days = new Array ( ) ;
var day1 = this . getTime ( ) ;
var day2 = otherDate . getTime ( ) ;
if ( day1 > day2 ) {
var tmp = day1 ;
day1 = day2 ;
day2 = tmp ;
}
// var day1Date = new Date();
// day1Date.setTime(this.getTime());
// day1Date.setHours(0, 0, 0, 0);
// var day2Date = new Date();
// day2Date.setTime(otherDate.getTime());
// day2Date.setHours(23, 59, 59, 999);
// var day1 = day1Date.getTime();
// var day2 = day2Date.getTime();
var nbrDays = Math . floor ( ( day2 - day1 ) / 86400000 ) + 1 ;
for ( var i = 0 ; i < nbrDays ; i ++ ) {
var newDate = new Date ( ) ;
newDate . setTime ( day1 + ( i * 86400000 ) ) ;
days . push ( newDate ) ;
}
return days ;
2008-07-18 21:25:26 +02:00
} ;
2006-11-01 21:28:35 +01:00
2007-06-08 01:23:29 +02:00
Date . prototype . getDayString = function ( ) {
2009-07-22 23:14:17 +02:00
var newString = this . getYear ( ) ;
if ( newString < 1000 ) newString += 1900 ;
var month = '' + ( this . getMonth ( ) + 1 ) ;
if ( month . length == 1 )
month = '0' + month ;
newString += month ;
var day = '' + this . getDate ( ) ;
if ( day . length == 1 )
day = '0' + day ;
newString += day ;
return newString ;
2008-07-18 21:25:26 +02:00
} ;
2007-06-08 01:23:29 +02:00
Date . prototype . getHourString = function ( ) {
2009-07-22 23:14:17 +02:00
var newString = this . getHours ( ) + '00' ;
if ( newString . length == 3 )
newString = '0' + newString ;
2007-06-08 01:23:29 +02:00
2009-07-22 23:14:17 +02:00
return newString ;
2008-07-18 21:25:26 +02:00
} ;
2007-06-08 01:23:29 +02:00
2007-06-11 23:23:48 +02:00
Date . prototype . getDisplayHoursString = function ( ) {
2011-06-13 22:28:10 +02:00
var hoursString = "" + this . getHours ( ) ;
2009-07-22 23:14:17 +02:00
if ( hoursString . length == 1 )
hoursString = '0' + hoursString ;
2007-06-11 23:23:48 +02:00
2011-06-13 22:28:10 +02:00
var minutesString = "" + this . getMinutes ( ) ;
2009-07-22 23:14:17 +02:00
if ( minutesString . length == 1 )
minutesString = '0' + minutesString ;
2007-06-11 23:23:48 +02:00
2009-07-22 23:14:17 +02:00
return hoursString + ":" + minutesString ;
2008-07-18 21:25:26 +02:00
} ;
2007-06-11 23:23:48 +02:00
2006-11-07 17:13:03 +01:00
Date . prototype . stringWithSeparator = function ( separator ) {
2009-07-22 23:14:17 +02:00
var month = '' + ( this . getMonth ( ) + 1 ) ;
var day = '' + this . getDate ( ) ;
var year = this . getYear ( ) ;
if ( year < 1000 )
year = '' + ( year + 1900 ) ;
if ( month . length == 1 )
month = '0' + month ;
if ( day . length == 1 )
day = '0' + day ;
if ( separator == '-' )
str = year + '-' + month + '-' + day ;
else
str = day + '/' + month + '/' + year ;
return str ;
2008-07-18 21:25:26 +02:00
} ;
2006-11-07 17:13:03 +01:00
2007-06-11 23:23:48 +02:00
Date . prototype . addDays = function ( nbrDays ) {
2009-07-22 23:14:17 +02:00
var milliSeconds = this . getTime ( ) ;
milliSeconds += 86400000 * nbrDays ;
this . setTime ( milliSeconds ) ;
2008-07-18 21:25:26 +02:00
} ;
2007-06-11 23:23:48 +02:00
Date . prototype . earlierDate = function ( otherDate ) {
2009-07-22 23:14:17 +02:00
var workDate = new Date ( ) ;
workDate . setTime ( otherDate . getTime ( ) ) ;
workDate . setHours ( 0 ) ;
return ( ( this . getTime ( ) < workDate . getTime ( ) )
? this : otherDate ) ;
2008-07-18 21:25:26 +02:00
} ;
2007-06-11 23:23:48 +02:00
Date . prototype . laterDate = function ( otherDate ) {
2009-07-22 23:14:17 +02:00
var workDate = new Date ( ) ;
workDate . setTime ( otherDate . getTime ( ) ) ;
workDate . setHours ( 23 ) ;
workDate . setMinutes ( 59 ) ;
workDate . setSeconds ( 59 ) ;
workDate . setMilliseconds ( 999 ) ;
return ( ( this . getTime ( ) < workDate . getTime ( ) )
? otherDate : this ) ;
2008-07-18 21:25:26 +02:00
} ;
2010-05-17 16:46:49 +02:00
Date . prototype . beginOfDay = function ( ) {
var beginOfDay = new Date ( this . getTime ( ) ) ;
beginOfDay . setHours ( 0 ) ;
beginOfDay . setMinutes ( 0 ) ;
beginOfDay . setSeconds ( 0 ) ;
beginOfDay . setMilliseconds ( 0 ) ;
return beginOfDay ;
}
2008-07-18 21:25:26 +02:00
2007-06-12 22:05:57 +02:00
Date . prototype . beginOfWeek = function ( ) {
2009-07-22 23:14:17 +02:00
var offset = firstDayOfWeek - this . getDay ( ) ;
if ( offset > 0 )
offset -= 7 ;
2010-05-17 16:46:49 +02:00
var beginOfWeek = this . beginOfDay ( ) ;
2009-07-22 23:14:17 +02:00
beginOfWeek . setHours ( 12 ) ;
beginOfWeek . addDays ( offset ) ;
2008-07-18 21:25:26 +02:00
2009-07-22 23:14:17 +02:00
return beginOfWeek ;
2008-07-18 21:25:26 +02:00
} ;
2007-06-12 22:59:29 +02:00
Date . prototype . endOfWeek = function ( ) {
2009-07-22 23:14:17 +02:00
var endOfWeek = this . beginOfWeek ( ) ;
endOfWeek . addDays ( 6 ) ;
2008-07-18 21:25:26 +02:00
2009-07-22 23:14:17 +02:00
endOfWeek . setHours ( 23 ) ;
endOfWeek . setMinutes ( 59 ) ;
endOfWeek . setSeconds ( 59 ) ;
endOfWeek . setMilliseconds ( 999 ) ;
2008-07-18 21:25:26 +02:00
2009-07-22 23:14:17 +02:00
return endOfWeek ;
2008-07-18 21:25:26 +02:00
} ;
2007-09-04 16:59:26 +02:00
String . prototype . _base64 _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" ;
String . prototype . base64encode = function ( ) {
2009-07-22 23:14:17 +02:00
var output = "" ;
var chr1 , chr2 , chr3 , enc1 , enc2 , enc3 , enc4 ;
var i = 0 ;
2007-09-04 16:59:26 +02:00
2009-07-22 23:14:17 +02:00
var input = this . utf8encode ( ) ;
2007-09-04 16:59:26 +02:00
2009-07-22 23:14:17 +02:00
while ( i < input . length ) {
chr1 = input . charCodeAt ( i ++ ) ;
chr2 = input . charCodeAt ( i ++ ) ;
chr3 = input . charCodeAt ( i ++ ) ;
2007-09-04 16:59:26 +02:00
2009-07-22 23:14:17 +02:00
enc1 = chr1 >> 2 ;
enc2 = ( ( chr1 & 3 ) << 4 ) | ( chr2 >> 4 ) ;
enc3 = ( ( chr2 & 15 ) << 2 ) | ( chr3 >> 6 ) ;
enc4 = chr3 & 63 ;
2007-09-04 16:59:26 +02:00
2009-07-22 23:14:17 +02:00
if ( isNaN ( chr2 ) ) {
enc3 = enc4 = 64 ;
} else if ( isNaN ( chr3 ) ) {
enc4 = 64 ;
}
2007-09-04 16:59:26 +02:00
2009-07-22 23:14:17 +02:00
output = output +
this . _base64 _keyStr . charAt ( enc1 ) + this . _base64 _keyStr . charAt ( enc2 ) +
this . _base64 _keyStr . charAt ( enc3 ) + this . _base64 _keyStr . charAt ( enc4 ) ;
}
2007-09-04 16:59:26 +02:00
2009-07-22 23:14:17 +02:00
return output ;
2007-09-04 16:59:26 +02:00
} ;
String . prototype . base64decode = function ( ) {
2009-07-22 23:14:17 +02:00
var output = "" ;
var chr1 , chr2 , chr3 ;
var enc1 , enc2 , enc3 , enc4 ;
var i = 0 ;
2007-09-04 16:59:26 +02:00
2010-03-08 16:18:05 +01:00
var input = "" + this ; // .replace(/[^A-Za-z0-9\+\/\=]/g, "")
2009-07-22 23:14:17 +02:00
while ( i < input . length ) {
enc1 = this . _base64 _keyStr . indexOf ( input . charAt ( i ++ ) ) ;
enc2 = this . _base64 _keyStr . indexOf ( input . charAt ( i ++ ) ) ;
enc3 = this . _base64 _keyStr . indexOf ( input . charAt ( i ++ ) ) ;
enc4 = this . _base64 _keyStr . indexOf ( input . charAt ( i ++ ) ) ;
2007-09-04 16:59:26 +02:00
2009-07-22 23:14:17 +02:00
chr1 = ( enc1 << 2 ) | ( enc2 >> 4 ) ;
chr2 = ( ( enc2 & 15 ) << 4 ) | ( enc3 >> 2 ) ;
chr3 = ( ( enc3 & 3 ) << 6 ) | enc4 ;
2007-09-04 16:59:26 +02:00
2009-07-22 23:14:17 +02:00
output = output + String . fromCharCode ( chr1 ) ;
2007-09-04 16:59:26 +02:00
2009-07-22 23:14:17 +02:00
if ( enc3 != 64 ) {
output = output + String . fromCharCode ( chr2 ) ;
}
if ( enc4 != 64 ) {
output = output + String . fromCharCode ( chr3 ) ;
}
2007-09-04 16:59:26 +02:00
}
2010-03-08 16:18:05 +01:00
return output ;
2007-09-04 16:59:26 +02:00
} ;
2007-09-06 23:41:19 +02:00
String . prototype . utf8encode = function ( ) {
2009-07-22 23:14:17 +02:00
var string = this . replace ( /\r\n/g , "\n" ) ;
var utftext = "" ;
2007-09-04 16:59:26 +02:00
2009-07-22 23:14:17 +02:00
for ( var n = 0 ; n < this . length ; n ++ ) {
var c = this . charCodeAt ( n ) ;
if ( c < 128 ) {
utftext += String . fromCharCode ( c ) ;
}
else if ( ( c > 127 ) && ( c < 2048 ) ) {
utftext += String . fromCharCode ( ( c >> 6 ) | 192 ) ;
utftext += String . fromCharCode ( ( c & 63 ) | 128 ) ;
}
else {
utftext += String . fromCharCode ( ( c >> 12 ) | 224 ) ;
utftext += String . fromCharCode ( ( ( c >> 6 ) & 63 ) | 128 ) ;
utftext += String . fromCharCode ( ( c & 63 ) | 128 ) ;
}
2007-09-04 16:59:26 +02:00
}
2009-07-22 23:14:17 +02:00
return utftext ;
2007-09-04 16:59:26 +02:00
} ;
2007-09-06 23:41:19 +02:00
String . prototype . utf8decode = function ( ) {
2009-07-22 23:14:17 +02:00
var string = "" ;
var i = 0 ;
var c = c1 = c2 = 0 ;
2007-09-04 16:59:26 +02:00
2009-07-22 23:14:17 +02:00
while ( i < string . length ) {
c = utftext . charCodeAt ( i ) ;
2007-09-04 16:59:26 +02:00
2009-07-22 23:14:17 +02:00
if ( c < 128 ) {
string += String . fromCharCode ( c ) ;
i ++ ;
}
else if ( ( c > 191 ) && ( c < 224 ) ) {
c2 = this . charCodeAt ( i + 1 ) ;
string += String . fromCharCode ( ( ( c & 31 ) << 6 ) | ( c2 & 63 ) ) ;
i += 2 ;
}
else {
c2 = this . charCodeAt ( i + 1 ) ;
c3 = this . charCodeAt ( i + 2 ) ;
string += String . fromCharCode ( ( ( c & 15 ) << 12 ) | ( ( c2 & 63 ) << 6 ) | ( c3 & 63 ) ) ;
i += 3 ;
}
2007-09-04 16:59:26 +02:00
}
2009-07-22 23:14:17 +02:00
return string ;
2007-09-04 16:59:26 +02:00
} ;
2007-09-05 17:33:38 +02:00
String . prototype . cssSafeString = function ( ) {
2009-07-22 23:14:17 +02:00
var newString = this . replace ( "#" , "_" , "g" ) ;
newString = newString . replace ( "." , "_" , "g" ) ;
newString = newString . replace ( "@" , "_" , "g" ) ;
2007-09-05 17:33:38 +02:00
2009-07-22 23:14:17 +02:00
return newString ;
2008-07-18 21:25:26 +02:00
} ;
2007-10-18 19:18:48 +02:00
window . width = function ( ) {
2009-07-22 23:14:17 +02:00
if ( window . innerWidth )
return window . innerWidth ;
else if ( document . body && document . body . offsetWidth )
return document . body . offsetWidth ;
else
return 0 ;
2008-07-18 21:25:26 +02:00
} ;
2007-10-18 19:18:48 +02:00
window . height = function ( ) {
2009-07-22 23:14:17 +02:00
if ( window . innerHeight )
return window . innerHeight ;
else if ( document . body && document . body . offsetHeight )
return document . body . offsetHeight ;
else
return 0 ;
2008-07-18 21:25:26 +02:00
} ;