178 Zeilen
5,2 KiB
JavaScript
178 Zeilen
5,2 KiB
JavaScript
|
/**
|
||
|
* Project:
|
||
|
* Contenido Content Management System
|
||
|
*
|
||
|
* Description:
|
||
|
* Contenido js class for handling DHTML Calendar in class cms_date for corresponding
|
||
|
* cms type. It extends DHTML Calender. A select box is added, which allows users to select
|
||
|
* the format in which the selected date is displayed. For this functionality there are some
|
||
|
* modifications in DHTML Calender (calender.js) which were commented in this file
|
||
|
* js calendar class CmsDate.js
|
||
|
*
|
||
|
* Requirements:
|
||
|
*
|
||
|
*
|
||
|
* @package Contenido Backend
|
||
|
* @version 1.0.0
|
||
|
* @author Bilal Arslan, Timo Trautmann
|
||
|
* @copyright four for business AG <www.4fb.de>
|
||
|
* @license http://www.contenido.org/license/LIZENZ.txt
|
||
|
* @link http://www.4fb.de
|
||
|
* @link http://www.contenido.org
|
||
|
* @since file available since contenido release <= 4.8.7
|
||
|
*
|
||
|
* {@internal
|
||
|
* created 2007-07-14 Bilal Arslan, Timo Trautmann
|
||
|
* $Id
|
||
|
* }}
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
var cal_is_open = false;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*
|
||
|
* @param {Object} cal is the current calendar object
|
||
|
* @param {string} date format, what will be change
|
||
|
*/
|
||
|
|
||
|
// This function gets called when the end-user clicks on some date.
|
||
|
function selected(cal, date){
|
||
|
//aEditdata is global variable defines in include.con_editcontent.php for storage
|
||
|
cal.sel.innerHTML = date; // just update the date in the input field.
|
||
|
aEditdata[cal.sel.id] = date;
|
||
|
if (cal.dateClicked) {
|
||
|
cal.callCloseHandler();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Destroy or close the calendar
|
||
|
*
|
||
|
* @param {Object} cal is the current calendar object
|
||
|
*/
|
||
|
function closeHandler(cal){
|
||
|
cal.hide(); // hide the calendar
|
||
|
cal.sel2.style.display = "none";
|
||
|
cal.destroy();
|
||
|
cal_is_open = false;
|
||
|
}
|
||
|
/**
|
||
|
* The CmsDate object constructor.
|
||
|
*
|
||
|
* @param {string} id, if of input field
|
||
|
* @param {date_string} format, like "b%,m%,y%"
|
||
|
* @param {integer} showsTime, 12 or 24
|
||
|
* @param {boolean} showsOtherMonths, true or false
|
||
|
* @param {string} sDivSelectId, div id from select-box
|
||
|
* @param {string} sConPath, contenido path
|
||
|
* @param {string} sSelectId, select id from select-box
|
||
|
*/
|
||
|
CmsDate = function(id, format, showsTime, showsOtherMonths, sDivSelectId, sConPath, sSelectId){
|
||
|
// first-time call, create the calendar.
|
||
|
this.cal = new Calendar(1, null, selected, closeHandler);
|
||
|
|
||
|
// inform it what input field we use (el)
|
||
|
this.cal.sel = document.getElementById(id);
|
||
|
// get the div element from select box
|
||
|
this.cal.sel2 = document.getElementById(sDivSelectId);
|
||
|
// get the select box
|
||
|
this.cal.sel3 = document.getElementById(sSelectId);
|
||
|
this.format = format;
|
||
|
this.showsTime = showsTime;
|
||
|
this.showsOtherMonths = showsOtherMonths;
|
||
|
this.cal.contenido_path = sConPath;
|
||
|
this.cal.contenido_call_handler = this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This function creats a Calendar.
|
||
|
*/
|
||
|
CmsDate.prototype.showCalendar = function(){
|
||
|
if (cal_is_open == false) {
|
||
|
cal_is_open = true;
|
||
|
// uncomment the following line to hide the week numbers
|
||
|
// cal.weekNumbers = false;
|
||
|
if (typeof this.showsTime == "string") {
|
||
|
this.cal.showsTime = true;
|
||
|
this.cal.time24 = (this.showsTime == "24");
|
||
|
}
|
||
|
if (this.showsOtherMonths) {
|
||
|
this.cal.showsOtherMonths = true;
|
||
|
}
|
||
|
|
||
|
this.cal.setRange(1900, 2070); // min/max year allowed.
|
||
|
if (this.cal.sel3.value != "" && this.cal.sel3.value != 0) {
|
||
|
this.cal.setDateFormat(this.cal.sel3.value); // set the specified date format
|
||
|
}else{
|
||
|
this.cal.setDateFormat(this.format); // set the specified date format
|
||
|
}
|
||
|
this.cal.create();
|
||
|
|
||
|
this.cal.showAtElement(this.cal.sel); // show the calendar
|
||
|
// thats important! if do not this, you can not edit html in body, all thinks is disabled
|
||
|
window._dynarch_popupCalendar = null;
|
||
|
|
||
|
//Select box name
|
||
|
this.see();
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This function returns position information for current Element
|
||
|
*
|
||
|
* @param {Object} oElement is the current node or elemen, what is required.
|
||
|
*/
|
||
|
CmsDate.prototype.getElementPostion = function(oElement){
|
||
|
var iHeigth = oElement.offsetHeight;
|
||
|
var iWidth = oElement.offsetWidth;
|
||
|
var iTop = 0, iLeft = 0;
|
||
|
while (oElement) {
|
||
|
iTop += oElement.offsetTop || 0;
|
||
|
iLeft += oElement.offsetLeft || 0;
|
||
|
oElement = oElement.offsetParent;
|
||
|
};
|
||
|
return [iLeft, iTop, iHeigth, iWidth];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This function is for select box. It styles (to dock) in right position below the calendar.
|
||
|
*
|
||
|
* @param {string} that is the id of select box
|
||
|
*/
|
||
|
CmsDate.prototype.see = function(){
|
||
|
var idCal = null;
|
||
|
var aDivs = document.getElementsByTagName('div');
|
||
|
for (var i = 0; i < aDivs.length; i++) {
|
||
|
if (aDivs[i].className == 'calendar') {
|
||
|
idCal = aDivs[i];
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (idCal) {
|
||
|
var pos = this.getElementPostion(idCal);
|
||
|
|
||
|
// Get the id of current select box
|
||
|
var iId = this.cal.sel2;
|
||
|
iId.style.position = "absolute";
|
||
|
iId.style.left = pos[0] + "px";
|
||
|
iId.style.top = pos[1] + pos[2] + "px";
|
||
|
iId.style.display = "block";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Changes the specified date format, of currently calendar object.
|
||
|
*
|
||
|
* @param {string} format
|
||
|
*/
|
||
|
CmsDate.prototype.changeFormat = function(format){
|
||
|
this.cal.setDateFormat(format); // set the specified date format
|
||
|
this.cal.refresh();
|
||
|
}
|
||
|
|