diff options
author | AlexKlimenkov <shurick.klimenkov@gmail.com> | 2014-06-10 20:50:30 +0300 |
---|---|---|
committer | AlexKlimenkov <shurick.klimenkov@gmail.com> | 2014-06-10 20:50:30 +0300 |
commit | b5a0589955460a44c5428c4cb5429fcfce265d23 (patch) | |
tree | 87db58400a3e036de646fb630cbb358beeac3bc1 /codebase/sources | |
parent | e2aaaef8540fabd0b5200a4959c269d6f1ae352e (diff) | |
download | scheduler-b5a0589955460a44c5428c4cb5429fcfce265d23.zip scheduler-b5a0589955460a44c5428c4cb5429fcfce265d23.tar.gz scheduler-b5a0589955460a44c5428c4cb5429fcfce265d23.tar.bz2 |
[update] version 4.1.0
Diffstat (limited to 'codebase/sources')
76 files changed, 23189 insertions, 0 deletions
diff --git a/codebase/sources/dhtmlxscheduler.js b/codebase/sources/dhtmlxscheduler.js new file mode 100644 index 0000000..4656403 --- /dev/null +++ b/codebase/sources/dhtmlxscheduler.js @@ -0,0 +1,6148 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +window.dhtmlXScheduler = window.scheduler = { version: "4.1.0" }; + +if (!window.dhtmlx) { + dhtmlx = function(obj){ + for (var a in obj) dhtmlx[a]=obj[a]; + return dhtmlx; //simple singleton + }; +} +dhtmlx.extend_api=function(name,map,ext){ + var t = window[name]; + if (!t) return; //component not defined + window[name]=function(obj){ + var that; + + if (obj && typeof obj == "object" && !obj.tagName){ + that = t.apply(this,(map._init?map._init(obj):arguments)); + //global settings + for (var a in dhtmlx) + if (map[a]) this[map[a]](dhtmlx[a]); + //local settings + for (var a in obj){ + if (map[a]) this[map[a]](obj[a]); + else if (a.indexOf("on")===0){ + this.attachEvent(a,obj[a]); + } + } + } else + that = t.apply(this,arguments); + if (map._patch) map._patch(this); + return that||this; + }; + window[name].prototype=t.prototype; + if (ext) + dhtmlXHeir(window[name].prototype,ext); +}; + +dhtmlxAjax={ + get:function(url,callback){ + var t=new dtmlXMLLoaderObject(true); + t.async=(arguments.length<3); + t.waitCall=callback; + t.loadXML(url); + return t; + }, + post:function(url,post,callback){ + var t=new dtmlXMLLoaderObject(true); + t.async=(arguments.length<4); + t.waitCall=callback; + t.loadXML(url,true,post); + return t; + }, + getSync:function(url){ + return this.get(url,null,true); + }, + postSync:function(url,post){ + return this.post(url,post,null,true); + } +}; + +/** + * @desc: xmlLoader object + * @type: private + * @param: funcObject - xml parser function + * @param: object - jsControl object + * @param: async - sync/async mode (async by default) + * @param: rSeed - enable/disable random seed ( prevent IE caching) + * @topic: 0 + */ +function dtmlXMLLoaderObject(funcObject, dhtmlObject, async, rSeed){ + this.xmlDoc=""; + + if (typeof (async) != "undefined") + this.async=async; + else + this.async=true; + + this.onloadAction=funcObject||null; + this.mainObject=dhtmlObject||null; + this.waitCall=null; + this.rSeed=rSeed||false; + return this; +} + +dtmlXMLLoaderObject.count = 0; + +/** + * @desc: xml loading handler + * @type: private + * @param: dtmlObject - xmlLoader object + * @topic: 0 + */ +dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){ + var once = true; + this.check=function (){ + if ((dhtmlObject)&&(dhtmlObject.onloadAction)){ + if ((!dhtmlObject.xmlDoc.readyState)||(dhtmlObject.xmlDoc.readyState == 4)){ + if (!once) + return; + + once=false; //IE 5 fix + dtmlXMLLoaderObject.count++; + if (typeof dhtmlObject.onloadAction == "function") + dhtmlObject.onloadAction(dhtmlObject.mainObject, null, null, null, dhtmlObject); + + if (dhtmlObject.waitCall){ + dhtmlObject.waitCall.call(this,dhtmlObject); + dhtmlObject.waitCall=null; + } + } + } + }; + return this.check; +}; + +/** + * @desc: return XML top node + * @param: tagName - top XML node tag name (not used in IE, required for Safari and Mozilla) + * @type: private + * @returns: top XML node + * @topic: 0 + */ +dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName, oldObj){ + var z; + + if (this.xmlDoc.responseXML){ + var temp = this.xmlDoc.responseXML.getElementsByTagName(tagName); + if(temp.length === 0 && tagName.indexOf(":")!=-1) + var temp = this.xmlDoc.responseXML.getElementsByTagName((tagName.split(":"))[1]); + z = temp[0]; + } else + z = this.xmlDoc.documentElement; + + if (z){ + this._retry=false; + return z; + } + + if (!this._retry&&_isIE){ + this._retry=true; + var oldObj = this.xmlDoc; + this.loadXMLString(this.xmlDoc.responseText.replace(/^[\s]+/,""), true); + return this.getXMLTopNode(tagName, oldObj); + } + + dhtmlxError.throwError("LoadXML", "Incorrect XML", [ + (oldObj||this.xmlDoc), + this.mainObject + ]); + + return document.createElement("DIV"); +}; + +/** + * @desc: load XML from string + * @type: private + * @param: xmlString - xml string + * @topic: 0 + */ +dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString, silent){ + + if (!_isIE){ + var parser = new DOMParser(); + this.xmlDoc=parser.parseFromString(xmlString, "text/xml"); + } else { + this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); + this.xmlDoc.async=this.async; + this.xmlDoc.onreadystatechange = function(){}; + this.xmlDoc["loadXM"+"L"](xmlString); + } + + if (silent) + return; + + if (this.onloadAction) + this.onloadAction(this.mainObject, null, null, null, this); + + if (this.waitCall){ + this.waitCall(); + this.waitCall=null; + } +}; +/** + * @desc: load XML + * @type: private + * @param: filePath - xml file path + * @param: postMode - send POST request + * @param: postVars - list of vars for post request + * @topic: 0 + */ +dtmlXMLLoaderObject.prototype.loadXML=function(filePath, postMode, postVars, rpc){ + if (this.rSeed) + filePath+=((filePath.indexOf("?") != -1) ? "&" : "?")+"a_dhx_rSeed="+(new Date()).valueOf(); + this.filePath=filePath; + + if ((!_isIE)&&(window.XMLHttpRequest)) + this.xmlDoc=new XMLHttpRequest(); + else { + this.xmlDoc=new ActiveXObject("Microsoft.XMLHTTP"); + } + + if (this.async) + this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this); + this.xmlDoc.open(postMode ? "POST" : "GET", filePath, this.async); + + if (rpc){ + this.xmlDoc.setRequestHeader("User-Agent", "dhtmlxRPC v0.1 ("+navigator.userAgent+")"); + this.xmlDoc.setRequestHeader("Content-type", "text/xml"); + } + + else if (postMode) + this.xmlDoc.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + + this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest"); + this.xmlDoc.send(null||postVars); + + if (!this.async) + (new this.waitLoadFunction(this))(); +}; +/** + * @desc: destructor, cleans used memory + * @type: private + * @topic: 0 + */ +dtmlXMLLoaderObject.prototype.destructor=function(){ + this._filterXPath = null; + this._getAllNamedChilds = null; + this._retry = null; + this.async = null; + this.rSeed = null; + this.filePath = null; + this.onloadAction = null; + this.mainObject = null; + this.xmlDoc = null; + this.doXPath = null; + this.doXPathOpera = null; + this.doXSLTransToObject = null; + this.doXSLTransToString = null; + this.loadXML = null; + this.loadXMLString = null; + // this.waitLoadFunction = null; + this.doSerialization = null; + this.xmlNodeToJSON = null; + this.getXMLTopNode = null; + this.setXSLParamValue = null; + return null; +}; + +dtmlXMLLoaderObject.prototype.xmlNodeToJSON = function(node){ + var t={}; + for (var i=0; i<node.attributes.length; i++) + t[node.attributes[i].name]=node.attributes[i].value; + t["_tagvalue"]=node.firstChild?node.firstChild.nodeValue:""; + for (var i=0; i<node.childNodes.length; i++){ + var name=node.childNodes[i].tagName; + if (name){ + if (!t[name]) t[name]=[]; + t[name].push(this.xmlNodeToJSON(node.childNodes[i])); + } + } + return t; +}; + +/** + * @desc: Call wrapper + * @type: private + * @param: funcObject - action handler + * @param: dhtmlObject - user data + * @returns: function handler + * @topic: 0 + */ +function callerFunction(funcObject, dhtmlObject){ + this.handler=function(e){ + if (!e) + e=window.event; + funcObject(e, dhtmlObject); + return true; + }; + return this.handler; +} + +/** + * @desc: Calculate absolute position of html object + * @type: private + * @param: htmlObject - html object + * @topic: 0 + */ +function getAbsoluteLeft(htmlObject){ + return getOffset(htmlObject).left; +} +/** + * @desc: Calculate absolute position of html object + * @type: private + * @param: htmlObject - html object + * @topic: 0 + */ +function getAbsoluteTop(htmlObject){ + return getOffset(htmlObject).top; +} + +function getOffsetSum(elem) { + var top=0, left=0; + while(elem) { + top = top + parseInt(elem.offsetTop); + left = left + parseInt(elem.offsetLeft); + elem = elem.offsetParent; + } + return {top: top, left: left}; +} +function getOffsetRect(elem) { + var box = elem.getBoundingClientRect(); + var body = document.body; + var docElem = document.documentElement; + var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop; + var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft; + var clientTop = docElem.clientTop || body.clientTop || 0; + var clientLeft = docElem.clientLeft || body.clientLeft || 0; + var top = box.top + scrollTop - clientTop; + var left = box.left + scrollLeft - clientLeft; + return { top: Math.round(top), left: Math.round(left) }; +} +function getOffset(elem) { + if (elem.getBoundingClientRect) { + return getOffsetRect(elem); + } else { + return getOffsetSum(elem); + } +} + +/** + * @desc: Convert string to it boolean representation + * @type: private + * @param: inputString - string for covertion + * @topic: 0 + */ +function convertStringToBoolean(inputString){ + if (typeof (inputString) == "string") + inputString=inputString.toLowerCase(); + + switch (inputString){ + case "1": + case "true": + case "yes": + case "y": + case 1: + case true: + return true; + default: + return false; + } +} + +/** + * @desc: find out what symbol to use as url param delimiters in further params + * @type: private + * @param: str - current url string + * @topic: 0 + */ +function getUrlSymbol(str){ + if (str.indexOf("?") != -1) + return "&"; + else + return "?"; +} + +function dhtmlDragAndDropObject(){ + if (window.dhtmlDragAndDrop) + return window.dhtmlDragAndDrop; + + this.lastLanding=0; + this.dragNode=0; + this.dragStartNode=0; + this.dragStartObject=0; + this.tempDOMU=null; + this.tempDOMM=null; + this.waitDrag=0; + window.dhtmlDragAndDrop=this; + + return this; +} + +dhtmlDragAndDropObject.prototype.removeDraggableItem=function(htmlNode){ + htmlNode.onmousedown=null; + htmlNode.dragStarter=null; + htmlNode.dragLanding=null; +}; + +dhtmlDragAndDropObject.prototype.addDraggableItem=function(htmlNode, dhtmlObject){ + htmlNode.onmousedown=this.preCreateDragCopy; + htmlNode.dragStarter=dhtmlObject; + this.addDragLanding(htmlNode, dhtmlObject); +}; + +dhtmlDragAndDropObject.prototype.addDragLanding=function(htmlNode, dhtmlObject){ + htmlNode.dragLanding=dhtmlObject; +}; + +dhtmlDragAndDropObject.prototype.preCreateDragCopy=function(e){ + if ((e||window.event) && (e||event).button == 2) + return; + + if (window.dhtmlDragAndDrop.waitDrag){ + window.dhtmlDragAndDrop.waitDrag=0; + document.body.onmouseup=window.dhtmlDragAndDrop.tempDOMU; + document.body.onmousemove=window.dhtmlDragAndDrop.tempDOMM; + return false; + } + + if (window.dhtmlDragAndDrop.dragNode) + window.dhtmlDragAndDrop.stopDrag(e); + + window.dhtmlDragAndDrop.waitDrag=1; + window.dhtmlDragAndDrop.tempDOMU=document.body.onmouseup; + window.dhtmlDragAndDrop.tempDOMM=document.body.onmousemove; + window.dhtmlDragAndDrop.dragStartNode=this; + window.dhtmlDragAndDrop.dragStartObject=this.dragStarter; + document.body.onmouseup=window.dhtmlDragAndDrop.preCreateDragCopy; + document.body.onmousemove=window.dhtmlDragAndDrop.callDrag; + window.dhtmlDragAndDrop.downtime = new Date().valueOf(); + + + if ((e)&&(e.preventDefault)){ + e.preventDefault(); + return false; + } + return false; +}; + +dhtmlDragAndDropObject.prototype.callDrag=function(e){ + if (!e) + e=window.event; + var dragger=window.dhtmlDragAndDrop; + if ((new Date()).valueOf()-dragger.downtime<100) return; + + //if ((e.button == 0)&&(_isIE)) + // return dragger.stopDrag(); + + if (!dragger.dragNode){ + if (dragger.waitDrag){ + dragger.dragNode=dragger.dragStartObject._createDragNode(dragger.dragStartNode, e); + + if (!dragger.dragNode) + return dragger.stopDrag(); + + dragger.dragNode.onselectstart=function(){return false;}; + dragger.gldragNode=dragger.dragNode; + document.body.appendChild(dragger.dragNode); + document.body.onmouseup=dragger.stopDrag; + dragger.waitDrag=0; + dragger.dragNode.pWindow=window; + dragger.initFrameRoute(); + } + else return dragger.stopDrag(e, true); + } + + if (dragger.dragNode.parentNode != window.document.body && dragger.gldragNode){ + var grd = dragger.gldragNode; + + if (dragger.gldragNode.old) + grd=dragger.gldragNode.old; + + //if (!document.all) dragger.calculateFramePosition(); + grd.parentNode.removeChild(grd); + var oldBody = dragger.dragNode.pWindow; + + if (grd.pWindow && grd.pWindow.dhtmlDragAndDrop.lastLanding) + grd.pWindow.dhtmlDragAndDrop.lastLanding.dragLanding._dragOut(grd.pWindow.dhtmlDragAndDrop.lastLanding); + + // var oldp=dragger.dragNode.parentObject; + if (_isIE){ + var div = document.createElement("Div"); + div.innerHTML=dragger.dragNode.outerHTML; + dragger.dragNode=div.childNodes[0]; + } else + dragger.dragNode=dragger.dragNode.cloneNode(true); + + dragger.dragNode.pWindow=window; + // dragger.dragNode.parentObject=oldp; + + dragger.gldragNode.old=dragger.dragNode; + document.body.appendChild(dragger.dragNode); + oldBody.dhtmlDragAndDrop.dragNode=dragger.dragNode; + } + + dragger.dragNode.style.left=e.clientX+15 + + (dragger.fx ? dragger.fx*(-1) : 0) + + (document.body.scrollLeft||document.documentElement.scrollLeft)+"px"; + dragger.dragNode.style.top=e.clientY+3+ + (dragger.fy ? dragger.fy*(-1) : 0) + + (document.body.scrollTop||document.documentElement.scrollTop)+"px"; + + var z; + if (!e.srcElement) + z = e.target; + else + z=e.srcElement; + dragger.checkLanding(z, e); +}; + +dhtmlDragAndDropObject.prototype.calculateFramePosition=function(n){ + //this.fx = 0, this.fy = 0; + if (window.name){ + var el = parent.frames[window.name].frameElement.offsetParent; + var fx = 0; + var fy = 0; + + while (el){ + fx+=el.offsetLeft; + fy+=el.offsetTop; + el=el.offsetParent; + } + + if ((parent.dhtmlDragAndDrop)){ + var ls = parent.dhtmlDragAndDrop.calculateFramePosition(1); + fx+=ls.split('_')[0]*1; + fy+=ls.split('_')[1]*1; + } + + if (n) + return fx+"_"+fy; + else + this.fx=fx; + this.fy=fy; + } + return "0_0"; +}; + +dhtmlDragAndDropObject.prototype.checkLanding=function(htmlObject, e){ + if ((htmlObject)&&(htmlObject.dragLanding)){ + if (this.lastLanding) + this.lastLanding.dragLanding._dragOut(this.lastLanding); + this.lastLanding=htmlObject; + this.lastLanding=this.lastLanding.dragLanding._dragIn(this.lastLanding, this.dragStartNode, e.clientX, + e.clientY, e); + this.lastLanding_scr=(_isIE ? e.srcElement : e.target); + } else { + if ((htmlObject)&&(htmlObject.tagName != "BODY")) + this.checkLanding(htmlObject.parentNode, e); + else { + if (this.lastLanding) + this.lastLanding.dragLanding._dragOut(this.lastLanding, e.clientX, e.clientY, e); + this.lastLanding=0; + + if (this._onNotFound) + this._onNotFound(); + } + } +}; + +dhtmlDragAndDropObject.prototype.stopDrag=function(e, mode){ + var dragger=window.dhtmlDragAndDrop; + + if (!mode){ + dragger.stopFrameRoute(); + var temp = dragger.lastLanding; + dragger.lastLanding=null; + + if (temp) + temp.dragLanding._drag(dragger.dragStartNode, dragger.dragStartObject, temp, + (_isIE ? event.srcElement : e.target)); + } + dragger.lastLanding=null; + + if ((dragger.dragNode)&&(dragger.dragNode.parentNode == document.body)) + dragger.dragNode.parentNode.removeChild(dragger.dragNode); + dragger.dragNode=0; + dragger.gldragNode=0; + dragger.fx=0; + dragger.fy=0; + dragger.dragStartNode=0; + dragger.dragStartObject=0; + document.body.onmouseup=dragger.tempDOMU; + document.body.onmousemove=dragger.tempDOMM; + dragger.tempDOMU=null; + dragger.tempDOMM=null; + dragger.waitDrag=0; +}; + +dhtmlDragAndDropObject.prototype.stopFrameRoute=function(win){ + if (win) + window.dhtmlDragAndDrop.stopDrag(1, 1); + + for (var i = 0; i < window.frames.length; i++){ + try{ + if ((window.frames[i] != win)&&(window.frames[i].dhtmlDragAndDrop)) + window.frames[i].dhtmlDragAndDrop.stopFrameRoute(window); + } catch(e){} + } + + try{ + if ((parent.dhtmlDragAndDrop)&&(parent != window)&&(parent != win)) + parent.dhtmlDragAndDrop.stopFrameRoute(window); + } catch(e){} +}; + +dhtmlDragAndDropObject.prototype.initFrameRoute=function(win, mode){ + if (win){ + window.dhtmlDragAndDrop.preCreateDragCopy(); + window.dhtmlDragAndDrop.dragStartNode=win.dhtmlDragAndDrop.dragStartNode; + window.dhtmlDragAndDrop.dragStartObject=win.dhtmlDragAndDrop.dragStartObject; + window.dhtmlDragAndDrop.dragNode=win.dhtmlDragAndDrop.dragNode; + window.dhtmlDragAndDrop.gldragNode=win.dhtmlDragAndDrop.dragNode; + window.document.body.onmouseup=window.dhtmlDragAndDrop.stopDrag; + window.waitDrag=0; + + if (((!_isIE)&&(mode))&&((!_isFF)||(_FFrv < 1.8))) + window.dhtmlDragAndDrop.calculateFramePosition(); + } + try{ + if ((parent.dhtmlDragAndDrop)&&(parent != window)&&(parent != win)) + parent.dhtmlDragAndDrop.initFrameRoute(window); + }catch(e){} + + for (var i = 0; i < window.frames.length; i++){ + try{ + if ((window.frames[i] != win)&&(window.frames[i].dhtmlDragAndDrop)) + window.frames[i].dhtmlDragAndDrop.initFrameRoute(window, ((!win||mode) ? 1 : 0)); + } catch(e){} + } +}; + +_isFF = false; +_isIE = false; +_isOpera = false; +_isKHTML = false; +_isMacOS = false; +_isChrome = false; +_FFrv = false; +_KHTMLrv = false; +_OperaRv = false; + +if (navigator.userAgent.indexOf('Macintosh') != -1) + _isMacOS=true; + + +if (navigator.userAgent.toLowerCase().indexOf('chrome')>-1) + _isChrome=true; + +if ((navigator.userAgent.indexOf('Safari') != -1)||(navigator.userAgent.indexOf('Konqueror') != -1)){ + _KHTMLrv = parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Safari')+7, 5)); + + if (_KHTMLrv > 525){ //mimic FF behavior for Safari 3.1+ + _isFF=true; + _FFrv = 1.9; + } else + _isKHTML=true; +} else if (navigator.userAgent.indexOf('Opera') != -1){ + _isOpera=true; + _OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Opera')+6, 3)); +} + + +else if (navigator.appName.indexOf("Microsoft") != -1){ + _isIE=true; + if ((navigator.appVersion.indexOf("MSIE 8.0")!= -1 || navigator.appVersion.indexOf("MSIE 9.0")!= -1 || navigator.appVersion.indexOf("MSIE 10.0")!= -1 ) && document.compatMode != "BackCompat"){ + _isIE=8; + } +} else if (navigator.appName == 'Netscape' && navigator.userAgent.indexOf("Trident") != -1){ + //ie11 + _isIE=8; +} else { + _isFF=true; + _FFrv = parseFloat(navigator.userAgent.split("rv:")[1]); +} + + +//multibrowser Xpath processor +dtmlXMLLoaderObject.prototype.doXPath=function(xpathExp, docObj, namespace, result_type){ + if (_isKHTML || (!_isIE && !window.XPathResult)) + return this.doXPathOpera(xpathExp, docObj); + + if (_isIE){ //IE + if (!docObj) + if (!this.xmlDoc.nodeName) + docObj=this.xmlDoc.responseXML; + else + docObj=this.xmlDoc; + + if (!docObj) + dhtmlxError.throwError("LoadXML", "Incorrect XML", [ + (docObj||this.xmlDoc), + this.mainObject + ]); + + if (namespace) + docObj.setProperty("SelectionNamespaces", "xmlns:xsl='"+namespace+"'"); // + + if (result_type == 'single'){ + return docObj.selectSingleNode(xpathExp); + } + else { + return docObj.selectNodes(xpathExp)||new Array(0); + } + } else { //Mozilla + var nodeObj = docObj; + + if (!docObj){ + if (!this.xmlDoc.nodeName){ + docObj=this.xmlDoc.responseXML; + } + else { + docObj=this.xmlDoc; + } + } + + if (!docObj) + dhtmlxError.throwError("LoadXML", "Incorrect XML", [ + (docObj||this.xmlDoc), + this.mainObject + ]); + + if (docObj.nodeName.indexOf("document") != -1){ + nodeObj=docObj; + } + else { + nodeObj=docObj; + docObj=docObj.ownerDocument; + } + var retType = XPathResult.ANY_TYPE; + + if (result_type == 'single') + retType=XPathResult.FIRST_ORDERED_NODE_TYPE; + var rowsCol = []; + var col = docObj.evaluate(xpathExp, nodeObj, function(pref){ + return namespace; + }, retType, null); + + if (retType == XPathResult.FIRST_ORDERED_NODE_TYPE){ + return col.singleNodeValue; + } + var thisColMemb = col.iterateNext(); + + while (thisColMemb){ + rowsCol[rowsCol.length]=thisColMemb; + thisColMemb=col.iterateNext(); + } + return rowsCol; + } +}; + +function _dhtmlxError(type, name, params){ + if (!this.catches) + this.catches=[]; + + return this; +} + +_dhtmlxError.prototype.catchError=function(type, func_name){ + this.catches[type]=func_name; +}; + +_dhtmlxError.prototype.throwError=function(type, name, params){ + if (this.catches[type]) + return this.catches[type](type, name, params); + + if (this.catches["ALL"]) + return this.catches["ALL"](type, name, params); + + window.alert("Error type: "+arguments[0]+"\nDescription: "+arguments[1]); + return null; +}; + +window.dhtmlxError=new _dhtmlxError(); + + +//opera fake, while 9.0 not released +//multibrowser Xpath processor +dtmlXMLLoaderObject.prototype.doXPathOpera=function(xpathExp, docObj){ + //this is fake for Opera + var z = xpathExp.replace(/[\/]+/gi, "/").split('/'); + var obj = null; + var i = 1; + + if (!z.length) + return []; + + if (z[0] == ".") + obj=[docObj]; else if (z[0] === ""){ + obj=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(z[i].replace(/\[[^\]]*\]/g, "")); + i++; + } else + return []; + + for (i; i < z.length; i++)obj=this._getAllNamedChilds(obj, z[i]); + + if (z[i-1].indexOf("[") != -1) + obj=this._filterXPath(obj, z[i-1]); + return obj; +}; + +dtmlXMLLoaderObject.prototype._filterXPath=function(a, b){ + var c = []; + var b = b.replace(/[^\[]*\[\@/g, "").replace(/[\[\]\@]*/g, ""); + + for (var i = 0; i < a.length; i++) + if (a[i].getAttribute(b)) + c[c.length]=a[i]; + + return c; +}; + +dtmlXMLLoaderObject.prototype._getAllNamedChilds=function(a, b){ + var c = []; + + if (_isKHTML) + b=b.toUpperCase(); + + for (var i = 0; i < a.length; i++)for (var j = 0; j < a[i].childNodes.length; j++){ + if (_isKHTML){ + if (a[i].childNodes[j].tagName&&a[i].childNodes[j].tagName.toUpperCase() == b) + c[c.length]=a[i].childNodes[j]; + } + + else if (a[i].childNodes[j].tagName == b) + c[c.length]=a[i].childNodes[j]; + } + + return c; +}; + +function dhtmlXHeir(a, b){ + for (var c in b) + if (typeof (b[c]) == "function") + a[c]=b[c]; + return a; +} + +function dhtmlxEvent(el, event, handler){ + if (el.addEventListener) + el.addEventListener(event, handler, false); + + else if (el.attachEvent) + el.attachEvent("on"+event, handler); +} + +//============= XSL Extension =================================== + +dtmlXMLLoaderObject.prototype.xslDoc=null; +dtmlXMLLoaderObject.prototype.setXSLParamValue=function(paramName, paramValue, xslDoc){ + if (!xslDoc) + xslDoc=this.xslDoc; + + if (xslDoc.responseXML) + xslDoc=xslDoc.responseXML; + var item = + this.doXPath("/xsl:stylesheet/xsl:variable[@name='"+paramName+"']", xslDoc, + "http:/\/www.w3.org/1999/XSL/Transform", "single"); + + if (item) + item.firstChild.nodeValue=paramValue; +}; + +dtmlXMLLoaderObject.prototype.doXSLTransToObject=function(xslDoc, xmlDoc){ + if (!xslDoc) + xslDoc=this.xslDoc; + + if (xslDoc.responseXML) + xslDoc=xslDoc.responseXML; + + if (!xmlDoc) + xmlDoc=this.xmlDoc; + + if (xmlDoc.responseXML) + xmlDoc=xmlDoc.responseXML; + + + var result; + //Mozilla + if (!_isIE){ + if (!this.XSLProcessor){ + this.XSLProcessor=new XSLTProcessor(); + this.XSLProcessor.importStylesheet(xslDoc); + } + result = this.XSLProcessor.transformToDocument(xmlDoc); + } else { + result = new ActiveXObject("Msxml2.DOMDocument.3.0"); + try{ + xmlDoc.transformNodeToObject(xslDoc, result); + }catch(e){ + result = xmlDoc.transformNode(xslDoc); + } + } + return result; +}; + +dtmlXMLLoaderObject.prototype.doXSLTransToString=function(xslDoc, xmlDoc){ + var res = this.doXSLTransToObject(xslDoc, xmlDoc); + if(typeof(res)=="string") + return res; + return this.doSerialization(res); +}; + +dtmlXMLLoaderObject.prototype.doSerialization=function(xmlDoc){ + if (!xmlDoc) + xmlDoc=this.xmlDoc; + if (xmlDoc.responseXML) + xmlDoc=xmlDoc.responseXML; + if (!_isIE){ + var xmlSerializer = new XMLSerializer(); + return xmlSerializer.serializeToString(xmlDoc); + } else + return xmlDoc.xml; +}; + +/** + * @desc: + * @type: private + */ +dhtmlxEventable=function(obj){ + obj.attachEvent=function(name, catcher, callObj){ + name='ev_'+name.toLowerCase(); + if (!this[name]) + this[name]=new this.eventCatcher(callObj||this); + + return(name+':'+this[name].addEvent(catcher)); //return ID (event name & event ID) + }; + obj.callEvent=function(name, arg0){ + name='ev_'+name.toLowerCase(); + if (this[name]) + return this[name].apply(this, arg0); + return true; + }; + obj.checkEvent=function(name){ + return (!!this['ev_'+name.toLowerCase()]); + }; + obj.eventCatcher=function(obj){ + var dhx_catch = []; + var z = function(){ + var res = true; + for (var i = 0; i < dhx_catch.length; i++){ + if (dhx_catch[i]){ + var zr = dhx_catch[i].apply(obj, arguments); + res=res&&zr; + } + } + return res; + }; + z.addEvent=function(ev){ + if (typeof (ev) != "function") + ev=eval(ev); + if (ev) + return dhx_catch.push(ev)-1; + return false; + }; + z.removeEvent=function(id){ + dhx_catch[id]=null; + }; + return z; + }; + obj.detachEvent=function(id){ + if (id){ + var list = id.split(':'); //get EventName and ID + this[list[0]].removeEvent(list[1]); //remove event + } + }; + obj.detachAllEvents = function(){ + for (var name in this){ + if (name.indexOf("ev_")===0){ + this.detachEvent(name); + this[name] = null; + } + } + }; + obj = null; +}; +if(!window.dhtmlx) + window.dhtmlx = {}; + +(function(){ + var _dhx_msg_cfg = null; + function callback(config, result){ + var usercall = config.callback; + modality(false); + config.box.parentNode.removeChild(config.box); + _dhx_msg_cfg = config.box = null; + if (usercall) + usercall(result); + } + function modal_key(e){ + if (_dhx_msg_cfg){ + e = e||event; + var code = e.which||event.keyCode; + if (dhtmlx.message.keyboard){ + if (code == 13 || code == 32) + callback(_dhx_msg_cfg, true); + if (code == 27) + callback(_dhx_msg_cfg, false); + } + if (e.preventDefault) + e.preventDefault(); + return !(e.cancelBubble = true); + } + } + if (document.attachEvent) + document.attachEvent("onkeydown", modal_key); + else + document.addEventListener("keydown", modal_key, true); + + function modality(mode){ + if(!modality.cover){ + modality.cover = document.createElement("DIV"); + //necessary for IE only + modality.cover.onkeydown = modal_key; + modality.cover.className = "dhx_modal_cover"; + document.body.appendChild(modality.cover); + } + var height = document.body.scrollHeight; + modality.cover.style.display = mode?"inline-block":"none"; + } + + function button(text, result, css){ + // css - for locale-independent class name + var className = css ? css : (text || ""); + var button_css = "dhtmlx_"+(className).toLowerCase().replace(/ /g, "_")+"_button"; // dhtmlx_ok_button, dhtmlx_click_me_button + return "<div class='dhtmlx_popup_button "+button_css+"' result='"+result+"' ><div>"+text+"</div></div>"; + } + + function info(text){ + if (!t.area){ + t.area = document.createElement("DIV"); + t.area.className = "dhtmlx_message_area"; + t.area.style[t.position]="5px"; + document.body.appendChild(t.area); + } + + t.hide(text.id); + var message = document.createElement("DIV"); + message.innerHTML = "<div>"+text.text+"</div>"; + message.className = "dhtmlx-info dhtmlx-" + text.type; + message.onclick = function(){ + t.hide(text.id); + text = null; + }; + + if (t.position == "bottom" && t.area.firstChild) + t.area.insertBefore(message,t.area.firstChild); + else + t.area.appendChild(message); + + if (text.expire > 0) + t.timers[text.id]=window.setTimeout(function(){ + t.hide(text.id); + }, text.expire); + + t.pull[text.id] = message; + message = null; + + return text.id; + } + function _boxStructure(config, ok, cancel){ + var box = document.createElement("DIV"); + box.className = " dhtmlx_modal_box dhtmlx-"+config.type; + box.setAttribute("dhxbox", 1); + + var inner = ''; + + if (config.width) + box.style.width = config.width; + if (config.height) + box.style.height = config.height; + if (config.title) + inner+='<div class="dhtmlx_popup_title">'+config.title+'</div>'; + inner+='<div class="dhtmlx_popup_text"><span>'+(config.content?'':config.text)+'</span></div><div class="dhtmlx_popup_controls">'; + if (ok){ + var ok_text = (config.ok || scheduler.locale.labels.message_ok); + //default value for compatibility with custom locales some people have + if(ok_text === undefined) ok_text = "OK"; + inner += button(ok_text, true, "ok"); + } + if (cancel){ + var cancel_text = (config.cancel || scheduler.locale.labels.message_cancel); + if(cancel_text === undefined) cancel_text = "Cancel"; + inner += button(cancel_text, false, "cancel"); + } + if (config.buttons){ + for (var i=0; i<config.buttons.length; i++) + inner += button(config.buttons[i],i); + } + inner += '</div>'; + box.innerHTML = inner; + + if (config.content){ + var node = config.content; + if (typeof node == "string") + node = document.getElementById(node); + if (node.style.display == 'none') + node.style.display = ""; + box.childNodes[config.title?1:0].appendChild(node); + } + + box.onclick = function(e){ + e = e ||event; + var source = e.target || e.srcElement; + if (!source.className) source = source.parentNode; + if (source.className.split(" ")[0] == "dhtmlx_popup_button"){ + var result = source.getAttribute("result"); + result = (result == "true")||(result == "false"?false:result); + callback(config, result); + } + }; + config.box = box; + if (ok||cancel) + _dhx_msg_cfg = config; + + return box; + } + function _createBox(config, ok, cancel){ + var box = config.tagName ? config : _boxStructure(config, ok, cancel); + + if (!config.hidden) + modality(true); + document.body.appendChild(box); + var x = Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth) - box.offsetWidth)/2)); + var y = Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight) - box.offsetHeight)/2)); + if (config.position == "top") + box.style.top = "-3px"; + else + box.style.top = y+'px'; + box.style.left = x+'px'; + //necessary for IE only + box.onkeydown = modal_key; + + box.focus(); + if (config.hidden) + dhtmlx.modalbox.hide(box); + + return box; + } + + function alertPopup(config){ + return _createBox(config, true, false); + } + function confirmPopup(config){ + return _createBox(config, true, true); + } + function boxPopup(config){ + return _createBox(config); + } + function box_params(text, type, callback){ + if (typeof text != "object"){ + if (typeof type == "function"){ + callback = type; + type = ""; + } + text = {text:text, type:type, callback:callback }; + } + return text; + } + function params(text, type, expire, id){ + if (typeof text != "object") + text = {text:text, type:type, expire:expire, id:id}; + text.id = text.id||t.uid(); + text.expire = text.expire||t.expire; + return text; + } + dhtmlx.alert = function(){ + var text = box_params.apply(this, arguments); + text.type = text.type || "confirm"; + return alertPopup(text); + }; + dhtmlx.confirm = function(){ + var text = box_params.apply(this, arguments); + text.type = text.type || "alert"; + return confirmPopup(text); + }; + dhtmlx.modalbox = function(){ + var text = box_params.apply(this, arguments); + text.type = text.type || "alert"; + return boxPopup(text); + }; + dhtmlx.modalbox.hide = function(node){ + while (node && node.getAttribute && !node.getAttribute("dhxbox")) + node = node.parentNode; + if (node){ + node.parentNode.removeChild(node); + modality(false); + } + }; + var t = dhtmlx.message = function(text, type, expire, id){ + text = params.apply(this, arguments); + text.type = text.type||"info"; + + var subtype = text.type.split("-")[0]; + switch (subtype){ + case "alert": + return alertPopup(text); + case "confirm": + return confirmPopup(text); + case "modalbox": + return boxPopup(text); + default: + return info(text); + } + }; + + t.seed = (new Date()).valueOf(); + t.uid = function(){return t.seed++;}; + t.expire = 4000; + t.keyboard = true; + t.position = "top"; + t.pull = {}; + t.timers = {}; + + t.hideAll = function(){ + for (var key in t.pull) + t.hide(key); + }; + t.hide = function(id){ + var obj = t.pull[id]; + if (obj && obj.parentNode){ + window.setTimeout(function(){ + obj.parentNode.removeChild(obj); + obj = null; + },2000); + obj.className+=" hidden"; + + if(t.timers[id]) + window.clearTimeout(t.timers[id]); + delete t.pull[id]; + } + }; +})(); +/** + * @desc: constructor, data processor object + * @param: serverProcessorURL - url used for update + * @type: public + */ +function dataProcessor(serverProcessorURL){ + this.serverProcessor = serverProcessorURL; + this.action_param="!nativeeditor_status"; + + this.object = null; + this.updatedRows = []; //ids of updated rows + + this.autoUpdate = true; + this.updateMode = "cell"; + this._tMode="GET"; + this.post_delim = "_"; + + this._waitMode=0; + this._in_progress={};//? + this._invalid={}; + this.mandatoryFields=[]; + this.messages=[]; + + this.styles={ + updated:"font-weight:bold;", + inserted:"font-weight:bold;", + deleted:"text-decoration : line-through;", + invalid:"background-color:FFE0E0;", + invalid_cell:"border-bottom:2px solid red;", + error:"color:red;", + clear:"font-weight:normal;text-decoration:none;" + }; + + this.enableUTFencoding(true); + dhtmlxEventable(this); + + return this; + } + +dataProcessor.prototype={ + /** + * @desc: select GET or POST transaction model + * @param: mode - GET/POST + * @param: total - true/false - send records row by row or all at once (for grid only) + * @type: public + */ + setTransactionMode:function(mode,total){ + this._tMode=mode; + this._tSend=total; + }, + escape:function(data){ + if (this._utf) + return encodeURIComponent(data); + else + return escape(data); + }, + /** + * @desc: allows to set escaping mode + * @param: true - utf based escaping, simple - use current page encoding + * @type: public + */ + enableUTFencoding:function(mode){ + this._utf=convertStringToBoolean(mode); + }, + /** + * @desc: allows to define, which column may trigger update + * @param: val - array or list of true/false values + * @type: public + */ + setDataColumns:function(val){ + this._columns=(typeof val == "string")?val.split(","):val; + }, + /** + * @desc: get state of updating + * @returns: true - all in sync with server, false - some items not updated yet. + * @type: public + */ + getSyncState:function(){ + return !this.updatedRows.length; + }, + /** + * @desc: enable/disable named field for data syncing, will use column ids for grid + * @param: mode - true/false + * @type: public + */ + enableDataNames:function(mode){ + this._endnm=convertStringToBoolean(mode); + }, + /** + * @desc: enable/disable mode , when only changed fields and row id send to the server side, instead of all fields in default mode + * @param: mode - true/false + * @type: public + */ + enablePartialDataSend:function(mode){ + this._changed=convertStringToBoolean(mode); + }, + /** + * @desc: set if rows should be send to server automaticaly + * @param: mode - "row" - based on row selection changed, "cell" - based on cell editing finished, "off" - manual data sending + * @type: public + */ + setUpdateMode:function(mode,dnd){ + this.autoUpdate = (mode=="cell"); + this.updateMode = mode; + this.dnd=dnd; + }, + ignore:function(code,master){ + this._silent_mode=true; + code.call(master||window); + this._silent_mode=false; + }, + /** + * @desc: mark row as updated/normal. check mandatory fields,initiate autoupdate (if turned on) + * @param: rowId - id of row to set update-status for + * @param: state - true for "updated", false for "not updated" + * @param: mode - update mode name + * @type: public + */ + setUpdated:function(rowId,state,mode){ + if (this._silent_mode) return; + var ind=this.findRow(rowId); + + mode=mode||"updated"; + var existing = this.obj.getUserData(rowId,this.action_param); + if (existing && mode == "updated") mode=existing; + if (state){ + this.set_invalid(rowId,false); //clear previous error flag + this.updatedRows[ind]=rowId; + this.obj.setUserData(rowId,this.action_param,mode); + if (this._in_progress[rowId]) + this._in_progress[rowId]="wait"; + } else{ + if (!this.is_invalid(rowId)){ + this.updatedRows.splice(ind,1); + this.obj.setUserData(rowId,this.action_param,""); + } + } + + //clear changed flag + if (!state) + this._clearUpdateFlag(rowId); + + this.markRow(rowId,state,mode); + if (state && this.autoUpdate) this.sendData(rowId); + }, + _clearUpdateFlag:function(id){}, + markRow:function(id,state,mode){ + var str=""; + var invalid=this.is_invalid(id); + if (invalid){ + str=this.styles[invalid]; + state=true; + } + if (this.callEvent("onRowMark",[id,state,mode,invalid])){ + //default logic + str=this.styles[state?mode:"clear"]+str; + + this.obj[this._methods[0]](id,str); + + if (invalid && invalid.details){ + str+=this.styles[invalid+"_cell"]; + for (var i=0; i < invalid.details.length; i++) + if (invalid.details[i]) + this.obj[this._methods[1]](id,i,str); + } + } + }, + getState:function(id){ + return this.obj.getUserData(id,this.action_param); + }, + is_invalid:function(id){ + return this._invalid[id]; + }, + set_invalid:function(id,mode,details){ + if (details) mode={value:mode, details:details, toString:function(){ return this.value.toString(); }}; + this._invalid[id]=mode; + }, + /** + * @desc: check mandatory fields and varify values of cells, initiate update (if specified) + * @param: rowId - id of row to set update-status for + * @type: public + */ + checkBeforeUpdate:function(rowId){ + return true; + }, + /** + * @desc: send row(s) values to server + * @param: rowId - id of row which data to send. If not specified, then all "updated" rows will be send + * @type: public + */ + sendData:function(rowId){ + if (this._waitMode && (this.obj.mytype=="tree" || this.obj._h2)) return; + if (this.obj.editStop) this.obj.editStop(); + + + if(typeof rowId == "undefined" || this._tSend) return this.sendAllData(); + if (this._in_progress[rowId]) return false; + + this.messages=[]; + if (!this.checkBeforeUpdate(rowId) && this.callEvent("onValidationError",[rowId,this.messages])) return false; + this._beforeSendData(this._getRowData(rowId),rowId); + }, + _beforeSendData:function(data,rowId){ + if (!this.callEvent("onBeforeUpdate",[rowId,this.getState(rowId),data])) return false; + this._sendData(data,rowId); + }, + serialize:function(data, id){ + if (typeof data == "string") + return data; + if (typeof id != "undefined") + return this.serialize_one(data,""); + else{ + var stack = []; + var keys = []; + for (var key in data) + if (data.hasOwnProperty(key)){ + stack.push(this.serialize_one(data[key],key+this.post_delim)); + keys.push(key); + } + stack.push("ids="+this.escape(keys.join(","))); + if (dhtmlx.security_key) + stack.push("dhx_security="+dhtmlx.security_key); + return stack.join("&"); + } + }, + serialize_one:function(data, pref){ + if (typeof data == "string") + return data; + var stack = []; + for (var key in data) + if (data.hasOwnProperty(key)) + stack.push(this.escape((pref||"")+key)+"="+this.escape(data[key])); + return stack.join("&"); + }, + _sendData:function(a1,rowId){ + if (!a1) return; //nothing to send + if (!this.callEvent("onBeforeDataSending",rowId?[rowId,this.getState(rowId),a1]:[null, null, a1])) return false; + + if (rowId) + this._in_progress[rowId]=(new Date()).valueOf(); + var a2=new dtmlXMLLoaderObject(this.afterUpdate,this,true); + + var a3 = this.serverProcessor+(this._user?(getUrlSymbol(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+this.obj.getUserData(0,"version")].join("&")):""); + + if (this._tMode!="POST") + a2.loadXML(a3+((a3.indexOf("?")!=-1)?"&":"?")+this.serialize(a1,rowId)); + else + a2.loadXML(a3,true,this.serialize(a1,rowId)); + + this._waitMode++; + }, + sendAllData:function(){ + if (!this.updatedRows.length) return; + + this.messages=[]; var valid=true; + for (var i=0; i<this.updatedRows.length; i++) + valid&=this.checkBeforeUpdate(this.updatedRows[i]); + if (!valid && !this.callEvent("onValidationError",["",this.messages])) return false; + + if (this._tSend) + this._sendData(this._getAllData()); + else + for (var i=0; i<this.updatedRows.length; i++) + if (!this._in_progress[this.updatedRows[i]]){ + if (this.is_invalid(this.updatedRows[i])) continue; + this._beforeSendData(this._getRowData(this.updatedRows[i]),this.updatedRows[i]); + if (this._waitMode && (this.obj.mytype=="tree" || this.obj._h2)) return; //block send all for tree + } + }, + + + + + + + + + _getAllData:function(rowId){ + var out={}; + var has_one = false; + for(var i=0;i<this.updatedRows.length;i++){ + var id=this.updatedRows[i]; + if (this._in_progress[id] || this.is_invalid(id)) continue; + if (!this.callEvent("onBeforeUpdate",[id,this.getState(id)])) continue; + out[id]=this._getRowData(id,id+this.post_delim); + has_one = true; + this._in_progress[id]=(new Date()).valueOf(); + } + return has_one?out:null; + }, + + + /** + * @desc: specify column which value should be varified before sending to server + * @param: ind - column index (0 based) + * @param: verifFunction - function (object) which should verify cell value (if not specified, then value will be compared to empty string). Two arguments will be passed into it: value and column name + * @type: public + */ + setVerificator:function(ind,verifFunction){ + this.mandatoryFields[ind] = verifFunction||(function(value){return (value !== "");}); + }, + /** + * @desc: remove column from list of those which should be verified + * @param: ind - column Index (0 based) + * @type: public + */ + clearVerificator:function(ind){ + this.mandatoryFields[ind] = false; + }, + + + + + + findRow:function(pattern){ + var i=0; + for(i=0;i<this.updatedRows.length;i++) + if(pattern==this.updatedRows[i]) break; + return i; + }, + + + + + + + + + + + + /** + * @desc: define custom actions + * @param: name - name of action, same as value of action attribute + * @param: handler - custom function, which receives a XMl response content for action + * @type: private + */ + defineAction:function(name,handler){ + if (!this._uActions) this._uActions=[]; + this._uActions[name]=handler; + }, + + + + + /** +* @desc: used in combination with setOnBeforeUpdateHandler to create custom client-server transport system +* @param: sid - id of item before update +* @param: tid - id of item after up0ate +* @param: action - action name +* @type: public +* @topic: 0 +*/ + afterUpdateCallback:function(sid, tid, action, btag) { + var marker = sid; + var correct=(action!="error" && action!="invalid"); + if (!correct) this.set_invalid(sid,action); + if ((this._uActions)&&(this._uActions[action])&&(!this._uActions[action](btag))) + return (delete this._in_progress[marker]); + + if (this._in_progress[marker]!="wait") + this.setUpdated(sid, false); + + var soid = sid; + + switch (action) { + case "inserted": + case "insert": + if (tid != sid) { + this.obj[this._methods[2]](sid, tid); + sid = tid; + } + break; + case "delete": + case "deleted": + this.obj.setUserData(sid, this.action_param, "true_deleted"); + this.obj[this._methods[3]](sid); + delete this._in_progress[marker]; + return this.callEvent("onAfterUpdate", [sid, action, tid, btag]); + } + + if (this._in_progress[marker]!="wait"){ + if (correct) this.obj.setUserData(sid, this.action_param,''); + delete this._in_progress[marker]; + } else { + delete this._in_progress[marker]; + this.setUpdated(tid,true,this.obj.getUserData(sid,this.action_param)); + } + + this.callEvent("onAfterUpdate", [soid, action, tid, btag]); + }, + + /** + * @desc: response from server + * @param: xml - XMLLoader object with response XML + * @type: private + */ + afterUpdate:function(that,b,c,d,xml){ + xml.getXMLTopNode("data"); //fix incorrect content type in IE + if (!xml.xmlDoc.responseXML) return; + var atag=xml.doXPath("//data/action"); + for (var i=0; i<atag.length; i++){ + var btag=atag[i]; + var action = btag.getAttribute("type"); + var sid = btag.getAttribute("sid"); + var tid = btag.getAttribute("tid"); + + that.afterUpdateCallback(sid,tid,action,btag); + } + that.finalizeUpdate(); + }, + finalizeUpdate:function(){ + if (this._waitMode) this._waitMode--; + + if ((this.obj.mytype=="tree" || this.obj._h2) && this.updatedRows.length) + this.sendData(); + this.callEvent("onAfterUpdateFinish",[]); + if (!this.updatedRows.length) + this.callEvent("onFullSync",[]); + }, + + + + + + /** + * @desc: initializes data-processor + * @param: anObj - dhtmlxGrid object to attach this data-processor to + * @type: public + */ + init:function(anObj){ + this.obj = anObj; + if (this.obj._dp_init) + this.obj._dp_init(this); + }, + + + setOnAfterUpdate:function(ev){ + this.attachEvent("onAfterUpdate",ev); + }, + enableDebug:function(mode){ + }, + setOnBeforeUpdateHandler:function(func){ + this.attachEvent("onBeforeDataSending",func); + }, + + + + /*! starts autoupdate mode + @param interval + time interval for sending update requests + */ + setAutoUpdate: function(interval, user) { + interval = interval || 2000; + + this._user = user || (new Date()).valueOf(); + this._need_update = false; + this._loader = null; + this._update_busy = false; + + this.attachEvent("onAfterUpdate",function(sid,action,tid,xml_node){ + this.afterAutoUpdate(sid, action, tid, xml_node); + }); + this.attachEvent("onFullSync",function(){ + this.fullSync(); + }); + + var self = this; + window.setInterval(function(){ + self.loadUpdate(); + }, interval); + }, + + + /*! process updating request answer + if status == collision version is depricated + set flag for autoupdating immidiatly + */ + afterAutoUpdate: function(sid, action, tid, xml_node) { + if (action == 'collision') { + this._need_update = true; + return false; + } else { + return true; + } + }, + + + /*! callback function for onFillSync event + call update function if it's need + */ + fullSync: function() { + if (this._need_update === true) { + this._need_update = false; + this.loadUpdate(); + } + return true; + }, + + + /*! sends query to the server and call callback function + */ + getUpdates: function(url,callback){ + if (this._update_busy) + return false; + else + this._update_busy = true; + + this._loader = this._loader || new dtmlXMLLoaderObject(true); + + this._loader.async=true; + this._loader.waitCall=callback; + this._loader.loadXML(url); + }, + + + /*! returns xml node value + @param node + xml node + */ + _v: function(node) { + if (node.firstChild) return node.firstChild.nodeValue; + return ""; + }, + + + /*! returns values array of xml nodes array + @param arr + array of xml nodes + */ + _a: function(arr) { + var res = []; + for (var i=0; i < arr.length; i++) { + res[i]=this._v(arr[i]); + } + return res; + }, + + + /*! loads updates and processes them + */ + loadUpdate: function(){ + var self = this; + var version = this.obj.getUserData(0,"version"); + var url = this.serverProcessor+getUrlSymbol(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+version].join("&"); + url = url.replace("editing=true&",""); + this.getUpdates(url, function(){ + var vers = self._loader.doXPath("//userdata"); + self.obj.setUserData(0,"version",self._v(vers[0])); + + var upds = self._loader.doXPath("//update"); + if (upds.length){ + self._silent_mode = true; + + for (var i=0; i<upds.length; i++) { + var status = upds[i].getAttribute('status'); + var id = upds[i].getAttribute('id'); + var parent = upds[i].getAttribute('parent'); + switch (status) { + case 'inserted': + self.callEvent("insertCallback",[upds[i], id, parent]); + break; + case 'updated': + self.callEvent("updateCallback",[upds[i], id, parent]); + break; + case 'deleted': + self.callEvent("deleteCallback",[upds[i], id, parent]); + break; + } + } + + self._silent_mode = false; + } + + self._update_busy = false; + self = null; + }); + } + +}; +/* + dhx_sort[index]=direction + dhx_filter[index]=mask +*/ +if (window.dhtmlXGridObject){ + dhtmlXGridObject.prototype._init_point_connector=dhtmlXGridObject.prototype._init_point; + dhtmlXGridObject.prototype._init_point=function(){ + var clear_url=function(url){ + url=url.replace(/(\?|\&)connector[^\f]*/g,""); + return url+(url.indexOf("?")!=-1?"&":"?")+"connector=true"+(this.hdr.rows.length > 0 ? "&dhx_no_header=1":""); + }; + var combine_urls=function(url){ + return clear_url.call(this,url)+(this._connector_sorting||"")+(this._connector_filter||""); + }; + var sorting_url=function(url,ind,dir){ + this._connector_sorting="&dhx_sort["+ind+"]="+dir; + return combine_urls.call(this,url); + }; + var filtering_url=function(url,inds,vals){ + for (var i=0; i<inds.length; i++) + inds[i]="dhx_filter["+inds[i]+"]="+encodeURIComponent(vals[i]); + this._connector_filter="&"+inds.join("&"); + return combine_urls.call(this,url); + }; + this.attachEvent("onCollectValues",function(ind){ + if (this._con_f_used[ind]){ + if (typeof(this._con_f_used[ind]) == "object") + return this._con_f_used[ind]; + else + return false; + } + return true; + }); + this.attachEvent("onDynXLS",function(){ + this.xmlFileUrl=combine_urls.call(this,this.xmlFileUrl); + return true; + }); + this.attachEvent("onBeforeSorting",function(ind,type,dir){ + if (type=="connector"){ + var self=this; + this.clearAndLoad(sorting_url.call(this,this.xmlFileUrl,ind,dir),function(){ + self.setSortImgState(true,ind,dir); + }); + return false; + } + return true; + }); + this.attachEvent("onFilterStart",function(a,b){ + if (this._con_f_used.length){ + this.clearAndLoad(filtering_url.call(this,this.xmlFileUrl,a,b)); + return false; + } + return true; + }); + this.attachEvent("onXLE",function(a,b,c,xml){ + if (!xml) return; + }); + + if (this._init_point_connector) this._init_point_connector(); + }; + dhtmlXGridObject.prototype._con_f_used=[]; + dhtmlXGridObject.prototype._in_header_connector_text_filter=function(t,i){ + if (!this._con_f_used[i]) + this._con_f_used[i]=1; + return this._in_header_text_filter(t,i); + }; + dhtmlXGridObject.prototype._in_header_connector_select_filter=function(t,i){ + if (!this._con_f_used[i]) + this._con_f_used[i]=2; + return this._in_header_select_filter(t,i); + }; + dhtmlXGridObject.prototype.load_connector=dhtmlXGridObject.prototype.load; + dhtmlXGridObject.prototype.load=function(url, call, type){ + var data = [].concat(arguments); + if (!this._colls_loaded && this.cellType){ + var ar=[]; + for (var i=0; i < this.cellType.length; i++) + if (this.cellType[i].indexOf("co") === 0 || this._con_f_used[i]==2) ar.push(i); + if (ar.length) + data[0] += (data[0].indexOf("?")!=-1?"&":"?")+"connector=true&dhx_colls="+ar.join(","); + } + return this.load_connector.apply(this, data); + }; + dhtmlXGridObject.prototype._parseHead_connector=dhtmlXGridObject.prototype._parseHead; + dhtmlXGridObject.prototype._parseHead=function(url, call, type){ + this._parseHead_connector.apply(this,arguments); + if (!this._colls_loaded){ + var cols = this.xmlLoader.doXPath("./coll_options", arguments[0]); + for (var i=0; i < cols.length; i++){ + var f = cols[i].getAttribute("for"); + var v = []; + var combo=null; + if (this.cellType[f] == "combo") + combo = this.getColumnCombo(f); + if (this.cellType[f].indexOf("co") === 0) + combo=this.getCombo(f); + + var os = this.xmlLoader.doXPath("./item",cols[i]); + for (var j=0; j<os.length; j++){ + var val=os[j].getAttribute("value"); + + if (combo){ + var lab=os[j].getAttribute("label")||val; + + if (combo.addOption) + combo.addOption([[val, lab]]); + else + combo.put(val,lab); + + v[v.length]=lab; + } else + v[v.length]=val; + } + if (this._con_f_used[f*1]) + this._con_f_used[f*1]=v; + } + this._colls_loaded=true; + } + }; +} + +if (window.dataProcessor){ + dataProcessor.prototype.init_original=dataProcessor.prototype.init; + dataProcessor.prototype.init=function(obj){ + this.init_original(obj); + obj._dataprocessor=this; + + this.setTransactionMode("POST",true); + this.serverProcessor+=(this.serverProcessor.indexOf("?")!=-1?"&":"?")+"editing=true"; + }; +} +dhtmlxError.catchError("LoadXML",function(a,b,c){ + if (c[0].status) { + window.alert(c[0].responseText); + } +}); + + +dhtmlxEventable(scheduler); + +scheduler._detachDomEvent = function(el, event, handler){ + if (el.removeEventListener){ + el.removeEventListener(event, handler, false); + + }else if (el.detachEvent){ + el.detachEvent("on"+event, handler); + } +}; + +scheduler._init_once = function(){ + + var oldSize = getWindowSize(); + dhtmlxEvent(window,"resize",function(){ + var newSize = getWindowSize(); + + // ie7-8 triggers "resize" when window's elements are resized, it messes container-autoresize extension + // check if it's actually resized + if(!equals(oldSize, newSize)){ + window.clearTimeout(scheduler._resize_timer); + scheduler._resize_timer=window.setTimeout(function(){ + if (scheduler.callEvent("onSchedulerResize",[])) { + scheduler.update_view(); + scheduler.callEvent("onAfterSchedulerResize", []); + } + }, 100); + } + oldSize = newSize; + + }); + function getWindowSize(){ + return { + w : window.innerWidth || document.documentElement.clientWidth, + h : window.innerHeight || document.documentElement.clientHeight + }; + } + function equals(a,b){ + return a.w == b.w && a.h == b.h; + } + + scheduler._init_once = function(){}; +}; +scheduler.init=function(id,date,mode){ + date=date||(scheduler._currentDate()); + mode=mode||"week"; + + if(this._obj){ + this.unset_actions(); + this._obj.innerHTML = ""; + } + + this._obj=(typeof id == "string")?document.getElementById(id):id; + + //hook for terrace skin + if (this._skin_init) + scheduler._skin_init(); + + scheduler.date.init(); + + + this._els=[]; + this._scroll=true; + this._quirks=(_isIE && document.compatMode == "BackCompat"); + this._quirks7=(_isIE && navigator.appVersion.indexOf("MSIE 8")==-1); + + this.get_elements(); + this.init_templates(); + this.set_actions(); + + this._init_once(); + this._init_touch_events(); + + this.set_sizes(); + scheduler.callEvent('onSchedulerReady', []); + this.setCurrentView(date,mode); + +}; + +scheduler.xy={ + min_event_height:40, + scale_width:50, + scroll_width:18, + scale_height:20, + month_scale_height:20, + menu_width:25, + margin_top:0, + margin_left:0, + editor_width:140, + month_head_height:22 +}; +scheduler.keys={ + edit_save:13, + edit_cancel:27 +}; +scheduler.set_sizes=function(){ + var w = this._x = this._obj.clientWidth-this.xy.margin_left; + var h = this._y = this._obj.clientHeight-this.xy.margin_top; + + //not-table mode always has scroll - need to be fixed in future + var scale_x=this._table_view?0:(this.xy.scale_width+this.xy.scroll_width); + var scale_s=this._table_view?-1:this.xy.scale_width; + + this.set_xy(this._els["dhx_cal_navline"][0],w,this.xy.nav_height,0,0); + this.set_xy(this._els["dhx_cal_header"][0],w-scale_x,this.xy.scale_height,scale_s,this.xy.nav_height+(this._quirks?-1:1)); + //to support alter-skin, we need a way to alter height directly from css + var actual_height = this._els["dhx_cal_navline"][0].offsetHeight; + if (actual_height > 0) this.xy.nav_height = actual_height; + + var data_y=this.xy.scale_height+this.xy.nav_height+(this._quirks?-2:0); + this.set_xy(this._els["dhx_cal_data"][0],w,h-(data_y+2),0,data_y+2); +}; +scheduler.set_xy=function(node,w,h,x,y){ + node.style.width=Math.max(0,w)+"px"; + node.style.height=Math.max(0,h)+"px"; + if (arguments.length>3){ + node.style.left=x+"px"; + node.style.top=y+"px"; + } +}; +scheduler.get_elements=function(){ + //get all child elements as named hash + var els=this._obj.getElementsByTagName("DIV"); + for (var i=0; i < els.length; i++){ + var class_name=els[i].className || ""; + var attr_value = els[i].getAttribute("name") || ""; + if (class_name) class_name = class_name.split(" ")[0]; + if (!this._els[class_name]) this._els[class_name]=[]; + this._els[class_name].push(els[i]); + + //check if name need to be changed + var label = scheduler.locale.labels[attr_value||class_name]; + if (typeof label !== "string" && attr_value && !els[i].innerHTML) + label = attr_value.split("_")[0]; + if (label) + els[i].innerHTML= label; + } +}; + +scheduler.unset_actions = function(){ + for (var a in this._els) + if (this._click[a]) + for (var i=0; i < this._els[a].length; i++) + this._els[a][i].onclick = null; + this._obj.onselectstart = null; + this._obj.onmousemove = null; + this._obj.onmousedown = null; + this._obj.onmouseup = null; + this._obj.ondblclick = null; + this._obj.oncontextmenu = null; +}; + +scheduler.set_actions=function(){ + for (var a in this._els) + if (this._click[a]) + for (var i=0; i < this._els[a].length; i++) + this._els[a][i].onclick=scheduler._click[a]; + this._obj.onselectstart=function(e){ return false; }; + this._obj.onmousemove=function(e){ + if (!scheduler._temp_touch_block) + scheduler._on_mouse_move(e||event); + }; + this._obj.onmousedown=function(e){ + if (!scheduler._ignore_next_click) + scheduler._on_mouse_down(e||event); + }; + this._obj.onmouseup=function(e){ + if (!scheduler._ignore_next_click) + scheduler._on_mouse_up(e||event); + }; + this._obj.ondblclick=function(e){ + scheduler._on_dbl_click(e||event); + }; + this._obj.oncontextmenu = function(e) { + var ev = e||event; + var src = ev.target||ev.srcElement; + var returnValue = scheduler.callEvent("onContextMenu", [scheduler._locate_event(src), ev]); + return returnValue; + }; +}; +scheduler.select=function(id){ + if (this._select_id==id) return; + this.editStop(false); + this.unselect(); + this._select_id = id; + this.updateEvent(id); +}; +scheduler.unselect=function(id){ + if (id && id!=this._select_id) return; + var t=this._select_id; + this._select_id = null; + if (t && this.getEvent(t)) this.updateEvent(t); +}; +scheduler.getState=function(){ + return { + mode: this._mode, + date: new Date(this._date), + min_date: new Date(this._min_date), + max_date: new Date(this._max_date), + editor_id: this._edit_id, + lightbox_id: this._lightbox_id, + new_event: this._new_event, + select_id: this._select_id, + expanded: this.expanded, + drag_id: this._drag_id, + drag_mode: this._drag_mode + }; +}; +scheduler._click={ + dhx_cal_data:function(e){ + //in case of touch disable click processing + if (scheduler._ignore_next_click){ + if (e.preventDefault) + e.preventDefault(); + e.cancelBubble = true; + scheduler._ignore_next_click = false; + return false; + } + + var trg = e?e.target:event.srcElement; + var id = scheduler._locate_event(trg); + + e = e || event; + + if (!id) { + scheduler.callEvent("onEmptyClick",[scheduler.getActionData(e).date, e]); + } else { + if ( !scheduler.callEvent("onClick",[id,e]) || scheduler.config.readonly ) return; + } + + if (id && scheduler.config.select) { + + scheduler.select(id); + var mask = trg.className; + if (mask.indexOf("_icon")!=-1) + scheduler._click.buttons[mask.split(" ")[1].replace("icon_","")](id); + } else{ + scheduler._close_not_saved(); + scheduler.unselect(); + } + }, + dhx_cal_prev_button:function(){ + scheduler._click.dhx_cal_next_button(0,-1); + }, + dhx_cal_next_button:function(dummy,step){ + scheduler.setCurrentView(scheduler.date.add( //next line changes scheduler._date , but seems it has not side-effects + scheduler.date[scheduler._mode+"_start"](scheduler._date),(step||1),scheduler._mode)); + }, + dhx_cal_today_button:function(){ + if (scheduler.callEvent("onBeforeTodayDisplayed", [])) { + scheduler.setCurrentView(scheduler._currentDate()); + } + }, + dhx_cal_tab:function(){ + var name = this.getAttribute("name"); + var mode = name.substring(0, name.search("_tab")); + scheduler.setCurrentView(scheduler._date,mode); + }, + buttons:{ + "delete":function(id){ + var c = scheduler.locale.labels.confirm_deleting; + scheduler._dhtmlx_confirm(c, scheduler.locale.labels.title_confirm_deleting, function(){ scheduler.deleteEvent(id); }); + }, + edit:function(id){ scheduler.edit(id); }, + save:function(id){ scheduler.editStop(true); }, + details:function(id){ scheduler.showLightbox(id); }, + cancel:function(id){ scheduler.editStop(false); } + } +}; +scheduler._dhtmlx_confirm = function(message, title, callback) { + if (!message) + return callback(); + var opts = { text: message }; + if (title) + opts.title = title; + if (callback) { + opts.callback = function(result) { + if (result) + callback(); + }; + } + dhtmlx.confirm(opts); +}; +scheduler.addEventNow=function(start,end,e){ + var base = {}; + if (start && start.constructor.toString().match(/object/i) !== null){ + base = start; + start = null; + } + + var d = (this.config.event_duration||this.config.time_step)*60000; + if (!start) start = base.start_date||Math.round((scheduler._currentDate()).valueOf()/d)*d; + var start_date = new Date(start); + if (!end){ + var start_hour = this.config.first_hour; + if (start_hour > start_date.getHours()){ + start_date.setHours(start_hour); + start = start_date.valueOf(); + } + end = start.valueOf()+d; + } + var end_date = new Date(end); + + // scheduler.addEventNow(new Date(), new Date()) + collision though get_visible events defect (such event was not retrieved) + if(start_date.valueOf() == end_date.valueOf()) + end_date.setTime(end_date.valueOf()+d); + + base.start_date = base.start_date||start_date; + base.end_date = base.end_date||end_date; + base.text = base.text||this.locale.labels.new_event; + base.id = this._drag_id = this.uid(); + this._drag_mode="new-size"; + + this._loading=true; + this.addEvent(base); + this.callEvent("onEventCreated",[this._drag_id,e]); + this._loading=false; + + this._drag_event={}; //dummy , to trigger correct event updating logic + this._on_mouse_up(e); +}; +scheduler._on_dbl_click=function(e,src){ + src = src||(e.target||e.srcElement); + if (this.config.readonly) return; + var name = (src.className||"").split(" ")[0]; + switch(name){ + case "dhx_scale_holder": + case "dhx_scale_holder_now": + case "dhx_month_body": + case "dhx_wa_day_data": + if (!scheduler.config.dblclick_create) break; + this.addEventNow(this.getActionData(e).date,null,e); + break; + case "dhx_cal_event": + case "dhx_wa_ev_body": + case "dhx_agenda_line": + case "dhx_grid_event": + case "dhx_cal_event_line": + case "dhx_cal_event_clear": + var id = this._locate_event(src); + if (!this.callEvent("onDblClick",[id,e])) return; + if (this.config.details_on_dblclick || this._table_view || !this.getEvent(id)._timed || !this.config.select) + this.showLightbox(id); + else + this.edit(id); + break; + case "dhx_time_block": + case "dhx_cal_container": + return; + default: + var t = this["dblclick_"+name]; + if (t) { + t.call(this,e); + } + else { + if (src.parentNode && src != this) + return scheduler._on_dbl_click(e,src.parentNode); + } + break; + } +}; +//column index by mouse x-coordinate +scheduler._get_column_index = function(x_pos){ + var column = 0; + if (this._cols){ + + var width = 0; + for(var i=0; i < this._cols.length && !width; i++){ + width = this._cols[i]; + } + + if(width){ + column = x_pos / width; + }else{ + column = 0; + } + + if (this._ignores) + for (var i=0; i<=column; i++) + if (this._ignores[i]) + column++; + } + return column; +}; +//transform mouse coordinates to day-time indexes of week based view +scheduler._week_indexes_from_pos = function(pos){ + //"get position" can be invoked before columns are loaded into the units view(e.g. by onMouseMove handler in key_nav.js) + if(!this._cols){ + return pos; + }else{ + var column = this._get_column_index(pos.x); + pos.x=Math.min(this._cols.length-1, Math.max(0,Math.ceil(column)-1)); + + pos.y=Math.max(0,Math.ceil(pos.y*60/(this.config.time_step*this.config.hour_size_px))-1)+this.config.first_hour*(60/this.config.time_step); + return pos; + } +}; + +scheduler._mouse_coords=function(ev){ + var pos; + var b=document.body; + var d = document.documentElement; + if (!_isIE && (ev.pageX || ev.pageY)) + pos={x:ev.pageX, y:ev.pageY}; + else pos={ + x:ev.clientX + (b.scrollLeft||d.scrollLeft||0) - b.clientLeft, + y:ev.clientY + (b.scrollTop||d.scrollTop||0) - b.clientTop + }; + + //apply layout + pos.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width); + pos.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+(this._dy_shift||0)+this.xy.scale_height-this._els["dhx_cal_data"][0].scrollTop; + pos.ev = ev; + + var handler = this["mouse_"+this._mode]; + if (handler) + return handler.call(this,pos); + + + //transform to date + if (!this._table_view) { + pos = this._week_indexes_from_pos(pos); + } else { + var column = this._get_column_index(pos.x); + if (!this._cols || !this._colsS) // agenda/map views + return pos; + var dy=0; + for (dy=1; dy < this._colsS.heights.length; dy++) + if (this._colsS.heights[dy]>pos.y) break; + + pos.y=Math.ceil( (Math.max(0, column)+Math.max(0,dy-1)*7)*24*60/this.config.time_step ); + + if (scheduler._drag_mode || this._mode == "month") + pos.y=(Math.max(0,Math.ceil(column)-1)+Math.max(0,dy-1)*7)*24*60/this.config.time_step; + + //we care about ignored days only during event moving in month view + if (this._drag_mode == "move"){ + if (scheduler._ignores_detected && scheduler.config.preserve_length){ + pos._ignores = true; + //get real lengtn of event + if (!this._drag_event._event_length) + this._drag_event._event_length = this._get_real_event_length(this._drag_event.start_date, this._drag_event.end_date, { x_step:1, x_unit:"day"}); + } + } + + pos.x=0; + } + return pos; +}; +scheduler._close_not_saved=function(){ + if (new Date().valueOf()-(scheduler._new_event||0) > 500 && scheduler._edit_id){ + var c=scheduler.locale.labels.confirm_closing; + + scheduler._dhtmlx_confirm(c, scheduler.locale.labels.title_confirm_closing, function() { scheduler.editStop(scheduler.config.positive_closing); }); + } +}; +scheduler._correct_shift=function(start, back){ + return start-=((new Date(scheduler._min_date)).getTimezoneOffset()-(new Date(start)).getTimezoneOffset())*60000*(back?-1:1); +}; +scheduler._on_mouse_move=function(e){ + if (this._drag_mode){ + var pos=this._mouse_coords(e); + if (!this._drag_pos || pos.force_redraw || this._drag_pos.x!=pos.x || this._drag_pos.y!=pos.y ){ + var start, end; + if (this._edit_id!=this._drag_id) + this._close_not_saved(); + + this._drag_pos=pos; + + if (this._drag_mode=="create"){ + this._close_not_saved(); + this.unselect(this._select_id); + this._loading=true; //will be ignored by dataprocessor + + start = this._get_date_from_pos(pos).valueOf(); + + if (!this._drag_start) { + var res = this.callEvent("onBeforeEventCreated", [e, this._drag_id]); + if (!res) + return; + + + this._drag_start=start; + return; + } + + end = start; + if (end == this._drag_start) { + } + + var start_date = new Date(this._drag_start); + var end_date = new Date(end); + if ( (this._mode == "day" || this._mode == "week") && + (start_date.getHours() == end_date.getHours() && + start_date.getMinutes() == end_date.getMinutes()) ) { + end_date = new Date(this._drag_start+1000); + } + + + this._drag_id=this.uid(); + this.addEvent(start_date, end_date, this.locale.labels.new_event, this._drag_id, pos.fields); + + this.callEvent("onEventCreated",[this._drag_id,e]); + this._loading=false; + this._drag_mode="new-size"; + + } + + var ev=this.getEvent(this._drag_id); + var obj; + + if (this._drag_mode=="move"){ + start = this._min_date.valueOf()+(pos.y*this.config.time_step+pos.x*24*60 -(scheduler._move_pos_shift||0) )*60000; + if (!pos.custom && this._table_view) start+=this.date.time_part(ev.start_date)*1000; + start = this._correct_shift(start); + + if (pos._ignores && this.config.preserve_length && this._table_view){ + if (this.matrix) + obj = this.matrix[this._mode]; + obj = obj || { x_step:1, x_unit:"day" }; + end = start*1 + this._get_fictional_event_length(start, this._drag_event._event_length, obj); + } else + end = ev.end_date.valueOf()-(ev.start_date.valueOf()-start); + } else { // resize + start = ev.start_date.valueOf(); + end = ev.end_date.valueOf(); + if (this._table_view) { + var resize_date = this._min_date.valueOf()+pos.y*this.config.time_step*60000 + (pos.custom?0:24*60*60000); + if (this._mode == "month") { + resize_date = this._correct_shift(resize_date, false); + if( this._drag_from_start ) { + var day = 24*60*60000; + if( resize_date <= scheduler.date.date_part(new Date(end+day-1)).valueOf() ) // to get end time as 23:59:59 and then the day start + start = resize_date - day; + } else { + end = resize_date; + } + } else { + if (pos.resize_from_start) + start = resize_date; + else + end = resize_date; + } + } else { + end = this.date.date_part(new Date(ev.end_date.valueOf() - 1)).valueOf()+pos.y*this.config.time_step*60000; + this._els["dhx_cal_data"][0].style.cursor="s-resize"; + if (this._mode == "week" || this._mode == "day") + end = this._correct_shift(end); + } + if (this._drag_mode == "new-size") { + if (end <= this._drag_start){ + var shift = pos.shift||((this._table_view && !pos.custom)?24*60*60000:0); + start = end-(pos.shift?0:shift); + end = this._drag_start+(shift||(this.config.time_step*60000)); + } else { + start = this._drag_start; + } + } else { + if (end<=start) + end=start+this.config.time_step*60000; + } + } + var new_end = new Date(end-1); + var new_start = new Date(start); + //deny drag out of visible scheduler scale in timeline view + if(scheduler.config.limit_drag_out && + (+new_start < +scheduler._min_date || +end > +scheduler._max_date)){ + var duration = end - new_start; + if(+new_start < +scheduler._min_date){ + new_start = new Date(scheduler._min_date); + end = new Date(+new_start + duration); + }else{ + end = new Date(scheduler._max_date); + new_start = new Date(+end - duration); + } + var new_end = new Date(end-1); + } + + + + // fix event dates when resized to bottom of the column (day/week views) + if(!this._table_view && + (pos.x != this._get_event_sday({start_date: new Date(end), end_date:new Date(end)}) || new Date(end).getHours() >= this.config.last_hour)){ + var duration = end - new_start; + var day = this._min_date.valueOf()+(pos.x*24*60)*60000; + end = scheduler.date.date_part(new Date(day)); + end.setHours(this.config.last_hour); + new_end = new Date(end-1); + if(this._drag_mode == "move"){ + new_start = new Date(+end - duration); + } + } + + //prevent out-of-borders situation for day|week view + if ( this._table_view || (new_end.getDate()==new_start.getDate() && new_end.getHours()<this.config.last_hour) || scheduler._allow_dnd ){ + ev.start_date=new_start; + ev.end_date=new Date(end); + if (this.config.update_render){ + //fix for repaint after dnd and scroll issue, #231 + var sx = scheduler._els["dhx_cal_data"][0].scrollTop; + this.update_view(); + scheduler._els["dhx_cal_data"][0].scrollTop = sx; + } else + this.updateEvent(this._drag_id); + } + if (this._table_view) { + this.for_rendered(this._drag_id,function(r){ + r.className+=" dhx_in_move"; + }); + } + + this.callEvent("onEventDrag", [this._drag_id, this._drag_mode, e]); + } + } else { + if (scheduler.checkEvent("onMouseMove")){ + var id = this._locate_event(e.target||e.srcElement); + this.callEvent("onMouseMove",[id,e]); + } + } +}; +scheduler._on_mouse_down=function(e,src) { + // on Mac we do not get onmouseup event when clicking right mouse button leaving us in dnd state + // let's ignore right mouse button then + if (e.button == 2) + return; + + if (this.config.readonly || this._drag_mode) return; + src = src||(e.target||e.srcElement); + var classname = src.className && src.className.split(" ")[0]; + + switch (classname) { + case "dhx_cal_event_line": + case "dhx_cal_event_clear": + if (this._table_view) + this._drag_mode="move"; //item in table mode + break; + case "dhx_event_move": + case "dhx_wa_ev_body": + this._drag_mode="move"; + break; + case "dhx_event_resize": + this._drag_mode="resize"; + if((src.className||"").indexOf("dhx_event_resize_end") < 0){ + scheduler._drag_from_start = true; + }else{ + scheduler._drag_from_start = false; + } + break; + case "dhx_scale_holder": + case "dhx_scale_holder_now": + case "dhx_month_body": + case "dhx_matrix_cell": + case "dhx_marked_timespan": + this._drag_mode="create"; + break; + case "": + if (src.parentNode) + return scheduler._on_mouse_down(e,src.parentNode); + break; + default: + if (!scheduler.checkEvent("onMouseDown") || scheduler.callEvent("onMouseDown", [classname])) { + if (src.parentNode && src != this && classname != "dhx_body") { + return scheduler._on_mouse_down(e,src.parentNode); + } + } + this._drag_mode=null; + this._drag_id=null; + break; + } + if (this._drag_mode){ + var id = this._locate_event(src); + if (!this.config["drag_"+this._drag_mode] || !this.callEvent("onBeforeDrag",[id, this._drag_mode, e])) + this._drag_mode=this._drag_id=0; + else { + this._drag_id= id; + this._drag_event = scheduler._lame_clone(this.getEvent(this._drag_id) || {}); + } + } + this._drag_start=null; +}; + + +scheduler._get_private_properties = function(event){ + var fields = {}; + for(var i in event){ + if(i.indexOf("_") === 0){ + fields[i] = true; + } + } + return fields; +}; +scheduler._clear_temporary_properties = function(clean, flagged_event){ + var initial = this._get_private_properties(clean); + var current_state = this._get_private_properties(flagged_event); + for(var i in current_state){ + if(!initial[i]){ + delete flagged_event[i]; + } + } +}; + + +scheduler._on_mouse_up=function(e){ + if (e && e.button == 2 && scheduler.config.touch) return; + if (this._drag_mode && this._drag_id){ + this._els["dhx_cal_data"][0].style.cursor="default"; + //drop + var ev=this.getEvent(this._drag_id); + if (this._drag_event._dhx_changed || !this._drag_event.start_date || ev.start_date.valueOf()!=this._drag_event.start_date.valueOf() || ev.end_date.valueOf()!=this._drag_event.end_date.valueOf()){ + var is_new=(this._drag_mode=="new-size"); + if (!this.callEvent("onBeforeEventChanged",[ev, e, is_new, this._drag_event])){ + if (is_new) + this.deleteEvent(ev.id, true); + else { + this._drag_event._dhx_changed = false; + this._clear_temporary_properties(ev, this._drag_event); + scheduler._lame_copy(ev, this._drag_event); + this.updateEvent(ev.id); + } + } else { + var drag_id = this._drag_id; + var mode = this._drag_mode; + this._drag_id = this._drag_mode = null; + if (is_new && this.config.edit_on_create){ + this.unselect(); + this._new_event=new Date();//timestamp of creation + //if selection disabled - force lightbox usage + if (this._table_view || this.config.details_on_create || !this.config.select) { + scheduler.callEvent("onDragEnd", [drag_id, mode, e]); + return this.showLightbox(drag_id); + } + this._drag_pos = true; //set flag to trigger full redraw + this._select_id = this._edit_id = drag_id; + } else { + if (!this._new_event) + this.callEvent(is_new?"onEventAdded":"onEventChanged",[drag_id,this.getEvent(drag_id)]); + } + } + } + if (this._drag_pos) this.render_view_data(); //redraw even if there is no real changes - necessary for correct positioning item after drag + scheduler.callEvent("onDragEnd", [this._drag_id, this._drag_mode, e]); + } + this._drag_id = null; + this._drag_mode=null; + this._drag_pos=null; +}; + +scheduler._trigger_dyn_loading = function(){ + if (this._load_mode && this._load()){ + this._render_wait = true; + return true; + }else{ + return false; + } +}; +scheduler.update_view=function(){ + var view = this[this._mode + "_view"]; + if(view){ + view(true); + }else{ + this._reset_scale(); + } + + if (this._trigger_dyn_loading()){ + return true; + } + this.render_view_data(); +}; + +scheduler.isViewExists = function(mode){ + return !!(scheduler[mode+ "_view"] || + (scheduler.date[mode+ "_start"] && scheduler.templates[mode+ "_date"] && scheduler.templates[mode+ "_scale_date"])); +}; + +scheduler.updateView = function(date, mode) { + date = date || this._date; + mode = mode || this._mode; + var dhx_cal_data = 'dhx_cal_data'; + + if (!this._mode) + this._obj.className += " dhx_scheduler_" + mode; else { + this._obj.className = this._obj.className.replace("dhx_scheduler_" + this._mode, "dhx_scheduler_" + mode); + } + + var prev_scroll = (this._mode == mode && this.config.preserve_scroll) ? this._els[dhx_cal_data][0].scrollTop : false; // saving current scroll + + //hide old custom view + if (this[this._mode + "_view"] && mode && this._mode != mode) + this[this._mode + "_view"](false); + + this._close_not_saved(); + + var dhx_multi_day = 'dhx_multi_day'; + if (this._els[dhx_multi_day]) { + this._els[dhx_multi_day][0].parentNode.removeChild(this._els[dhx_multi_day][0]); + this._els[dhx_multi_day] = null; + } + + this._mode = mode; + this._date = date; + this._table_view = (this._mode == "month"); + + this._dy_shift = 0;//correction for multiday section in week/day views + + var tabs = this._els["dhx_cal_tab"]; + if(tabs){//calendar can work without view tabs + for (var i = 0; i < tabs.length; i++) { + var name = tabs[i].className; + name = name.replace(/ active/g, ""); + if (tabs[i].getAttribute("name") == this._mode + "_tab") + name = name + " active"; + tabs[i].className = name; + } + } + //show new view + this.update_view(); + + if (typeof prev_scroll == "number") // if we are updating or working with the same view scrollTop should be saved + this._els[dhx_cal_data][0].scrollTop = prev_scroll; // restoring original scroll +}; +scheduler.setCurrentView = function(date, mode) { + if (!this.callEvent("onBeforeViewChange", [this._mode, this._date, mode || this._mode, date || this._date])) return; + this.updateView(date, mode); + this.callEvent("onViewChange", [this._mode, this._date]); +}; +scheduler._render_x_header = function(i,left,d,h){ + //header scale + var head=document.createElement("DIV"); + head.className = "dhx_scale_bar"; + + if(this.templates[this._mode+"_scalex_class"]){ + //'_scalex_class' - timeline already have similar template, use the same name + head.className += ' ' + this.templates[this._mode+"_scalex_class"](d); + } + + var width = this._cols[i]-1; + + if (this._mode == "month" && i === 0 && this.config.left_border) { + head.className += " dhx_scale_bar_border"; + left = left+1; + } + this.set_xy(head, width, this.xy.scale_height-2, left, 0);//-1 for border + head.innerHTML=this.templates[this._mode+"_scale_date"](d,this._mode); //TODO - move in separate method + h.appendChild(head); +}; + +scheduler._get_columns_num = function(from, to){ + var count = 7; + if (!scheduler._table_view){ + var count_n = scheduler.date["get_"+scheduler._mode+"_end"]; + if (count_n) to = count_n(from); + count = Math.round((to.valueOf()-from.valueOf())/(1000*60*60*24)); + } + return count; +}; +scheduler._get_timeunit_start = function(){ + //start date of currently displayed time unit(day, week,...) + return this.date[this._mode+"_start"](new Date(this._date.valueOf())); +}; + +scheduler._get_view_end = function(){ + var dd = this._get_timeunit_start(); + var ed = scheduler.date.add(dd, 1, this._mode); + if (!scheduler._table_view){ + var count_n = scheduler.date["get_"+scheduler._mode+"_end"]; + if (count_n) ed = count_n(dd); + } + return ed; +}; +scheduler._calc_scale_sizes = function(width, from, to){ + //calculates number of displayed columns(days/units/month view cols) and their widths + var summ = width; //border delta + var count = this._get_columns_num(from, to); + + this._process_ignores(from, count, "day", 1); + var realcount = count - this._ignores_detected; + + for (var i=0; i<count; i++){ + if (this._ignores[i]){ + this._cols[i] = 0; + realcount++; + } else { + this._cols[i]=Math.floor(summ/(realcount-i)); + } + summ-=this._cols[i]; + this._colsS[i]=(this._cols[i-1]||0)+(this._colsS[i-1]||(this._table_view?0:this.xy.scale_width+2)); + this._colsS['col_length'] = count; + } + + this._colsS[count]=this._cols[count-1]+this._colsS[count-1]; +}; +scheduler._set_scale_col_size = function(div, width, left){ + var c = this.config; + this.set_xy(div, width-1, c.hour_size_px*(c.last_hour-c.first_hour), left+this.xy.scale_width+1, 0);//-1 for border +}; + +scheduler._render_scales = function(header, data_area){ + //render columns in week/units view, or header in month view + var sd = new Date(scheduler._min_date), + ed = new Date(scheduler._max_date), + today = this.date.date_part( scheduler._currentDate()); + + var summ = parseInt(header.style.width,10); //border delta + var d = new Date(this._min_date); + var count = this._get_columns_num(sd, ed); + this._calc_scale_sizes(summ, sd, ed); + var left=0; + + header.innerHTML = ""; + for (var i=0; i<count; i++){ + if (!this._ignores[i]){ + this._render_x_header(i,left,d,header); + } + if (!this._table_view){ + var scales=document.createElement("DIV"); + var cls = "dhx_scale_holder"; + if (d.valueOf() == today.valueOf()) cls = "dhx_scale_holder_now"; + + if (this._ignores_detected && this._ignores[i]){ + cls += " dhx_scale_ignore"; + } + + scales.className = cls+" "+this.templates.week_date_class(d,today); + + this._set_scale_col_size(scales, this._cols[i], left); + + data_area.appendChild(scales); + this.callEvent("onScaleAdd",[scales, d]); + } + + left+=this._cols[i]; + d=this.date.add(d,1,"day"); + } +}; + +scheduler._reset_scale=function(){ + //current mode doesn't support scales + //we mustn't call reset_scale for such modes, so it just to be sure + if (!this.templates[this._mode + "_date"]) return; + + var h = this._els["dhx_cal_header"][0]; + var data_area = this._els["dhx_cal_data"][0]; + var c = this.config; + + h.innerHTML = ""; + //data_area.scrollTop = 0; //fix flickering in FF; makes IE8 flicker instead + data_area.innerHTML = ""; + + var str = ((c.readonly || (!c.drag_resize)) ? " dhx_resize_denied" : "") + ((c.readonly || (!c.drag_move)) ? " dhx_move_denied" : ""); + if (str) data_area.className = "dhx_cal_data" + str; + + this._scales = {}; + this._cols = []; //store for data section + this._colsS = {height: 0}; + this._dy_shift = 0; + + this.set_sizes(); + + var d,sd,today; + var dd = this._get_timeunit_start(), + ed = scheduler._get_view_end(); + + d = sd = this._table_view ? scheduler.date.week_start(dd) : dd; + + + this._min_date=d; + this._els["dhx_cal_date"][0].innerHTML=this.templates[this._mode+"_date"](dd,ed,this._mode); + + this._max_date = ed; + scheduler._render_scales(h, data_area); + + if (this._table_view) // month view + this._reset_month_scale(data_area,dd,sd); + else{ + this._reset_hours_scale(data_area,dd,sd); + if (c.multi_day) { + var dhx_multi_day = 'dhx_multi_day'; + + if(this._els[dhx_multi_day]) { + this._els[dhx_multi_day][0].parentNode.removeChild(this._els[dhx_multi_day][0]); + this._els[dhx_multi_day] = null; + } + + var navline = this._els["dhx_cal_navline"][0]; + var top = navline.offsetHeight + this._els["dhx_cal_header"][0].offsetHeight+1; + + var c1 = document.createElement("DIV"); + c1.className = dhx_multi_day; + c1.style.visibility="hidden"; + this.set_xy(c1, this._colsS[this._colsS.col_length]+this.xy.scroll_width, 0, 0, top); // 2 extra borders, dhx_header has -1 bottom margin + data_area.parentNode.insertBefore(c1,data_area); + + var c2 = c1.cloneNode(true); + c2.className = dhx_multi_day+"_icon"; + c2.style.visibility="hidden"; + this.set_xy(c2, this.xy.scale_width, 0, 0, top); // dhx_header has -1 bottom margin + + c1.appendChild(c2); + this._els[dhx_multi_day]=[c1,c2]; + this._els[dhx_multi_day][0].onclick = this._click.dhx_cal_data; + } + } +}; +scheduler._reset_hours_scale=function(b,dd,sd){ + var c=document.createElement("DIV"); + c.className="dhx_scale_holder"; + + var date = new Date(1980,1,1,this.config.first_hour,0,0); + for (var i=this.config.first_hour*1; i < this.config.last_hour; i++) { + var cc=document.createElement("DIV"); + cc.className="dhx_scale_hour"; + cc.style.height=this.config.hour_size_px-(this._quirks?0:1)+"px"; + var width = this.xy.scale_width; + if (this.config.left_border) { + width = width - 1; + cc.className += " dhx_scale_hour_border"; + } + cc.style.width = width + "px"; + cc.innerHTML=scheduler.templates.hour_scale(date); + + c.appendChild(cc); + date=this.date.add(date,1,"hour"); + } + b.appendChild(c); + if (this.config.scroll_hour) + b.scrollTop = this.config.hour_size_px*(this.config.scroll_hour-this.config.first_hour); +}; + +scheduler._currentDate = function(){ + if(scheduler.config.now_date){ + return new Date(scheduler.config.now_date); + } + return new Date(); +}; + +scheduler._process_ignores = function(sd, n, mode, step, preserve){ + this._ignores={}; + this._ignores_detected = 0; + var ignore = scheduler["ignore_"+this._mode]; + + if (ignore){ + var ign_date = new Date(sd); + for (var i=0; i<n; i++){ + if (ignore(ign_date)){ + this._ignores_detected += 1; + this._ignores[i] = true; + if (preserve) + n++; + } + ign_date = scheduler.date.add(ign_date, step, mode); + } + } +}; + +scheduler._render_month_scale = function(div, dd/*month start*/, sd/*view start*/ ){ + //renders month view layout + + var ed=scheduler.date.add(dd,1,"month"), + view_start = new Date(sd); + var cd = scheduler._currentDate(); + this.date.date_part(cd); + this.date.date_part(sd); + + var rows=Math.ceil(Math.round((ed.valueOf()-sd.valueOf()) / (60*60*24*1000) ) / 7); + var tdcss=[]; + + for (var i=0; i<=7; i++) { + var cell_width = ((this._cols[i]||0)-1); + if (i === 0 && this.config.left_border) { + cell_width = cell_width - 1; + } + tdcss[i]=" style='width:"+cell_width+"px;"; + } + + function getCellHeight(row){ + var h = scheduler._colsS.height; + if(scheduler._colsS.heights[row + 1] !== undefined ){ + h = scheduler._colsS.heights[row + 1] - (scheduler._colsS.heights[row]||0); + } + return h; + } + + + var cellheight = 0; + + var html="<table cellpadding='0' cellspacing='0'>"; + var rendered_dates = []; + for (var i=0; i<rows; i++){ + html+="<tr>"; + var row_height = Math.max(getCellHeight(i) - scheduler.xy.month_head_height, 0); + for (var j=0; j<7; j++) { + html+="<td"; + + var cls = ""; + if (sd<dd) + cls='dhx_before'; + else if (sd>=ed) + cls='dhx_after'; + else if (sd.valueOf()==cd.valueOf()) + cls='dhx_now'; + + if (this._ignores_detected && this._ignores[j]){ + cls += " dhx_scale_ignore"; + } + + html+=" class='"+cls+" "+this.templates.month_date_class(sd,cd)+"' >"; + var body_class = "dhx_month_body"; + var head_class = "dhx_month_head"; + if (j === 0 && this.config.left_border) { + body_class += " dhx_month_body_border"; + head_class += " dhx_month_head_border"; + } + if (!this._ignores_detected || !this._ignores[j]){ + html+="<div class='"+head_class+"'>"+this.templates.month_day(sd)+"</div>"; + html+="<div class='"+body_class+"' "+tdcss[j] + ";height:"+row_height + "px;'></div></td>"; + } else { + html+="<div></div><div></div>"; + } + rendered_dates.push(sd); + var bf1 = sd.getDate(); + sd=this.date.add(sd,1,"day"); + if (sd.getDate() - bf1 > 1) + sd = new Date(sd.getFullYear(), sd.getMonth(), bf1 + 1, 12, 0); + } + html+="</tr>"; + + scheduler._colsS.heights[i] = cellheight; + cellheight += getCellHeight(i); + } + html+="</table>"; + + this._min_date = view_start; + this._max_date = sd; + + div.innerHTML=html; + + this._scales = {}; + var divs = div.getElementsByTagName('div'); + for (var i=0; i<rendered_dates.length; i++) { // [header, body, header, body, ...] + var div = divs[(i*2)+1]; + var date = rendered_dates[i]; + this._scales[+date] = div; + } + for (var i=0; i<rendered_dates.length; i++) { + var date = rendered_dates[i]; + this.callEvent("onScaleAdd", [this._scales[+date], date]); + } + + + + return this._max_date; +}; + +scheduler._reset_month_scale=function(b,dd,sd){ + //recalculates rows height and redraws month layout + var ed=scheduler.date.add(dd,1,"month"); + + //trim time part for comparation reasons + var cd = scheduler._currentDate(); + this.date.date_part(cd); + this.date.date_part(sd); + + var rows=Math.ceil(Math.round((ed.valueOf()-sd.valueOf()) / (60*60*24*1000) ) / 7); + + var height = (Math.floor(b.clientHeight/rows) - this.xy.month_head_height); + + this._colsS.height = height + this.xy.month_head_height; + this._colsS.heights = []; + + return scheduler._render_month_scale(b, dd, sd); + +}; +scheduler.getLabel = function(property, key) { + var sections = this.config.lightbox.sections; + for (var i=0; i<sections.length; i++) { + if(sections[i].map_to == property) { + var options = sections[i].options; + for (var j=0; j<options.length; j++) { + if(options[j].key == key) { + return options[j].label; + } + } + } + } + return ""; +}; +scheduler.updateCollection = function(list_name, collection) { + var list = scheduler.serverList(list_name); + if (!list) return false; + list.splice(0, list.length); + list.push.apply(list, collection || []); + scheduler.callEvent("onOptionsLoad", []); + scheduler.resetLightbox(); + return true; +}; +scheduler._lame_clone = function(object, cache) { + var i, t, result; // iterator, types array, result + + cache = cache || []; + + for (i=0; i<cache.length; i+=2) + if(object === cache[i]) + return cache[i+1]; + + if (object && typeof object == "object") { + result = {}; + t = [Array,Date,Number,String,Boolean]; + for (i=0; i<t.length; i++) { + if (object instanceof t[i]) + result = i ? new t[i](object) : new t[i](); // first one is array + } + cache.push(object, result); + for (i in object) { + if (Object.prototype.hasOwnProperty.apply(object, [i])) + result[i] = scheduler._lame_clone(object[i], cache); + } + } + return result || object; +}; +scheduler._lame_copy = function(target, source) { + for (var key in source) { + if (source.hasOwnProperty(key)) { + target[key] = source[key]; + } + } + return target; +}; +scheduler._get_date_from_pos = function(pos) { + var start=this._min_date.valueOf()+(pos.y*this.config.time_step+(this._table_view?0:pos.x)*24*60)*60000; + return new Date(this._correct_shift(start)); +}; +// n_ev - native event +scheduler.getActionData = function(n_ev) { + var pos = this._mouse_coords(n_ev); + return { + date:this._get_date_from_pos(pos), + section:pos.section + }; +}; +scheduler._focus = function(node, select){ + if (node && node.focus){ + if (this.config.touch){ + window.setTimeout(function(){ + node.focus(); + },100); + } else { + if (select && node.select) node.select(); + node.focus(); + } + } +}; + +//non-linear scales +scheduler._get_real_event_length=function(sd, fd, obj){ + var ev_length = fd -sd; + var hours = (obj._start_correction + obj._end_correction)||0; + var ignore = this["ignore_"+this._mode]; + + var start_slot = 0, + end_slot; + if (obj.render){ + start_slot = this._get_date_index(obj, sd); + end_slot = this._get_date_index(obj, fd); + } else{ + end_slot = Math.round(ev_length/60/60/1000/24); + } + + while (start_slot < end_slot){ + var check = scheduler.date.add(fd, -obj.x_step, obj.x_unit); + if (ignore && ignore(fd)) + ev_length -= (fd-check); + else + ev_length -= hours; + + fd = check; + end_slot--; + } + return ev_length; +}; +scheduler._get_fictional_event_length=function(end_date, ev_length, obj, back){ + var sd = new Date(end_date); + var dir = back ? -1 : 1; + + //get difference caused by first|last hour + if (obj._start_correction || obj._end_correction){ + var today; + if (back) + today = (sd.getHours()*60+sd.getMinutes()) - (obj.first_hour||0)*60; + else + today = (obj.last_hour||0)*60 - (sd.getHours()*60+sd.getMinutes()); + var per_day = (obj.last_hour - obj.first_hour)*60; + var days = Math.ceil( (ev_length / (60*1000) - today ) / per_day); + ev_length += days * (24*60 - per_day) * 60 * 1000; + } + + var fd = new Date(end_date*1+ev_length*dir); + var ignore = this["ignore_"+this._mode]; + + var start_slot = 0, + end_slot; + if (obj.render){ + start_slot = this._get_date_index(obj, sd); + end_slot = this._get_date_index(obj, fd); + } else{ + end_slot = Math.round(ev_length/60/60/1000/24); + } + + while (start_slot*dir <= end_slot*dir){ + var check = scheduler.date.add(sd, obj.x_step*dir, obj.x_unit); + if (ignore && ignore(sd)){ + ev_length += (check-sd)*dir; + end_slot += dir; + } + + sd = check; + start_slot+=dir; + } + + return ev_length; +}; + +scheduler._get_section_view = function(){ + if(this.matrix && this.matrix[this._mode]){ + return this.matrix[this._mode]; + }else if(this._props && this._props[this._mode]){ + return this._props[this._mode]; + } + return null; +}; + +scheduler._get_section_property = function(){ + if(this.matrix && this.matrix[this._mode]){ + return this.matrix[this._mode].y_property; + }else if(this._props && this._props[this._mode]){ + return this._props[this._mode].map_to; + } + return null; +}; + +scheduler._is_initialized = function(){ + var state = this.getState(); + return (this._obj && state.date && state.mode); +}; +scheduler._is_lightbox_open = function(){ + var state = this.getState(); + return state.lightbox_id !== null && state.lightbox_id !== undefined; +}; +scheduler.date={ + init:function(){ + var s = scheduler.locale.date.month_short; + var t = scheduler.locale.date.month_short_hash = {}; + for (var i = 0; i < s.length; i++) + t[s[i]]=i; + + var s = scheduler.locale.date.month_full; + var t = scheduler.locale.date.month_full_hash = {}; + for (var i = 0; i < s.length; i++) + t[s[i]]=i; + }, + date_part:function(date){ + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + date.setMilliseconds(0); + if (date.getHours() !== 0) + date.setTime(date.getTime() + 60 * 60 * 1000 * (24 - date.getHours())); + return date; + }, + time_part:function(date){ + return (date.valueOf()/1000 - date.getTimezoneOffset()*60)%86400; + }, + week_start:function(date){ + var shift=date.getDay(); + if (scheduler.config.start_on_monday){ + if (shift===0) shift=6; + else shift--; + } + return this.date_part(this.add(date,-1*shift,"day")); + }, + month_start:function(date){ + date.setDate(1); + return this.date_part(date); + }, + year_start:function(date){ + date.setMonth(0); + return this.month_start(date); + }, + day_start:function(date){ + return this.date_part(date); + }, + _add_days:function(date, inc){ + var ndate = new Date(date.valueOf()); + + ndate.setDate(ndate.getDate() + inc); + if (!date.getHours() && ndate.getHours()) //shift to yesterday + ndate.setTime(ndate.getTime() + 60 * 60 * 1000 * (24 - ndate.getHours())); + return ndate; + }, + add:function(date,inc,mode){ + var ndate=new Date(date.valueOf()); + switch(mode){ + case "day": + ndate = scheduler.date._add_days(ndate, inc); + break; + case "week": + ndate = scheduler.date._add_days(ndate, inc * 7); + break; + case "month": ndate.setMonth(ndate.getMonth()+inc); break; + case "year": ndate.setYear(ndate.getFullYear()+inc); break; + case "hour": ndate.setHours(ndate.getHours()+inc); break; + case "minute": ndate.setMinutes(ndate.getMinutes()+inc); break; + default: + return scheduler.date["add_"+mode](date,inc,mode); + } + return ndate; + }, + to_fixed:function(num){ + if (num<10) return "0"+num; + return num; + }, + copy:function(date){ + return new Date(date.valueOf()); + }, + date_to_str:function(format,utc){ + format=format.replace(/%[a-zA-Z]/g,function(a){ + switch(a){ + case "%d": return "\"+scheduler.date.to_fixed(date.getDate())+\""; + case "%m": return "\"+scheduler.date.to_fixed((date.getMonth()+1))+\""; + case "%j": return "\"+date.getDate()+\""; + case "%n": return "\"+(date.getMonth()+1)+\""; + case "%y": return "\"+scheduler.date.to_fixed(date.getFullYear()%100)+\""; + case "%Y": return "\"+date.getFullYear()+\""; + case "%D": return "\"+scheduler.locale.date.day_short[date.getDay()]+\""; + case "%l": return "\"+scheduler.locale.date.day_full[date.getDay()]+\""; + case "%M": return "\"+scheduler.locale.date.month_short[date.getMonth()]+\""; + case "%F": return "\"+scheduler.locale.date.month_full[date.getMonth()]+\""; + case "%h": return "\"+scheduler.date.to_fixed((date.getHours()+11)%12+1)+\""; + case "%g": return "\"+((date.getHours()+11)%12+1)+\""; + case "%G": return "\"+date.getHours()+\""; + case "%H": return "\"+scheduler.date.to_fixed(date.getHours())+\""; + case "%i": return "\"+scheduler.date.to_fixed(date.getMinutes())+\""; + case "%a": return "\"+(date.getHours()>11?\"pm\":\"am\")+\""; + case "%A": return "\"+(date.getHours()>11?\"PM\":\"AM\")+\""; + case "%s": return "\"+scheduler.date.to_fixed(date.getSeconds())+\""; + case "%W": return "\"+scheduler.date.to_fixed(scheduler.date.getISOWeek(date))+\""; + default: return a; + } + }); + if (utc) format=format.replace(/date\.get/g,"date.getUTC"); + return new Function("date","return \""+format+"\";"); + }, + str_to_date:function(format,utc){ + var splt="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);"; + var mask=format.match(/%[a-zA-Z]/g); + for (var i=0; i<mask.length; i++){ + switch(mask[i]){ + case "%j": + case "%d": splt+="set[2]=temp["+i+"]||1;"; + break; + case "%n": + case "%m": splt+="set[1]=(temp["+i+"]||1)-1;"; + break; + case "%y": splt+="set[0]=temp["+i+"]*1+(temp["+i+"]>50?1900:2000);"; + break; + case "%g": + case "%G": + case "%h": + case "%H": + splt+="set[3]=temp["+i+"]||0;"; + break; + case "%i": + splt+="set[4]=temp["+i+"]||0;"; + break; + case "%Y": splt+="set[0]=temp["+i+"]||0;"; + break; + case "%a": + case "%A": splt+="set[3]=set[3]%12+((temp["+i+"]||'').toLowerCase()=='am'?0:12);"; + break; + case "%s": splt+="set[5]=temp["+i+"]||0;"; + break; + case "%M": splt+="set[1]=scheduler.locale.date.month_short_hash[temp["+i+"]]||0;"; + break; + case "%F": splt+="set[1]=scheduler.locale.date.month_full_hash[temp["+i+"]]||0;"; + break; + default: + break; + } + } + var code ="set[0],set[1],set[2],set[3],set[4],set[5]"; + if (utc) code =" Date.UTC("+code+")"; + return new Function("date","var set=[0,0,1,0,0,0]; "+splt+" return new Date("+code+");"); + }, + getISOWeek: function(ndate) { + if(!ndate) return false; + var nday = ndate.getDay(); + if (nday === 0) { + nday = 7; + } + var first_thursday = new Date(ndate.valueOf()); + first_thursday.setDate(ndate.getDate() + (4 - nday)); + var year_number = first_thursday.getFullYear(); // year of the first Thursday + var ordinal_date = Math.round( (first_thursday.getTime() - new Date(year_number, 0, 1).getTime()) / 86400000); //ordinal date of the first Thursday - 1 (so not really ordinal date) + var week_number = 1 + Math.floor( ordinal_date / 7); + return week_number; + }, + getUTCISOWeek: function(ndate){ + return this.getISOWeek(this.convert_to_utc(ndate)); + }, + convert_to_utc: function(date) { + return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()); + } +}; +scheduler.locale = { + date:{ + month_full:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + month_short:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + day_full:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + day_short:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] + }, + labels:{ + dhx_cal_today_button:"Today", + day_tab:"Day", + week_tab:"Week", + month_tab:"Month", + new_event:"New event", + icon_save:"Save", + icon_cancel:"Cancel", + icon_details:"Details", + icon_edit:"Edit", + icon_delete:"Delete", + confirm_closing:"",//Your changes will be lost, are your sure ? + confirm_deleting:"Event will be deleted permanently, are you sure?", + section_description:"Description", + section_time:"Time period", + full_day:"Full day", + + /*recurring events*/ + confirm_recurring:"Do you want to edit the whole set of repeated events?", + section_recurring:"Repeat event", + button_recurring:"Disabled", + button_recurring_open:"Enabled", + button_edit_series: "Edit series", + button_edit_occurrence: "Edit occurrence", + + /*agenda view extension*/ + agenda_tab:"Agenda", + date:"Date", + description:"Description", + + /*year view extension*/ + year_tab:"Year", + + /* week agenda extension */ + week_agenda_tab: "Agenda", + + /*grid view extension*/ + grid_tab: "Grid", + + /* touch tooltip*/ + drag_to_create:"Drag to create", + drag_to_move:"Drag to move", + + /* dhtmlx message default buttons */ + message_ok:"OK", + message_cancel:"Cancel" + } +}; + + +/* +%e Day of the month without leading zeros (01..31) +%d Day of the month, 2 digits with leading zeros (01..31) +%j Day of the year, 3 digits with leading zeros (001..366) +%a A textual representation of a day, two letters +%W A full textual representation of the day of the week + +%c Numeric representation of a month, without leading zeros (0..12) +%m Numeric representation of a month, with leading zeros (00..12) +%b A short textual representation of a month, three letters (Jan..Dec) +%M A full textual representation of a month, such as January or March (January..December) + +%y A two digit representation of a year (93..03) +%Y A full numeric representation of a year, 4 digits (1993..03) +*/ + +scheduler.config={ + default_date: "%j %M %Y", + month_date: "%F %Y", + load_date: "%Y-%m-%d", + week_date: "%l", + day_date: "%D, %F %j", + hour_date: "%H:%i", + month_day: "%d", + xml_date: "%m/%d/%Y %H:%i", + api_date: "%d-%m-%Y %H:%i", + preserve_length:true, + time_step: 5, + + start_on_monday: 1, + first_hour: 0, + last_hour: 24, + readonly: false, + drag_resize: 1, + drag_move: 1, + drag_create: 1, + dblclick_create: 1, + edit_on_create: 1, + details_on_create: 0, + resize_month_events:false, + resize_month_timed:false, + + cascade_event_display: false, + cascade_event_count: 4, + cascade_event_margin: 30, + + multi_day:true, + multi_day_height_limit: 0, + + drag_lightbox: true, + preserve_scroll: true, + select: true, + + server_utc: false, + touch:true, + touch_tip:true, + touch_drag:500, + quick_info_detached:true, + + positive_closing: false, + + drag_highlight: true, + limit_drag_out: false, + icons_edit: ["icon_save", "icon_cancel"], + icons_select: ["icon_details", "icon_edit", "icon_delete"], + buttons_left: ["dhx_save_btn", "dhx_cancel_btn"], + buttons_right: ["dhx_delete_btn"], + lightbox: { + sections: [ + {name: "description", height: 200, map_to: "text", type: "textarea", focus: true}, + {name: "time", height: 72, type: "time", map_to: "auto"} + ] + }, + highlight_displayed_event: true, + left_border: false +}; +scheduler.templates={}; +scheduler.init_templates=function(){ + var labels = scheduler.locale.labels; + labels.dhx_save_btn = labels.icon_save; + labels.dhx_cancel_btn = labels.icon_cancel; + labels.dhx_delete_btn = labels.icon_delete; + + + var d=scheduler.date.date_to_str; + var c=scheduler.config; + var f = function(a,b){ + for (var c in b) + if (!a[c]) a[c]=b[c]; + }; + f(scheduler.templates,{ + day_date:d(c.default_date), + month_date:d(c.month_date), + week_date:function(d1,d2){ + return scheduler.templates.day_date(d1)+" – "+scheduler.templates.day_date(scheduler.date.add(d2,-1,"day")); + }, + day_scale_date:d(c.default_date), + month_scale_date:d(c.week_date), + week_scale_date:d(c.day_date), + hour_scale:d(c.hour_date), + time_picker:d(c.hour_date), + event_date:d(c.hour_date), + month_day:d(c.month_day), + xml_date:scheduler.date.str_to_date(c.xml_date,c.server_utc), + load_format:d(c.load_date,c.server_utc), + xml_format:d(c.xml_date,c.server_utc), + api_date:scheduler.date.str_to_date(c.api_date), + event_header:function(start,end,ev){ + return scheduler.templates.event_date(start)+" - "+scheduler.templates.event_date(end); + }, + event_text:function(start,end,ev){ + return ev.text; + }, + event_class:function(start,end,ev){ + return ""; + }, + month_date_class:function(d){ + return ""; + }, + week_date_class:function(d){ + return ""; + }, + event_bar_date:function(start,end,ev){ + return scheduler.templates.event_date(start)+" "; + }, + event_bar_text:function(start,end,ev){ + return ev.text; + }, + month_events_link : function(date, count){ + return "<a>View more("+count+" events)</a>"; + }, + drag_marker_class : function(start, end, event){ + return ""; + }, + drag_marker_content : function(start, end, event){ + return ""; + } + }); + this.callEvent("onTemplatesReady",[]); +}; + + + +scheduler.uid = function() { + if (!this._seed) this._seed = (new Date()).valueOf(); + return this._seed++; +}; +scheduler._events = {}; +scheduler.clearAll = function() { + this._events = {}; + this._loaded = {}; + this.clear_view(); + this.callEvent("onClearAll", []); +}; +scheduler.addEvent = function(start_date, end_date, text, id, extra_data) { + if (!arguments.length) + return this.addEventNow(); + var ev = start_date; + if (arguments.length != 1) { + ev = extra_data || {}; + ev.start_date = start_date; + ev.end_date = end_date; + ev.text = text; + ev.id = id; + } + ev.id = ev.id || scheduler.uid(); + ev.text = ev.text || ""; + + if (typeof ev.start_date == "string") ev.start_date = this.templates.api_date(ev.start_date); + if (typeof ev.end_date == "string") ev.end_date = this.templates.api_date(ev.end_date); + + var d = (this.config.event_duration || this.config.time_step) * 60000; + if (ev.start_date.valueOf() == ev.end_date.valueOf()) + ev.end_date.setTime(ev.end_date.valueOf() + d); + + ev._timed = this.isOneDayEvent(ev); + + var is_new = !this._events[ev.id]; + this._events[ev.id] = ev; + this.event_updated(ev); + if (!this._loading) + this.callEvent(is_new ? "onEventAdded" : "onEventChanged", [ev.id, ev]); + return ev.id; +}; +scheduler.deleteEvent = function(id, silent) { + var ev = this._events[id]; + if (!silent && (!this.callEvent("onBeforeEventDelete", [id, ev]) || !this.callEvent("onConfirmedBeforeEventDelete", [id, ev]))) + return; + if (ev) { + this._select_id = null; + delete this._events[id]; + this.event_updated(ev); + } + + this.callEvent("onEventDeleted", [id, ev]); +}; +scheduler.getEvent = function(id) { + return this._events[id]; +}; +scheduler.setEvent = function(id, hash) { + if(!hash.id) + hash.id = id; + + this._events[id] = hash; +}; +scheduler.for_rendered = function(id, method) { + for (var i = this._rendered.length - 1; i >= 0; i--) + if (this._rendered[i].getAttribute("event_id") == id) + method(this._rendered[i], i); +}; +scheduler.changeEventId = function(id, new_id) { + if (id == new_id) return; + var ev = this._events[id]; + if (ev) { + ev.id = new_id; + this._events[new_id] = ev; + delete this._events[id]; + } + this.for_rendered(id, function(r) { + r.setAttribute("event_id", new_id); + }); + if (this._select_id == id) this._select_id = new_id; + if (this._edit_id == id) this._edit_id = new_id; + //if (this._drag_id==id) this._drag_id=new_id; + this.callEvent("onEventIdChange", [id, new_id]); +}; + +(function() { + var attrs = ["text", "Text", "start_date", "StartDate", "end_date", "EndDate"]; + var create_getter = function(name) { + return function(id) { return (scheduler.getEvent(id))[name]; }; + }; + var create_setter = function(name) { + return function(id, value) { + var ev = scheduler.getEvent(id); + ev[name] = value; + ev._changed = true; + ev._timed = this.isOneDayEvent(ev); + scheduler.event_updated(ev, true); + }; + }; + for (var i = 0; i < attrs.length; i += 2) { + scheduler["getEvent" + attrs[i + 1]] = create_getter(attrs[i]); + scheduler["setEvent" + attrs[i + 1]] = create_setter(attrs[i]); + } +})(); + +scheduler.event_updated = function(ev, force) { + if (this.is_visible_events(ev)) + this.render_view_data(); + else + this.clear_event(ev.id); +}; +scheduler.is_visible_events = function(ev) { + //if in displayed dates + var in_visible_range = (ev.start_date < this._max_date && this._min_date < ev.end_date); + + if(in_visible_range){ + //end dates are not between last/first hours + var end_dates_visible = (ev.end_date.getHours() >= this.config.first_hour && ev.end_date.getHours() < this.config.last_hour) || + (ev.start_date.getHours() >= this.config.first_hour && ev.start_date.getHours() < this.config.last_hour); + + if(end_dates_visible){ + return true; + }else{ + + //event is bigger than area hidden between last/first hours + var event_duration = (ev.end_date.valueOf() - ev.start_date.valueOf()) / (1000*60*60),//hours + hidden_duration = 24 - (this.config.last_hour - this.config.first_hour); + + return (event_duration > hidden_duration); + + } + }else{ + return false; + } +}; +scheduler.isOneDayEvent = function(ev) { + var delta = ev.end_date.getDate() - ev.start_date.getDate(); + + if (!delta) + return ev.start_date.getMonth() == ev.end_date.getMonth() && ev.start_date.getFullYear() == ev.end_date.getFullYear(); + else { + if (delta < 0) delta = Math.ceil((ev.end_date.valueOf() - ev.start_date.valueOf()) / (24 * 60 * 60 * 1000)); + return (delta == 1 && !ev.end_date.getHours() && !ev.end_date.getMinutes() && (ev.start_date.getHours() || ev.start_date.getMinutes() )); + } + +}; +scheduler.get_visible_events = function(only_timed) { + //not the best strategy for sure + var stack = []; + + for (var id in this._events) + if (this.is_visible_events(this._events[id])) + if (!only_timed || this._events[id]._timed) + if (this.filter_event(id, this._events[id])) + stack.push(this._events[id]); + + return stack; +}; +scheduler.filter_event = function(id, ev) { + var filter = this["filter_" + this._mode]; + return (filter) ? filter(id, ev) : true; +}; +scheduler._is_main_area_event = function(ev){ + return !!ev._timed; +}; +scheduler.render_view_data = function(evs, hold) { + if (!evs) { + if (this._not_render) { + this._render_wait = true; + return; + } + this._render_wait = false; + + this.clear_view(); + evs = this.get_visible_events(!(this._table_view || this.config.multi_day)); + } + for(var i= 0, len = evs.length; i < len; i++){ + this._recalculate_timed(evs[i]); + } + + if (this.config.multi_day && !this._table_view) { + + var tvs = []; + var tvd = []; + for (var i = 0; i < evs.length; i++) { + if (this._is_main_area_event(evs[i])) + tvs.push(evs[i]); + else + tvd.push(evs[i]); + } + + // multiday events + this._rendered_location = this._els['dhx_multi_day'][0]; + this._table_view = true; + this.render_data(tvd, hold); + this._table_view = false; + + // normal events + this._rendered_location = this._els['dhx_cal_data'][0]; + this._table_view = false; + this.render_data(tvs, hold); + + } else { + this._rendered_location = this._els['dhx_cal_data'][0]; + this.render_data(evs, hold); + } +}; + + +scheduler._view_month_day = function(e){ + var date = scheduler.getActionData(e).date; + if(!scheduler.callEvent("onViewMoreClick", [date])) + return; + scheduler.setCurrentView(date, "day"); +}; + +scheduler._render_month_link = function(ev){ + var parent = this._rendered_location; + var toRender = this._lame_clone(ev); + + //render links in each cell of multiday events + for(var d = ev._sday; d < ev._eday; d++){ + + toRender._sday = d; + toRender._eday = d+1; + + var date = scheduler.date; + var curr = scheduler._min_date; + curr = date.add(curr, toRender._sweek, "week"); + curr = date.add(curr, toRender._sday, "day"); + var count = scheduler.getEvents(curr, date.add(curr, 1, "day")).length; + + var pos = this._get_event_bar_pos(toRender); + var widt = (pos.x2 - pos.x); + + var el = document.createElement("div"); + el.onclick = function(e){scheduler._view_month_day(e||event);}; + el.className = "dhx_month_link"; + el.style.top = pos.y + "px"; + el.style.left = pos.x + "px"; + el.style.width = widt + "px"; + el.innerHTML = scheduler.templates.month_events_link(curr, count); + this._rendered.push(el); + + parent.appendChild(el); + } +}; + +scheduler._recalculate_timed = function(id){ + if(!id) return; + var ev; + if(typeof(id) != "object") + ev = this._events[id]; + else + ev = id; + if(!ev) return; + ev._timed = scheduler.isOneDayEvent(ev); +}; +scheduler.attachEvent("onEventChanged", scheduler._recalculate_timed); +scheduler.attachEvent("onEventAdded", scheduler._recalculate_timed); + +scheduler.render_data = function(evs, hold) { + evs = this._pre_render_events(evs, hold); + + for (var i = 0; i < evs.length; i++) + if (this._table_view){ + if(scheduler._mode != 'month'){ + this.render_event_bar(evs[i]);//may be multiday section on other views + }else{ + + var max_evs = scheduler.config.max_month_events; + if(max_evs !== max_evs*1 || evs[i]._sorder < max_evs){ + //of max number events per month cell is set and event can be rendered + this.render_event_bar(evs[i]); + }else if(max_evs !== undefined && evs[i]._sorder == max_evs){ + //render 'view more' links + scheduler._render_month_link(evs[i]); + }else{ + //do not render events with ordinal number > maximum events per cell + } + } + + + + }else + this.render_event(evs[i]); +}; +scheduler._pre_render_events = function(evs, hold) { + var hb = this.xy.bar_height; + var h_old = this._colsS.heights; + var h = this._colsS.heights = [0, 0, 0, 0, 0, 0, 0]; + var data = this._els["dhx_cal_data"][0]; + + if (!this._table_view) + evs = this._pre_render_events_line(evs, hold); //ignore long events for now + else + evs = this._pre_render_events_table(evs, hold); + + if (this._table_view) { + if (hold) + this._colsS.heights = h_old; + else { + var evl = data.firstChild; + if (evl.rows) { + for (var i = 0; i < evl.rows.length; i++) { + h[i]++; + var cellHeight = this._colsS.height - this.xy.month_head_height; + if ((h[i]) * hb > cellHeight) { // 22 - height of cell's header + //we have overflow, update heights + var cells = evl.rows[i].cells; + var cHeight = cellHeight; + if(this.config.max_month_events*1 !== this.config.max_month_events || h[i] <= this.config.max_month_events){ + cHeight = h[i] * hb; + }else if( (this.config.max_month_events + 1) * hb > cellHeight){ + cHeight = (this.config.max_month_events + 1) * hb; + } + + for (var j = 0; j < cells.length; j++) { + cells[j].childNodes[1].style.height = cHeight + "px"; + } + h[i] = (h[i - 1] || 0) + cells[0].offsetHeight; + } + h[i] = (h[i - 1] || 0) + evl.rows[i].cells[0].offsetHeight; + } + h.unshift(0); + if (evl.parentNode.offsetHeight < evl.parentNode.scrollHeight && !scheduler._colsS.scroll_fix && scheduler.xy.scroll_width) { + + var scale_settings = scheduler._colsS, + sum_width = scale_settings[scale_settings.col_length], + row_heights = scale_settings.heights.slice(); + + sum_width -= (scheduler.xy.scroll_width || 0); + this._calc_scale_sizes(sum_width, this._min_date, this._max_date); + scheduler._colsS.heights = row_heights; + + this.set_xy(this._els["dhx_cal_header"][0], sum_width, this.xy.scale_height); + scheduler._render_scales(this._els["dhx_cal_header"][0]); + scheduler._render_month_scale(this._els["dhx_cal_data"][0], this._get_timeunit_start(), this._min_date); + + scale_settings.scroll_fix = true; + } + } else { + if (!evs.length && this._els["dhx_multi_day"][0].style.visibility == "visible") + h[0] = -1; + if (evs.length || h[0] == -1) { + //shift days to have space for multiday events + var childs = evl.parentNode.childNodes; + + // +1 so multiday events would have 2px from top and 2px from bottom by default + var full_multi_day_height = (h[0] + 1) * hb + 1; + + var used_multi_day_height = full_multi_day_height; + var used_multi_day_height_css = full_multi_day_height + "px"; + if (this.config.multi_day_height_limit) { + used_multi_day_height = Math.min(full_multi_day_height, this.config.multi_day_height_limit) ; + used_multi_day_height_css = used_multi_day_height + "px"; + } + + data.style.top = (this._els["dhx_cal_navline"][0].offsetHeight + this._els["dhx_cal_header"][0].offsetHeight + used_multi_day_height ) + 'px'; + data.style.height = (this._obj.offsetHeight - parseInt(data.style.top, 10) - (this.xy.margin_top || 0)) + 'px'; + + var multi_day_section = this._els["dhx_multi_day"][0]; + multi_day_section.style.height = used_multi_day_height_css; + multi_day_section.style.visibility = (h[0] == -1 ? "hidden" : "visible"); + + // icon + var multi_day_icon = this._els["dhx_multi_day"][1]; + multi_day_icon.style.height = used_multi_day_height_css; + multi_day_icon.style.visibility = (h[0] == -1 ? "hidden" : "visible"); + multi_day_icon.className = h[0] ? "dhx_multi_day_icon" : "dhx_multi_day_icon_small"; + this._dy_shift = (h[0] + 1) * hb; + h[0] = 0; + + if (used_multi_day_height != full_multi_day_height) { + data.style.top = (parseInt(data.style.top) + 2) + "px"; + + multi_day_section.style.overflowY = "auto"; + multi_day_section.style.width = (parseInt(multi_day_section.style.width) - 2) + "px"; + + multi_day_icon.style.position = "fixed"; + multi_day_icon.style.top = ""; + multi_day_icon.style.left = ""; + } + } + } + } + } + + return evs; +}; +scheduler._get_event_sday = function(ev) { + return Math.floor((ev.start_date.valueOf() - this._min_date.valueOf()) / (24 * 60 * 60 * 1000)); +}; +scheduler._get_event_mapped_end_date = function(ev) { + var end_date = ev.end_date; + if (this.config.separate_short_events) { + var ev_duration = (ev.end_date - ev.start_date) / 60000; // minutes + if (ev_duration < this._min_mapped_duration) { + end_date = this.date.add(end_date, this._min_mapped_duration - ev_duration, "minute"); + } + } + return end_date; +}; +scheduler._pre_render_events_line = function(evs, hold){ + evs.sort(function(a, b) { + if (a.start_date.valueOf() == b.start_date.valueOf()) + return a.id > b.id ? 1 : -1; + return a.start_date > b.start_date ? 1 : -1; + }); + var days = []; //events by weeks + var evs_originals = []; + + this._min_mapped_duration = Math.ceil(this.xy.min_event_height * 60 / this.config.hour_size_px); // values could change along the way + + for (var i = 0; i < evs.length; i++) { + var ev = evs[i]; + + //check date overflow + var sd = ev.start_date; + var ed = ev.end_date; + //check scale overflow + var sh = sd.getHours(); + var eh = ed.getHours(); + + ev._sday = this._get_event_sday(ev); // sday based on event start_date + if (this._ignores[ev._sday]){ + //ignore event + evs.splice(i,1); + i--; + continue; + } + + if (!days[ev._sday]) days[ev._sday] = []; + + if (!hold) { + ev._inner = false; + + var stack = days[ev._sday]; + + while (stack.length) { + var t_ev = stack[stack.length - 1]; + var t_end_date = this._get_event_mapped_end_date(t_ev); + if (t_end_date.valueOf() <= ev.start_date.valueOf()) { + stack.splice(stack.length - 1, 1); + } else { + break; + } + } + var slot_index = stack.length; + var sorderSet = false; + for (var j = 0; j < stack.length; j++) { + var t_ev = stack[j]; + var t_end_date = this._get_event_mapped_end_date(t_ev); + if (t_end_date.valueOf() <= ev.start_date.valueOf()) { + sorderSet = true; + ev._sorder = t_ev._sorder; + slot_index = j; + ev._inner = true; + break; + } + } + + if (stack.length) + stack[stack.length - 1]._inner = true; + + if (!sorderSet) { + if (stack.length) { + if (stack.length <= stack[stack.length - 1]._sorder) { + if (!stack[stack.length - 1]._sorder) + ev._sorder = 0; + else + for (j = 0; j < stack.length; j++) { + var _is_sorder = false; + for (var k = 0; k < stack.length; k++) { + if (stack[k]._sorder == j) { + _is_sorder = true; + break; + } + } + if (!_is_sorder) { + ev._sorder = j; + break; + } + } + ev._inner = true; + } else { + var _max_sorder = stack[0]._sorder; + for (j = 1; j < stack.length; j++) { + if (stack[j]._sorder > _max_sorder) + _max_sorder = stack[j]._sorder; + } + ev._sorder = _max_sorder + 1; + ev._inner = false; + } + + } else + ev._sorder = 0; + } + + stack.splice(slot_index, slot_index == stack.length ? 0 : 1, ev); + + if (stack.length > (stack.max_count || 0)) { + stack.max_count = stack.length; + ev._count = stack.length; + } else { + ev._count = (ev._count) ? ev._count : 1; + } + } + + if (sh < this.config.first_hour || eh >= this.config.last_hour) { + // Need to create copy of event as we will be changing it's start/end date + // e.g. first_hour = 11 and event.start_date hours = 9. Need to preserve that info + evs_originals.push(ev); + evs[i] = ev = this._copy_event(ev); + + if (sh < this.config.first_hour) { + ev.start_date.setHours(this.config.first_hour); + ev.start_date.setMinutes(0); + } + if (eh >= this.config.last_hour) { + ev.end_date.setMinutes(0); + ev.end_date.setHours(this.config.last_hour); + } + + if (ev.start_date > ev.end_date || sh == this.config.last_hour) { + evs.splice(i, 1); + i--; + continue; + } + } + } + if (!hold) { + for (var i = 0; i < evs.length; i++) { + evs[i]._count = days[evs[i]._sday].max_count; + } + for (var i = 0; i < evs_originals.length; i++) + evs_originals[i]._count = days[evs_originals[i]._sday].max_count; + } + + return evs; +}; +scheduler._time_order = function(evs) { + evs.sort(function(a, b) { + if (a.start_date.valueOf() == b.start_date.valueOf()) { + if (a._timed && !b._timed) return 1; + if (!a._timed && b._timed) return -1; + return a.id > b.id ? 1 : -1; + } + return a.start_date > b.start_date ? 1 : -1; + }); +}; +scheduler._pre_render_events_table = function(evs, hold) { // max - max height of week slot + this._time_order(evs); + var out = []; + var weeks = [ + [], + [], + [], + [], + [], + [], + [] + ]; //events by weeks + var max = this._colsS.heights; + var start_date; + var cols = this._cols.length; + var chunks_info = {}; + + for (var i = 0; i < evs.length; i++) { + var ev = evs[i]; + var id = ev.id; + if (!chunks_info[id]) { + chunks_info[id] = { + first_chunk: true, + last_chunk: true + }; + } + var chunk_info = chunks_info[id]; + var sd = (start_date || ev.start_date); + var ed = ev.end_date; + //trim events which are crossing through current view + if (sd < this._min_date) { + chunk_info.first_chunk = false; + sd = this._min_date; + } + if (ed > this._max_date) { + chunk_info.last_chunk = false; + ed = this._max_date; + } + + var locate_s = this.locate_holder_day(sd, false, ev); + ev._sday = locate_s % cols; + + //skip single day events for ignored dates + if (this._ignores[ev._sday] && ev._timed) continue; + + var locate_e = this.locate_holder_day(ed, true, ev) || cols; + ev._eday = (locate_e % cols) || cols; //cols used to fill full week, when event end on monday + ev._length = locate_e - locate_s; + + //3600000 - compensate 1 hour during winter|summer time shift + ev._sweek = Math.floor((this._correct_shift(sd.valueOf(), 1) - this._min_date.valueOf()) / (60 * 60 * 1000 * 24 * cols)); + + //current slot + var stack = weeks[ev._sweek]; + //check order position + var stack_line; + + for (stack_line = 0; stack_line < stack.length; stack_line++) + if (stack[stack_line]._eday <= ev._sday) + break; + + if (!ev._sorder || !hold) { + ev._sorder = stack_line; + } + + if (ev._sday + ev._length <= cols) { + start_date = null; + out.push(ev); + stack[stack_line] = ev; + //get max height of slot + max[ev._sweek] = stack.length - 1; + ev._first_chunk = chunk_info.first_chunk; + ev._last_chunk = chunk_info.last_chunk; + } else { // split long event in chunks + var copy = this._copy_event(ev); + copy.id = ev.id; + copy._length = cols - ev._sday; + copy._eday = cols; + copy._sday = ev._sday; + copy._sweek = ev._sweek; + copy._sorder = ev._sorder; + copy.end_date = this.date.add(sd, copy._length, "day"); + copy._first_chunk = chunk_info.first_chunk; + if (chunk_info.first_chunk) { + chunk_info.first_chunk = false; + } + + out.push(copy); + stack[stack_line] = copy; + start_date = copy.end_date; + //get max height of slot + max[ev._sweek] = stack.length - 1; + i--; + continue; //repeat same step + } + } + return out; +}; +scheduler._copy_dummy = function() { + var a = new Date(this.start_date); + var b = new Date(this.end_date); + this.start_date = a; + this.end_date = b; +}; +scheduler._copy_event = function(ev) { + this._copy_dummy.prototype = ev; + return new this._copy_dummy(); + //return {start_date:ev.start_date, end_date:ev.end_date, text:ev.text, id:ev.id} +}; +scheduler._rendered = []; +scheduler.clear_view = function() { + for (var i = 0; i < this._rendered.length; i++) { + var obj = this._rendered[i]; + if (obj.parentNode) obj.parentNode.removeChild(obj); + } + this._rendered = []; +}; +scheduler.updateEvent = function(id) { + var ev = this.getEvent(id); + this.clear_event(id); + + if (ev && this.is_visible_events(ev) && this.filter_event(id, ev) && (this._table_view || this.config.multi_day || ev._timed)) { + if (this.config.update_render) + this.render_view_data(); + else + this.render_view_data([ev], true); + } +}; +scheduler.clear_event = function(id) { + this.for_rendered(id, function(node, i) { + if (node.parentNode) + node.parentNode.removeChild(node); + scheduler._rendered.splice(i, 1); + }); +}; +scheduler._y_from_date = function(date){ + var sm = date.getHours() * 60 + date.getMinutes(); + return ((Math.round((sm * 60 * 1000 - this.config.first_hour * 60 * 60 * 1000) * this.config.hour_size_px / (60 * 60 * 1000))) % (this.config.hour_size_px * 24)); //42px/hour +}; +scheduler._calc_event_y = function(ev, min_height){ + min_height = min_height || 0; + var sm = ev.start_date.getHours() * 60 + ev.start_date.getMinutes(); + var em = (ev.end_date.getHours() * 60 + ev.end_date.getMinutes()) || (scheduler.config.last_hour * 60); + var top = this._y_from_date(ev.start_date); + + var height = Math.max(min_height, (em - sm) * this.config.hour_size_px / 60); //42px/hour + return { + top: top, + height: height + }; +}; +scheduler.render_event = function(ev) { + var menu = scheduler.xy.menu_width; + var menu_offset = (this.config.use_select_menu_space) ? 0 : menu; + if (ev._sday < 0) return; //can occur in case of recurring event during time shift + + var parent = scheduler.locate_holder(ev._sday); + if (!parent) return; //attempt to render non-visible event + + var pos_y = this._calc_event_y(ev, scheduler.xy.min_event_height); + var top = pos_y.top, + height = pos_y.height; + + var ev_count = ev._count || 1; + var ev_sorder = ev._sorder || 0; + + var width = Math.floor((parent.clientWidth - menu_offset) / ev_count); + var left = ev_sorder * width + 1; + if (!ev._inner) width = width * (ev_count - ev_sorder); + if (this.config.cascade_event_display) { + var limit = this.config.cascade_event_count; + var margin = this.config.cascade_event_margin; + left = ev_sorder % limit * margin; + var right = (ev._inner) ? (ev_count - ev_sorder - 1) % limit * margin / 2 : 0; + width = Math.floor(parent.clientWidth - menu_offset - left - right); + } + + var d = this._render_v_bar(ev, menu_offset + left, top, width, height, ev._text_style, scheduler.templates.event_header(ev.start_date, ev.end_date, ev), scheduler.templates.event_text(ev.start_date, ev.end_date, ev)); + + this._rendered.push(d); + parent.appendChild(d); + + left = left + parseInt(parent.style.left, 10) + menu_offset; + + if (this._edit_id == ev.id) { + + d.style.zIndex = 1; //fix overlapping issue + width = Math.max(width - 4, scheduler.xy.editor_width); + d = document.createElement("DIV"); + d.setAttribute("event_id", ev.id); + this.set_xy(d, width, height - 20, left, top + 14); + d.className = "dhx_cal_event dhx_cal_editor"; + + var tplClass = scheduler.templates.event_class(ev.start_date, ev.end_date, ev); + + if(tplClass){ + d.className += " " + tplClass; + } + var d2 = document.createElement("DIV"); + this.set_xy(d2, width - 6, height - 26); + d2.style.cssText += ";margin:2px 2px 2px 2px;overflow:hidden;"; + + d.appendChild(d2); + this._els["dhx_cal_data"][0].appendChild(d); + this._rendered.push(d); + + d2.innerHTML = "<textarea class='dhx_cal_editor'>" + ev.text + "</textarea>"; + if (this._quirks7) d2.firstChild.style.height = height - 12 + "px"; //IEFIX + this._editor = d2.firstChild; + this._editor.onkeydown = function(e) { + if ((e || event).shiftKey) return true; + var code = (e || event).keyCode; + if (code == scheduler.keys.edit_save) scheduler.editStop(true); + if (code == scheduler.keys.edit_cancel) scheduler.editStop(false); + }; + this._editor.onselectstart = function (e) { + (e || event).cancelBubble = true; + return true; + }; + scheduler._focus(d2.firstChild, true); + //IE and opera can add x-scroll during focusing + this._els["dhx_cal_data"][0].scrollLeft = 0; + } + if (this.xy.menu_width !== 0 && this._select_id == ev.id) { + if (this.config.cascade_event_display && this._drag_mode) + d.style.zIndex = 1; //fix overlapping issue for cascade view in case of dnd of selected event + var icons = this.config["icons_" + ((this._edit_id == ev.id) ? "edit" : "select")]; + var icons_str = ""; + var bg_color = (ev.color ? ("background-color: " + ev.color + ";") : ""); + var color = (ev.textColor ? ("color: " + ev.textColor + ";") : ""); + for (var i = 0; i < icons.length; i++) + icons_str += "<div class='dhx_menu_icon " + icons[i] + "' style='" + bg_color + "" + color + "' title='" + this.locale.labels[icons[i]] + "'></div>"; + var obj = this._render_v_bar(ev, left - menu + 1, top, menu, icons.length * 20 + 26 - 2, "", "<div style='" + bg_color + "" + color + "' class='dhx_menu_head'></div>", icons_str, true); + obj.style.left = left - menu + 1; + this._els["dhx_cal_data"][0].appendChild(obj); + this._rendered.push(obj); + } + if(this.config.drag_highlight && this._drag_id == ev.id){ + this.highlightEventPosition(ev); + } +}; +scheduler._render_v_bar = function (ev, x, y, w, h, style, contentA, contentB, bottom) { + var d = document.createElement("DIV"); + var id = ev.id; + var cs = (bottom) ? "dhx_cal_event dhx_cal_select_menu" : "dhx_cal_event"; + + var cse = scheduler.templates.event_class(ev.start_date, ev.end_date, ev); + if (cse) cs = cs + " " + cse; + + var bg_color = (ev.color ? ("background:" + ev.color + ";") : ""); + var color = (ev.textColor ? ("color:" + ev.textColor + ";") : ""); + + var html = '<div event_id="' + id + '" class="' + cs + '" style="position:absolute; top:' + y + 'px; left:' + x + 'px; width:' + (w - 4) + 'px; height:' + h + 'px;' + (style || "") + '"></div>'; + d.innerHTML = html; + + var container = d.cloneNode(true).firstChild; + + if (!bottom && scheduler.renderEvent(container, ev, w, h, contentA, contentB)) { + return container; + } else { + container = d.firstChild; + + var inner_html = '<div class="dhx_event_move dhx_header" style=" width:' + (w - 6) + 'px;' + bg_color + '" > </div>'; + inner_html += '<div class="dhx_event_move dhx_title" style="' + bg_color + '' + color + '">' + contentA + '</div>'; + inner_html += '<div class="dhx_body" style=" width:' + (w - (this._quirks ? 4 : 14)) + 'px; height:' + (h - (this._quirks ? 20 : 30) + 1) + 'px;' + bg_color + '' + color + '">' + contentB + '</div>'; // +2 css specific, moved from render_event + + var footer_class = "dhx_event_resize dhx_footer"; + if (bottom) + footer_class = "dhx_resize_denied " + footer_class; + + inner_html += '<div class="' + footer_class + '" style=" width:' + (w - 8) + 'px;' + (bottom ? ' margin-top:-1px;' : '') + '' + bg_color + '' + color + '" ></div>'; + + container.innerHTML = inner_html; + } + + return container; +}; +scheduler.renderEvent = function(){ + return false; +}; +scheduler.locate_holder = function(day) { + if (this._mode == "day") return this._els["dhx_cal_data"][0].firstChild; //dirty + return this._els["dhx_cal_data"][0].childNodes[day]; +}; +scheduler.locate_holder_day = function(date, past) { + var day = Math.floor((this._correct_shift(date, 1) - this._min_date) / (60 * 60 * 24 * 1000)); + //when locating end data of event , we need to use next day if time part was defined + if (past && this.date.time_part(date)) day++; + return day; +}; + + + +scheduler._get_dnd_order = function(order, ev_height, max_height){ + if(!this._drag_event) + return order; + if(!this._drag_event._orig_sorder) + this._drag_event._orig_sorder = order; + else + order = this._drag_event._orig_sorder; + + var evTop = ev_height * order; + while((evTop + ev_height) > max_height){ + order--; + evTop -= ev_height; + } + order = Math.max(order, 0); + return order; +}; +//scheduler._get_event_bar_pos = function(sday, eday, week, drag){ +scheduler._get_event_bar_pos = function(ev){ + var x = this._colsS[ev._sday]; + var x2 = this._colsS[ev._eday]; + if (x2 == x) x2 = this._colsS[ev._eday + 1]; + var hb = this.xy.bar_height; + + var order = ev._sorder; + if(ev.id == this._drag_id){ + var cellHeight = this._colsS.heights[ev._sweek + 1] - this._colsS.heights[ev._sweek]- this.xy.month_head_height;//22 for month head height + order = scheduler._get_dnd_order(order, hb, cellHeight); + } + var y_event_offset = order * hb; + var y = this._colsS.heights[ev._sweek] + (this._colsS.height ? (this.xy.month_scale_height + 2) : 2 ) + y_event_offset; + return {x:x, x2:x2, y:y}; +}; + +scheduler.render_event_bar = function (ev) { + var parent = this._rendered_location; + var pos = this._get_event_bar_pos(ev); + + var y = pos.y; + var x = pos.x; + var x2 = pos.x2; + + // resize for month mutliday events + var resize_handle = ""; + + //events in ignored dates + + if (!x2) return; + + var resizable = scheduler.config.resize_month_events && this._mode == "month" && + (!ev._timed || scheduler.config.resize_month_timed); + + var d = document.createElement("DIV"); + var left_chunk = (ev.hasOwnProperty("_first_chunk") && ev._first_chunk), + right_chunk = (ev.hasOwnProperty("_last_chunk") && ev._last_chunk); + + var resize_left = resizable && (ev._timed || left_chunk); + var resize_right = resizable && (ev._timed || right_chunk); + + var cs = "dhx_cal_event_clear"; + if (!ev._timed || resizable) { + cs = "dhx_cal_event_line"; + } + if(left_chunk){ + cs += " dhx_cal_event_line_start"; + } + if(right_chunk){ + cs += " dhx_cal_event_line_end"; + } + if(resize_left){ + resize_handle += "<div class='dhx_event_resize dhx_event_resize_start'></div>"; + } + if(resize_right){ + resize_handle += "<div class='dhx_event_resize dhx_event_resize_end'></div>"; + } + + var cse = scheduler.templates.event_class(ev.start_date, ev.end_date, ev); + if (cse){ + cs += " " + cse; + } + + var bg_color = (ev.color ? ("background:" + ev.color + ";") : ""); + var color = (ev.textColor ? ("color:" + ev.textColor + ";") : ""); + + var style_text = [ + "position:absolute", + "top:" + y + "px", + "left:" + x + "px", + "width:" + (x2 - x - 15) + "px", + color, + bg_color, + (ev._text_style || "") + ].join(";"); + + var html = '<div event_id="' + ev.id + '" class="' + cs + '" style="'+style_text+'">'; + if (resizable) { + html += resize_handle; + } + if(scheduler.getState().mode == "month"){ + ev = scheduler.getEvent(ev.id); // ev at this point could be a part (row in a month view) of a larger event + } + + if (ev._timed) + html += scheduler.templates.event_bar_date(ev.start_date, ev.end_date, ev); + html += scheduler.templates.event_bar_text(ev.start_date, ev.end_date, ev) + '</div>'; + html += '</div>'; + + d.innerHTML = html; + + this._rendered.push(d.firstChild); + parent.appendChild(d.firstChild); +}; + +scheduler._locate_event = function(node) { + var id = null; + while (node && !id && node.getAttribute) { + id = node.getAttribute("event_id"); + node = node.parentNode; + } + return id; +}; + +scheduler.edit = function(id) { + if (this._edit_id == id) return; + this.editStop(false, id); + this._edit_id = id; + this.updateEvent(id); +}; +scheduler.editStop = function(mode, id) { + if (id && this._edit_id == id) return; + var ev = this.getEvent(this._edit_id); + if (ev) { + if (mode) ev.text = this._editor.value; + this._edit_id = null; + this._editor = null; + this.updateEvent(ev.id); + this._edit_stop_event(ev, mode); + } +}; +scheduler._edit_stop_event = function(ev, mode) { + if (this._new_event) { + if (!mode) { + if (ev) // in case of custom lightbox user can already delete event + this.deleteEvent(ev.id, true); + } else { + this.callEvent("onEventAdded", [ev.id, ev]); + } + this._new_event = null; + } else { + if (mode){ + this.callEvent("onEventChanged", [ev.id, ev]); + } + } +}; + +scheduler.getEvents = function(from, to) { + var result = []; + for (var a in this._events) { + var ev = this._events[a]; + if (ev && ( (!from && !to) || (ev.start_date < to && ev.end_date > from) )) + result.push(ev); + } + return result; +}; +scheduler.getRenderedEvent = function(id) { + if (!id) + return; + var rendered_events = scheduler._rendered; + for (var i=0; i<rendered_events.length; i++) { + var rendered_event = rendered_events[i]; + if (rendered_event.getAttribute("event_id") == id) { + return rendered_event; + } + } + return null; +}; +scheduler.showEvent = function(id, mode) { + var ev = (typeof id == "number" || typeof id == "string") ? scheduler.getEvent(id) : id; + mode = mode||scheduler._mode; + + if (!ev || (this.checkEvent("onBeforeEventDisplay") && !this.callEvent("onBeforeEventDisplay", [ev, mode]))) + return; + + var scroll_hour = scheduler.config.scroll_hour; + scheduler.config.scroll_hour = ev.start_date.getHours(); + var preserve_scroll = scheduler.config.preserve_scroll; + scheduler.config.preserve_scroll = false; + + var original_color = ev.color; + var original_text_color = ev.textColor; + if (scheduler.config.highlight_displayed_event) { + ev.color = scheduler.config.displayed_event_color; + ev.textColor = scheduler.config.displayed_event_text_color; + } + + scheduler.setCurrentView(new Date(ev.start_date), mode); + + ev.color = original_color; + ev.textColor = original_text_color; + scheduler.config.scroll_hour = scroll_hour; + scheduler.config.preserve_scroll = preserve_scroll; + + if (scheduler.matrix && scheduler.matrix[mode]) { + scheduler._els.dhx_cal_data[0].scrollTop = getAbsoluteTop(scheduler.getRenderedEvent(ev.id)) - getAbsoluteTop(scheduler._els.dhx_cal_data[0]) - 20; + } + + scheduler.callEvent("onAfterEventDisplay", [ev, mode]); +}; + +scheduler._append_drag_marker = function(m){ + if(m.parentNode) return; + var zone = scheduler._els["dhx_cal_data"][0]; + + var scale = zone.lastChild; + if(scale.className && scale.className.indexOf("dhx_scale_holder") < 0 && scale.previousSibling){ + scale = scale.previousSibling; + } + if (scale && scale.className.indexOf("dhx_scale_holder") === 0) { + scale.appendChild(m); + } +}; + +scheduler._update_marker_position = function(m, event){ + var size = scheduler._calc_event_y(event, 0); + m.style.top = size.top + "px"; + m.style.height = size.height + "px"; +}; + +scheduler.highlightEventPosition = function(event){ + var m = document.createElement("div"); + + m.setAttribute("event_id", event.id); + this._rendered.push(m); + this._update_marker_position(m, event); + + var css = this.templates.drag_marker_class(event.start_date, event.end_date, event); + var html = this.templates.drag_marker_content(event.start_date, event.end_date, event); + m.className = "dhx_drag_marker"; + if(css) + m.className += " " + css; + if(html) + m.innerHTML = html; + this._append_drag_marker(m); +}; +scheduler._loaded = {}; +scheduler._load = function(url, from) { + url = url || this._load_url; + + if(!url){ + //if scheduler.setLoadMode is called before scheduler.init, initial rendering will invoke data loading while url is undefined + return; + } + + url += (url.indexOf("?") == -1 ? "?" : "&") + "timeshift=" + (new Date()).getTimezoneOffset(); + if (this.config.prevent_cache) url += "&uid=" + this.uid(); + var to; + from = from || this._date; + + if (this._load_mode) { + var lf = this.templates.load_format; + + from = this.date[this._load_mode + "_start"](new Date(from.valueOf())); + while (from > this._min_date) from = this.date.add(from, -1, this._load_mode); + to = from; + + var cache_line = true; + while (to < this._max_date) { + to = this.date.add(to, 1, this._load_mode); + if (this._loaded[lf(from)] && cache_line) + from = this.date.add(from, 1, this._load_mode); else cache_line = false; + } + + var temp_to = to; + do { + to = temp_to; + temp_to = this.date.add(to, -1, this._load_mode); + } while (temp_to > from && this._loaded[lf(temp_to)]); + + if (to <= from) + return false; //already loaded + dhtmlxAjax.get(url + "&from=" + lf(from) + "&to=" + lf(to), function(l) {scheduler.on_load(l);}); + while (from < to) { + this._loaded[lf(from)] = true; + from = this.date.add(from, 1, this._load_mode); + } + } else + dhtmlxAjax.get(url, function(l) {scheduler.on_load(l);}); + this.callEvent("onXLS", []); + return true; +}; +scheduler.on_load = function(loader) { + var evs; + if (this._process && this._process != "xml") { + evs = this[this._process].parse(loader.xmlDoc.responseText); + } else { + evs = this._magic_parser(loader); + } + + scheduler._process_loading(evs); + + this.callEvent("onXLE", []); +}; +scheduler._process_loading = function(evs) { + this._loading = true; + this._not_render = true; + for (var i = 0; i < evs.length; i++) { + if (!this.callEvent("onEventLoading", [evs[i]])) continue; + this.addEvent(evs[i]); + } + this._not_render = false; + if (this._render_wait) this.render_view_data(); + + this._loading = false; + if (this._after_call) this._after_call(); + this._after_call = null; +}; +scheduler._init_event = function(event) { + event.text = (event.text || event._tagvalue) || ""; + event.start_date = scheduler._init_date(event.start_date); + event.end_date = scheduler._init_date(event.end_date); +}; + +scheduler._init_date = function(date){ + if(!date) + return null; + if(typeof date == "string") + return scheduler.templates.xml_date(date); + else return new Date(date); +}; + +scheduler.json = {}; +scheduler.json.parse = function(data) { + if (typeof data == "string") { + scheduler._temp = eval("(" + data + ")"); + data = (scheduler._temp) ? scheduler._temp.data || scheduler._temp.d || scheduler._temp : []; + } + + if (data.dhx_security) + dhtmlx.security_key = data.dhx_security; + + var collections = (scheduler._temp && scheduler._temp.collections) ? scheduler._temp.collections : {}; + var collections_loaded = false; + for (var key in collections) { + if (collections.hasOwnProperty(key)) { + collections_loaded = true; + var collection = collections[key]; + var arr = scheduler.serverList[key]; + if (!arr) continue; + arr.splice(0, arr.length); //clear old options + for (var j = 0; j < collection.length; j++) { + var option = collection[j]; + var obj = { key: option.value, label: option.label }; // resulting option object + for (var option_key in option) { + if (option.hasOwnProperty(option_key)) { + if (option_key == "value" || option_key == "label") + continue; + obj[option_key] = option[option_key]; // obj['value'] = option['value'] + } + } + arr.push(obj); + } + } + } + if (collections_loaded) + scheduler.callEvent("onOptionsLoad", []); + + var evs = []; + for (var i = 0; i < data.length; i++) { + var event = data[i]; + scheduler._init_event(event); + evs.push(event); + } + return evs; +}; +scheduler.parse = function(data, type) { + this._process = type; + this.on_load({xmlDoc: {responseText: data}}); +}; +scheduler.load = function(url, call) { + if (typeof call == "string") { + this._process = call; + call = arguments[2]; + } + + this._load_url = url; + this._after_call = call; + this._load(url, this._date); +}; +//possible values - day,week,month,year,all +scheduler.setLoadMode = function(mode) { + if (mode == "all") mode = ""; + this._load_mode = mode; +}; + +scheduler.serverList = function(name, array) { + if (array) { + this.serverList[name] = array.slice(0); + return this.serverList[name]; + } + this.serverList[name] = (this.serverList[name] || []); + return this.serverList[name]; +}; +scheduler._userdata = {}; +scheduler._magic_parser = function(loader) { + var xml; + if (!loader.getXMLTopNode) { //from a string + var xml_string = loader.xmlDoc.responseText; + loader = new dtmlXMLLoaderObject(function() {}); + loader.loadXMLString(xml_string); + } + + xml = loader.getXMLTopNode("data"); + if (xml.tagName != "data") return [];//not an xml + var skey = xml.getAttribute("dhx_security"); + if (skey) + dhtmlx.security_key = skey; + + var opts = loader.doXPath("//coll_options"); + for (var i = 0; i < opts.length; i++) { + var bind = opts[i].getAttribute("for"); + var arr = this.serverList[bind]; + if (!arr) continue; + arr.splice(0, arr.length); //clear old options + var itms = loader.doXPath(".//item", opts[i]); + for (var j = 0; j < itms.length; j++) { + var itm = itms[j]; + var attrs = itm.attributes; + var obj = { key: itms[j].getAttribute("value"), label: itms[j].getAttribute("label")}; + for (var k = 0; k < attrs.length; k++) { + var attr = attrs[k]; + if (attr.nodeName == "value" || attr.nodeName == "label") + continue; + obj[attr.nodeName] = attr.nodeValue; + } + arr.push(obj); + } + } + if (opts.length) + scheduler.callEvent("onOptionsLoad", []); + + var ud = loader.doXPath("//userdata"); + for (var i = 0; i < ud.length; i++) { + var udx = this._xmlNodeToJSON(ud[i]); + this._userdata[udx.name] = udx.text; + } + + var evs = []; + xml = loader.doXPath("//event"); + + for (var i = 0; i < xml.length; i++) { + var ev = evs[i] = this._xmlNodeToJSON(xml[i]); + scheduler._init_event(ev); + } + return evs; +}; +scheduler._xmlNodeToJSON = function(node) { + var t = {}; + for (var i = 0; i < node.attributes.length; i++) + t[node.attributes[i].name] = node.attributes[i].value; + + for (var i = 0; i < node.childNodes.length; i++) { + var child = node.childNodes[i]; + if (child.nodeType == 1) + t[child.tagName] = child.firstChild ? child.firstChild.nodeValue : ""; + } + + if (!t.text) t.text = node.firstChild ? node.firstChild.nodeValue : ""; + + return t; +}; +scheduler.attachEvent("onXLS", function() { + if (this.config.show_loading === true) { + var t; + t = this.config.show_loading = document.createElement("DIV"); + t.className = 'dhx_loading'; + t.style.left = Math.round((this._x - 128) / 2) + "px"; + t.style.top = Math.round((this._y - 15) / 2) + "px"; + this._obj.appendChild(t); + } +}); +scheduler.attachEvent("onXLE", function() { + var t = this.config.show_loading; + if (t && typeof t == "object") { + this._obj.removeChild(t); + this.config.show_loading = true; + } +}); + +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +to use it in not GPL project. Please contact sales@dhtmlx.com for details +*/ +scheduler.ical={ + parse:function(str){ + var data = str.match(RegExp(this.c_start+"[^\f]*"+this.c_end,"")); + if (!data.length) return; + + //unfolding + data[0]=data[0].replace(/[\r\n]+(?=[a-z \t])/g," "); + //drop property + data[0]=data[0].replace(/\;[^:\r\n]*:/g,":"); + + + var incoming=[]; + var match; + var event_r = RegExp("(?:"+this.e_start+")([^\f]*?)(?:"+this.e_end+")","g"); + while ((match=event_r.exec(data)) !== null){ + var e={}; + var param; + var param_r = /[^\r\n]+[\r\n]+/g; + while ((param=param_r.exec(match[1])) !== null) + this.parse_param(param.toString(),e); + if (e.uid && !e.id) e.id = e.uid; //fallback to UID, when ID is not defined + incoming.push(e); + } + return incoming; + }, + parse_param:function(str,obj){ + var d = str.indexOf(":"); + if (d==-1) return; + + var name = str.substr(0,d).toLowerCase(); + var value = str.substr(d+1).replace(/\\\,/g,",").replace(/[\r\n]+$/,""); + if (name=="summary") + name="text"; + else if (name=="dtstart"){ + name = "start_date"; + value = this.parse_date(value,0,0); + } + else if (name=="dtend"){ + name = "end_date"; + value = this.parse_date(value,0,0); + } + obj[name]=value; + }, + parse_date:function(value,dh,dm){ + var t = value.split("T"); + if (t[1]){ + dh=t[1].substr(0,2); + dm=t[1].substr(2,2); + } + var dy = t[0].substr(0,4); + var dn = parseInt(t[0].substr(4,2),10)-1; + var dd = t[0].substr(6,2); + if (scheduler.config.server_utc && !t[1]) { // if no hours/minutes were specified == full day event + return new Date(Date.UTC(dy,dn,dd,dh,dm)) ; + } + return new Date(dy,dn,dd,dh,dm); + }, + c_start:"BEGIN:VCALENDAR", + e_start:"BEGIN:VEVENT", + e_end:"END:VEVENT", + c_end:"END:VCALENDAR" +}; +scheduler._lightbox_controls = {}; +scheduler.formSection = function(name){ + var config = this.config.lightbox.sections; + var i =0; + for (i; i < config.length; i++) + if (config[i].name == name) + break; + var section = config[i]; + if (!scheduler._lightbox) + scheduler.getLightbox(); + var header = document.getElementById(section.id); + var node = header.nextSibling; + + var result = { + section: section, + header: header, + node: node, + getValue:function(ev){ + return scheduler.form_blocks[section.type].get_value(node, (ev||{}), section); + }, + setValue:function(value, ev){ + return scheduler.form_blocks[section.type].set_value(node, value, (ev||{}), section); + } + }; + + var handler = scheduler._lightbox_controls["get_"+section.type+"_control"]; + return handler?handler(result):result; +}; +scheduler._lightbox_controls.get_template_control = function(result) { + result.control = result.node; + return result; +}; +scheduler._lightbox_controls.get_select_control = function(result) { + result.control = result.node.getElementsByTagName('select')[0]; + return result; +}; +scheduler._lightbox_controls.get_textarea_control = function(result) { + result.control = result.node.getElementsByTagName('textarea')[0]; + return result; +}; +scheduler._lightbox_controls.get_time_control = function(result) { + result.control = result.node.getElementsByTagName('select'); // array + return result; +}; +scheduler.form_blocks={ + template:{ + render: function(sns){ + var height=(sns.height||"30")+"px"; + return "<div class='dhx_cal_ltext dhx_cal_template' style='height:"+height+";'></div>"; + }, + set_value:function(node,value,ev,config){ + node.innerHTML = value||""; + }, + get_value:function(node,ev,config){ + return node.innerHTML||""; + }, + focus: function(node){ + } + }, + textarea:{ + render:function(sns){ + var height=(sns.height||"130")+"px"; + return "<div class='dhx_cal_ltext' style='height:"+height+";'><textarea></textarea></div>"; + }, + set_value:function(node,value,ev){ + node.firstChild.value=value||""; + }, + get_value:function(node,ev){ + return node.firstChild.value; + }, + focus:function(node){ + var a=node.firstChild; scheduler._focus(a, true); + } + }, + select:{ + render:function(sns){ + var height=(sns.height||"23")+"px"; + var html="<div class='dhx_cal_ltext' style='height:"+height+";'><select style='width:100%;'>"; + for (var i=0; i < sns.options.length; i++) + html+="<option value='"+sns.options[i].key+"'>"+sns.options[i].label+"</option>"; + html+="</select></div>"; + return html; + }, + set_value:function(node,value,ev,sns){ + var select = node.firstChild; + if (!select._dhx_onchange && sns.onchange) { + select.onchange = sns.onchange; + select._dhx_onchange = true; + } + if (typeof value == "undefined") + value = (select.options[0]||{}).value; + select.value=value||""; + }, + get_value:function(node,ev){ + return node.firstChild.value; + }, + focus:function(node){ + var a=node.firstChild; scheduler._focus(a, true); + } + }, + time:{ + render:function(sns) { + if (!sns.time_format) { + // default order + sns.time_format = ["%H:%i", "%d", "%m", "%Y"]; + } + // map: default order => real one + sns._time_format_order = {}; + var time_format = sns.time_format; + + var cfg = scheduler.config; + var dt = this.date.date_part(scheduler._currentDate()); + var last = 24*60, first = 0; + if(scheduler.config.limit_time_select){ + last = 60*cfg.last_hour+1; + first = 60*cfg.first_hour; + dt.setHours(cfg.first_hour); + } + var html = ""; + + for (var p = 0; p < time_format.length; p++) { + var time_option = time_format[p]; + + // adding spaces between selects + if (p > 0) { + html += " "; + } + + switch (time_option) { + case "%Y": + sns._time_format_order[3] = p; + //year + html+="<select>"; + var year = dt.getFullYear()-5; //maybe take from config? + for (var i=0; i < 10; i++) + html+="<option value='"+(year+i)+"'>"+(year+i)+"</option>"; + html+="</select> "; + break; + case "%m": + sns._time_format_order[2] = p; + //month + html+="<select>"; + for (var i=0; i < 12; i++) + html+="<option value='"+i+"'>"+this.locale.date.month_full[i]+"</option>"; + html += "</select>"; + break; + case "%d": + sns._time_format_order[1] = p; + //days + html+="<select>"; + for (var i=1; i < 32; i++) + html+="<option value='"+i+"'>"+i+"</option>"; + html += "</select>"; + break; + case "%H:%i": + sns._time_format_order[0] = p; + //hours + html += "<select>"; + var i = first; + var tdate = dt.getDate(); + sns._time_values = []; + + while(i<last){ + var time=this.templates.time_picker(dt); + html+="<option value='"+i+"'>"+time+"</option>"; + sns._time_values.push(i); + dt.setTime(dt.valueOf()+this.config.time_step*60*1000); + var diff = (dt.getDate()!=tdate)?1:0; // moved or not to the next day + i=diff*24*60+dt.getHours()*60+dt.getMinutes(); + } + html += "</select>"; + break; + } + } + + return "<div style='height:30px;padding-top:0px;font-size:inherit;' class='dhx_section_time'>"+html+"<span style='font-weight:normal; font-size:10pt;'> – </span>"+html+"</div>"; + }, + set_value:function(node,value,ev,config){ + var cfg = scheduler.config; + var s=node.getElementsByTagName("select"); + var map = config._time_format_order; + var start_date, end_date; + + if(cfg.full_day) { + if (!node._full_day){ + var html = "<label class='dhx_fullday'><input type='checkbox' name='full_day' value='true'> "+scheduler.locale.labels.full_day+" </label></input>"; + if (!scheduler.config.wide_form) + html = node.previousSibling.innerHTML+html; + node.previousSibling.innerHTML=html; + node._full_day=true; + } + var input=node.previousSibling.getElementsByTagName("input")[0]; + input.checked = (scheduler.date.time_part(ev.start_date)===0 && scheduler.date.time_part(ev.end_date)===0); + + s[map[0]].disabled=input.checked; + s[ map[0] + s.length/2 ].disabled=input.checked; + + input.onclick = function(){ + if(input.checked) { + var obj = {}; + scheduler.form_blocks.time.get_value(node,obj,config); + + start_date = scheduler.date.date_part(obj.start_date); + end_date = scheduler.date.date_part(obj.end_date); + + if (+end_date == +start_date || (+end_date >= +start_date && (ev.end_date.getHours() !== 0 || ev.end_date.getMinutes() !== 0))) + end_date = scheduler.date.add(end_date, 1, "day"); + } + + s[map[0]].disabled=input.checked; + s[ map[0] + s.length/2 ].disabled=input.checked; + + _fill_lightbox_select(s,0,start_date||ev.start_date); + _fill_lightbox_select(s,4,end_date||ev.end_date); + }; + } + + if(cfg.auto_end_date && cfg.event_duration) { + var _update_lightbox_select = function () { + start_date = new Date(s[map[3]].value,s[map[2]].value,s[map[1]].value,0,s[map[0]].value); + end_date = new Date(start_date.getTime() + (scheduler.config.event_duration * 60 * 1000)); + _fill_lightbox_select(s, 4, end_date); + }; + for(var i=0; i<4; i++) { + s[i].onchange = _update_lightbox_select; + } + } + + function _fill_lightbox_select(s,i,d) { + var time_values = config._time_values; + var direct_value = d.getHours()*60+d.getMinutes(); + var fixed_value = direct_value; + var value_found = false; + for (var k=0; k<time_values.length; k++) { + var t_v = time_values[k]; + if (t_v === direct_value) { + value_found = true; + break; + } + if (t_v < direct_value) + fixed_value = t_v; + } + + s[i+map[0]].value=(value_found)?direct_value:fixed_value; + if(!(value_found || fixed_value)){ + s[i+map[0]].selectedIndex = -1;//show empty select in FF + } + s[i+map[1]].value=d.getDate(); + s[i+map[2]].value=d.getMonth(); + s[i+map[3]].value=d.getFullYear(); + } + + _fill_lightbox_select(s,0,ev.start_date); + _fill_lightbox_select(s,4,ev.end_date); + }, + get_value:function(node, ev, config) { + var s = node.getElementsByTagName("select"); + var map = config._time_format_order; + + ev.start_date=new Date(s[map[3]].value,s[map[2]].value,s[map[1]].value,0,s[map[0]].value); + ev.end_date=new Date(s[map[3]+4].value,s[map[2]+4].value,s[map[1]+4].value,0,s[map[0]+4].value); + + if (ev.end_date<=ev.start_date) + ev.end_date=scheduler.date.add(ev.start_date,scheduler.config.time_step,"minute"); + return { + start_date: new Date(ev.start_date), + end_date: new Date(ev.end_date) + }; + }, + focus:function(node){ + scheduler._focus(node.getElementsByTagName("select")[0]); + } + } +}; +scheduler.showCover=function(box){ + if (box){ + box.style.display="block"; + + var scroll_top = window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop; + var scroll_left = window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft; + + var view_height = window.innerHeight||document.documentElement.clientHeight; + + if(scroll_top) // if vertical scroll on window + box.style.top=Math.round(scroll_top+Math.max((view_height-box.offsetHeight)/2, 0))+"px"; + else // vertical scroll on body + box.style.top=Math.round(Math.max(((view_height-box.offsetHeight)/2), 0) + 9)+"px"; // +9 for compatibility with auto tests + + // not quite accurate but used for compatibility reasons + if(document.documentElement.scrollWidth > document.body.offsetWidth) // if horizontal scroll on the window + box.style.left=Math.round(scroll_left+(document.body.offsetWidth-box.offsetWidth)/2)+"px"; + else // horizontal scroll on the body + box.style.left=Math.round((document.body.offsetWidth-box.offsetWidth)/2)+"px"; + } + this.show_cover(); +}; +scheduler.showLightbox=function(id){ + if (!id) return; + if (!this.callEvent("onBeforeLightbox",[id])) { + if (this._new_event) + this._new_event = null; + return; + } + var box = this.getLightbox(); + this.showCover(box); + this._fill_lightbox(id,box); + this.callEvent("onLightbox",[id]); +}; +scheduler._fill_lightbox = function(id, box) { + var ev = this.getEvent(id); + var s = box.getElementsByTagName("span"); + if (scheduler.templates.lightbox_header) { + s[1].innerHTML = ""; + s[2].innerHTML = scheduler.templates.lightbox_header(ev.start_date, ev.end_date, ev); + } else { + s[1].innerHTML = this.templates.event_header(ev.start_date, ev.end_date, ev); + s[2].innerHTML = (this.templates.event_bar_text(ev.start_date, ev.end_date, ev) || "").substr(0, 70); //IE6 fix + } + + var sns = this.config.lightbox.sections; + for (var i = 0; i < sns.length; i++) { + var current_sns = sns[i]; + var node = document.getElementById(current_sns.id).nextSibling; + var block = this.form_blocks[current_sns.type]; + var value = (ev[current_sns.map_to] !== undefined) ? ev[current_sns.map_to] : current_sns.default_value; + block.set_value.call(this, node, value, ev, current_sns); + if (sns[i].focus) + block.focus.call(this, node); + } + + scheduler._lightbox_id = id; +}; +scheduler._lightbox_out=function(ev){ + var sns = this.config.lightbox.sections; + for (var i=0; i < sns.length; i++) { + var node = document.getElementById(sns[i].id); + node=(node?node.nextSibling:node); + var block=this.form_blocks[sns[i].type]; + var res=block.get_value.call(this,node,ev, sns[i]); + if (sns[i].map_to!="auto") + ev[sns[i].map_to]=res; + } + return ev; +}; +scheduler._empty_lightbox=function(data){ + var id=scheduler._lightbox_id; + var ev=this.getEvent(id); + var box=this.getLightbox(); + + this._lame_copy(ev, data); + + this.setEvent(ev.id,ev); + this._edit_stop_event(ev,true); + this.render_view_data(); +}; +scheduler.hide_lightbox=function(id){ + this.hideCover(this.getLightbox()); + this._lightbox_id = null; + this.callEvent("onAfterLightbox",[]); +}; +scheduler.hideCover=function(box){ + if (box) box.style.display="none"; + this.hide_cover(); +}; +scheduler.hide_cover=function(){ + if (this._cover) + this._cover.parentNode.removeChild(this._cover); + this._cover=null; +}; +scheduler.show_cover=function(){ + if(this._cover) + return; + + this._cover=document.createElement("DIV"); + this._cover.className="dhx_cal_cover"; + var _document_height = ((document.height !== undefined) ? document.height : document.body.offsetHeight); + var _scroll_height = ((document.documentElement) ? document.documentElement.scrollHeight : 0); + this._cover.style.height = Math.max(_document_height, _scroll_height) + 'px'; + document.body.appendChild(this._cover); +}; +scheduler.save_lightbox=function(){ + var data = this._lightbox_out({}, this._lame_copy(this.getEvent(this._lightbox_id))); + if (this.checkEvent("onEventSave") && !this.callEvent("onEventSave",[this._lightbox_id, data, this._new_event])) + return; + this._empty_lightbox(data); + this.hide_lightbox(); +}; +scheduler.startLightbox = function(id, box){ + this._lightbox_id = id; + this._custom_lightbox = true; + + this._temp_lightbox = this._lightbox; + this._lightbox = box; + this.showCover(box); +}; +scheduler.endLightbox = function(mode, box){ + this._edit_stop_event(scheduler.getEvent(this._lightbox_id),mode); + if (mode) + scheduler.render_view_data(); + this.hideCover(box); + + if (this._custom_lightbox){ + this._lightbox = this._temp_lightbox; + this._custom_lightbox = false; + } + this._temp_lightbox = this._lightbox_id = null; // in case of custom lightbox user only calls endLightbox so we need to reset _lightbox_id +}; +scheduler.resetLightbox = function(){ + if (scheduler._lightbox && !scheduler._custom_lightbox) + scheduler._lightbox.parentNode.removeChild(scheduler._lightbox); + scheduler._lightbox = null; +}; +scheduler.cancel_lightbox=function(){ + this.callEvent("onEventCancel",[this._lightbox_id, this._new_event]); + this.endLightbox(false); + this.hide_lightbox(); +}; +scheduler._init_lightbox_events=function(){ + this.getLightbox().onclick=function(e){ + var src=e?e.target:event.srcElement; + if (!src.className) src=src.previousSibling; + if (src && src.className) + switch(src.className){ + case "dhx_save_btn": + scheduler.save_lightbox(); + break; + case "dhx_delete_btn": + var c=scheduler.locale.labels.confirm_deleting; + + scheduler._dhtmlx_confirm(c, scheduler.locale.labels.title_confirm_deleting, function(){ + scheduler.deleteEvent(scheduler._lightbox_id); + scheduler._new_event = null; //clear flag, if it was unsaved event + scheduler.hide_lightbox(); + }); + + break; + case "dhx_cancel_btn": + scheduler.cancel_lightbox(); + break; + + default: + if (src.getAttribute("dhx_button")) { + scheduler.callEvent("onLightboxButton", [src.className, src, e]); + } else { + var index, block, sec; + if (src.className.indexOf("dhx_custom_button") != -1) { + if (src.className.indexOf("dhx_custom_button_") != -1) { + index = src.parentNode.getAttribute("index"); + sec = src.parentNode.parentNode; + } else { + index = src.getAttribute("index"); + sec = src.parentNode; + src = src.firstChild; + } + } + if (index) { + block = scheduler.form_blocks[scheduler.config.lightbox.sections[index].type]; + block.button_click(index, src, sec, sec.nextSibling); + } + } + break; + } + }; + this.getLightbox().onkeydown=function(e){ + switch((e||event).keyCode){ + case scheduler.keys.edit_save: + if ((e||event).shiftKey) return; + scheduler.save_lightbox(); + break; + case scheduler.keys.edit_cancel: + scheduler.cancel_lightbox(); + break; + default: + break; + } + }; +}; +scheduler.setLightboxSize=function(){ + var d = this._lightbox; + if (!d) return; + + var con = d.childNodes[1]; + con.style.height="0px"; + con.style.height=con.scrollHeight+"px"; + d.style.height=con.scrollHeight+scheduler.xy.lightbox_additional_height+"px"; + con.style.height=con.scrollHeight+"px"; //it is incredible , how ugly IE can be +}; + +scheduler._init_dnd_events = function(){ + dhtmlxEvent(document.body, "mousemove", scheduler._move_while_dnd); + dhtmlxEvent(document.body, "mouseup", scheduler._finish_dnd); + scheduler._init_dnd_events = function(){}; +}; +scheduler._move_while_dnd = function(e){ + if (scheduler._dnd_start_lb){ + if (!document.dhx_unselectable){ + document.body.className += " dhx_unselectable"; + document.dhx_unselectable = true; + } + var lb = scheduler.getLightbox(); + var now = (e&&e.target)?[e.pageX, e.pageY]:[event.clientX, event.clientY]; + lb.style.top = scheduler._lb_start[1]+now[1]-scheduler._dnd_start_lb[1]+"px"; + lb.style.left = scheduler._lb_start[0]+now[0]-scheduler._dnd_start_lb[0]+"px"; + } +}; +scheduler._ready_to_dnd = function(e){ + var lb = scheduler.getLightbox(); + scheduler._lb_start = [parseInt(lb.style.left,10), parseInt(lb.style.top,10)]; + scheduler._dnd_start_lb = (e&&e.target)?[e.pageX, e.pageY]:[event.clientX, event.clientY]; +}; +scheduler._finish_dnd = function(){ + if (scheduler._lb_start){ + scheduler._lb_start = scheduler._dnd_start_lb = false; + document.body.className = document.body.className.replace(" dhx_unselectable",""); + document.dhx_unselectable = false; + } +}; +scheduler.getLightbox=function(){ //scheduler.config.wide_form=true; + if (!this._lightbox){ + var d=document.createElement("DIV"); + d.className="dhx_cal_light"; + if (scheduler.config.wide_form) + d.className+=" dhx_cal_light_wide"; + if (scheduler.form_blocks.recurring) + d.className+=" dhx_cal_light_rec"; + + if (/msie|MSIE 6/.test(navigator.userAgent)) + d.className+=" dhx_ie6"; + d.style.visibility="hidden"; + var html = this._lightbox_template; + + var buttons = this.config.buttons_left; + for (var i = 0; i < buttons.length; i++) + html+="<div class='dhx_btn_set dhx_left_btn_set "+buttons[i]+"_set'><div dhx_button='1' class='"+buttons[i]+"'></div><div>"+scheduler.locale.labels[buttons[i]]+"</div></div>"; + + buttons = this.config.buttons_right; + for (var i = 0; i < buttons.length; i++) + html+="<div class='dhx_btn_set dhx_right_btn_set "+buttons[i]+"_set' style='float:right;'><div dhx_button='1' class='"+buttons[i]+"'></div><div>"+scheduler.locale.labels[buttons[i]]+"</div></div>"; + + html+="</div>"; + d.innerHTML=html; + if (scheduler.config.drag_lightbox){ + d.firstChild.onmousedown = scheduler._ready_to_dnd; + d.firstChild.onselectstart = function(){ return false; }; + d.firstChild.style.cursor = "pointer"; + scheduler._init_dnd_events(); + + } + document.body.insertBefore(d,document.body.firstChild); + this._lightbox=d; + + var sns=this.config.lightbox.sections; + html=""; + for (var i=0; i < sns.length; i++) { + var block=this.form_blocks[sns[i].type]; + if (!block) continue; //ignore incorrect blocks + sns[i].id="area_"+this.uid(); + var button = ""; + if (sns[i].button){ + button = "<div class='dhx_custom_button' index='"+i+"'><div class='dhx_custom_button_"+sns[i].button+"'></div><div>"+this.locale.labels["button_"+sns[i].button]+"</div></div>"; + } + + if (this.config.wide_form){ + html+="<div class='dhx_wrap_section'>"; + } + + var label_name = this.locale.labels["section_"+sns[i].name]; + if(typeof label_name !== "string"){ + label_name = sns[i].name; + } + html+="<div id='"+sns[i].id+"' class='dhx_cal_lsection'>"+button+label_name+"</div>"+block.render.call(this,sns[i]); + html+="</div>"; + } + + var ds=d.getElementsByTagName("div"); + for (var i=0; i<ds.length; i++) { + var t_ds = ds[i]; + if (t_ds.className == "dhx_cal_larea") { + t_ds.innerHTML = html; + break; + } + } + + //sizes + this.setLightboxSize(); + + this._init_lightbox_events(this); + d.style.display="none"; + d.style.visibility="visible"; + } + return this._lightbox; +}; +scheduler._lightbox_template="<div class='dhx_cal_ltitle'><span class='dhx_mark'> </span><span class='dhx_time'></span><span class='dhx_title'></span></div><div class='dhx_cal_larea'></div>"; + +scheduler._init_touch_events = function(){ + if (this.config.touch != "force") + this.config.touch = this.config.touch && + ( (navigator.userAgent.indexOf("Mobile")!=-1) || + (navigator.userAgent.indexOf("iPad")!=-1) || + (navigator.userAgent.indexOf("Android")!=-1) || + (navigator.userAgent.indexOf("Touch")!=-1)); + + if (this.config.touch){ + this.xy.scroll_width = 0; + if (window.navigator.msPointerEnabled){ + this._touch_events(["MSPointerMove", "MSPointerDown", "MSPointerUp"], function(ev){ + if (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE ) return null; + return ev; + }, function(ev){ + return (!ev || ev.pointerType == ev.MSPOINTER_TYPE_MOUSE); + }); + this._obj.ondblclick = function(){}; + } else + this._touch_events(["touchmove", "touchstart", "touchend"], function(ev){ + if (ev.touches && ev.touches.length > 1) return null; + if (ev.touches[0]) + return { target:ev.target, pageX:ev.touches[0].pageX, pageY:ev.touches[0].pageY }; + else + return ev; + }, function(){ return false; }); + } +}; + +scheduler._touch_events = function(names, accessor, ignore){ + //webkit on android need to be handled separately + var a_webkit = (navigator.userAgent.indexOf("Android")!=-1) && (navigator.userAgent.indexOf("WebKit")!=-1); + var source, tracker, timer, drag_mode, scroll_mode, action_mode; + var dblclicktime = 0; + + function attachTouchEvent(element, name, callback){ + //touch gestures must be disabled when ligthbox is opened + dhtmlxEvent(element, name, function(e){ + if(scheduler._is_lightbox_open()){ + return true; + }else{ + return callback(e); + } + }); + } + + function check_direction_swipe(s_ev, e_ev, step){ + if (!s_ev || !e_ev) return; + + var dy = Math.abs(s_ev.pageY - e_ev.pageY); + var dx = Math.abs(s_ev.pageX - e_ev.pageX); + if (dx>step && (!dy || (dx/dy > 3))){ + if (s_ev.pageX > e_ev.pageX) + scheduler._click.dhx_cal_next_button(); + else + scheduler._click.dhx_cal_prev_button(); + } + } + + attachTouchEvent(document.body, names[0], function(e){ + if (ignore(e)) return; + + if (drag_mode){ + scheduler._on_mouse_move(accessor(e)); + scheduler._update_global_tip(); + if (e.preventDefault) + e.preventDefault(); + e.cancelBubble = true; + return false; + } + + if (tracker && a_webkit){ + check_direction_swipe(tracker, accessor(e), 0); + } + + tracker = accessor(e); + //ignore common and scrolling moves + if (!action_mode) return; + + //multitouch + if (!tracker){ + scroll_mode = true; + return; + } + + //target changed - probably in scroll mode + + if (source.target != tracker.target || (Math.abs(source.pageX - tracker.pageX) > 5) || (Math.abs(source.pageY - tracker.pageY) > 5)){ + scroll_mode = true; + clearTimeout(timer); + } + + }); + + attachTouchEvent(this._els["dhx_cal_data"][0], "scroll", drag_cancel); + attachTouchEvent(this._els["dhx_cal_data"][0], "touchcancel", drag_cancel); + attachTouchEvent(this._els["dhx_cal_data"][0], "contextmenu", function(e){ + if (action_mode){ + if (e && e.preventDefault) + e.preventDefault(); + (e||event).cancelBubble = true; + return false; + } + }); + attachTouchEvent(this._els["dhx_cal_data"][0], names[1], function(e){ + if (ignore(e)) return; + + var fake_event; + drag_mode = scroll_mode = false; + action_mode = true; + scheduler._temp_touch_block = true; + fake_event = tracker = accessor(e); + + if (!fake_event){ + scroll_mode = true; + return; + } + + //dbl click + var now = new Date(); + + if (!scroll_mode && !drag_mode && now - dblclicktime < 250){ + scheduler._click.dhx_cal_data(fake_event); + window.setTimeout(function(){ + scheduler._on_dbl_click(fake_event); + }, 50); + + if (e.preventDefault) + e.preventDefault(); + e.cancelBubble = true; + scheduler._block_next_stop = true; + return false; + } + dblclicktime = now; + + //drag + + if (scroll_mode || drag_mode || !scheduler.config.touch_drag) + return; + + //there is no target + timer = setTimeout(function(){ + + drag_mode = true; + var target = source.target; + if (target && target.className && target.className.indexOf("dhx_body") != -1) + target = target.previousSibling; + + scheduler._on_mouse_down(source, target); + if (scheduler._drag_mode && scheduler._drag_mode != "create"){ + var pos = -1; + scheduler.for_rendered(scheduler._drag_id, function(node, i) { + pos = node.getBoundingClientRect().top; + node.style.display='none'; + scheduler._rendered.splice(i, 1); + }); + if (pos>=0){ + var step = scheduler.config.time_step; + scheduler._move_pos_shift = step* Math.round((fake_event.pageY - pos)*60/(scheduler.config.hour_size_px*step)); + } + } + + if (scheduler.config.touch_tip) + scheduler._show_global_tip(); + scheduler._on_mouse_move(source); + },scheduler.config.touch_drag); + + source = fake_event; + }); + function drag_cancel(e){ + scheduler._hide_global_tip(); + if (drag_mode){ + scheduler._on_mouse_up( accessor(e||event) ); + scheduler._temp_touch_block = false; + } + scheduler._drag_id = null; + scheduler._drag_mode=null; + scheduler._drag_pos=null; + + clearTimeout(timer); + drag_mode = action_mode = false; + scroll_mode = true; + } + attachTouchEvent(this._els["dhx_cal_data"][0], names[2], function(e){ + if (ignore(e)) return; + + if (!drag_mode) + check_direction_swipe(source, tracker, 200); + + if (drag_mode) + scheduler._ignore_next_click = true; + + drag_cancel(e); + if (scheduler._block_next_stop){ + scheduler._block_next_stop = false; + if (e.preventDefault) + e.preventDefault(); + e.cancelBubble = true; + return false; + } + }); + + dhtmlxEvent(document.body, names[2], drag_cancel); +}; + +scheduler._show_global_tip = function(){ + scheduler._hide_global_tip(); + + var toptip = scheduler._global_tip = document.createElement("DIV"); + toptip.className='dhx_global_tip'; + + scheduler._update_global_tip(1); + + document.body.appendChild(toptip); +}; +scheduler._update_global_tip = function(init){ + var toptip = scheduler._global_tip; + if (toptip){ + var time = ""; + if (scheduler._drag_id && !init){ + var ev = scheduler.getEvent(scheduler._drag_id); + if (ev) + time = "<div>" + (ev._timed ? scheduler.templates.event_header(ev.start_date, ev.end_date, ev):scheduler.templates.day_date(ev.start_date, ev.end_date, ev)) + "</div>"; + } + + if (scheduler._drag_mode == "create" || scheduler._drag_mode == "new-size") + toptip.innerHTML = (scheduler.locale.drag_to_create || "Drag to create")+time; + else + toptip.innerHTML = (scheduler.locale.drag_to_move || "Drag to move")+time; + } +}; +scheduler._hide_global_tip = function(){ + var toptip = scheduler._global_tip; + if (toptip && toptip.parentNode){ + toptip.parentNode.removeChild(toptip); + scheduler._global_tip = 0; + } +}; + +scheduler._dp_init=function(dp){ + dp._methods=["_set_event_text_style","","changeEventId","_dp_hook_delete"]; + + this._dp_hook_delete = function(id){ + return this.deleteEvent(id, true); + }; + this.attachEvent("onEventAdded",function(id){ + if (!this._loading && this._validId(id)) + dp.setUpdated(id,true,"inserted"); + }); + this.attachEvent("onConfirmedBeforeEventDelete", function(id){ + if (!this._validId(id)) return; + var z=dp.getState(id); + + if (z=="inserted" || this._new_event) { dp.setUpdated(id,false); return true; } + if (z=="deleted") return false; + if (z=="true_deleted") return true; + + dp.setUpdated(id,true,"deleted"); + return false; + }); + this.attachEvent("onEventChanged",function(id){ + if (!this._loading && this._validId(id)) + dp.setUpdated(id,true,"updated"); + }); + + dp._getRowData=function(id,pref){ + var ev=this.obj.getEvent(id); + var data = {}; + + for (var a in ev){ + if (a.indexOf("_") === 0) continue; + if (ev[a] && ev[a].getUTCFullYear) //not very good, but will work + data[a] = this.obj.templates.xml_format(ev[a]); + else + data[a] = ev[a]; + } + + return data; + }; + dp._clearUpdateFlag=function(){}; + + dp.attachEvent("insertCallback", scheduler._update_callback); + dp.attachEvent("updateCallback", scheduler._update_callback); + dp.attachEvent("deleteCallback", function(upd, id) { + this.obj.setUserData(id, this.action_param, "true_deleted"); + this.obj.deleteEvent(id); + }); + +}; + +scheduler._validId=function(id){ + return true; +}; + +scheduler.setUserData=function(id,name,value){ + if (id) + this.getEvent(id)[name]=value; + else + this._userdata[name]=value; +}; +scheduler.getUserData=function(id,name){ + return id?this.getEvent(id)[name]:this._userdata[name]; +}; +scheduler._set_event_text_style=function(id,style){ + this.for_rendered(id,function(r){ + r.style.cssText+=";"+style; + }); + var ev = this.getEvent(id); + ev["_text_style"]=style; + this.event_updated(ev); +}; + +scheduler._update_callback = function(upd,id){ + var data = scheduler._xmlNodeToJSON(upd.firstChild); + data.text = data.text||data._tagvalue; + data.start_date = scheduler.templates.xml_date(data.start_date); + data.end_date = scheduler.templates.xml_date(data.end_date); + + scheduler.addEvent(data); +}; +scheduler._skin_settings = { + fix_tab_position: [1,0], + use_select_menu_space: [1,0], + wide_form: [1,0], + + hour_size_px: [44,42], + displayed_event_color: ["#ff4a4a", "ffc5ab"], + displayed_event_text_color: ["#ffef80", "7e2727"] +}; + +scheduler._skin_xy = { + lightbox_additional_height: [90,50], + nav_height: [59,22], + bar_height: [24,20] +}; + +scheduler._configure = function(col, data, skin){ + for (var key in data) + if (typeof col[key] == "undefined") + col[key] = data[key][skin]; +}; +scheduler._skin_init = function(){ + if (!scheduler.skin){ + var links = document.getElementsByTagName("link"); + for (var i = 0; i < links.length; i++) { + var res = links[i].href.match("dhtmlxscheduler_([a-z]+).css"); + if (res){ + scheduler.skin = res[1]; + break; + } + } + } + + + + var set = 0; + if (scheduler.skin && (scheduler.skin === "classic" || scheduler.skin === "glossy")) set = 1; + + //apply skin related settings + this._configure(scheduler.config, scheduler._skin_settings, set); + this._configure(scheduler.xy, scheduler._skin_xy, set); + + //classic skin need not any further customization + if (set) return; + + + var minic = scheduler.config.minicalendar; + if (minic) minic.padding = 14; + + scheduler.templates.event_bar_date = function(start,end,ev) { + return "• <b>"+scheduler.templates.event_date(start)+"</b> "; + }; + + //scheduler._lightbox_template="<div class='dhx_cal_ltitle'><span class='dhx_mark'> </span><span class='dhx_time'></span><span class='dhx_title'></span><div class='dhx_close_icon'></div></div><div class='dhx_cal_larea'></div>"; + scheduler.attachEvent("onTemplatesReady", function() { + + var date_to_str = scheduler.date.date_to_str("%d"); + if(!scheduler.templates._old_month_day){ + scheduler.templates._old_month_day = scheduler.templates.month_day; + } + var old_month_day = scheduler.templates._old_month_day; + scheduler.templates.month_day = function(date) { + if (this._mode == "month") { + var label = date_to_str(date); + if (date.getDate() == 1) { + label = scheduler.locale.date.month_full[date.getMonth()] + " " + label; + } + if (+date == +scheduler.date.date_part(new Date())) { + label = scheduler.locale.labels.dhx_cal_today_button + " " + label; + } + return label; + } else { + return old_month_day.call(this, date); + } + }; + + + if (scheduler.config.fix_tab_position){ + var navline_divs = scheduler._els["dhx_cal_navline"][0].getElementsByTagName('div'); + var minical = null; + var tabs = []; + var last = 211; + for (var i=0; i<navline_divs.length; i++) { + var div = navline_divs[i]; + var name = div.getAttribute("name"); + if (name) { // mode tab + div.style.right = "auto"; + switch (name) { + case "day_tab": + div.style.left = "14px"; + div.className += " dhx_cal_tab_first"; + break; + case "week_tab": + div.style.left = "75px"; + break; + case "month_tab": + div.style.left = "136px"; + div.className += " dhx_cal_tab_last"; + break; + default: + div.style.left = last+"px"; + div.className += " dhx_cal_tab_standalone"; + last = last + 14 + div.offsetWidth; + break; + } + }else{ + if((div.className || "").indexOf("dhx_minical_icon") === 0 && + div.parentNode == scheduler._els["dhx_cal_navline"][0]){ + // if default minicalendar icon + minical = div; + } + } + + } + + if(minical){ + minical.style.left = last+"px"; + } + } + + if (scheduler.skin && scheduler.skin === "flat"){ + scheduler.xy.scale_height = 35; + scheduler.templates.hour_scale = function(date){ + var min = date.getMinutes(); + min = min < 10 ? "0"+min : min; + var html = "<span class='dhx_scale_h'>"+ date.getHours() +"</span>"+ + "<span class='dhx_scale_m'> "+ min +"</span>"; + return html; + }; + } + }); + scheduler._skin_init = function(){}; +}; + + +if (window.jQuery){ + +(function( $ ){ + + var methods = []; + $.fn.dhx_scheduler = function(config){ + if (typeof(config) === 'string') { + if (methods[config] ) { + return methods[config].apply(this, []); + }else { + $.error('Method ' + config + ' does not exist on jQuery.dhx_scheduler'); + } + } else { + var views = []; + this.each(function() { + if (this && this.getAttribute){ + if (!this.getAttribute("dhxscheduler")){ + for (var key in config) + if (key!="data") + scheduler.config[key] = config[key]; + + if (!this.getElementsByTagName("div").length){ + this.innerHTML = '<div class="dhx_cal_navline"><div class="dhx_cal_prev_button"> </div><div class="dhx_cal_next_button"> </div><div class="dhx_cal_today_button"></div><div class="dhx_cal_date"></div><div class="dhx_cal_tab" name="day_tab" style="right:204px;"></div><div class="dhx_cal_tab" name="week_tab" style="right:140px;"></div><div class="dhx_cal_tab" name="month_tab" style="right:76px;"></div></div><div class="dhx_cal_header"></div><div class="dhx_cal_data"></div>'; + this.className += " dhx_cal_container"; + } + scheduler.init(this, scheduler.config.date, scheduler.config.mode); + if (config.data) + scheduler.parse(config.data); + + views.push(scheduler); + } + } + }); + + if (views.length === 1) return views[0]; + return views; + } + }; + + + + +})(jQuery); + +}
\ No newline at end of file diff --git a/codebase/sources/dhtmlxscheduler.js.map b/codebase/sources/dhtmlxscheduler.js.map new file mode 100644 index 0000000..8ab2925 --- /dev/null +++ b/codebase/sources/dhtmlxscheduler.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler.js.map","sources":["dhtmlxscheduler.js"],"names":["dtmlXMLLoaderObject","funcObject","dhtmlObject","async","rSeed","this","xmlDoc","onloadAction","mainObject","waitCall","callerFunction","handler","e","window","event","getAbsoluteLeft","htmlObject","getOffset","left","getAbsoluteTop","top","getOffsetSum","elem","parseInt","offsetTop","offsetLeft","offsetParent","getOffsetRect","box","getBoundingClientRect","body","document","docElem","documentElement","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","Math","round","convertStringToBoolean","inputString","toLowerCase","getUrlSymbol","str","indexOf","dhtmlDragAndDropObject","dhtmlDragAndDrop","lastLanding","dragNode","dragStartNode","dragStartObject","tempDOMU","tempDOMM","waitDrag","_dhtmlxError","catches","dhtmlXHeir","a","b","c","dhtmlxEvent","el","addEventListener","attachEvent","dataProcessor","serverProcessorURL","serverProcessor","action_param","object","updatedRows","autoUpdate","updateMode","_tMode","post_delim","_waitMode","_in_progress","_invalid","mandatoryFields","messages","styles","updated","inserted","deleted","invalid","invalid_cell","error","clear","enableUTFencoding","dhtmlxEventable","dhtmlXScheduler","scheduler","version","dhtmlx","obj","extend_api","name","map","ext","t","that","tagName","apply","_init","arguments","_patch","prototype","dhtmlxAjax","get","url","callback","length","loadXML","post","getSync","postSync","count","waitLoadFunction","once","check","readyState","call","getXMLTopNode","oldObj","z","responseXML","temp","getElementsByTagName","split","_retry","_isIE","loadXMLString","responseText","replace","dhtmlxError","throwError","createElement","xmlString","silent","ActiveXObject","onreadystatechange","parser","DOMParser","parseFromString","filePath","postMode","postVars","rpc","Date","valueOf","XMLHttpRequest","open","setRequestHeader","navigator","userAgent","send","destructor","_filterXPath","_getAllNamedChilds","doXPath","doXPathOpera","doXSLTransToObject","doXSLTransToString","doSerialization","xmlNodeToJSON","setXSLParamValue","node","i","attributes","value","firstChild","nodeValue","childNodes","push","removeDraggableItem","htmlNode","onmousedown","dragStarter","dragLanding","addDraggableItem","preCreateDragCopy","addDragLanding","button","onmouseup","onmousemove","stopDrag","callDrag","downtime","preventDefault","dragger","_createDragNode","onselectstart","gldragNode","appendChild","pWindow","initFrameRoute","parentNode","grd","old","removeChild","oldBody","_dragOut","div","innerHTML","outerHTML","cloneNode","style","clientX","fx","clientY","fy","srcElement","target","checkLanding","calculateFramePosition","n","parent","frames","frameElement","ls","_dragIn","lastLanding_scr","_onNotFound","mode","stopFrameRoute","_drag","win","_isFF","_FFrv","_isOpera","_isKHTML","_isMacOS","_isChrome","_KHTMLrv","_OperaRv","parseFloat","substr","appName","appVersion","compatMode","xpathExp","docObj","namespace","result_type","XPathResult","nodeName","setProperty","selectSingleNode","selectNodes","Array","nodeObj","ownerDocument","retType","ANY_TYPE","FIRST_ORDERED_NODE_TYPE","rowsCol","col","evaluate","singleNodeValue","thisColMemb","iterateNext","catchError","type","func_name","params","alert","getAttribute","toUpperCase","j","xslDoc","paramName","paramValue","item","result","transformNodeToObject","transformNode","XSLProcessor","XSLTProcessor","importStylesheet","transformToDocument","res","xml","xmlSerializer","XMLSerializer","serializeToString","catcher","callObj","eventCatcher","addEvent","callEvent","arg0","checkEvent","dhx_catch","zr","ev","eval","removeEvent","id","detachEvent","list","detachAllEvents","config","usercall","modality","_dhx_msg_cfg","modal_key","code","which","keyCode","message","keyboard","cancelBubble","cover","onkeydown","className","scrollHeight","display","text","css","button_css","info","area","position","hide","onclick","insertBefore","expire","timers","setTimeout","pull","_boxStructure","ok","cancel","setAttribute","inner","width","height","title","content","ok_text","locale","labels","message_ok","undefined","cancel_text","message_cancel","buttons","getElementById","source","_createBox","hidden","x","abs","floor","innerWidth","offsetWidth","y","innerHeight","offsetHeight","focus","modalbox","alertPopup","confirmPopup","boxPopup","box_params","uid","confirm","subtype","seed","hideAll","key","clearTimeout","setTransactionMode","total","_tSend","escape","data","_utf","encodeURIComponent","setDataColumns","val","_columns","getSyncState","enableDataNames","_endnm","enablePartialDataSend","_changed","setUpdateMode","dnd","ignore","master","_silent_mode","setUpdated","rowId","state","ind","findRow","existing","getUserData","set_invalid","setUserData","is_invalid","splice","_clearUpdateFlag","markRow","sendData","_methods","details","getState","toString","checkBeforeUpdate","mytype","_h2","editStop","sendAllData","_beforeSendData","_getRowData","_sendData","serialize","serialize_one","stack","keys","hasOwnProperty","join","security_key","pref","a1","a2","afterUpdate","a3","_user","valid","_getAllData","out","has_one","setVerificator","verifFunction","clearVerificator","pattern","defineAction","_uActions","afterUpdateCallback","sid","tid","action","btag","marker","correct","soid","d","atag","finalizeUpdate","init","anObj","_dp_init","setOnAfterUpdate","enableDebug","setOnBeforeUpdateHandler","func","setAutoUpdate","interval","user","_need_update","_loader","_update_busy","xml_node","afterAutoUpdate","fullSync","self","setInterval","loadUpdate","getUpdates","_v","_a","arr","vers","upds","status","dhtmlXGridObject","_init_point_connector","_init_point","clear_url","hdr","rows","combine_urls","_connector_sorting","_connector_filter","sorting_url","dir","filtering_url","inds","vals","_con_f_used","xmlFileUrl","clearAndLoad","setSortImgState","_in_header_connector_text_filter","_in_header_text_filter","_in_header_connector_select_filter","_in_header_select_filter","load_connector","load","concat","_colls_loaded","cellType","ar","_parseHead_connector","_parseHead","cols","xmlLoader","f","v","combo","getColumnCombo","getCombo","os","lab","addOption","put","init_original","_dataprocessor","_detachDomEvent","removeEventListener","_init_once","getWindowSize","w","clientWidth","h","clientHeight","equals","oldSize","newSize","_resize_timer","update_view","date","_currentDate","_obj","unset_actions","_skin_init","_els","_scroll","_quirks","_quirks7","get_elements","init_templates","set_actions","_init_touch_events","set_sizes","setCurrentView","xy","min_event_height","scale_width","scroll_width","scale_height","month_scale_height","menu_width","margin_top","margin_left","editor_width","month_head_height","edit_save","edit_cancel","_x","_y","scale_x","_table_view","scale_s","set_xy","nav_height","actual_height","data_y","max","els","class_name","attr_value","label","_click","ondblclick","oncontextmenu","_temp_touch_block","_on_mouse_move","_ignore_next_click","_on_mouse_down","_on_mouse_up","_on_dbl_click","src","returnValue","_locate_event","select","_select_id","unselect","updateEvent","getEvent","_mode","_date","min_date","_min_date","max_date","_max_date","editor_id","_edit_id","lightbox_id","_lightbox_id","new_event","_new_event","select_id","expanded","drag_id","_drag_id","drag_mode","_drag_mode","dhx_cal_data","trg","readonly","getActionData","mask","_close_not_saved","dhx_cal_prev_button","dhx_cal_next_button","dummy","step","add","dhx_cal_today_button","dhx_cal_tab","substring","search","delete","confirm_deleting","_dhtmlx_confirm","title_confirm_deleting","deleteEvent","edit","save","showLightbox","opts","addEventNow","start","end","base","constructor","match","event_duration","time_step","start_date","start_hour","first_hour","getHours","setHours","end_date","setTime","_loading","_drag_event","dblclick_create","details_on_dblclick","_timed","_get_column_index","x_pos","column","_cols","_ignores","_week_indexes_from_pos","pos","min","ceil","hour_size_px","_mouse_coords","pageX","pageY","_dy_shift","_colsS","dy","heights","_ignores_detected","preserve_length","_event_length","_get_real_event_length","x_step","x_unit","confirm_closing","title_confirm_closing","positive_closing","_correct_shift","back","getTimezoneOffset","_drag_pos","force_redraw","_get_date_from_pos","_drag_start","getMinutes","fields","_move_pos_shift","custom","time_part","matrix","_get_fictional_event_length","resize_date","_drag_from_start","day","date_part","resize_from_start","cursor","shift","new_end","new_start","limit_drag_out","duration","_get_event_sday","last_hour","getDate","_allow_dnd","update_render","sx","for_rendered","r","classname","_lame_clone","_get_private_properties","_clear_temporary_properties","clean","flagged_event","initial","current_state","touch","_dhx_changed","is_new","edit_on_create","details_on_create","_lame_copy","render_view_data","_trigger_dyn_loading","_load_mode","_load","_render_wait","view","_reset_scale","isViewExists","templates","updateView","prev_scroll","preserve_scroll","dhx_multi_day","tabs","_render_x_header","head","left_border","_get_columns_num","from","to","count_n","_get_timeunit_start","_get_view_end","dd","ed","_calc_scale_sizes","summ","_process_ignores","realcount","_set_scale_col_size","_render_scales","header","data_area","sd","today","scales","cls","week_date_class","drag_resize","drag_move","_scales","week_start","_reset_month_scale","_reset_hours_scale","multi_day","navline","c1","visibility","col_length","c2","cc","hour_scale","scroll_hour","now_date","preserve","ign_date","_render_month_scale","getCellHeight","row","view_start","cd","tdcss","cell_width","cellheight","html","rendered_dates","row_height","month_date_class","body_class","head_class","month_day","bf1","getFullYear","getMonth","divs","getLabel","property","sections","lightbox","map_to","options","updateCollection","list_name","collection","serverList","resetLightbox","cache","Number","String","Boolean","Object","n_ev","section","_focus","fd","end_slot","ev_length","hours","_start_correction","_end_correction","start_slot","render","_get_date_index","per_day","days","_get_section_view","_props","_get_section_property","y_property","_is_initialized","_is_lightbox_open","s","month_short","month_short_hash","month_full","month_full_hash","setMinutes","setSeconds","setMilliseconds","getTime","getDay","start_on_monday","month_start","setDate","year_start","setMonth","day_start","_add_days","inc","ndate","setYear","to_fixed","num","copy","date_to_str","format","utc","Function","str_to_date","splt","getISOWeek","nday","first_thursday","year_number","ordinal_date","week_number","getUTCISOWeek","convert_to_utc","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","day_full","day_short","day_tab","week_tab","month_tab","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","section_description","section_time","full_day","confirm_recurring","section_recurring","button_recurring","button_recurring_open","button_edit_series","button_edit_occurrence","agenda_tab","description","year_tab","week_agenda_tab","grid_tab","drag_to_create","drag_to_move","default_date","month_date","load_date","week_date","day_date","hour_date","xml_date","api_date","drag_create","resize_month_events","resize_month_timed","cascade_event_display","cascade_event_count","cascade_event_margin","multi_day_height_limit","drag_lightbox","server_utc","touch_tip","touch_drag","quick_info_detached","drag_highlight","icons_edit","icons_select","buttons_left","buttons_right","highlight_displayed_event","dhx_save_btn","dhx_cancel_btn","dhx_delete_btn","d1","d2","day_scale_date","month_scale_date","week_scale_date","time_picker","event_date","load_format","xml_format","event_header","event_text","event_class","event_bar_date","event_bar_text","month_events_link","drag_marker_class","drag_marker_content","_seed","_events","clearAll","_loaded","clear_view","extra_data","isOneDayEvent","event_updated","setEvent","hash","method","_rendered","changeEventId","new_id","attrs","create_getter","create_setter","is_visible_events","clear_event","in_visible_range","end_dates_visible","hidden_duration","delta","get_visible_events","only_timed","filter_event","filter","_is_main_area_event","evs","hold","_not_render","len","_recalculate_timed","tvs","tvd","_rendered_location","render_data","_view_month_day","_render_month_link","toRender","_sday","_eday","curr","_sweek","getEvents","_get_event_bar_pos","widt","x2","_pre_render_events","render_event_bar","max_evs","max_month_events","_sorder","render_event","hb","bar_height","h_old","_pre_render_events_table","_pre_render_events_line","evl","cellHeight","cells","cHeight","unshift","scroll_fix","scale_settings","sum_width","row_heights","slice","full_multi_day_height","used_multi_day_height","used_multi_day_height_css","multi_day_section","multi_day_icon","overflowY","_get_event_mapped_end_date","separate_short_events","ev_duration","_min_mapped_duration","sort","evs_originals","sh","eh","_inner","t_ev","t_end_date","slot_index","sorderSet","_is_sorder","k","_max_sorder","max_count","_count","_copy_event","_time_order","weeks","chunks_info","first_chunk","last_chunk","chunk_info","locate_s","locate_holder_day","locate_e","_length","stack_line","_first_chunk","_last_chunk","_copy_dummy","_y_from_date","sm","_calc_event_y","min_height","em","menu","menu_offset","locate_holder","pos_y","ev_count","ev_sorder","limit","margin","right","_render_v_bar","_text_style","zIndex","tplClass","cssText","_editor","shiftKey","icons","icons_str","bg_color","color","textColor","highlightEventPosition","contentA","contentB","bottom","cs","cse","container","renderEvent","inner_html","footer_class","past","_get_dnd_order","order","ev_height","max_height","_orig_sorder","evTop","y_event_offset","resize_handle","resizable","left_chunk","right_chunk","resize_left","resize_right","style_text","_edit_stop_event","getRenderedEvent","rendered_events","rendered_event","showEvent","original_color","original_text_color","displayed_event_color","displayed_event_text_color","_append_drag_marker","m","zone","scale","lastChild","previousSibling","_update_marker_position","size","_load_url","prevent_cache","lf","cache_line","temp_to","l","on_load","loader","_process","parse","_magic_parser","_process_loading","_after_call","_init_event","_tagvalue","_init_date","json","_temp","dhx_security","collections","collections_loaded","option","option_key","setLoadMode","array","_userdata","xml_string","skey","bind","itms","itm","attr","ud","udx","_xmlNodeToJSON","child","nodeType","show_loading","ical","RegExp","c_start","c_end","incoming","event_r","e_start","e_end","exec","param","param_r","parse_param","parse_date","dh","dm","dn","UTC","_lightbox_controls","formSection","_lightbox","getLightbox","nextSibling","getValue","form_blocks","get_value","setValue","set_value","get_template_control","control","get_select_control","get_textarea_control","get_time_control","template","sns","textarea","_dhx_onchange","onchange","time","time_format","_time_format_order","cfg","dt","last","first","limit_time_select","p","time_option","year","tdate","_time_values","diff","_fill_lightbox_select","time_values","direct_value","fixed_value","value_found","t_v","selectedIndex","_full_day","wide_form","input","checked","disabled","auto_end_date","_update_lightbox_select","showCover","scroll_top","scroll_left","view_height","scrollWidth","show_cover","_fill_lightbox","lightbox_header","current_sns","block","default_value","_lightbox_out","_empty_lightbox","hide_lightbox","hideCover","hide_cover","_cover","_document_height","_scroll_height","save_lightbox","startLightbox","_custom_lightbox","_temp_lightbox","endLightbox","cancel_lightbox","_init_lightbox_events","index","sec","button_click","setLightboxSize","con","lightbox_additional_height","_init_dnd_events","_move_while_dnd","_finish_dnd","_dnd_start_lb","dhx_unselectable","lb","now","_lb_start","_ready_to_dnd","recurring","test","_lightbox_template","label_name","ds","t_ds","msPointerEnabled","_touch_events","pointerType","MSPOINTER_TYPE_MOUSE","touches","names","accessor","attachTouchEvent","element","check_direction_swipe","s_ev","e_ev","dx","drag_cancel","_hide_global_tip","timer","action_mode","scroll_mode","tracker","a_webkit","dblclicktime","_update_global_tip","fake_event","_block_next_stop","_show_global_tip","toptip","_global_tip","dp","_dp_hook_delete","_validId","_update_callback","upd","_set_event_text_style","_skin_settings","fix_tab_position","use_select_menu_space","_skin_xy","_configure","skin","links","href","set","minic","minicalendar","padding","_old_month_day","old_month_day","navline_divs","minical","jQuery","$","methods","fn","dhx_scheduler","views","each"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_active_links.js b/codebase/sources/ext/dhtmlxscheduler_active_links.js new file mode 100644 index 0000000..f8a55b9 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_active_links.js @@ -0,0 +1,43 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.config.active_link_view = "day"; +scheduler._active_link_click = function(e){ + var start = e.target || event.srcElement; + var to = start.getAttribute("jump_to"); + var s_d = scheduler.date.str_to_date(scheduler.config.api_date); + if (to) { + scheduler.setCurrentView(s_d(to), scheduler.config.active_link_view); + if (e && e.preventDefault) + e.preventDefault(); + return false; + } +}; +scheduler.attachEvent("onTemplatesReady", function() { + var do_wrapper = function(key, fullname){ + fullname = fullname || (key+"_scale_date"); + + if(!scheduler.templates['_active_links_old_'+ fullname]){ + scheduler.templates['_active_links_old_'+ fullname] = scheduler.templates[fullname]; + } + var week_x = scheduler.templates['_active_links_old_'+ fullname]; + var d_s = scheduler.date.date_to_str(scheduler.config.api_date); + scheduler.templates[fullname] = function(date) { + return "<a jump_to='" + d_s(date) + "' href='#'>" + week_x(date) + "</a>"; + }; + }; + + do_wrapper("week"); + do_wrapper("", "month_day"); + if (this.matrix){ + for (var key in this.matrix) + do_wrapper(key); + } + + this._detachDomEvent(this._obj, "click", scheduler._active_link_click); + dhtmlxEvent(this._obj, "click", scheduler._active_link_click); +});
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_active_links.js.map b/codebase/sources/ext/dhtmlxscheduler_active_links.js.map new file mode 100644 index 0000000..d1bc8a7 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_active_links.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_active_links.js.map","sources":["dhtmlxscheduler_active_links.js"],"names":["scheduler","config","active_link_view","_active_link_click","e","start","target","event","srcElement","to","getAttribute","s_d","date","str_to_date","api_date","setCurrentView","preventDefault","attachEvent","do_wrapper","key","fullname","templates","week_x","d_s","date_to_str","this","matrix","_detachDomEvent","_obj","dhtmlxEvent"],"mappings":"AAAAA,UAAUC,OAAOC,iBAAmB,MACpCF,UAAUG,mBAAqB,SAASC,GACvC,GAAIC,GAAQD,EAAEE,QAAUC,MAAMC,WAC1BC,EAAKJ,EAAMK,aAAa,WACxBC,EAAMX,UAAUY,KAAKC,YAAYb,UAAUC,OAAOa,SACtD,OAAIL,IACHT,UAAUe,eAAeJ,EAAIF,GAAKT,UAAUC,OAAOC,kBAC/CE,GAAKA,EAAEY,gBACVZ,EAAEY,kBACI,GAJR,QAODhB,UAAUiB,YAAY,mBAAoB,WACzC,GAAIC,GAAa,SAASC,EAAKC,GAC9BA,EAAWA,GAAaD,EAAI,cAExBnB,UAAUqB,UAAU,qBAAsBD,KAC7CpB,UAAUqB,UAAU,qBAAsBD,GAAYpB,UAAUqB,UAAUD,GAE3E;GAAIE,GAAStB,UAAUqB,UAAU,qBAAsBD,GACnDG,EAAMvB,UAAUY,KAAKY,YAAYxB,UAAUC,OAAOa,SACtDd,WAAUqB,UAAUD,GAAY,SAASR,GACxC,MAAO,eAAiBW,EAAIX,GAAQ,cAAgBU,EAAOV,GAAQ,QAMrE,IAFAM,EAAW,QACXA,EAAW,GAAI,aACXO,KAAKC,OACR,IAAK,GAAIP,KAAOM,MAAKC,OACpBR,EAAWC,EAGbM,MAAKE,gBAAgBF,KAAKG,KAAM,QAAS5B,UAAUG,oBACnD0B,YAAYJ,KAAKG,KAAM,QAAS5B,UAAUG"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_agenda_view.js b/codebase/sources/ext/dhtmlxscheduler_agenda_view.js new file mode 100644 index 0000000..18d791b --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_agenda_view.js @@ -0,0 +1,123 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.date.add_agenda = function(date){ + return scheduler.date.add(date, 1, "year"); +}; + +scheduler.templates.agenda_time = function(start,end,ev){ + if (ev._timed) + return this.day_date(ev.start_date, ev.end_date, ev)+" "+this.event_date(start); + else + return scheduler.templates.day_date(start)+" – "+scheduler.templates.day_date(end); +}; +scheduler.templates.agenda_text = function(start,end,event){ + return event.text; +}; +scheduler.templates.agenda_date = function(){ return ""; }; + +scheduler.date.agenda_start=function(){ return scheduler.date.date_part(scheduler._currentDate()); }; + +scheduler.attachEvent("onTemplatesReady",function() { + var old_dblclick_dhx_cal_data = scheduler.dblclick_dhx_cal_data; + scheduler.dblclick_dhx_cal_data = function() { + if (this._mode == "agenda") { + if (!this.config.readonly && this.config.dblclick_create) + this.addEventNow(); + } else { + if (old_dblclick_dhx_cal_data) + return old_dblclick_dhx_cal_data.apply(this, arguments); + } + }; + scheduler.attachEvent("onSchedulerResize",function(){ + if (this._mode == "agenda"){ + this.agenda_view(true); + return false; + } + return true; + }); + + + var old = scheduler.render_data; + scheduler.render_data=function(evs){ + if (this._mode == "agenda") + fill_agenda_tab(); + else + return old.apply(this,arguments); + }; + + var old_render_view_data = scheduler.render_view_data; + scheduler.render_view_data = function(){ + if(this._mode == "agenda") { + scheduler._agendaScrollTop = scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop; + scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop = 0; + } + return old_render_view_data.apply(this,arguments); + }; + + + function set_full_view(mode){ + if (mode){ + var l = scheduler.locale.labels; + scheduler._els["dhx_cal_header"][0].innerHTML="<div class='dhx_agenda_line'><div>"+l.date+"</div><span style='padding-left:25px'>"+l.description+"</span></div>"; + scheduler._table_view=true; + scheduler.set_sizes(); + } + } + + function fill_agenda_tab(){ + //get current date + var date = scheduler._date; + //select events for which data need to be printed + + var events = scheduler.get_visible_events(); + events.sort(function(a,b){ return a.start_date>b.start_date?1:-1;}); + + //generate html for the view + var html="<div class='dhx_agenda_area'>"; + for (var i=0; i<events.length; i++){ + var ev = events[i]; + var bg_color = (ev.color?("background:"+ev.color+";"):""); + var color = (ev.textColor?("color:"+ev.textColor+";"):""); + var ev_class = scheduler.templates.event_class(ev.start_date, ev.end_date, ev); + html+="<div class='dhx_agenda_line"+(ev_class?' '+ev_class:'')+"' event_id='"+ev.id+"' style='"+color+""+bg_color+""+(ev._text_style||"")+"'><div class='dhx_agenda_event_time'>"+scheduler.templates.agenda_time(ev.start_date, ev.end_date,ev)+"</div>"; + html+="<div class='dhx_event_icon icon_details'> </div>"; + html+="<span>"+scheduler.templates.agenda_text(ev.start_date, ev.end_date, ev)+"</span></div>"; + } + html+="<div class='dhx_v_border'></div></div>"; + + //render html + scheduler._els["dhx_cal_data"][0].innerHTML = html; + scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop = scheduler._agendaScrollTop||0; + + // setting up dhx_v_border size + var agenda_area = scheduler._els["dhx_cal_data"][0].childNodes[0]; + var v_border = agenda_area.childNodes[agenda_area.childNodes.length-1]; + v_border.style.height = (agenda_area.offsetHeight < scheduler._els["dhx_cal_data"][0].offsetHeight) ? "100%" : (agenda_area.offsetHeight+"px"); + + var t=scheduler._els["dhx_cal_data"][0].firstChild.childNodes; + scheduler._els["dhx_cal_date"][0].innerHTML=scheduler.templates.agenda_date(scheduler._min_date, scheduler._max_date, scheduler._mode); + + scheduler._rendered=[]; + for (var i=0; i < t.length-1; i++) + scheduler._rendered[i]=t[i]; + + } + + scheduler.agenda_view=function(mode){ + scheduler._min_date = scheduler.config.agenda_start||scheduler.date.agenda_start(scheduler._date); + scheduler._max_date = scheduler.config.agenda_end||scheduler.date.add_agenda(scheduler._min_date, 1); + scheduler._table_view = true; + set_full_view(mode); + if (mode){ + //agenda tab activated + fill_agenda_tab(); + } else { + //agenda tab de-activated + } + }; +}); diff --git a/codebase/sources/ext/dhtmlxscheduler_agenda_view.js.map b/codebase/sources/ext/dhtmlxscheduler_agenda_view.js.map new file mode 100644 index 0000000..c7e5d0b --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_agenda_view.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_agenda_view.js.map","sources":["dhtmlxscheduler_agenda_view.js"],"names":["scheduler","date","add_agenda","add","templates","agenda_time","start","end","ev","_timed","this","day_date","start_date","end_date","event_date","agenda_text","event","text","agenda_date","agenda_start","date_part","_currentDate","attachEvent","set_full_view","mode","l","locale","labels","_els","innerHTML","description","_table_view","set_sizes","fill_agenda_tab","events","_date","get_visible_events","sort","a","b","html","i","length","bg_color","color","textColor","ev_class","event_class","id","_text_style","childNodes","scrollTop","_agendaScrollTop","agenda_area","v_border","style","height","offsetHeight","t","firstChild","_min_date","_max_date","_mode","_rendered","old_dblclick_dhx_cal_data","dblclick_dhx_cal_data","config","readonly","dblclick_create","addEventNow","apply","arguments","agenda_view","old","render_data","old_render_view_data","render_view_data","agenda_end"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_all_timed.js b/codebase/sources/ext/dhtmlxscheduler_all_timed.js new file mode 100644 index 0000000..2bb81fe --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_all_timed.js @@ -0,0 +1,148 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function(){ + + scheduler.config.all_timed = "short"; + + var is_event_short = function (ev) { + return !((ev.end_date - ev.start_date)/(1000*60*60) >= 24); + }; + + // copy of usual events and recurring instances; + // regular copy causes problems with recurrings which have series event as a prototype + scheduler._safe_copy = function(event){ + var proto = null, + copy = null; + if(event.event_pid){ + proto = scheduler.getEvent(event.event_pid); + } + + if (proto && proto.isPrototypeOf(event)) { + copy = scheduler._copy_event(event); + delete copy.event_length; + delete copy.event_pid; + delete copy.rec_pattern; + delete copy.rec_type; + } else { + copy = scheduler._lame_clone(event); + } + return copy; + }; + + var old_prerender_events_line = scheduler._pre_render_events_line; + scheduler._pre_render_events_line = function(evs, hold){ + if (!this.config.all_timed) + return old_prerender_events_line.call(this, evs, hold); + + for (var i=0; i < evs.length; i++) { + var ev=evs[i]; + + if (ev._timed) + continue; + + if (this.config.all_timed == "short") { + if (!is_event_short(ev)) { + evs.splice(i--,1); + continue; + } + } + + var ce = this._safe_copy(ev); // current event (event for one specific day) is copy of original with modified dates + + ce.start_date = new Date(ce.start_date); // as lame copy doesn't copy date objects + + if (!isOvernightEvent(ev)) { + ce.end_date = new Date(ev.end_date); + } + else { + ce.end_date = getNextDay(ce.start_date); + if (this.config.last_hour != 24) { // if specific last_hour was set (e.g. 20) + ce.end_date = setDateTime(ce.start_date, this.config.last_hour); + } + } + + var event_changed = false; + if (ce.start_date < this._max_date && ce.end_date > this._min_date && ce.start_date < ce.end_date) { + evs[i] = ce; // adding another event in collection + event_changed = true; + } + // if (ce.start_date > ce.end_date) { + // evs.splice(i--,1); + // } + + var re = this._safe_copy(ev); // remaining event, copy of original with modified start_date (making range more narrow) + re.end_date = new Date(re.end_date); + if (re.start_date < this._min_date) + re.start_date = setDateTime(this._min_date, this.config.first_hour);// as we are starting only with whole hours + else + re.start_date = setDateTime(getNextDay(ev.start_date), this.config.first_hour); + + if (re.start_date < this._max_date && re.start_date < re.end_date) { + if (event_changed) + evs.splice(i+1,0,re);//insert part + else { + evs[i--] = re; + continue; + } + } + + } + // in case of all_timed pre_render is not applied to the original event + // so we need to force redraw in case of dnd + var redraw = (this._drag_mode == 'move')?false:hold; + return old_prerender_events_line.call(this, evs, redraw); + + + function isOvernightEvent(ev){ + var next_day = getNextDay(ev.start_date); + return (+ev.end_date > +next_day); + } + function getNextDay(date){ + var next_day = scheduler.date.add(date, 1, "day"); + next_day = scheduler.date.date_part(next_day); + return next_day; + } + function setDateTime(date, hours){ + var val = scheduler.date.date_part(new Date(date)); + val.setHours(hours); + return val; + } + }; + var old_get_visible_events = scheduler.get_visible_events; + scheduler.get_visible_events = function(only_timed){ + if (!(this.config.all_timed && this.config.multi_day)) + return old_get_visible_events.call(this, only_timed); + return old_get_visible_events.call(this, false); // only timed = false + }; + scheduler.attachEvent("onBeforeViewChange", function (old_mode, old_date, mode, date) { + scheduler._allow_dnd = (mode == "day" || mode == "week"); + return true; + }); + + scheduler._is_main_area_event = function(ev){ + return !!(ev._timed || this.config.all_timed === true || (this.config.all_timed == "short" && is_event_short(ev)) ); + }; + + var oldUpdate = scheduler.updateEvent; + scheduler.updateEvent = function(id){ + // full redraw(update_render=true) messes events order while dnd. + // individual redraw(update_render=false) of multiday event, which happens on select/unselect, expands event to full width of the cell and can be fixes only with full redraw. + // so for now full redraw is always enabled for not-dnd updates + var fullRedrawNeeded = (scheduler.config.all_timed && !(scheduler.isOneDayEvent(scheduler._events[id]) || scheduler.getState().drag_id)); + var initial; + if(fullRedrawNeeded){ + initial = scheduler.config.update_render; + scheduler.config.update_render = true; + } + oldUpdate.apply(scheduler, arguments); + + if(fullRedrawNeeded){ + scheduler.config.update_render = initial; + } + }; +})();
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_all_timed.js.map b/codebase/sources/ext/dhtmlxscheduler_all_timed.js.map new file mode 100644 index 0000000..e5589ea --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_all_timed.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_all_timed.js.map","sources":["dhtmlxscheduler_all_timed.js"],"names":["scheduler","config","all_timed","is_event_short","ev","end_date","start_date","_safe_copy","event","proto","copy","event_pid","getEvent","isPrototypeOf","_copy_event","event_length","rec_pattern","rec_type","_lame_clone","old_prerender_events_line","_pre_render_events_line","evs","hold","isOvernightEvent","next_day","getNextDay","date","add","date_part","setDateTime","hours","val","Date","setHours","this","call","i","length","_timed","ce","last_hour","event_changed","_max_date","_min_date","re","first_hour","splice","redraw","_drag_mode","old_get_visible_events","get_visible_events","only_timed","multi_day","attachEvent","old_mode","old_date","mode","_allow_dnd","_is_main_area_event","oldUpdate","updateEvent","id","initial","fullRedrawNeeded","isOneDayEvent","_events","getState","drag_id","update_render","apply","arguments"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_collision.js b/codebase/sources/ext/dhtmlxscheduler_collision.js new file mode 100644 index 0000000..ce79a4a --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_collision.js @@ -0,0 +1,131 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function(){ + +var temp_section; +var before; + +scheduler.config.collision_limit = 1; + +function _setTempSection(event_id) { // for custom views (matrix, timeline, units) + var checked_mode = scheduler._get_section_view(); + if(checked_mode && event_id){ + temp_section = scheduler.getEvent(event_id)[scheduler._get_section_property()]; + } +} + +scheduler.attachEvent("onBeforeDrag",function(id){ + _setTempSection(id); + return true; +}); +scheduler.attachEvent("onBeforeLightbox",function(id){ + var ev = scheduler.getEvent(id); + before = [ev.start_date, ev.end_date]; + _setTempSection(id); + return true; +}); +scheduler.attachEvent("onEventChanged",function(id){ + if (!id || !scheduler.getEvent(id)) return true; + var ev = scheduler.getEvent(id); + if (!scheduler.checkCollision(ev)){ + if (!before) return false; + ev.start_date = before[0]; + ev.end_date = before[1]; + ev._timed=this.isOneDayEvent(ev); + } + return true; +}); +scheduler.attachEvent("onBeforeEventChanged",function(ev,e,is_new){ + return scheduler.checkCollision(ev); +}); +scheduler.attachEvent("onEventAdded",function(id,ev) { + var result = scheduler.checkCollision(ev); + if (!result) + scheduler.deleteEvent(id); +}); +scheduler.attachEvent("onEventSave",function(id, edited_ev, is_new){ + edited_ev = scheduler._lame_clone(edited_ev); + edited_ev.id = id; + + //lightbox may not have 'time' section + if(!(edited_ev.start_date && edited_ev.end_date)){ + var ev = scheduler.getEvent(id); + edited_ev.start_date = new Date(ev.start_date); + edited_ev.end_date = new Date(ev.end_date); + } + + if(edited_ev.rec_type){ + scheduler._roll_back_dates(edited_ev); + } + return scheduler.checkCollision(edited_ev); // in case user creates event on one date but then edited it another +}); + +scheduler._check_sections_collision = function(first, second){ + var map_to = scheduler._get_section_property(); + if (first[map_to] == second[map_to] && first.id != second.id) + return true; + return false; +}; + +scheduler.checkCollision = function(ev) { + var evs = []; + var collision_limit = scheduler.config.collision_limit; + + if (ev.rec_type) { + var evs_dates = scheduler.getRecDates(ev); + for(var k=0; k<evs_dates.length; k++) { + var tevs = scheduler.getEvents(evs_dates[k].start_date, evs_dates[k].end_date); + for(var j=0; j<tevs.length; j++) { + if ((tevs[j].event_pid || tevs[j].id) != ev.id ) + evs.push(tevs[j]); + } + } + } else { + evs = scheduler.getEvents(ev.start_date, ev.end_date); + for (var i=0; i<evs.length; i++) { + if (evs[i].id == ev.id) { + evs.splice(i,1); + break; + } + } + } + + + var checked_mode = scheduler._get_section_view(); + var map_to = scheduler._get_section_property(); + + var single = true; + if (checked_mode) { // custom view + var count = 0; + + for (var i = 0; i < evs.length; i++){ + if (evs[i].id != ev.id && this._check_sections_collision(evs[i], ev)) + count++; + } + + if (count >= collision_limit) { + + single = false; + } + } + else { + if ( evs.length >= collision_limit ) + single = false; + } + if (!single) { + var res = !scheduler.callEvent("onEventCollision",[ev,evs]); + if (!res) { + ev[map_to] = temp_section||ev[map_to]; // from _setTempSection for custom views + } + return res; + } + return single; + +}; + +})(); diff --git a/codebase/sources/ext/dhtmlxscheduler_collision.js.map b/codebase/sources/ext/dhtmlxscheduler_collision.js.map new file mode 100644 index 0000000..033f96c --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_collision.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_collision.js.map","sources":["dhtmlxscheduler_collision.js"],"names":["_setTempSection","event_id","checked_mode","scheduler","_get_section_view","temp_section","getEvent","_get_section_property","before","config","collision_limit","attachEvent","id","ev","start_date","end_date","checkCollision","_timed","this","isOneDayEvent","result","deleteEvent","edited_ev","_lame_clone","Date","rec_type","_roll_back_dates","_check_sections_collision","first","second","map_to","evs","evs_dates","getRecDates","k","length","tevs","getEvents","j","event_pid","push","i","splice","single","count","res","callEvent"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js b/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js new file mode 100644 index 0000000..78bbcf3 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js @@ -0,0 +1,164 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function() { + + scheduler.config.container_autoresize = true; + scheduler.config.month_day_min_height = 90; + + var old_pre_render_event = scheduler._pre_render_events; + + scheduler._pre_render_events = function(evs, hold) { + if (!scheduler.config.container_autoresize) { + return old_pre_render_event.apply(this, arguments); + } + + var hb = this.xy.bar_height; + var h_old = this._colsS.heights; + var h = this._colsS.heights = [0, 0, 0, 0, 0, 0, 0]; + var data = this._els["dhx_cal_data"][0]; + + if (!this._table_view) + evs = this._pre_render_events_line(evs, hold); //ignore long events for now + else + evs = this._pre_render_events_table(evs, hold); + + if (this._table_view) { + if (hold){ + this._colsS.heights = h_old; + } else { + var evl = data.firstChild; + if (evl.rows) { + for (var i = 0; i < evl.rows.length; i++) { + h[i]++; + if ((h[i]) * hb > this._colsS.height - this.xy.month_head_height) { // 22 - height of cell's header + //we have overflow, update heights + var cells = evl.rows[i].cells; + + var cHeight = this._colsS.height - this.xy.month_head_height; + if(this.config.max_month_events*1 !== this.config.max_month_events || h[i] <= this.config.max_month_events){ + cHeight = h[i] * hb; + }else if( (this.config.max_month_events + 1) * hb > this._colsS.height - this.xy.month_head_height){ + cHeight = (this.config.max_month_events + 1) * hb; + } + + for (var j = 0; j < cells.length; j++) { + cells[j].childNodes[1].style.height = cHeight + "px"; + } + h[i] = (h[i - 1] || 0) + cells[0].offsetHeight; + } + h[i] = (h[i - 1] || 0) + evl.rows[i].cells[0].offsetHeight; + } + h.unshift(0); + if (evl.parentNode.offsetHeight < evl.parentNode.scrollHeight && !evl._h_fix) { + //we have v-scroll, decrease last day cell + + // NO CHECK SHOULD BE MADE ON VERTICAL SCROLL + } + } else { + if (!evs.length && this._els["dhx_multi_day"][0].style.visibility == "visible") + h[0] = -1; + if (evs.length || h[0] == -1) { + //shift days to have space for multiday events + var childs = evl.parentNode.childNodes; + var dh = ((h[0] + 1) * hb + 1) + "px"; // +1 so multiday events would have 2px from top and 2px from bottom by default + data.style.top = (this._els["dhx_cal_navline"][0].offsetHeight + this._els["dhx_cal_header"][0].offsetHeight + parseInt(dh, 10)) + 'px'; + data.style.height = (this._obj.offsetHeight - parseInt(data.style.top, 10) - (this.xy.margin_top || 0)) + 'px'; + var last = this._els["dhx_multi_day"][0]; + last.style.height = dh; + last.style.visibility = (h[0] == -1 ? "hidden" : "visible"); + last = this._els["dhx_multi_day"][1]; + last.style.height = dh; + last.style.visibility = (h[0] == -1 ? "hidden" : "visible"); + last.className = h[0] ? "dhx_multi_day_icon" : "dhx_multi_day_icon_small"; + this._dy_shift = (h[0] + 1) * hb; + h[0] = 0; + } + } + } + } + + return evs; + }; + + var checked_divs = ["dhx_cal_navline", "dhx_cal_header", "dhx_multi_day", "dhx_cal_data"]; + var updateContainterHeight = function(is_repaint) { + var total_height = 0; + for (var i = 0; i < checked_divs.length; i++) { + + var className = checked_divs[i]; + var checked_div = (scheduler._els[className]) ? scheduler._els[className][0] : null; + var height = 0; + switch (className) { + case "dhx_cal_navline": + case "dhx_cal_header": + height = parseInt(checked_div.style.height, 10); + break; + case "dhx_multi_day": + height = (checked_div) ? checked_div.offsetHeight : 0; + if (height == 1) + height = 0; + break; + case "dhx_cal_data": + height = Math.max(checked_div.offsetHeight - 1, checked_div.scrollHeight); + var mode = scheduler.getState().mode; + if (mode == "month") { + if (scheduler.config.month_day_min_height && !is_repaint) { + var rows_length = checked_div.getElementsByTagName("tr").length; + height = rows_length * scheduler.config.month_day_min_height; + } + if (is_repaint) { + checked_div.style.height = height + "px"; + } + } + if (scheduler.matrix && scheduler.matrix[mode]) { + if (is_repaint) { + height += 2; + checked_div.style.height = height + "px"; + } else { + height = 2; + var cfg = scheduler.matrix[mode]; + var rows = cfg.y_unit; + for(var r=0; r < rows.length; r++){ + height += !rows[r].children ? cfg.dy : (cfg.folder_dy||cfg.dy); + } + } + } + if (mode == "day" || mode == "week") { + height += 2; + } + break; + } + total_height += height; + } + scheduler._obj.style.height = (total_height) + "px"; + + if (!is_repaint) + scheduler.updateView(); + }; + + var conditionalUpdateContainerHeight = function() { + var mode = scheduler.getState().mode; + + updateContainterHeight(); + if ( (scheduler.matrix && scheduler.matrix[mode]) || mode == "month" ) { + window.setTimeout(function() { + updateContainterHeight(true); + }, 1); + } + }; + + scheduler.attachEvent("onViewChange", conditionalUpdateContainerHeight); + scheduler.attachEvent("onXLE", conditionalUpdateContainerHeight); + scheduler.attachEvent("onEventChanged", conditionalUpdateContainerHeight); + scheduler.attachEvent("onEventCreated", conditionalUpdateContainerHeight); + scheduler.attachEvent("onEventAdded", conditionalUpdateContainerHeight); + scheduler.attachEvent("onEventDeleted", conditionalUpdateContainerHeight); + scheduler.attachEvent("onAfterSchedulerResize", conditionalUpdateContainerHeight); + scheduler.attachEvent("onClearAll", conditionalUpdateContainerHeight); + +})();
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js.map b/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js.map new file mode 100644 index 0000000..207513a --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_container_autoresize.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_container_autoresize.js.map","sources":["dhtmlxscheduler_container_autoresize.js"],"names":["scheduler","config","container_autoresize","month_day_min_height","old_pre_render_event","_pre_render_events","evs","hold","apply","this","arguments","hb","xy","bar_height","h_old","_colsS","heights","h","data","_els","_table_view","_pre_render_events_table","_pre_render_events_line","evl","firstChild","rows","i","length","height","month_head_height","cells","cHeight","max_month_events","j","childNodes","style","offsetHeight","unshift","parentNode","scrollHeight","_h_fix","visibility","dh","top","parseInt","_obj","margin_top","last","className","_dy_shift","checked_divs","updateContainterHeight","is_repaint","total_height","checked_div","Math","max","mode","getState","rows_length","getElementsByTagName","matrix","cfg","y_unit","r","children","folder_dy","dy","updateView","conditionalUpdateContainerHeight","window","setTimeout","attachEvent"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_cookie.js b/codebase/sources/ext/dhtmlxscheduler_cookie.js new file mode 100644 index 0000000..4420e2b --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_cookie.js @@ -0,0 +1,73 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function(){ + function setCookie(name,cookie_param,value) { + var str = name + "=" + value + (cookie_param?("; "+cookie_param):""); + document.cookie = str; + } + function getCookie(name) { + var search = name + "="; + if (document.cookie.length > 0) { + var offset = document.cookie.indexOf(search); + if (offset != -1) { + offset += search.length; + var end = document.cookie.indexOf(";", offset); + if (end == -1) + end = document.cookie.length; + return document.cookie.substring(offset, end); + } + } + return ""; + } + var first = true; + scheduler.attachEvent("onBeforeViewChange",function(om,od,m,d){ + if (first){ + first = false; + + + + var data=getCookie("scheduler_settings"); + if (data){ + + if(!scheduler._min_date){ + //otherwise scheduler will have incorrect date until timeout + //it can cause js error with 'onMouseMove' handler of key_nav.js + scheduler._min_date = d; + } + + data = unescape(data).split("@"); + data[0] = this.templates.xml_date(data[0]); + var view = this.isViewExists(data[1]) ? data[1] : m, + date = !isNaN(+data[0]) ? data[0] : d; + + window.setTimeout(function(){ + scheduler.setCurrentView(date,view); + },1); + return false; + } + } + var text = escape(this.templates.xml_format(d||od)+"@"+(m||om)); + setCookie("scheduler_settings","expires=Sun, 31 Jan 9999 22:00:00 GMT",text); + return true; + }); + + + // As we are blocking first render above there could be a problem in case of dynamic loading ('from' won't be defined) + var old_load = scheduler._load; + scheduler._load = function() { + var args = arguments; + if (!scheduler._date && scheduler._load_mode) { + var that = this; + window.setTimeout(function() { + old_load.apply(that, args); + },1); + } else { + old_load.apply(this, args); + } + }; +})();
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_cookie.js.map b/codebase/sources/ext/dhtmlxscheduler_cookie.js.map new file mode 100644 index 0000000..5490213 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_cookie.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_cookie.js.map","sources":["dhtmlxscheduler_cookie.js"],"names":["setCookie","name","cookie_param","value","str","document","cookie","getCookie","search","length","offset","indexOf","end","substring","first","scheduler","attachEvent","om","od","m","d","data","_min_date","unescape","split","this","templates","xml_date","view","isViewExists","date","isNaN","window","setTimeout","setCurrentView","text","escape","xml_format","old_load","_load","args","arguments","_date","_load_mode","that","apply"],"mappings":"CAAA,WACC,QAASA,GAAUC,EAAKC,EAAaC,GACpC,GAAIC,GAAMH,EAAO,IAAME,GAAUD,EAAc,KAAKA,EAAc,GAClEG,UAASC,OAASF,EAEnB,QAASG,GAAUN,GAClB,GAAIO,GAASP,EAAO,GACpB,IAAII,SAASC,OAAOG,OAAS,EAAG,CAC/B,GAAIC,GAASL,SAASC,OAAOK,QAAQH,EACrC,IAAc,IAAVE,EAAc,CACjBA,GAAUF,EAAOC,MACjB,IAAIG,GAAMP,SAASC,OAAOK,QAAQ,IAAKD,EAGvC,OAFW,IAAPE,IACHA,EAAMP,SAASC,OAAOG,QAChBJ,SAASC,OAAOO,UAAUH,EAAQE,IAG3C,MAAO,GAER,GAAIE,IAAQ,CACZC,WAAUC,YAAY,qBAAqB,SAASC,EAAGC,EAAGC,EAAEC,GAC3D,GAAIN,EAAM,CACTA,GAAQ,CAIR,IAAIO,GAAKd,EAAU,qBACnB,IAAIc,EAAK,CAEJN,UAAUO,YAGbP,UAAUO,UAAYF,GAGvBC,EAAOE,SAASF,GAAMG,MAAM,KAC5BH,EAAK,GAAKI,KAAKC,UAAUC,SAASN,EAAK,GACvC;GAAIO,GAAOH,KAAKI,aAAaR,EAAK,IAAMA,EAAK,GAAKF,EACjDW,EAAQC,OAAOV,EAAK,IAAgBD,EAAVC,EAAK,EAKhC,OAHAW,QAAOC,WAAW,WACjBlB,UAAUmB,eAAeJ,EAAKF,IAC7B,IACK,GAGT,GAAIO,GAAOC,OAAOX,KAAKC,UAAUW,WAAWjB,GAAGF,GAAI,KAAKC,GAAGF,GAE3D,OADAjB,GAAU,qBAAqB,wCAAwCmC,IAChE,GAKR,IAAIG,GAAWvB,UAAUwB,KACzBxB,WAAUwB,MAAQ,WACjB,GAAIC,GAAOC,SACX,KAAK1B,UAAU2B,OAAS3B,UAAU4B,WAAY,CAC7C,GAAIC,GAAOnB,IACXO,QAAOC,WAAW,WACjBK,EAASO,MAAMD,EAAMJ,IACpB,OAEFF,GAASO,MAAMpB,KAAMe"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_editors.js b/codebase/sources/ext/dhtmlxscheduler_editors.js new file mode 100644 index 0000000..f088140 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_editors.js @@ -0,0 +1,161 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.form_blocks['combo']={ + render:function(sns) { + if (!sns.cached_options) + sns.cached_options = {}; + var res = ''; + res += "<div class='"+sns.type+"' style='height:"+(sns.height||20)+"px;' ></div>"; + return res; + }, + set_value:function(node,value,ev,config){ + (function(){ + resetCombo(); + var id = scheduler.attachEvent("onAfterLightbox",function(){ + // otherwise destructor will never be called after form reset(e.g. in readonly event mode) + resetCombo(); + scheduler.detachEvent(id); + }); + function resetCombo(){ + if(node._combo && node._combo.DOMParent) { + node._combo.destructor(); + } + } + })(); + window.dhx_globalImgPath = config.image_path||'/'; + node._combo = new dhtmlXCombo(node, config.name, node.offsetWidth-8); + if (config.onchange) + node._combo.attachEvent("onChange", config.onchange); + + if (config.options_height) + node._combo.setOptionHeight(config.options_height); + var combo = node._combo; + combo.enableFilteringMode(config.filtering, config.script_path||null, !!config.cache); + + if (!config.script_path) { // script-side filtration is used + var all_options = []; + for (var i = 0; i < config.options.length; i++) { + var option = config.options[i]; + var single_option = [ + option.key, + option.label, + option.css + ]; + all_options.push(single_option); + } + combo.addOption(all_options); + if (ev[config.map_to]) { + var index = combo.getIndexByValue(ev[config.map_to]); + combo.selectOption(index); + } + } else { // server-side filtration is used + var selected_id = ev[config.map_to]; + if (selected_id) { + if (config.cached_options[selected_id]) { + combo.addOption(selected_id, config.cached_options[selected_id]); + combo.disable(1); + combo.selectOption(0); + combo.disable(0); + } else { + dhtmlxAjax.get(config.script_path+"?id="+selected_id+"&uid="+scheduler.uid(), function(result){ + var option = result.doXPath("//option")[0]; + var label = option.childNodes[0].nodeValue; + config.cached_options[selected_id] = label; + combo.addOption(selected_id, label); + combo.disable(1); + combo.selectOption(0); + combo.disable(0); + }); + } + } else { + combo.setComboValue(""); + } + } + }, + get_value:function(node,ev,config) { + var selected_id = node._combo.getSelectedValue(); // value = key + if (config.script_path) { + config.cached_options[selected_id] = node._combo.getSelectedText(); + } + return selected_id; + }, + focus:function(node){ + } +}; + +scheduler.form_blocks['radio']={ + render:function(sns) { + var res = ''; + res += "<div class='dhx_cal_ltext dhx_cal_radio' style='height:"+sns.height+"px;' >"; + for (var i=0; i<sns.options.length; i++) { + var id = scheduler.uid(); + res += "<input id='"+id+"' type='radio' name='"+sns.name+"' value='"+sns.options[i].key+"'><label for='"+id+"'>"+" "+sns.options[i].label+"</label>"; + if(sns.vertical) + res += "<br/>"; + } + res += "</div>"; + + return res; + }, + set_value:function(node,value,ev,config){ + var radiobuttons = node.getElementsByTagName('input'); + for (var i = 0; i < radiobuttons.length; i++) { + radiobuttons[i].checked = false; + var checked_value = ev[config.map_to]||value; + if (radiobuttons[i].value == checked_value) { + radiobuttons[i].checked = true; + } + } + }, + get_value:function(node,ev,config){ + var radiobuttons = node.getElementsByTagName('input'); + for(var i=0; i<radiobuttons.length; i++) { + if(radiobuttons[i].checked) { + return radiobuttons[i].value; + } + } + }, + focus:function(node){ + } +}; + +scheduler.form_blocks['checkbox']={ + render:function(sns) { + if (scheduler.config.wide_form) + return '<div class="dhx_cal_wide_checkbox" '+(sns.height?("style='height:"+sns.height+"px;'"):"")+'></div>'; + else + return ''; + }, + set_value:function(node,value,ev,config){ + node=document.getElementById(config.id); + var id = scheduler.uid(); + var isChecked = (typeof config.checked_value != "undefined") ? value == config.checked_value : !!value; + node.className += " dhx_cal_checkbox"; + var check_html = "<input id='"+id+"' type='checkbox' value='true' name='"+config.name+"'"+((isChecked)?"checked='true'":'')+"'>"; + var label_html = "<label for='"+id+"'>"+(scheduler.locale.labels["section_"+config.name]||config.name)+"</label>"; + if (scheduler.config.wide_form){ + node.innerHTML = label_html; + node.nextSibling.innerHTML=check_html; + } else + node.innerHTML=check_html+label_html; + + if (config.handler) { + var checkbox = node.getElementsByTagName('input')[0]; + checkbox.onclick = config.handler; + } + }, + get_value:function(node,ev,config){ + node=document.getElementById(config.id); + var checkbox = node.getElementsByTagName('input')[0]; // moved to the header + if (!checkbox) + checkbox = node.nextSibling.getElementsByTagName('input')[0]; + return (checkbox.checked)?(config.checked_value||true):(config.unchecked_value||false); + }, + focus:function(node){ + } +}; diff --git a/codebase/sources/ext/dhtmlxscheduler_editors.js.map b/codebase/sources/ext/dhtmlxscheduler_editors.js.map new file mode 100644 index 0000000..1980416 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_editors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_editors.js.map","sources":["dhtmlxscheduler_editors.js"],"names":["scheduler","form_blocks","render","sns","cached_options","res","type","height","set_value","node","value","ev","config","resetCombo","_combo","DOMParent","destructor","id","attachEvent","detachEvent","window","dhx_globalImgPath","image_path","dhtmlXCombo","name","offsetWidth","onchange","options_height","setOptionHeight","combo","enableFilteringMode","filtering","script_path","cache","selected_id","map_to","addOption","disable","selectOption","dhtmlxAjax","get","uid","result","option","doXPath","label","childNodes","nodeValue","setComboValue","all_options","i","options","length","single_option","key","css","push","index","getIndexByValue","get_value","getSelectedValue","getSelectedText","focus","vertical","radiobuttons","getElementsByTagName","checked","checked_value","wide_form","document","getElementById","isChecked","className","check_html","label_html","locale","labels","innerHTML","nextSibling","handler","checkbox","onclick","unchecked_value"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_expand.js b/codebase/sources/ext/dhtmlxscheduler_expand.js new file mode 100644 index 0000000..2a5a4b8 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_expand.js @@ -0,0 +1,76 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.expand = function() { + var t = scheduler._obj; + do { + t._position = t.style.position || ""; + t.style.position = "static"; + } while ((t = t.parentNode) && t.style); + t = scheduler._obj; + t.style.position = "absolute"; + t._width = t.style.width; + t._height = t.style.height; + t.style.width = t.style.height = "100%"; + t.style.top = t.style.left = "0px"; + + var top = document.body; + top.scrollTop = 0; + + top = top.parentNode; + if (top) + top.scrollTop = 0; + document.body._overflow = document.body.style.overflow || ""; + document.body.style.overflow = "hidden"; + scheduler._maximize(); +}; +scheduler.collapse = function() { + var t = scheduler._obj; + do { + t.style.position = t._position; + } while ((t = t.parentNode) && t.style); + t = scheduler._obj; + t.style.width = t._width; + t.style.height = t._height; + document.body.style.overflow = document.body._overflow; + scheduler._maximize(); +}; +scheduler.attachEvent("onTemplatesReady", function() { + var t = document.createElement("DIV"); + t.className = "dhx_expand_icon"; + scheduler.toggleIcon = t; + scheduler._obj.appendChild(t); + t.onclick = function() { + if (!scheduler.expanded) + scheduler.expand(); else + scheduler.collapse(); + }; +}); +scheduler._maximize = function() { + this.expanded = !this.expanded; + this.toggleIcon.style.backgroundPosition = "0 " + (this.expanded ? "0" : "18") + "px"; + + var directions = ['left', 'top']; + for (var i = 0; i < directions.length; i++) { + var margin = scheduler.xy['margin_' + directions[i]]; + var prev_margin = scheduler['_prev_margin_' + directions[i]]; + if (scheduler.xy['margin_' + directions[i]]) { + scheduler['_prev_margin_' + directions[i]] = scheduler.xy['margin_' + directions[i]]; + scheduler.xy['margin_' + directions[i]] = 0; + } else { + if (prev_margin) { + scheduler.xy['margin_' + directions[i]] = scheduler['_prev_margin_' + directions[i]]; + delete scheduler['_prev_margin_' + directions[i]]; + } + } + } + + if (scheduler.callEvent("onSchedulerResize", [])) { + scheduler.update_view(); + scheduler.callEvent("onAfterSchedulerResize"); + } +}; diff --git a/codebase/sources/ext/dhtmlxscheduler_expand.js.map b/codebase/sources/ext/dhtmlxscheduler_expand.js.map new file mode 100644 index 0000000..7c67fd4 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_expand.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_expand.js.map","sources":["dhtmlxscheduler_expand.js"],"names":["scheduler","expand","t","_obj","_position","style","position","parentNode","_width","width","_height","height","top","left","document","body","scrollTop","_overflow","overflow","_maximize","collapse","attachEvent","createElement","className","toggleIcon","appendChild","onclick","expanded","this","backgroundPosition","directions","i","length","prev_margin","xy","callEvent","update_view"],"mappings":"AAAAA,UAAUC,OAAS,WAClB,GAAIC,GAAIF,UAAUG,IAClB,GACCD,GAAEE,UAAYF,EAAEG,MAAMC,UAAY,GAClCJ,EAAEG,MAAMC,SAAW,gBACVJ,EAAIA,EAAEK,aAAeL,EAAEG,MACjCH,GAAIF,UAAUG,KACdD,EAAEG,MAAMC,SAAW,WACnBJ,EAAEM,OAASN,EAAEG,MAAMI,MACnBP,EAAEQ,QAAUR,EAAEG,MAAMM,OACpBT,EAAEG,MAAMI,MAAQP,EAAEG,MAAMM,OAAS,OACjCT,EAAEG,MAAMO,IAAMV,EAAEG,MAAMQ,KAAO,KAE7B,IAAID,GAAME,SAASC,IACnBH,GAAII,UAAY,EAEhBJ,EAAMA,EAAIL,WACNK,IACHA,EAAII,UAAY,GACjBF,SAASC,KAAKE,UAAYH,SAASC,KAAKV,MAAMa,UAAY,GAC1DJ,SAASC,KAAKV,MAAMa,SAAW,SAC/BlB,UAAUmB,aAEXnB,UAAUoB,SAAW,WACpB,GAAIlB,GAAIF,UAAUG,IAClB;EACCD,GAAEG,MAAMC,SAAWJ,EAAEE,iBACZF,EAAIA,EAAEK,aAAeL,EAAEG,MACjCH,GAAIF,UAAUG,KACdD,EAAEG,MAAMI,MAAQP,EAAEM,OAClBN,EAAEG,MAAMM,OAAST,EAAEQ,QACnBI,SAASC,KAAKV,MAAMa,SAAWJ,SAASC,KAAKE,UAC7CjB,UAAUmB,aAEXnB,UAAUqB,YAAY,mBAAoB,WACzC,GAAInB,GAAIY,SAASQ,cAAc,MAC/BpB,GAAEqB,UAAY,kBACdvB,UAAUwB,WAAatB,EACvBF,UAAUG,KAAKsB,YAAYvB,GAC3BA,EAAEwB,QAAU,WACN1B,UAAU2B,SAEd3B,UAAUoB,WADVpB,UAAUC,YAIbD,UAAUmB,UAAY,WACrBS,KAAKD,UAAYC,KAAKD,SACtBC,KAAKJ,WAAWnB,MAAMwB,mBAAqB,MAAQD,KAAKD,SAAW,IAAM,MAAQ,IAGjF;IAAK,GADDG,IAAc,OAAQ,OACjBC,EAAI,EAAGA,EAAID,EAAWE,OAAQD,IAAK,CAC3C,GACIE,IADSjC,UAAUkC,GAAG,UAAYJ,EAAWC,IAC/B/B,UAAU,gBAAkB8B,EAAWC,IACrD/B,WAAUkC,GAAG,UAAYJ,EAAWC,KACvC/B,UAAU,gBAAkB8B,EAAWC,IAAM/B,UAAUkC,GAAG,UAAYJ,EAAWC,IACjF/B,UAAUkC,GAAG,UAAYJ,EAAWC,IAAM,GAEtCE,IACHjC,UAAUkC,GAAG,UAAYJ,EAAWC,IAAM/B,UAAU,gBAAkB8B,EAAWC,UAC1E/B,WAAU,gBAAkB8B,EAAWC,KAK7C/B,UAAUmC,UAAU,0BACvBnC,UAAUoC,cACVpC,UAAUmC,UAAU"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_grid_view.js b/codebase/sources/ext/dhtmlxscheduler_grid_view.js new file mode 100644 index 0000000..d1e7c47 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_grid_view.js @@ -0,0 +1,483 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function(){ + scheduler._grid = { + sort_rules:{ + "int":function(a,b, getVal){ return getVal(a)*1 < getVal(b)*1?1:-1; }, + "str":function(a,b, getVal){ return getVal(a) < getVal(b)?1:-1; }, + "date":function(a,b, getVal){ return new Date(getVal(a))< new Date(getVal(b))?1:-1; } + }, + _getObjName:function(name){ + return "grid_"+name; + }, + _getViewName:function(objName){ + return objName.replace(/^grid_/,''); + } + }; +} +)(); +/* +obj={ + name:'grid_name' + fields:[ + { id:"id", label:"Id", width:80, sort:"int/date/str", template:function(start_date, end_date, ev){ return ""}, align:"right/left/center" }, + { id:"text", label:"Text", width:'*', css:"class_name", sort:function(a,b){ return 1 or -1}, valign:'top/bottom/middle' } + ... + ], + from:new Date(0), + to:Date:new Date(9999,1,1), + rowHeight:int, + paging:true/false, + select:true/false +} +*/ + + +scheduler.createGridView=function(obj){ + + var name = obj.name || 'grid'; + var objName = scheduler._grid._getObjName(name); + + scheduler.config[name + '_start'] = obj.from || (new Date(0)); + scheduler.config[name + '_end'] = obj.to || (new Date(9999,1,1)); + + scheduler[objName] = obj; + scheduler[objName].defPadding = 8; + scheduler[objName].columns = scheduler[objName].fields; + scheduler[objName].unit = obj.unit || "month"; + scheduler[objName].step = obj.step || 1; + delete scheduler[objName].fields; + function isValidSize(size){ + return !(size !== undefined && (size*1 != size || size < 0)); + } + + var cols = scheduler[objName].columns; + for(var i=0; i < cols.length; i++){ + if(isValidSize(cols[i].width)) + cols[i].initialWidth = cols[i].width; + if(!isValidSize(cols[i].paddingLeft)) + delete cols[i].paddingLeft; + if(!isValidSize(cols[i].paddingRight)) + delete cols[i].paddingRight; + } + + scheduler[objName].select = obj.select === undefined ? true : obj.select; + if(scheduler.locale.labels[name +'_tab'] === undefined) + scheduler.locale.labels[name +'_tab'] = scheduler[objName].label || scheduler.locale.labels.grid_tab; + + scheduler[objName]._selected_divs = []; + + scheduler.date[name+'_start']=function(d){ + if(scheduler.date[obj.unit+'_start']) + return scheduler.date[obj.unit+'_start'](d); + else + return (d); + }; + scheduler.date['add_' + name] = function(date, inc){ + return scheduler.date.add(date, inc*scheduler[objName].step, scheduler[objName].unit); + }; + + scheduler.templates[name+"_date"] = function(start, end){ + return scheduler.templates.day_date(start)+" - "+scheduler.templates.day_date(end); + }; + scheduler.templates[name + '_full_date'] = function(start,end,ev){ + if (scheduler.isOneDayEvent(ev)) + return this[name + '_single_date'](start); + else + return scheduler.templates.day_date(start)+" – "+scheduler.templates.day_date(end); + }; + scheduler.templates[name + '_single_date'] = function(date){ + return scheduler.templates.day_date(date)+" "+this.event_date(date); + }; + scheduler.templates[name + '_field'] = function(field_name, event){ + return event[field_name]; + }; + + scheduler.attachEvent("onTemplatesReady",function(){ + + scheduler.attachEvent("onDblClick",function(event_id, native_event_object){ + if(this._mode == name){ + scheduler._click.buttons['details'](event_id); + return false; + } + return true; + }); + + scheduler.attachEvent("onClick",function(event_id, native_event_object){ + if(this._mode == name && scheduler[objName].select ){ + scheduler._grid.unselectEvent('', name); + scheduler._grid.selectEvent(event_id, name, native_event_object); + return false; + } + return true; + }); + + scheduler.attachEvent("onSchedulerResize", function() { + if (this._mode == name) { + this[name + '_view'](true); + // timeout used to run code after all onSchedulerResize handlers are finished + window.setTimeout(function(){ + // we need to call event manually because handler return false, and blocks default logic + scheduler.callEvent("onAfterSchedulerResize", []); + },1); + return false; + } + return true; + }); + + + var old = scheduler.render_data; + scheduler.render_data=function(evs){ + if (this._mode == name) + scheduler._grid._fill_grid_tab(objName); + else + return old.apply(this,arguments); + }; + + var old_render_view_data = scheduler.render_view_data; + scheduler.render_view_data=function(){ + if(this._mode == name) { + scheduler._grid._gridScrollTop = scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop; + scheduler._els["dhx_cal_data"][0].childNodes[0].scrollTop = 0; + scheduler._els["dhx_cal_data"][0].style.overflowY = 'auto'; + } + else { + scheduler._els["dhx_cal_data"][0].style.overflowY = 'auto'; + } + return old_render_view_data.apply(this,arguments); + }; +}); + + + scheduler[name+'_view']=function(mode){ + if (mode){ + var min = null, + max = null; + var view = scheduler[objName]; + if(view.paging){ + min = scheduler.date[name+'_start'](new Date(scheduler._date)); + max = scheduler.date['add_'+name](min, 1); + }else{ + min = scheduler.config[name + '_start']; + max = scheduler.config[name + '_end']; + } + + scheduler._min_date = min; + scheduler._max_date = max; + + scheduler._grid.set_full_view(objName); + + var header = ""; + if(+min > +new Date(0) && +max < +(new Date(9999,1,1))) + header = scheduler.templates[name+"_date"](min, max); + + scheduler._els["dhx_cal_date"][0].innerHTML = header; + + //grid tab activated + scheduler._gridView = objName; + } else { + scheduler._grid._sort_marker = null; + delete scheduler._gridView; + scheduler._rendered=[]; + scheduler[objName]._selected_divs = []; + //grid tab de-activated + } + }; + + +}; + + +scheduler.dblclick_dhx_grid_area=function(){ + if (!this.config.readonly && this.config.dblclick_create) + this.addEventNow(); +}; + +if(scheduler._click.dhx_cal_header){ + scheduler._old_header_click = scheduler._click.dhx_cal_header; +} +scheduler._click.dhx_cal_header=function(e){ + if(scheduler._gridView){ + var event = e||window.event; + var params = scheduler._grid.get_sort_params(event, scheduler._gridView); + + scheduler._grid.draw_sort_marker(event.originalTarget || event.srcElement, params.dir); + + scheduler.clear_view(); + scheduler._grid._fill_grid_tab(scheduler._gridView, params); + } + else if(scheduler._old_header_click) + return scheduler._old_header_click.apply(this,arguments); +}; + +scheduler._grid.selectEvent = function(id, view_name, native_event_object){ + if(scheduler.callEvent("onBeforeRowSelect",[id,native_event_object])){ + var objName = scheduler._grid._getObjName(view_name); + + scheduler.for_rendered(id, function(event_div){ + event_div.className += " dhx_grid_event_selected"; + scheduler[objName]._selected_divs.push(event_div); + }); + scheduler._select_id = id; + } +}; + +scheduler._grid._unselectDiv= function(div){ + div.className = div.className.replace(/ dhx_grid_event_selected/,''); +}; +scheduler._grid.unselectEvent = function(id, view_name){ + var objName = scheduler._grid._getObjName(view_name); + if(!objName || !scheduler[objName]._selected_divs) + return; + + if(!id){ + for(var i=0; i<scheduler[objName]._selected_divs.length; i++) + scheduler._grid._unselectDiv(scheduler[objName]._selected_divs[i]); + + scheduler[objName]._selected_divs = []; + + }else{ + for(var i=0; i<scheduler[objName]._selected_divs.length; i++) + if(scheduler[objName]._selected_divs[i].getAttribute('event_id') == id){ + scheduler._grid._unselectDiv(scheduler[objName]._selected_divs[i]); + scheduler[objName]._selected_divs.slice(i,1); + break; + } + + } +}; + +scheduler._grid.get_sort_params = function(event, objName){ + var targ = event.originalTarget || event.srcElement; + var direction = "desc"; + if(targ.className == 'dhx_grid_view_sort') + targ = targ.parentNode; + if(!targ.className || targ.className.indexOf("dhx_grid_sort_asc") == -1) + direction = 'asc'; + + var index = 0; + for(var i =0; i < targ.parentNode.childNodes.length; i++){ + if(targ.parentNode.childNodes[i] == targ){ + index = i; + break; + } + } + + var value = null; + if(scheduler[objName].columns[index].template){ + var template = scheduler[objName].columns[index].template; + value = function(ev){ + return template(ev.start_date, ev.end_date, ev); + }; + }else{ + var field = scheduler[objName].columns[index].id; + if(field == "date") + field = "start_date"; + value = function(ev){ return ev[field]; }; + } + + var rule = scheduler[objName].columns[index].sort; + + if(typeof rule != 'function'){ + rule = scheduler._grid.sort_rules[rule] || scheduler._grid.sort_rules['str']; + } + + return {dir:direction, value:value, rule:rule}; +}; + +scheduler._grid.draw_sort_marker = function(node, direction){ + if(node.className == 'dhx_grid_view_sort') + node = node.parentNode; + + if(scheduler._grid._sort_marker){ + scheduler._grid._sort_marker.className = scheduler._grid._sort_marker.className.replace(/( )?dhx_grid_sort_(asc|desc)/, ''); + scheduler._grid._sort_marker.removeChild(scheduler._grid._sort_marker.lastChild); + } + + node.className += " dhx_grid_sort_"+direction; + scheduler._grid._sort_marker = node; + var html = "<div class='dhx_grid_view_sort' style='left:"+(+node.style.width.replace('px','') -15+node.offsetLeft)+"px'> </div>"; + node.innerHTML += html; + +}; + +scheduler._grid.sort_grid=function(sort){ + + var sort = sort || {dir:'desc', value:function(ev){return ev.start_date;}, rule:scheduler._grid.sort_rules['date']}; + + var events = scheduler.get_visible_events(); + + if(sort.dir == 'desc') + events.sort(function(a,b){return sort.rule(a,b,sort.value);}); + else + events.sort(function(a,b){return -sort.rule(a,b, sort.value);}); + return events; +}; + + + +scheduler._grid.set_full_view = function(mode){ + if (mode){ + var l = scheduler.locale.labels; + var html =scheduler._grid._print_grid_header(mode); + + scheduler._els["dhx_cal_header"][0].innerHTML= html; + scheduler._table_view=true; + scheduler.set_sizes(); + } +}; +scheduler._grid._calcPadding = function(column, parent){ + var padding = (column.paddingLeft !== undefined ? 1*column.paddingLeft : scheduler[parent].defPadding) + + (column.paddingRight !== undefined ? 1*column.paddingRight : scheduler[parent].defPadding); + return padding; +}; + +scheduler._grid._getStyles = function(column, items){ + var cell_style = [], style = ""; + for(var i=0; items[i]; i++ ){ + style = items[i] + ":"; + switch (items[i]){ + case "text-align": + if(column.align) + cell_style.push(style+column.align); + break; + case "vertical-align": + if(column.valign) + cell_style.push(style+column.valign); + break; + case "padding-left": + if(column.paddingLeft !== undefined) + cell_style.push(style+(column.paddingLeft||'0') + "px"); + break; + case "padding-right": + if(column.paddingRight !== undefined) + cell_style.push(style+(column.paddingRight||'0') + "px"); + break; + } + } + return cell_style; +}; + +scheduler._grid._fill_grid_tab = function(objName, sort){ + //get current date + var date = scheduler._date; + //select events for which data need to be printed + var events = scheduler._grid.sort_grid(sort); + + //generate html for the view + var columns = scheduler[objName].columns; + + var html = "<div>"; + var left = -2;//column borders at the same pos as header borders... + for(var i=0; i < columns.length; i++){ + var padding = scheduler._grid._calcPadding(columns[i], objName); + left +=columns[i].width + padding ;// + if(i < columns.length - 1) + html += "<div class='dhx_grid_v_border' style='left:"+(left)+"px'></div>"; + } + html += "</div>"; + html +="<div class='dhx_grid_area'><table>"; + + for (var i=0; i<events.length; i++){ + html += scheduler._grid._print_event_row(events[i], objName); + } + + html +="</table></div>"; + //render html + scheduler._els["dhx_cal_data"][0].innerHTML = html; + scheduler._els["dhx_cal_data"][0].scrollTop = scheduler._grid._gridScrollTop||0; + + var t=scheduler._els["dhx_cal_data"][0].getElementsByTagName("tr"); + + scheduler._rendered=[]; + for (var i=0; i < t.length; i++){ + scheduler._rendered[i]=t[i]; + } + +}; +scheduler._grid._print_event_row = function(ev, objName){ + + var styles = []; + if(ev.color) + styles.push("background:"+ev.color); + if(ev.textColor) + styles.push("color:"+ev.textColor); + if(ev._text_style) + styles.push(ev._text_style); + if(scheduler[objName]['rowHeight']) + styles.push('height:'+scheduler[objName]['rowHeight'] + 'px'); + + var style = ""; + if(styles.length){ + style = "style='"+styles.join(";")+"'"; + } + + var columns = scheduler[objName].columns; + var ev_class = scheduler.templates.event_class(ev.start_date, ev.end_date, ev); + + var html ="<tr class='dhx_grid_event"+(ev_class? ' '+ev_class:'')+"' event_id='"+ev.id+"' " + style + ">"; + + var name = scheduler._grid._getViewName(objName); + var availStyles = ["text-align", "vertical-align", "padding-left","padding-right"]; + for(var i =0; i < columns.length; i++){ + var value; + if(columns[i].template){ + value = columns[i].template(ev.start_date, ev.end_date, ev); + }else if(columns[i].id == 'date') { + value = scheduler.templates[name + '_full_date'](ev.start_date, ev.end_date, ev); + }else if(columns[i].id == 'start_date' || columns[i].id == 'end_date' ){ + value = scheduler.templates[name + '_single_date'](ev[columns[i].id]); + }else{ + value = scheduler.templates[name + '_field'](columns[i].id, ev); + } + + var cell_style = scheduler._grid._getStyles(columns[i], availStyles); + + var className = columns[i].css ? (" class=\""+columns[i].css+"\"") : ""; + + html+= "<td style='width:"+ (columns[i].width )+"px;"+cell_style.join(";")+"' "+className+">"+value+"</td>"; + + } + html+="<td class='dhx_grid_dummy'></td></tr>"; + + return html; +}; + +scheduler._grid._print_grid_header = function(objName){ + var head = "<div class='dhx_grid_line'>"; + + var columns = scheduler[objName].columns; + var widths = []; + + var unsized_columns = columns.length; + var avail_width = scheduler._obj.clientWidth - 2*columns.length -20;//-20 for possible scrollbar, -length for borders + for(var ind=0; ind < columns.length; ind++){ + + var val = columns[ind].initialWidth*1; + if(!isNaN(val) && columns[ind].initialWidth !== '' && columns[ind].initialWidth !== null && typeof columns[ind].initialWidth != 'boolean'){ + + unsized_columns--; + avail_width -= val; + widths[ind] = val; + }else { + widths[ind] = null; + } + } + + var unsized_width = Math.floor(avail_width / unsized_columns); + var availStyles = ["text-align", "padding-left","padding-right"]; + for(var i=0; i < columns.length; i++){ + var column_width = !widths[i] ? unsized_width : widths[i]; + columns[i].width = column_width - scheduler._grid._calcPadding(columns[i], objName); + var cell_style = scheduler._grid._getStyles(columns[i], availStyles); + head += "<div style='width:"+(columns[i].width -1)+"px;"+cell_style.join(";")+"'>" + (columns[i].label === undefined ? columns[i].id : columns[i].label) + "</div>"; + } + head +="</div>"; + + return head; +}; diff --git a/codebase/sources/ext/dhtmlxscheduler_grid_view.js.map b/codebase/sources/ext/dhtmlxscheduler_grid_view.js.map new file mode 100644 index 0000000..f0f702b --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_grid_view.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_grid_view.js.map","sources":["dhtmlxscheduler_grid_view.js"],"names":["scheduler","_grid","sort_rules","int","a","b","getVal","str","date","Date","_getObjName","name","_getViewName","objName","replace","createGridView","obj","isValidSize","size","undefined","config","from","to","defPadding","columns","fields","unit","step","cols","i","length","width","initialWidth","paddingLeft","paddingRight","select","locale","labels","label","grid_tab","_selected_divs","d","inc","add","templates","start","end","day_date","ev","isOneDayEvent","this","event_date","field_name","event","attachEvent","event_id","_mode","_click","buttons","native_event_object","unselectEvent","selectEvent","window","setTimeout","callEvent","old","render_data","apply","arguments","_fill_grid_tab","old_render_view_data","render_view_data","_gridScrollTop","_els","childNodes","scrollTop","style","overflowY","mode","min","max","view","paging","_date","_min_date","_max_date","set_full_view","header","innerHTML","_gridView","_sort_marker","_rendered","dblclick_dhx_grid_area","readonly","dblclick_create","addEventNow","dhx_cal_header","_old_header_click","e","params","get_sort_params","draw_sort_marker","originalTarget","srcElement","dir","clear_view","id","view_name","for_rendered","event_div","className","push","_select_id","_unselectDiv","div","getAttribute","slice","targ","direction","parentNode","indexOf","index","value","template","start_date","end_date","field","rule","sort","node","removeChild","lastChild","html","offsetLeft","sort_grid","events","get_visible_events","_print_grid_header","_table_view","set_sizes","_calcPadding","column","parent","padding","_getStyles","items","cell_style","align","valign","left","_print_event_row","t","getElementsByTagName","styles","color","textColor","_text_style","join","ev_class","event_class","availStyles","css","head","widths","unsized_columns","avail_width","_obj","clientWidth","ind","val","isNaN","unsized_width","Math","floor","column_width"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_html_templates.js b/codebase/sources/ext/dhtmlxscheduler_html_templates.js new file mode 100644 index 0000000..713c6d4 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_html_templates.js @@ -0,0 +1,22 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onTemplatesReady",function(){ + var els = document.body.getElementsByTagName("DIV"); + for (var i=0; i < els.length; i++) { + var cs = els[i].className||""; + cs = cs.split(":"); + if (cs.length == 2 && cs[0] == "template"){ + var code = "return \""+(els[i].innerHTML||"").replace(/\"/g,"\\\"").replace(/[\n\r]+/g,"")+"\";"; + code = unescape(code).replace(/\{event\.([a-z]+)\}/g,function(all,mask){ + return '"+ev.'+mask+'+"'; + }); + scheduler.templates[cs[1]]=Function("start","end","ev",code); + els[i].style.display='none'; + } + } +});
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_html_templates.js.map b/codebase/sources/ext/dhtmlxscheduler_html_templates.js.map new file mode 100644 index 0000000..e10ce27 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_html_templates.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_html_templates.js.map","sources":["dhtmlxscheduler_html_templates.js"],"names":["scheduler","attachEvent","els","document","body","getElementsByTagName","i","length","cs","className","split","code","innerHTML","replace","unescape","all","mask","templates","Function","style","display"],"mappings":"AAAAA,UAAUC,YAAY,mBAAmB,WAExC,IAAK,GADDC,GAAMC,SAASC,KAAKC,qBAAqB,OACpCC,EAAE,EAAGA,EAAIJ,EAAIK,OAAQD,IAAK,CAClC,GAAIE,GAAKN,EAAII,GAAGG,WAAW,EAE3B,IADAD,EAAKA,EAAGE,MAAM,KACG,GAAbF,EAAGD,QAAwB,YAATC,EAAG,GAAiB,CACzC,GAAIG,GAAO,YAAaT,EAAII,GAAGM,WAAW,IAAIC,QAAQ,MAAM,OAAQA,QAAQ,WAAW,IAAI,IAC3FF,GAAOG,SAASH,GAAME,QAAQ,uBAAuB,SAASE,EAAIC,GACjE,MAAO,QAAQA,EAAK,OAErBhB,UAAUiB,UAAUT,EAAG,IAAIU,SAAS,QAAQ,MAAM,KAAKP,GACvDT,EAAII,GAAGa,MAAMC,QAAQ"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_key_nav.js b/codebase/sources/ext/dhtmlxscheduler_key_nav.js new file mode 100644 index 0000000..33fb417 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_key_nav.js @@ -0,0 +1,115 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +//Initial idea and implementation by Steve MC +scheduler._temp_key_scope = function (){ + +scheduler.config.key_nav = true; + +var date; // used for copy and paste operations +var section; // used for copy and paste operations +var isCopy = null; + + +scheduler.attachEvent("onMouseMove", function(id,e){ + date = scheduler.getActionData(e).date; + section = scheduler.getActionData(e).section; +}); + +function clear_event_after(ev){ + delete ev.rec_type; delete ev.rec_pattern; + delete ev.event_pid; delete ev.event_length; +} +scheduler._make_pasted_event = function(ev){ + var event_duration = ev.end_date-ev.start_date; + + var copy = scheduler._lame_copy({}, ev); + clear_event_after(copy); + copy.start_date = new Date(date); + copy.end_date = new Date(copy.start_date.valueOf() + event_duration); + + if(section){ + var state = scheduler.getState().mode, + property = null; + + if(scheduler.matrix[state]){ + property = scheduler.matrix[state].y_property; + }else if(scheduler._props[state]){ + property = scheduler._props[state].property; + } + copy[property] = section; + } + return copy; +}; +scheduler._do_paste = function(is_copy, modified_ev, original_ev){ + scheduler.addEvent(modified_ev); + scheduler.callEvent("onEventPasted", [is_copy, modified_ev, original_ev]); +}; + +scheduler._is_key_nav_active = function(){ + if(this._is_initialized() && !this._is_lightbox_open() && this.config.key_nav){ + return true; + } + return false; +}; + +dhtmlxEvent(document,(_isOpera?"keypress":"keydown"),function(e){ + if(!scheduler._is_key_nav_active()) return true; + + e=e||event; + + if (e.keyCode == 37 || e.keyCode == 39) { // Left, Right arrows + e.cancelBubble = true; + + var next = scheduler.date.add(scheduler._date,(e.keyCode == 37 ? -1 : 1 ),scheduler._mode); + scheduler.setCurrentView(next); + return true; + } + + var select_id = scheduler._select_id; + if (e.ctrlKey && e.keyCode == 67) { // CTRL+C + if (select_id) { + scheduler._buffer_id = select_id; + isCopy = true; + scheduler.callEvent("onEventCopied", [scheduler.getEvent(select_id)]); + } + return true; + } + if (e.ctrlKey && e.keyCode == 88) { // CTRL+X + if (select_id) { + isCopy = false; + scheduler._buffer_id = select_id; + var ev = scheduler.getEvent(select_id); + scheduler.updateEvent(ev.id); + scheduler.callEvent("onEventCut", [ev]); + } + } + + if (e.ctrlKey && e.keyCode == 86) { // CTRL+V + var ev = scheduler.getEvent(scheduler._buffer_id); + if (ev) { + var new_ev = scheduler._make_pasted_event(ev); + if (isCopy) { + new_ev.id = scheduler.uid(); + scheduler._do_paste(isCopy, new_ev, ev); + } + else { // cut operation + var res = scheduler.callEvent("onBeforeEventChanged",[new_ev, e, false, ev]); + if (res) { + scheduler._do_paste(isCopy, new_ev, ev); + isCopy = true; // switch to copy after first paste operation + } + } + + } + return true; + } + +}); + +}; +scheduler._temp_key_scope(); diff --git a/codebase/sources/ext/dhtmlxscheduler_key_nav.js.map b/codebase/sources/ext/dhtmlxscheduler_key_nav.js.map new file mode 100644 index 0000000..4aa116c --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_key_nav.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_key_nav.js.map","sources":["dhtmlxscheduler_key_nav.js"],"names":["scheduler","_temp_key_scope","clear_event_after","ev","rec_type","rec_pattern","event_pid","event_length","config","key_nav","date","section","isCopy","attachEvent","id","e","getActionData","_make_pasted_event","event_duration","end_date","start_date","copy","_lame_copy","Date","valueOf","state","getState","mode","property","matrix","y_property","_props","_do_paste","is_copy","modified_ev","original_ev","addEvent","callEvent","_is_key_nav_active","this","_is_initialized","_is_lightbox_open","dhtmlxEvent","document","_isOpera","event","keyCode","cancelBubble","next","add","_date","_mode","setCurrentView","select_id","_select_id","ctrlKey","_buffer_id","getEvent","updateEvent","new_ev","uid","res"],"mappings":"AACAA,UAAUC,gBAAkB,WAc5B,QAASC,GAAkBC,SACnBA,GAAGC,eAAiBD,GAAGE,kBACvBF,GAAGG,gBAAkBH,GAAGI,aAdhCP,UAAUQ,OAAOC,SAAU,CAE3B,IAAIC,GACAC,EACAC,EAAS,IAGbZ,WAAUa,YAAY,cAAe,SAASC,EAAGC,GAChDL,EAAOV,UAAUgB,cAAcD,GAAGL,KAClCC,EAAUX,UAAUgB,cAAcD,GAAGJ,UAOtCX,UAAUiB,mBAAqB,SAASd,GACvC,GAAIe,GAAiBf,EAAGgB,SAAShB,EAAGiB,WAEhCC,EAAOrB,UAAUsB,cAAenB,EAKpC,IAJAD,EAAkBmB,GAClBA,EAAKD,WAAa,GAAIG,MAAKb,GAC3BW,EAAKF,SAAW,GAAII,MAAKF,EAAKD,WAAWI,UAAYN,GAElDP,EAAQ,CACV,GAAIc,GAAQzB,UAAU0B,WAAWC,KAChCC,EAAW,IAET5B;UAAU6B,OAAOJ,GACnBG,EAAW5B,UAAU6B,OAAOJ,GAAOK,WAC3B9B,UAAU+B,OAAON,KACzBG,EAAW5B,UAAU+B,OAAON,GAAOG,UAEpCP,EAAKO,GAAYjB,EAElB,MAAOU,IAERrB,UAAUgC,UAAY,SAASC,EAASC,EAAaC,GACpDnC,UAAUoC,SAASF,GACnBlC,UAAUqC,UAAU,iBAAkBJ,EAASC,EAAaC,KAG7DnC,UAAUsC,mBAAqB,WAC9B,MAAGC,MAAKC,oBAAsBD,KAAKE,qBAAuBF,KAAK/B,OAAOC,SAC9D,GAED,GAGRiC,YAAYC,SAAUC,SAAS,WAAW,UAAW,SAAS7B,GAC7D,IAAIf,UAAUsC,qBAAsB,OAAO,CAI3C,IAFAvB,EAAEA,GAAG8B,MAEY,IAAb9B,EAAE+B,SAA8B,IAAb/B,EAAE+B,QAAe,CACvC/B,EAAEgC,cAAe,CAEjB;GAAIC,GAAOhD,UAAUU,KAAKuC,IAAIjD,UAAUkD,MAAoB,IAAbnC,EAAE+B,QAAgB,GAAK,EAAI9C,UAAUmD,MAEpF,OADAnD,WAAUoD,eAAeJ,IAClB,EAGR,GAAIK,GAAYrD,UAAUsD,UAC1B,IAAIvC,EAAEwC,SAAwB,IAAbxC,EAAE+B,QAMlB,MALIO,KACHrD,UAAUwD,WAAaH,EACvBzC,GAAS,EACTZ,UAAUqC,UAAU,iBAAkBrC,UAAUyD,SAASJ,OAEnD,CAER,IAAItC,EAAEwC,SAAwB,IAAbxC,EAAE+B,SACdO,EAAW,CACdzC,GAAS,EACTZ,UAAUwD,WAAaH,CACvB,IAAIlD,GAAKH,UAAUyD,SAASJ,EAC5BrD,WAAU0D,YAAYvD,EAAGW,IACzBd,UAAUqC,UAAU,cAAelC,IAIrC,GAAIY,EAAEwC,SAAwB,IAAbxC,EAAE+B,QAAe,CACjC,GAAI3C,GAAKH,UAAUyD,SAASzD,UAAUwD,WACtC;GAAIrD,EAAI,CACP,GAAIwD,GAAS3D,UAAUiB,mBAAmBd,EAC1C,IAAIS,EACH+C,EAAO7C,GAAKd,UAAU4D,MACtB5D,UAAUgC,UAAUpB,EAAQ+C,EAAQxD,OAEhC,CACJ,GAAI0D,GAAM7D,UAAUqC,UAAU,wBAAwBsB,EAAQ5C,GAAG,EAAOZ,GACpE0D,KACH7D,UAAUgC,UAAUpB,EAAQ+C,EAAQxD,GACpCS,GAAS,IAKZ,OAAO,MAMTZ,UAAUC"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_layer.js b/codebase/sources/ext/dhtmlxscheduler_layer.js new file mode 100644 index 0000000..dcaa362 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_layer.js @@ -0,0 +1,407 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onTemplatesReady",function(){ + + this.layers.sort(function(a, b){ + return a.zIndex - b.zIndex; + }); + + scheduler._dp_init=function(dp){ + dp._methods=["_set_event_text_style","","changeEventId","deleteEvent"]; + + this.attachEvent("onEventAdded",function(id){ + if (!this._loading && this.validId(id) && this.getEvent(id) && this.getEvent(id).layer == dp.layer) + dp.setUpdated(id,true,"inserted"); + }); + this.attachEvent("onBeforeEventDelete",function(id){ + if(this.getEvent(id) && this.getEvent(id).layer == dp.layer) { + if (!this.validId(id)) return; + var z=dp.getState(id); + + if (z=="inserted" || this._new_event) { dp.setUpdated(id,false); return true; } + if (z=="deleted") return false; + if (z=="true_deleted") return true; + + dp.setUpdated(id,true,"deleted"); + return false; + } + else return true; + }); + this.attachEvent("onEventChanged",function(id){ + if (!this._loading && this.validId(id) && this.getEvent(id) && this.getEvent(id).layer == dp.layer) + dp.setUpdated(id,true,"updated"); + }); + + dp._getRowData=function(id,pref){ + var ev=this.obj.getEvent(id); + var data = {}; + + for (var a in ev){ + if (a.indexOf("_")===0) continue; + if (ev[a] && ev[a].getUTCFullYear) //not very good, but will work + data[a] = this.obj.templates.xml_format(ev[a]); + else + data[a] = ev[a]; + } + return data; + }; + dp._clearUpdateFlag=function(){}; + + dp.attachEvent("insertCallback", scheduler._update_callback); + dp.attachEvent("updateCallback", scheduler._update_callback); + dp.attachEvent("deleteCallback", function(upd, id) { + this.obj.setUserData(id, this.action_param, "true_deleted"); + this.obj.deleteEvent(id); + }); + }; + + (function() { + var _cloneObj = function(obj){ + if(obj === null || typeof(obj) != 'object') + return obj; + var temp = new obj.constructor(); + for(var key in obj) + temp[key] = _cloneObj(obj[key]); + return temp; + }; + + scheduler._dataprocessors = []; + scheduler._layers_zindex = {}; + for(var i=0; i<scheduler.layers.length; i++) { + scheduler.config['lightbox_'+scheduler.layers[i].name] = { }; + scheduler.config['lightbox_'+scheduler.layers[i].name].sections = _cloneObj(scheduler.config.lightbox.sections); + scheduler._layers_zindex[scheduler.layers[i].name] = scheduler.config.inital_layer_zindex||5 + i*3; + if(scheduler.layers[i].url) { + var dp = new dataProcessor(scheduler.layers[i].url); + dp.layer = scheduler.layers[i].name; + scheduler._dataprocessors.push(dp); + scheduler._dataprocessors[i].init(scheduler); + } + if(scheduler.layers[i].isDefault) + scheduler.defaultLayer = scheduler.layers[i].name; + } + })(); + + + scheduler.showLayer = function(tlayer) { + this.toggleLayer(tlayer, true); + }; + + scheduler.hideLayer = function(tlayer) { + this.toggleLayer(tlayer, false); + }; + + scheduler.toggleLayer = function(tlayer, visible) { // visible is optional + var layer = this.getLayer(tlayer); + + if(typeof visible != 'undefined') + layer.visible = !!visible; + else + layer.visible = !layer.visible; + + this.setCurrentView(this._date, this._mode); + }; + + scheduler.getLayer = function(tlayer) { // either string with layer name or event with layer property + var layer, + layer_name; + if(typeof tlayer == 'string') + layer_name = tlayer; + if(typeof tlayer == 'object') + layer_name = tlayer.layer; + for (var i=0; i<scheduler.layers.length; i++) { + if(scheduler.layers[i].name == layer_name) + layer = scheduler.layers[i]; + } + return layer; + }; + + scheduler.attachEvent("onBeforeLightbox", function (event_id){ + var ev = this.getEvent(event_id); + this.config.lightbox.sections = this.config['lightbox_'+ev.layer].sections; + scheduler.resetLightbox(); + return true; + }); + + scheduler.attachEvent("onClick", function (event_id, native_event_object){ + var ev = scheduler.getEvent(event_id); + return !scheduler.getLayer(ev.layer).noMenu; + }); + + scheduler.attachEvent('onEventCollision', function(ev, evs) { + var layer = this.getLayer(ev); + if(!layer.checkCollision) + return false; + var count = 0; + for(var i = 0; i<evs.length; i++) { + if(evs[i].layer == layer.name && evs[i].id != ev.id) + count++; + } + return (count >= scheduler.config.collision_limit); + }); + + scheduler.addEvent=function(start_date,end_date,text,id,extra_data){ + var ev=start_date; + if (arguments.length!=1){ + ev=extra_data||{}; + ev.start_date=start_date; + ev.end_date=end_date; + ev.text=text; + ev.id=id; + ev.layer = this.defaultLayer; + } + ev.id = ev.id||scheduler.uid(); + ev.text = ev.text||""; + + + if (typeof ev.start_date == "string") ev.start_date=this.templates.api_date(ev.start_date); + if (typeof ev.end_date == "string") ev.end_date=this.templates.api_date(ev.end_date); + ev._timed=this.isOneDayEvent(ev); + + var is_new=!this._events[ev.id]; + this._events[ev.id]=ev; + this.event_updated(ev); + if (!this._loading) + this.callEvent(is_new?"onEventAdded":"onEventChanged",[ev.id,ev]); + }; + + this._evs_layer = {}; + for (var i = 0; i < this.layers.length; i++) { // array in object for each layer + this._evs_layer[this.layers[i].name] = []; + } + + scheduler.addEventNow=function(start,end,e){ + var base = {}; + if (typeof start == "object"){ + base = start; + start = null; + } + + var d = (this.config.event_duration||this.config.time_step)*60000; + if (!start) start = Math.round((scheduler._currentDate()).valueOf()/d)*d; + var start_date = new Date(start); + if (!end){ + var start_hour = this.config.first_hour; + if (start_hour > start_date.getHours()){ + start_date.setHours(start_hour); + start = start_date.valueOf(); + } + end = start+d; + } + + + base.start_date = base.start_date||start_date; + base.end_date = base.end_date||new Date(end); + base.text = base.text||this.locale.labels.new_event; + base.id = this._drag_id = this.uid(); + base.layer = this.defaultLayer; + this._drag_mode="new-size"; + + this._loading=true; + this.addEvent(base); + this.callEvent("onEventCreated",[this._drag_id,e]); + this._loading=false; + + this._drag_event={}; //dummy , to trigger correct event updating logic + this._on_mouse_up(e); + }; + + scheduler._t_render_view_data = function(events) { // helper + if (this.config.multi_day && !this._table_view) { + var tvs = []; + var tvd = []; + for (var k = 0; k < events.length; k++) { + if (events[k]._timed) + tvs.push(events[k]); + else + tvd.push(events[k]); + } + this._table_view = true; + this.render_data(tvd); + this._table_view = false; + this.render_data(tvs); + } + else + this.render_data(events); + }; + + scheduler.render_view_data = function(){ + if (this._not_render) { + this._render_wait = true; + return; + } + this._render_wait = false; + + this.clear_view(); + + this._evs_layer = {}; + for (var i = 0; i < this.layers.length; i++) { // array in object for each layer + this._evs_layer[this.layers[i].name] = []; + } + + var evs = this.get_visible_events(); + for (var i = 0; i < evs.length; i++) { // filling layer arrays with events + if(this._evs_layer[evs[i].layer]) + this._evs_layer[evs[i].layer].push(evs[i]); + } + + if(this._mode == 'month') { // old logic is used + var tevs = []; + for (var i = 0; i < this.layers.length; i++) { + if (this.layers[i].visible) + tevs = tevs.concat(this._evs_layer[this.layers[i].name]); + } + this._t_render_view_data(tevs); + } + else { // week, day; should use new logic + for (var i = 0; i < this.layers.length; i++) { + if (this.layers[i].visible) { + var evs_layer = this._evs_layer[this.layers[i].name]; + this._t_render_view_data(evs_layer); + } + } + } + }; + + scheduler._render_v_bar=function(ev,x,y,w,h,style,contentA,contentB,bottom){ + var id = ev.id; + if(contentA.indexOf('<div class=') == -1) + contentA = (scheduler.templates['event_header_'+ev.layer])?scheduler.templates['event_header_'+ev.layer](ev.start_date,ev.end_date,ev):contentA; + if(contentB.indexOf('<div class=') == -1) + contentB = (scheduler.templates['event_text_'+ev.layer])?scheduler.templates['event_text_'+ev.layer](ev.start_date,ev.end_date,ev):contentB; + + var d=document.createElement("DIV"); + + + var cs = "dhx_cal_event"; + var cse = (scheduler.templates['event_class_'+ev.layer])?scheduler.templates['event_class_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_class(ev.start_date,ev.end_date,ev); + if (cse) cs=cs+" "+cse; + + var html='<div event_id="'+id+'" class="'+cs+'" style="position:absolute; top:'+y+'px; left:'+x+'px; width:'+(w-4)+'px; height:'+h+'px;'+(style||"")+'">'; + html+='<div class="dhx_header" style=" width:'+(w-6)+'px;" > </div>'; + html+='<div class="dhx_title">'+contentA+'</div>'; + html+='<div class="dhx_body" style=" width:'+(w-(this._quirks?4:14))+'px; height:'+(h-(this._quirks?20:30))+'px;">'+contentB+'</div>'; + html+='<div class="dhx_footer" style=" width:'+(w-8)+'px;'+(bottom?' margin-top:-1px;':'')+'" ></div></div>'; + + d.innerHTML=html; + d.style.zIndex = 100; + return d.firstChild; + }; + + scheduler.render_event_bar=function(ev){ + var parent=this._els["dhx_cal_data"][0]; + + var x=this._colsS[ev._sday]; + var x2=this._colsS[ev._eday]; + if (x2==x) x2=this._colsS[ev._eday+1]; + var hb = this.xy.bar_height; + + var y=this._colsS.heights[ev._sweek]+(this._colsS.height?(this.xy.month_scale_height+2):2)+ev._sorder*hb; + + var d=document.createElement("DIV"); + var cs = ev._timed?"dhx_cal_event_clear":"dhx_cal_event_line"; + var cse = (scheduler.templates['event_class_'+ev.layer])?scheduler.templates['event_class_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_class(ev.start_date,ev.end_date,ev); + if (cse) cs=cs+" "+cse; + + var html='<div event_id="'+ev.id+'" class="'+cs+'" style="position:absolute; top:'+y+'px; left:'+x+'px; width:'+(x2-x-15)+'px;'+(ev._text_style||"")+'">'; + + if (ev._timed) + html+=(scheduler.templates['event_bar_date_'+ev.layer])?scheduler.templates['event_bar_date_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_bar_date(ev.start_date,ev.end_date,ev); + html+=( (scheduler.templates['event_bar_text_'+ev.layer])?scheduler.templates['event_bar_text_'+ev.layer](ev.start_date,ev.end_date,ev):scheduler.templates.event_bar_text(ev.start_date,ev.end_date,ev) + '</div>)'); + html+='</div>'; + + d.innerHTML=html; + + this._rendered.push(d.firstChild); + parent.appendChild(d.firstChild); + }; + + scheduler.render_event=function(ev){ + var menu = scheduler.xy.menu_width; + if(scheduler.getLayer(ev.layer).noMenu) + menu = 0; + + if (ev._sday<0) return; //can occur in case of recurring event during time shift + var parent=scheduler.locate_holder(ev._sday); + if (!parent) return; //attempt to render non-visible event + var sm = ev.start_date.getHours()*60+ev.start_date.getMinutes(); + var em = (ev.end_date.getHours()*60+ev.end_date.getMinutes())||(scheduler.config.last_hour*60); + + var top = (Math.round((sm*60*1000-this.config.first_hour*60*60*1000)*this.config.hour_size_px/(60*60*1000)))%(this.config.hour_size_px*24)+1; //42px/hour + var height = Math.max(scheduler.xy.min_event_height,(em-sm)*this.config.hour_size_px/60)+1; //42px/hour + //var height = Math.max(25,Math.round((ev.end_date.valueOf()-ev.start_date.valueOf())*(this.config.hour_size_px+(this._quirks?1:0))/(60*60*1000))); //42px/hour + var width=Math.floor((parent.clientWidth-menu)/ev._count); + var left=ev._sorder*width+1; + if (!ev._inner) width=width*(ev._count-ev._sorder); + + + + var d=this._render_v_bar(ev.id,menu+left,top,width,height,ev._text_style,scheduler.templates.event_header(ev.start_date,ev.end_date,ev),scheduler.templates.event_text(ev.start_date,ev.end_date,ev)); + + this._rendered.push(d); + parent.appendChild(d); + + left=left+parseInt(parent.style.left,10)+menu; + + top+=this._dy_shift; //corrupt top, to include possible multi-day shift + d.style.zIndex = this._layers_zindex[ev.layer]; + + if (this._edit_id==ev.id){ + d.style.zIndex = parseInt(d.style.zIndex)+1; //fix overlapping issue + var new_zIndex = d.style.zIndex; + width=Math.max(width-4,scheduler.xy.editor_width); + var d=document.createElement("DIV"); + d.setAttribute("event_id",ev.id); + this.set_xy(d,width,height-20,left,top+14); + d.className="dhx_cal_editor"; + d.style.zIndex = new_zIndex; + var d2=document.createElement("DIV"); + this.set_xy(d2,width-6,height-26); + d2.style.cssText+=";margin:2px 2px 2px 2px;overflow:hidden;"; + + + d2.style.zIndex = new_zIndex; + d.appendChild(d2); + this._els["dhx_cal_data"][0].appendChild(d); + this._rendered.push(d); + + d2.innerHTML="<textarea class='dhx_cal_editor'>"+ev.text+"</textarea>"; + if (this._quirks7) d2.firstChild.style.height=height-12+"px"; //IEFIX + this._editor=d2.firstChild; + this._editor.onkeypress=function(e){ + if ((e||event).shiftKey) return true; + var code=(e||event).keyCode; + if (code==scheduler.keys.edit_save) scheduler.editStop(true); + if (code==scheduler.keys.edit_cancel) scheduler.editStop(false); + }; + this._editor.onselectstart=function(e){ (e||event).cancelBubble=true; return true; }; + d2.firstChild.focus(); + //IE and opera can add x-scroll during focusing + this._els["dhx_cal_data"][0].scrollLeft=0; + d2.firstChild.select(); + } + if (this._select_id==ev.id){ + d.style.zIndex = parseInt(d.style.zIndex)+1; //fix overlapping issue + var icons=this.config["icons_"+((this._edit_id==ev.id)?"edit":"select")]; + var icons_str=""; + for (var i=0; i<icons.length; i++) + icons_str+="<div class='dhx_menu_icon "+icons[i]+"' title='"+this.locale.labels[icons[i]]+"'></div>"; + var obj = this._render_v_bar(ev.id,left-menu+1,top,menu,icons.length*20+26,"","<div class='dhx_menu_head'></div>",icons_str,true); + obj.style.left=left-menu+1; + obj.style.zIndex = d.style.zIndex; + this._els["dhx_cal_data"][0].appendChild(obj); + this._rendered.push(obj); + } + + }; + + scheduler.filter_agenda = function(id, event) { + var layer = scheduler.getLayer(event.layer); + return (layer && layer.visible); + }; +}); diff --git a/codebase/sources/ext/dhtmlxscheduler_layer.js.map b/codebase/sources/ext/dhtmlxscheduler_layer.js.map new file mode 100644 index 0000000..0483f36 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_layer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_layer.js.map","sources":["dhtmlxscheduler_layer.js"],"names":["scheduler","attachEvent","this","layers","sort","a","b","zIndex","_dp_init","dp","_methods","id","_loading","validId","getEvent","layer","setUpdated","z","getState","_new_event","_getRowData","ev","obj","data","indexOf","getUTCFullYear","templates","xml_format","_clearUpdateFlag","_update_callback","upd","setUserData","action_param","deleteEvent","_cloneObj","temp","constructor","key","_dataprocessors","_layers_zindex","i","length","config","name","sections","lightbox","inital_layer_zindex","url","dataProcessor","push","init","isDefault","defaultLayer","showLayer","tlayer","toggleLayer","hideLayer","visible","getLayer","setCurrentView","_date","_mode","layer_name","event_id","resetLightbox","noMenu","evs","checkCollision","count","collision_limit","addEvent","start_date","end_date","text","extra_data","arguments","uid","api_date","_timed","isOneDayEvent","is_new","_events","event_updated","callEvent","_evs_layer","addEventNow","start","end","e","base","d","event_duration","time_step","Math","round","_currentDate","valueOf","Date","start_hour","first_hour","getHours","setHours","locale","labels","new_event","_drag_id","_drag_mode","_drag_event","_on_mouse_up","_t_render_view_data","events","multi_day","_table_view","tvs","tvd","k","render_data","render_view_data","_not_render","_render_wait","clear_view","get_visible_events","tevs","concat","evs_layer","_render_v_bar","x","y","w","h","style","contentA","contentB","bottom","document","createElement","cs","cse","event_class","html","_quirks","innerHTML","firstChild","render_event_bar","parent","_els","_colsS","_sday","x2","_eday","hb","xy","bar_height","heights","_sweek","height","month_scale_height","_sorder","_text_style","event_bar_date","event_bar_text","_rendered","appendChild","render_event","menu","menu_width","locate_holder","sm","getMinutes","em","last_hour","top","hour_size_px","max","min_event_height","width","floor","clientWidth","_count","left","_inner","event_header","event_text","parseInt","_dy_shift","_edit_id","new_zIndex","editor_width","setAttribute","set_xy","className","d2","cssText","_quirks7","_editor","onkeypress","event","shiftKey","code","keyCode","keys","edit_save","editStop","edit_cancel","onselectstart","cancelBubble","focus","scrollLeft","select","_select_id","icons","icons_str","filter_agenda"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_limit.js b/codebase/sources/ext/dhtmlxscheduler_limit.js new file mode 100644 index 0000000..e56abc5 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_limit.js @@ -0,0 +1,965 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.config.limit_start = null; +scheduler.config.limit_end = null; +scheduler.config.limit_view = false; +scheduler.config.check_limits = true; +scheduler.config.mark_now = true; +scheduler.config.display_marked_timespans = true; + +scheduler._temp_limit_scope = function(){ + var before = null; + var dhx_time_block = "dhx_time_block"; + var default_timespan_type = "default"; + var fix_options = function(options, days, zones) { + if (days instanceof Date && zones instanceof Date) { + options.start_date = days; + options.end_date = zones; + } else { + options.days = days; + options.zones = zones; + } + return options; + }; + var get_resulting_options = function(days, zones, sections) { + var options = (typeof days == "object") ? days : { days: days }; + options.type = dhx_time_block; + options.css = ""; + if (zones) { + if (sections) + options.sections = sections; + options = fix_options(options, days, zones); + } + return options; + }; + scheduler.blockTime = function(days, zones, sections){ + var options = get_resulting_options(days, zones, sections); + return scheduler.addMarkedTimespan(options); + }; + scheduler.unblockTime = function(days, zones, sections) { + zones = zones || "fullday"; + var options = get_resulting_options(days, zones, sections); + return scheduler.deleteMarkedTimespan(options); + }; + scheduler.attachEvent("onBeforeViewChange",function(om,od,nm,nd){ + if (scheduler.config.limit_view){ + nd = nd||od; nm = nm||om; + if (nd.valueOf()>scheduler.config.limit_end.valueOf() || this.date.add(nd,1,nm)<=scheduler.config.limit_start.valueOf()){ + setTimeout(function(){ + scheduler.setCurrentView((od || scheduler.config.limit_start), nm); + },1); + return false; + } + } + return true; + }); + scheduler.checkInMarkedTimespan = function(ev, timespan_type, on_overlap){ + timespan_type = timespan_type || default_timespan_type; + + var res = true; + var temp_start_date = new Date(ev.start_date.valueOf()); + var temp_end_date = scheduler.date.add(temp_start_date, 1, "day"); + var timespans = scheduler._marked_timespans; + for (; temp_start_date < ev.end_date; temp_start_date = scheduler.date.date_part(temp_end_date), temp_end_date = scheduler.date.add(temp_start_date, 1, "day") ) { + var day_value = +scheduler.date.date_part( new Date(temp_start_date) ); // the first part of event not necessarily contains only date part + var day_index = temp_start_date.getDay(); + + var zones = getZones(ev, timespans, day_index, day_value, timespan_type); + if (zones){ + for (var i = 0; i < zones.length; i+=2) { + + // they may change for new event if it passes limit zone + var sm = scheduler._get_zone_minutes(temp_start_date); + var em = ( ev.end_date>temp_end_date || ev.end_date.getDate() != temp_start_date.getDate() ) ? 1440 : scheduler._get_zone_minutes(ev.end_date); + + var sz = zones[i]; + var ez = zones[i+1]; + if (sz<em && ez>sm) { + if(typeof on_overlap == "function"){ + //handler allows to cancel overlapping + //actually needed only to keep default behavior of limits + res = on_overlap(ev, sm, em, sz, ez);//event object, event start/end minutes in 'zones' format, zone start/end minutes + }else{ + res = false; + } + if(!res) + break; + } + } + } + } + return !res; + }; + var blocker = scheduler.checkLimitViolation = function(event){ + if(!event) + return true; + if (!scheduler.config.check_limits) + return true; + var s = scheduler; + var c = s.config; + var evs = []; + if (event.rec_type) { + var dates = scheduler.getRecDates(event); + for(var i=0; i < dates.length; i++){ + var ev = scheduler._copy_event(event); + scheduler._lame_copy(ev, dates[i]); + evs.push(ev); + } + + } else { + evs = [event]; + } + + var complete_res = true; + for (var p=0; p<evs.length; p++) { + var res = true; + var ev = evs[p]; + // Event could have old _timed property (e.g. we are creating event with DND on timeline view and crossed day) + ev._timed = scheduler.isOneDayEvent(ev); + + res = (c.limit_start && c.limit_end) ? (ev.start_date.valueOf() >= c.limit_start.valueOf() && ev.end_date.valueOf() <= c.limit_end.valueOf()) : true; + if (res){ + res = !scheduler.checkInMarkedTimespan(ev, dhx_time_block, function(ev, sm, em, sz, ez){ + //try crop event to allow placing + var allow = true; + if (sm<=ez && sm >=sz){ + if (ez == 24*60 || em<ez){ + allow = false; + } + if(ev._timed && s._drag_id && s._drag_mode == "new-size"){ + ev.start_date.setHours(0); + ev.start_date.setMinutes(ez); + } + else { + allow = false; + } + } + if ((em>=sz && em<ez) || (sm < sz && em > ez)){ + if(ev._timed && s._drag_id && s._drag_mode == "new-size"){ + ev.end_date.setHours(0); + ev.end_date.setMinutes(sz); + } + else { + allow = false; + } + } + return allow; + }); + } + if (!res) { + res = (s.checkEvent("onLimitViolation")) ? s.callEvent("onLimitViolation",[ev.id, ev]) : res; + } + complete_res = complete_res && res; + } + if(!complete_res){ + s._drag_id = null; + s._drag_mode = null; + } + return complete_res; + + + }; + scheduler._get_blocked_zones = function(timespans, property, day_index, day_value, timespan_type){ + var zones =[]; + if (timespans && timespans[property]) { + var timeline_zones = timespans[property]; + var blocked_timeline_zones = this._get_relevant_blocked_zones(day_index, day_value, timeline_zones, timespan_type); + for (var i=0; i<blocked_timeline_zones.length; i++) { + zones = this._add_timespan_zones(zones, blocked_timeline_zones[i].zones); + } + } + return zones; + }; + scheduler._get_relevant_blocked_zones = function(day_index, day_value, zones, timespan_type) { + var relevant_zones = (zones[day_value] && zones[day_value][timespan_type]) ? zones[day_value][timespan_type] : + (zones[day_index] && zones[day_index][timespan_type]) ? zones[day_index][timespan_type] : []; + return relevant_zones; + }; + function getZones(ev, timespans, day_index, day_value, timespan_type){ + var s = scheduler; + //containers for 'unit' and 'timeline' views, and related 'section_id' properties + var zones = []; + var containers = { + '_props':'map_to', + 'matrix':'y_property'}; + //check blocked sections in all units and timelines + for(var container in containers){ + var property = containers[container]; + if(s[container]){ + for(var view in s[container]){ + var view_config = s[container][view]; + var linker = view_config[property]; + if(!ev[linker]) continue; + zones = s._add_timespan_zones(zones, + scheduler._get_blocked_zones(timespans[view], ev[linker], day_index, day_value, timespan_type)); + } + } + } + // now need to add day blocks + zones = s._add_timespan_zones(zones, scheduler._get_blocked_zones(timespans, 'global', day_index, day_value, timespan_type)); + return zones; + } + + scheduler.attachEvent("onMouseDown", function(classname) { + return !(classname == dhx_time_block); + }); + scheduler.attachEvent("onBeforeDrag",function(id){ + if (!id) return true; + return blocker(scheduler.getEvent(id)); + }); + scheduler.attachEvent("onClick", function (event_id, native_event_object){ + return blocker(scheduler.getEvent(event_id)); + }); + scheduler.attachEvent("onBeforeLightbox",function(id){ + + var ev = scheduler.getEvent(id); + before = [ev.start_date, ev.end_date]; + return blocker(ev); + }); + scheduler.attachEvent("onEventSave", function(id, data, is_new_event) { + + //lightbox may not have 'time' section + if(!(data.start_date && data.end_date)){ + var ev = scheduler.getEvent(id); + data.start_date = new Date(ev.start_date); + data.end_date = new Date(ev.end_date); + } + + if(data.rec_type){ + //_roll_back_dates modifies start_date of recurring event, need to check limits after modification + // use a copy to keep original event unchanged + var data_copy = scheduler._lame_clone(data); + scheduler._roll_back_dates(data_copy); + return blocker(data_copy); + } + return blocker(data); + }); + scheduler.attachEvent("onEventAdded",function(id){ + if (!id) return true; + var ev = scheduler.getEvent(id); + if (!blocker(ev) && scheduler.config.limit_start && scheduler.config.limit_end) { + //if newly created event is outside of limited time - crop it, leaving only allowed time + if (ev.start_date < scheduler.config.limit_start) { + ev.start_date = new Date(scheduler.config.limit_start); + } + if (ev.start_date.valueOf() >= scheduler.config.limit_end.valueOf()) { + ev.start_date = this.date.add(scheduler.config.limit_end, -1, "day"); + } + if (ev.end_date < scheduler.config.limit_start) { + ev.end_date = new Date(scheduler.config.limit_start); + } + if (ev.end_date.valueOf() >= scheduler.config.limit_end.valueOf()) { + ev.end_date = this.date.add(scheduler.config.limit_end, -1, "day"); + } + if (ev.start_date.valueOf() >= ev.end_date.valueOf()) { + ev.end_date = this.date.add(ev.start_date, (this.config.event_duration||this.config.time_step), "minute"); + } + ev._timed=this.isOneDayEvent(ev); + } + return true; + }); + scheduler.attachEvent("onEventChanged",function(id){ + if (!id) return true; + var ev = scheduler.getEvent(id); + if (!blocker(ev)){ + if (!before) return false; + ev.start_date = before[0]; + ev.end_date = before[1]; + ev._timed=this.isOneDayEvent(ev); + } + return true; + }); + scheduler.attachEvent("onBeforeEventChanged",function(ev, native_object, is_new){ + return blocker(ev); + }); + scheduler.attachEvent("onBeforeEventCreated", function(ev) { // native event + var start_date = scheduler.getActionData(ev).date; + var event = { + _timed: true, + start_date: start_date, + end_date: scheduler.date.add(start_date, scheduler.config.time_step, "minute") + }; + return blocker(event); + }); + + scheduler.attachEvent("onViewChange", function(){ + scheduler._mark_now(); + }); + scheduler.attachEvent("onSchedulerResize", function(){ + window.setTimeout(function(){ scheduler._mark_now(); }, 1); + return true; + }); + scheduler.attachEvent("onTemplatesReady", function() { + scheduler._mark_now_timer = window.setInterval(function() { + if(!scheduler._is_initialized()) + return; + scheduler._mark_now(); + }, 60000); + }); + scheduler._mark_now = function(hide) { + // day, week, units views + var dhx_now_time = 'dhx_now_time'; + if (!this._els[dhx_now_time]) { + this._els[dhx_now_time] = []; + } + var now = scheduler._currentDate(); + var cfg = this.config; + scheduler._remove_mark_now(); // delete previous marks if they exist + if (!hide && cfg.mark_now && now < this._max_date && now > this._min_date && now.getHours() >= cfg.first_hour && now.getHours()<cfg.last_hour) { + var day_index = this.locate_holder_day(now); + this._els[dhx_now_time] = scheduler._append_mark_now(day_index, now); + } + }; + scheduler._append_mark_now = function(day_index, now) { + var dhx_now_time = 'dhx_now_time'; + var zone_start= scheduler._get_zone_minutes(now); + var options = { + zones: [zone_start, zone_start+1], + css: dhx_now_time, + type: dhx_now_time + }; + if (!this._table_view) { + if (this._props && this._props[this._mode]) { // units view + var day_divs = this._els["dhx_cal_data"][0].childNodes; + var r_divs = []; + + for (var i=0; i<day_divs.length-1; i++) { + var t_day = day_index+i; // as each unit is actually considered +1 day + options.days = t_day; + var t_div = scheduler._render_marked_timespan(options, null, t_day)[0]; + r_divs.push(t_div); + } + return r_divs; + } else { // day/week views + options.days = day_index; + return scheduler._render_marked_timespan(options, null, day_index); + } + } else { + if (this._mode == "month") { + options.days = +scheduler.date.date_part(now); + return scheduler._render_marked_timespan(options, null, null); + } + } + }; + scheduler._remove_mark_now = function() { + var dhx_now_time = 'dhx_now_time'; + var els = this._els[dhx_now_time]; + for (var i=0; i<els.length; i++) { + var div = els[i]; + var parent = div.parentNode; + if (parent) { + parent.removeChild(div); + } + } + this._els[dhx_now_time] = []; + }; + + /* + scheduler._marked_timespans = { + "global": { + "0": { + "default": [ + { // sunday + zones: [0, 100, 500, 600], + css: "yellow_box", + type: "default", + view: "global", + day: 0 + } + ] + } + "112121312": { + "my_special_type": [ + { + zones: [600, 900], + type: "block", + css: "some_class", + view: "global", + day: 112121312 + }, + {} + ] + } + }, + "units": { + "5_id": { + "3": { + "special_type": [ {}, {}, {} ], + "another_type": [ {} ] + } + }, + "6_id": { + "11212127": { + ... + } + } + } + } + */ + scheduler._marked_timespans = { global: {} }; + + scheduler._get_zone_minutes = function(date) { + return date.getHours()*60 + date.getMinutes(); + }; + scheduler._prepare_timespan_options = function(config) { // receives 1 option, returns array of options + var r_configs = []; // resulting configs + var temp_configs = []; + + if (config.days == "fullweek") + config.days = [0,1,2,3,4,5,6]; + + if (config.days instanceof Array) { + var t_days = config.days.slice(); + for (var i=0; i<t_days.length; i++) { + var cloned_config = scheduler._lame_clone(config); + cloned_config.days = t_days[i]; + r_configs.push.apply(r_configs, scheduler._prepare_timespan_options(cloned_config)); + } + return r_configs; + } + + if ( !config || !((config.start_date && config.end_date && config.end_date > config.start_date) || (config.days !== undefined && config.zones)) ) + return r_configs; // incorrect config was provided + + var min = 0; + var max = 24*60; + if (config.zones == "fullday") + config.zones = [min, max]; + if (config.zones && config.invert_zones) { + config.zones = scheduler.invertZones(config.zones); + } + + config.id = scheduler.uid(); + config.css = config.css||""; + config.type = config.type||default_timespan_type; + + var sections = config.sections; + if (sections) { + for (var view_key in sections) { + if (sections.hasOwnProperty(view_key)) { + var ids = sections[view_key]; + if (!(ids instanceof Array)) + ids = [ids]; + for (var i=0; i<ids.length; i++) { + var t_config = scheduler._lame_copy({}, config); + t_config.sections = {}; + t_config.sections[view_key] = ids[i]; + temp_configs.push(t_config); + } + } + } + } else { + temp_configs.push(config); + } + + for (var k=0; k<temp_configs.length; k++) { + var c_config = temp_configs[k]; // config to be checked + + var start_date = c_config.start_date; + var end_date = c_config.end_date; + + if (start_date && end_date) { + var t_sd = scheduler.date.date_part(new Date(start_date)); // e.g. 05 october + var t_ed= scheduler.date.add(t_sd, 1, "day"); // 06 october, will both be incremented in the loop + + while (t_sd < end_date) { + var t_config = scheduler._lame_copy({}, c_config); + delete t_config.start_date; + delete t_config.end_date; + t_config.days = t_sd.valueOf(); + var zone_start = (start_date > t_sd) ? scheduler._get_zone_minutes(start_date) : min; + var zone_end = ( end_date>t_ed || end_date.getDate() != t_sd.getDate() ) ? max : scheduler._get_zone_minutes(end_date); + t_config.zones = [zone_start, zone_end]; + r_configs.push(t_config); + + t_sd = t_ed; + t_ed = scheduler.date.add(t_ed, 1, "day"); + } + } else { + if (c_config.days instanceof Date) + c_config.days = (scheduler.date.date_part(c_config.days)).valueOf(); + c_config.zones = config.zones.slice(); + r_configs.push(c_config); + } + } + return r_configs; + }; + scheduler._get_dates_by_index = function(index, start, end) { + var dates = []; + start = scheduler.date.date_part(new Date(start||scheduler._min_date)); + end = new Date(end||scheduler._max_date); + var start_day = start.getDay(); + var delta = (index-start_day >= 0) ? (index-start_day) : (7-start.getDay()+index); + var t_date = scheduler.date.add(start, delta, "day"); + for (; t_date < end; t_date = scheduler.date.add(t_date, 1, "week")) { + dates.push(t_date); + } + return dates; + }; + scheduler._get_css_classes_by_config = function(config) { + var css_classes = []; + if (config.type == dhx_time_block) { + css_classes.push(dhx_time_block); + if (config.css) + css_classes.push(dhx_time_block+"_reset"); + } + css_classes.push("dhx_marked_timespan", config.css); + return css_classes.join(" "); + }; + scheduler._get_block_by_config = function(config) { + var block = document.createElement("DIV"); + if (config.html) { + if (typeof config.html == "string") + block.innerHTML = config.html; + else + block.appendChild(config.html); + } + return block; + }; + scheduler._render_marked_timespan = function(options, area, day) { + var blocks = []; // resulting block which will be rendered and returned + var c = scheduler.config; + var min_date = this._min_date; + var max_date = this._max_date; + var day_value = false; // if timespan for specific date should be displayed + + if (!c.display_marked_timespans) + return blocks; + + // in case of markTimespan + if (!day && day !== 0) { + if (options.days < 7) + day = options.days; + else { + var date_to_display = new Date(options.days); + day_value = +date_to_display; + + // in case of markTimespan date could be not in the viewing range, need to return + if ( !(+max_date > +date_to_display && +min_date <= +date_to_display) ) + return blocks; + + day = date_to_display.getDay(); + } + + // convert day default index (Sun - 0, Sat - 6) to index of hourscales (depends on week_start and config.start_on_monday) + var min_day = min_date.getDay(); + if (min_day > day) { + day = 7 - (min_day-day); + } else { + day = day - min_day; + } + } + var zones = options.zones; + var css_classes = scheduler._get_css_classes_by_config(options); + + if (scheduler._table_view && scheduler._mode == "month") { + var areas = []; + var days = []; + + + if (!area) { + days = (day_value) ? [day_value] : scheduler._get_dates_by_index(day); + for (var i=0; i < days.length; i++) { + areas.push( this._scales[days[i]] ); + } + } else { + areas.push(area); + days.push(day); + } + + for (var i=0; i < areas.length; i++) { + area = areas[i]; + day = days[i]; + + var sweek = Math.floor((this._correct_shift(day,1)-min_date.valueOf())/(60*60*1000*24*this._cols.length)), + sday = this.locate_holder_day(day, false) % this._cols.length; + + if(this._ignores[sday]) continue; + + var block_proto = scheduler._get_block_by_config(options), + height = Math.max(area.offsetHeight - 1, 0), // 1 for bottom border + width = Math.max(area.offsetWidth - 1, 0), // 1 for left border + left = this._colsS[sday], + top = this._colsS.heights[sweek]+(this._colsS.height?(this.xy.month_scale_height+2):2)-1; + + block_proto.className = css_classes; + block_proto.style.top = top + "px"; + block_proto.style.lineHeight = block_proto.style.height = height + "px"; + + for (var k=0; k < zones.length; k+=2) { + var start = zones[i]; + var end = zones[i+1]; + if (end <= start) + return []; + + var block = block_proto.cloneNode(true); + + block.style.left = (left + Math.round( (start)/(24*60) * width)) + "px"; + block.style.width = Math.round( (end-start)/(24*60) * width) + "px"; + + area.appendChild(block); + blocks.push(block); + } + } + } else { + var index = day; + + if(this._ignores[this.locate_holder_day(day, false)]) return blocks; + + if (this._props && this._props[this._mode] && options.sections && options.sections[this._mode]) { + var view = this._props[this._mode]; + index = view.order[options.sections[this._mode]]; + if (view.size && (index > view.position+view.size)) { + index = 0; + } + } + area = area ? area : scheduler.locate_holder(index); + + for (var i = 0; i < zones.length; i+=2){ + var start = Math.max(zones[i], c.first_hour*60); + var end = Math.min(zones[i+1], c.last_hour*60); + if (end <= start) { + if (i+2 < zones.length) + continue; + else + return []; + } + + var block = scheduler._get_block_by_config(options); + block.className = css_classes; + + // +1 for working with section which really takes up whole height (as % would be == 0) + var all_hours_height = this.config.hour_size_px*24 + 1; + var hour_ms = 60*60*1000; + block.style.top = (Math.round((start*60*1000-this.config.first_hour*hour_ms)*this.config.hour_size_px/hour_ms) % all_hours_height) + "px"; + block.style.lineHeight = block.style.height = Math.max((Math.round(((end-start)*60*1000)*this.config.hour_size_px/hour_ms)) % all_hours_height, 1)+"px"; + + area.appendChild(block); + blocks.push(block); + } + } + + return blocks; + }; + // just marks timespan, will be cleaned after refresh + scheduler.markTimespan = function(configuration) { + var configs = scheduler._prepare_timespan_options(configuration); + if (!configs.length) + return; + var divs = []; + for (var i=0; i<configs.length; i++) { + var config = configs[i]; + var blocks = scheduler._render_marked_timespan(config, null, null); + if(blocks.length) + divs.push.apply(divs, blocks); + } + return divs; + }; + scheduler.unmarkTimespan = function(divs) { + if (!divs) + return; + for (var i=0; i<divs.length; i++) { + var div = divs[i]; + // parent may no longer be present if we switched views, navigated + if (div.parentNode) { + div.parentNode.removeChild(div); + } + } + }; + + scheduler._marked_timespans_ids = {}; + // adds marked timespan to collections, persistent + scheduler.addMarkedTimespan = function(configuration) { + var configs = scheduler._prepare_timespan_options(configuration); + var global = "global"; + + if (!configs.length) + return; // options are incorrect, nothing to mark + + var id = configs[0].id; + var timespans = scheduler._marked_timespans; + var ids = scheduler._marked_timespans_ids; + if (!ids[id]) + ids[id] = []; + + for (var i=0; i<configs.length; i++) { + var config = configs[i]; + var day = config.days; + var zones = config.zones; + var css = config.css; + var sections = config.sections; + var type = config.type; // default or specified + config.id = id; + + if (sections) { + for (var view_key in sections) { + if (sections.hasOwnProperty(view_key)) { + if (!timespans[view_key]) + timespans[view_key] = {}; + var unit_id = sections[view_key]; + var timespans_view = timespans[view_key]; + if (!timespans_view[unit_id]) + timespans_view[unit_id] = {}; + if (!timespans_view[unit_id][day]) + timespans_view[unit_id][day] = {}; + if (!timespans_view[unit_id][day][type]){ + timespans_view[unit_id][day][type] = []; + if(!scheduler._marked_timespans_types) + scheduler._marked_timespans_types = {}; + if(!scheduler._marked_timespans_types[type]) + scheduler._marked_timespans_types[type] = true; + } + var day_configs = timespans_view[unit_id][day][type]; + config._array = day_configs; + day_configs.push(config); + ids[id].push(config); + } + } + } else { + if (!timespans[global][day]) + timespans[global][day] = {}; + if (!timespans[global][day][type]) + timespans[global][day][type] = []; + + if(!scheduler._marked_timespans_types) + scheduler._marked_timespans_types = {}; + if(!scheduler._marked_timespans_types[type]) + scheduler._marked_timespans_types[type] = true; + + + var day_configs = timespans[global][day][type]; + config._array = day_configs; + day_configs.push(config); + ids[id].push(config); + } + } + return id; + }; + // not used for now + scheduler._add_timespan_zones = function(current_zones, zones) { + var resulting_zones = current_zones.slice(); + zones = zones.slice(); + + if (!resulting_zones.length) + return zones; + + for (var i=0; i<resulting_zones.length; i+=2) { + var c_zone_start = resulting_zones[i]; + var c_zone_end = resulting_zones[i+1]; + var isLast = (i+2 == resulting_zones.length); + + for (var k=0; k<zones.length; k+=2) { + var zone_start = zones[k]; + var zone_end = zones[k+1]; + if ((zone_end > c_zone_end && zone_start <= c_zone_end) || (zone_start < c_zone_start && zone_end >= c_zone_start)) { + resulting_zones[i] = Math.min(c_zone_start, zone_start); + resulting_zones[i+1] = Math.max(c_zone_end, zone_end); + i -= 2; + } else { + if (!isLast) // do nothing, maybe next current zone will match or will be last + continue; + + var offset = (c_zone_start > zone_start)?0:2; + resulting_zones.splice(i+offset, 0, zone_start, zone_end); // last current zone, need to add another + } + zones.splice(k--,2); // zone was merged or added, need to exclude it + break; + } + } + return resulting_zones; + }; + scheduler._subtract_timespan_zones = function(current_zones, zones) { + var resulting_zones = current_zones.slice(); + for (var i=0; i<resulting_zones.length; i+=2 ) { + var c_zone_start = resulting_zones[i];// current_zone_start + var c_zone_end = resulting_zones[i+1]; + for (var k=0; k<zones.length; k+=2) { + var zone_start = zones[k]; + var zone_end = zones[k+1]; + if (zone_end > c_zone_start && zone_start < c_zone_end) { + var is_modified = false; + if (c_zone_start >= zone_start && c_zone_end <= zone_end) { + resulting_zones.splice(i, 2); + } + if (c_zone_start < zone_start) { + resulting_zones.splice(i, 2, c_zone_start, zone_start); + is_modified = true; + } + if (c_zone_end > zone_end) { + resulting_zones.splice( (is_modified)?(i+2):i, (is_modified)?0:2, zone_end, c_zone_end); + } + i -= 2; + break; + } else { + continue; + } + } + } + return resulting_zones; + }; + scheduler.invertZones = function(zones) { + return scheduler._subtract_timespan_zones([0, 1440], zones.slice()); + }; + scheduler._delete_marked_timespan_by_id = function(id) { + var configs = scheduler._marked_timespans_ids[id]; + if (configs) { + for (var i=0; i<configs.length; i++) { + var config = configs[i]; + var parent_array = config._array; + for (var k=0; k<parent_array.length; k++) { + if (parent_array[k] == config) { + parent_array.splice(k, 1); + break; + } + } + } + } + }; + scheduler._delete_marked_timespan_by_config = function(config) { + var timespans = scheduler._marked_timespans; + var sections = config.sections; + var day = config.days; + var type = config.type||default_timespan_type; + var day_timespans = []; // array of timespans to subtract our config + if (sections) { + for (var view_key in sections) { + if (sections.hasOwnProperty(view_key) && timespans[view_key]) { + var unit_id = sections[view_key]; + if (timespans[view_key][unit_id] && timespans[view_key][unit_id][day] && timespans[view_key][unit_id][day][type]) + day_timespans = timespans[view_key][unit_id][day][type]; + } + } + } else { + if (timespans.global[day] && timespans.global[day][type]) + day_timespans = timespans.global[day][type]; + } + for (var i=0; i<day_timespans.length; i++) { + var d_t = day_timespans[i]; + var zones = scheduler._subtract_timespan_zones(d_t.zones, config.zones); + if (zones.length) + d_t.zones = zones; + else { + day_timespans.splice(i,1); + i--; + // need to update ids collection + var related_zones = scheduler._marked_timespans_ids[d_t.id]; + for (var k=0; k<related_zones.length; k++) { + if (related_zones[k] == d_t) { + related_zones.splice(k, 1); + break; + } + } + } + } + }; + scheduler.deleteMarkedTimespan = function(configuration) { + // delete everything + if (!arguments.length) { + scheduler._marked_timespans = { global: {} }; + scheduler._marked_timespans_ids = {}; + scheduler._marked_timespans_types = {}; + } + + if (typeof configuration != "object") { // id was passed + scheduler._delete_marked_timespan_by_id(configuration); + } else { // normal configuration was passed + + if(!(configuration.start_date && configuration.end_date)){ + if(!configuration.days) + configuration.days = "fullweek"; + if(!configuration.zones) + configuration.zones = "fullday"; + } + + var types = []; + if(!configuration.type){ + //if type not specified - delete timespans of all types + for(var type in scheduler._marked_timespans_types){ + types.push(type); + } + }else{ + types.push(configuration.type); + } + + + var configs = scheduler._prepare_timespan_options(configuration); + + for (var i=0; i<configs.length; i++) { + + var config = configs[i]; + for( var t=0; t < types.length; t++){ + var typedConfig = scheduler._lame_clone(config); + typedConfig.type = types[t]; + scheduler._delete_marked_timespan_by_config(typedConfig); + } + } + + } + }; + scheduler._get_types_to_render = function(common, specific) { + var types_to_render = (common) ? scheduler._lame_copy({},common) : {}; + for (var type in specific||{} ) { + if (specific.hasOwnProperty(type)) { + types_to_render[type] = specific[type]; + } + } + return types_to_render; + }; + scheduler._get_configs_to_render = function(types) { + var configs = []; + for (var type in types) { + if (types.hasOwnProperty(type)) { + configs.push.apply(configs, types[type]); + } + } + return configs; + }; + scheduler.attachEvent("onScaleAdd", function(area, day) { + if (scheduler._table_view && scheduler._mode != "month") + return; + + var day_index = day.getDay(); + var day_value = day.valueOf(); + var mode = this._mode; + var timespans = scheduler._marked_timespans; + var r_configs = []; + + if (this._props && this._props[mode]) { // we are in the units view and need to draw it's sections as well + var view = this._props[mode]; // units view object + var units = view.options; + var index = scheduler._get_unit_index(view, day); + var unit = units[index]; // key, label + day = scheduler.date.date_part(new Date(this._date)); // for units view actually only 1 day is displayed yet the day variable will change, need to use this._date for all calls + day_index = day.getDay(); + day_value = day.valueOf(); + + if (timespans[mode] && timespans[mode][unit.key]) { + var unit_zones = timespans[mode][unit.key]; + var unit_types = scheduler._get_types_to_render(unit_zones[day_index], unit_zones[day_value]); + r_configs.push.apply(r_configs, scheduler._get_configs_to_render(unit_types)); + } + } + + var global_data = timespans["global"]; + var day_types = global_data[day_value]||global_data[day_index]; + r_configs.push.apply(r_configs, scheduler._get_configs_to_render(day_types)); + + for (var i=0; i<r_configs.length; i++) { + scheduler._render_marked_timespan(r_configs[i], area, day); + } + }); + + scheduler.dblclick_dhx_marked_timespan = function(e,src){ + if (!scheduler.config.dblclick_create){ + scheduler.callEvent("onScaleDblClick",[scheduler.getActionData(e).date,src,e]); + } + scheduler.addEventNow(scheduler.getActionData(e).date,null,e); + }; + +}; +scheduler._temp_limit_scope(); diff --git a/codebase/sources/ext/dhtmlxscheduler_limit.js.map b/codebase/sources/ext/dhtmlxscheduler_limit.js.map new file mode 100644 index 0000000..96d0ed7 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_limit.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_limit.js.map","sources":["dhtmlxscheduler_limit.js"],"names":["scheduler","config","limit_start","limit_end","limit_view","check_limits","mark_now","display_marked_timespans","_temp_limit_scope","getZones","ev","timespans","day_index","day_value","timespan_type","s","zones","containers","_props","matrix","container","property","view","view_config","linker","_add_timespan_zones","_get_blocked_zones","before","dhx_time_block","default_timespan_type","fix_options","options","days","Date","start_date","end_date","get_resulting_options","sections","type","css","blockTime","addMarkedTimespan","unblockTime","deleteMarkedTimespan","attachEvent","om","od","nm","nd","valueOf","this","date","add","setTimeout","setCurrentView","checkInMarkedTimespan","on_overlap","res","temp_start_date","temp_end_date","_marked_timespans","date_part","getDay","i","length","sm","_get_zone_minutes","em","getDate","sz","ez","blocker","checkLimitViolation","event","c","evs","rec_type","dates","getRecDates","_copy_event","_lame_copy","push","complete_res","p","_timed","isOneDayEvent","allow","_drag_id","_drag_mode","setHours","setMinutes","checkEvent","callEvent","id","timeline_zones","blocked_timeline_zones","_get_relevant_blocked_zones","relevant_zones","classname","getEvent","event_id","data","data_copy","_lame_clone","_roll_back_dates","event_duration","time_step","getActionData","_mark_now","window","_mark_now_timer","setInterval","_is_initialized","hide","dhx_now_time","_els","now","_currentDate","cfg","_remove_mark_now","_max_date","_min_date","getHours","first_hour","last_hour","locate_holder_day","_append_mark_now","zone_start","_table_view","_mode","day_divs","childNodes","r_divs","t_day","t_div","_render_marked_timespan","els","div","parent","parentNode","removeChild","global","getMinutes","_prepare_timespan_options","r_configs","temp_configs","Array","t_days","slice","cloned_config","apply","undefined","min","max","invert_zones","invertZones","uid","view_key","hasOwnProperty","ids","t_config","k","c_config","t_sd","t_ed","zone_end","_get_dates_by_index","index","start","end","start_day","delta","t_date","_get_css_classes_by_config","css_classes","join","_get_block_by_config","block","document","createElement","html","innerHTML","appendChild","area","day","blocks","min_date","max_date","date_to_display","min_day","areas","_scales","sweek","Math","floor","_correct_shift","_cols","sday","_ignores","block_proto","height","offsetHeight","width","offsetWidth","left","_colsS","top","heights","xy","month_scale_height","className","style","lineHeight","cloneNode","round","order","size","position","locate_holder","all_hours_height","hour_size_px","hour_ms","markTimespan","configuration","configs","divs","unmarkTimespan","_marked_timespans_ids","unit_id","timespans_view","_marked_timespans_types","day_configs","_array","current_zones","resulting_zones","c_zone_start","c_zone_end","isLast","offset","splice","_subtract_timespan_zones","is_modified","_delete_marked_timespan_by_id","parent_array","_delete_marked_timespan_by_config","day_timespans","d_t","related_zones","arguments","types","t","typedConfig","_get_types_to_render","common","specific","types_to_render","_get_configs_to_render","mode","units","_get_unit_index","unit","_date","key","unit_zones","unit_types","global_data","day_types","dblclick_dhx_marked_timespan","e","src","dblclick_create","addEventNow"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_map_view.js b/codebase/sources/ext/dhtmlxscheduler_map_view.js new file mode 100644 index 0000000..2ea6044 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_map_view.js @@ -0,0 +1,492 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.xy.map_date_width = 188; // date column width +scheduler.xy.map_description_width = 400; // description column width + +scheduler.config.map_resolve_event_location = true; // if events in database doesn't have lat and lng values there will be an attempt to resolve them on event loading, useful for migration +scheduler.config.map_resolve_user_location = true; // if user will be promted to share his location to display it on the map + +scheduler.config.map_initial_position = new google.maps.LatLng(48.724, 8.215); // inital position of the map +scheduler.config.map_error_position = new google.maps.LatLng(15, 15); // this position will be displayed in case if event doesn't have corresponding coordinates + +scheduler.config.map_infowindow_max_width = 300; + +scheduler.config.map_type = google.maps.MapTypeId.ROADMAP; + +scheduler.config.map_zoom_after_resolve = 15; + +scheduler.locale.labels.marker_geo_success = "It seems you are here."; +scheduler.locale.labels.marker_geo_fail = "Sorry, could not get your current position using geolocation."; + +scheduler.templates.marker_date = scheduler.date.date_to_str("%Y-%m-%d %H:%i"); // date for map's infowindow will be formated following way + +scheduler.templates.marker_text = function(start, end, ev) { + return "<div><b>" + ev.text + "</b><br/><br/>" + (ev.event_location || '') + "<br/><br/>" + scheduler.templates.marker_date(start) + " - " + scheduler.templates.marker_date(end) + "</div>"; +}; +scheduler.dblclick_dhx_map_area = function() { + if (!this.config.readonly && this.config.dblclick_create) + this.addEventNow({ + start_date: scheduler._date, + end_date: scheduler.date.add(scheduler._date, scheduler.config.time_step, "minute") + }); +}; +scheduler.templates.map_time = function(start, end, ev) { + if (ev._timed) + return this.day_date(ev.start_date, ev.end_date, ev) + " " + this.event_date(start); + else + return scheduler.templates.day_date(start) + " – " + scheduler.templates.day_date(end); +}; +scheduler.templates.map_text = function(start, end, ev) { + return ev.text; +}; + +scheduler.date.map_start = function(d) { + return d; +}; +scheduler.date.add_map = function(date, inc, mode) { + return (new Date(date.valueOf())); +}; + +scheduler.templates.map_date = function(dd, ed, mode) { + return ''; +}; + +scheduler._latLngUpdate = false; // flag for not displaying event second time in case of coordinates update + +scheduler.attachEvent("onSchedulerReady", function() { + scheduler._isMapPositionSet = false; // if user actual (geolocation) position was set on the map + + var gmap = document.createElement('div'); + gmap.className = 'dhx_map'; + gmap.id = 'dhx_gmap'; + gmap.style.dispay = "none"; + + var node = scheduler._obj; + + node.appendChild(gmap); + + scheduler._els.dhx_gmap = []; + scheduler._els.dhx_gmap.push(gmap); + + _setMapSize('dhx_gmap'); + + var mapOptions = { + zoom: scheduler.config.map_inital_zoom || 10, + center: scheduler.config.map_initial_position, + mapTypeId: scheduler.config.map_type || google.maps.MapTypeId.ROADMAP + }; + var map = new google.maps.Map(document.getElementById('dhx_gmap'), mapOptions); + map.disableDefaultUI = false; + map.disableDoubleClickZoom = !scheduler.config.readonly; + + google.maps.event.addListener(map, "dblclick", function(event) { + if (!scheduler.config.readonly && scheduler.config.dblclick_create) { + var point = event.latLng; + geocoder.geocode( + { 'latLng': point }, + function(results, status) { + if (status == google.maps.GeocoderStatus.OK) { + point = results[0].geometry.location; + scheduler.addEventNow({ + lat: point.lat(), + lng: point.lng(), + event_location: results[0].formatted_address, + start_date: scheduler._date, + end_date: scheduler.date.add(scheduler._date, scheduler.config.time_step, "minute") + }); + } + } + ); + } + }); + + var infoWindowOptions = { + content: '' + }; + + if (scheduler.config.map_infowindow_max_width) { + infoWindowOptions.maxWidth = scheduler.config.map_infowindow_max_width; + } + + scheduler.map = { + _points: [], + _markers: [], + _infowindow: new google.maps.InfoWindow(infoWindowOptions), + _infowindows_content: [], + _initialization_count: -1, + _obj: map + }; + + geocoder = new google.maps.Geocoder(); + + if (scheduler.config.map_resolve_user_location) { + if (navigator.geolocation) { + if (!scheduler._isMapPositionSet) { + navigator.geolocation.getCurrentPosition(function(position) { + var _userLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); + map.setCenter(_userLocation); + map.setZoom(scheduler.config.map_zoom_after_resolve || 10); + scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_success); + scheduler.map._infowindow.position = map.getCenter(); + scheduler.map._infowindow.open(map); + + scheduler._isMapPositionSet = true; + }, + function() { + scheduler.map._infowindow.setContent(scheduler.locale.labels.marker_geo_fail); + scheduler.map._infowindow.setPosition(map.getCenter()); + scheduler.map._infowindow.open(map); + scheduler._isMapPositionSet = true; + }); + } + } + } + google.maps.event.addListener(map, "resize", function(event) { + gmap.style.zIndex = '5'; + map.setZoom(map.getZoom()); + + }); + google.maps.event.addListener(map, "tilesloaded", function(event) { + gmap.style.zIndex = '5'; + }); + + gmap.style.display = 'none'; // property was changed after attaching map + + + scheduler.attachEvent("onSchedulerResize", function() { + if (this._mode == "map") { + this.map_view(true); + return false; + } + return true; + }); + + var old = scheduler.render_data; + scheduler.render_data = function(evs, hold) { + if (this._mode == "map") { + fill_map_tab(); + var events = scheduler.get_visible_events(); + for (var i = 0; i < events.length; i++) { + if (!scheduler.map._markers[events[i].id]) { + showAddress(events[i], false, false); + } + } + } else + return old.apply(this, arguments); + }; + + function set_full_view(mode) { + if (mode) { + var l = scheduler.locale.labels; + scheduler._els["dhx_cal_header"][0].innerHTML = "<div class='dhx_map_line' style='width: " + (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 2) + "px;' ><div class='headline_date' style='width: " + scheduler.xy.map_date_width + "px;'>" + l.date + "</div><div class='headline_description' style='width: " + scheduler.xy.map_description_width + "px;'>" + l.description + "</div></div>"; + scheduler._table_view = true; + scheduler.set_sizes(); + } + } + + function clear_map_tab() { + scheduler._selected_event_id = null; + scheduler.map._infowindow.close(); + var markers = scheduler.map._markers; + for (var key in markers) { + if (markers.hasOwnProperty(key)) { + markers[key].setMap(null); + delete scheduler.map._markers[key]; + if (scheduler.map._infowindows_content[key]) + delete scheduler.map._infowindows_content[key]; + } + } + } + + function fill_map_tab() { + //select events for which data need to be printed + var events = scheduler.get_visible_events(); + events.sort(function(a, b) { + if(a.start_date.valueOf()==b.start_date.valueOf()) + return a.id>b.id?1:-1; + return a.start_date>b.start_date?1:-1; + }); + + //generate html for the view + var html = "<div class='dhx_map_area'>"; + for (var i = 0; i < events.length; i++) { + var ev = events[i]; + var event_class = (ev.id == scheduler._selected_event_id) ? 'dhx_map_line highlight' : 'dhx_map_line'; + var bg_color = (ev.color ? ("background:" + ev.color + ";") : ""); + var color = (ev.textColor ? ("color:" + ev.textColor + ";") : ""); + html += "<div class='" + event_class + "' event_id='" + ev.id + "' style='" + bg_color + "" + color + "" + (ev._text_style || "") + " width: " + (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 2) + "px;'><div style='width: " + scheduler.xy.map_date_width + "px;' >" + scheduler.templates.map_time(ev.start_date, ev.end_date, ev) + "</div>"; + html += "<div class='dhx_event_icon icon_details'> </div>"; + html += "<div class='line_description' style='width:" + (scheduler.xy.map_description_width - 25) + "px;'>" + scheduler.templates.map_text(ev.start_date, ev.end_date, ev) + "</div></div>"; // -25 = icon size 20 and padding 5 + } + html += "<div class='dhx_v_border' style='left: " + (scheduler.xy.map_date_width - 2) + "px;'></div><div class='dhx_v_border_description'></div></div>"; + + //render html + scheduler._els["dhx_cal_data"][0].scrollTop = 0; //fix flickering in FF + scheduler._els["dhx_cal_data"][0].innerHTML = html; + scheduler._els["dhx_cal_data"][0].style.width = (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 1) + 'px'; + + var t = scheduler._els["dhx_cal_data"][0].firstChild.childNodes; + scheduler._els["dhx_cal_date"][0].innerHTML = scheduler.templates[scheduler._mode + "_date"](scheduler._min_date, scheduler._max_date, scheduler._mode); + + scheduler._rendered = []; + for (var i = 0; i < t.length - 2; i++) { + scheduler._rendered[i] = t[i]; + } + } + + function _setMapSize(elem_id) { //input - map's div id + var map = document.getElementById(elem_id); + var height = scheduler._y - scheduler.xy.nav_height; + if (height < 0) + height = 0; + var width = scheduler._x - scheduler.xy.map_date_width - scheduler.xy.map_description_width - 1; + if (width < 0) + width = 0; + map.style.height = height + 'px'; + map.style.width = width + 'px'; + map.style.marginLeft = (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 1) + 'px'; + map.style.marginTop = (scheduler.xy.nav_height + 2) + 'px'; + } + + scheduler.map_view = function(mode) { + scheduler.map._initialization_count++; + var gmap = scheduler._els.dhx_gmap[0]; + var temp_center; + scheduler._els.dhx_cal_data[0].style.width = (scheduler.xy.map_date_width + scheduler.xy.map_description_width + 1) + 'px'; + + scheduler._min_date = scheduler.config.map_start || (scheduler._currentDate()); + scheduler._max_date = scheduler.config.map_end || scheduler.date.add(scheduler._currentDate(), 1, "year"); + + scheduler._table_view = true; + set_full_view(mode); + + if (mode) { //map tab activated + clear_map_tab(); + fill_map_tab(); + gmap.style.display = 'block'; + + // need to resize block everytime window is resized + _setMapSize('dhx_gmap'); + temp_center = scheduler.map._obj.getCenter(); + + var events = scheduler.get_visible_events(); + for (var i = 0; i < events.length; i++) { + if (!scheduler.map._markers[events[i].id]) { + showAddress(events[i]); + } + } + + } else { //map tab de-activated + gmap.style.display = 'none'; + } + google.maps.event.trigger(scheduler.map._obj, 'resize'); + + if (scheduler.map._initialization_count === 0 && temp_center) { // if tab is activated for the first time need to fix position + scheduler.map._obj.setCenter(temp_center); + } + + if (scheduler._selected_event_id) { + selectEvent(scheduler._selected_event_id); + } + }; + + var selectEvent = function(event_id) { + scheduler.map._obj.setCenter(scheduler.map._points[event_id]); + scheduler.callEvent("onClick", [event_id]); + }; + + var showAddress = function(event, setCenter, performClick) { // what if event have incorrect position from the start? + var point = scheduler.config.map_error_position; + if (event.lat && event.lng) { + point = new google.maps.LatLng(event.lat, event.lng); + } + var message = scheduler.templates.marker_text(event.start_date, event.end_date, event); + if (!scheduler._new_event) { + + scheduler.map._infowindows_content[event.id] = message; + + if (scheduler.map._markers[event.id]) + scheduler.map._markers[event.id].setMap(null); + + scheduler.map._markers[event.id] = new google.maps.Marker({ + position: point, + map: scheduler.map._obj + }); + + google.maps.event.addListener(scheduler.map._markers[event.id], 'click', function() { + scheduler.map._infowindow.setContent(scheduler.map._infowindows_content[event.id]); + scheduler.map._infowindow.open(scheduler.map._obj, scheduler.map._markers[event.id]); + scheduler._selected_event_id = event.id; + scheduler.render_data(); + }); + scheduler.map._points[event.id] = point; + + if (setCenter) scheduler.map._obj.setCenter(scheduler.map._points[event.id]); + if (performClick) scheduler.callEvent("onClick", [event.id]); + } + }; + + scheduler.attachEvent("onClick", function(event_id, native_event_object) { + if (this._mode == "map") { + scheduler._selected_event_id = event_id; + for (var i = 0; i < scheduler._rendered.length; i++) { + scheduler._rendered[i].className = 'dhx_map_line'; + if (scheduler._rendered[i].getAttribute("event_id") == event_id) { + scheduler._rendered[i].className += " highlight"; + } + } + if (scheduler.map._points[event_id] && scheduler.map._markers[event_id]) { + scheduler.map._obj.setCenter(scheduler.map._points[event_id]); // was panTo + google.maps.event.trigger(scheduler.map._markers[event_id], 'click'); + } + } + return true; + }); + + var _displayEventOnMap = function(event) { + if (event.event_location && geocoder) { + geocoder.geocode( + { + 'address': event.event_location, + 'language': scheduler.uid().toString() + }, + function(results, status) { + var point = {}; + if (status != google.maps.GeocoderStatus.OK) { + point = scheduler.callEvent("onLocationError", [event.id]); + if (!point || point === true) + point = scheduler.config.map_error_position; + } else { + point = results[0].geometry.location; + } + event.lat = point.lat(); + event.lng = point.lng(); + + scheduler._selected_event_id = event.id; + + scheduler._latLngUpdate = true; + scheduler.callEvent("onEventChanged", [event.id, event]); + showAddress(event, true, true); + } + ); + } else { + showAddress(event, true, true); + } + }; + + var _updateEventLocation = function(event) { // update lat and lng in database + if (event.event_location && geocoder) { + geocoder.geocode( + { + 'address': event.event_location, + 'language': scheduler.uid().toString() + }, + function(results, status) { + var point = {}; + if (status != google.maps.GeocoderStatus.OK) { + point = scheduler.callEvent("onLocationError", [event.id]); + if (!point || point === true) + point = scheduler.config.map_error_position; + } else { + point = results[0].geometry.location; + } + event.lat = point.lat(); + event.lng = point.lng(); + scheduler._latLngUpdate = true; + scheduler.callEvent("onEventChanged", [event.id, event]); + } + ); + } + }; + + var _delay = function(method, object, params, delay) { + setTimeout(function() { + var ret = method.apply(object, params); + method = object = params = null; + return ret; + }, delay || 1); + }; + + scheduler.attachEvent("onEventChanged", function(event_id, event_object) { + if (!this._latLngUpdate) { + var event = scheduler.getEvent(event_id); + if ((event.start_date < scheduler._min_date && event.end_date > scheduler._min_date) || (event.start_date < scheduler._max_date && event.end_date > scheduler._max_date) || (event.start_date.valueOf() >= scheduler._min_date && event.end_date.valueOf() <= scheduler._max_date)) { + if (scheduler.map._markers[event_id]) + scheduler.map._markers[event_id].setMap(null); + _displayEventOnMap(event); + } else { // event no longer should be displayed on the map view + scheduler._selected_event_id = null; + scheduler.map._infowindow.close(); + if (scheduler.map._markers[event_id]) + scheduler.map._markers[event_id].setMap(null); + } + } + else + this._latLngUpdate = false; + return true; + }); + + + scheduler.attachEvent("onEventIdChange", function(old_event_id, new_event_id) { + var event = scheduler.getEvent(new_event_id); + if ((event.start_date < scheduler._min_date && event.end_date > scheduler._min_date) || (event.start_date < scheduler._max_date && event.end_date > scheduler._max_date) || (event.start_date.valueOf() >= scheduler._min_date && event.end_date.valueOf() <= scheduler._max_date)) { + if (scheduler.map._markers[old_event_id]) { + scheduler.map._markers[old_event_id].setMap(null); + delete scheduler.map._markers[old_event_id]; + } + if (scheduler.map._infowindows_content[old_event_id]) + delete scheduler.map._infowindows_content[old_event_id]; + _displayEventOnMap(event); + } + return true; + }); + + scheduler.attachEvent("onEventAdded", function(event_id, event_object) { + if (!scheduler._dataprocessor) { + if ((event_object.start_date < scheduler._min_date && event_object.end_date > scheduler._min_date) || (event_object.start_date < scheduler._max_date && event_object.end_date > scheduler._max_date) || (event_object.start_date.valueOf() >= scheduler._min_date && event_object.end_date.valueOf() <= scheduler._max_date)) { + if (scheduler.map._markers[event_id]) + scheduler.map._markers[event_id].setMap(null); + _displayEventOnMap(event_object); + } + } + return true; + }); + + /* Test/example + scheduler.attachEvent("onLocationError", function(event_id,event_object){ + return new google.maps.LatLng(8, 8); + }); + */ + + scheduler.attachEvent("onBeforeEventDelete", function(event_id, event_object) { + if (scheduler.map._markers[event_id]) { + scheduler.map._markers[event_id].setMap(null); // if new event is deleted tab != map then it doesn't have marker yet + } + scheduler._selected_event_id = null; + scheduler.map._infowindow.close(); + return true; + }); + + scheduler._event_resolve_delay = 1500; + scheduler.attachEvent("onEventLoading", function(event) { + if (scheduler.config.map_resolve_event_location && event.event_location && !event.lat && !event.lng) { // don't delete !event.lat && !event.lng as location could change + scheduler._event_resolve_delay += 1500; + _delay(_updateEventLocation, this, [event], scheduler._event_resolve_delay); + } + return true; + }); + + scheduler.attachEvent("onEventCancel", function(event_id, is_new) { + if (is_new) { + if (scheduler.map._markers[event_id]) + scheduler.map._markers[event_id].setMap(null); + scheduler.map._infowindow.close(); + } + return true; + }); +}); diff --git a/codebase/sources/ext/dhtmlxscheduler_map_view.js.map b/codebase/sources/ext/dhtmlxscheduler_map_view.js.map new file mode 100644 index 0000000..e7bcadb --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_map_view.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_map_view.js.map","sources":["dhtmlxscheduler_map_view.js"],"names":["scheduler","xy","map_date_width","map_description_width","config","map_resolve_event_location","map_resolve_user_location","map_initial_position","google","maps","LatLng","map_error_position","map_infowindow_max_width","map_type","MapTypeId","ROADMAP","map_zoom_after_resolve","locale","labels","marker_geo_success","marker_geo_fail","templates","marker_date","date","date_to_str","marker_text","start","end","ev","text","event_location","dblclick_dhx_map_area","this","readonly","dblclick_create","addEventNow","start_date","_date","end_date","add","time_step","map_time","_timed","day_date","event_date","map_text","map_start","d","add_map","Date","valueOf","map_date","_latLngUpdate","attachEvent","set_full_view","mode","l","_els","innerHTML","description","_table_view","set_sizes","clear_map_tab","_selected_event_id","map","_infowindow","close","markers","_markers","key","hasOwnProperty","setMap","_infowindows_content","fill_map_tab","events","get_visible_events","sort","a","b","id","html","i","length","event_class","bg_color","color","textColor","_text_style","scrollTop","style","width","t","firstChild","childNodes","_mode","_min_date","_max_date","_rendered","_setMapSize","elem_id","document","getElementById","height","_y","nav_height","_x","marginLeft","marginTop","_isMapPositionSet","gmap","createElement","className","dispay","node","_obj","appendChild","dhx_gmap","push","mapOptions","zoom","map_inital_zoom","center","mapTypeId","Map","disableDefaultUI","disableDoubleClickZoom","event","addListener","point","latLng","geocoder","geocode","results","status","GeocoderStatus","OK","geometry","location","lat","lng","formatted_address","infoWindowOptions","content","maxWidth","_points","InfoWindow","_initialization_count","Geocoder","navigator","geolocation","getCurrentPosition","position","_userLocation","coords","latitude","longitude","setCenter","setZoom","setContent","getCenter","open","setPosition","zIndex","getZoom","display","map_view","old","render_data","apply","arguments","showAddress","temp_center","dhx_cal_data","_currentDate","map_end","trigger","selectEvent","event_id","callEvent","performClick","message","_new_event","Marker","getAttribute","_displayEventOnMap","address","language","uid","toString","_updateEventLocation","_delay","method","object","params","delay","setTimeout","ret","getEvent","old_event_id","new_event_id","event_object","_dataprocessor","_event_resolve_delay","is_new"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_minical.js b/codebase/sources/ext/dhtmlxscheduler_minical.js new file mode 100644 index 0000000..262c7cb --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_minical.js @@ -0,0 +1,472 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.templates.calendar_month = scheduler.date.date_to_str("%F %Y"); +scheduler.templates.calendar_scale_date = scheduler.date.date_to_str("%D"); +scheduler.templates.calendar_date = scheduler.date.date_to_str("%d"); +scheduler.config.minicalendar = { + mark_events: true +}; +scheduler._synced_minicalendars = []; +scheduler.renderCalendar = function(obj, _prev, is_refresh) { + var cal = null; + var date = obj.date || (scheduler._currentDate()); + if (typeof date == "string") + date = this.templates.api_date(date); + + if (!_prev) { + var cont = obj.container; + var pos = obj.position; + + if (typeof cont == "string") + cont = document.getElementById(cont); + + if (typeof pos == "string") + pos = document.getElementById(pos); + if (pos && (typeof pos.left == "undefined")) { + var tpos = getOffset(pos); + pos = { + top: tpos.top + pos.offsetHeight, + left: tpos.left + }; + } + if (!cont) + cont = scheduler._get_def_cont(pos); + + cal = this._render_calendar(cont, date, obj); + cal.onclick = function(e) { + e = e || event; + var src = e.target || e.srcElement; + + if (src.className.indexOf("dhx_month_head") != -1) { + var pname = src.parentNode.className; + if (pname.indexOf("dhx_after") == -1 && pname.indexOf("dhx_before") == -1) { + var newdate = scheduler.templates.xml_date(this.getAttribute("date")); + newdate.setDate(parseInt(src.innerHTML, 10)); + scheduler.unmarkCalendar(this); + scheduler.markCalendar(this, newdate, "dhx_calendar_click"); + this._last_date = newdate; + if (this.conf.handler) this.conf.handler.call(scheduler, newdate, this); + } + } + }; + } else { + cal = this._render_calendar(_prev.parentNode, date, obj, _prev); + scheduler.unmarkCalendar(cal); + } + + if (scheduler.config.minicalendar.mark_events) { + var start = scheduler.date.month_start(date); + var end = scheduler.date.add(start, 1, "month"); + var evs = this.getEvents(start, end); + var filter = this["filter_" + this._mode]; + for (var i = 0; i < evs.length; i++) { + var ev = evs[i]; + if (filter && !filter(ev.id, ev)) + continue; + var d = ev.start_date; + if (d.valueOf() < start.valueOf()) + d = start; + d = scheduler.date.date_part(new Date(d.valueOf())); + while (d < ev.end_date) { + this.markCalendar(cal, d, "dhx_year_event"); + d = this.date.add(d, 1, "day"); + if (d.valueOf() >= end.valueOf()) + break; + } + } + } + + this._markCalendarCurrentDate(cal); + + cal.conf = obj; + if (obj.sync && !is_refresh) + this._synced_minicalendars.push(cal); + + return cal; +}; +scheduler._get_def_cont = function(pos) { + if (!this._def_count) { + this._def_count = document.createElement("DIV"); + this._def_count.className = "dhx_minical_popup"; + this._def_count.onclick = function(e) { (e || event).cancelBubble = true; }; + document.body.appendChild(this._def_count); + } + + this._def_count.style.left = pos.left + "px"; + this._def_count.style.top = pos.top + "px"; + this._def_count._created = new Date(); + + return this._def_count; +}; +scheduler._locateCalendar = function(cal, date) { + if (typeof date == "string") + date = scheduler.templates.api_date(date); + + if(+date > +cal._max_date || +date < +cal._min_date) + return null; + + var table = cal.childNodes[2].childNodes[0]; + + var weekNum = 0; + var dat = new Date(cal._min_date); + while(+this.date.add(dat, 1, "week") <= +date){ + dat = this.date.add(dat, 1, "week"); + weekNum++; + } + + var sm = scheduler.config.start_on_monday; + var day = (date.getDay() || (sm ? 7 : 0)) - (sm ? 1 : 0); + return table.rows[weekNum].cells[day].firstChild; +}; +scheduler.markCalendar = function(cal, date, css) { + var div = this._locateCalendar(cal, date); + if(!div) + return; + + div.className += " " + css; +}; +scheduler.unmarkCalendar = function(cal, date, css) { + date = date || cal._last_date; + css = css || "dhx_calendar_click"; + if (!date) return; + var el = this._locateCalendar(cal, date); + if(!el) + return; + el.className = (el.className || "").replace(RegExp(css, "g")); +}; +scheduler._week_template = function(width) { + var summ = (width || 250); + var left = 0; + + var week_template = document.createElement("div"); + var dummy_date = this.date.week_start(scheduler._currentDate()); + for (var i = 0; i < 7; i++) { + this._cols[i] = Math.floor(summ / (7 - i)); + this._render_x_header(i, left, dummy_date, week_template); + dummy_date = this.date.add(dummy_date, 1, "day"); + summ -= this._cols[i]; + left += this._cols[i]; + } + week_template.lastChild.className += " dhx_scale_bar_last"; + return week_template; +}; +scheduler.updateCalendar = function(obj, sd) { + obj.conf.date = sd; + this.renderCalendar(obj.conf, obj, true); +}; +scheduler._mini_cal_arrows = [" ", " "]; +scheduler._render_calendar = function(obj, sd, conf, previous) { + /*store*/ + var ts = scheduler.templates; + var temp = this._cols; + this._cols = []; + var temp2 = this._mode; + this._mode = "calendar"; + var temp3 = this._colsS; + this._colsS = {height: 0}; + var temp4 = new Date(this._min_date); + var temp5 = new Date(this._max_date); + var temp6 = new Date(scheduler._date); + var temp7 = ts.month_day; + var temp8 = this._ignores_detected; this._ignores_detected = 0; + ts.month_day = ts.calendar_date; + + sd = this.date.month_start(sd); + var week_template = this._week_template(obj.offsetWidth - 1 - this.config.minicalendar.padding ); + + var d; + if (previous) + d = previous; else { + d = document.createElement("DIV"); + d.className = "dhx_cal_container dhx_mini_calendar"; + } + d.setAttribute("date", this.templates.xml_format(sd)); + d.innerHTML = "<div class='dhx_year_month'></div><div class='dhx_year_week'>" + week_template.innerHTML + "</div><div class='dhx_year_body'></div>"; + + d.childNodes[0].innerHTML = this.templates.calendar_month(sd); + if (conf.navigation) { + var move_minicalendar_date = function(calendar, diff) { + var date = scheduler.date.add(calendar._date, diff, "month"); + scheduler.updateCalendar(calendar, date); + if (scheduler._date.getMonth() == calendar._date.getMonth() && scheduler._date.getFullYear() == calendar._date.getFullYear()) { + scheduler._markCalendarCurrentDate(calendar); + } + }; + + var css_classnames = ["dhx_cal_prev_button", "dhx_cal_next_button"]; + var css_texts = ["left:1px;top:2px;position:absolute;", "left:auto; right:1px;top:2px;position:absolute;"]; + var diffs = [-1, 1]; + var handler = function(diff) { + return function() { + if (conf.sync) { + var calendars = scheduler._synced_minicalendars; + for (var k = 0; k < calendars.length; k++) { + move_minicalendar_date(calendars[k], diff); + } + } else { + move_minicalendar_date(d, diff); + } + }; + }; + for (var j = 0; j < 2; j++) { + var arrow = document.createElement("DIV"); + //var diff = diffs[j]; + arrow.className = css_classnames[j]; + arrow.style.cssText = css_texts[j]; + arrow.innerHTML = this._mini_cal_arrows[j]; + d.firstChild.appendChild(arrow); + arrow.onclick = handler(diffs[j]); + } + } + d._date = new Date(sd); + + d.week_start = (sd.getDay() - (this.config.start_on_monday ? 1 : 0) + 7) % 7; + + var dd = d._min_date = this.date.week_start(sd); + d._max_date = this.date.add(d._min_date, 6, "week"); + + this._reset_month_scale(d.childNodes[2], sd, dd); + + var r = d.childNodes[2].firstChild.rows; + for (var k = r.length; k < 6; k++) { + var last_row = r[r.length - 1]; + r[0].parentNode.appendChild(last_row.cloneNode(true)); + var last_day_number = parseInt(last_row.childNodes[last_row.childNodes.length - 1].childNodes[0].innerHTML); + last_day_number = (last_day_number < 10) ? last_day_number : 0; // previous week could end on 28-31, so we should start with 0 + for (var ri = 0; ri < r[k].childNodes.length; ri++) { + r[k].childNodes[ri].className = "dhx_after"; + r[k].childNodes[ri].childNodes[0].innerHTML = scheduler.date.to_fixed(++last_day_number); + } + } + + if (!previous) + obj.appendChild(d); + + d.childNodes[1].style.height = (d.childNodes[1].childNodes[0].offsetHeight - 1) + "px"; // dhx_year_week should have height property so that day dates would get correct position. dhx_year_week height = height of it's child (with the day name) + + /*restore*/ + this._cols = temp; + this._mode = temp2; + this._colsS = temp3; + this._min_date = temp4; + this._max_date = temp5; + scheduler._date = temp6; + ts.month_day = temp7; + this._ignores_detected = temp8; + return d; +}; +scheduler.destroyCalendar = function(cal, force) { + if (!cal && this._def_count && this._def_count.firstChild) { + if (force || (new Date()).valueOf() - this._def_count._created.valueOf() > 500) + cal = this._def_count.firstChild; + } + if (!cal) return; + cal.onclick = null; + cal.innerHTML = ""; + if (cal.parentNode) + cal.parentNode.removeChild(cal); + if (this._def_count) + this._def_count.style.top = "-1000px"; +}; +scheduler.isCalendarVisible = function() { + if (this._def_count && parseInt(this._def_count.style.top, 10) > 0) + return this._def_count; + return false; +}; + +scheduler._attach_minical_events = function(){ + dhtmlxEvent(document.body, "click", function() { scheduler.destroyCalendar(); }); + scheduler._attach_minical_events = function(){}; +}; + +scheduler.attachEvent("onTemplatesReady", function() { + scheduler._attach_minical_events(); +}); + +scheduler.templates.calendar_time = scheduler.date.date_to_str("%d-%m-%Y"); + +scheduler.form_blocks.calendar_time = { + render: function() { + var html = "<input class='dhx_readonly' type='text' readonly='true'>"; + + var cfg = scheduler.config; + var dt = this.date.date_part(scheduler._currentDate()); + + var last = 24 * 60, first = 0; + if (cfg.limit_time_select) { + first = 60 * cfg.first_hour; + last = 60 * cfg.last_hour + 1; // to include "17:00" option if time select is limited + } + dt.setHours(first / 60); + + html += " <select>"; + for (var i = first; i < last; i += this.config.time_step * 1) { // `<` to exclude last "00:00" option + var time = this.templates.time_picker(dt); + html += "<option value='" + i + "'>" + time + "</option>"; + dt = this.date.add(dt, this.config.time_step, "minute"); + } + html += "</select>"; + + var full_day = scheduler.config.full_day; + + return "<div style='height:30px;padding-top:0; font-size:inherit;' class='dhx_section_time'>" + html + "<span style='font-weight:normal; font-size:10pt;'> – </span>" + html + "</div>"; + }, + set_value: function(node, value, ev) { + + var inputs = node.getElementsByTagName("input"); + var selects = node.getElementsByTagName("select"); + var start_date, + end_date; + + var _init_once = function(inp, date, number) { + inp.onclick = function() { + scheduler.destroyCalendar(null, true); + scheduler.renderCalendar({ + position: inp, + date: new Date(this._date), + navigation: true, + handler: function(new_date) { + inp.value = scheduler.templates.calendar_time(new_date); + inp._date = new Date(new_date); + scheduler.destroyCalendar(); + if (scheduler.config.event_duration && scheduler.config.auto_end_date && number === 0) { //first element = start date + _update_minical_select(); + } + } + }); + }; + }; + + if (scheduler.config.full_day) { + if (!node._full_day) { + var html = "<label class='dhx_fullday'><input type='checkbox' name='full_day' value='true'> " + scheduler.locale.labels.full_day + " </label></input>"; + if (!scheduler.config.wide_form) + html = node.previousSibling.innerHTML + html; + node.previousSibling.innerHTML = html; + node._full_day = true; + } + var input = node.previousSibling.getElementsByTagName("input")[0]; + + var isFulldayEvent = (scheduler.date.time_part(ev.start_date) === 0 && scheduler.date.time_part(ev.end_date) === 0); + input.checked = isFulldayEvent; + + selects[0].disabled = input.checked; + selects[1].disabled = input.checked; + + input.onclick = function() { + if (input.checked === true) { + var obj = {}; + scheduler.form_blocks.calendar_time.get_value(node, obj); + + start_date = scheduler.date.date_part(obj.start_date); + end_date = scheduler.date.date_part(obj.end_date); + + if (+end_date == +start_date || (+end_date >= +start_date && (ev.end_date.getHours() !== 0 || ev.end_date.getMinutes() !== 0))) + end_date = scheduler.date.add(end_date, 1, "day"); + } + + var start = start_date || ev.start_date; + var end = end_date || ev.end_date; + _attach_action(inputs[0], start); + _attach_action(inputs[1], end); + selects[0].value = start.getHours() * 60 + start.getMinutes(); + selects[1].value = end.getHours() * 60 + end.getMinutes(); + + selects[0].disabled = input.checked; + selects[1].disabled = input.checked; + + }; + } + + if (scheduler.config.event_duration && scheduler.config.auto_end_date) { + + var _update_minical_select = function () { + start_date = scheduler.date.add(inputs[0]._date, selects[0].value, "minute"); + end_date = new Date(start_date.getTime() + (scheduler.config.event_duration * 60 * 1000)); + + inputs[1].value = scheduler.templates.calendar_time(end_date); + inputs[1]._date = scheduler.date.date_part(new Date(end_date)); + + selects[1].value = end_date.getHours() * 60 + end_date.getMinutes(); + }; + + selects[0].onchange = _update_minical_select; // only update on first select should trigger update so user could define other end date if he wishes too + } + + function _attach_action(inp, date, number) { + _init_once(inp, date, number); + inp.value = scheduler.templates.calendar_time(date); + inp._date = scheduler.date.date_part(new Date(date)); + } + + _attach_action(inputs[0], ev.start_date, 0); + _attach_action(inputs[1], ev.end_date, 1); + _init_once = function() {}; + + selects[0].value = ev.start_date.getHours() * 60 + ev.start_date.getMinutes(); + selects[1].value = ev.end_date.getHours() * 60 + ev.end_date.getMinutes(); + + }, + get_value: function(node, ev) { + var inputs = node.getElementsByTagName("input"); + var selects = node.getElementsByTagName("select"); + + ev.start_date = scheduler.date.add(inputs[0]._date, selects[0].value, "minute"); + ev.end_date = scheduler.date.add(inputs[1]._date, selects[1].value, "minute"); + + if (ev.end_date <= ev.start_date) + ev.end_date = scheduler.date.add(ev.start_date, scheduler.config.time_step, "minute"); + return { + start_date: new Date(ev.start_date), + end_date: new Date(ev.end_date) + }; + }, + focus: function(node) { + } +}; +scheduler.linkCalendar = function(calendar, datediff) { + var action = function() { + var date = scheduler._date; + var dateNew = new Date(date.valueOf()); + if (datediff) dateNew = datediff(dateNew); + dateNew.setDate(1); + scheduler.updateCalendar(calendar, dateNew); + return true; + }; + + scheduler.attachEvent("onViewChange", action); + scheduler.attachEvent("onXLE", action); + scheduler.attachEvent("onEventAdded", action); + scheduler.attachEvent("onEventChanged", action); + scheduler.attachEvent("onAfterEventDelete", action); + action(); +}; + +scheduler._markCalendarCurrentDate = function(calendar) { + var date = scheduler._date; + var mode = scheduler._mode; + var month_start = scheduler.date.month_start(new Date(calendar._date)); + var month_end = scheduler.date.add(month_start, 1, "month"); + + if (mode == 'day' || (this._props && !!this._props[mode])) { // if day or units view + if (month_start.valueOf() <= date.valueOf() && month_end > date) { + scheduler.markCalendar(calendar, date, "dhx_calendar_click"); + } + } else if (mode == 'week') { + var dateNew = scheduler.date.week_start(new Date(date.valueOf())); + for (var i = 0; i < 7; i++) { + if (month_start.valueOf() <= dateNew.valueOf() && month_end > dateNew) // >= would mean mark first day of the next month + scheduler.markCalendar(calendar, dateNew, "dhx_calendar_click"); + dateNew = scheduler.date.add(dateNew, 1, "day"); + } + } +}; + +scheduler.attachEvent("onEventCancel", function(){ + scheduler.destroyCalendar(null, true); +});
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_minical.js.map b/codebase/sources/ext/dhtmlxscheduler_minical.js.map new file mode 100644 index 0000000..f5838fb --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_minical.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_minical.js.map","sources":["dhtmlxscheduler_minical.js"],"names":["scheduler","templates","calendar_month","date","date_to_str","calendar_scale_date","calendar_date","config","minicalendar","mark_events","_synced_minicalendars","renderCalendar","obj","_prev","is_refresh","cal","_currentDate","this","api_date","_render_calendar","parentNode","unmarkCalendar","cont","container","pos","position","document","getElementById","left","tpos","getOffset","top","offsetHeight","_get_def_cont","onclick","e","event","src","target","srcElement","className","indexOf","pname","newdate","xml_date","getAttribute","setDate","parseInt","innerHTML","markCalendar","_last_date","conf","handler","call","start","month_start","end","add","evs","getEvents","filter","_mode","i","length","ev","id","d","start_date","valueOf","date_part","Date","end_date","_markCalendarCurrentDate","sync","push","_def_count","createElement","cancelBubble","body","appendChild","style","_created","_locateCalendar","_max_date","_min_date","table","childNodes","weekNum","dat","sm","start_on_monday","day","getDay","rows","cells","firstChild","css","div","el","replace","RegExp","_week_template","width","summ","week_template","dummy_date","week_start","_cols","Math","floor","_render_x_header","lastChild","updateCalendar","sd","_mini_cal_arrows","previous","ts","temp","temp2","temp3","_colsS","height","temp4","temp5","temp6","_date","temp7","month_day","temp8","_ignores_detected","offsetWidth","padding","setAttribute","xml_format","navigation","move_minicalendar_date","calendar","diff","getMonth","getFullYear","css_classnames","css_texts","diffs","calendars","k","j","arrow","cssText","dd","_reset_month_scale","r","last_row","cloneNode","last_day_number","ri","to_fixed","destroyCalendar","force","removeChild","isCalendarVisible","_attach_minical_events","dhtmlxEvent","attachEvent","calendar_time","form_blocks","render","html","cfg","dt","last","first","limit_time_select","first_hour","last_hour","setHours","time_step","time","time_picker","full_day","set_value","node","value","_attach_action","inp","number","_init_once","inputs","getElementsByTagName","selects","new_date","event_duration","auto_end_date","_update_minical_select","_full_day","locale","labels","wide_form","previousSibling","input","isFulldayEvent","time_part","checked","disabled","get_value","getHours","getMinutes","getTime","onchange","focus","linkCalendar","datediff","action","dateNew","mode","month_end","_props"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_monthheight.js b/codebase/sources/ext/dhtmlxscheduler_monthheight.js new file mode 100644 index 0000000..ccf6611 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_monthheight.js @@ -0,0 +1,34 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onTemplatesReady",function(){ + scheduler.xy.scroll_width = 0; + + var old = scheduler.render_view_data; + scheduler.render_view_data=function(){ + var data = this._els["dhx_cal_data"][0]; + data.firstChild._h_fix = true; + + old.apply(scheduler,arguments); + + + + var height = parseInt(data.style.height); + data.style.height="1px"; + data.style.height=data.scrollHeight+"px"; + + this._obj.style.height = this._obj.clientHeight + data.scrollHeight - height + "px"; + }; + + var old_s=scheduler._reset_month_scale; + scheduler._reset_month_scale=function(a,b,c){ + var dummy = {clientHeight:100}; + old_s.apply(scheduler,[dummy,b,c]); + a.innerHTML = dummy.innerHTML; + }; + +});
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_monthheight.js.map b/codebase/sources/ext/dhtmlxscheduler_monthheight.js.map new file mode 100644 index 0000000..47ff310 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_monthheight.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_monthheight.js.map","sources":["dhtmlxscheduler_monthheight.js"],"names":["scheduler","attachEvent","xy","scroll_width","old","render_view_data","data","this","_els","firstChild","_h_fix","apply","arguments","height","parseInt","style","scrollHeight","_obj","clientHeight","old_s","_reset_month_scale","a","b","c","dummy","innerHTML"],"mappings":"AAAAA,UAAUC,YAAY,mBAAmB,WACxCD,UAAUE,GAAGC,aAAe,CAE5B,IAAIC,GAAMJ,UAAUK,gBACpBL,WAAUK,iBAAiB,WAC1B,GAAIC,GAAOC,KAAKC,KAAmB,aAAE,EACrCF,GAAKG,WAAWC,QAAS,EAEzBN,EAAIO,MAAMX,UAAUY,UAIpB,IAAIC,GAASC,SAASR,EAAKS,MAAMF,OACjCP,GAAKS,MAAMF,OAAO,MAClBP,EAAKS,MAAMF,OAAOP,EAAKU,aAAa,KAEpCT,KAAKU,KAAKF,MAAMF,OAASN,KAAKU,KAAKC,aAAeZ,EAAKU,aAAeH,EAAS,KAGhF,IAAIM,GAAMnB,UAAUoB,kBACpBpB,WAAUoB,mBAAmB,SAASC,EAAEC,EAAEC,GACzC,GAAIC,IAASN,aAAa,IAC1BC,GAAMR,MAAMX,WAAWwB,EAAMF,EAAEC,IAC/BF,EAAEI,UAAYD,EAAMC"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_multisection.js b/codebase/sources/ext/dhtmlxscheduler_multisection.js new file mode 100644 index 0000000..90c59e0 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_multisection.js @@ -0,0 +1,254 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.config.multisection = true; +scheduler.config.section_delemiter = ","; +scheduler.attachEvent("onSchedulerReady", function(){ + + + var old_unit = scheduler._update_unit_section; + scheduler._update_unit_section = function(action){ + return scheduler._update_sections(action, old_unit); + }; + var old_timeline = scheduler._update_timeline_section; + scheduler._update_timeline_section =function(action){ + return scheduler._update_sections(action, old_timeline); + }; + + + scheduler.isMultisectionEvent = function(ev){ + if(ev && this._get_multisection_view()){ + var units = this._get_event_sections(ev); + return (units.length > 1); + } + return false; + }; + + scheduler._get_event_sections = function(event){ + var mapping = this._get_section_property(); + var units = event[mapping] || ""; + return this._parse_event_sections(units); + }; + scheduler._parse_event_sections = function(value){ + if(value instanceof Array){ + return value; + }else{ + return value.toString().split(scheduler.config.section_delemiter); + } + }; + + scheduler._register_copies_array = function(evs){ + for(var i=0; i < evs.length; i++) + this._register_copy(evs[i]); + }; + scheduler._register_copy = function(copy){ + if(!this._multisection_copies[copy.id]){ + this._multisection_copies[copy.id] = {}; + } + var section = copy[this._get_section_property()]; + var evs = this._multisection_copies[copy.id]; + if(!evs[section]){ + evs[section] = copy; + } + }; + scheduler._get_copied_event = function(event_id, section){ + if(!this._multisection_copies[event_id]) + return null; + + if(this._multisection_copies[event_id][section]) + return this._multisection_copies[event_id][section]; + + var parts = this._multisection_copies[event_id]; + //multisection event has not been rendered in this section, need retrieve state of one of rendered events + if(scheduler._drag_event && scheduler._drag_event._orig_section && parts[scheduler._drag_event._orig_section]){ + return parts[scheduler._drag_event._orig_section]; + }else{ + var min_sorder = Infinity, + ev = null; + for(var i in parts){ + if(parts[i]._sorder < min_sorder){ + ev = parts[i]; + min_sorder = parts[i]._sorder; + } + } + return ev; + } + }; + scheduler._clear_copied_events = function(){ + this._multisection_copies = {}; + }; + scheduler._clear_copied_events(); + + scheduler._split_events = function(evs) { + var stack = []; + var pr = this._get_multisection_view(); + var mapping = this._get_section_property(); + if(pr) { + for (var i=0; i<evs.length; i++) { + var units = this._get_event_sections(evs[i]); + + if(units.length > 1) { + for (var j=0; j<units.length; j++) { + if(typeof pr.order[units[j]] === "undefined") + continue; + var ev = this._lame_copy({}, evs[i]); + ev[mapping] = units[j]; + stack.push(ev); + } + } else { + stack.push(evs[i]); + } + + } + }else{ + stack = evs; + } + return stack; + }; + + + scheduler._get_multisection_view = function(){ + if(!this.config.multisection){ + return false; + }else{ + return scheduler._get_section_view(); + } + }; + + var vis_evs = scheduler.get_visible_events; + scheduler.get_visible_events = function(only_timed) { + this._clear_copied_events(); + var evs = vis_evs.apply(this,arguments); + var pr = this._get_multisection_view(); + if (this._get_multisection_view()){ + evs = this._split_events(evs); + this._register_copies_array(evs); + } + + return evs; + }; + + scheduler._rendered_events = {}; + var old_view_data = scheduler.render_view_data; + scheduler.render_view_data = function(evs, hold) { + if (this._get_multisection_view() && evs) { + //render single event during dnd, restore flags that were calculated during full render + evs = this._split_events(evs); + this._restore_render_flags(evs); + } + + return old_view_data.apply(this,[evs, hold]); + }; + scheduler._restore_render_flags = function(section_evs){ + var map_to = this._get_section_property(); + for(var i=0; i < section_evs.length; i++){ + var ev = section_evs[i]; + var prev_state = scheduler._get_copied_event(ev.id, ev[map_to]); + if(prev_state){ + for(var p in prev_state){ + if(p.indexOf("_") === 0){ + ev[p] = prev_state[p]; + } + } + } + } + }; + scheduler._update_sections = function(action, def_handler){ + var view = action.view, + event = action.event, + pos = action.pos; + //view - timeline or units view object. both stores displayed sections in 'view.order' hash + // pos - mouse position, calculated in _mouse_coords method + // event - scheduler event + + if(!scheduler.isMultisectionEvent(event)){ + def_handler.apply(scheduler, [action]); + }else{ + if(!scheduler._drag_event._orig_section){ + scheduler._drag_event._orig_section = pos.section; + } + + if(scheduler._drag_event._orig_section != pos.section){ + var shift = (view.order[pos.section] - view.order[scheduler._drag_event._orig_section]); + if(shift){ + var sections = this._get_event_sections(event); + var new_sections = []; + var shifted = true; + for(var i=0; i<sections.length; i++){ + var new_section = scheduler._shift_sections(view, sections[i], shift); + if(new_section !== null){ + new_sections[i] = new_section; + }else{ + new_sections = sections; + shifted = false; + break; + + } + } + if(shifted) + scheduler._drag_event._orig_section = pos.section; + + event[scheduler._get_section_property()] = new_sections.join(","); + } + + } + } + }; + + scheduler._shift_sections = function(matrix, orig_section, shift){ + for(var i in matrix.order){ + if(matrix.order[i] - matrix.order[orig_section] == shift){ + return i; + } + } + return null; + }; + + + // limit extension + + var old_get_blocked_zones = scheduler._get_blocked_zones; + scheduler._get_blocked_zones = function(timespans, property, day_index, day_value, timespan_type){ + if(property && this.config.multisection){ + property = this._parse_event_sections(property); + var zones = []; + for(var i =0; i < property.length; i++){ + zones = zones.concat(old_get_blocked_zones.apply(this, [timespans, property[i], day_index, day_value, timespan_type])); + } + return zones; + }else{ + return old_get_blocked_zones.apply(this, arguments); + } + }; + + + // collision extension + var old_check_secions_collision = scheduler._check_sections_collision; + + scheduler._check_sections_collision = function(a, b){ + if(this.config.multisection && this._get_section_view()){ + a = this._split_events([a]); + b = this._split_events([b]); + + var collision = false; + for(var a_ind = 0, a_len = a.length; a_ind < a_len; a_ind++){ + if(collision){ + break; + } + for(var b_ind = 0, b_len = b.length; b_ind < b_len; b_ind++){ + if(old_check_secions_collision.apply(this, [a[a_ind], b[b_ind]])){ + collision = true; + break; + } + } + } + return collision; + }else{ + return old_check_secions_collision.apply(this, arguments); + } + }; +});
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_multisection.js.map b/codebase/sources/ext/dhtmlxscheduler_multisection.js.map new file mode 100644 index 0000000..1645dcd --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_multisection.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_multisection.js.map","sources":["dhtmlxscheduler_multisection.js"],"names":["scheduler","config","multisection","section_delemiter","attachEvent","old_unit","_update_unit_section","action","_update_sections","old_timeline","_update_timeline_section","isMultisectionEvent","ev","this","_get_multisection_view","units","_get_event_sections","length","event","mapping","_get_section_property","_parse_event_sections","value","Array","toString","split","_register_copies_array","evs","i","_register_copy","copy","_multisection_copies","id","section","_get_copied_event","event_id","parts","_drag_event","_orig_section","min_sorder","Infinity","_sorder","_clear_copied_events","_split_events","stack","pr","j","order","_lame_copy","push","_get_section_view","vis_evs","get_visible_events","apply","arguments","_rendered_events","old_view_data","render_view_data","hold","_restore_render_flags","section_evs","map_to","prev_state","p","indexOf","def_handler","view","pos","shift","sections","new_sections","shifted","new_section","_shift_sections","join","matrix","orig_section","old_get_blocked_zones","_get_blocked_zones","timespans","property","day_index","day_value","timespan_type","zones","concat","old_check_secions_collision","_check_sections_collision","a","b","collision","a_ind","a_len","b_ind","b_len"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_multiselect.js b/codebase/sources/ext/dhtmlxscheduler_multiselect.js new file mode 100644 index 0000000..c797198 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_multiselect.js @@ -0,0 +1,69 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.form_blocks["multiselect"]={ + render:function(sns) { + var _result = "<div class='dhx_multi_select_"+sns.name+"' style='overflow: auto; height: "+sns.height+"px; position: relative;' >"; + for (var i=0; i<sns.options.length; i++) { + _result += "<label><input type='checkbox' value='"+sns.options[i].key+"'/>"+sns.options[i].label+"</label>"; + if(convertStringToBoolean(sns.vertical)) _result += '<br/>'; + } + _result += "</div>"; + return _result; + }, + set_value:function(node,value,ev,config){ + + var _children = node.getElementsByTagName('input'); + for(var i=0;i<_children.length;i++) { + _children[i].checked = false; //unchecking all inputs on the form + } + + function _mark_inputs(ids) { // ids = [ 0: undefined, 1: undefined, 2: true ... ] + var _children = node.getElementsByTagName('input'); + for(var i=0;i<_children.length; i++) { + _children[i].checked = !! ids[_children[i].value]; + } + } + + var _ids = []; + if (ev[config.map_to]) { + var results = (ev[config.map_to] + "").split(','); + for (var i = 0; i < results.length; i++) { + _ids[results[i]] = true; + } + _mark_inputs(_ids); + } else { + if (scheduler._new_event || !config.script_url) + return; + var divLoading = document.createElement('div'); + divLoading.className = 'dhx_loading'; + divLoading.style.cssText = "position: absolute; top: 40%; left: 40%;"; + node.appendChild(divLoading); + dhtmlxAjax.get(config.script_url + '?dhx_crosslink_' + config.map_to + '=' + ev.id + '&uid=' + scheduler.uid(), function(loader) { + var _result = loader.doXPath("//data/item"); + var _ids = []; + for (var i = 0; i < _result.length; i++) { + _ids[_result[i].getAttribute(config.map_to)] = true; + } + _mark_inputs(_ids); + node.removeChild(divLoading); + }); + } + }, + get_value:function(node,ev,config){ + var _result = []; + var _children = node.getElementsByTagName("input"); + for(var i=0;i<_children.length;i++) { + if(_children[i].checked) + _result.push(_children[i].value); + } + return _result.join(','); + }, + + focus:function(node){ + } +};
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_multiselect.js.map b/codebase/sources/ext/dhtmlxscheduler_multiselect.js.map new file mode 100644 index 0000000..c9b43ed --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_multiselect.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_multiselect.js.map","sources":["dhtmlxscheduler_multiselect.js"],"names":["scheduler","form_blocks","render","sns","_result","name","height","i","options","length","key","label","convertStringToBoolean","vertical","set_value","node","value","ev","config","_mark_inputs","ids","_children","getElementsByTagName","checked","_ids","map_to","results","split","_new_event","script_url","divLoading","document","createElement","className","style","cssText","appendChild","dhtmlxAjax","get","id","uid","loader","doXPath","getAttribute","removeChild","get_value","push","join","focus"],"mappings":"AAAAA,UAAUC,YAAyB,aAClCC,OAAO,SAASC,GAEf,IAAK,GADDC,GAAU,gCAAgCD,EAAIE,KAAK,oCAAoCF,EAAIG,OAAO,6BAC7FC,EAAE,EAAGA,EAAEJ,EAAIK,QAAQC,OAAQF,IACnCH,GAAW,wCAAwCD,EAAIK,QAAQD,GAAGG,IAAI,MAAMP,EAAIK,QAAQD,GAAGI,MAAM,WAC9FC,uBAAuBT,EAAIU,YAAWT,GAAW,QAGrD,OADAA,IAAW,UAGZU,UAAU,SAASC,EAAKC,EAAMC,EAAGC,GAOhC,QAASC,GAAaC,GAErB,IAAI,GADAC,GAAYN,EAAKO,qBAAqB,SAClCf,EAAE,EAAEA,EAAEc,EAAUZ,OAAQF,IAC/Bc,EAAUd,GAAGgB,UAAaH,EAAIC,EAAUd,GAAGS,OAP7C,IAAI,GADAK,GAAYN,EAAKO,qBAAqB,SAClCf,EAAE,EAAEA,EAAEc,EAAUZ,OAAOF,IAC9Bc,EAAUd,GAAGgB,SAAU,CAUxB;GAAIC,KACJ,IAAIP,EAAGC,EAAOO,QAAS,CAEtB,IAAK,GADDC,IAAWT,EAAGC,EAAOO,QAAU,IAAIE,MAAM,KACpCpB,EAAI,EAAGA,EAAImB,EAAQjB,OAAQF,IACnCiB,EAAKE,EAAQnB,KAAM,CAEpBY,GAAaK,OACP,CACN,GAAIxB,UAAU4B,aAAeV,EAAOW,WACnC,MACD,IAAIC,GAAaC,SAASC,cAAc,MACxCF,GAAWG,UAAY,cACvBH,EAAWI,MAAMC,QAAU,2CAC3BpB,EAAKqB,YAAYN,GACjBO,WAAWC,IAAIpB,EAAOW,WAAa,kBAAoBX,EAAOO,OAAS,IAAMR,EAAGsB,GAAK,QAAUvC,UAAUwC,MAAO,SAASC,GAGxH,IAAK,GAFDrC,GAAUqC,EAAOC,QAAQ,eACzBlB,KACKjB,EAAI,EAAGA,EAAIH,EAAQK,OAAQF,IACnCiB,EAAKpB,EAAQG,GAAGoC,aAAazB,EAAOO,UAAW,CAEhDN,GAAaK,GACbT,EAAK6B,YAAYd;KAIpBe,UAAU,SAAS9B,GAGlB,IAAI,GAFAX,MACAiB,EAAYN,EAAKO,qBAAqB,SAClCf,EAAE,EAAEA,EAAEc,EAAUZ,OAAOF,IAC3Bc,EAAUd,GAAGgB,SACfnB,EAAQ0C,KAAKzB,EAAUd,GAAGS,MAE5B,OAAOZ,GAAQ2C,KAAK,MAGrBC,MAAM"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_multisource.js b/codebase/sources/ext/dhtmlxscheduler_multisource.js new file mode 100644 index 0000000..09194bc --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_multisource.js @@ -0,0 +1,29 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function(){ + + function backup(obj){ + var t = function(){}; + t.prototype = obj; + return t; + } + + var old = scheduler._load; + scheduler._load=function(url,from){ + url=url||this._load_url; + if (typeof url == "object"){ + var t = backup(this._loaded); + for (var i=0; i < url.length; i++) { + this._loaded=new t(); + old.call(this,url[i],from); + } + } else + old.apply(this,arguments); + }; + +})();
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_multisource.js.map b/codebase/sources/ext/dhtmlxscheduler_multisource.js.map new file mode 100644 index 0000000..910606c --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_multisource.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_multisource.js.map","sources":["dhtmlxscheduler_multisource.js"],"names":["backup","obj","t","prototype","old","scheduler","_load","url","from","this","_load_url","_loaded","i","length","call","apply","arguments"],"mappings":"CAAA,WAEC,QAASA,GAAOC,GACf,GAAIC,GAAI,YAER,OADAA,GAAEC,UAAYF,EACPC,EAGR,GAAIE,GAAMC,UAAUC,KACpBD,WAAUC,MAAM,SAASC,EAAIC,GAE5B,GADAD,EAAIA,GAAKE,KAAKC,UACI,gBAAPH,GAEV,IAAK,GADDL,GAAIF,EAAOS,KAAKE,SACXC,EAAE,EAAGA,EAAIL,EAAIM,OAAQD,IAC7BH,KAAKE,QAAQ,GAAIT,GACjBE,EAAIU,KAAKL,KAAKF,EAAIK,GAAGJ,OAGtBJ,GAAIW,MAAMN,KAAKO"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_mvc.js b/codebase/sources/ext/dhtmlxscheduler_mvc.js new file mode 100644 index 0000000..f3009cd --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_mvc.js @@ -0,0 +1,147 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function(){ + + var cfg = { + use_id : false + }; + + //remove private properties + function sanitize(ev){ + var obj = {}; + for (var key in ev) + if (key.indexOf("_") !== 0) + obj[key] = ev[key]; + + if (!cfg.use_id) + delete obj.id; + + return obj; + } + + var update_timer; + function update_view(){ + clearTimeout(update_timer); + update_timer = setTimeout(function(){ + scheduler.updateView(); + },1); + } + + function _start_ext_load(cal){ + cal._loading = true; + cal._not_render = true; + + cal.callEvent("onXLS", []); + } + function _finish_ext_load(cal){ + cal._not_render = false; + if (cal._render_wait) + cal.render_view_data(); + cal._loading = false; + + cal.callEvent("onXLE", []); + } + + + function _get_id(model){ + return cfg.use_id ? model.id : model.cid; + } + +scheduler.backbone = function(events, config){ + if (config) cfg = config; + + events.bind("change", function(model, info){ + var cid = _get_id(model); + var ev = scheduler._events[cid] = model.toJSON(); + ev.id = cid; + + scheduler._init_event(ev); + update_view(); + }); + events.bind("remove", function(model, changes){ + var cid = _get_id(model); + if (scheduler._events[cid]) + scheduler.deleteEvent(cid); + }); + + var queue = []; + function add_from_queue(){ + if (queue.length){ + scheduler.parse(queue, "json"); + queue = []; + } + } + + events.bind("add", function(model, changes){ + var cid = _get_id(model); + if (!scheduler._events[cid]){ + var ev = model.toJSON(); + ev.id = cid; + scheduler._init_event(ev); + + queue.push(ev); + if (queue.length == 1) + setTimeout(add_from_queue,1); + } + }); + + events.bind("request", function(obj){ + if (obj instanceof Backbone.Collection) + _start_ext_load(scheduler); + }); + events.bind("sync", function(obj){ + if (obj instanceof Backbone.Collection) + _finish_ext_load(scheduler); + }); + events.bind("error", function(obj){ + if (obj instanceof Backbone.Collection) + _finish_ext_load(scheduler); + }); + + + scheduler.attachEvent("onEventCreated", function(id){ + var ev = new events.model(scheduler.getEvent(id)); + scheduler._events[id] = ev.toJSON(); + scheduler._events[id].id = id; + + return true; + }); + + scheduler.attachEvent("onEventAdded", function(id){ + if (!events.get(id)){ + var data = sanitize(scheduler.getEvent(id)); + var model = new events.model(data); + + var cid = _get_id(model); + if (cid != id) + this.changeEventId(id, cid); + events.add(model); + events.trigger("scheduler:add", model); + } + return true; + }); + scheduler.attachEvent("onEventChanged", function(id){ + var ev = events.get(id); + var upd = sanitize(scheduler.getEvent(id)); + + ev.set(upd); + events.trigger("scheduler:change", ev); + + return true; + }); + scheduler.attachEvent("onEventDeleted", function(id){ + var model = events.get(id); + if (model){ + events.trigger("scheduler:remove", model); + events.remove(id); + } + return true; + }); +}; + +})();
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_mvc.js.map b/codebase/sources/ext/dhtmlxscheduler_mvc.js.map new file mode 100644 index 0000000..668f82d --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_mvc.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_mvc.js.map","sources":["dhtmlxscheduler_mvc.js"],"names":["sanitize","ev","obj","key","indexOf","cfg","use_id","id","update_view","clearTimeout","update_timer","setTimeout","scheduler","updateView","_start_ext_load","cal","_loading","_not_render","callEvent","_finish_ext_load","_render_wait","render_view_data","_get_id","model","cid","backbone","events","config","add_from_queue","queue","length","parse","bind","_events","toJSON","_init_event","deleteEvent","push","Backbone","Collection","attachEvent","getEvent","get","data","this","changeEventId","add","trigger","upd","set","remove"],"mappings":"CAAA,WAOC,QAASA,GAASC,GACjB,GAAIC,KACJ,KAAK,GAAIC,KAAOF,GACU,IAArBE,EAAIC,QAAQ,OACfF,EAAIC,GAAOF,EAAGE,GAKhB,OAHKE,GAAIC,cACDJ,GAAIK,GAELL,EAIR,QAASM,KACRC,aAAaC,GACbA,EAAeC,WAAW,WACzBC,UAAUC,cACT,GAGH,QAASC,GAAgBC,GACxBA,EAAIC,UAAW,EACfD,EAAIE,aAAc,EAElBF,EAAIG,UAAU,YAEf,QAASC,GAAiBJ,GACzBA,EAAIE,aAAc,EACdF,EAAIK,cACPL,EAAIM,mBACLN,EAAIC,UAAW,EAEfD,EAAIG,UAAU,YAIf,QAASI,GAAQC,GAChB,MAAOlB,GAAIC,OAASiB,EAAMhB,GAAKgB,EAAMC,IA1CtC,GAiBId,GAjBAL,GACHC,QAAS,EA4CXM,WAAUa,SAAW,SAASC,EAAQC,GAkBrC,QAASC,KACJC,EAAMC,SACTlB,UAAUmB,MAAMF,EAAO,QACvBA;CApBEF,IAAQtB,EAAMsB,GAElBD,EAAOM,KAAK,SAAU,SAAST,GAC9B,GAAIC,GAAMF,EAAQC,GACdtB,EAAKW,UAAUqB,QAAQT,GAAOD,EAAMW,QACxCjC,GAAGM,GAAKiB,EAERZ,UAAUuB,YAAYlC,GACtBO,MAEDkB,EAAOM,KAAK,SAAU,SAAST,GAC9B,GAAIC,GAAMF,EAAQC,EACdX,WAAUqB,QAAQT,IACrBZ,UAAUwB,YAAYZ,IAGxB,IAAIK,KAQJH,GAAOM,KAAK,MAAO,SAAST,GAC3B,GAAIC,GAAMF,EAAQC,EAClB,KAAKX,UAAUqB,QAAQT,GAAK,CAC3B,GAAIvB,GAAMsB,EAAMW,QAChBjC,GAAGM,GAAKiB,EACRZ,UAAUuB,YAAYlC,GAEtB4B,EAAMQ,KAAKpC,GACS,GAAhB4B,EAAMC,QACTnB,WAAWiB,EAAe,MAI7BF,EAAOM,KAAK,UAAW,SAAS9B,GAC3BA,YAAeoC,UAASC,YAC3BzB,EAAgBF,aAElBc,EAAOM,KAAK,OAAQ,SAAS9B,GACxBA,YAAeoC,UAASC,YAC3BpB,EAAiBP;GAEnBc,EAAOM,KAAK,QAAS,SAAS9B,GACzBA,YAAeoC,UAASC,YAC3BpB,EAAiBP,aAInBA,UAAU4B,YAAY,iBAAkB,SAASjC,GAChD,GAAIN,GAAK,GAAIyB,GAAOH,MAAMX,UAAU6B,SAASlC,GAI7C,OAHAK,WAAUqB,QAAQ1B,GAAMN,EAAGiC,SAC3BtB,UAAUqB,QAAQ1B,GAAIA,GAAKA,GAEpB,IAGRK,UAAU4B,YAAY,eAAgB,SAASjC,GAC9C,IAAKmB,EAAOgB,IAAInC,GAAI,CACnB,GAAIoC,GAAO3C,EAASY,UAAU6B,SAASlC,IACnCgB,EAAQ,GAAIG,GAAOH,MAAMoB,GAEzBnB,EAAMF,EAAQC,EACdC,IAAOjB,GACVqC,KAAKC,cAActC,EAAIiB,GACxBE,EAAOoB,IAAIvB,GACXG,EAAOqB,QAAQ,gBAAiBxB,GAEjC,OAAO,IAERX,UAAU4B,YAAY,iBAAkB,SAASjC,GAChD,GAAIN,GAAKyB,EAAOgB,IAAInC,GAChByC,EAAMhD,EAASY,UAAU6B,SAASlC,GAKtC;MAHAN,GAAGgD,IAAID,GACPtB,EAAOqB,QAAQ,mBAAoB9C,IAE5B,IAERW,UAAU4B,YAAY,iBAAkB,SAASjC,GAChD,GAAIgB,GAAQG,EAAOgB,IAAInC,EAKvB,OAJIgB,KACHG,EAAOqB,QAAQ,mBAAoBxB,GACnCG,EAAOwB,OAAO3C,KAER"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_offline.js b/codebase/sources/ext/dhtmlxscheduler_offline.js new file mode 100644 index 0000000..8f18cce --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_offline.js @@ -0,0 +1,83 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.load=function(url,call){ + var type; + if (typeof call == "string"){ + this._process=call; + type = call; + call = arguments[2]; + } + + this._load_url=url; + this._after_call=call; + if (url.$proxy) { + url.load(this, typeof type == "string" ? type : null); + return; + } + + this._load(url,this._date); +}; + +scheduler._dp_init_backup = scheduler._dp_init; +scheduler._dp_init = function(dp) { + dp._sendData = function(a1,rowId){ + if (!a1) return; //nothing to send + if (!this.callEvent("onBeforeDataSending",rowId?[rowId,this.getState(rowId),a1]:[null, null, a1])) return false; + if (rowId) + this._in_progress[rowId]=(new Date()).valueOf(); + if (this.serverProcessor.$proxy) { + var mode = this._tMode!="POST" ? 'get' : 'post'; + var to_send = []; + for (var i in a1) + to_send.push({ id: i, data: a1[i], operation: this.getState(i)}); + this.serverProcessor._send(to_send, mode, this); + return; + } + + var a2=new dtmlXMLLoaderObject(this.afterUpdate,this,true); + var a3 = this.serverProcessor+(this._user?(getUrlSymbol(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+this.obj.getUserData(0,"version")].join("&")):""); + if (this._tMode!="POST") + a2.loadXML(a3+((a3.indexOf("?")!=-1)?"&":"?")+this.serialize(a1,rowId)); + else + a2.loadXML(a3,true,this.serialize(a1,rowId)); + this._waitMode++; + }; + + dp._updatesToParams = function(items) { + var stack = {}; + for (var i = 0; i < items.length; i++) + stack[items[i].id] = items[i].data; + return this.serialize(stack); + }; + + dp._processResult = function(text, xml, loader) { + if (loader.status != 200) { + for (var i in this._in_progress) { + var state = this.getState(i); + this.afterUpdateCallback(i, i, state, null); + } + return; + } + xml = new dtmlXMLLoaderObject(function() {},this,true); + xml.loadXMLString(text); + xml.xmlDoc = loader; + + this.afterUpdate(this, null, null, null, xml); + }; + this._dp_init_backup(dp); +}; + +if (window.dataProcessor) + dataProcessor.prototype.init=function(obj){ + this.init_original(obj); + obj._dataprocessor=this; + + this.setTransactionMode("POST",true); + if (!this.serverProcessor.$proxy) + this.serverProcessor+=(this.serverProcessor.indexOf("?")!=-1?"&":"?")+"editing=true"; + };
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_offline.js.map b/codebase/sources/ext/dhtmlxscheduler_offline.js.map new file mode 100644 index 0000000..aa628e5 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_offline.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_offline.js.map","sources":["dhtmlxscheduler_offline.js"],"names":["scheduler","load","url","call","type","this","_process","arguments","_load_url","_after_call","$proxy","_load","_date","_dp_init_backup","_dp_init","dp","_sendData","a1","rowId","callEvent","getState","_in_progress","Date","valueOf","serverProcessor","mode","_tMode","to_send","i","push","id","data","operation","_send","a2","dtmlXMLLoaderObject","afterUpdate","a3","_user","getUrlSymbol","obj","getUserData","join","loadXML","indexOf","serialize","_waitMode","_updatesToParams","items","stack","length","_processResult","text","xml","loader","status","loadXMLString","xmlDoc","state","afterUpdateCallback","window","dataProcessor","prototype","init","init_original","_dataprocessor","setTransactionMode"],"mappings":"AAAAA,UAAUC,KAAK,SAASC,EAAIC,GAC3B,GAAIC,EASJ,OARmB,gBAARD,KACVE,KAAKC,SAASH,EACdC,EAAOD,EACPA,EAAOI,UAAU,IAGlBF,KAAKG,UAAUN,EACfG,KAAKI,YAAYN,EACbD,EAAIQ,WACPR,GAAID,KAAKI,KAAqB,gBAARD,GAAmBA,EAAO,UAIjDC,MAAKM,MAAMT,EAAIG,KAAKO,QAGrBZ,UAAUa,gBAAkBb,UAAUc,SACtCd,UAAUc,SAAW,SAASC,GAC7BA,EAAGC,UAAY,SAASC,EAAGC,GACvB,GAAKD,EAAL,CACH,IAAKZ,KAAKc,UAAU,sBAAsBD,GAAOA,EAAMb,KAAKe,SAASF,GAAOD,IAAK,KAAM,KAAMA,IAAM,OAAO,CAG1G,IAFOC,IACNb,KAAKgB,aAAaH,IAAO,GAAKI,OAAQC,WACnClB,KAAKmB,gBAAgBd,OAAQ,CAChC,GAAIe,GAAoB,QAAbpB,KAAKqB,OAAiB,MAAQ,OACrCC,IACJ;IAAK,GAAIC,KAAKX,GACbU,EAAQE,MAAOC,GAAIF,EAAGG,KAAMd,EAAGW,GAAII,UAAW3B,KAAKe,SAASQ,IAE7D,YADAvB,MAAKmB,gBAAgBS,MAAMN,EAASF,EAAMpB,MAI3C,GAAI6B,GAAG,GAAIC,qBAAoB9B,KAAK+B,YAAY/B,MAAK,GACjDgC,EAAKhC,KAAKmB,iBAAiBnB,KAAKiC,MAAOC,aAAalC,KAAKmB,kBAAkB,YAAYnB,KAAKiC,MAAM,eAAejC,KAAKmC,IAAIC,YAAY,EAAE,YAAYC,KAAK,KAAM,GAClJ,SAAbrC,KAAKqB,OACFQ,EAAGS,QAAQN,GAAsB,IAAjBA,EAAGO,QAAQ,KAAU,IAAI,KAAKvC,KAAKwC,UAAU5B,EAAGC,IAEhEgB,EAAGS,QAAQN,GAAG,EAAKhC,KAAKwC,UAAU5B,EAAGC,IAC5Cb,KAAKyC,cAGN/B,EAAGgC,iBAAmB,SAASC,GAE9B,IAAK,GADDC,MACKrB,EAAI,EAAGA,EAAIoB,EAAME,OAAQtB,IACjCqB,EAAMD,EAAMpB,GAAGE,IAAMkB,EAAMpB,GAAGG,IAC/B;MAAO1B,MAAKwC,UAAUI,IAGvBlC,EAAGoC,eAAiB,SAASC,EAAMC,EAAKC,GACvC,GAAqB,KAAjBA,EAAOC,OAOXF,EAAM,GAAIlB,qBAAoB,aAAc9B,MAAK,GACjDgD,EAAIG,cAAcJ,GAClBC,EAAII,OAASH,EAEbjD,KAAK+B,YAAY/B,KAAM,KAAM,KAAM,KAAMgD,OAVxC,KAAK,GAAIzB,KAAKvB,MAAKgB,aAAc,CAChC,GAAIqC,GAAQrD,KAAKe,SAASQ,EAC1BvB,MAAKsD,oBAAoB/B,EAAGA,EAAG8B,EAAO,QAUzCrD,KAAKQ,gBAAgBE,IAGlB6C,OAAOC,gBACVA,cAAcC,UAAUC,KAAK,SAASvB,GACrCnC,KAAK2D,cAAcxB,GACnBA,EAAIyB,eAAe5D,KAEnBA,KAAK6D,mBAAmB,QAAO,GAC1B7D,KAAKmB,gBAAgBd,SACzBL,KAAKmB,kBAAqD,IAAnCnB,KAAKmB,gBAAgBoB,QAAQ,KAAS,IAAI,KAAK"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_outerdrag.js b/codebase/sources/ext/dhtmlxscheduler_outerdrag.js new file mode 100644 index 0000000..9a2f640 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_outerdrag.js @@ -0,0 +1,60 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +// lame old code doesn't provide raw event object +scheduler.attachEvent("onTemplatesReady", function() { + var dragger = (new dhtmlDragAndDropObject()); + var old = dragger.stopDrag; + var last_event; + dragger.stopDrag = function(e) { + last_event = e || event; + return old.apply(this, arguments); + }; + dragger.addDragLanding(scheduler._els["dhx_cal_data"][0], { + _drag: function(sourceHtmlObject, dhtmlObject, targetHtmlObject, targetHtml) { + + if (scheduler.checkEvent("onBeforeExternalDragIn") && !scheduler.callEvent("onBeforeExternalDragIn", [sourceHtmlObject, dhtmlObject, targetHtmlObject, targetHtml, last_event])) + return; + + var temp = scheduler.attachEvent("onEventCreated", function(id) { + if (!scheduler.callEvent("onExternalDragIn", [id, sourceHtmlObject, last_event])) { + this._drag_mode = this._drag_id = null; + this.deleteEvent(id); + } + }); + + var action_data = scheduler.getActionData(last_event); + var event_data = { + start_date: new Date(action_data.date) + }; + + // custom views, need to assign section id, fix dates + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + var view_options = scheduler.matrix[scheduler._mode]; + event_data[view_options.y_property] = action_data.section; + + var pos = scheduler._locate_cell_timeline(last_event); + event_data.start_date = view_options._trace_x[pos.x]; + event_data.end_date = scheduler.date.add(event_data.start_date, view_options.x_step, view_options.x_unit); + } + if (scheduler._props && scheduler._props[scheduler._mode]) { + event_data[scheduler._props[scheduler._mode].map_to] = action_data.section; + } + + scheduler.addEventNow(event_data); + + scheduler.detachEvent(temp); + + }, + _dragIn: function(htmlObject, shtmlObject) { + return htmlObject; + }, + _dragOut: function(htmlObject) { + return this; + } + }); +}); diff --git a/codebase/sources/ext/dhtmlxscheduler_outerdrag.js.map b/codebase/sources/ext/dhtmlxscheduler_outerdrag.js.map new file mode 100644 index 0000000..d928376 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_outerdrag.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_outerdrag.js.map","sources":["dhtmlxscheduler_outerdrag.js"],"names":["scheduler","attachEvent","last_event","dragger","dhtmlDragAndDropObject","old","stopDrag","e","event","apply","this","arguments","addDragLanding","_els","_drag","sourceHtmlObject","dhtmlObject","targetHtmlObject","targetHtml","checkEvent","callEvent","temp","id","_drag_mode","_drag_id","deleteEvent","action_data","getActionData","event_data","start_date","Date","date","matrix","_mode","view_options","y_property","section","pos","_locate_cell_timeline","_trace_x","x","end_date","add","x_step","x_unit","_props","map_to","addEventNow","detachEvent","_dragIn","htmlObject","_dragOut"],"mappings":"AACAA,UAAUC,YAAY,mBAAoB,WACzC,GAEIC,GAFAC,EAAU,GAAKC,wBACfC,EAAMF,EAAQG,QAElBH,GAAQG,SAAW,SAASC,GAE3B,MADAL,GAAaK,GAAKC,MACXH,EAAII,MAAMC,KAAMC,YAExBR,EAAQS,eAAeZ,UAAUa,KAAmB,aAAE,IACrDC,MAAO,SAASC,EAAkBC,EAAaC,EAAkBC,GAEhE,IAAIlB,UAAUmB,WAAW,2BAA8BnB,UAAUoB,UAAU,0BAA2BL,EAAkBC,EAAaC,EAAkBC,EAAYhB,IAAnK,CAGA,GAAImB,GAAOrB,UAAUC,YAAY,iBAAkB,SAASqB,GACtDtB,UAAUoB,UAAU,oBAAqBE,EAAIP,EAAkBb,MACnEQ,KAAKa,WAAab,KAAKc,SAAW,KAClCd,KAAKe,YAAYH;GAIfI,EAAc1B,UAAU2B,cAAczB,GACtC0B,GACHC,WAAY,GAAIC,MAAKJ,EAAYK,MAIlC,IAAI/B,UAAUgC,QAAUhC,UAAUgC,OAAOhC,UAAUiC,OAAQ,CAC1D,GAAIC,GAAelC,UAAUgC,OAAOhC,UAAUiC,MAC9CL,GAAWM,EAAaC,YAAcT,EAAYU,OAElD,IAAIC,GAAMrC,UAAUsC,sBAAsBpC,EAC1C0B,GAAWC,WAAaK,EAAaK,SAASF,EAAIG,GAClDZ,EAAWa,SAAWzC,UAAU+B,KAAKW,IAAId,EAAWC,WAAYK,EAAaS,OAAQT,EAAaU,QAE/F5C,UAAU6C,QAAU7C,UAAU6C,OAAO7C,UAAUiC,SAClDL,EAAW5B,UAAU6C,OAAO7C,UAAUiC,OAAOa,QAAUpB,EAAYU,SAGpEpC,UAAU+C,YAAYnB,GAEtB5B,UAAUgD,YAAY3B,KAGvB4B,QAAS,SAASC,GACjB,MAAOA;EAERC,SAAU,WACT,MAAOzC"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_pdf.js b/codebase/sources/ext/dhtmlxscheduler_pdf.js new file mode 100644 index 0000000..77c9a73 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_pdf.js @@ -0,0 +1,363 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +(function() { + var dx, dy, + html_regexp = new RegExp("<[^>]*>", "g"), + newline_regexp = new RegExp("<br[^>]*>", "g"); + + function clean_html(val) { + return val.replace(newline_regexp, "\n").replace(html_regexp, ""); + } + + function x_norm(x, offset) { + x = parseFloat(x); + offset = parseFloat(offset); + if (!isNaN(offset)) x -= offset; + + var w = colsWidth(x); + x = x - w.width + w.cols*dx; + return isNaN(x)?"auto":(100*x/(dx)); + } + + function x_norm_event(x, offset, is_left) { + x = parseFloat(x); + offset = parseFloat(offset); + if (!isNaN(offset) && is_left) x -= offset; + + var w = colsWidth(x); + x = x - w.width + w.cols*dx; + return isNaN(x)?"auto":(100*x/(dx-(!isNaN(offset)?offset:0))); + } + function colsWidth(width) { + var r = 0; + var header = scheduler._els.dhx_cal_header[0].childNodes; + var els = header[1] ? header[1].childNodes : header[0].childNodes; + for (var i = 0; i < els.length; i++) { + var el = els[i].style ? els[i] : els[i].parentNode; + var w = parseFloat(el.style.width); + if (width > w){ + width -= (w+1); + r+=(w+1); + } + else + break; + } + return { width: r, cols: i }; + } + + function y_norm(y) { + y = parseFloat(y); + if (isNaN(y)) return "auto"; + return 100 * y / dy; + } + + function get_style(node, style){ + return (window.getComputedStyle?(window.getComputedStyle(node, null)[style]):(node.currentStyle?node.currentStyle[style]:null))||""; + } + + function de_day(node, n) { + var x = parseInt(node.style.left, 10); + + for (var dx = 0; dx < scheduler._cols.length; dx++) { + x -= scheduler._cols[dx]; + if (x < 0) return dx; + } + return n; + } + + function de_week(node, n) { + var y = parseInt(node.style.top, 10); + for (var dy = 0; dy < scheduler._colsS.heights.length; dy++) + if (scheduler._colsS.heights[dy] > y) return dy; + return n; + } + + function xml_start(tag) { + return tag ? "<"+tag+">" : ""; + } + function xml_end(tag) { + return tag ? "</"+tag+">" : ""; + } + + function xml_top(tag, profile, header, footer) { + var xml = "<"+tag+" profile='" + profile + "'"; + if (header) + xml += " header='" + header + "'"; + if (footer) + xml += " footer='" + footer + "'"; + xml += ">"; + return xml; + } + + function xml_body_header() { + var xml = ""; + // detects if current mode is timeline + var mode = scheduler._mode; + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) + mode = (scheduler.matrix[scheduler._mode].render == "cell") ? "matrix" : "timeline"; + xml += "<scale mode='" + mode + "' today='" + scheduler._els.dhx_cal_date[0].innerHTML + "'>"; + + if (scheduler._mode == "week_agenda") { + var xh = scheduler._els.dhx_cal_data[0].getElementsByTagName("DIV"); + for (var i = 0; i < xh.length; i++) + if (xh[i].className == "dhx_wa_scale_bar") + xml += "<column>" + clean_html(xh[i].innerHTML) + "</column>"; + } else if (scheduler._mode == "agenda" || scheduler._mode == "map") { + var xh = scheduler._els.dhx_cal_header[0].childNodes[0].childNodes; + + xml += "<column>" + clean_html(xh[0].innerHTML) + "</column><column>" + clean_html(xh[1].innerHTML) + "</column>"; + } else if (scheduler._mode == "year") { + var xh = scheduler._els.dhx_cal_data[0].childNodes; + for (var i = 0; i < xh.length; i++) { + xml += "<month label='" + clean_html(xh[i].childNodes[0].innerHTML) + "'>"; + xml += xml_month_scale(xh[i].childNodes[1].childNodes); + xml += xml_month(xh[i].childNodes[2]); + xml += "</month>"; + } + } else { + xml += "<x>"; + var xh = scheduler._els.dhx_cal_header[0].childNodes; + xml += xml_month_scale(xh); + xml += "</x>"; + + var yh = scheduler._els.dhx_cal_data[0]; + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + xml += "<y>"; + for (var i = 0; i < yh.firstChild.rows.length; i++) { + var el = yh.firstChild.rows[i]; + xml += "<row><![CDATA[" + clean_html(el.cells[0].innerHTML) + "]]></row>"; + } + xml += "</y>"; + dy = yh.firstChild.rows[0].cells[0].offsetHeight; + } else if (yh.firstChild.tagName == "TABLE") { + xml += xml_month(yh); + } else { + yh = yh.childNodes[yh.childNodes.length - 1]; + while (yh.className.indexOf("dhx_scale_holder") == -1) + yh = yh.previousSibling; + yh = yh.childNodes; + + xml += "<y>"; + for (var i = 0; i < yh.length; i++) + xml += "\n<row><![CDATA[" + clean_html(yh[i].innerHTML) + "]]></row>"; + xml += "</y>"; + dy = yh[0].offsetHeight; + } + } + xml += "</scale>"; + return xml; + } + + function xml_month(yh) { + var xml = ""; + var r = yh.firstChild.rows; + for (var i = 0; i < r.length; i++) { + var days = []; + for (var j = 0; j < r[i].cells.length; j++) + days.push(r[i].cells[j].firstChild.innerHTML); + + xml += "\n<row height='" + yh.firstChild.rows[i].cells[0].offsetHeight + "'><![CDATA[" + clean_html(days.join("|")) + "]]></row>"; + dy = yh.firstChild.rows[0].cells[0].offsetHeight; + } + return xml; + } + + function xml_month_scale(xh) { + var xhs, + xml = ""; + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + if (scheduler.matrix[scheduler._mode].second_scale) + xhs = xh[1].childNodes; + + xh = xh[0].childNodes; + } + + for (var i = 0; i < xh.length; i++) + xml += "\n<column><![CDATA[" + clean_html(xh[i].innerHTML) + "]]></column>"; + dx = xh[0].offsetWidth; + + if (xhs) { + var width = 0; + var top_width = xh[0].offsetWidth; + var top_col = 1; + for (var i = 0; i < xhs.length; i++) { + xml += "\n<column second_scale='" + top_col + "'><![CDATA[" + clean_html(xhs[i].innerHTML) + "]]></column>"; + width += xhs[i].offsetWidth; + if (width >= top_width) { + top_width += (xh[top_col] ? xh[top_col].offsetWidth : 0); + top_col++; + } + dx = xhs[0].offsetWidth; + } + } + return xml; + } + + function xml_body(colors) { + var xml = ""; + var evs = scheduler._rendered; + var matrix = scheduler.matrix && scheduler.matrix[scheduler._mode]; + + if (scheduler._mode == "agenda" || scheduler._mode == "map") { + + for (var i = 0; i < evs.length; i++) + xml += "<event><head><![CDATA[" + clean_html(evs[i].childNodes[0].innerHTML) + "]]></head><body><![CDATA[" + clean_html(evs[i].childNodes[2].innerHTML) + "]]></body></event>"; + + } else if (scheduler._mode == "week_agenda") { + + for (var i = 0; i < evs.length; i++) + xml += "<event day='" + evs[i].parentNode.getAttribute("day") + "'><body>" + clean_html(evs[i].innerHTML) + "</body></event>"; + + } else if (scheduler._mode == "year") { + + var evs = scheduler.get_visible_events(); + for (var i = 0; i < evs.length; i++) { + var d = evs[i].start_date; + if (d.valueOf() < scheduler._min_date.valueOf()) + d = scheduler._min_date; + + while (d < evs[i].end_date) { + var m = d.getMonth() + 12 * (d.getFullYear() - scheduler._min_date.getFullYear()) - scheduler.week_starts._month; + var day = scheduler.week_starts[m] + d.getDate() - 1; + var text_color = colors ? get_style(scheduler._get_year_cell(d), "color") : ""; + var bg_color = colors ? get_style(scheduler._get_year_cell(d), "backgroundColor") : ""; + + xml += "<event day='" + (day % 7) + "' week='" + Math.floor(day / 7) + "' month='" + m + "' backgroundColor='" + bg_color + "' color='" + text_color + "'></event>"; + d = scheduler.date.add(d, 1, "day"); + if (d.valueOf() >= scheduler._max_date.valueOf()) + break; + } + } + } else if (matrix && matrix.render == "cell") { + var evs = scheduler._els.dhx_cal_data[0].getElementsByTagName("TD"); + for (var i = 0; i < evs.length; i++) { + var text_color = colors ? get_style(evs[i], "color") : ""; + var bg_color = colors ? get_style(evs[i], "backgroundColor") : ""; + xml += "\n<event><body backgroundColor='" + bg_color + "' color='" + text_color + "'><![CDATA[" + clean_html(evs[i].innerHTML) + "]]></body></event>"; + } + } else { + for (var i = 0; i < evs.length; i++) { + var zx, zdx; + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + // logic for timeline view + zx = x_norm(evs[i].style.left); + zdx = x_norm(evs[i].offsetWidth)-1; + } else { + // we should use specific logic for day/week/units view + var left_norm = scheduler.config.use_select_menu_space ? 0 : 26; + zx = x_norm_event(evs[i].style.left, left_norm, true); + zdx = x_norm_event(evs[i].style.width, left_norm)-1; + } + if (isNaN(zdx * 1)) continue; + var zy = y_norm(evs[i].style.top); + var zdy = y_norm(evs[i].style.height); + + var e_type = evs[i].className.split(" ")[0].replace("dhx_cal_", ""); + if (e_type === 'dhx_tooltip_line') continue; + + var dets = scheduler.getEvent(evs[i].getAttribute("event_id")); + if (!dets) continue; + var day = dets._sday; + var week = dets._sweek; + var length = dets._length || 0; + + if (scheduler._mode == "month") { + zdy = parseInt(evs[i].offsetHeight, 10); + zy = parseInt(evs[i].style.top, 10) - scheduler.xy.month_head_height; + + day = de_day(evs[i], day); + week = de_week(evs[i], week); + } else if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + day = 0; + var el = evs[i].parentNode.parentNode.parentNode; + week = el.rowIndex; + var dy_copy = dy; + dy = evs[i].parentNode.offsetHeight; + zy = y_norm(evs[i].style.top); + zy -= zy * 0.2; + dy = dy_copy; + } else { + if (evs[i].parentNode == scheduler._els.dhx_cal_data[0]) continue; + var parent = scheduler._els["dhx_cal_data"][0].childNodes[0]; + var offset = parseFloat(parent.className.indexOf("dhx_scale_holder") != -1 ? parent.style.left : 0); + zx += x_norm(evs[i].parentNode.style.left, offset); + } + + xml += "\n<event week='" + week + "' day='" + day + "' type='" + e_type + "' x='" + zx + "' y='" + zy + "' width='" + zdx + "' height='" + zdy + "' len='" + length + "'>"; + + if (e_type == "event") { + xml += "<header><![CDATA[" + clean_html(evs[i].childNodes[1].innerHTML) + "]]></header>"; + var text_color = colors ? get_style(evs[i].childNodes[2], "color") : ""; + var bg_color = colors ? get_style(evs[i].childNodes[2], "backgroundColor") : ""; + xml += "<body backgroundColor='" + bg_color + "' color='" + text_color + "'><![CDATA[" + clean_html(evs[i].childNodes[2].innerHTML) + "]]></body>"; + } else { + var text_color = colors ? get_style(evs[i], "color") : ""; + var bg_color = colors ? get_style(evs[i], "backgroundColor") : ""; + xml += "<body backgroundColor='" + bg_color + "' color='" + text_color + "'><![CDATA[" + clean_html(evs[i].innerHTML) + "]]></body>"; + } + xml += "</event>"; + } + } + + return xml; + } + + function to_pdf(start, end, view, url, mode, header, footer) { + var colors = false; + if (mode == "fullcolor") { + colors = true; + mode = "color"; + } + + mode = mode || "color"; + + var uid = scheduler.uid(); + var d = document.createElement("div"); + d.style.display = "none"; + document.body.appendChild(d); + + d.innerHTML = '<form id="' + uid + '" method="post" target="_blank" action="' + url + '" accept-charset="utf-8" enctype="application/x-www-form-urlencoded"><input type="hidden" name="mycoolxmlbody"/> </form>'; + + + var xml = ""; + if (start) { + var original_date = scheduler._date; + var original_mode = scheduler._mode; + end = scheduler.date[view+"_start"](end); + end = scheduler.date["get_"+view+"_end"] ? scheduler.date["get_"+view+"_end"](end) : scheduler.date.add(end, 1, view); + + xml = xml_top("pages", mode, header, footer); + for (var temp_date = new Date(start); +temp_date < +end; temp_date = scheduler.date.add(temp_date, 1, view)) { + scheduler.setCurrentView(temp_date, view); + xml += xml_start("page") + xml_body_header().replace("\u2013", "-") + xml_body(colors) + xml_end("page"); + } + xml += xml_end("pages"); + + scheduler.setCurrentView(original_date, original_mode); + } else { + xml = xml_top("data", mode, header, footer) + xml_body_header().replace("\u2013", "-") + xml_body(colors) + xml_end("data"); + } + + + document.getElementById(uid).firstChild.value = encodeURIComponent(xml); + document.getElementById(uid).submit(); + d.parentNode.removeChild(d); + } + + scheduler.toPDF = function(url, mode, header, footer) { + return to_pdf.apply(this, [null, null, null, url, mode, header, footer]); + }; + scheduler.toPDFRange = function(start, end, view, url, mode, header, footer) { + if (typeof start == "string") { + start = scheduler.templates.api_date(start); + end = scheduler.templates.api_date(end); + } + + return to_pdf.apply(this, arguments); + }; +})(); diff --git a/codebase/sources/ext/dhtmlxscheduler_pdf.js.map b/codebase/sources/ext/dhtmlxscheduler_pdf.js.map new file mode 100644 index 0000000..0d4607e --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_pdf.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_pdf.js.map","sources":["dhtmlxscheduler_pdf.js"],"names":["clean_html","val","replace","newline_regexp","html_regexp","x_norm","x","offset","parseFloat","isNaN","w","colsWidth","width","cols","dx","x_norm_event","is_left","r","header","scheduler","_els","dhx_cal_header","childNodes","els","i","length","el","style","parentNode","y_norm","y","dy","get_style","node","window","getComputedStyle","currentStyle","de_day","n","parseInt","left","_cols","de_week","top","_colsS","heights","xml_start","tag","xml_end","xml_top","profile","footer","xml","xml_body_header","mode","_mode","matrix","render","dhx_cal_date","innerHTML","xh","dhx_cal_data","getElementsByTagName","className","xml_month_scale","xml_month","yh","firstChild","rows","cells","offsetHeight","tagName","indexOf","previousSibling","days","j","push","join","xhs","second_scale","offsetWidth","top_width","top_col","xml_body","colors","evs","_rendered","getAttribute","get_visible_events","d","start_date","valueOf","_min_date","end_date","m","getMonth","getFullYear","week_starts","_month","day","getDate","text_color","_get_year_cell","bg_color","Math","floor","date","add","_max_date","zx","zdx","left_norm","config","use_select_menu_space","zy","zdy","height","e_type","split","dets","getEvent","_sday","week","_sweek","_length","xy","month_head_height","rowIndex","dy_copy","parent","to_pdf","start","end","view","url","uid","document","createElement","display","body","appendChild","original_date","_date","original_mode","temp_date","Date","setCurrentView","getElementById","value","encodeURIComponent","submit","removeChild","RegExp","toPDF","apply","this","toPDFRange","templates","api_date","arguments"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_quick_info.js b/codebase/sources/ext/dhtmlxscheduler_quick_info.js new file mode 100644 index 0000000..08fc7bb --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_quick_info.js @@ -0,0 +1,199 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.config.icons_select = ["icon_details", "icon_delete"]; +scheduler.config.details_on_create = true; +scheduler.xy.menu_width = 0; + +scheduler.attachEvent("onClick", function(id){ + scheduler.showQuickInfo(id); + return true; +}); + +(function(){ + var events = ["onEmptyClick", "onViewChange", "onLightbox", "onBeforeEventDelete", "onBeforeDrag"]; + var hiding_function = function(){ + scheduler._hideQuickInfo(); + return true; + }; + for (var i=0; i<events.length; i++) + scheduler.attachEvent(events[i], hiding_function); +})(); + +scheduler.templates.quick_info_title = function(start, end, ev){ return ev.text.substr(0,50); }; +scheduler.templates.quick_info_content = function(start, end, ev){ return ev.details || ev.text; }; +scheduler.templates.quick_info_date = function(start, end, ev){ + if (scheduler.isOneDayEvent(ev)) + return scheduler.templates.day_date(start, end, ev) + " " +scheduler.templates.event_header(start, end, ev); + else + return scheduler.templates.week_date(start, end, ev); +}; + +scheduler.showQuickInfo = function(id){ + if (id == this._quick_info_box_id) return; + this.hideQuickInfo(true); + + var pos = this._get_event_counter_part(id); + + if (pos){ + this._quick_info_box = this._init_quick_info(pos); + this._fill_quick_data(id); + this._show_quick_info(pos); + } +}; +scheduler._hideQuickInfo = function(){ + scheduler.hideQuickInfo(); +}; +scheduler.hideQuickInfo = function(forced){ + var qi = this._quick_info_box; + this._quick_info_box_id = 0; + + if (qi && qi.parentNode){ + if (scheduler.config.quick_info_detached) + return qi.parentNode.removeChild(qi); + + if (qi.style.right == "auto") + qi.style.left = "-350px"; + else + qi.style.right = "-350px"; + + if (forced) + qi.parentNode.removeChild(qi); + } +}; +dhtmlxEvent(window, "keydown", function(e){ + if (e.keyCode == 27) + scheduler.hideQuickInfo(); +}); + +scheduler._show_quick_info = function(pos){ + var qi = scheduler._quick_info_box; + + if (scheduler.config.quick_info_detached){ + scheduler._obj.appendChild(qi); + var width = qi.offsetWidth; + var height = qi.offsetHeight; + + qi.style.left = pos.left - pos.dx*(width - pos.width) + "px"; + qi.style.top = pos.top - (pos.dy?height:-pos.height) + "px"; + } else { + qi.style.top = this.xy.scale_height+this.xy.nav_height + 20 + "px"; + if (pos.dx == 1){ + qi.style.right = "auto"; + qi.style.left = "-300px"; + + setTimeout(function(){ + qi.style.left = "-10px"; + },1); + } else { + qi.style.left = "auto"; + qi.style.right = "-300px"; + + setTimeout(function(){ + qi.style.right = "-10px"; + },1); + } + qi.className = qi.className.replace("dhx_qi_left","").replace("dhx_qi_left","")+" dhx_qi_"+(pos==1?"left":"right"); + scheduler._obj.appendChild(qi); + } +}; +scheduler.attachEvent("onTemplatesReady", function(){ + scheduler.hideQuickInfo(); + if(this._quick_info_box){ + var box = this._quick_info_box; + if(box.parentNode){ + box.parentNode.removeChild(box); + } + this._quick_info_box = null; + } +}); +scheduler._quick_info_onscroll_handler = function(e){ + scheduler.hideQuickInfo(); +}; +scheduler._init_quick_info = function(){ + if (!this._quick_info_box){ + var sizes = scheduler.xy; + + var qi = this._quick_info_box = document.createElement("div"); + qi.className = "dhx_cal_quick_info"; + if (scheduler.$testmode) + qi.className += " dhx_no_animate"; + //title + var html = "<div class=\"dhx_cal_qi_title\" style=\"height:"+sizes.quick_info_title+"px\">" + + "<div class=\"dhx_cal_qi_tcontent\"></div><div class=\"dhx_cal_qi_tdate\"></div>" + + "</div>" + + "<div class=\"dhx_cal_qi_content\"></div>"; + + //buttons + html += "<div class=\"dhx_cal_qi_controls\" style=\"height:"+sizes.quick_info_buttons+"px\">"; + var buttons = scheduler.config.icons_select; + for (var i = 0; i < buttons.length; i++) + html += "<div class=\"dhx_qi_big_icon "+buttons[i]+"\" title=\""+scheduler.locale.labels[buttons[i]]+"\"><div class='dhx_menu_icon " + buttons[i] + "'></div><div>"+scheduler.locale.labels[buttons[i]]+"</div></div>"; + html += "</div>"; + + qi.innerHTML = html; + dhtmlxEvent(qi, "click", function(ev){ + ev = ev || event; + scheduler._qi_button_click(ev.target || ev.srcElement); + }); + if (scheduler.config.quick_info_detached){ + scheduler._detachDomEvent(scheduler._els["dhx_cal_data"][0], "scroll", scheduler._quick_info_onscroll_handler); + dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "scroll", scheduler._quick_info_onscroll_handler); + } + } + + return this._quick_info_box; +}; + +scheduler._qi_button_click = function(node){ + var box = scheduler._quick_info_box; + if (!node || node == box) return; + + var mask = node.className; + if (mask.indexOf("_icon")!=-1){ + var id = scheduler._quick_info_box_id; + scheduler._click.buttons[mask.split(" ")[1].replace("icon_","")](id); + } else + scheduler._qi_button_click(node.parentNode); +}; +scheduler._get_event_counter_part = function(id){ + var domEv = scheduler.getRenderedEvent(id); + var left = 0; + var top = 0; + + var node = domEv; + while (node && node != scheduler._obj){ + left += node.offsetLeft; + top += node.offsetTop-node.scrollTop; + node = node.offsetParent; + } + if(node){ + var dx = (left + domEv.offsetWidth/2) > (scheduler._x/2) ? 1 : 0; + var dy = (top + domEv.offsetHeight/2) > (scheduler._y/2) ? 1 : 0; + + return { left:left, top:top, dx:dx, dy:dy, + width:domEv.offsetWidth, height:domEv.offsetHeight }; + } + return 0; +}; + +scheduler._fill_quick_data = function(id){ + var ev = scheduler.getEvent(id); + var qi = scheduler._quick_info_box; + + scheduler._quick_info_box_id = id; + +//title content + var titleContent = qi.firstChild.firstChild; + titleContent.innerHTML = scheduler.templates.quick_info_title(ev.start_date, ev.end_date, ev); + var titleDate = titleContent.nextSibling; + titleDate.innerHTML = scheduler.templates.quick_info_date(ev.start_date, ev.end_date, ev); + +//main content + var main = qi.firstChild.nextSibling; + main.innerHTML = scheduler.templates.quick_info_content(ev.start_date, ev.end_date, ev); +}; diff --git a/codebase/sources/ext/dhtmlxscheduler_quick_info.js.map b/codebase/sources/ext/dhtmlxscheduler_quick_info.js.map new file mode 100644 index 0000000..65165d0 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_quick_info.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_quick_info.js.map","sources":["dhtmlxscheduler_quick_info.js"],"names":["scheduler","config","icons_select","details_on_create","xy","menu_width","attachEvent","id","showQuickInfo","events","hiding_function","_hideQuickInfo","i","length","templates","quick_info_title","start","end","ev","text","substr","quick_info_content","details","quick_info_date","isOneDayEvent","day_date","event_header","week_date","this","_quick_info_box_id","hideQuickInfo","pos","_get_event_counter_part","_quick_info_box","_init_quick_info","_fill_quick_data","_show_quick_info","forced","qi","parentNode","quick_info_detached","removeChild","style","right","left","dhtmlxEvent","window","e","keyCode","_obj","appendChild","width","offsetWidth","height","offsetHeight","dx","top","dy","scale_height","nav_height","setTimeout","className","replace","box","_quick_info_onscroll_handler","sizes","document","createElement","$testmode","html","quick_info_buttons","buttons","locale","labels","innerHTML","event","_qi_button_click","target","srcElement","_detachDomEvent","_els","node","mask","indexOf","_click","split","domEv","getRenderedEvent","offsetLeft","offsetTop","scrollTop","offsetParent","_x","_y","getEvent","titleContent","firstChild","start_date","end_date","titleDate","nextSibling","main"],"mappings":"AAAAA,UAAUC,OAAOC,cAAgB,eAAgB,eACjDF,UAAUC,OAAOE,mBAAoB,EACrCH,UAAUI,GAAGC,WAAa,EAE1BL,UAAUM,YAAY,UAAW,SAASC,GAEzC,MADAP,WAAUQ,cAAcD,IACjB,IAGR,WAMC,IAAK,GALDE,IAAU,eAAgB,eAAgB,aAAc,sBAAuB,gBAC/EC,EAAkB,WAErB,MADAV,WAAUW,kBACH,GAECC,EAAE,EAAGA,EAAEH,EAAOI,OAAQD,IAC9BZ,UAAUM,YAAYG,EAAOG,GAAIF,MAGnCV,UAAUc,UAAUC,iBAAmB,SAASC,EAAOC,EAAKC,GAAK,MAAOA,GAAGC,KAAKC,OAAO,EAAE,KACzFpB,UAAUc,UAAUO,mBAAqB,SAASL,EAAOC,EAAKC,GAAK,MAAOA,GAAGI,SAAWJ,EAAGC;EAC3FnB,UAAUc,UAAUS,gBAAkB,SAASP,EAAOC,EAAKC,GAC1D,MAAIlB,WAAUwB,cAAcN,GACpBlB,UAAUc,UAAUW,SAAST,EAAOC,EAAKC,GAAM,IAAKlB,UAAUc,UAAUY,aAAaV,EAAOC,EAAKC,GAEjGlB,UAAUc,UAAUa,UAAUX,EAAOC,EAAKC,IAGnDlB,UAAUQ,cAAgB,SAASD,GAClC,GAAIA,GAAMqB,KAAKC,mBAAf,CACAD,KAAKE,eAAc,EAEnB,IAAIC,GAAMH,KAAKI,wBAAwBzB,EAEnCwB,KACHH,KAAKK,gBAAkBL,KAAKM,iBAAiBH,GAC7CH,KAAKO,iBAAiB5B,GACtBqB,KAAKQ,iBAAiBL,MAGxB/B,UAAUW,eAAiB,WAC1BX,UAAU8B,iBAEX9B,UAAU8B,cAAgB,SAASO,GAClC,GAAIC,GAAKV,KAAKK,eAGd;GAFAL,KAAKC,mBAAqB,EAEtBS,GAAMA,EAAGC,WAAW,CACvB,GAAIvC,UAAUC,OAAOuC,oBACpB,MAAOF,GAAGC,WAAWE,YAAYH,EAEZ,SAAlBA,EAAGI,MAAMC,MACZL,EAAGI,MAAME,KAAO,SAEhBN,EAAGI,MAAMC,MAAQ,SAEdN,GACHC,EAAGC,WAAWE,YAAYH,KAG7BO,YAAYC,OAAQ,UAAW,SAASC,GACtB,IAAbA,EAAEC,SACLhD,UAAU8B,kBAGZ9B,UAAUoC,iBAAmB,SAASL,GACrC,GAAIO,GAAKtC,UAAUiC,eAEnB,IAAIjC,UAAUC,OAAOuC,oBAAoB,CACxCxC,UAAUiD,KAAKC,YAAYZ,EAC3B,IAAIa,GAAQb,EAAGc,YACXC,EAASf,EAAGgB,YAEhBhB,GAAGI,MAAME,KAAOb,EAAIa,KAAOb,EAAIwB,IAAIJ,EAAQpB,EAAIoB,OAAS,KACxDb,EAAGI,MAAMc,IAAMzB,EAAIyB,KAAOzB,EAAI0B,GAAGJ,GAAQtB,EAAIsB,QAAU;KAEvDf,GAAGI,MAAMc,IAAM5B,KAAKxB,GAAGsD,aAAa9B,KAAKxB,GAAGuD,WAAa,GAAK,KAChD,GAAV5B,EAAIwB,IACPjB,EAAGI,MAAMC,MAAQ,OACjBL,EAAGI,MAAME,KAAO,SAEhBgB,WAAW,WACVtB,EAAGI,MAAME,KAAO,SACf,KAEFN,EAAGI,MAAME,KAAO,OAChBN,EAAGI,MAAMC,MAAQ,SAEjBiB,WAAW,WACVtB,EAAGI,MAAMC,MAAQ,SAChB,IAEHL,EAAGuB,UAAYvB,EAAGuB,UAAUC,QAAQ,cAAc,IAAIA,QAAQ,cAAc,IAAI,YAAiB,GAAL/B,EAAO,OAAO,SAC1G/B,UAAUiD,KAAKC,YAAYZ,IAG7BtC,UAAUM,YAAY,mBAAoB,WAEzC,GADAN,UAAU8B,gBACPF,KAAKK,gBAAgB,CACvB,GAAI8B,GAAMnC,KAAKK,eACZ8B;EAAIxB,YACNwB,EAAIxB,WAAWE,YAAYsB,GAE5BnC,KAAKK,gBAAkB,QAGzBjC,UAAUgE,6BAA+B,WACxChE,UAAU8B,iBAEX9B,UAAUkC,iBAAmB,WAC5B,IAAKN,KAAKK,gBAAgB,CACzB,GAAIgC,GAAQjE,UAAUI,GAElBkC,EAAKV,KAAKK,gBAAkBiC,SAASC,cAAc,MACvD7B,GAAGuB,UAAY,qBACX7D,UAAUoE,YACb9B,EAAGuB,WAAa,kBAEjB,IAAIQ,GAAO,+CAAkDJ,EAAMlD,iBAAiB,8HAMpFsD;GAAQ,kDAAqDJ,EAAMK,mBAAmB,MAEtF,KAAK,GADDC,GAAUvE,UAAUC,OAAOC,aACtBU,EAAI,EAAGA,EAAI2D,EAAQ1D,OAAQD,IACnCyD,GAAQ,+BAAgCE,EAAQ3D,GAAG,YAAcZ,UAAUwE,OAAOC,OAAOF,EAAQ3D,IAAI,gCAAkC2D,EAAQ3D,GAAK,gBAAgBZ,UAAUwE,OAAOC,OAAOF,EAAQ3D,IAAI,cACzMyD,IAAQ,SAER/B,EAAGoC,UAAYL,EACfxB,YAAYP,EAAI,QAAS,SAASpB,GACjCA,EAAKA,GAAMyD,MACX3E,UAAU4E,iBAAiB1D,EAAG2D,QAAU3D,EAAG4D,cAExC9E,UAAUC,OAAOuC,sBACpBxC,UAAU+E,gBAAgB/E,UAAUgF,KAAmB,aAAE,GAAI,SAAUhF,UAAUgE,8BACjFnB,YAAY7C,UAAUgF,KAAmB,aAAE,GAAI,SAAUhF,UAAUgE;CAIrE,MAAOpC,MAAKK,iBAGbjC,UAAU4E,iBAAmB,SAASK,GACrC,GAAIlB,GAAM/D,UAAUiC,eACpB,IAAKgD,GAAQA,GAAQlB,EAArB,CAEA,GAAImB,GAAOD,EAAKpB,SAChB,IAA2B,IAAvBqB,EAAKC,QAAQ,SAAa,CAC7B,GAAI5E,GAAKP,UAAU6B,kBACnB7B,WAAUoF,OAAOb,QAAQW,EAAKG,MAAM,KAAK,GAAGvB,QAAQ,QAAQ,KAAKvD,OAEjEP,WAAU4E,iBAAiBK,EAAK1C,cAElCvC,UAAUgC,wBAA0B,SAASzB,GAM5C,IALA,GAAI+E,GAAQtF,UAAUuF,iBAAiBhF,GACnCqC,EAAO,EACPY,EAAM,EAENyB,EAAOK,EACJL,GAAQA,GAAQjF,UAAUiD,MAChCL,GAAQqC,EAAKO,WACbhC,GAAOyB,EAAKQ,UAAUR,EAAKS,UAC3BT,EAAOA,EAAKU,YAEb,IAAGV,EAAK,CACP,GAAI1B,GAAMX,EAAO0C,EAAMlC,YAAY,EAAMpD,UAAU4F,GAAG,EAAK,EAAI,EAC3DnC,EAAMD,EAAM8B,EAAMhC,aAAa,EAAMtD,UAAU6F,GAAG,EAAK,EAAI,CAE/D;OAASjD,KAAKA,EAAMY,IAAIA,EAAKD,GAAGA,EAAIE,GAAGA,EACtCN,MAAMmC,EAAMlC,YAAaC,OAAOiC,EAAMhC,cAExC,MAAO,IAGRtD,UAAUmC,iBAAoB,SAAS5B,GACtC,GAAIW,GAAKlB,UAAU8F,SAASvF,GACxB+B,EAAKtC,UAAUiC,eAEnBjC,WAAU6B,mBAAqBtB,CAG/B,IAAIwF,GAAezD,EAAG0D,WAAWA,UACjCD,GAAarB,UAAY1E,UAAUc,UAAUC,iBAAiBG,EAAG+E,WAAY/E,EAAGgF,SAAUhF,EAC1F,IAAIiF,GAAYJ,EAAaK,WAC7BD,GAAUzB,UAAY1E,UAAUc,UAAUS,gBAAgBL,EAAG+E,WAAY/E,EAAGgF,SAAUhF,EAGtF,IAAImF,GAAO/D,EAAG0D,WAAWI,WACzBC,GAAK3B,UAAY1E,UAAUc,UAAUO,mBAAmBH,EAAG+E,WAAY/E,EAAGgF,SAAUhF"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_readonly.js b/codebase/sources/ext/dhtmlxscheduler_readonly.js new file mode 100644 index 0000000..462d878 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_readonly.js @@ -0,0 +1,160 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onTemplatesReady", function() { + var original_sns = scheduler.config.lightbox.sections.slice(); + var original_left_buttons = scheduler.config.buttons_left.slice(); + var original_right_buttons = scheduler.config.buttons_right.slice(); + + + scheduler.attachEvent("onBeforeLightbox", function(id) { + if (this.config.readonly_form || this.getEvent(id).readonly) { + this.config.readonly_active = true; + + for (var i = 0; i < this.config.lightbox.sections.length; i++) { + this.config.lightbox.sections[i].focus = false; + } + } + else { + this.config.readonly_active = false; + scheduler.config.lightbox.sections = original_sns.slice(); // restore original list of sections including recurring + scheduler.config.buttons_left = original_left_buttons.slice(); + scheduler.config.buttons_right = original_right_buttons.slice(); + } + + var sns = this.config.lightbox.sections; + if (this.config.readonly_active) { + for (var i = 0; i < sns.length; i++) { + if (sns[i].type == 'recurring') { + if (this.config.readonly_active) { + sns.splice(i, 1); + } + break; + } + } + + var forbidden_buttons = ["dhx_delete_btn", "dhx_save_btn"]; + var button_arrays = [scheduler.config.buttons_left, scheduler.config.buttons_right]; + for (var i = 0; i < forbidden_buttons.length; i++) { + var forbidden_button = forbidden_buttons[i]; + for (var k = 0; k < button_arrays.length; k++) { + var button_array = button_arrays[k]; + var index = -1; + for (var p = 0; p < button_array.length; p++) { + if (button_array[p] == forbidden_button) { + index = p; + break; + } + } + if (index != -1) { + button_array.splice(index, 1); + } + } + } + + + } + + this.resetLightbox(); + + return true; + }); + + function txt_replace(tag, d, n, text) { + var txts = d.getElementsByTagName(tag); + var txtt = n.getElementsByTagName(tag); + for (var i = txtt.length - 1; i >= 0; i--) { + var n = txtt[i]; + if (!text){ + n.disabled = true; + //radio and checkboxes loses state after .cloneNode in IE + if(d.checked) + n.checked = true; + }else { + var t = document.createElement("SPAN"); + t.className = "dhx_text_disabled"; + t.innerHTML = text(txts[i]); + n.parentNode.insertBefore(t, n); + n.parentNode.removeChild(n); + } + } + } + + var old = scheduler._fill_lightbox; + scheduler._fill_lightbox = function() { + + var lb = this.getLightbox(); + if (this.config.readonly_active) { + lb.style.visibility = 'hidden'; + // lightbox should have actual sizes before rendering controls + // currently only matters for dhtmlxCombo + lb.style.display = 'block'; + } + var res = old.apply(this, arguments); + if (this.config.readonly_active) { + //reset visibility and display + lb.style.visibility = ''; + lb.style.display = 'none'; + } + + if (this.config.readonly_active) { + + var d = this.getLightbox(); + var n = this._lightbox_r = d.cloneNode(true); + n.id = scheduler.uid(); + + txt_replace("textarea", d, n, function(a) { + return a.value; + }); + txt_replace("input", d, n, false); + txt_replace("select", d, n, function(a) { + if(!a.options.length) return ""; + return a.options[Math.max((a.selectedIndex || 0), 0)].text; + }); + + d.parentNode.insertBefore(n, d); + + olds.call(this, n); + if (scheduler._lightbox) + scheduler._lightbox.parentNode.removeChild(scheduler._lightbox); + this._lightbox = n; + + if (scheduler.config.drag_lightbox) + n.firstChild.onmousedown = scheduler._ready_to_dnd; + this.setLightboxSize(); + n.onclick = function(e) { + var src = e ? e.target : event.srcElement; + if (!src.className) src = src.previousSibling; + if (src && src.className) + switch (src.className) { + case "dhx_cancel_btn": + scheduler.callEvent("onEventCancel", [scheduler._lightbox_id]); + scheduler._edit_stop_event(scheduler.getEvent(scheduler._lightbox_id), false); + scheduler.hide_lightbox(); + break; + } + }; + } + return res; + }; + + var olds = scheduler.showCover; + scheduler.showCover = function() { + if (!this.config.readonly_active) + olds.apply(this, arguments); + }; + + var hold = scheduler.hide_lightbox; + scheduler.hide_lightbox = function() { + if (this._lightbox_r) { + this._lightbox_r.parentNode.removeChild(this._lightbox_r); + this._lightbox_r = this._lightbox = null; + } + + return hold.apply(this, arguments); + }; +}); diff --git a/codebase/sources/ext/dhtmlxscheduler_readonly.js.map b/codebase/sources/ext/dhtmlxscheduler_readonly.js.map new file mode 100644 index 0000000..8ce874d --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_readonly.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_readonly.js.map","sources":["dhtmlxscheduler_readonly.js"],"names":["scheduler","attachEvent","txt_replace","tag","d","n","text","txts","getElementsByTagName","txtt","i","length","t","document","createElement","className","innerHTML","parentNode","insertBefore","removeChild","disabled","checked","original_sns","config","lightbox","sections","slice","original_left_buttons","buttons_left","original_right_buttons","buttons_right","id","this","readonly_form","getEvent","readonly","readonly_active","focus","sns","type","splice","forbidden_buttons","button_arrays","forbidden_button","k","button_array","index","p","resetLightbox","old","_fill_lightbox","lb","getLightbox","style","visibility","display","res","apply","arguments","_lightbox_r","cloneNode","uid","a","value","options","Math","max","selectedIndex","olds","call","_lightbox","drag_lightbox","firstChild","onmousedown","_ready_to_dnd","setLightboxSize","onclick","e","src","target","event","srcElement","previousSibling","callEvent","_lightbox_id","_edit_stop_event","hide_lightbox","showCover","hold"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_recurring.js b/codebase/sources/ext/dhtmlxscheduler_recurring.js new file mode 100644 index 0000000..ad4a7a0 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_recurring.js @@ -0,0 +1,818 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.config.occurrence_timestamp_in_utc = false; +scheduler.config.recurring_workdays = [1,2,3,4,5]; +scheduler.form_blocks["recurring"] = { + render:function(sns) { + return scheduler.__recurring_template; + }, + _ds: {}, + _init_set_value:function(node, value, ev) { + scheduler.form_blocks["recurring"]._ds = {start:ev.start_date, end:ev._end_date}; + + var str_date_format = scheduler.date.str_to_date(scheduler.config.repeat_date); + var str_date = function(str_date) { + var date = str_date_format(str_date); + if (scheduler.config.include_end_by) + date = scheduler.date.add(date, 1, 'day'); + return date; + }; + + var date_str = scheduler.date.date_to_str(scheduler.config.repeat_date); + + var top = node.getElementsByTagName("FORM")[0]; + var els = []; + + function register_els(inps) { + for (var i = 0; i < inps.length; i++) { + var inp = inps[i]; + if (inp.type == "checkbox" || inp.type == "radio") { + if (!els[inp.name]) + els[inp.name] = []; + els[inp.name].push(inp); + } else + els[inp.name] = inp; + } + } + + register_els(top.getElementsByTagName("INPUT")); + register_els(top.getElementsByTagName("SELECT")); + + if (!scheduler.config.repeat_date_of_end) { + var formatter = scheduler.date.date_to_str(scheduler.config.repeat_date); + scheduler.config.repeat_date_of_end = formatter(scheduler.date.add(scheduler._currentDate(), 30, "day")); + } + els["date_of_end"].value = scheduler.config.repeat_date_of_end; + + var $ = function(a) { + return document.getElementById(a); + }; + + function get_radio_value(name) { + var col = els[name]; + for (var i = 0; i < col.length; i++) + if (col[i].checked) return col[i].value; + } + + function change_current_view() { + $("dhx_repeat_day").style.display = "none"; + $("dhx_repeat_week").style.display = "none"; + $("dhx_repeat_month").style.display = "none"; + $("dhx_repeat_year").style.display = "none"; + $("dhx_repeat_" + this.value).style.display = "block"; + } + + function get_repeat_code(dates) { + var code = [get_radio_value("repeat")]; + get_rcode[code[0]](code, dates); + + while (code.length < 5) code.push(""); + var repeat = ""; + if (els["end"][0].checked) { + dates.end = new Date(9999, 1, 1); + repeat = "no"; + } + else if (els["end"][2].checked) { + dates.end = str_date(els["date_of_end"].value); + } + else { + scheduler.transpose_type(code.join("_")); + repeat = Math.max(1, els["occurences_count"].value); + var transp = ((code[0] == "week" && code[4] && code[4].toString().indexOf(scheduler.config.start_on_monday ? 1 : 0) == -1) ? 1 : 0); + dates.end = scheduler.date.add(new Date(dates.start), repeat + transp, code.join("_")); + } + + return code.join("_") + "#" + repeat; + } + + scheduler.form_blocks["recurring"]._get_repeat_code = get_repeat_code; + var get_rcode = { + month:function(code, dates) { + if (get_radio_value("month_type") == "d") { + code.push(Math.max(1, els["month_count"].value)); + dates.start.setDate(els["month_day"].value); + } else { + code.push(Math.max(1, els["month_count2"].value)); + code.push(els["month_day2"].value); + code.push(Math.max(1, els["month_week2"].value)); + if (!scheduler.config.repeat_precise){ + dates.start.setDate(1); + } + } + dates._start = true; + }, + week:function(code, dates) { + code.push(Math.max(1, els["week_count"].value)); + code.push(""); + code.push(""); + var t = []; + var col = els["week_day"]; + var day = dates.start.getDay(); + var start_exists = false; + + for (var i = 0; i < col.length; i++){ + if (col[i].checked) { + t.push(col[i].value); + start_exists = start_exists || col[i].value == day; + } + } + if (!t.length){ + t.push(day); + start_exists = true; + } + t.sort(); + + + if (!scheduler.config.repeat_precise){ + dates.start = scheduler.date.week_start(dates.start); + dates._start = true; + } else if (!start_exists){ + scheduler.transpose_day_week(dates.start, t, 1, 7); + dates._start = true; + } + + code.push(t.join(",")); + }, + day:function(code) { + if (get_radio_value("day_type") == "d") { + code.push(Math.max(1, els["day_count"].value)); + } + else { + code.push("week"); + code.push(1); + code.push(""); + code.push(""); + code.push(scheduler.config.recurring_workdays.join(",")); + code.splice(0, 1); + } + }, + year:function(code, dates) { + if (get_radio_value("year_type") == "d") { + code.push("1"); + dates.start.setMonth(0); + dates.start.setDate(els["year_day"].value); + dates.start.setMonth(els["year_month"].value); + + } else { + code.push("1"); + code.push(els["year_day2"].value); + code.push(els["year_week2"].value); + dates.start.setDate(1); + dates.start.setMonth(els["year_month2"].value); + } + dates._start = true; + } + }; + var set_rcode = { + week:function(code, dates) { + els["week_count"].value = code[1]; + var col = els["week_day"]; + var t = code[4].split(","); + var d = {}; + for (var i = 0; i < t.length; i++) d[t[i]] = true; + for (var i = 0; i < col.length; i++) + col[i].checked = (!!d[col[i].value]); + }, + month:function(code, dates) { + if (code[2] === "") { + els["month_type"][0].checked = true; + els["month_count"].value = code[1]; + els["month_day"].value = dates.start.getDate(); + } else { + els["month_type"][1].checked = true; + els["month_count2"].value = code[1]; + els["month_week2"].value = code[3]; + els["month_day2"].value = code[2]; + } + }, + day:function(code, dates) { + els["day_type"][0].checked = true; + els["day_count"].value = code[1]; + }, + year:function(code, dates) { + if (code[2] === "") { + els["year_type"][0].checked = true; + els["year_day"].value = dates.start.getDate(); + els["year_month"].value = dates.start.getMonth(); + } else { + els["year_type"][1].checked = true; + els["year_week2"].value = code[3]; + els["year_day2"].value = code[2]; + els["year_month2"].value = dates.start.getMonth(); + } + } + }; + + function set_repeat_code(code, dates) { + var data = code.split("#"); + code = data[0].split("_"); + set_rcode[code[0]](code, dates); + var e = els["repeat"][({day:0, week:1, month:2, year:3})[code[0]]]; + switch (data[1]) { + case "no": + els["end"][0].checked = true; + break; + case "": + els["end"][2].checked = true; + + var end_date = dates.end; + if (scheduler.config.include_end_by){ + end_date = scheduler.date.add(end_date, -1, 'day'); + } + + els["date_of_end"].value = date_str(end_date); + break; + default: + els["end"][1].checked = true; + els["occurences_count"].value = data[1]; + break; + } + + e.checked = true; + e.onclick(); + } + + scheduler.form_blocks["recurring"]._set_repeat_code = set_repeat_code; + + for (var i = 0; i < top.elements.length; i++) { + var el = top.elements[i]; + switch (el.name) { + case "repeat": + el.onclick = change_current_view; + break; + } + } + scheduler._lightbox._rec_init_done = true; + }, + set_value:function(node, value, ev) { + var rf = scheduler.form_blocks["recurring"]; + if (!scheduler._lightbox._rec_init_done) + rf._init_set_value(node, value, ev); + node.open = !ev.rec_type; + if (this._is_modified_occurence(ev)) + node.blocked = true; + else node.blocked = false; + + var ds = rf._ds; + ds.start = ev.start_date; + ds.end = ev._end_date; + + rf.button_click(0, node.previousSibling.firstChild.firstChild, node, node); + if (value) + rf._set_repeat_code(value, ds); + }, + get_value:function(node, ev) { + if (node.open) { + var ds = scheduler.form_blocks["recurring"]._ds; + var actual_dates = {}; + this.formSection('time').getValue(actual_dates); + ds.start = actual_dates.start_date; + ev.rec_type = scheduler.form_blocks["recurring"]._get_repeat_code(ds); + if (ds._start) { + ev.start_date = new Date(ds.start); + ev._start_date = new Date(ds.start); + ds._start = false; + } else + ev._start_date = null; + + ev._end_date = ds.end; + ev.rec_pattern = ev.rec_type.split("#")[0]; + } else { + ev.rec_type = ev.rec_pattern = ""; + ev._end_date = ev.end_date; + } + return ev.rec_type; + }, + focus:function(node) { + }, + button_click:function(index, el, section, cont) { + if (!cont.open && !cont.blocked) { + cont.style.height = "115px"; + el.style.backgroundPosition = "-5px 0px"; + el.nextSibling.innerHTML = scheduler.locale.labels.button_recurring_open; + } else { + cont.style.height = "0px"; + el.style.backgroundPosition = "-5px 20px"; + el.nextSibling.innerHTML = scheduler.locale.labels.button_recurring; + } + cont.open = !cont.open; + + scheduler.setLightboxSize(); + } +}; + + +//problem may occur if we will have two repeating events in the same moment of time +scheduler._rec_markers = {}; +scheduler._rec_markers_pull = {}; +scheduler._add_rec_marker = function(ev, time) { + ev._pid_time = time; + this._rec_markers[ev.id] = ev; + if (!this._rec_markers_pull[ev.event_pid]) this._rec_markers_pull[ev.event_pid] = {}; + this._rec_markers_pull[ev.event_pid][time] = ev; +}; +scheduler._get_rec_marker = function(time, id) { + var ch = this._rec_markers_pull[id]; + if (ch) return ch[time]; + return null; +}; +scheduler._get_rec_markers = function(id) { + return (this._rec_markers_pull[id] || []); +}; +scheduler._rec_temp = []; +(function() { + var old_add_event = scheduler.addEvent; + scheduler.addEvent = function(start_date, end_date, text, id, extra_data) { + var ev_id = old_add_event.apply(this, arguments); + + if (ev_id) { + var ev = scheduler.getEvent(ev_id); + if (this._is_modified_occurence(ev)) + scheduler._add_rec_marker(ev, ev.event_length * 1000); + if (ev.rec_type) + ev.rec_pattern = ev.rec_type.split("#")[0]; + } + return ev_id; + }; +})(); +scheduler.attachEvent("onEventIdChange", function(id, new_id) { + if (this._ignore_call) return; + this._ignore_call = true; + + if(scheduler._rec_markers[id]){ + //important for for correct work of scheduler.getEvents(from, to) and collision detection + scheduler._rec_markers[new_id] = scheduler._rec_markers[id]; + delete scheduler._rec_markers[id]; + } + + for (var i = 0; i < this._rec_temp.length; i++) { + var tev = this._rec_temp[i]; + if (tev.event_pid == id) { + tev.event_pid = new_id; + this.changeEventId(tev.id, new_id + "#" + tev.id.split("#")[1]); + } + } + + delete this._ignore_call; +}); +scheduler.attachEvent("onConfirmedBeforeEventDelete", function(id) { + var ev = this.getEvent(id); + if (this._is_virtual_event(id) || (this._is_modified_occurence(ev) && ev.rec_type && ev.rec_type != 'none')) { + id = id.split("#"); + var nid = this.uid(); + var tid = (id[1]) ? id[1] : (ev._pid_time / 1000); + + var nev = this._copy_event(ev); + nev.id = nid; + nev.event_pid = ev.event_pid || id[0]; + var timestamp = tid; + nev.event_length = timestamp; + nev.rec_type = nev.rec_pattern = "none"; + this.addEvent(nev); + + this._add_rec_marker(nev, timestamp * 1000); + } else { + if (ev.rec_type && this._lightbox_id) + this._roll_back_dates(ev); + var sub = this._get_rec_markers(id); + for (var i in sub) { + if (sub.hasOwnProperty(i)) { + id = sub[i].id; + if (this.getEvent(id)) + this.deleteEvent(id, true); + } + } + } + return true; +}); +scheduler.attachEvent("onEventDeleted", function(id, ev){ + if(!this._is_virtual_event(id) && this._is_modified_occurence(ev)){ + if(!scheduler._events[id]){ + ev.rec_type = ev.rec_pattern = "none"; + this.setEvent(id, ev); + } + } +}); +scheduler.attachEvent("onEventChanged", function(id) { + if (this._loading) return true; + + var ev = this.getEvent(id); + + if (this._is_virtual_event(id)) { + var id = id.split("#"); + var nid = this.uid(); + this._not_render = true; + + var nev = this._copy_event(ev); + nev.id = nid; + nev.event_pid = id[0]; + var timestamp = id[1]; + nev.event_length = timestamp; + nev.rec_type = nev.rec_pattern = ""; + + this._add_rec_marker(nev, timestamp * 1000); + this.addEvent(nev); + + this._not_render = false; + + } else { + if (ev.rec_type && this._lightbox_id) + this._roll_back_dates(ev); + var sub = this._get_rec_markers(id); + for (var i in sub) { + if (sub.hasOwnProperty(i)) { + delete this._rec_markers[sub[i].id]; + this.deleteEvent(sub[i].id, true); + } + } + delete this._rec_markers_pull[id]; + + // it's possible that after editing event is no longer exists, in such case we need to remove _select_id flag + var isEventFound = false; + for (var k = 0; k < this._rendered.length; k++) { + if (this._rendered[k].getAttribute('event_id') == id) + isEventFound = true; + } + if (!isEventFound) + this._select_id = null; + } + return true; +}); +scheduler.attachEvent("onEventAdded", function(id) { + if (!this._loading) { + var ev = this.getEvent(id); + if (ev.rec_type && !ev.event_length) + this._roll_back_dates(ev); + } + return true; +}); +scheduler.attachEvent("onEventSave", function(id, data, is_new_event) { + var ev = this.getEvent(id); + if (!ev.rec_type && data.rec_type && !this._is_virtual_event(id)) + this._select_id = null; + return true; +}); +scheduler.attachEvent("onEventCreated", function(id) { + var ev = this.getEvent(id); + if (!ev.rec_type) + ev.rec_type = ev.rec_pattern = ev.event_length = ev.event_pid = ""; + return true; +}); +scheduler.attachEvent("onEventCancel", function(id) { + var ev = this.getEvent(id); + if (ev.rec_type) { + this._roll_back_dates(ev); + // a bit expensive, but we need to be sure that event re-rendered, because view can be corrupted by resize , during edit process + this.render_view_data(); + } +}); +scheduler._roll_back_dates = function(ev) { + ev.event_length = (ev.end_date.valueOf() - ev.start_date.valueOf()) / 1000; + ev.end_date = ev._end_date; + if (ev._start_date) { + ev.start_date.setMonth(0); + ev.start_date.setDate(ev._start_date.getDate()); + ev.start_date.setMonth(ev._start_date.getMonth()); + ev.start_date.setFullYear(ev._start_date.getFullYear()); + + } +}; + +scheduler._is_virtual_event = function(id){ + return id.toString().indexOf("#") != -1; +}; +scheduler._is_modified_occurence = function(ev){ + return (ev.event_pid && ev.event_pid != "0"); +}; + +scheduler._validId = function(id) { + return !this._is_virtual_event(id); +}; + +scheduler.showLightbox_rec = scheduler.showLightbox; +scheduler.showLightbox = function(id) { + var locale = this.locale; + var c = scheduler.config.lightbox_recurring; + var ev = this.getEvent(id); + var pid = ev.event_pid; + var isVirtual = this._is_virtual_event(id); + if (isVirtual) + pid = id.split("#")[0]; + + // show series + var showSeries = function(id) { + var event = scheduler.getEvent(id); + event._end_date = event.end_date; + event.end_date = new Date(event.start_date.valueOf() + event.event_length * 1000); + return scheduler.showLightbox_rec(id); // editing series + }; + + if ( (pid || pid*1 === 0) && ev.rec_type) { + // direct API call on series id + return showSeries(id); + } + if ( !pid || pid === '0' || ( (!locale.labels.confirm_recurring || c == 'instance') || (c == 'series' && !isVirtual)) ) { + // editing instance or non recurring event + return this.showLightbox_rec(id); + } + if (c == 'ask') { + var that = this; + dhtmlx.modalbox({ + text: locale.labels.confirm_recurring, + title: locale.labels.title_confirm_recurring, + width: "500px", + position: "middle", + buttons:[locale.labels.button_edit_series, locale.labels.button_edit_occurrence, locale.labels.icon_cancel], + callback: function(index) { + switch(+index) { + case 0: + return showSeries(pid); + case 1: + return that.showLightbox_rec(id); + case 2: + return; + } + } + }); + } else { + showSeries(pid); + } +}; + + +scheduler.get_visible_events_rec = scheduler.get_visible_events; +scheduler.get_visible_events = function(only_timed) { + for (var i = 0; i < this._rec_temp.length; i++) + delete this._events[this._rec_temp[i].id]; + this._rec_temp = []; + + var stack = this.get_visible_events_rec(only_timed); + var out = []; + for (var i = 0; i < stack.length; i++) { + if (stack[i].rec_type) { + //deleted element of serie + if (stack[i].rec_pattern != "none") + this.repeat_date(stack[i], out); + } + else out.push(stack[i]); + } + return out; +}; + + +(function() { + var old = scheduler.isOneDayEvent; + scheduler.isOneDayEvent = function(ev) { + if (ev.rec_type) return true; + return old.call(this, ev); + }; + var old_update_event = scheduler.updateEvent; + scheduler.updateEvent = function(id) { + var ev = scheduler.getEvent(id); + if(ev && ev.rec_type){ + //rec_type can be changed without the lightbox, + // make sure rec_pattern updated as well + ev.rec_pattern = (ev.rec_type || "").split("#")[0]; + } + if (ev && ev.rec_type && !this._is_virtual_event(id)) { + scheduler.update_view(); + } else { + old_update_event.call(this, id); + } + }; +})(); + +scheduler.transponse_size = { + day:1, week:7, month:1, year:12 +}; +scheduler.date.day_week = function(sd, day, week) { + sd.setDate(1); + week = (week - 1) * 7; + var cday = sd.getDay(); + var nday = day * 1 + week - cday + 1; + sd.setDate(nday <= week ? (nday + 7) : nday); +}; +scheduler.transpose_day_week = function(sd, list, cor, size, cor2) { + var cday = (sd.getDay() || (scheduler.config.start_on_monday ? 7 : 0)) - cor; + for (var i = 0; i < list.length; i++) { + if (list[i] > cday) + return sd.setDate(sd.getDate() + list[i] * 1 - cday - (size ? cor : cor2)); + } + this.transpose_day_week(sd, list, cor + size, null, cor); +}; +scheduler.transpose_type = function(type) { + var f = "transpose_" + type; + if (!this.date[f]) { + var str = type.split("_"); + var day = 60 * 60 * 24 * 1000; + var gf = "add_" + type; + var step = this.transponse_size[str[0]] * str[1]; + + if (str[0] == "day" || str[0] == "week") { + var days = null; + if (str[4]) { + days = str[4].split(","); + if (scheduler.config.start_on_monday) { + for (var i = 0; i < days.length; i++) + days[i] = (days[i] * 1) || 7; + days.sort(); + } + } + + this.date[f] = function(nd, td) { + var delta = Math.floor((td.valueOf() - nd.valueOf()) / (day * step)); + if (delta > 0) + nd.setDate(nd.getDate() + delta * step); + if (days) + scheduler.transpose_day_week(nd, days, 1, step); + }; + this.date[gf] = function(sd, inc) { + var nd = new Date(sd.valueOf()); + if (days) { + for (var count = 0; count < inc; count++) + scheduler.transpose_day_week(nd, days, 0, step); + } else + nd.setDate(nd.getDate() + inc * step); + + return nd; + }; + } + else if (str[0] == "month" || str[0] == "year") { + this.date[f] = function(nd, td) { + var delta = Math.ceil(((td.getFullYear() * 12 + td.getMonth() * 1) - (nd.getFullYear() * 12 + nd.getMonth() * 1)) / (step)); + if (delta >= 0) + nd.setMonth(nd.getMonth() + delta * step); + if (str[3]) + scheduler.date.day_week(nd, str[2], str[3]); + }; + this.date[gf] = function(sd, inc) { + var nd = new Date(sd.valueOf()); + nd.setMonth(nd.getMonth() + inc * step); + if (str[3]) + scheduler.date.day_week(nd, str[2], str[3]); + return nd; + }; + } + } +}; +scheduler.repeat_date = function(ev, stack, non_render, from, to) { + + from = from || this._min_date; + to = to || this._max_date; + + var td = new Date(ev.start_date.valueOf()); + + if (!ev.rec_pattern && ev.rec_type) + ev.rec_pattern = ev.rec_type.split("#")[0]; + + this.transpose_type(ev.rec_pattern); + scheduler.date["transpose_" + ev.rec_pattern](td, from); + while (td < ev.start_date || scheduler._fix_daylight_saving_date(td,from,ev,td,new Date(td.valueOf() + ev.event_length * 1000)).valueOf() <= from.valueOf() || td.valueOf() + ev.event_length * 1000 <= from.valueOf()) + td = this.date.add(td, 1, ev.rec_pattern); + while (td < to && td < ev.end_date) { + var timestamp = (scheduler.config.occurrence_timestamp_in_utc) ? Date.UTC(td.getFullYear(), td.getMonth(), td.getDate(), td.getHours(), td.getMinutes(), td.getSeconds()) : td.valueOf(); + var ch = this._get_rec_marker(timestamp, ev.id); + if (!ch) { // unmodified element of series + var ted = new Date(td.valueOf() + ev.event_length * 1000); + var copy = this._copy_event(ev); + //copy._timed = ev._timed; + copy.text = ev.text; + copy.start_date = td; + copy.event_pid = ev.id; + copy.id = ev.id + "#" + Math.ceil(timestamp / 1000); + copy.end_date = ted; + + copy.end_date = scheduler._fix_daylight_saving_date(copy.start_date, copy.end_date, ev, td, copy.end_date); + + copy._timed = this.isOneDayEvent(copy); + + if (!copy._timed && !this._table_view && !this.config.multi_day) return; + stack.push(copy); + + if (!non_render) { + this._events[copy.id] = copy; + this._rec_temp.push(copy); + } + + } else + if (non_render) stack.push(ch); + + td = this.date.add(td, 1, ev.rec_pattern); + } +}; +scheduler._fix_daylight_saving_date = function(start_date, end_date, ev, counter, default_date) { + var shift = start_date.getTimezoneOffset() - end_date.getTimezoneOffset(); + if (shift) { + if (shift > 0) { + // e.g. 24h -> 23h + return new Date(counter.valueOf() + ev.event_length * 1000 - shift * 60 * 1000); + } + else { + // e.g. 24h -> 25h + return new Date(end_date.valueOf() - shift * 60 * 1000); + } + } + return new Date(default_date.valueOf()); +}; +scheduler.getRecDates = function(id, max) { + var ev = typeof id == "object" ? id : scheduler.getEvent(id); + var count = 0; + var result = []; + max = max || 100; + + var td = new Date(ev.start_date.valueOf()); + var from = new Date(td.valueOf()); + + if (!ev.rec_type) { + return [ + { start_date: ev.start_date, end_date: ev.end_date } + ]; + } + if (ev.rec_type == "none") { + return []; + } + this.transpose_type(ev.rec_pattern); + scheduler.date["transpose_" + ev.rec_pattern](td, from); + + while (td < ev.start_date || (td.valueOf() + ev.event_length * 1000) <= from.valueOf()) + td = this.date.add(td, 1, ev.rec_pattern); + while (td < ev.end_date) { + var ch = this._get_rec_marker(td.valueOf(), ev.id); + var res = true; + if (!ch) { // unmodified element of series + var sed = new Date(td); + var ted = new Date(td.valueOf() + ev.event_length * 1000); + + ted = scheduler._fix_daylight_saving_date(sed, ted, ev, td, ted); + + result.push({start_date:sed, end_date:ted}); + } else if(ch.rec_type == "none") { + res = false; + } else { + result.push({ start_date: ch.start_date, end_date: ch.end_date }); + } + + td = this.date.add(td, 1, ev.rec_pattern); + if (res) { + count++; + if (count == max) + break; + } + } + return result; +}; +scheduler.getEvents = function(from, to) { + var result = []; + for (var a in this._events) { + var ev = this._events[a]; + if (ev && ev.start_date < to && ev.end_date > from) { + if (ev.rec_pattern) { + if (ev.rec_pattern == "none") continue; + var sev = []; + this.repeat_date(ev, sev, true, from, to); + for (var i = 0; i < sev.length; i++) { + // if event is in rec_markers then it will be checked by himself, here need to skip it + if (!sev[i].rec_pattern && sev[i].start_date < to && sev[i].end_date > from && !this._rec_markers[sev[i].id]) { + result.push(sev[i]); + } + } + } else if (!this._is_virtual_event(ev.id)) { // if it's virtual event we can skip it + result.push(ev); + } + } + } + return result; +}; + +scheduler.config.repeat_date = "%m.%d.%Y"; +scheduler.config.lightbox.sections = [ + {name:"description", height:130, map_to:"text", type:"textarea" , focus:true}, + {name:"recurring", type:"recurring", map_to:"rec_type", button:"recurring"}, + {name:"time", height:72, type:"time", map_to:"auto"} +]; + + +//drop secondary attributes +scheduler._copy_dummy = function(ev) { + var start_date = new Date(this.start_date); + var end_date = new Date(this.end_date); + this.start_date = start_date; + this.end_date = end_date; + this.event_length = this.event_pid = this.rec_pattern = this.rec_type = null; +}; + +scheduler.config.include_end_by = false; +scheduler.config.lightbox_recurring = 'ask'; // series, instance + +scheduler.attachEvent("onClearAll", function(){ + scheduler._rec_markers = {}; //clear recurring events data + scheduler._rec_markers_pull = {}; + scheduler._rec_temp = []; +}); + +scheduler.__recurring_template='<div class="dhx_form_repeat"> <form> <div class="dhx_repeat_left"> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="day" />Daily</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="week"/>Weekly</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="month" checked />Monthly</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="repeat" value="year" />Yearly</label> </div> <div class="dhx_repeat_divider"></div> <div class="dhx_repeat_center"> <div style="display:none;" id="dhx_repeat_day"> <label><input class="dhx_repeat_radio" type="radio" name="day_type" value="d"/>Every</label><input class="dhx_repeat_text" type="text" name="day_count" value="1" />day<br /> <label><input class="dhx_repeat_radio" type="radio" name="day_type" checked value="w"/>Every workday</label> </div> <div style="display:none;" id="dhx_repeat_week"> Repeat every<input class="dhx_repeat_text" type="text" name="week_count" value="1" />week next days:<br /> <table class="dhx_repeat_days"> <tr> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="1" />Monday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="4" />Thursday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="2" />Tuesday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="5" />Friday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="3" />Wednesday</label><br /> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="6" />Saturday</label> </td> <td> <label><input class="dhx_repeat_checkbox" type="checkbox" name="week_day" value="0" />Sunday</label><br /><br /> </td> </tr> </table> </div> <div id="dhx_repeat_month"> <label><input class="dhx_repeat_radio" type="radio" name="month_type" value="d"/>Repeat</label><input class="dhx_repeat_text" type="text" name="month_day" value="1" />day every<input class="dhx_repeat_text" type="text" name="month_count" value="1" />month<br /> <label><input class="dhx_repeat_radio" type="radio" name="month_type" checked value="w"/>On</label><input class="dhx_repeat_text" type="text" name="month_week2" value="1" /><select name="month_day2"><option value="1" selected >Monday<option value="2">Tuesday<option value="3">Wednesday<option value="4">Thursday<option value="5">Friday<option value="6">Saturday<option value="0">Sunday</select>every<input class="dhx_repeat_text" type="text" name="month_count2" value="1" />month<br /> </div> <div style="display:none;" id="dhx_repeat_year"> <label><input class="dhx_repeat_radio" type="radio" name="year_type" value="d"/>Every</label><input class="dhx_repeat_text" type="text" name="year_day" value="1" />day<select name="year_month"><option value="0" selected >January<option value="1">February<option value="2">March<option value="3">April<option value="4">May<option value="5">June<option value="6">July<option value="7">August<option value="8">September<option value="9">October<option value="10">November<option value="11">December</select>month<br /> <label><input class="dhx_repeat_radio" type="radio" name="year_type" checked value="w"/>On</label><input class="dhx_repeat_text" type="text" name="year_week2" value="1" /><select name="year_day2"><option value="1" selected >Monday<option value="2">Tuesday<option value="3">Wednesday<option value="4">Thursday<option value="5">Friday<option value="6">Saturday<option value="7">Sunday</select>of<select name="year_month2"><option value="0" selected >January<option value="1">February<option value="2">March<option value="3">April<option value="4">May<option value="5">June<option value="6">July<option value="7">August<option value="8">September<option value="9">October<option value="10">November<option value="11">December</select><br /> </div> </div> <div class="dhx_repeat_divider"></div> <div class="dhx_repeat_right"> <label><input class="dhx_repeat_radio" type="radio" name="end" checked/>No end date</label><br /> <label><input class="dhx_repeat_radio" type="radio" name="end" />After</label><input class="dhx_repeat_text" type="text" name="occurences_count" value="1" />occurrences<br /> <label><input class="dhx_repeat_radio" type="radio" name="end" />End by</label><input class="dhx_repeat_date" type="text" name="date_of_end" value="'+scheduler.config.repeat_date_of_end+'" /><br /> </div> </form> </div> <div style="clear:both"> </div>'; diff --git a/codebase/sources/ext/dhtmlxscheduler_recurring.js.map b/codebase/sources/ext/dhtmlxscheduler_recurring.js.map new file mode 100644 index 0000000..d69ba82 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_recurring.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_recurring.js.map","sources":["dhtmlxscheduler_recurring.js"],"names":["scheduler","config","occurrence_timestamp_in_utc","recurring_workdays","form_blocks","render","__recurring_template","_ds","_init_set_value","node","value","ev","register_els","inps","i","length","inp","type","els","name","push","get_radio_value","col","checked","change_current_view","$","style","display","this","get_repeat_code","dates","code","get_rcode","repeat","end","Date","str_date","transpose_type","join","Math","max","transp","toString","indexOf","start_on_monday","date","add","start","set_repeat_code","data","split","set_rcode","e","day","week","month","year","end_date","include_end_by","date_str","onclick","start_date","_end_date","str_date_format","str_to_date","repeat_date","date_to_str","top","getElementsByTagName","repeat_date_of_end","formatter","_currentDate","a","document","getElementById","_get_repeat_code","setDate","repeat_precise","_start","t","getDay","start_exists","sort","transpose_day_week","week_start","splice","setMonth","d","getDate","getMonth","_set_repeat_code","elements","el","_lightbox","_rec_init_done","set_value","rf","open","rec_type","blocked","_is_modified_occurence","ds","button_click","previousSibling","firstChild","get_value","actual_dates","formSection","getValue","_start_date","rec_pattern","focus","index","section","cont","height","backgroundPosition","nextSibling","innerHTML","locale","labels","button_recurring","button_recurring_open","setLightboxSize","_rec_markers","_rec_markers_pull","_add_rec_marker","time","_pid_time","id","event_pid","_get_rec_marker","ch","_get_rec_markers","_rec_temp","old_add_event","addEvent","ev_id","apply","arguments","getEvent","event_length","attachEvent","new_id","_ignore_call","tev","changeEventId","_is_virtual_event","nid","uid","tid","nev","_copy_event","timestamp","_lightbox_id","_roll_back_dates","sub","hasOwnProperty","deleteEvent","_events","setEvent","_loading","_not_render","isEventFound","k","_rendered","getAttribute","_select_id","render_view_data","valueOf","setFullYear","getFullYear","_validId","showLightbox_rec","showLightbox","c","lightbox_recurring","pid","isVirtual","showSeries","event","confirm_recurring","that","dhtmlx","modalbox","text","title","title_confirm_recurring","width","position","buttons","button_edit_series","button_edit_occurrence","icon_cancel","callback","get_visible_events_rec","get_visible_events","only_timed","stack","out","old","isOneDayEvent","call","old_update_event","updateEvent","update_view","transponse_size","day_week","sd","cday","nday","list","cor","size","cor2","f","str","gf","step","days","nd","td","delta","floor","inc","count","ceil","non_render","from","to","_min_date","_max_date","_fix_daylight_saving_date","UTC","getHours","getMinutes","getSeconds","ted","copy","_timed","_table_view","multi_day","counter","default_date","shift","getTimezoneOffset","getRecDates","result","res","sed","getEvents","sev","lightbox","sections","map_to","button","_copy_dummy"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_serialize.js b/codebase/sources/ext/dhtmlxscheduler_serialize.js new file mode 100644 index 0000000..88b70ef --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_serialize.js @@ -0,0 +1,110 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler._get_serializable_data = function(){ + var res = {}; + for (var a in this._events){ + var ev = this._events[a]; + if (ev.id.toString().indexOf("#") == -1){ + res[ev.id] = ev; + } + } + return res; +}; + +//redefine this method, if you want to provide a custom set of attributes for serialization +scheduler.data_attributes=function(){ + var attrs = []; + var format = scheduler.templates.xml_format; + var all_events = this._get_serializable_data(); + for (var a in all_events){ + var ev = all_events[a]; + for (var name in ev) + if (name.substr(0,1) !="_") + attrs.push([name,((name == "start_date" || name == "end_date")?format:null)]); + break; + } + return attrs; +}; + +scheduler.toXML = function(header){ + var xml = []; + var attrs = this.data_attributes(); + + var all_events = this._get_serializable_data(); + for (var a in all_events){ + var ev = all_events[a]; + + xml.push("<event>"); + for (var i=0; i < attrs.length; i++) + xml.push("<"+attrs[i][0]+"><![CDATA["+(attrs[i][1]?attrs[i][1](ev[attrs[i][0]]):ev[attrs[i][0]])+"]]></"+attrs[i][0]+">"); + + xml.push("</event>"); + } + return (header||"")+"<data>"+xml.join("\n")+"</data>"; +}; + +scheduler._serialize_json_value = function(value){ + if(value === null || typeof value === "boolean"){ + value = "" + value; + }else{ + if(!value && value !== 0){ + value = ""; + } + value = '"' + value.toString(). + replace(/\n/g,""). + replace(/\\/g,"\\\\"). + replace(/\"/g, '\\"') + '"'; + } + return value; +}; + +scheduler.toJSON = function(){ + var json = [], value = ""; + var attrs = this.data_attributes(); + var all_events = this._get_serializable_data(); + for (var a in all_events){ + var ev = all_events[a]; + + var line =[]; + for (var i=0; i < attrs.length; i++){ + value = (attrs[i][1]) ? attrs[i][1](ev[attrs[i][0]]) : ev[attrs[i][0]]; + + line.push(' "'+attrs[i][0]+'": '+ this._serialize_json_value(value)); + } + json.push("{"+line.join(",")+"}"); + } + return "["+json.join(",\n")+"]"; +}; + + +scheduler.toICal = function(header){ + var start = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//dhtmlXScheduler//NONSGML v2.2//EN\nDESCRIPTION:"; + var end = "END:VCALENDAR"; + var format = scheduler.date.date_to_str("%Y%m%dT%H%i%s"); + var full_day_format = scheduler.date.date_to_str("%Y%m%d"); + + var ical = []; + var all_events = this._get_serializable_data(); + for (var a in all_events){ + var ev = all_events[a]; + + + ical.push("BEGIN:VEVENT"); + if (!ev._timed || (!ev.start_date.getHours() && !ev.start_date.getMinutes())) + ical.push("DTSTART:"+full_day_format(ev.start_date)); + else + ical.push("DTSTART:"+format(ev.start_date)); + if (!ev._timed || (!ev.end_date.getHours() && !ev.end_date.getMinutes())) + ical.push("DTEND:"+full_day_format(ev.end_date)); + else + ical.push("DTEND:"+format(ev.end_date)); + ical.push("SUMMARY:"+ev.text); + ical.push("END:VEVENT"); + } + return start+(header||"")+"\n"+ical.join("\n")+"\n"+end; +};
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_serialize.js.map b/codebase/sources/ext/dhtmlxscheduler_serialize.js.map new file mode 100644 index 0000000..6ad3a60 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_serialize.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_serialize.js.map","sources":["dhtmlxscheduler_serialize.js"],"names":["scheduler","_get_serializable_data","res","a","this","_events","ev","id","toString","indexOf","data_attributes","attrs","format","templates","xml_format","all_events","name","substr","push","toXML","header","xml","i","length","join","_serialize_json_value","value","replace","toJSON","json","line","toICal","start","end","date","date_to_str","full_day_format","ical","_timed","start_date","getHours","getMinutes","end_date","text"],"mappings":"AAAAA,UAAUC,uBAAyB,WAClC,GAAIC,KACJ,KAAK,GAAIC,KAAKC,MAAKC,QAAQ,CAC1B,GAAIC,GAAKF,KAAKC,QAAQF,EACe,KAAjCG,EAAGC,GAAGC,WAAWC,QAAQ,OAC5BP,EAAII,EAAGC,IAAMD,GAGf,MAAOJ,IAIRF,UAAUU,gBAAgB,WACzB,GAAIC,MACAC,EAASZ,UAAUa,UAAUC,WAC7BC,EAAaX,KAAKH,wBACtB,KAAK,GAAIE,KAAKY,GAAW,CACxB,GAAIT,GAAKS,EAAWZ,EACpB,KAAK,GAAIa,KAAQV,GACO,KAAnBU,EAAKC,OAAO,EAAE,IACjBN,EAAMO,MAAMF,EAAe,cAARA,GAAgC,YAARA,EAAoBJ,EAAO,MACxE,OAED,MAAOD,IAGRX,UAAUmB,MAAQ,SAASC,GAC1B,GAAIC,MACAV,EAAQP,KAAKM,kBAEbK,EAAaX,KAAKH,wBACtB,KAAK,GAAIE,KAAKY,GAAW,CACxB,GAAIT,GAAKS,EAAWZ,EAEpBkB;EAAIH,KAAK,UACT,KAAK,GAAII,GAAE,EAAGA,EAAIX,EAAMY,OAAQD,IAC/BD,EAAIH,KAAK,IAAIP,EAAMW,GAAG,GAAG,cAAcX,EAAMW,GAAG,GAAGX,EAAMW,GAAG,GAAGhB,EAAGK,EAAMW,GAAG,KAAKhB,EAAGK,EAAMW,GAAG,KAAK,QAAQX,EAAMW,GAAG,GAAG,IAEtHD,GAAIH,KAAK,YAEV,OAAQE,GAAQ,IAAI,SAASC,EAAIG,KAAK,MAAM,WAG7CxB,UAAUyB,sBAAwB,SAASC,GAY1C,MAXa,QAAVA,GAAmC,iBAAVA,GAC3BA,EAAQ,GAAKA,GAETA,GAAmB,IAAVA,IACZA,EAAQ,IAETA,EAAQ,IAAMA,EAAMlB,WACnBmB,QAAQ,MAAM,IACdA,QAAQ,MAAM,QACdA,QAAQ,MAAO,OAAS,KAEnBD,GAGR1B,UAAU4B,OAAS,WAClB,GAAIC,MAAWH,EAAQ,GACnBf,EAAQP,KAAKM,kBACbK,EAAaX,KAAKH,wBACtB,KAAK,GAAIE,KAAKY,GAAW,CAIxB,IAAK,GAHDT,GAAKS,EAAWZ,GAEhB2B,KACKR,EAAE,EAAGA,EAAIX,EAAMY,OAAQD,IAC/BI,EAASf,EAAMW,GAAG,GAAMX,EAAMW,GAAG,GAAGhB,EAAGK,EAAMW,GAAG,KAAOhB,EAAGK,EAAMW,GAAG,IAEnEQ,EAAKZ,KAAK,KAAKP,EAAMW,GAAG,GAAG,MAAOlB,KAAKqB,sBAAsBC,GAE9DG;EAAKX,KAAK,IAAIY,EAAKN,KAAK,KAAK,KAE9B,MAAO,IAAIK,EAAKL,KAAK,OAAO,KAI7BxB,UAAU+B,OAAS,SAASX,GAC3B,GAAIY,GAAQ,0FACRC,EAAM,gBACNrB,EAASZ,UAAUkC,KAAKC,YAAY,iBACpCC,EAAkBpC,UAAUkC,KAAKC,YAAY,UAE7CE,KACAtB,EAAaX,KAAKH,wBACtB,KAAK,GAAIE,KAAKY,GAAW,CACxB,GAAIT,GAAKS,EAAWZ,EAGpBkC,GAAKnB,KAAK,gBAITmB,EAAKnB,KAHDZ,EAAGgC,SAAYhC,EAAGiC,WAAWC,YAAelC,EAAGiC,WAAWE,cAGpD,WAAW7B,EAAON,EAAGiC,YAFrB,WAAWH,EAAgB9B,EAAGiC,aAMxCF,EAAKnB,KAHDZ,EAAGgC,SAAYhC,EAAGoC,SAASF,YAAelC,EAAGoC,SAASD,cAGhD,SAAS7B,EAAON,EAAGoC,UAFnB,SAASN,EAAgB9B,EAAGoC,WAGvCL,EAAKnB,KAAK,WAAWZ,EAAGqC,MACxBN,EAAKnB,KAAK;CAEX,MAAOc,IAAOZ,GAAQ,IAAI,KAAKiB,EAAKb,KAAK,MAAM,KAAKS"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_timeline.js b/codebase/sources/ext/dhtmlxscheduler_timeline.js new file mode 100644 index 0000000..2f60f9f --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_timeline.js @@ -0,0 +1,1277 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler._temp_matrix_scope = function(){ + + + +scheduler.matrix = {}; +scheduler._merge=function(a,b){ + for (var c in b) + if (typeof a[c] == "undefined") + a[c]=b[c]; +}; +scheduler.createTimelineView=function(obj){ + scheduler._skin_init(); + + scheduler._merge(obj,{ + section_autoheight: true, + name:"matrix", + x:"time", + y:"time", + x_step:1, + x_unit:"hour", + y_unit:"day", + y_step:1, + x_start:0, + x_size:24, + y_start:0, + y_size: 7, + render:"cell", + dx:200, + dy:50, + event_dy: scheduler.xy.bar_height-5, + event_min_dy: scheduler.xy.bar_height-5, + resize_events: true, + fit_events: true, + show_unassigned: false, + second_scale: false, + round_position: false, + _logic: function(render_name, y_unit, timeline) { + var res = {}; + if(scheduler.checkEvent("onBeforeSectionRender")) { + res = scheduler.callEvent("onBeforeSectionRender", [render_name, y_unit, timeline]); + } + return res; + } + }); + obj._original_x_start = obj.x_start; + + //first and last hours are applied only to day based timeline + if (obj.x_unit != "day") obj.first_hour = obj.last_hour = 0; + //correction for first and last hour + obj._start_correction = obj.first_hour?obj.first_hour*60*60*1000:0; + obj._end_correction = obj.last_hour?(24-obj.last_hour)*60*60*1000:0; + + if (scheduler.checkEvent("onTimelineCreated")) { + scheduler.callEvent("onTimelineCreated", [obj]); + } + + var old = scheduler.render_data; + scheduler.render_data = function(evs, mode) { + if (this._mode == obj.name) { + //repaint single event, precision is not necessary + if (mode && !obj.show_unassigned && obj.render != "cell") { + for (var i = 0; i < evs.length; i++) { + this.clear_event(evs[i]); + this.render_timeline_event.call(this.matrix[this._mode], evs[i], true); + } + } else { + scheduler._renderMatrix.call(obj, true, true); + } + } else + return old.apply(this, arguments); + }; + + scheduler.matrix[obj.name]=obj; + scheduler.templates[obj.name+"_cell_value"] = function(ar){ return ar?ar.length:""; }; + scheduler.templates[obj.name+"_cell_class"] = function(arr){ return ""; }; + scheduler.templates[obj.name+"_scalex_class"] = function(date){ return ""; }; + scheduler.templates[obj.name+"_second_scalex_class"] = function(date){ return ""; }; + + scheduler.templates[obj.name+"_scaley_class"] = function(section_id, section_label, section_options){ return ""; }; + scheduler.templates[obj.name+"_scale_label"] = function(section_id, section_label, section_options){ return section_label; }; + + scheduler.templates[obj.name+"_tooltip"] = function(a,b,e){ return e.text; }; + scheduler.templates[obj.name+"_date"] = function(datea, dateb){ + if ( (datea.getDay()==dateb.getDay() && dateb-datea < (24*60*60*1000)) || + +datea == +scheduler.date.date_part(new Date(dateb)) || + (+scheduler.date.add(datea, 1, "day") == +dateb && dateb.getHours() === 0 && dateb.getMinutes() === 0) ) + return scheduler.templates.day_date(datea); + if ( (datea.getDay() != dateb.getDay() && dateb-datea < (24*60*60*1000)) ) { + return scheduler.templates.day_date(datea)+" – "+scheduler.templates.day_date(dateb); + } + return scheduler.templates.week_date(datea, dateb); + }; + + scheduler.templates[obj.name+"_scale_date"] = scheduler.date.date_to_str(obj.x_date||scheduler.config.hour_date); + scheduler.templates[obj.name+"_second_scale_date"] = scheduler.date.date_to_str((obj.second_scale && obj.second_scale.x_date)?obj.second_scale.x_date:scheduler.config.hour_date); + + scheduler.date["add_" + obj.name] = function(date, step, c) { + var resulting_date = scheduler.date.add(date, (obj.x_length || obj.x_size) * step * obj.x_step, obj.x_unit); + if (obj.x_unit == "minute" || obj.x_unit == "hour") { + var size = (obj.x_length || obj.x_size); + var converted_step = (obj.x_unit == "hour") ? obj.x_step*60 : obj.x_step; + if((converted_step * size) % (24 * 60)){ + //if scroll hours within the day + if ( +scheduler.date.date_part(new Date(date)) == +scheduler.date.date_part(new Date(resulting_date )) ) { + obj.x_start += step*size; + } else { + // total steps starting from 0 + var total_steps = ( (24 * 60) / (size * converted_step) ) - 1; + var steps_offset = Math.round(total_steps * size); + + if (step > 0) { + obj.x_start = obj.x_start - steps_offset; + } else { + obj.x_start = steps_offset + obj.x_start; + } + } + } + } + return resulting_date; + }; + scheduler.date[obj.name+"_start"] = function(date) { + var func = scheduler.date[obj.x_unit+"_start"] || scheduler.date.day_start; + var start_date = func.call(scheduler.date, date); + start_date = scheduler.date.add(start_date, obj.x_step*obj.x_start, obj.x_unit); + return start_date; + }; + + + scheduler.callEvent("onOptionsLoad",[obj]); + + //init custom wrappers + scheduler[obj.name+"_view"]=function(){ + scheduler._renderMatrix.apply(obj, arguments); + }; + + //enable drag for non-cell modes + var temp_date = new Date(); + var step_diff = (scheduler.date.add(temp_date, obj.x_step, obj.x_unit).valueOf() - temp_date.valueOf()); // "minute" + step in ms + scheduler["mouse_"+obj.name]=function(pos){ //mouse_coord handler + //get event object + var ev = this._drag_event; + if (this._drag_id){ + ev = this.getEvent(this._drag_id); + this._drag_event._dhx_changed = true; + } + + pos.x-=obj.dx; + var summ = 0, xind = 0; + var ratio, + column_width; + for (xind; xind <= this._cols.length-1; xind++) { + + column_width = this._cols[xind]; + summ += column_width; + if (summ>pos.x){ //index of section + ratio = (pos.x-(summ-column_width))/column_width; + ratio = (ratio < 0) ? 0 : ratio; + break; + } + } + + if(obj.round_position){ + // in case of click, mouse position will be always rounded to start date of the cell + // when dragging - position can be rounded to the start date of the next column, in order to improve the usability + // edge = 1 - always return start date of current cell + // 0.5 - round to next cell if mouse in the right half of cell + var edge = 1; + if(scheduler.getState().drag_mode && scheduler.getState().drag_mode != "move"){ + edge = 0.5;//rounding for resize + } + if(ratio >= edge){ + xind++; + } + ratio = 0; + } + + //border cases + if (xind === 0 && this._ignores[0]) { + xind = 1; ratio = 0; + while (this._ignores[xind]) xind++; + } else if ( xind == this._cols.length && this._ignores[xind-1]) { + xind = this._cols.length-1; ratio = 0; + while (this._ignores[xind]) xind--; + xind++; + } + + + pos.x = 0; + pos.force_redraw = true; + pos.custom = true; + + var end_date; + // if our event is at the end of the view + if(xind >= obj._trace_x.length) { + end_date = scheduler.date.add(obj._trace_x[obj._trace_x.length-1], obj.x_step, obj.x_unit); + if (obj._end_correction) + end_date = new Date(end_date-obj._end_correction); + } else { + var timestamp_diff = ratio * column_width * obj._step + obj._start_correction; + end_date = new Date(+obj._trace_x[xind]+timestamp_diff); + } + + // as we can simply be calling _locate_cell_timeline + if (this._drag_mode == "move" && this._drag_id && this._drag_event) { + var ev = this.getEvent(this._drag_id); + var drag_event = this._drag_event; + + pos._ignores = (this._ignores_detected || obj._start_correction || obj._end_correction); + if (!drag_event._move_delta) { + drag_event._move_delta = (ev.start_date-end_date)/60000; + if (this.config.preserve_length && pos._ignores){ + drag_event._move_delta = this._get_real_event_length(ev.start_date,end_date, obj); + drag_event._event_length = this._get_real_event_length(ev.start_date,ev.end_date, obj); + } + } + + + + + //preserve visible size of event + if (this.config.preserve_length && pos._ignores){ + var ev_length = drag_event._event_length;//this._get_real_event_length(ev.start_date, ev.end_date, obj); + var current_back_shift = this._get_fictional_event_length(end_date, drag_event._move_delta, obj, true); + end_date = new Date(end_date - current_back_shift); + } else { + // converting basically to start_date + end_date = scheduler.date.add(end_date, drag_event._move_delta, "minute"); + } + } + + if (this._drag_mode == "resize" && ev){ + if(this._drag_from_start && +end_date> +ev.end_date){ + this._drag_from_start = false; + }else if(!this._drag_from_start && +end_date < +ev.start_date){ + this._drag_from_start = true; + } + pos.resize_from_start = this._drag_from_start; + } + + if (obj.round_position) { + switch(this._drag_mode) { + case "move": + if (!this.config.preserve_length){ + end_date = get_rounded_date.call(obj, end_date, false); + // to preserve original start and end dates + if(obj.x_unit == "day")//only make sense for whole-day cells + pos.custom = false; + } + break; + case "resize": + if(this._drag_event){ + // will save and use resize position only once + if (this._drag_event._resize_from_start === null || this._drag_event._resize_from_start === undefined) { + this._drag_event._resize_from_start = pos.resize_from_start; + } + pos.resize_from_start = this._drag_event._resize_from_start; + end_date = get_rounded_date.call(obj, end_date, !this._drag_event._resize_from_start); + } + break; + } + } + + this._resolve_timeline_section(obj, pos); + if(pos.section){ + // update draggable event with current section + this._update_timeline_section({pos:pos, event:this.getEvent(this._drag_id), view:obj}); + } + pos.y = Math.round((end_date-this._min_date)/(1000*60*this.config.time_step)); + pos.shift = this.config.time_step; //step_diff; + + + return pos; + }; +}; + +scheduler._get_timeline_event_height = function(ev, config){ + var section = ev[config.y_property]; // section id + var event_height = config.event_dy; + if (config.event_dy == "full") { + if (config.section_autoheight) { + event_height = config._section_height[section] - 6; + } else { + event_height = config.dy - 3; + } + } + + if (config.resize_events) { + event_height = Math.max(Math.floor(event_height / ev._count), config.event_min_dy); + } + return event_height; +}; +scheduler._get_timeline_event_y = function(order, event_height){ + var sorder = order; + var y = 2+sorder*event_height+(sorder?(sorder*2):0); // original top + number_of_events * event_dy + default event top/bottom borders + if (scheduler.config.cascade_event_display) { + y =2+sorder*scheduler.config.cascade_event_margin+(sorder?(sorder*2):0); + } + return y; +}; + +scheduler.render_timeline_event = function(ev, attach){ + var section = ev[this.y_property]; // section id + if (!section) + return ""; // as we may await html + + var sorder = ev._sorder; + + var x_start = _getX(ev, false, this); + var x_end = _getX(ev, true, this); + + var event_height = scheduler._get_timeline_event_height(ev, this); + + var hb = event_height - 2;// takes into account css sizes (border/padding) + if (!ev._inner && this.event_dy == "full") { + hb=(hb+2)*(ev._count-sorder)-2; + } + + var y = scheduler._get_timeline_event_y(ev._sorder, event_height); + + var section_height = event_height+y+2; + if(!this._events_height[section] || (this._events_height[section] < section_height)){ + this._events_height[section] = section_height; + } + + var cs = scheduler.templates.event_class(ev.start_date,ev.end_date,ev); + cs = "dhx_cal_event_line "+(cs||""); + + var bg_color = (ev.color?("background:"+ev.color+";"):""); + var color = (ev.textColor?("color:"+ev.textColor+";"):""); + var text = scheduler.templates.event_bar_text(ev.start_date,ev.end_date,ev); + + var html='<div event_id="'+ev.id+'" class="'+cs+'" style="'+bg_color+''+color+'position:absolute; top:'+y+'px; height: '+hb+'px; left:'+x_start+'px; width:'+Math.max(0,x_end-x_start)+'px;'+(ev._text_style||"")+'">'; + if (scheduler.config.drag_resize && !scheduler.config.readonly) { + var dhx_event_resize = 'dhx_event_resize'; + html += ("<div class='"+dhx_event_resize+" "+dhx_event_resize+"_start' style='height: "+hb+"px;'></div><div class='"+dhx_event_resize+" "+dhx_event_resize+"_end' style='height: "+hb+"px;'></div>"); + } + html += (text+'</div>'); + + if (!attach) + return html; + else { + var d = document.createElement("DIV"); + d.innerHTML = html; + var ind = this.order[section]; + var parent = scheduler._els["dhx_cal_data"][0].firstChild.rows[ind].cells[1].firstChild; + + scheduler._rendered.push(d.firstChild); + parent.appendChild(d.firstChild); + } +}; +function trace_events(){ + //minimize event set + var evs = scheduler.get_visible_events(); + var matrix =[]; + for (var i=0; i < this.y_unit.length; i++) + matrix[i]=[]; + + //next code defines row for undefined key + //most possible it is an artifact of incorrect configuration + if (!matrix[y]) + matrix[y]=[]; + + for (var i=0; i < evs.length; i++) { + var y = this.order[evs[i][this.y_property]]; + var x = 0; + while (this._trace_x[x+1] && evs[i].start_date>=this._trace_x[x+1]) x++; + while (this._trace_x[x] && evs[i].end_date>this._trace_x[x]) { + if (!matrix[y][x]) matrix[y][x]=[]; + matrix[y][x].push(evs[i]); + x++; + } + } + return matrix; +} +// function used to get X (both start and end) coordinates for timeline bar view +function _getX(ev, isEndPoint, config) { + var x = 0; + var step = config._step; + var round_position = config.round_position; + + var column_offset = 0; + var date = (isEndPoint) ? ev.end_date : ev.start_date; + + if(date.valueOf()>scheduler._max_date.valueOf()) + date = scheduler._max_date; + var delta = date - scheduler._min_date_timeline; + + if (delta > 0){ + var index = scheduler._get_date_index(config, date); + if (scheduler._ignores[index]) + round_position=true; + + for (var i = 0; i < index; i++) { + x += scheduler._cols[i]; + } + + var column_date = scheduler.date.add(scheduler._min_date_timeline, scheduler.matrix[scheduler._mode].x_step*index, scheduler.matrix[scheduler._mode].x_unit); + if (!round_position) { + delta = date - column_date; + if (config.first_hour || config.last_hour){ + delta = delta - config._start_correction; + if (delta < 0) delta = 0; + column_offset = Math.round(delta/step); + if (column_offset > scheduler._cols[index]) + column_offset = scheduler._cols[index]; + } else { + column_offset = Math.round(delta/step); + } + } else { + if (+date > +column_date && isEndPoint) { + column_offset = scheduler._cols[index]; + } + } + } + if (isEndPoint) { + // special handling for "round" dates which match columns and usual ones + if (delta !== 0 && !round_position) { + x += column_offset-12; + } else { + x += column_offset-14; + } + } else { + x += column_offset+1; + } + return x; +} +function get_rounded_date(date, isEndDate) { + var index = scheduler._get_date_index(this, date); + var rounded_date = this._trace_x[index]; + if (isEndDate && (+date != +this._trace_x[index])) { + rounded_date = (this._trace_x[index+1]) ? this._trace_x[index+1] : scheduler.date.add(this._trace_x[index], this.x_step, this.x_unit); + } + return new Date(rounded_date); +} +function get_events_html(evs) { + var html = ""; + if (evs && this.render != "cell"){ + evs.sort(this.sort || function(a,b){ + if(a.start_date.valueOf()==b.start_date.valueOf()) + return a.id>b.id?1:-1; + return a.start_date>b.start_date?1:-1; + }); + var stack=[]; + var evs_length = evs.length; + // prepare events for render + for (var j=0; j<evs_length; j++){ + var ev = evs[j]; + ev._inner = false; + + var ev_start_date = (this.round_position) ? get_rounded_date.apply(this, [ev.start_date, false]) : ev.start_date; + var ev_end_date = (this.round_position) ? get_rounded_date.apply(this, [ev.end_date, true]) : ev.end_date; + + // cutting stack from the last -> first event side + while (stack.length) { + var stack_ev = stack[stack.length-1]; + if (stack_ev.end_date.valueOf() <= ev_start_date.valueOf()) { + stack.splice(stack.length-1,1); + } else { + break; + } + } + + // cutting stack from the first -> last event side + var sorderSet = false; + for(var p=0; p<stack.length; p++){ + var t_ev = stack[p]; + if(t_ev.end_date.valueOf() <= ev_start_date.valueOf()){ + sorderSet = true; + ev._sorder=t_ev._sorder; + stack.splice(p,1); + ev._inner=true; + break; + } + } + + + if (stack.length) + stack[stack.length-1]._inner=true; + + + if (!sorderSet) { + if (stack.length) { + if (stack.length <= stack[stack.length - 1]._sorder) { + if (!stack[stack.length - 1]._sorder) + ev._sorder = 0; + else + for (var h = 0; h < stack.length; h++) { + var _is_sorder = false; + for (var t = 0; t < stack.length; t++) { + if (stack[t]._sorder == h) { + _is_sorder = true; + break; + } + } + if (!_is_sorder) { + ev._sorder = h; + break; + } + } + ev._inner = true; + } + else { + var _max_sorder = stack[0]._sorder; + for (var w = 1; w < stack.length; w++) + if (stack[w]._sorder > _max_sorder) + _max_sorder = stack[w]._sorder; + ev._sorder = _max_sorder + 1; + ev._inner = false; + } + } + else + ev._sorder = 0; + } + + stack.push(ev); + + if (stack.length>(stack.max_count||0)) { + stack.max_count=stack.length; + ev._count=stack.length; + } + else { + ev._count=(ev._count)?ev._count:1; + } + } + // fix _count for every event + for (var m=0; m < evs.length; m++) { + evs[m]._count = stack.max_count; + } + // render events + for (var v=0; v<evs_length; v++) { + html+=scheduler.render_timeline_event.call(this, evs[v], false); + } + } + return html; +} + + +function y_scale(d) { + var html = "<table style='table-layout:fixed;' cellspacing='0' cellpadding='0'>"; + var evs=[]; + if(scheduler._load_mode) + scheduler._load(); + if (this.render == "cell") + evs = trace_events.call(this); + else { + var tevs = scheduler.get_visible_events(); + var order = this.order; + + for (var j = 0; j < tevs.length; j++) { + var tev = tevs[j]; + var tev_section = tev[this.y_property]; + var index = this.order[ tev_section ]; + + if (this.show_unassigned && !tev_section) { + for (var key in order) { + if (order.hasOwnProperty(key)) { + index = order[key]; + if (!evs[index]) evs[index] = []; + var clone = scheduler._lame_copy({}, tev); + clone[this.y_property] = key; + evs[index].push(clone); + } + } + } else { + // required as we could have index of not displayed section or "undefined" + if (!evs[index]) evs[index] = []; + evs[index].push(tev); + } + } + } + + var summ = 0; + for (var i=0; i < scheduler._cols.length; i++) + summ+=scheduler._cols[i]; + + var step = new Date(); + var realcount = scheduler._cols.length-scheduler._ignores_detected; + step = ((scheduler.date.add(step, this.x_step*realcount, this.x_unit)-step)-(this._start_correction + this._end_correction)*realcount)/summ; + this._step = step; + this._summ = summ; + + var heights = scheduler._colsS.heights=[]; + + this._events_height = {}; + this._section_height = {}; + for (var i=0; i<this.y_unit.length; i++){ + + var stats = this._logic(this.render, this.y_unit[i], this); // obj with custom style + + scheduler._merge(stats, { + height: this.dy + }); + + //autosize height, if we have a free space + if(this.section_autoheight) { + if (this.y_unit.length * stats.height < d.offsetHeight) { + stats.height = Math.max(stats.height, Math.floor((d.offsetHeight - 1) / this.y_unit.length)); + } + this._section_height[this.y_unit[i].key] = stats.height; + } + + scheduler._merge(stats, { + //section 1 + tr_className: "", + style_height: "height:"+stats.height+"px;", + style_width: "width:"+(this.dx-1)+"px;", + td_className: "dhx_matrix_scell"+((scheduler.templates[this.name+"_scaley_class"](this.y_unit[i].key, this.y_unit[i].label, this.y_unit[i]))?" "+scheduler.templates[this.name+"_scaley_class"](this.y_unit[i].key, this.y_unit[i].label, this.y_unit[i]):''), + td_content: scheduler.templates[this.name+'_scale_label'](this.y_unit[i].key, this.y_unit[i].label, this.y_unit[i]), + //section 2 + summ_width: "width:"+summ+"px;", + //section 3 + table_className: '' + }); + + // generating events html in a temporary file, calculating their height + var events_html = get_events_html.call(this, evs[i]); + + if(this.fit_events){ + var rendered_height = this._events_height[this.y_unit[i].key]||0; + stats.height = (rendered_height>stats.height)?rendered_height:stats.height; + stats.style_height = "height:"+stats.height+"px;"; + this._section_height[this.y_unit[i].key] = stats.height; + } + + // section 1 + html+="<tr class='"+stats.tr_className+"' style='"+stats.style_height+"'><td class='"+stats.td_className+"' style='"+stats.style_width+" height:"+(stats.height-1)+"px;'>"+stats.td_content+"</td>"; + + if (this.render == "cell"){ + for (var j=0; j < scheduler._cols.length; j++) { + if (scheduler._ignores[j]) + html+="<td></td>"; + else + html+="<td class='dhx_matrix_cell "+scheduler.templates[this.name+"_cell_class"](evs[i][j],this._trace_x[j],this.y_unit[i])+"' style='width:"+(scheduler._cols[j]-1)+"px'><div style='width:"+(scheduler._cols[j]-1)+"px'>"+scheduler.templates[this.name+"_cell_value"](evs[i][j],this._trace_x[j],this.y_unit[i])+"</div></td>"; + } + } else { + //section 2 + html+="<td><div style='"+stats.summ_width+" "+stats.style_height+" position:relative;' class='dhx_matrix_line'>"; + + // adding events + html += events_html; + + //section 3 + html+="<table class='"+stats.table_className+"' cellpadding='0' cellspacing='0' style='"+stats.summ_width+" "+stats.style_height+"' >"; + for (var j=0; j < scheduler._cols.length; j++){ + if (scheduler._ignores[j]) + html+="<td></td>"; + else + html+="<td class='dhx_matrix_cell "+scheduler.templates[this.name+"_cell_class"](evs[i],this._trace_x[j],this.y_unit[i])+"' style='width:"+(scheduler._cols[j]-1)+"px'><div style='width:"+(scheduler._cols[j]-1)+"px'></div></td>"; + } + html+="</table>"; + html+="</div></td>"; + } + html+="</tr>"; + } + html += "</table>"; + this._matrix = evs; + //d.scrollTop = 0; //fix flickering in FF; disabled as it was impossible to create dnd event if scroll was used (window jumped to the top) + d.innerHTML = html; + + scheduler._rendered = []; + var divs = scheduler._obj.getElementsByTagName("DIV"); + for (var i=0; i < divs.length; i++) + if (divs[i].getAttribute("event_id")) + scheduler._rendered.push(divs[i]); + + this._scales = {}; + for (var i=0; i < d.firstChild.rows.length; i++) { + heights.push(d.firstChild.rows[i].offsetHeight); + var unit_key = this.y_unit[i].key; + var scale = this._scales[unit_key] = (scheduler._isRender('cell')) ? d.firstChild.rows[i] : d.firstChild.rows[i].childNodes[1].getElementsByTagName('div')[0]; + scheduler.callEvent("onScaleAdd", [scale, unit_key]); + } +} +function x_scale(h){ + var current_sh = scheduler.xy.scale_height; + var original_sh = this._header_resized||scheduler.xy.scale_height; + scheduler._cols=[]; //store for data section, each column width + scheduler._colsS={height:0}; // heights of the y sections + this._trace_x =[]; // list of dates per cells + var summ = scheduler._x - this.dx - scheduler.xy.scroll_width; //border delta, whole width + var left = [this.dx]; // left margins, initial left margin + var header = scheduler._els['dhx_cal_header'][0]; + header.style.width = (left[0]+summ)+'px'; + + scheduler._min_date_timeline = scheduler._min_date; + + var preserve = scheduler.config.preserve_scale_length; + var start = scheduler._min_date; + scheduler._process_ignores(start, this.x_size, this.x_unit, this.x_step, preserve); + + var size = this.x_size + (preserve ? scheduler._ignores_detected : 0); + if (size != this.x_size) + scheduler._max_date = scheduler.date.add(scheduler._min_date, size*this.x_step, this.x_unit); + + var realcount = size - scheduler._ignores_detected; + for (var k=0; k<size; k++){ + // dates calculation + this._trace_x[k]=new Date(start); + start = scheduler.date.add(start, this.x_step, this.x_unit); + + // position calculation + if (scheduler._ignores[k]){ + scheduler._cols[k]=0; + realcount++; + } else { + scheduler._cols[k]=Math.floor(summ/(realcount-k)); + } + + summ -= scheduler._cols[k]; + left[k+1] = left[k] + scheduler._cols[k]; + } + h.innerHTML = "<div></div>"; + + if(this.second_scale){ + // additional calculations + var mode = this.second_scale.x_unit; + var control_dates = [this._trace_x[0]]; // first control date + var second_cols = []; // each column width of the secondary row + var second_left = [this.dx, this.dx]; // left margins of the secondary row + var t_index = 0; // temp index + for (var l = 0; l < this._trace_x.length; l++) { + var date = this._trace_x[l]; + var res = is_new_interval(mode, date, control_dates[t_index]); + + if(res) { // new interval + ++t_index; // starting new interval + control_dates[t_index] = date; // updating control date as we moved to the new interval + second_left[t_index+1] = second_left[t_index]; + } + var t = t_index+1; + second_cols[t_index] = scheduler._cols[l] + (second_cols[t_index]||0); + second_left[t] += scheduler._cols[l]; + } + + h.innerHTML = "<div></div><div></div>"; + var top = h.firstChild; + top.style.height = (original_sh)+'px'; // actually bottom header takes 21px + var bottom = h.lastChild; + bottom.style.position = "relative"; + + for (var m = 0; m < control_dates.length; m++) { + var tdate = control_dates[m]; + var scs = scheduler.templates[this.name+"_second_scalex_class"](tdate); + var head=document.createElement("DIV"); head.className="dhx_scale_bar dhx_second_scale_bar"+((scs)?(" "+scs):""); + scheduler.set_xy(head,second_cols[m]-1,original_sh-3,second_left[m],0); //-1 for border, -3 = -2 padding -1 border bottom + head.innerHTML = scheduler.templates[this.name+"_second_scale_date"](tdate); + top.appendChild(head); + } + } + + scheduler.xy.scale_height = original_sh; // fix for _render_x_header which uses current scale_height value + h = h.lastChild; // h - original scale + for (var i=0; i<this._trace_x.length; i++){ + if (scheduler._ignores[i]) + continue; + + start = this._trace_x[i]; + scheduler._render_x_header(i, left[i], start, h); + var cs = scheduler.templates[this.name+"_scalex_class"](start); + if (cs) + h.lastChild.className += " "+cs; + } + scheduler.xy.scale_height = current_sh; // restoring current value + + var trace = this._trace_x; + h.onclick = function(e){ + var pos = locate_hcell(e); + if (pos) + scheduler.callEvent("onXScaleClick",[pos.x, trace[pos.x], e||event]); + }; + h.ondblclick = function(e){ + var pos = locate_hcell(e); + if (pos) + scheduler.callEvent("onXScaleDblClick",[pos.x, trace[pos.x], e||event]); + }; +} +function is_new_interval(mode, date, control_date){ // mode, date to check, control_date for which period should be checked + switch(mode) { + case "hour": + return ((date.getHours() != control_date.getHours()) || is_new_interval("day", date, control_date)); + case "day": + return !(date.getDate() == control_date.getDate() && date.getMonth() == control_date.getMonth() && date.getFullYear() == control_date.getFullYear()); + case "week": + return !(scheduler.date.getISOWeek(date) == scheduler.date.getISOWeek(control_date) && date.getFullYear() == control_date.getFullYear()); + case "month": + return !(date.getMonth() == control_date.getMonth() && date.getFullYear() == control_date.getFullYear()); + case "year": + return !(date.getFullYear() == control_date.getFullYear()); + default: + return false; // same interval + } +} +function set_full_view(mode){ + if (mode){ + scheduler.set_sizes(); + scheduler._init_matrix_tooltip(); + + //we need to have day-rounded scales for navigation + //in same time, during rendering scales may be shifted + var temp = scheduler._min_date; + x_scale.call(this,scheduler._els["dhx_cal_header"][0]); + y_scale.call(this,scheduler._els["dhx_cal_data"][0]); + scheduler._min_date = temp; + scheduler._els["dhx_cal_date"][0].innerHTML=scheduler.templates[this.name+"_date"](scheduler._min_date, scheduler._max_date); + if (scheduler._mark_now) { + scheduler._mark_now(); + } + } + + // hide tooltip if it is displayed + hideToolTip(); +} + + +function hideToolTip(){ + if (scheduler._tooltip){ + scheduler._tooltip.style.display = "none"; + scheduler._tooltip.date = ""; + } +} +function showToolTip(obj,pos,offset){ + if (obj.render != "cell") return; + var mark = pos.x+"_"+pos.y; + var evs = obj._matrix[pos.y][pos.x]; + + if (!evs) return hideToolTip(); + + evs.sort(function(a,b){ return a.start_date>b.start_date?1:-1; }); + + if (scheduler._tooltip){ + if (scheduler._tooltip.date == mark) return; + scheduler._tooltip.innerHTML=""; + } else { + var t = scheduler._tooltip = document.createElement("DIV"); + t.className = "dhx_year_tooltip"; + document.body.appendChild(t); + t.onclick = scheduler._click.dhx_cal_data; + } + + var html = ""; + + for (var i=0; i<evs.length; i++){ + var bg_color = (evs[i].color?("background-color:"+evs[i].color+";"):""); + var color = (evs[i].textColor?("color:"+evs[i].textColor+";"):""); + html+="<div class='dhx_tooltip_line' event_id='"+evs[i].id+"' style='"+bg_color+""+color+"'>"; + html+="<div class='dhx_tooltip_date'>"+(evs[i]._timed?scheduler.templates.event_date(evs[i].start_date):"")+"</div>"; + html+="<div class='dhx_event_icon icon_details'> </div>"; + html+=scheduler.templates[obj.name+"_tooltip"](evs[i].start_date, evs[i].end_date,evs[i])+"</div>"; + } + + scheduler._tooltip.style.display=""; + scheduler._tooltip.style.top = "0px"; + + if (document.body.offsetWidth-offset.left-scheduler._tooltip.offsetWidth < 0) + scheduler._tooltip.style.left = offset.left-scheduler._tooltip.offsetWidth+"px"; + else + scheduler._tooltip.style.left = offset.left+pos.src.offsetWidth+"px"; + + scheduler._tooltip.date = mark; + scheduler._tooltip.innerHTML = html; + + if (document.body.offsetHeight-offset.top-scheduler._tooltip.offsetHeight < 0) + scheduler._tooltip.style.top= offset.top-scheduler._tooltip.offsetHeight+pos.src.offsetHeight+"px"; + else + scheduler._tooltip.style.top= offset.top+"px"; +} + +scheduler._matrix_tooltip_handler = function(e){ + var obj = scheduler.matrix[scheduler._mode]; + if (!obj || obj.render != "cell") + return; + if (obj){ + var pos = scheduler._locate_cell_timeline(e); + var e = e || event; + var src = e.target||e.srcElement; + if (pos) + return showToolTip(obj,pos,getOffset(pos.src)); + } + hideToolTip(); +}; +scheduler._init_matrix_tooltip = function() { + scheduler._detachDomEvent(scheduler._els["dhx_cal_data"][0], "mouseover", scheduler._matrix_tooltip_handler); + dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "mouseover", scheduler._matrix_tooltip_handler); +}; + +scheduler._renderMatrix = function(mode, refresh) { + if (!refresh) + scheduler._els['dhx_cal_data'][0].scrollTop=0; + + scheduler._min_date = scheduler.date[this.name+"_start"](scheduler._date); + scheduler._max_date = scheduler.date.add(scheduler._min_date, this.x_size*this.x_step, this.x_unit); + scheduler._table_view = true; + if (this.second_scale) { + if (mode && !this._header_resized) { + this._header_resized = scheduler.xy.scale_height; + scheduler.xy.scale_height *= 2; + scheduler._els['dhx_cal_header'][0].className += " dhx_second_cal_header"; + } + if (!mode && this._header_resized) { + scheduler.xy.scale_height /= 2; + this._header_resized = false; + var header = scheduler._els['dhx_cal_header'][0]; + header.className = header.className.replace(/ dhx_second_cal_header/gi,""); + } + } + set_full_view.call(this,mode); +}; + +function html_index(el) { + var p = el.parentNode.childNodes; + for (var i=0; i < p.length; i++) + if (p[i] == el) return i; + return -1; +} +function locate_hcell(e){ + e = e||event; + var trg = e.target?e.target:e.srcElement; + while (trg && trg.tagName != "DIV") + trg=trg.parentNode; + if (trg && trg.tagName == "DIV"){ + var cs = trg.className.split(" ")[0]; + if (cs == "dhx_scale_bar") + return { x:html_index(trg), y:-1, src:trg, scale:true }; + } +} +scheduler._locate_cell_timeline = function(e){ + e = e||event; + var trg = e.target?e.target:e.srcElement; + + var res = {}; + var view = scheduler.matrix[scheduler._mode]; + var pos = scheduler.getActionData(e); + + for (var xind = 0; xind < view._trace_x.length-1; xind++) { + // | 8:00, 8:30 | 8:15 should be checked against 8:30 + // clicking at the most left part of the cell, say 8:30 should create event in that cell, not previous one + if (+pos.date < view._trace_x[xind+1]) + break; + } + + res.x = xind; + res.y = view.order[pos.section]; + var diff = scheduler._isRender('cell') ? 1 : 0; + res.src = view._scales[pos.section] ? view._scales[pos.section].getElementsByTagName('td')[xind+diff] : null; + + var isScale = false; + while (res.x === 0 && trg.className != "dhx_cal_data" && trg.parentNode) { + if (trg.className.split(" ")[0] == "dhx_matrix_scell") { + isScale = true; + break; + } else { + trg = trg.parentNode; + } + } + if (isScale) { // Y scale + res.x = -1; + res.src = trg; + res.scale = true; + } + + return res; +}; + +var old_click = scheduler._click.dhx_cal_data; +scheduler._click.dhx_marked_timespan = scheduler._click.dhx_cal_data = function(e){ + var ret = old_click.apply(this,arguments); + var obj = scheduler.matrix[scheduler._mode]; + if (obj){ + var pos = scheduler._locate_cell_timeline(e); + if (pos){ + if (pos.scale) + scheduler.callEvent("onYScaleClick",[pos.y, obj.y_unit[pos.y], e||event]); + else + scheduler.callEvent("onCellClick",[pos.x, pos.y, obj._trace_x[pos.x], (((obj._matrix[pos.y]||{})[pos.x])||[]), e||event]); + } + } + return ret; +}; + +scheduler.dblclick_dhx_matrix_cell = function(e){ + var obj = scheduler.matrix[scheduler._mode]; + if (obj){ + var pos = scheduler._locate_cell_timeline(e); + if (pos){ + if (pos.scale) + scheduler.callEvent("onYScaleDblClick",[pos.y, obj.y_unit[pos.y], e||event]); + else + scheduler.callEvent("onCellDblClick",[pos.x, pos.y, obj._trace_x[pos.x], (((obj._matrix[pos.y]||{})[pos.x])||[]), e||event]); + } + } +}; + +var old_dblclick_marked_timespan = scheduler.dblclick_dhx_marked_timespan || function(){}; +scheduler.dblclick_dhx_marked_timespan = function(e){ + var obj = scheduler.matrix[scheduler._mode]; + if (obj) + return scheduler.dblclick_dhx_matrix_cell(e); + else + return old_dblclick_marked_timespan.apply(this,arguments); +}; + +scheduler.dblclick_dhx_matrix_scell = function(e){ + return scheduler.dblclick_dhx_matrix_cell(e); +}; + +scheduler._isRender = function(mode){ + return (scheduler.matrix[scheduler._mode] && scheduler.matrix[scheduler._mode].render == mode); +}; + +scheduler.attachEvent("onCellDblClick", function (x, y, a, b, event){ + if (this.config.readonly|| (event.type == "dblclick" && !this.config.dblclick_create)) return; + + var obj = scheduler.matrix[scheduler._mode]; + var event_options = {}; + event_options.start_date = obj._trace_x[x]; + event_options.end_date = (obj._trace_x[x+1]) ? obj._trace_x[x+1] : scheduler.date.add(obj._trace_x[x], obj.x_step, obj.x_unit); + + if (obj._start_correction) + event_options.start_date = new Date(event_options.start_date*1 + obj._start_correction); + if (obj._end_correction) + event_options.end_date = new Date(event_options.end_date - obj._end_correction); + + event_options[obj.y_property] = obj.y_unit[y].key; + scheduler.addEventNow(event_options, null, event); +}); + +scheduler.attachEvent("onBeforeDrag", function (event_id, mode, native_event_object){ + return !scheduler._isRender("cell"); +}); +scheduler.attachEvent("onEventChanged", function(id, ev) { + ev._timed = this.isOneDayEvent(ev); +}); +var old_render_marked_timespan = scheduler._render_marked_timespan; +scheduler._render_marked_timespan = function(options, area, unit_id, min_date, max_date) { + if (!scheduler.config.display_marked_timespans) + return []; + + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + if (scheduler._isRender('cell')) + return; + + var view_opts = scheduler._lame_copy({}, scheduler.matrix[scheduler._mode]); + //timespans must always use actual position, not rounded + view_opts.round_position = false; + var blocks = []; + + var units = []; + var areas = []; + var section = options.sections ? (options.sections.units || options.sections.timeline) : null; + if (!unit_id) { // should draw for every unit... + var order = view_opts.order; + if (section) { // ...or for only section if mentioned in configuration of timespan + if (order.hasOwnProperty(section)) { + units.push(section); + areas.push(view_opts._scales[section]); + } + }else{ + for (var key in order) { + if (order.hasOwnProperty(key)) { + units.push(key); + areas.push(view_opts._scales[key]); + } + } + } + } else { + areas = [area]; + units = [unit_id]; + } + + var min_date = min_date ? new Date(min_date) : scheduler._min_date; + var max_date = max_date ? new Date(max_date) : scheduler._max_date; + var dates = []; + + if (options.days > 6) { + var specific_date = new Date(options.days); + if (scheduler.date.date_part(new Date(min_date)) <= +specific_date && +max_date >= +specific_date) + dates.push(specific_date); + } else { + dates.push.apply(dates, scheduler._get_dates_by_index(options.days)); + } + + var zones = options.zones; + var css_classes = scheduler._get_css_classes_by_config(options); + + for (var j=0; j<units.length; j++) { + area = areas[j]; + unit_id = units[j]; + + for (var i=0; i<dates.length; i++) { + var date = dates[i]; + for (var k=0; k<zones.length; k += 2) { + var zone_start = zones[k]; + var zone_end = zones[k+1]; + var start_date = new Date(+date + zone_start*60*1000); + var end_date = new Date(+date + zone_end*60*1000); + + if (!(min_date < end_date && max_date > start_date)) + continue; + + var block = scheduler._get_block_by_config(options); + block.className = css_classes; + + var start_pos = _getX({start_date: start_date}, false, view_opts)-1; + var end_pos = _getX({start_date: end_date}, false, view_opts)-1; + var width = Math.max(1, end_pos - start_pos - 1); + var height = view_opts._section_height[unit_id]-1; + + block.style.cssText = "height: "+height+"px; left: "+start_pos+"px; width: "+width+"px; top: 0;"; + + area.insertBefore(block, area.firstChild); + blocks.push(block); + } + } + } + + return blocks; + + } else { + return old_render_marked_timespan.apply(scheduler, [options, area, unit_id]); + } +}; + +var old_append_mark_now = scheduler._append_mark_now; +scheduler._append_mark_now = function(day_index, now) { + if (scheduler.matrix && scheduler.matrix[scheduler._mode]) { + var n_date = scheduler._currentDate(); + var zone_start = scheduler._get_zone_minutes(n_date); + var options = { + days: +scheduler.date.date_part(n_date), + zones: [zone_start, zone_start+1], + css: "dhx_matrix_now_time", + type: "dhx_now_time" + }; + return scheduler._render_marked_timespan(options); + } else { + return old_append_mark_now.apply(scheduler, [day_index, now]); + } +}; + +scheduler.attachEvent("onScaleAdd", function(scale, unit_key) { + var timespans = scheduler._marked_timespans; + + if (timespans && scheduler.matrix && scheduler.matrix[scheduler._mode]) { + var mode = scheduler._mode; + + var min_date = scheduler._min_date; + var max_date = scheduler._max_date; + var global_data = timespans["global"]; + + for (var t_date = scheduler.date.date_part(new Date(min_date)); t_date < max_date; t_date = scheduler.date.add(t_date, 1, "day")) { + var day_value = +t_date; + var day_index = t_date.getDay(); + var r_configs = []; + + var day_types = global_data[day_value]||global_data[day_index]; + r_configs.push.apply(r_configs, scheduler._get_configs_to_render(day_types)); + + if (timespans[mode] && timespans[mode][unit_key]) { + var z_config = []; + var unit_types = scheduler._get_types_to_render(timespans[mode][unit_key][day_index], timespans[mode][unit_key][day_value]); + z_config.push.apply(z_config, scheduler._get_configs_to_render(unit_types)); + if(z_config.length) + r_configs = z_config; + } + + for (var i=0; i<r_configs.length; i++) { + var config = r_configs[i]; + var day = config.days; + if (day < 7) { + day = day_value; + //specify min/max timespan dates, otherwise it can be rendered multiple times in some configurations + scheduler._render_marked_timespan(config, scale, unit_key, t_date, scheduler.date.add(t_date, 1, "day")); + day = day_index; + } else { + scheduler._render_marked_timespan(config, scale, unit_key, t_date, scheduler.date.add(t_date, 1, "day")); + } + } + } + } +}); + +scheduler._resolve_timeline_section = function(view, pos){ + var yind = 0; + var summ = 0; + for (yind; yind < this._colsS.heights.length; yind++) { + summ += this._colsS.heights[yind]; + if (summ > pos.y) + break; + } + + if(!view.y_unit[yind]) { + yind=view.y_unit.length-1; + } + if(this._drag_event && !this._drag_event._orig_section){ + this._drag_event._orig_section = view.y_unit[yind].key; + } + + pos.fields = {}; + if (yind >= 0 && view.y_unit[yind]) { + pos.section = pos.fields[view.y_property] = view.y_unit[yind].key; + } +}; +scheduler._update_timeline_section = function(action){ + var view = action.view, + event = action.event, + pos = action.pos; + + if (event) { + if(event[view.y_property] != pos.section){ + var line_height = this._get_timeline_event_height(event, view); + event._sorder = this._get_dnd_order(event._sorder, line_height, view._section_height[pos.section]); + } + event[view.y_property] = pos.section; + } +}; +scheduler._get_date_index=function(config, date) { + var index = 0; + var trace_x = config._trace_x; + while (index < trace_x.length-1 && +date >= +trace_x[index+1]) { + index++; + } + return index; +}; + +scheduler.attachEvent("onBeforeTodayDisplayed", function() { + for(var i in scheduler.matrix){ + var obj = scheduler.matrix[i]; + obj.x_start = obj._original_x_start; + } + return true; +}); + +scheduler.attachEvent("onOptionsLoad",function(){ + for(var i in scheduler.matrix){ + var obj = scheduler.matrix[i]; + + obj.order = {}; + scheduler.callEvent('onOptionsLoadStart', []); + for(var i=0; i<obj.y_unit.length;i++) + obj.order[obj.y_unit[i].key]=i; + scheduler.callEvent('onOptionsLoadFinal', []); + if (scheduler._date && obj.name == scheduler._mode) + scheduler.setCurrentView(scheduler._date, scheduler._mode); + } +}); + +scheduler.attachEvent("onSchedulerResize",function(){ + if (scheduler.matrix[this._mode]){ + var obj = scheduler.matrix[this._mode]; + scheduler._renderMatrix.call(obj, true, true); + return false; + } + return true; +}); + +scheduler.attachEvent("onBeforeDrag",function(id, drag_mode, e){ + if(drag_mode == 'resize'){ + var trg = e.target || e.srcElement; + if((trg.className||"").indexOf("dhx_event_resize_end") < 0){ + scheduler._drag_from_start = true; + }else{ + scheduler._drag_from_start = false; + } + } + + return true; +}); + +}; +scheduler._temp_matrix_scope(); diff --git a/codebase/sources/ext/dhtmlxscheduler_timeline.js.map b/codebase/sources/ext/dhtmlxscheduler_timeline.js.map new file mode 100644 index 0000000..62bc255 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_timeline.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_timeline.js.map","sources":["dhtmlxscheduler_timeline.js"],"names":["scheduler","_temp_matrix_scope","trace_events","evs","get_visible_events","matrix","i","this","y_unit","length","y","order","y_property","x","_trace_x","start_date","end_date","push","_getX","ev","isEndPoint","config","step","_step","round_position","column_offset","date","valueOf","_max_date","delta","_min_date_timeline","index","_get_date_index","_ignores","_cols","column_date","add","_mode","x_step","x_unit","first_hour","last_hour","_start_correction","Math","round","get_rounded_date","isEndDate","rounded_date","Date","get_events_html","html","render","sort","a","b","id","stack","evs_length","j","_inner","ev_start_date","apply","stack_ev","splice","sorderSet","p","t_ev","_sorder","h","_is_sorder","t","_max_sorder","w","max_count","_count","m","v","render_timeline_event","call","y_scale","d","_load_mode","_load","tevs","tev","tev_section","show_unassigned","key","hasOwnProperty","clone","_lame_copy","summ","realcount","_ignores_detected","_end_correction","_summ","heights","_colsS","_events_height","_section_height","stats","_logic","_merge","height","dy","section_autoheight","offsetHeight","max","floor","tr_className","style_height","style_width","dx","td_className","templates","name","label","td_content","summ_width","table_className","events_html","fit_events","rendered_height","_matrix","innerHTML","_rendered","divs","_obj","getElementsByTagName","getAttribute","_scales","firstChild","rows","unit_key","scale","_isRender","childNodes","callEvent","x_scale","current_sh","xy","scale_height","original_sh","_header_resized","_x","scroll_width","left","header","_els","style","width","_min_date","preserve","preserve_scale_length","start","_process_ignores","x_size","size","k","second_scale","mode","control_dates","second_cols","second_left","t_index","l","res","is_new_interval","top","bottom","lastChild","position","tdate","scs","head","document","createElement","className","set_xy","appendChild","_render_x_header","cs","trace","onclick","e","pos","locate_hcell","event","ondblclick","control_date","getHours","getDate","getMonth","getFullYear","getISOWeek","set_full_view","set_sizes","_init_matrix_tooltip","temp","_mark_now","hideToolTip","_tooltip","display","showToolTip","obj","offset","mark","body","_click","dhx_cal_data","bg_color","color","textColor","_timed","event_date","offsetWidth","src","html_index","el","parentNode","trg","target","srcElement","tagName","split","c","createTimelineView","_skin_init","y_step","x_start","y_start","y_size","event_dy","bar_height","event_min_dy","resize_events","render_name","timeline","checkEvent","_original_x_start","old","render_data","arguments","clear_event","_renderMatrix","ar","section_id","section_label","text","datea","dateb","getDay","date_part","getMinutes","day_date","week_date","date_to_str","x_date","hour_date","resulting_date","x_length","converted_step","total_steps","steps_offset","func","day_start","temp_date","_drag_event","_drag_id","getEvent","_dhx_changed","ratio","column_width","xind","edge","getState","drag_mode","force_redraw","custom","timestamp_diff","_drag_mode","drag_event","_move_delta","preserve_length","_get_real_event_length","_event_length","current_back_shift","_get_fictional_event_length","_drag_from_start","resize_from_start","_resize_from_start","undefined","_resolve_timeline_section","section","_update_timeline_section","view","time_step","shift","_get_timeline_event_height","event_height","_get_timeline_event_y","sorder","cascade_event_display","cascade_event_margin","attach","x_end","hb","section_height","event_class","event_bar_text","_text_style","drag_resize","readonly","dhx_event_resize","ind","parent","cells","_matrix_tooltip_handler","_locate_cell_timeline","getOffset","_detachDomEvent","dhtmlxEvent","refresh","scrollTop","_date","_table_view","replace","getActionData","diff","isScale","old_click","dhx_marked_timespan","ret","dblclick_dhx_matrix_cell","old_dblclick_marked_timespan","dblclick_dhx_marked_timespan","dblclick_dhx_matrix_scell","attachEvent","type","dblclick_create","event_options","addEventNow","isOneDayEvent","old_render_marked_timespan","_render_marked_timespan","options","area","unit_id","min_date","max_date","display_marked_timespans","view_opts","blocks","units","areas","sections","dates","days","specific_date","_get_dates_by_index","zones","css_classes","_get_css_classes_by_config","zone_start","zone_end","block","_get_block_by_config","start_pos","end_pos","cssText","insertBefore","old_append_mark_now","_append_mark_now","day_index","now","n_date","_currentDate","_get_zone_minutes","css","timespans","_marked_timespans","global_data","t_date","day_value","r_configs","day_types","_get_configs_to_render","z_config","unit_types","_get_types_to_render","day","yind","_orig_section","fields","action","line_height","_get_dnd_order","trace_x","setCurrentView","indexOf"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_tooltip.js b/codebase/sources/ext/dhtmlxscheduler_tooltip.js new file mode 100644 index 0000000..1dbad28 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_tooltip.js @@ -0,0 +1,223 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +window.dhtmlXTooltip = scheduler.dhtmlXTooltip = window.dhtmlxTooltip = {}; + +dhtmlXTooltip.config = { + className: 'dhtmlXTooltip tooltip', + timeout_to_display: 50, + timeout_to_hide: 50, + delta_x: 15, + delta_y: -20 +}; + +dhtmlXTooltip.tooltip = document.createElement('div'); +dhtmlXTooltip.tooltip.className = dhtmlXTooltip.config.className; + +dhtmlXTooltip.show = function(event, text) { //browser event, text to display + if (scheduler.config.touch && !scheduler.config.touch_tooltip) return; + + var dhxTooltip = dhtmlXTooltip; + var tooltip_div = this.tooltip; + var tooltip_div_style = tooltip_div.style; + dhxTooltip.tooltip.className = dhxTooltip.config.className; + var pos = this.position(event); + + var target = event.target || event.srcElement; + // if we are over tooltip -- do nothing, just return (so tooltip won't move) + if (this.isTooltip(target)) { + return; + } + + var actual_x = pos.x + (dhxTooltip.config.delta_x || 0); + var actual_y = pos.y - (dhxTooltip.config.delta_y || 0); + + tooltip_div_style.visibility = "hidden"; + + if (tooltip_div_style.removeAttribute) { + tooltip_div_style.removeAttribute("right"); + tooltip_div_style.removeAttribute("bottom"); + } else { + tooltip_div_style.removeProperty("right"); + tooltip_div_style.removeProperty("bottom"); + } + + tooltip_div_style.left = "0"; + tooltip_div_style.top = "0"; + + this.tooltip.innerHTML = text; + document.body.appendChild(this.tooltip); + + var tooltip_width = this.tooltip.offsetWidth; + var tooltip_height = this.tooltip.offsetHeight; + + if ((document.body.offsetWidth - actual_x - tooltip_width) < 0) { // tooltip is out of the right page bound + if(tooltip_div_style.removeAttribute) + tooltip_div_style.removeAttribute("left"); + else + tooltip_div_style.removeProperty("left"); + tooltip_div_style.right = (document.body.offsetWidth - actual_x + 2 * (dhxTooltip.config.delta_x||0)) + "px"; + } else { + if (actual_x < 0) { + // tooltips is out of the left page bound + tooltip_div_style.left = (pos.x + Math.abs(dhxTooltip.config.delta_x||0)) + "px"; + } else { + // normal situation + tooltip_div_style.left = actual_x + "px"; + } + } + + if ((document.body.offsetHeight - actual_y - tooltip_height) < 0) { // tooltip is below bottom of the page + if(tooltip_div_style.removeAttribute) + tooltip_div_style.removeAttribute("top"); + else + tooltip_div_style.removeProperty("top"); + tooltip_div_style.bottom = (document.body.offsetHeight - actual_y - 2 * (dhxTooltip.config.delta_y||0)) + "px"; + } else { + if (actual_y < 0) { + // tooltip is higher then top of the page + tooltip_div_style.top = (pos.y + Math.abs(dhxTooltip.config.delta_y||0)) + "px"; + } else { + // normal situation + tooltip_div_style.top = actual_y + "px"; + } + } + + tooltip_div_style.visibility = "visible"; + this.tooltip.onmouseleave = function(e){ + /* + A rare but reported scenario, when tooltip appears at the edge of the scheduler (e.g. left part inside cal, right part - outside). + User moves mouse from the scheduler into the tooltip, and then from the tooltip to the page outside the calendar. + As a result - tooltip freezes and no longer reacts until mouse reenters the calendar. + */ + var tooltip = scheduler.dhtmlXTooltip; + + var node = e.relatedTarget; + while (node != scheduler._obj && node) { + node = node.parentNode; + } + + if(node != scheduler._obj) + tooltip.delay(tooltip.hide, tooltip, [], tooltip.config.timeout_to_hide); + }; + + scheduler.callEvent("onTooltipDisplayed", [this.tooltip, this.tooltip.event_id]); +}; +dhtmlXTooltip._clearTimeout = function(){ + if(this.tooltip._timeout_id) { + window.clearTimeout(this.tooltip._timeout_id); + } +}; + +dhtmlXTooltip.hide = function() { + if (this.tooltip.parentNode) { + var event_id = this.tooltip.event_id; + this.tooltip.event_id = null; + this.tooltip.onmouseleave = null; + this.tooltip.parentNode.removeChild(this.tooltip); + scheduler.callEvent("onAfterTooltip", [event_id]); + } + this._clearTimeout(); +}; +dhtmlXTooltip.delay = function(method, object, params, delay) { + this._clearTimeout(); + this.tooltip._timeout_id = setTimeout(function() { + var ret = method.apply(object, params); + method = object = params = null; + return ret; + }, delay || this.config.timeout_to_display); +}; + +dhtmlXTooltip.isTooltip = function(node) { + var res = false; + if (node.className.split(" ")[0] == "dhtmlXTooltip") { + //debugger; + } + while (node && !res) { + res = (node.className == this.tooltip.className); + node = node.parentNode; + } + return res; +}; + +dhtmlXTooltip.position = function(ev) { + ev = ev || window.event; + if (ev.pageX || ev.pageY) //FF, KHTML + return {x:ev.pageX, y:ev.pageY}; + //IE + var d = ((window._isIE) && (document.compatMode != "BackCompat")) ? document.documentElement : document.body; + return { + x:ev.clientX + d.scrollLeft - d.clientLeft, + y:ev.clientY + d.scrollTop - d.clientTop + }; +}; + +scheduler.attachEvent("onMouseMove", function(event_id, e) { // (scheduler event_id, browser event) + var ev = window.event || e; + var target = ev.target || ev.srcElement; + var dhxTooltip = dhtmlXTooltip; + + var is_tooltip = dhxTooltip.isTooltip(target); + var is_tooltip_target = (dhxTooltip.isTooltipTarget && dhxTooltip.isTooltipTarget(target)); + + // if we are over event or tooltip or custom target for tooltip + if (event_id || is_tooltip || is_tooltip_target) { + var text; + + if (event_id || dhxTooltip.tooltip.event_id) { + var event = scheduler.getEvent(event_id) || scheduler.getEvent(dhxTooltip.tooltip.event_id); + if (!event) + return; + + dhxTooltip.tooltip.event_id = event.id; + text = scheduler.templates.tooltip_text(event.start_date, event.end_date, event); + if (!text) + return dhxTooltip.hide(); + } + if (is_tooltip_target) { + text = ""; + } + + var evt; + if (_isIE) { + //make a copy of event, will be used in timed call + + evt = {'pageX':undefined, + 'pageY':undefined, + 'clientX':undefined, + 'clientY':undefined, + 'target':undefined, + 'srcElement':undefined + }; + for(var i in evt){ + evt[i] = ev[i]; + } + } + + if (!scheduler.callEvent("onBeforeTooltip", [event_id]) || !text) + return; + + dhxTooltip.delay(dhxTooltip.show, dhxTooltip, [(evt || ev), text]); // showing tooltip + } else { + dhxTooltip.delay(dhxTooltip.hide, dhxTooltip, [], dhxTooltip.config.timeout_to_hide); + } +}); +scheduler.attachEvent("onBeforeDrag", function() { + dhtmlXTooltip.hide(); + return true; +}); +scheduler.attachEvent("onEventDeleted", function() { + dhtmlXTooltip.hide(); + return true; +}); + +/* Could be redifined */ +scheduler.templates.tooltip_date_format = scheduler.date.date_to_str("%Y-%m-%d %H:%i"); + +scheduler.templates.tooltip_text = function(start, end, event) { + return "<b>Event:</b> " + event.text + "<br/><b>Start date:</b> " + scheduler.templates.tooltip_date_format(start) + "<br/><b>End date:</b> " + scheduler.templates.tooltip_date_format(end); +}; diff --git a/codebase/sources/ext/dhtmlxscheduler_tooltip.js.map b/codebase/sources/ext/dhtmlxscheduler_tooltip.js.map new file mode 100644 index 0000000..76751fa --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_tooltip.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_tooltip.js.map","sources":["dhtmlxscheduler_tooltip.js"],"names":["window","dhtmlXTooltip","scheduler","dhtmlxTooltip","config","className","timeout_to_display","timeout_to_hide","delta_x","delta_y","tooltip","document","createElement","show","event","text","touch","touch_tooltip","dhxTooltip","tooltip_div","this","tooltip_div_style","style","pos","position","target","srcElement","isTooltip","actual_x","x","actual_y","y","visibility","removeAttribute","removeProperty","left","top","innerHTML","body","appendChild","tooltip_width","offsetWidth","tooltip_height","offsetHeight","right","Math","abs","bottom","onmouseleave","e","node","relatedTarget","_obj","parentNode","delay","hide","callEvent","event_id","_clearTimeout","_timeout_id","clearTimeout","removeChild","method","object","params","setTimeout","ret","apply","res","split","ev","pageX","pageY","d","compatMode","documentElement","clientX","scrollLeft","clientLeft","clientY","scrollTop","clientTop","attachEvent","is_tooltip","is_tooltip_target","isTooltipTarget","getEvent","id","templates","tooltip_text","start_date","end_date","evt","_isIE","undefined","i","tooltip_date_format","date","date_to_str","start","end"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_treetimeline.js b/codebase/sources/ext/dhtmlxscheduler_treetimeline.js new file mode 100644 index 0000000..706e1bd --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_treetimeline.js @@ -0,0 +1,313 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onTimelineCreated", function (obj){ + + if(obj.render == "tree") { + obj.y_unit_original = obj.y_unit; + obj.y_unit = scheduler._getArrayToDisplay(obj.y_unit_original); + + scheduler.attachEvent('onOptionsLoadStart', function(){ + obj.y_unit = scheduler._getArrayToDisplay(obj.y_unit_original); + }); + + scheduler.form_blocks[obj.name]={ + render:function(sns) { + var _result = "<div class='dhx_section_timeline' style='overflow: hidden; height: "+sns.height+"px'></div>"; + return _result; + }, + set_value:function(node,value,ev,config){ + var options = scheduler._getArrayForSelect(scheduler.matrix[config.type].y_unit_original, config.type); + node.innerHTML = ''; + var temp_select = document.createElement('select'); + node.appendChild(temp_select); + + var select = node.getElementsByTagName('select')[0]; + + if (!select._dhx_onchange && config.onchange) { + select.onchange = config.onchange; + select._dhx_onchange = true; + } + + for (var i = 0; i < options.length; i++) { + var temp_option = document.createElement('option'); + temp_option.value = options[i].key; + if(temp_option.value == ev[scheduler.matrix[config.type].y_property]) + temp_option.selected = true; + temp_option.innerHTML = options[i].label; + select.appendChild(temp_option); + } + }, + get_value:function(node,ev,config){ + return node.firstChild.value; + }, + focus:function(node){ + } + }; + + + } +}); + +scheduler.attachEvent("onBeforeSectionRender", function (render_name, y_unit, timeline){ + var res = {}; + if(render_name == "tree"){ + var height; + // section 1 + var tr_className, style_height, td_className; + var div_expand; + // section 3 + var table_className; + if(y_unit.children) { + height = timeline.folder_dy||timeline.dy; + if(timeline.folder_dy && !timeline.section_autoheight) { + style_height = "height:"+timeline.folder_dy+"px;"; + } + tr_className = "dhx_row_folder"; + td_className = "dhx_matrix_scell folder"; + div_expand = "<div class='dhx_scell_expand'>"+((y_unit.open)?'-':'+')+"</div>"; + table_className = (timeline.folder_events_available)?"dhx_data_table folder_events":"dhx_data_table folder"; + } else { + height = timeline.dy; + tr_className = "dhx_row_item"; + td_className = "dhx_matrix_scell item"+(scheduler.templates[timeline.name+"_scaley_class"](y_unit.key, y_unit.label, y_unit) ? + " "+scheduler.templates[timeline.name+"_scaley_class"](y_unit.key, y_unit.label, y_unit) : ''); + div_expand = ''; + table_className = "dhx_data_table"; + } + var td_content = "<div class='dhx_scell_level"+y_unit.level+"'>"+div_expand+"<div class='dhx_scell_name'>"+(scheduler.templates[timeline.name+'_scale_label'](y_unit.key, y_unit.label, y_unit)||y_unit.label)+"</div></div>"; + + res = { + height: height, + style_height: style_height, + //section 1 + tr_className: tr_className, + td_className: td_className, + td_content: td_content, + //section 3 + table_className: table_className + }; + } + return res; +}); + +var section_id_before; // section id of the event before dragging (to bring it back if user drop's event on folder without folder_events_available) + +scheduler.attachEvent("onBeforeEventChanged", function(event_object, native_event, is_new) { + if (scheduler._isRender("tree")) { // if mode's render == tree + var section = scheduler.getSection(event_object[scheduler.matrix[scheduler._mode].y_property]); + if (section && typeof section.children != 'undefined' && !scheduler.matrix[scheduler._mode].folder_events_available) { // section itself could be not defined in case of new event (addEventNow) + if (!is_new) { //if old - move back + event_object[scheduler.matrix[scheduler._mode].y_property] = section_id_before; + } + return false; + } + } + return true; +}); + +scheduler.attachEvent("onBeforeDrag", function (event_id, mode, native_event_object){ + if(scheduler._isRender("tree")) { + var cell = scheduler._locate_cell_timeline(native_event_object); + var section_id; + if(cell) { + section_id = scheduler.matrix[scheduler._mode].y_unit[cell.y].key; + if(typeof scheduler.matrix[scheduler._mode].y_unit[cell.y].children != "undefined" && !scheduler.matrix[scheduler._mode].folder_events_available) { + return false; + } + } + + var ev = scheduler.getEvent(event_id); + section_id_before = section_id||ev[scheduler.matrix[scheduler._mode].y_property]; // either event id or section_id will be available + } + return true; +}); + +scheduler._getArrayToDisplay = function(array){ // function to flatten out hierarhical array, used for tree view + var result = []; + var fillResultArray = function(array, lvl){ + var level = lvl||0; + for(var i=0; i<array.length; i++) { + array[i].level = level; + if(typeof array[i].children != "undefined" && typeof array[i].key == "undefined") + array[i].key=scheduler.uid(); + result.push(array[i]); + if(array[i].open && array[i].children) { + fillResultArray(array[i].children, level+1); + } + } + }; + fillResultArray(array); + return result; +}; + + +scheduler._getArrayForSelect = function(array, mode){ // function to flatten out hierarhical array, used for tree view + var result = []; + var fillResultArray = function(array){ + for(var i=0; i<array.length; i++) { + if(scheduler.matrix[mode].folder_events_available) { + result.push(array[i]); + } + else { + if(typeof array[i].children == "undefined") { + result.push(array[i]); + } + } + if(array[i].children) + fillResultArray(array[i].children, mode); + } + }; + fillResultArray(array); + return result; +}; + + +/* +scheduler._toggleFolderDisplay(4) -- toggle display of the section with key 4 (closed -> open) +scheduler._toggleFolderDisplay(4, true) -- open section with the key 4 (doesn't matter what status was before). False - close. +scheduler._toggleFolderDisplay(4, false, true) -- close ALL sections. Key is not used in such condition. +*/ +scheduler._toggleFolderDisplay = function(key, status, all_sections){ // used for tree view + var marked; + var toggleElement = function(key, array, status, all_sections) { + for (var i=0; i<array.length; i++) { + if((array[i].key == key || all_sections) && array[i].children) { + array[i].open = (typeof status != "undefined") ? status : !array[i].open; + marked = true; + if(!all_sections && marked) + break; + } + if(array[i].children) { + toggleElement(key,array[i].children, status, all_sections); + } + } + }; + var section = scheduler.getSection(key); + + if((typeof status == "undefined") && !all_sections){ + //toggle + status = !section.open; + } + if (scheduler.callEvent("onBeforeFolderToggle", [section, status, all_sections])) { + toggleElement(key,scheduler.matrix[scheduler._mode].y_unit_original, status, all_sections); + scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.callEvent("onOptionsLoad",[]); + scheduler.callEvent("onAfterFolderToggle", [section, status, all_sections]); + } +}; + +scheduler.attachEvent("onCellClick", function (x, y, a, b, event){ + if(scheduler._isRender("tree")) { + if(!scheduler.matrix[scheduler._mode].folder_events_available) { + if(typeof scheduler.matrix[scheduler._mode].y_unit[y] != "undefined" && + typeof scheduler.matrix[scheduler._mode].y_unit[y].children != "undefined") { + scheduler._toggleFolderDisplay(scheduler.matrix[scheduler._mode].y_unit[y].key); + } + } + } +}); + +scheduler.attachEvent("onYScaleClick", function (index, value, event){ + if(scheduler._isRender("tree")) { + if(typeof value.children != "undefined") { + scheduler._toggleFolderDisplay(value.key); + } + } +}); + +scheduler.getSection = function(id){ + if(scheduler._isRender("tree")) { + var obj; + var findElement = function(key, array) { + for (var i=0; i<array.length; i++) { + if(array[i].key == key) + obj = array[i]; + if(array[i].children) + findElement(key,array[i].children); + } + }; + findElement(id, scheduler.matrix[scheduler._mode].y_unit_original); + return obj||null; + } +}; + +scheduler.deleteSection = function(id){ + if(scheduler._isRender("tree")) { + var result = false; + var deleteElement = function(key, array) { + for (var i=0; i<array.length; i++) { + if(array[i].key == key) { + array.splice(i,1); + result = true; + } + if(result) + break; + if(array[i].children) + deleteElement(key,array[i].children); + } + }; + deleteElement(id, scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.callEvent("onOptionsLoad",[]); + return result; + } +}; + +scheduler.deleteAllSections = function(){ + if(scheduler._isRender("tree")) { + scheduler.matrix[scheduler._mode].y_unit_original = []; + scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.callEvent("onOptionsLoad",[]); + } +}; + +scheduler.addSection = function(obj, parent_id){ + if(scheduler._isRender("tree")) { + var result = false; + var addElement = function(obj, parent_key, array) { + if(!parent_id) { + array.push(obj); + result = true; + } + else { + for (var i=0; i<array.length; i++) { + if(array[i].key == parent_key && typeof array[i].children != "undefined") { + array[i].children.push(obj); + result = true; + } + if(result) + break; + if(array[i].children) + addElement(obj,parent_key,array[i].children); + } + } + }; + addElement(obj, parent_id, scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.matrix[scheduler._mode].y_unit = scheduler._getArrayToDisplay(scheduler.matrix[scheduler._mode].y_unit_original); + scheduler.callEvent("onOptionsLoad",[]); + return result; + } +}; + + +scheduler.openAllSections = function() { + if(scheduler._isRender("tree")) + scheduler._toggleFolderDisplay(1, true, true); +}; +scheduler.closeAllSections = function() { + if(scheduler._isRender("tree")) + scheduler._toggleFolderDisplay(1, false, true); +}; +scheduler.openSection = function(section_id){ + if(scheduler._isRender("tree")) + scheduler._toggleFolderDisplay(section_id, true); +}; +scheduler.closeSection = function(section_id){ + if(scheduler._isRender("tree")) + scheduler._toggleFolderDisplay(section_id, false); +}; diff --git a/codebase/sources/ext/dhtmlxscheduler_treetimeline.js.map b/codebase/sources/ext/dhtmlxscheduler_treetimeline.js.map new file mode 100644 index 0000000..fa99384 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_treetimeline.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_treetimeline.js.map","sources":["dhtmlxscheduler_treetimeline.js"],"names":["scheduler","attachEvent","obj","render","y_unit_original","y_unit","_getArrayToDisplay","form_blocks","name","sns","_result","height","set_value","node","value","ev","config","options","_getArrayForSelect","matrix","type","innerHTML","temp_select","document","createElement","appendChild","select","getElementsByTagName","_dhx_onchange","onchange","i","length","temp_option","key","y_property","selected","label","get_value","firstChild","focus","render_name","timeline","res","tr_className","style_height","td_className","div_expand","table_className","children","folder_dy","dy","section_autoheight","templates","td_content","level","section_id_before","event_object","native_event","is_new","_isRender","section","getSection","_mode","folder_events_available","event_id","mode","native_event_object","section_id","cell","_locate_cell_timeline","y","getEvent","array","result","fillResultArray","lvl","uid","push","open","_toggleFolderDisplay","status","all_sections","marked","toggleElement","callEvent","x","index","id","findElement","deleteSection","deleteElement","splice","deleteAllSections","addSection","parent_id","addElement","parent_key","openAllSections","closeAllSections","openSection","closeSection"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_units.js b/codebase/sources/ext/dhtmlxscheduler_units.js new file mode 100644 index 0000000..c6a94d3 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_units.js @@ -0,0 +1,259 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler._props = {}; +scheduler.createUnitsView=function(name,property,list,size,step,skip_incorrect){ + if (typeof name == "object"){ + list = name.list; + property = name.property; + size = name.size||0; + step = name.step||1; + skip_incorrect = name.skip_incorrect; + name = name.name; + } + + scheduler._props[name]={map_to:property, options:list, step:step, position:0 }; + if(size>scheduler._props[name].options.length){ + scheduler._props[name]._original_size = size; + size = 0; + } + scheduler._props[name].size = size; + scheduler._props[name].skip_incorrect = skip_incorrect||false; + + scheduler.date[name+"_start"]= scheduler.date.day_start; + scheduler.templates[name+"_date"] = function(date){ + return scheduler.templates.day_date(date); + }; + + scheduler._get_unit_index = function(unit_view, date) { + var original_position = unit_view.position || 0; + var date_position = Math.floor((scheduler._correct_shift(+date, 1) - +scheduler._min_date) / (60 * 60 * 24 * 1000)); + return original_position + date_position; + }; + scheduler.templates[name + "_scale_text"] = function(id, label, option) { + if (option.css) { + return "<span class='" + option.css + "'>" + label + "</span>"; + } else { + return label; + } + }; + scheduler.templates[name+"_scale_date"] = function(date) { + var unit_view = scheduler._props[name]; + var list = unit_view.options; + if (!list.length) return ""; + var index = scheduler._get_unit_index(unit_view, date); + var option = list[index]; + return scheduler.templates[name + "_scale_text"](option.key, option.label, option); + }; + + scheduler.date["add_"+name]=function(date,inc){ return scheduler.date.add(date,inc,"day"); }; + scheduler.date["get_"+name+"_end"]=function(date){ + return scheduler.date.add(date,scheduler._props[name].size||scheduler._props[name].options.length,"day"); + }; + + scheduler.attachEvent("onOptionsLoad",function(){ + var pr = scheduler._props[name]; + var order = pr.order = {}; + var list = pr.options; + for(var i=0; i<list.length;i++) + order[list[i].key]=i; + if(pr._original_size && pr.size===0){ + pr.size = pr._original_size; + delete pr.original_size; + } + if(pr.size > list.length) { + pr._original_size = pr.size; + pr.size = 0; + } + else + pr.size = pr._original_size||pr.size; + if (scheduler._date && scheduler._mode == name) + scheduler.setCurrentView(scheduler._date, scheduler._mode); + }); + + scheduler["mouse_"+ name] = function(pos){ //mouse_coord handler + var pr = scheduler._props[this._mode]; + + if (pr){ + pos = this._week_indexes_from_pos(pos); + if(!this._drag_event) this._drag_event = {}; + + if (this._drag_id && this._drag_mode){ + this._drag_event._dhx_changed = true; + } + var unit_ind = Math.min(pos.x+pr.position,pr.options.length-1); + pos.section = (pr.options[unit_ind]||{}).key; + pos.x = 0; + + var ev = this.getEvent(this._drag_id); + this._update_unit_section({view:pr, event:ev, pos:pos}); + } + pos.force_redraw = true; + + return pos; + }; + + + + scheduler.callEvent("onOptionsLoad",[]); +}; + +scheduler._update_unit_section = function(action){ + var view = action.view, + event = action.event, + pos = action.pos; + if(event) { + event[view.map_to] = pos.section; + } +}; + +scheduler.scrollUnit=function(step){ + var pr = scheduler._props[this._mode]; + if (pr){ + pr.position=Math.min(Math.max(0,pr.position+step),pr.options.length-pr.size); + this.update_view(); + } +}; +(function(){ + var _removeIncorrectEvents = function(evs) { + var pr = scheduler._props[scheduler._mode]; + if(pr && pr.order && pr.skip_incorrect) { + var correct_events = []; + for(var i=0; i<evs.length; i++) { + if(typeof pr.order[evs[i][pr.map_to]] != "undefined") { + correct_events.push(evs[i]); + } + } + evs.splice(0,evs.length); + evs.push.apply(evs,correct_events); + } + return evs; + }; + var old_pre_render_events_table = scheduler._pre_render_events_table; + scheduler._pre_render_events_table=function(evs,hold) { + evs = _removeIncorrectEvents(evs); + return old_pre_render_events_table.apply(this, [evs, hold]); + }; + var old_pre_render_events_line = scheduler._pre_render_events_line; + scheduler._pre_render_events_line = function(evs,hold){ + evs = _removeIncorrectEvents(evs); + return old_pre_render_events_line.apply(this, [evs, hold]); + }; + var fix_und=function(pr,ev){ + if (pr && typeof pr.order[ev[pr.map_to]] == "undefined"){ + var s = scheduler; + var dx = 24*60*60*1000; + var ind = Math.floor((ev.end_date - s._min_date)/dx); + //ev.end_date = new Date(s.date.time_part(ev.end_date)*1000+s._min_date.valueOf()); + //ev.start_date = new Date(s.date.time_part(ev.start_date)*1000+s._min_date.valueOf()); + ev[pr.map_to] = pr.options[Math.min(ind+pr.position,pr.options.length-1)].key; + return true; + } + }; + var t = scheduler._reset_scale; + + var oldive = scheduler.is_visible_events; + scheduler.is_visible_events = function(e){ + var res = oldive.apply(this,arguments); + if (res){ + var pr = scheduler._props[this._mode]; + if (pr && pr.size){ + var val = pr.order[e[pr.map_to]]; + if (val < pr.position || val >= pr.size+pr.position ) + return false; + } + } + return res; + }; + scheduler._reset_scale = function(){ + var pr = scheduler._props[this._mode]; + var ret = t.apply(this,arguments); + if (pr){ + this._max_date=this.date.add(this._min_date,1,"day"); + + var d = this._els["dhx_cal_data"][0].childNodes; + for (var i=0; i < d.length; i++) + d[i].className = d[i].className.replace("_now",""); //clear now class + + if (pr.size && pr.size < pr.options.length){ + + var h = this._els["dhx_cal_header"][0]; + var arrow = document.createElement("DIV"); + if (pr.position){ + arrow.className = "dhx_cal_prev_button"; + arrow.style.cssText="left:1px;top:2px;position:absolute;"; + arrow.innerHTML = " "; + h.firstChild.appendChild(arrow); + arrow.onclick=function(){ + scheduler.scrollUnit(pr.step*-1); + }; + } + if (pr.position+pr.size<pr.options.length){ + arrow = document.createElement("DIV"); + arrow.className = "dhx_cal_next_button"; + arrow.style.cssText="left:auto; right:0px;top:2px;position:absolute;"; + arrow.innerHTML = " "; + h.lastChild.appendChild(arrow); + arrow.onclick=function(){ + scheduler.scrollUnit(pr.step); + }; + } + } + } + return ret; + + }; + var r = scheduler._get_event_sday; + scheduler._get_event_sday=function(ev){ + var pr = scheduler._props[this._mode]; + if (pr){ + fix_und(pr,ev); + return pr.order[ev[pr.map_to]]-pr.position; + } + return r.call(this,ev); + }; + var l = scheduler.locate_holder_day; + scheduler.locate_holder_day=function(a,b,ev){ + var pr = scheduler._props[this._mode]; + if (pr && ev) { + fix_und(pr,ev); + return pr.order[ev[pr.map_to]]*1+(b?1:0)-pr.position; + } + return l.apply(this,arguments); + }; + + var o = scheduler._time_order; + scheduler._time_order = function(evs){ + var pr = scheduler._props[this._mode]; + if (pr){ + evs.sort(function(a,b){ + return pr.order[a[pr.map_to]]>pr.order[b[pr.map_to]]?1:-1; + }); + } else + o.apply(this,arguments); + }; + scheduler.attachEvent("onEventAdded",function(id,ev){ + if (this._loading) return true; + for (var a in scheduler._props){ + var pr = scheduler._props[a]; + if (typeof ev[pr.map_to] == "undefined") + ev[pr.map_to] = pr.options[0].key; + } + return true; + }); + scheduler.attachEvent("onEventCreated",function(id,n_ev){ + var pr = scheduler._props[this._mode]; + if (pr && n_ev){ + var ev = this.getEvent(id); + var pos = this._mouse_coords(n_ev); + this._update_unit_section({view:pr, event:ev, pos:pos}); + fix_und(pr,ev); + this.event_updated(ev); + } + return true; + }); +})(); diff --git a/codebase/sources/ext/dhtmlxscheduler_units.js.map b/codebase/sources/ext/dhtmlxscheduler_units.js.map new file mode 100644 index 0000000..b53e25b --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_units.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_units.js.map","sources":["dhtmlxscheduler_units.js"],"names":["scheduler","_props","createUnitsView","name","property","list","size","step","skip_incorrect","map_to","options","position","length","_original_size","date","day_start","templates","day_date","_get_unit_index","unit_view","original_position","date_position","Math","floor","_correct_shift","_min_date","id","label","option","css","index","key","inc","add","attachEvent","pr","order","i","original_size","_date","_mode","setCurrentView","pos","this","_week_indexes_from_pos","_drag_event","_drag_id","_drag_mode","_dhx_changed","unit_ind","min","x","section","ev","getEvent","_update_unit_section","view","event","force_redraw","callEvent","action","scrollUnit","max","update_view","_removeIncorrectEvents","evs","correct_events","push","splice","apply","old_pre_render_events_table","_pre_render_events_table","hold","old_pre_render_events_line","_pre_render_events_line","fix_und","s","dx","ind","end_date","t","_reset_scale","oldive","is_visible_events","e","res","arguments","val","ret","_max_date","d","_els","childNodes","className","replace","h","arrow","document","createElement","style","cssText","innerHTML","firstChild","appendChild","onclick","lastChild","r","_get_event_sday","call","l","locate_holder_day","a","b","o","_time_order","sort","_loading","n_ev","_mouse_coords","event_updated"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_url.js b/codebase/sources/ext/dhtmlxscheduler_url.js new file mode 100644 index 0000000..2a98978 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_url.js @@ -0,0 +1,37 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onTemplatesReady",function(){ + var first = true; + var s2d = scheduler.date.str_to_date("%Y-%m-%d"); + var d2s = scheduler.date.date_to_str("%Y-%m-%d"); + scheduler.attachEvent("onBeforeViewChange",function(om,od,m,d){ + if (first){ + first = false; + var p={}; + var data=(document.location.hash||"").replace("#","").split(","); + for (var i=0; i < data.length; i++) { + var s = data[i].split("="); + if (s.length==2) + p[s[0]]=s[1]; + } + + if (p.date || p.mode){ + try{ + this.setCurrentView((p.date?s2d(p.date):null),(p.mode||null)); + } catch(e){ + //assuming that mode is not available anymore + this.setCurrentView((p.date?s2d(p.date):null),m); + } + return false; + } + } + var text = "#date="+d2s(d||od)+",mode="+(m||om); + document.location.hash = text; + return true; + }); +});
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_url.js.map b/codebase/sources/ext/dhtmlxscheduler_url.js.map new file mode 100644 index 0000000..6814ae0 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_url.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_url.js.map","sources":["dhtmlxscheduler_url.js"],"names":["scheduler","attachEvent","first","s2d","date","str_to_date","d2s","date_to_str","om","od","m","d","p","data","document","location","hash","replace","split","i","length","s","mode","this","setCurrentView","e","text"],"mappings":"AAAAA,UAAUC,YAAY,mBAAmB,WACtC,GAAIC,IAAQ,EACRC,EAAMH,UAAUI,KAAKC,YAAY,YACjCC,EAAMN,UAAUI,KAAKG,YAAY,WACrCP,WAAUC,YAAY,qBAAqB,SAASO,EAAGC,EAAGC,EAAEC,GACzD,GAAIT,EAAM,CACPA,GAAQ,CAGR,KAAK,GAFDU,MACAC,GAAMC,SAASC,SAASC,MAAM,IAAIC,QAAQ,IAAI,IAAIC,MAAM,KACnDC,EAAE,EAAGA,EAAIN,EAAKO,OAAQD,IAAK,CACnC,GAAIE,GAAIR,EAAKM,GAAGD,MAAM,IACR,IAAVG,EAAED,SACNR,EAAES,EAAE,IAAIA,EAAE,IAGX,GAAIT,EAAER,MAAQQ,EAAEU,KAAK,CACpB,IACGC,KAAKC,eAAgBZ,EAAER,KAAKD,EAAIS,EAAER,MAAM,KAAOQ,EAAEU,MAAM,MACzD,MAAMG,GAEPF,KAAKC,eAAgBZ,EAAER,KAAKD,EAAIS,EAAER,MAAM,KAAMM,GAE5C,OAAO,GAGb,GAAIgB,GAAO,SAASpB,EAAIK,GAAGF,GAAI,UAAUC,GAAGF,EAE5C;MADAM,UAASC,SAASC,KAAOU,GAClB"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_week_agenda.js b/codebase/sources/ext/dhtmlxscheduler_week_agenda.js new file mode 100644 index 0000000..fad882e --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_week_agenda.js @@ -0,0 +1,261 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler._wa = {}; +scheduler.xy.week_agenda_scale_height = 20; +scheduler.templates.week_agenda_event_text = function(start_date, end_date, event, date) { + return scheduler.templates.event_date(start_date) + " " + event.text; +}; +scheduler.date.week_agenda_start = scheduler.date.week_start; +scheduler.date.week_agenda_end = function(date) { + return scheduler.date.add(date, 7, "day"); +}; +scheduler.date.add_week_agenda = function(date, inc) { + return scheduler.date.add(date, inc * 7, "day"); +}; + +scheduler.attachEvent("onSchedulerReady", function() { + var t = scheduler.templates; + if (!t.week_agenda_date) + t.week_agenda_date = t.week_date; +}); + +(function() { + var scale_date_format = scheduler.date.date_to_str("%l, %F %d"); + scheduler.templates.week_agenda_scale_date = function(date) { + return scale_date_format(date); + }; +})(); + +scheduler.attachEvent("onTemplatesReady", function() { + + scheduler.attachEvent("onSchedulerResize", function() { + if (this._mode == "week_agenda") { + this.week_agenda_view(true); + return false; + } + return true; + }); + + var old = scheduler.render_data; + scheduler.render_data = function(evs) { + if (this._mode == "week_agenda") { + scheduler.week_agenda_view(true); + } else + return old.apply(this, arguments); + }; + + var getColumnSizes = function() { + // widths + scheduler._cols = []; + var twidth = parseInt(scheduler._els['dhx_cal_data'][0].style.width); + scheduler._cols.push(Math.floor(twidth / 2)); + scheduler._cols.push(twidth - scheduler._cols[0] - 1); // To add border between columns + + // heights + scheduler._colsS = { + 0: [], + 1: [] + }; + var theight = parseInt(scheduler._els['dhx_cal_data'][0].style.height); + for (var i = 0; i < 3; i++) { + scheduler._colsS[0].push(Math.floor(theight / (3 - scheduler._colsS[0].length))); + theight -= scheduler._colsS[0][i]; + } + scheduler._colsS[1].push(scheduler._colsS[0][0]); + scheduler._colsS[1].push(scheduler._colsS[0][1]); + // last two days + theight = scheduler._colsS[0][scheduler._colsS[0].length - 1]; + scheduler._colsS[1].push(Math.floor(theight / 2)); + scheduler._colsS[1].push(theight - scheduler._colsS[1][scheduler._colsS[1].length - 1]); + }; + var fillWeekAgendaTab = function() { + getColumnSizes(); + scheduler._els["dhx_cal_data"][0].innerHTML = ''; + scheduler._rendered = []; + var html = ''; + for (var i = 0; i < 2; i++) { + var width = scheduler._cols[i]; + var column_css = 'dhx_wa_column'; + if (i == 1) + column_css += ' dhx_wa_column_last'; + html += "<div class='" + column_css + "' style='width: " + width + "px;'>"; + for (var k = 0; k < scheduler._colsS[i].length; k++) { + var scale_height = scheduler.xy.week_agenda_scale_height - 2; + var height = scheduler._colsS[i][k] - scale_height - 2; + var day = Math.min(6, k * 2 + i); + html += "<div class='dhx_wa_day_cont'><div style='height:" + scale_height + "px; line-height:" + scale_height + "px;' class='dhx_wa_scale_bar'></div><div style='height:" + height + "px;' class='dhx_wa_day_data' day='" + day + "'></div></div>"; + } + html += "</div>"; + } + scheduler._els["dhx_cal_date"][0].innerHTML = scheduler.templates[scheduler._mode + "_date"](scheduler._min_date, scheduler._max_date, scheduler._mode); + scheduler._els["dhx_cal_data"][0].innerHTML = html; + var all_divs = scheduler._els["dhx_cal_data"][0].getElementsByTagName('div'); + var day_divs = []; + for (var i = 0; i < all_divs.length; i++) { + if (all_divs[i].className == 'dhx_wa_day_cont') + day_divs.push(all_divs[i]); + } + scheduler._wa._selected_divs = []; + var events = scheduler.get_visible_events(); // list of events to be displayed in current week + var tstart = scheduler.date.week_start(scheduler._date); + var tend = scheduler.date.add(tstart, 1, "day"); + for (var i = 0; i < 7; i++) { + day_divs[i]._date = tstart; + var scale_bar = day_divs[i].childNodes[0]; + var events_div = day_divs[i].childNodes[1]; + scale_bar.innerHTML = scheduler.templates.week_agenda_scale_date(tstart); + var evs = []; // events which will be displayed in the current day + for (var j = 0; j < events.length; j++) { + var tev = events[j]; + if (tev.start_date < tend && tev.end_date > tstart) + evs.push(tev); + } + evs.sort(function(a, b) { + if (a.start_date.valueOf() == b.start_date.valueOf()) + return a.id > b.id ? 1 : -1; + return a.start_date > b.start_date ? 1 : -1; + }); + for (var k = 0; k < evs.length; k++) { + var ev = evs[k]; + var ev_div = document.createElement('div'); + scheduler._rendered.push(ev_div); + var ev_class = scheduler.templates.event_class(ev.start_date, ev.end_date, ev); + ev_div.className = 'dhx_wa_ev_body' + (ev_class ? (' ' + ev_class) : ''); + if (ev._text_style) + ev_div.style.cssText = ev._text_style; + if (ev.color) + ev_div.style.background = ev.color; + if (ev.textColor) + ev_div.style.color = ev.textColor; + if (scheduler._select_id && ev.id == scheduler._select_id && !(!scheduler.config.week_agenda_select && scheduler.config.week_agenda_select !== undefined)) { + ev_div.className += " dhx_cal_event_selected"; + scheduler._wa._selected_divs.push(ev_div); + } + var position = ""; + if (!ev._timed) { + position = "middle"; + if (ev.start_date.valueOf() >= tstart.valueOf() && ev.start_date.valueOf() <= tend.valueOf()) + position = "start"; + if (ev.end_date.valueOf() >= tstart.valueOf() && ev.end_date.valueOf() <= tend.valueOf()) + position = "end"; + } + ev_div.innerHTML = scheduler.templates.week_agenda_event_text(ev.start_date, ev.end_date, ev, tstart, position); + ev_div.setAttribute('event_id', ev.id); + events_div.appendChild(ev_div); + } + tstart = scheduler.date.add(tstart, 1, "day"); + tend = scheduler.date.add(tend, 1, "day"); + } + }; + scheduler.week_agenda_view = function(mode) { + scheduler._min_date = scheduler.date.week_start(scheduler._date); + scheduler._max_date = scheduler.date.add(scheduler._min_date, 1, "week"); + scheduler.set_sizes(); + if (mode) { // mode enabled + scheduler._table_view = scheduler._allow_dnd = true; + + // hiding default top border from dhx_cal_data + scheduler._wa._prev_data_border = scheduler._els['dhx_cal_data'][0].style.borderTop; + scheduler._els['dhx_cal_data'][0].style.borderTop = 0; + scheduler._els['dhx_cal_data'][0].style.overflowY = 'hidden'; + + // cleaning dhx_cal_date from the previous date + scheduler._els['dhx_cal_date'][0].innerHTML = ""; + + // 1 to make navline to be over data + scheduler._els['dhx_cal_data'][0].style.top = (parseInt(scheduler._els['dhx_cal_data'][0].style.top) - 20 - 1) + 'px'; + scheduler._els['dhx_cal_data'][0].style.height = (parseInt(scheduler._els['dhx_cal_data'][0].style.height) + 20 + 1) + 'px'; + + scheduler._els['dhx_cal_header'][0].style.display = 'none'; + fillWeekAgendaTab(); + } else { // leaving week_agenda mode + scheduler._table_view = scheduler._allow_dnd = false; + + // restoring default top border to dhx_cal_data + if (scheduler._wa._prev_data_border) + scheduler._els['dhx_cal_data'][0].style.borderTop = scheduler._wa._prev_data_border; + + scheduler._els['dhx_cal_data'][0].style.overflowY = 'auto'; + scheduler._els['dhx_cal_data'][0].style.top = (parseInt(scheduler._els['dhx_cal_data'][0].style.top) + 20) + 'px'; + scheduler._els['dhx_cal_data'][0].style.height = (parseInt(scheduler._els['dhx_cal_data'][0].style.height) - 20) + 'px'; + scheduler._els['dhx_cal_header'][0].style.display = 'block'; + } + }; + scheduler.mouse_week_agenda = function(pos) { + var native_event = pos.ev; + var src = native_event.srcElement || native_event.target; + var date; + while (src.parentNode) { + if (src._date) + date = src._date; + src = src.parentNode; + } + if (!date) + return pos; + pos.x = 0; + var diff = date.valueOf() - scheduler._min_date.valueOf(); + pos.y = Math.ceil(( diff / (1000 * 60) ) / this.config.time_step); + if (this._drag_mode == 'move') { + var event_div; + this._drag_event._dhx_changed = true; + this._select_id = this._drag_id; + for (var i = 0; i < scheduler._rendered.length; i++) { + if (scheduler._drag_id == this._rendered[i].getAttribute('event_id')) + event_div = this._rendered[i]; + } + if (!scheduler._wa._dnd) { + var div = event_div.cloneNode(true); + this._wa._dnd = div; + div.className = event_div.className; + div.id = 'dhx_wa_dnd'; + div.className += ' dhx_wa_dnd'; + document.body.appendChild(div); + } + var dnd_div = document.getElementById('dhx_wa_dnd'); + dnd_div.style.top = ((native_event.pageY || native_event.clientY) + 20) + "px"; + dnd_div.style.left = ((native_event.pageX || native_event.clientX) + 20) + "px"; + } + return pos; + }; + scheduler.attachEvent('onBeforeEventChanged', function(event_object, native_event, is_new) { + if (this._mode == 'week_agenda') { + if (this._drag_mode == 'move') { + var dnd = document.getElementById('dhx_wa_dnd'); + dnd.parentNode.removeChild(dnd); + scheduler._wa._dnd = false; + } + } + return true; + }); + + scheduler.attachEvent("onEventSave", function(id, data, is_new_event) { + if (is_new_event && this._mode == 'week_agenda') + this._select_id = id; + return true; + }); + + scheduler._wa._selected_divs = []; + + scheduler.attachEvent("onClick", function(event_id, native_event_object) { + if (this._mode == 'week_agenda' && !(!scheduler.config.week_agenda_select && scheduler.config.week_agenda_select !== undefined)) { + if (scheduler._wa._selected_divs) { + for (var i = 0; i < this._wa._selected_divs.length; i++) { + var div = this._wa._selected_divs[i]; + div.className = div.className.replace(/ dhx_cal_event_selected/, ''); + } + } + this.for_rendered(event_id, function(event_div) { + event_div.className += " dhx_cal_event_selected"; + scheduler._wa._selected_divs.push(event_div); + }); + scheduler.select(event_id); + return false; + } + return true; + }); +}); diff --git a/codebase/sources/ext/dhtmlxscheduler_week_agenda.js.map b/codebase/sources/ext/dhtmlxscheduler_week_agenda.js.map new file mode 100644 index 0000000..696e0d2 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_week_agenda.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_week_agenda.js.map","sources":["dhtmlxscheduler_week_agenda.js"],"names":["scheduler","_wa","xy","week_agenda_scale_height","templates","week_agenda_event_text","start_date","end_date","event","event_date","text","date","week_agenda_start","week_start","week_agenda_end","add","add_week_agenda","inc","attachEvent","t","week_agenda_date","week_date","scale_date_format","date_to_str","week_agenda_scale_date","this","_mode","week_agenda_view","old","render_data","apply","arguments","getColumnSizes","_cols","twidth","parseInt","_els","style","width","push","Math","floor","_colsS",1,"theight","height","i","length","fillWeekAgendaTab","innerHTML","_rendered","html","column_css","k","scale_height","day","min","_min_date","_max_date","all_divs","getElementsByTagName","day_divs","className","_selected_divs","events","get_visible_events","tstart","_date","tend","scale_bar","childNodes","events_div","evs","j","tev","sort","a","b","valueOf","id","ev","ev_div","document","createElement","ev_class","event_class","_text_style","cssText","color","background","textColor","_select_id","config","week_agenda_select","undefined","position","_timed","setAttribute","appendChild","mode","set_sizes","_table_view","_allow_dnd","_prev_data_border","borderTop","overflowY","top","display","mouse_week_agenda","pos","native_event","src","srcElement","target","parentNode","x","diff","y","ceil","time_step","_drag_mode","event_div","_drag_event","_dhx_changed","_drag_id","getAttribute","_dnd","div","cloneNode","body","dnd_div","getElementById","pageY","clientY","left","pageX","clientX","dnd","removeChild","data","is_new_event","event_id","replace","for_rendered","select"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_wp.js b/codebase/sources/ext/dhtmlxscheduler_wp.js new file mode 100644 index 0000000..89da447 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_wp.js @@ -0,0 +1,20 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.attachEvent("onLightBox",function(){ + if (this._cover){ + try{ + this._cover.style.height = this.expanded ? "100%" : ((document.body.parentNode||document.body).scrollHeight+"px"); + } catch(e) {} + } +}); + +scheduler.form_blocks.select.set_value=function(node,value,ev){ + if (typeof value == "undefined" || value === "") + value = (node.firstChild.options[0]||{}).value; + node.firstChild.value=value||""; +};
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_wp.js.map b/codebase/sources/ext/dhtmlxscheduler_wp.js.map new file mode 100644 index 0000000..1175527 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_wp.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_wp.js.map","sources":["dhtmlxscheduler_wp.js"],"names":["scheduler","attachEvent","this","_cover","style","height","expanded","document","body","parentNode","scrollHeight","e","form_blocks","select","set_value","node","value","firstChild","options"],"mappings":"AAAAA,UAAUC,YAAY,aAAa,WAClC,GAAIC,KAAKC,OACR,IACCD,KAAKC,OAAOC,MAAMC,OAASH,KAAKI,SAAW,QAAWC,SAASC,KAAKC,YAAYF,SAASC,MAAME,aAAa,KAC3G,MAAMC,OAIVX,UAAUY,YAAYC,OAAOC,UAAU,SAASC,EAAKC,IAChC,mBAATA,IAAkC,KAAVA,KAClCA,GAASD,EAAKE,WAAWC,QAAQ,QAAQF,OAC1CD,EAAKE,WAAWD,MAAMA,GAAO"}
\ No newline at end of file diff --git a/codebase/sources/ext/dhtmlxscheduler_year_view.js b/codebase/sources/ext/dhtmlxscheduler_year_view.js new file mode 100644 index 0000000..ca2f5a4 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_year_view.js @@ -0,0 +1,391 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +scheduler.config.year_x = 4; +scheduler.config.year_y = 3; +scheduler.xy.year_top = 0; + +scheduler.templates.year_date = function(date) { + return scheduler.date.date_to_str(scheduler.locale.labels.year_tab + " %Y")(date); +}; +scheduler.templates.year_month = scheduler.date.date_to_str("%F"); +scheduler.templates.year_scale_date = scheduler.date.date_to_str("%D"); +scheduler.templates.year_tooltip = function(s, e, ev) { + return ev.text; +}; + +(function() { + var is_year_mode = function() { + return scheduler._mode == "year"; + }; + + scheduler.dblclick_dhx_month_head = function(e) { + if (is_year_mode()) { + var t = (e.target || e.srcElement); + if (t.parentNode.className.indexOf("dhx_before") != -1 || t.parentNode.className.indexOf("dhx_after") != -1) return false; + var start = this.templates.xml_date(t.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.getAttribute("date")); + start.setDate(parseInt(t.innerHTML, 10)); + var end = this.date.add(start, 1, "day"); + if (!this.config.readonly && this.config.dblclick_create) + this.addEventNow(start.valueOf(), end.valueOf(), e); + } + }; + + var chid = scheduler.changeEventId; + scheduler.changeEventId = function() { + chid.apply(this, arguments); + if (is_year_mode()) + this.year_view(true); + }; + + + var old = scheduler.render_data; + var to_attr = scheduler.date.date_to_str("%Y/%m/%d"); + var from_attr = scheduler.date.str_to_date("%Y/%m/%d"); + scheduler.render_data = function(evs) { + if (!is_year_mode()) return old.apply(this, arguments); + for (var i = 0; i < evs.length; i++) + this._year_render_event(evs[i]); + }; + + var clear = scheduler.clear_view; + scheduler.clear_view = function() { + if (!is_year_mode()) return clear.apply(this, arguments); + var dates = scheduler._year_marked_cells, + div = null; + for (var date in dates) { + if (dates.hasOwnProperty(date)) { + div = dates[date]; + div.className = "dhx_month_head"; + div.setAttribute("date", ""); + } + } + scheduler._year_marked_cells = {}; + }; + + scheduler._hideToolTip = function() { + if (this._tooltip) { + this._tooltip.style.display = "none"; + this._tooltip.date = new Date(9999, 1, 1); + } + }; + + scheduler._showToolTip = function(date, pos, e, src) { + if (this._tooltip) { + if (this._tooltip.date.valueOf() == date.valueOf()) return; + this._tooltip.innerHTML = ""; + } else { + var t = this._tooltip = document.createElement("DIV"); + t.className = "dhx_year_tooltip"; + document.body.appendChild(t); + t.onclick = scheduler._click.dhx_cal_data; + } + var evs = this.getEvents(date, this.date.add(date, 1, "day")); + var html = ""; + + for (var i = 0; i < evs.length; i++) { + var ev = evs[i]; + if(!this.filter_event(ev.id, ev)) + continue; + + var bg_color = (ev.color ? ("background:" + ev.color + ";") : ""); + var color = (ev.textColor ? ("color:" + ev.textColor + ";") : ""); + + html += "<div class='dhx_tooltip_line' style='" + bg_color + "" + color + "' event_id='" + evs[i].id + "'>"; + html += "<div class='dhx_tooltip_date' style='" + bg_color + "" + color + "'>" + (evs[i]._timed ? this.templates.event_date(evs[i].start_date) : "") + "</div>"; + html += "<div class='dhx_event_icon icon_details'> </div>"; + html += this.templates.year_tooltip(evs[i].start_date, evs[i].end_date, evs[i]) + "</div>"; + } + + this._tooltip.style.display = ""; + this._tooltip.style.top = "0px"; + + + if (document.body.offsetWidth - pos.left - this._tooltip.offsetWidth < 0) + this._tooltip.style.left = pos.left - this._tooltip.offsetWidth + "px"; + else + this._tooltip.style.left = pos.left + src.offsetWidth + "px"; + + this._tooltip.date = date; + this._tooltip.innerHTML = html; + + if (document.body.offsetHeight - pos.top - this._tooltip.offsetHeight < 0) + this._tooltip.style.top = pos.top - this._tooltip.offsetHeight + src.offsetHeight + "px"; + else + this._tooltip.style.top = pos.top + "px"; + }; + + scheduler._year_view_tooltip_handler = function(e){ + if (!is_year_mode()) return; + + var e = e || event; + var src = e.target || e.srcElement; + if (src.tagName.toLowerCase() == 'a') // fix for active links extension (it adds links to the date in the cell) + src = src.parentNode; + if ((src.className || "").indexOf("dhx_year_event") != -1) + scheduler._showToolTip(from_attr(src.getAttribute("date")), getOffset(src), e, src); + else + scheduler._hideToolTip(); + }; + scheduler._init_year_tooltip = function() { + scheduler._detachDomEvent(scheduler._els["dhx_cal_data"][0], "mouseover", scheduler._year_view_tooltip_handler); + dhtmlxEvent(scheduler._els["dhx_cal_data"][0], "mouseover", scheduler._year_view_tooltip_handler); + }; + + scheduler.attachEvent("onSchedulerResize", function() { + if (is_year_mode()) { + this.year_view(true); + return false; + } + return true; + }); + scheduler._get_year_cell = function(d) { + //there can be more than 1 year in view + //year can start not from January + var m = d.getMonth() + 12 * (d.getFullYear() - this._min_date.getFullYear()) - this.week_starts._month; + var t = this._els["dhx_cal_data"][0].childNodes[m]; + var d = this.week_starts[m] + d.getDate() - 1; + + + return t.childNodes[2].firstChild.rows[Math.floor(d / 7)].cells[d % 7].firstChild; + }; + + scheduler._year_marked_cells = {}; + scheduler._mark_year_date = function(d, ev) { + var date = to_attr(d); + var c = this._get_year_cell(d); + var ev_class = this.templates.event_class(ev.start_date, ev.end_date, ev); + if (!scheduler._year_marked_cells[date]) { + c.className = "dhx_month_head dhx_year_event"; + c.setAttribute("date", date); + scheduler._year_marked_cells[date] = c; + } + c.className += (ev_class) ? (" "+ev_class) : ""; + }; + scheduler._unmark_year_date = function(d) { + this._get_year_cell(d).className = "dhx_month_head"; + }; + scheduler._year_render_event = function(ev) { + var d = ev.start_date; + if (d.valueOf() < this._min_date.valueOf()) + d = this._min_date; + else d = this.date.date_part(new Date(d)); + + while (d < ev.end_date) { + this._mark_year_date(d, ev); + d = this.date.add(d, 1, "day"); + if (d.valueOf() >= this._max_date.valueOf()) + return; + } + }; + + scheduler.year_view = function(mode) { + var temp; + if (mode) { + temp = scheduler.xy.scale_height; + scheduler.xy.scale_height = -1; + } + + scheduler._els["dhx_cal_header"][0].style.display = mode ? "none" : ""; + scheduler.set_sizes(); + + if (mode) + scheduler.xy.scale_height = temp; + + + scheduler._table_view = mode; + if (this._load_mode && this._load()) return; + + if (mode) { + scheduler._init_year_tooltip(); + scheduler._reset_year_scale(); + if (scheduler._load_mode && scheduler._load()){ + scheduler._render_wait = true; + return; + } + scheduler.render_view_data(); + } else { + scheduler._hideToolTip(); + } + }; + scheduler._reset_year_scale = function() { + this._cols = []; + this._colsS = {}; + var week_starts = []; //start day of first week in each month + var b = this._els["dhx_cal_data"][0]; + + var c = this.config; + b.scrollTop = 0; //fix flickering in FF + b.innerHTML = ""; + + var dx = Math.floor(parseInt(b.style.width) / c.year_x); + var dy = Math.floor((parseInt(b.style.height) - scheduler.xy.year_top) / c.year_y); + if (dy < 190) { + dy = 190; + dx = Math.floor((parseInt(b.style.width) - scheduler.xy.scroll_width) / c.year_x); + } + + var summ = dx - 11; + var left = 0; + var week_template = document.createElement("div"); + var dummy_date = this.date.week_start(scheduler._currentDate()); + for (var i = 0; i < 7; i++) { + this._cols[i] = Math.floor(summ / (7 - i)); + this._render_x_header(i, left, dummy_date, week_template); + dummy_date = this.date.add(dummy_date, 1, "day"); + summ -= this._cols[i]; + left += this._cols[i]; + } + week_template.lastChild.className += " dhx_scale_bar_last"; + + var sd = this.date[this._mode + "_start"](this.date.copy(this._date)); + var ssd = sd; + var d = null; + for (var i = 0; i < c.year_y; i++) + for (var j = 0; j < c.year_x; j++) { + d = document.createElement("DIV"); + d.style.cssText = "position:absolute;"; + d.setAttribute("date", this.templates.xml_format(sd)); + d.innerHTML = "<div class='dhx_year_month'></div><div class='dhx_year_week'>" + week_template.innerHTML + "</div><div class='dhx_year_body'></div>"; + d.childNodes[0].innerHTML = this.templates.year_month(sd); + + var dd = this.date.week_start(sd); + var ed = this._reset_month_scale(d.childNodes[2], sd, dd); + + var r = d.childNodes[2].firstChild.rows; + for (var k=r.length; k<6; k++) { + r[0].parentNode.appendChild(r[0].cloneNode(true)); + for (var ri= 0, len = r[k].childNodes.length; ri < len; ri++) { + r[k].childNodes[ri].className = "dhx_after"; + r[k].childNodes[ri].firstChild.innerHTML = scheduler.templates.month_day(ed); + ed = scheduler.date.add(ed,1,"day"); + } + } + b.appendChild(d); + + d.childNodes[1].style.height = d.childNodes[1].childNodes[0].offsetHeight + "px"; // dhx_year_week should have height property so that day dates would get correct position. dhx_year_week height = height of it's child (with the day name) + var dt = Math.round((dy - 190) / 2); + d.style.marginTop = dt + "px"; + this.set_xy(d, dx - 10, dy - dt - 10, dx * j + 5, dy * i + 5 + scheduler.xy.year_top); + + week_starts[i * c.year_x + j] = (sd.getDay() - (this.config.start_on_monday ? 1 : 0) + 7) % 7; + sd = this.date.add(sd, 1, "month"); + + } + this._els["dhx_cal_date"][0].innerHTML = this.templates[this._mode + "_date"](ssd, sd, this._mode); + this.week_starts = week_starts; + week_starts._month = ssd.getMonth(); + this._min_date = ssd; + this._max_date = sd; + }; + + var getActionData = scheduler.getActionData; + scheduler.getActionData = function(n_ev) { + if(!is_year_mode()) + return getActionData.apply(scheduler, arguments); + + var trg = n_ev?n_ev.target:event.srcElement; + var date = scheduler._get_year_month_date(trg); + + var day = scheduler._get_year_month_cell(trg); + var pos = scheduler._get_year_day_indexes(day); + + if(pos && date){ + date = scheduler.date.add(date, pos.week, "week"); + date = scheduler.date.add(date, pos.day, "day"); + }else{ + date = null; + } + + return { + date:date, + section:null + }; + + }; + scheduler._get_year_day_indexes = function(targetCell){ + var month = scheduler._locate_year_month_table(targetCell); + if(!month) + return null; + + var week = 0, day = 0; + for(var week = 0, weeks = month.rows.length; week < weeks;week ++){ + var w = month.rows[week].getElementsByTagName("td"); + for(var day = 0, days = w.length; day < days; day++){ + if(w[day] == targetCell) + break; + } + if(day < days) + break; + } + + if(week < weeks) + return {day:day, week:week}; + else + return null; + }; + scheduler._get_year_month_date = function (node){ + var node = scheduler._locate_year_month_root(node); + if(!node) + return null; + + var date = node.getAttribute("date"); + if(!date) + return null; + + return scheduler.date.week_start(scheduler.templates.xml_date(date)); + }; + scheduler._locate_year_month_day = function(n){ + return n.className && n.className.indexOf("dhx_year_event") != -1 && n.hasAttribute && n.hasAttribute("date"); + }; + + var locateEvent = scheduler._locate_event; + scheduler._locate_event = function(node) { + var id = locateEvent.apply(scheduler, arguments); + if(!id){ + var day = scheduler._get_year_el_node(node, scheduler._locate_year_month_day); + + if(!day || !day.hasAttribute("date")) return null; + + var dat = scheduler.templates.xml_date(day.getAttribute("date")); + var evs = scheduler.getEvents(dat, scheduler.date.add(dat, 1, "day")); + if(!evs.length) return null; + + //can be multiple events in the cell, return any single one + id = evs[0].id; + } + return id; + }; + scheduler._locate_year_month_cell = function(n){ + return n.nodeName.toLowerCase() == "td"; + }; + scheduler._locate_year_month_table = function(n){ + return n.nodeName.toLowerCase() == "table"; + }; + scheduler._locate_year_month_root = function(n){ + return n.hasAttribute && n.hasAttribute("date"); + }; + + scheduler._get_year_month_cell = function(node){ + return this._get_year_el_node(node, this._locate_year_month_cell); + }; + + scheduler._get_year_month_table = function(node){ + return this._get_year_el_node (node, this._locate_year_month_table); + }; + scheduler._get_year_month_root = function(node){ + return this._get_year_el_node(this._get_year_month_table(node), this._locate_year_month_root); + }; + scheduler._get_year_el_node = function(node, condition){ + while(node && !condition(node)){ + node = node.parentNode; + } + return node; + }; + + +})(); diff --git a/codebase/sources/ext/dhtmlxscheduler_year_view.js.map b/codebase/sources/ext/dhtmlxscheduler_year_view.js.map new file mode 100644 index 0000000..303c604 --- /dev/null +++ b/codebase/sources/ext/dhtmlxscheduler_year_view.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dhtmlxscheduler_year_view.js.map","sources":["dhtmlxscheduler_year_view.js"],"names":["scheduler","config","year_x","year_y","xy","year_top","templates","year_date","date","date_to_str","locale","labels","year_tab","year_month","year_scale_date","year_tooltip","s","e","ev","text","is_year_mode","_mode","dblclick_dhx_month_head","t","target","srcElement","parentNode","className","indexOf","start","this","xml_date","getAttribute","setDate","parseInt","innerHTML","end","add","readonly","dblclick_create","addEventNow","valueOf","chid","changeEventId","apply","arguments","year_view","old","render_data","to_attr","from_attr","str_to_date","evs","i","length","_year_render_event","clear","clear_view","dates","_year_marked_cells","div","hasOwnProperty","setAttribute","_hideToolTip","_tooltip","style","display","Date","_showToolTip","pos","src","document","createElement","body","appendChild","onclick","_click","dhx_cal_data","getEvents","html","filter_event","id","bg_color","color","textColor","_timed","event_date","start_date","end_date","top","left","offsetWidth","offsetHeight","_year_view_tooltip_handler","event","tagName","toLowerCase","getOffset","_init_year_tooltip","_detachDomEvent","_els","dhtmlxEvent","attachEvent","_get_year_cell","d","m","getMonth","getFullYear","_min_date","week_starts","_month","childNodes","getDate","firstChild","rows","Math","floor","cells","_mark_year_date","c","ev_class","event_class","_unmark_year_date","date_part","_max_date","mode","temp","scale_height","set_sizes","_table_view","_load_mode","_load","_reset_year_scale","_render_wait","render_view_data","_cols","_colsS","b","scrollTop","dx","width","dy","height","scroll_width","summ","week_template","dummy_date","week_start","_currentDate","_render_x_header","lastChild","sd","copy","_date","ssd","j","cssText","xml_format","dd","ed","_reset_month_scale","r","k","cloneNode","ri","len","month_day","dt","round","marginTop","set_xy","getDay","start_on_monday","getActionData","n_ev","trg","_get_year_month_date","day","_get_year_month_cell","_get_year_day_indexes","week","section","targetCell","month","_locate_year_month_table","weeks","w","getElementsByTagName","days","node","_locate_year_month_root","_locate_year_month_day","n","hasAttribute","locateEvent","_locate_event","_get_year_el_node","dat","_locate_year_month_cell","nodeName","_get_year_month_table","_get_year_month_root","condition"],"mappings":"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"}
\ No newline at end of file diff --git a/codebase/sources/skins/dhtmlxscheduler.css b/codebase/sources/skins/dhtmlxscheduler.css new file mode 100644 index 0000000..8c5fdb5 --- /dev/null +++ b/codebase/sources/skins/dhtmlxscheduler.css @@ -0,0 +1,2238 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +.dhtmlx_message_area { + position: fixed; + right: 5px; + width: 250px; + z-index: 1000; +} +.dhtmlx-info { + min-width: 120px; + padding: 4px 4px 4px 20px; + font-family: Tahoma; + z-index: 10000; + overflow: hidden; + margin: 5px; + margin-bottom: 10px; + -webkit-transition: all .5s ease; + -moz-transition: all .5s ease; + -o-transition: all .5s ease; + transition: all .5s ease; +} +.dhtmlx-info.hidden { + height: 0px; + padding: 0px; + border-width: 0px; + margin: 0px; + overflow: hidden; +} +.dhtmlx_modal_box { + overflow: hidden; + display: inline-block; + min-width: 300px; + width: 300px; + text-align: center; + position: fixed; + background-color: #fff; + background: -webkit-linear-gradient(top, #ffffff 1%, #d0d0d0 99%); + background: -moz-linear-gradient(top, #ffffff 1%, #d0d0d0 99%); + box-shadow: 0px 0px 14px #888; + font-family: Tahoma; + z-index: 20000; + border-radius: 6px; + border: 1px solid #ffffff; +} +.dhtmlx_popup_title { + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-width: 0px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC); + background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%); + background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%); +} +.dhtmlx-info, +.dhtmlx_popup_button, +.dhtmlx_button { + user-select: none; + -webkit-user-select: none; + -moz-user-select: -moz-none; + cursor: pointer; +} +.dhtmlx_popup_text { + overflow: hidden; +} +.dhtmlx_popup_controls { + border-radius: 6px; + padding: 5px; +} +.dhtmlx_popup_button, +.dhtmlx_button { + height: 30px; + line-height: 30px; + display: inline-block; + margin: 0 5px; + border-radius: 6px; + color: #FFF; +} +.dhtmlx_popup_button { + min-width: 120px; +} +div.dhx_modal_cover { + background-color: #000; + cursor: default; + filter: alpha(opacity=20); + opacity: 0.2; + position: fixed; + z-index: 19999; + left: 0px; + top: 0px; + width: 100%; + height: 100%; + border: none; + zoom: 1; +} +.dhtmlx-info img, +.dhtmlx_modal_box img { + float: left; + margin-right: 20px; +} +.dhtmlx-alert-error .dhtmlx_popup_title, +.dhtmlx-confirm-error .dhtmlx_popup_title { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC); +} +.dhtmlx-alert-error, +.dhtmlx-confirm-error { + border: 1px solid #ff0000; +} +/*Skin section*/ +.dhtmlx_button, +.dhtmlx_popup_button { + box-shadow: 0px 0px 4px #888; + border: 1px solid #838383; +} +.dhtmlx_button input, +.dhtmlx_popup_button div { + border: 1px solid #FFF; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=); + background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%); + background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%); + border-radius: 6px; + font-size: 15px; + font-weight: normal; + -moz-box-sizing: content-box; + box-sizing: content-box; + color: #fff; + padding: 0px; + margin: 0px; + vertical-align: top; + height: 28px; + line-height: 28px; +} +.dhtmlx_button input:focus, +.dhtmlx_button input:active, +.dhtmlx_popup_button div:active, +.dhtmlx_popup_button div:focus { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==); + background-image: -webkit-linear-gradient(top, #707070 1%, #4c4c4c 99%); + background-image: -moz-linear-gradient(top, #707070 1%, #4c4c4c 99%); +} +.dhtmlx_popup_title { + color: #fff; + text-shadow: 1px 1px #000; + height: 40px; + line-height: 40px; + font-size: 20px; +} +.dhtmlx_popup_text { + margin: 15px 15px 5px 15px; + font-size: 14px; + color: #000; + min-height: 30px; + border-radius: 6px; +} +.dhtmlx-info, +.dhtmlx-error { + font-size: 14px; + color: #000; + box-shadow: 0px 0px 10px #888; + padding: 0px; + background-color: #FFF; + border-radius: 3px; + border: 1px solid #ffffff; +} +.dhtmlx-info div { + padding: 5px 10px 5px 10px; + background-color: #fff; + border-radius: 3px; + border: 1px solid #B8B8B8; +} +.dhtmlx-error { + background-color: #d81b1b; + border: 1px solid #ff3c3c; + box-shadow: 0px 0px 10px #000; +} +.dhtmlx-error div { + background-color: #d81b1b; + border: 1px solid #940000; + color: #FFF; +} +.dhx_cal_event .dhx_header, +.dhx_cal_event .dhx_title, +.dhx_cal_event .dhx_body, +.dhx_cal_event .dhx_footer { + background-color: #FFE763; + border: 1px solid #B7A543; + color: #887A2E; + overflow: hidden; + width: 100%; + font-family: Tahoma; + font-size: 8pt; +} +.dhx_move_denied .dhx_cal_event .dhx_header, +.dhx_move_denied .dhx_cal_event .dhx_title { + cursor: default; +} +.dhx_cal_event .dhx_header { + height: 1px; + margin-left: 1px; + border-width: 1px 1px 0px 1px; + cursor: pointer; +} +.dhx_cal_event .dhx_title { + height: 12px; + border-width: 0px 1px 1px 1px; + border-bottom-style: dotted; + font-size: 7pt; + font-weight: bold; + text-align: center; + background-position: right; + background-repeat: no-repeat; + cursor: pointer; +} +.dhx_cal_event .dhx_body, +.dhx_cal_event.dhx_cal_select_menu .dhx_body { + border-width: 0 1px 1px 1px; + padding: 5px; +} +.dhx_cal_event.dhx_cal_select_menu { + -webkit-box-shadow: 0 0 1px #FFF; + -moz-box-shadow: 0 0 1px #FFF; + box-shadow: 0 0 1px #FFF; +} +.dhx_resize_denied, +.dhx_resize_denied .dhx_event_resize { + cursor: default !important; +} +.dhx_cal_event .dhx_event_resize { + cursor: s-resize; +} +.dhx_cal_event .dhx_footer, +.dhx_cal_event .dhx_select_menu_footer { + height: 1px; + margin-left: 2px; + border-width: 0px 1px 1px 1px; + position: relative; +} +.dhx_cal_event_line { + background-color: #FFE763; + border: 1px solid #B7A543; + border-radius: 3px; + font-family: Tahoma; + font-size: 8pt; + height: 13px; + padding-left: 10px; + color: #887A2E; + cursor: pointer; + overflow: hidden; +} +.dhx_cal_event_clear { + font-family: Tahoma; + font-size: 8pt; + height: 13px; + padding-left: 2px; + color: #887A2E; + white-space: nowrap; + overflow: hidden; + cursor: pointer; +} +.dhx_in_move { + background-color: #FFFF80; +} +.dhx_cal_event.dhx_cal_editor { + border: 1px solid #B7A543; + border-top-style: dotted; + z-index: 999; + position: absolute; + overflow: hidden; +} +textarea.dhx_cal_editor { + width: 100%; + height: 100%; + border: 0 solid black; + margin: 0; + padding: 0; + overflow: auto; +} +div.dhx_menu_head { + background-image: url(imgs/controls.gif); + background-position: 0px -43px; + width: 10px; + height: 10px; + margin-left: 5px; + margin-top: 1px; + border: none; + cursor: default; +} +div.dhx_menu_icon { + background-image: url(imgs/controls.gif); + width: 20px; + height: 20px; + margin-left: -5px; + margin-top: 0px; + border: none; + cursor: pointer; +} +div.icon_details { + background-position: 0px 0px; +} +div.icon_edit { + background-position: -22px 0px; +} +div.icon_save { + background-position: -84px -1px; +} +div.icon_cancel { + background-position: -62px 0px; +} +div.icon_delete { + background-position: -42px 0px; +} +/*view more link in month view*/ +.dhx_month_link { + position: absolute; + box-sizing: border-box; + -moz-box-sizing: border-box; + text-align: right; + cursor: pointer; + padding-right: 10px; +} +.dhx_month_link a { + color: blue; +} +.dhx_month_link a:hover { + text-decoration: underline; +} +.dhx_global_tip { + font-family: Tahoma, Helvetica; + text-align: center; + font-size: 20px; + position: fixed; + top: 60px; + right: 20px; + background-color: rgba(255, 255, 255, 0.7); + color: #000; + z-index: 10000; + padding: 20px 30px; + width: 190px; +} +.dhx_global_tip div { + font-size: 30px; +} +@media (-moz-touch-enabled) { + .dhx_cal_container { + user-select: none; + -moz-user-select: none; + } +} +.dhx_unselectable, +.dhx_unselectable div { + -webkit-user-select: none; + -moz-user-select: none; + -moz-user-select: -moz-none; +} +.dhx_cal_light { + -webkit-tap-highlight-color: transparent; + background-color: #FFE763; + border-radius: 5px; + font-family: Tahoma; + font-size: 8pt; + border: 1px solid #B7A64B; + color: #887A2E; + position: absolute; + z-index: 10001; + width: 580px; + height: 300px; + box-shadow: 5px 5px 5px #888; +} +.dhx_cal_light_wide { + width: 650px; +} +.dhx_mark { + position: relative; + top: 3px; + background-image: url('imgs/controls.gif'); + background-position: 0px -43px; + padding-left: 10px; +} +.dhx_ie6 .dhx_mark { + background-position: 6px -41px; +} +.dhx_cal_light select { + font-family: Tahoma; + font-size: 8pt; + color: #887A2E; + padding: 2px; + margin: 0px; +} +.dhx_cal_ltitle { + padding: 2px 0px 2px 5px; + overflow: hidden; + white-space: nowrap; +} +.dhx_cal_ltitle span { + white-space: nowrap; +} +.dhx_cal_lsection { + background-color: #DBCF8C; + color: #FFF4B5; + font-weight: bold; + padding: 5px 0px 3px 10px; +} +.dhx_section_time { + background-color: #DBCF8C; + white-space: nowrap; +} +.dhx_cal_lsection .dhx_fullday { + float: right; + margin-right: 5px; + color: #887A2E; + font-size: 12px; + font-weight: normal; + line-height: 20px; + vertical-align: top; + cursor: pointer; +} +.dhx_cal_lsection { + font-size: 18px; + font-family: Arial; +} +.dhx_cal_ltext { + padding: 2px 0px 2px 10px; + overflow: hidden; +} +.dhx_cal_ltext textarea { + background-color: #FFF4B5; + /* #FFF4B5; should be the same for dhx_cal_larea, was transperent */ + overflow: auto; + border: none; + color: #887A2E; + height: 100%; + width: 100%; + outline: none !important; + resize: none; +} +.dhx_time { + font-weight: bold; +} +.dhx_cal_light .dhx_title { + padding-left: 10px; +} +.dhx_cal_larea { + border: 1px solid #DCC43E; + background-color: #FFF4B5; + overflow: hidden; + margin-left: 3px; + width: 572px; + height: 1px; +} +.dhx_btn_set { + padding: 5px 10px 0px 10px; + float: left; +} +.dhx_btn_set div { + float: left; + height: 21px; + line-height: 21px; + vertical-align: middle; + cursor: pointer; +} +.dhx_save_btn { + background-image: url('imgs/controls.gif'); + background-position: -84px 0px; + width: 21px; +} +.dhx_cancel_btn { + background-image: url('imgs/controls.gif'); + background-position: -63px 0px; + width: 20px; +} +.dhx_delete_btn { + background-image: url('imgs/controls.gif'); + background-position: -42px 0px; + width: 20px; +} +.dhx_cal_cover { + width: 100%; + height: 100%; + position: absolute; + z-index: 10000; + top: 0px; + left: 0px; + background-color: black; + opacity: 0.1; + filter: alpha(opacity=10); +} +.dhx_custom_button { + padding: 0px 3px 0px 3px; + color: #887A2E; + font-family: Tahoma; + font-size: 8pt; + background-color: #FFE763; + font-weight: normal; + margin-right: 5px; + margin-top: 0px; + cursor: pointer; +} +.dhx_custom_button div { + cursor: pointer; + float: left; + height: 21px; + line-height: 21px; + vertical-align: middle; +} +.dhx_cal_light_wide .dhx_cal_larea { + border-top-width: 0px; +} +.dhx_cal_light_wide .dhx_cal_lsection { + border: 0px; + float: left; + text-align: right; + width: 100px; + height: 20px; + font-size: 16px; + padding: 5px 0px 0px 10px; +} +.dhx_cal_light_wide .dhx_wrap_section { + border-top: 1px solid #DBCF8C; + position: relative; + background-color: #DBCF8C; + overflow: hidden; +} +.dhx_cal_light_wide .dhx_section_time { + padding-top: 2px !important; + height: 20px !important; +} +.dhx_section_time { + text-align: center; +} +.dhx_cal_light_wide .dhx_cal_larea { + width: 730px; +} +.dhx_cal_light_wide { + width: 738px; +} +.dhx_cal_light_wide .dhx_section_time { + background: transparent; +} +.dhx_cal_light_wide .dhx_cal_checkbox label { + padding-left: 0px; +} +.dhx_cal_wide_checkbox input { + margin-top: 8px; + margin-left: 14px; +} +.dhx_cal_light input { + font-family: Tahoma; + font-size: 8pt; + color: #887A2E; +} +.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday { + float: none; + margin-right: 0px; + color: #FFF4B5; + font-weight: bold; + font-size: 16px; + font-family: Arial; + cursor: pointer; +} +.dhx_custom_button { + float: right; + height: 21px; + width: 90px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +.dhx_cal_light_wide .dhx_custom_button { + position: absolute; + top: 0; + right: 0; + margin-top: 2px; +} +.dhx_cal_light_wide .dhx_repeat_right { + margin-right: 55px; +} +.dhx_minical_popup { + position: absolute; + z-index: 10100; + width: 251px; + height: 175px; +} +.dhx_scale_bar_header { + position: absolute; + border-bottom: 1px dotted #8894A3; + width: 100%; +} +.dhx_expand_icon { + position: absolute; + top: 0px; + right: 0px; + background-image: url(imgs/collapse_expand_icon.gif); + width: 18px; + height: 18px; + cursor: pointer; + background-position: 0px 18px; + z-index: 16; +} +.dhx_scheduler_agenda .dhx_cal_data { + background-image: url(imgs/databg.png); +} +.dhx_agenda_area { + width: 100%; + overflow-y: auto; + background-image: url(imgs/databg.png); +} +.dhx_agenda_line { + height: 21px; + clear: both; + overflow: hidden; +} +.dhx_agenda_line div { + float: left; + width: 188px; + border-right: 1px dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_agenda_area .dhx_agenda_line div { + border-right: 0px dotted #8894A3; +} +.dhx_v_border { + position: absolute; + left: 187px; + top: 0; + border-right: 1px dotted #8894A3; + width: 1px; + height: 100%; +} +.dhx_agenda_line .dhx_event_icon { + width: 20px; + border-width: 0px; + background: url(imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor: pointer; +} +.dhx_agenda_line span { + padding-left: 5px; + line-height: 21px; +} +.dhx_year_body { + border-left: 1px dotted #586A7E; +} +.dhx_year_week { + position: relative; +} +.dhx_scale_bar_last { + border-right: 1px dotted #586A7E; +} +.dhx_year_month { + height: 18px; + padding-top: 3px; + border: 1px dotted #586A7E; + text-align: center; + vertical-align: middle; +} +.dhx_year_body .dhx_before .dhx_month_head, +.dhx_year_body .dhx_after .dhx_month_head, +.dhx_year_body .dhx_before .dhx_month_head a, +.dhx_year_body .dhx_after .dhx_month_head a { + color: #E2E3E6 !important; +} +.dhx_year_body .dhx_month_body { + height: 0px; + overflow: hidden; +} +.dhx_month_head.dhx_year_event { + background-color: #FFE763; +} +.dhx_year_body .dhx_before .dhx_month_head, +.dhx_year_body .dhx_after .dhx_month_head { + cursor: default; +} +.dhx_year_tooltip { + border: 1px solid #BBBBBB; + background-image: url(imgs/databg.png); + position: absolute; + z-index: 9998; + width: 300px; + height: auto; + font-family: Tahoma; + font-size: 8pt; + overflow: hidden; +} +.dhx_tooltip_line { + line-height: 20px; + height: 20px; + overflow: hidden; +} +.dhx_tooltip_line .dhx_event_icon { + width: 20px; + height: 20px; + padding-right: 10px; + float: left; + border-width: 0px; + position: relative; + background: url(imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor: pointer; +} +.dhx_tooltip_date { + float: left; + width: auto; + padding-left: 5px; + text-align: center; +} +.dhx_text_disabled { + color: #887A2E; + font-family: Tahoma; + font-size: 8pt; +} +.dhx_mini_calendar { + -moz-box-shadow: 5px 5px 5px #888; + /*Doesn't work in IE*/ + -khtml-box-shadow: 5px 5px 5px #888; + -moz-user-select: -moz-none; + -webkit-user-select: none; + -user-select: none; +} +.dhx_mini_calendar .dhx_month_head { + cursor: pointer; +} +.dhx_mini_calendar .dhx_calendar_click { + background-color: #C2D5FC; +} +.dhx_cal_navline div.dhx_minical_icon { + width: 18px; + height: 18px; + left: 190px; + top: 1px; + cursor: pointer; + background-image: url(imgs/calendar.gif); +} +.dhx_matrix_scell { + height: 100%; +} +.dhx_matrix_cell, +.dhx_matrix_scell { + overflow: hidden; + text-align: center; + vertical-align: middle; + border-bottom: 1px dotted #8894A3; + border-right: 1px dotted #8894A3; +} +.dhx_matrix_cell { + background-color: white; +} +.dhx_matrix_line { + overflow: hidden; +} +.dhx_matrix_cell div, +.dhx_matrix_scell div { + overflow: hidden; + text-align: center; + height: auto; +} +.dhx_cal_lsection .dhx_readonly { + font-size: 9pt; + font-size: 8pt; + padding: 2px; + color: #887A2E; +} +.dhx_cal_event_line .dhx_event_resize { + cursor: w-resize; + background: url(imgs/resize_dots.png) repeat-y; + position: absolute; + top: 0; + width: 4px; + height: 100%; +} +.dhx_event_resize_start { + left: 0; +} +.dhx_event_resize_end { + right: 0; +} +/* Tree view */ +.dhx_matrix_scell.folder, +.dhx_data_table.folder .dhx_matrix_cell { + background-color: #969394; + cursor: pointer; +} +.dhx_matrix_scell .dhx_scell_level0 { + padding-left: 5px; +} +.dhx_matrix_scell .dhx_scell_level1 { + padding-left: 20px; +} +.dhx_matrix_scell .dhx_scell_level2 { + padding-left: 35px; +} +.dhx_matrix_scell .dhx_scell_level3 { + padding-left: 50px; +} +.dhx_matrix_scell .dhx_scell_level4 { + padding-left: 65px; +} +.dhx_matrix_scell.folder { + font-weight: bold; + text-align: left; +} +.dhx_matrix_scell.folder .dhx_scell_expand { + float: left; + width: 10px; + padding-right: 3px; +} +.dhx_matrix_scell.folder .dhx_scell_name { + float: left; + width: auto; +} +.dhx_matrix_scell.item .dhx_scell_name { + padding-left: 15px; + text-align: left; +} +.dhx_data_table.folder .dhx_matrix_cell { + border-right: 0; +} +.dhx_section_timeline { + overflow: hidden; + padding: 4px 0 2px 10px; +} +.dhx_section_timeline select { + width: 552px; +} +/* Tree view end*/ +/* Map view */ +.dhx_map_area { + width: 100%; + height: 100%; + overflow-y: auto; + overflow-x: hidden; + background-image: url(imgs/databg.png); +} +.dhx_map_line .dhx_event_icon { + width: 20px; + border-width: 0px; + background: url(imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor: pointer; +} +.dhx_map_line { + height: 21px; + clear: both; + overflow: hidden; +} +.dhx_map { + position: absolute; +} +.dhx_map_line div { + float: left; + border-right: 1px dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line .headline_description { + float: left; + border-right: 1px dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line .dhx_map_description { + float: left; + border-right: 0 dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line .headline_date, +.dhx_map_line .headline_description { + border-left: 0; +} +.dhx_map_line .line_description { + float: left; + border-right: 1px dotted #8894A3; + text-align: left; + padding-left: 5px; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line.highlight { + background-color: #C4C5CC; +} +.dhx_map_area .dhx_map_line div { + border-right: 0px dotted #8894A3; +} +/* Map view end */ +/* dhtmlXTooltip start */ +.dhtmlXTooltip.tooltip { + -moz-box-shadow: 3px 3px 3px #888888; + -webkit-box-shadow: 3px 3px 3px #888888; + -o-box-shadow: 3px 3px 3px #888888; + box-shadow: 3px 3px 3px #888888; + filter: progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5); + background-color: white; + border-left: 1px dotted #887A2E; + border-top: 1px dotted #887A2E; + color: #887A2E; + cursor: default; + padding: 10px; + position: absolute; + z-index: 500; + font-family: Tahoma; + font-size: 8pt; + opacity: 1; +} +/* dhtmlXTooltip end */ +/* Lightbox checkbox section */ +.dhx_cal_checkbox label { + padding-left: 5px; +} +/* Lightbox checkbox section end */ +/* Lightbox radiobuttons section */ +.dhx_cal_light .radio { + padding: 2px 0px 2px 10px; +} +.dhx_cal_light .radio input, +.dhx_cal_light .radio label { + line-height: 15px; +} +.dhx_cal_light .radio input { + vertical-align: middle; + margin: 0px; + padding: 0px; +} +.dhx_cal_light .radio label { + vertical-align: middle; + padding-right: 10px; +} +/* Lightbox radiobuttons section end */ +/* Lightbox dhtmlx combo section */ +.dhx_cal_light .combo { + padding: 4px; +} +.dhx_cal_light_wide .dhx_combo_box { + width: 608px !important; + left: 10px; +} +/* Lightbox dhtmlx combo section end */ +/* Agenda week start */ +.dhx_wa_column { + float: left; +} +.dhx_wa_column_last .dhx_wa_day_cont { + border-left: 1px dotted #8894A3; +} +.dhx_wa_scale_bar { + font-family: Tahoma; + padding-left: 10px; + font-size: 11px; + border-top: 1px dotted #8894A3; + border-bottom: 1px dotted #8894A3; +} +.dhx_wa_day_data { + background-color: #FCFEFC; + overflow-y: auto; +} +.dhx_wa_ev_body { + border-bottom: 1px dotted #778899; + font-size: 12px; + padding: 5px 0 5px 7px; +} +.dhx_wa_dnd { + font-family: Tahoma; + position: absolute; + padding-right: 7px; + color: #887AE2 !important; + background-color: #FFE763 !important; + border: 1px solid #B7A543; +} +.dhx_cal_event_selected { + background-color: #9cc1db; + color: white; +} +/* Agenda week end */ +/* timeline second scale start */ +.dhx_second_scale_bar { + border-bottom: 1px dotted #586A7E; + padding-top: 2px; +} +/* timeline second scale end */ +/* grid view */ +.dhx_cal_header div div { + border-left: 1px dotted #8894A3; +} +.dhx_grid_area { + width: 100%; + height: 100%; + overflow-y: auto; + background-color: #FCFEFC; +} +.dhx_grid_area table { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + table-layout: fixed; +} +.dhx_grid_area td { + table-layout: fixed; + text-align: center; +} +.dhx_grid_line { + height: 21px; + clear: both; + overflow: hidden; +} +.dhx_grid_line div { + float: left; + cursor: default; + padding-top: 0; + padding-bottom: 0; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_grid_area td, +.dhx_grid_line div { + padding-left: 8px; + padding-right: 8px; +} +.dhx_grid_area tr.dhx_grid_event { + height: 21px; + overflow: hidden; + margin: 0 0 1px 0; +} +.dhx_grid_area tr.dhx_grid_event td { + /*borders for old ies*/ + border-bottom: 1px solid #ECEEF4; +} +.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td, +.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td { + border-bottom-width: 0px; + border-bottom-style: none; +} +.dhx_grid_area tr.dhx_grid_event:nth-child(2n) { + background-color: #ECEEF4; +} +.dhx_grid_area .dhx_grid_dummy { + table-layout: auto; + margin: 0 !important; + padding: 0 !important; +} +.dhx_grid_v_border { + position: absolute; + border-right: 1px solid #A4BED4; + width: 1px; + height: 100%; +} +.dhx_grid_event_selected { + background-color: #9cc1db !important; + color: white !important; +} +.dhx_grid_sort_desc .dhx_grid_view_sort { + background-position: 0 -55px; +} +.dhx_grid_sort_asc .dhx_grid_view_sort { + background-position: 0 -66px; +} +.dhx_grid_view_sort { + width: 10px; + height: 10px; + position: absolute; + border: none !important; + top: 5px; + background-repeat: no-repeat; + background-image: url(imgs/images.png); +} +/* end grid */ +/* marked timespans */ +.dhx_marked_timespan { + position: absolute; + width: 100%; +} +.dhx_time_block { + position: absolute; + width: 100%; + background: silver; + opacity: 0.4; + filter: alpha(opacity=40); + z-index: 1; +} +.dhx_time_block_reset { + opacity: 1; + filter: alpha(opacity=100); +} +.dhx_scheduler_month .dhx_marked_timespan { + display: none; +} +.dhx_mini_calendar .dhx_marked_timespan { + display: none; +} +/* now time */ +.dhx_now_time { + width: 100%; + border-bottom: 2px solid red; + z-index: 1; +} +.dhx_scheduler_month .dhx_now_time { + border-bottom: 0; + border-left: 2px solid red; +} +.dhx_matrix_now_time { + border-left: 2px solid red; + z-index: 1; +} +.dhx_now_time, +.dhx_matrix_now_time { + opacity: 0.5; +} +/* Quick info */ +.dhx_cal_quick_info { + border: 2px solid #888; + border-radius: 5px; + position: absolute; + z-index: 300; + background-color: #8e99ae; + background-color: rgba(98, 107, 127, 0.5); + padding-left: 7px; + width: 300px; + transition: left 0.5s ease, right 0.5s; + -moz-transition: left 0.5s ease, right 0.5s; + -webkit-transition: left 0.5s ease, right 0.5s; + -o-transition: left 0.5s ease, right 0.5s; +} +.dhx_no_animate { + transition: none; + -moz-transition: none; + -webkit-transition: none; + -o-transition: none; +} +.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon { + float: right; +} +.dhx_cal_qi_title { + padding: 5px 0px 10px 5px; + color: #FFF; + letter-spacing: 1px; +} +.dhx_cal_qi_tdate { + font-size: 14px; +} +.dhx_cal_qi_tcontent { + font-size: 18px; + font-weight: bold; +} +.dhx_cal_qi_content { + border: 1px solid #888; + background-color: #fefefe; + padding: 16px 8px; + font-size: 14px; + color: #444; + width: 275px; + overflow: hidden; +} +.dhx_qi_big_icon { + border-radius: 3px; + color: #444; + margin: 5px 9px 5px 0px; + min-width: 60px; + line-height: 20px; + vertical-align: middle; + padding: 5px 10px 5px 5px; + cursor: pointer; + background-color: #fefefe; + border-bottom: 1px solid #666; + border-right: 1px solid #666; + float: left; +} +.dhx_cal_qi_controls div { + float: left; + height: 20px; + text-align: center; + line-height: 20px; +} +.dhx_qi_big_icon .dhx_menu_icon { + margin: 0 8px 0 0px; +} +.dhx_drag_marker { + width: 100%; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; + background-color: #FFE763; + position: absolute; + box-sizing: border-box !important; + border-top: 1px solid #B6B6B6; + border-bottom: 1px solid #b6b6b6; +} +/* bootstrap CSS fix start */ +.dhx_cal_navline div, +.dhx_cal_header, +.dhx_cal_header div, +.dhx_cal_data div, +.dhx_cal_light, +.dhx_cal_light div { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.dhx_cal_light .dhx_cal_radio label { + margin-bottom: 0; +} +.dhx_cal_event div { + line-height: normal; +} +/* bootstrap CSS fix end */ +.dhx_cal_container { + background-color: #C2D5FC; + font-family: Tahoma; + font-size: 8pt; + position: relative; + overflow: hidden; +} +.dhx_cal_container div { + -moz-user-select: none; + -moz-user-select: -moz-none; +} +.dhx_cal_navline { + height: 20px; + position: absolute; + z-index: 3; + width: 750px; + color: #2F3A48; +} +.dhx_cal_navline div { + position: absolute; + top: 2px; + white-space: nowrap; +} +.dhx_cal_navline .dhx_cal_date { + font-weight: 600; + left: 210px; + padding-top: 1px; +} +.dhx_cal_button .dhx_left_bg { + width: 1px; + overflow: hidden; + height: 17px; + z-index: 20; + top: 0px; +} +.dhx_cal_prev_button { + background-image: url(imgs/buttons.png); + background-position: 0px 0px; + width: 29px; + height: 17px; + left: 50px; + cursor: pointer; +} +.dhx_cal_next_button { + background-image: url(imgs/buttons.png); + background-position: -30px 0px; + width: 29px; + height: 17px; + left: 80px; + cursor: pointer; +} +.dhx_cal_today_button { + background-image: url(imgs/buttons.png); + background-position: -60px 0px; + width: 75px; + height: 17px; + left: 112px; + cursor: pointer; + text-align: center; + text-decoration: underline; +} +.dhx_cal_tab { + width: 59px; + height: 19px; + text-align: center; + text-decoration: underline; + padding-top: 2px; + cursor: pointer; + background-color: #D8E1EA; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.dhx_cal_tab.active { + text-decoration: none; + cursor: default; + font-weight: bold; + border: 1px dotted #586A7E; + border-bottom: 0; + background-color: #C2D5FC; +} +.dhx_cal_header { + position: absolute; + left: 10px; + top: 23px; + width: 750px; + border-top: 1px dotted #8894A3; + border-right: 1px dotted #8894A3; + z-index: 2; + overflow: hidden; + color: #2F3A48; +} +.dhx_cal_data { + -webkit-tap-highlight-color: transparent; + border-top: 1px dotted #8894A3; + position: absolute; + top: 44px; + width: 600px; + overflow-y: auto; + overflow-x: hidden; + -webkit-overflow-scrolling: touch; +} +.dhx_cal_data { + -ms-touch-action: pan-y; +} +.dhx_cal_event, +.dhx_cal_event_line, +.dhx_cal_event_clear { + -ms-touch-action: none; +} +.dhx_scale_bar { + position: absolute; + text-align: center; + background-color: #C2D5FC; + padding-top: 3px; + border-left: 1px dotted #586A7E; +} +.dhx_scale_holder { + position: absolute; + border-right: 1px dotted #586A7E; + background-image: url(imgs/databg.png); +} +.dhx_scale_holder_now { + position: absolute; + border-right: 1px dotted #586A7E; + background-image: url(imgs/databg_now.png); +} +.dhx_scale_hour { + height: 41px; + width: 50px; + border-bottom: 1px dotted #8894A3; + background-color: #C2D5FC; + text-align: center; + line-height: 40px; + color: #586A7E; + overflow: hidden; +} +.dhx_month_head { + background-color: #EBEFF4; + color: #2F3A48; + height: 18px; + padding-right: 5px; + padding-top: 3px; + text-align: right; + border-right: 1px dotted #586A7E; +} +.dhx_month_body { + border-right: 1px dotted #586A7E; + border-bottom: 1px dotted #586A7E; + background-color: #FFFFFF; +} +.dhx_now .dhx_month_body { + background-color: #E2EDFF; +} +.dhx_after .dhx_month_body, +.dhx_before .dhx_month_body { + background-color: #ECECEC; +} +.dhx_after .dhx_month_head, +.dhx_before .dhx_month_head { + background-color: #E2E3E6; + color: #94A6BB; +} +.dhx_now .dhx_month_head { + background-color: #D1DEF4; + font-weight: bold; +} +.dhx_scale_ignore { + display: none; +} +.dhx_cal_drag { + position: absolute; + z-index: 9999; + background-color: #FFE763; + border: 1px solid #B7A543; + opacity: 0.5; + filter: alpha(opacity=50); +} +.dhx_loading { + position: absolute; + width: 128px; + height: 15px; + background-image: url(imgs/loading.gif); + z-index: 9999; +} +.dhx_multi_day_icon, +.dhx_multi_day { + background-color: #E1E6FF; + background-repeat: no-repeat; + border-right: 1px dotted #8894A3; +} +.dhx_multi_day { + position: absolute; + border-top: 1px dotted #8894A3; +} +.dhx_multi_day_icon, +.dhx_multi_day_icon_small { + background-position: center center; + background-color: #E1E6FF; + background-repeat: no-repeat; + border-bottom: 1px dotted #8894A3; + border-right: 1px dotted #8894A3; +} +.dhx_multi_day_icon { + background-image: url(imgs/clock_big.gif); +} +.dhx_multi_day_icon_small { + background-image: url(imgs/clock_small.gif); +} +.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container { + background-color: #d0e5ff; +} +/* left border config option support */ +.dhx_scale_hour_border, +.dhx_month_body_border, +.dhx_scale_bar_border, +.dhx_month_head_border { + border-left: 1px dotted #8894A3; +} +/* export to PDF and iCal buttons start */ +.dhx_cal_navline .dhx_cal_export { + width: 18px; + height: 18px; + margin: 2px; + cursor: pointer; + top: 0px; +} +.dhx_cal_navline .dhx_cal_export.pdf { + left: 2px; + background-image: url('imgs/export_pdf.png'); +} +.dhx_cal_navline .dhx_cal_export.ical { + left: 24px; + background-image: url('imgs/export_ical.png'); +} +/* export to PDF and iCal buttons end */ +/*All*/ +.dhx_form_repeat, +.dhx_form_repeat input { + padding: 0; + margin: 0; + padding-left: 5px; + font-family: Tahoma, Verdana; + font-size: 11px; + line-height: 24px; +} +.dhx_form_repeat { + overflow: hidden; + /*height:115px;*/ + height: 0px; + background-color: #FFF4B5; + /*border: 1px solid #DCC43E;*/ +} +.dhx_cal_light_wide .dhx_form_repeat { + background-color: transparent; +} +.dhx_repeat_center, +.dhx_repeat_left { + height: 115px; + padding: 10px 0 10px 10px; + float: left; +} +.dhx_repeat_left { + width: 95px; +} +.dhx_repeat_center { + width: 335px; + margin-top: 12px; +} +.dhx_repeat_divider { + float: left; + height: 115px; + border-left: 1px dotted #DCC43E; + /*background-color: #DCC43E;*/ + width: 1px; +} +.dhx_repeat_right { + float: right; + height: 115px; + width: 160px; + padding: 10px 3px 10px 10px; + margin-top: 7px; +} +input.dhx_repeat_text { + height: 16px; + width: 27px; + margin: 0 4px 0 4px; + line-height: 18px; + padding: 0 0 0 2px; +} +.dhx_form_repeat select { + height: 20px; + width: 87px; + padding: 0 0 0 2px; + margin: 0 4px 0 4px; +} +input.dhx_repeat_date { + height: 18px; + width: 80px; + padding: 0 0 0 2px; + margin: 0 4px 0 4px; + background-repeat: no-repeat; + background-position: 64px 0; + border: 1px #7f9db9 solid; + line-height: 18px; +} +input.dhx_repeat_radio { + margin-right: 4px; +} +input.dhx_repeat_checkbox { + margin: 4px 4px 0 0; +} +.dhx_repeat_days td { + padding-right: 5px; +} +.dhx_repeat_days label { + font-size: 10px; +} +.dhx_custom_button { + width: 90px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +.dhx_custom_button_recurring { + background-image: url(imgs/but_repeat.gif); + background-position: -5px 20px; + width: 20px; + margin-right: 10px; +} +/* increase width of lightbox */ +.dhx_cal_light_rec { + width: 640px; +} +.dhx_cal_light_rec .dhx_cal_larea { + width: 632px; +} +.dhx_cal_light_rec.dhx_cal_light_wide { + width: 816px; +} +.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea { + width: 808px; +} +/* bootstrap CSS fix */ +.dhx_cal_navline div, +.dhx_cal_header, +.dhx_cal_header div, +.dhx_cal_data div { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.dhx_cal_event div { + line-height: normal; +} +/* event start */ +.dhx_cal_event .dhx_title { + border-width: 1px 1px 0 1px; + padding-top: 1px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + font-family: arial; + font-weight: bold; + font-size: 12px; + line-height: 12px; +} +.dhx_cal_event .dhx_body, +.dhx_cal_event.dhx_cal_select_menu .dhx_body { + padding-bottom: 8px; + -webkit-border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.dhx_cal_event .dhx_header, +.dhx_cal_event.dhx_cal_select_menu .dhx_footer { + display: none; +} +.dhx_cal_event .dhx_footer { + height: 5px; + border: 0; + margin-top: -6px; + background: url(imgs_dhx_terrace/resizing.png) no-repeat center center; +} +.dhx_cal_event .dhx_header, +.dhx_cal_event .dhx_footer, +.dhx_cal_event .dhx_body, +.dhx_cal_event .dhx_title { + background-color: #1796b0; + border-color: transparent; + color: white; +} +.dhx_cal_event.dhx_cal_editor { + border: 1px solid transparent; +} +.dhx_cal_editor { + font-size: 12px; + font-family: Arial, sans-serif; +} +div.dhx_menu_head, +div.dhx_menu_icon { + background-image: url(imgs_dhx_terrace/controls.png); +} +.dhx_cal_event_line { + border: 1px solid transparent; + background-color: #1796b0; + color: white; + height: 17px; + line-height: 17px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +.dhx_cal_event_line_start { + -webkit-border-top-left-radius: 9px; + -webkit-border-bottom-left-radius: 9px; + -moz-border-radius-topleft: 9px; + -moz-border-radius-bottomleft: 9px; + border-top-left-radius: 9px; + border-bottom-left-radius: 9px; +} +.dhx_cal_event_line_end { + -webkit-border-top-right-radius: 9px; + -webkit-border-bottom-right-radius: 9px; + -moz-border-radius-topright: 9px; + -moz-border-radius-bottomright: 9px; + border-top-right-radius: 9px; + border-bottom-right-radius: 9px; +} +.dhx_cal_event .dhx_body, +.dhx_cal_event_line { + font-size: 12px; + font-family: Arial, sans-serif; +} +/* event end */ +/* scales, containers start */ +.dhx_cal_container { + background-color: white; +} +.dhx_cal_data { + border-top: 1px solid #CECECE; +} +.dhx_scale_holder { + background-image: url(imgs_dhx_terrace/databg.png); + border-right: 1px solid #CECECE; +} +.dhx_scale_holder_now { + background-image: url(imgs_dhx_terrace/databg_now.png); + border-right: 1px solid #CECECE; +} +.dhx_scale_hour { + border-bottom: 1px solid #CECECE; + background-color: white; + font: 11px/44px Arial; + color: #767676; +} +.dhx_cal_header { + border: 1px solid #CECECE; + border-left: 0; + border-bottom: 0; +} +.dhx_scale_bar { + border-left: 1px solid #CECECE; +} +.dhx_scale_bar { + font: 11px/16px Arial; + color: #767676; + padding-top: 2px; + background-color: white; +} +/* scales, containers end */ +/* navigation start */ +.dhx_cal_navline div { + top: 14px; +} +.dhx_cal_tab, +.dhx_cal_date, +.dhx_cal_today_button, +.dhx_cal_prev_button, +.dhx_cal_next_button { + color: #454544; + height: 30px; + line-height: 30px; + background: none; + border: 1px solid #CECECE; +} +.dhx_cal_navline .dhx_cal_date { + border: 0; + font-size: 18px; + font-weight: normal; + font-family: arial; + width: 100%; + top: 14px; + text-align: center; + position: absolute; + left: 0; + z-index: -1; +} +.dhx_cal_today_button { + color: #747473; + left: auto; + right: 123px; + background: none; + text-decoration: none; + width: 80px; + font-size: 12px; + font-weight: bold; + font-family: arial; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.dhx_cal_prev_button, +.dhx_cal_next_button { + left: auto; + width: 46px; +} +.dhx_cal_prev_button { + right: 61px; + background: url(imgs_dhx_terrace/arrow_left.png) no-repeat center center; + -webkit-border-top-left-radius: 5px; + -webkit-border-bottom-left-radius: 5px; + -moz-border-radius-topleft: 5px; + -moz-border-radius-bottomleft: 5px; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; +} +.dhx_cal_next_button { + right: 14px; + background: url(imgs_dhx_terrace/arrow_right.png) no-repeat center center; + -webkit-border-top-right-radius: 5px; + -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-topright: 5px; + -moz-border-radius-bottomright: 5px; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; +} +.dhx_cal_tab { + color: #747473; + width: 60px; + padding-top: 0; + text-decoration: none; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + font-weight: bold; + font-family: arial; + font-size: 12px; +} +.dhx_cal_tab.active { + background-color: #F0EDE7; + color: #454544; + border: 1px solid #CECECE; + text-shadow: 0px 1px 0px white; +} +.dhx_cal_tab_first { + -webkit-border-top-left-radius: 5px; + -webkit-border-bottom-left-radius: 5px; + -moz-border-radius-topleft: 5px; + -moz-border-radius-bottomleft: 5px; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; +} +.dhx_cal_tab_last { + -webkit-border-top-right-radius: 5px; + -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-topright: 5px; + -moz-border-radius-bottomright: 5px; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; +} +.dhx_cal_tab_standalone { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + padding: 0 5px; +} +.dhx_multi_day, +.dhx_multi_day_icon_small, +.dhx_multi_day_icon { + background-color: white; +} +.dhx_multi_day { + border-top: 1px solid #CECECE; +} +.dhx_multi_day_icon, +.dhx_multi_day_icon_small { + border-bottom: 1px solid #CECECE; + border-right: 1px solid #CECECE; +} +.dhx_multi_day_icon_small { + background-image: url(imgs_dhx_terrace/clock_small.gif); +} +.dhx_multi_day_icon { + background-image: url(imgs_dhx_terrace/clock_big.gif); +} +/* navigation end */ +/* month view start */ +.dhx_month_head, +.dhx_after .dhx_month_head, +.dhx_before .dhx_month_head, +.dhx_after .dhx_month_body, +.dhx_before .dhx_month_body { + background-color: white; +} +.dhx_month_head { + height: 21px; + padding-top: 0; + font: 12px/21px Arial; + color: #362d26; + border-right: 1px solid #CECECE; +} +.dhx_after .dhx_month_head, +.dhx_before .dhx_month_head, +.dhx_after .dhx_month_head, +.dhx_before .dhx_month_head { + color: #bbbbbb; +} +.dhx_month_body { + border-right: 1px solid #CECECE; + border-bottom: 1px solid #CECECE; +} +.dhx_now .dhx_month_head, +.dhx_now .dhx_month_body { + background-color: #FFF3A1; + font-weight: normal; +} +.dhx_cal_event_clear { + color: #0E64A0; +} +/* month view end */ +/* lightbox start */ +.dhx_cal_larea { + margin-left: 0; +} +.dhx_cal_light_wide .dhx_cal_larea { + margin-left: 3px; +} +.dhx_cal_light_wide .dhx_wrap_section { + padding: 5px 0; +} +.dhx_cal_light, +.dhx_cal_larea, +.dhx_cal_lsection, +.dhx_wrap_section, +.dhx_cal_light_wide .dhx_wrap_section, +.dhx_cal_ltext textarea { + background-color: white; +} +.dhx_cal_lsection, +.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday, +.dhx_cal_lsection .dhx_fullday, +.dhx_cal_light input { + color: #747473; +} +.dhx_cal_light_wide .dhx_wrap_section { + border-top: 0; + border-bottom: 1px solid #CECECE; +} +.dhx_cal_larea { + border: 1px solid transparent; +} +.dhx_cal_ltext textarea, +.dhx_cal_light select, +.dhx_cal_light { + color: #2E2E2E; +} +.dhx_cal_light { + border: 1px solid #CECECE; +} +.dhx_cal_light_wide .dhx_cal_lsection, +.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday { + font-size: 13px; +} +.dhx_section_time { + background-color: transparent; +} +.dhx_save_btn, +.dhx_cancel_btn, +.dhx_delete_btn, +.dhx_btn_set div:first-child { + display: none; +} +.dhx_btn_set, +.dhx_btn_set div { + height: 30px; + padding: 0 20px; + line-height: 30px; +} +.dhx_btn_set { + margin: 12px 0 0 0; + padding: 0; + font-size: 12px; + color: #454544; + font-weight: bold; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.dhx_left_btn_set { + margin-left: 20px; +} +.dhx_right_btn_set { + margin-right: 20px; +} +.dhx_save_btn_set { + border: 1px solid #22A1BC; + color: white; + text-shadow: 0px -1px 0px #6f6f6f; + background-color: #22A1BC; +} +.dhx_btn_set, +.dhx_cancel_btn_set { + border: 1px solid #CECECE; +} +.dhx_delete_btn_set { + border: 1px solid #FF8831; + background-color: #FF8831; + color: white; + text-shadow: 0px -1px 0px #93755f; +} +.dhx_cal_ltitle { + height: 30px; + line-height: 30px; + border-bottom: 1px solid #CECECE; +} +.dhx_cal_ltitle span { + float: left; +} +.dhx_cal_light .dhx_title { + padding-left: 13px; +} +.dhx_mark { + display: none; +} +.dhx_time { + padding-left: 10px; +} +.dhx_close_icon { + float: right; + width: 9px; + height: 9px; + background: url(imgs_dhx_terrace/close_icon.png) no-repeat center center; + padding: 10px; + margin-top: 1px; +} +.dhx_cal_light_wide .dhx_cal_ltext.dhx_cal_template { + line-height: 22px; +} +.dhx_cal_ltext textarea { + line-height: 20px; + box-sizing: border-box; + -moz-box-sizing: border-box; + border: 1px solid #CECECE; + background-color: #F9F9F9; +} +/* lightbox end */ +/* modal box */ +.dhtmlx_modal_box { + background: white; + width: 330px; +} +.dhtmlx_popup_controls { + padding-bottom: 9px; +} +.dhtmlx_popup_button, +.dhtmlx_popup_button:active, +.dhtmlx_popup_button div, +.dhtmlx_popup_button div:active { + color: #444; + background: white; + box-shadow: none; +} +.dhtmlx_popup_button.dhtmlx_ok_button { + border: 1px solid #22A1BC; + background-color: #22A1BC; +} +.dhtmlx_popup_button.dhtmlx_ok_button div { + background: #22A1BC; + border: 1px solid #22A1BC; + color: white; + text-shadow: 0px -1px 0px #6f6f6f; +} +/* mobdal box end */ +/* minicalendar */ +.dhx_cal_container.dhx_mini_calendar { + box-sizing: border-box; + border: 1px solid #CECECE; + box-shadow: 2px 2px 5px #CCC; + border-radius: 3px; +} +.dhx_mini_calendar .dhx_year_month { + border: 1px solid #CECECE; + font-family: Arial; +} +.dhx_mini_calendar .dhx_month_head, +.dhx_mini_calendar .dhx_year_month, +.dhx_mini_calendar .dhx_month_body, +.dhx_mini_calendar .dhx_scale_bar, +.dhx_mini_calendar .dhx_year_body { + border-color: transparent; +} +.dhx_mini_calendar .dhx_year_body { + padding-top: 1px; +} +.dhx_mini_calendar .dhx_scale_bar { + border-width: 0; +} +.dhx_mini_calendar .dhx_year_week { + border-bottom: 1px solid #CECECE; + padding-top: 1px; +} +.dhx_mini_calendar .dhx_month_head { + padding-right: 0; + margin-right: 1px; + text-align: center; +} +.dhx_mini_calendar .dhx_cal_prev_button, +.dhx_mini_calendar .dhx_cal_next_button { + border: 0; + height: 20px; +} +/* minicalendar end */ +.dhx_cal_navline div.dhx_minical_icon { + left: 210px; + top: 14px; + width: 30px; + height: 30px; + background: url(imgs_dhx_terrace/calendar.gif) no-repeat; + background-position: 3px 5px; +} +/* timeline */ +.dhx_cal_event_line .dhx_event_resize { + background: url(imgs_dhx_terrace/resize_dots.png) repeat-y; +} +.dhx_matrix_scell, +.dhx_matrix_cell { + border-bottom: 1px solid #CECECE; + border-right: 1px solid #CECECE; +} +.dhx_cal_header div div { + border-left: 1px solid #CECECE; +} +.dhx_matrix_scell.folder { + border-right: 0; +} +.dhx_second_scale_bar { + border-bottom: 1px solid #CECECE; +} +/* timeline end */ +/* recurring */ +.dhx_repeat_divider { + border-left: 1px solid #CECECE; +} +.dhx_custom_button { + background-color: white; + border: 1px solid #CECECE; + color: #747473; +} +.dhx_cal_light_wide .dhx_custom_button { + margin-top: 6px; +} +.dhx_custom_button_recurring { + background-image: url(imgs_dhx_terrace/but_repeat.gif); +} +/* recurring end */ +/* agenda */ +.dhx_v_border, +.dhx_agenda_line div { + border-right: 1px solid #CECECE; +} +/* agenda end */ +/* year */ +.dhx_year_month { + border: 1px solid #CECECE; +} +.dhx_scale_bar_last { + border-right: 1px solid #CECECE; +} +.dhx_year_body { + border-left: 1px solid #CECECE; +} +/* year end */ +/* expand */ +.dhx_expand_icon { + top: -3px; +} +/* expand end */ +/* units view */ +.dhx_scale_bar .dhx_cal_next_button, +.dhx_scale_bar .dhx_cal_prev_button { + width: 20px; + height: 20px; + top: 0px !important; + border: 0; +} +.dhx_scale_bar .dhx_cal_next_button { + right: 1px !important; + border-left: 1px solid #CECECE; +} +.dhx_scale_bar .dhx_cal_prev_button { + left: 1px !important; + border-right: 1px solid #CECECE; +} +/* units view end */ +/* map view */ +.dhx_map_line .headline_date, +.dhx_map_line .headline_description { + border: 0; +} +.dhx_map_line .headline_date { + border-right: 1px solid #CECECE; +} +/* map view end */ +/* tooltip start */ +.dhtmlXTooltip.tooltip { + border-left: 1px solid #CECECE; + border-top: 1px solid #CECECE; + color: #747473; + font-size: 12px; + line-height: 16px; +} +/* tooltip end */ +/* week agenda start */ +.dhx_wa_scale_bar { + border-top: 1px solid #CECECE; + border-bottom: 1px solid #CECECE; +} +.dhx_wa_column_last .dhx_wa_day_cont { + border-left: 1px solid #CECECE; +} +.dhx_wa_ev_body { + border-bottom: 1px solid #CECECE; +} +.dhx_wa_scale_bar { + background-color: #f0ede7; +} +.dhx_wa_ev_body.dhx_cal_event_selected { + background-color: #fff3a1; + color: #362d26; +} +.dhx_wa_dnd { + background-color: #fddb93 !important; + color: #747473 !important; + border: 1px solid #ccb177; +} +/* week agenda end */ +/* readonly start */ +.dhx_text_disabled { + color: #2E2E2E; +} +.dhx_cal_ltext .dhx_text_disabled { + line-height: 22px; +} +/* readonly end */ +/* grid view start */ +.dhx_grid_v_border { + border-right-color: #CECECE; +} +/* grid view end*/ +/* left border support */ +.dhx_scale_hour_border, +.dhx_month_body_border, +.dhx_scale_bar_border, +.dhx_month_head_border { + border-left: 1px solid #CECECE; +} +.dhx_cal_quick_info { + background: rgba(50, 50, 50, 0.5); +} +.dhx_qi_big_icon { + background: #1796b0; + color: white; +} +/* export to PDF and iCal buttons start */ +.dhx_cal_navline .dhx_cal_export { + width: 32px; + height: 32px; + margin: 2px; + cursor: pointer; + top: 12px; +} +.dhx_cal_navline .dhx_cal_export.pdf { + left: auto; + right: 249px; + background-image: url('imgs_dhx_terrace/export_pdf.png'); +} +.dhx_cal_navline .dhx_cal_export.ical { + left: auto; + right: 210px; + background-image: url('imgs_dhx_terrace/export_ical.png'); +} +/* export to PDF and iCal buttons end */ +/* minicalendar */ +.dhx_mini_calendar { + padding: 5px; +} +.dhx_mini_calendar .dhx_year_event, +.dhx_mini_calendar .dhx_calendar_click { + border-radius: 7px; +} +.dhx_mini_calendar .dhx_month_head { + margin: 2px 2px; +} +.dhx_mini_calendar .dhx_year_month { + line-height: 20px; + height: 25px; + font-size: 14px; +} +.dhx_mini_calendar .dhx_cal_prev_button { + top: 8px !important; +} +.dhx_mini_calendar .dhx_cal_next_button { + top: 8px !important; +} diff --git a/codebase/sources/skins/dhtmlxscheduler_classic.css b/codebase/sources/skins/dhtmlxscheduler_classic.css new file mode 100644 index 0000000..e322e05 --- /dev/null +++ b/codebase/sources/skins/dhtmlxscheduler_classic.css @@ -0,0 +1,1560 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +.dhtmlx_message_area { + position: fixed; + right: 5px; + width: 250px; + z-index: 1000; +} +.dhtmlx-info { + min-width: 120px; + padding: 4px 4px 4px 20px; + font-family: Tahoma; + z-index: 10000; + overflow: hidden; + margin: 5px; + margin-bottom: 10px; + -webkit-transition: all .5s ease; + -moz-transition: all .5s ease; + -o-transition: all .5s ease; + transition: all .5s ease; +} +.dhtmlx-info.hidden { + height: 0px; + padding: 0px; + border-width: 0px; + margin: 0px; + overflow: hidden; +} +.dhtmlx_modal_box { + overflow: hidden; + display: inline-block; + min-width: 300px; + width: 300px; + text-align: center; + position: fixed; + background-color: #fff; + background: -webkit-linear-gradient(top, #ffffff 1%, #d0d0d0 99%); + background: -moz-linear-gradient(top, #ffffff 1%, #d0d0d0 99%); + box-shadow: 0px 0px 14px #888; + font-family: Tahoma; + z-index: 20000; + border-radius: 6px; + border: 1px solid #ffffff; +} +.dhtmlx_popup_title { + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-width: 0px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC); + background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%); + background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%); +} +.dhtmlx-info, +.dhtmlx_popup_button, +.dhtmlx_button { + user-select: none; + -webkit-user-select: none; + -moz-user-select: -moz-none; + cursor: pointer; +} +.dhtmlx_popup_text { + overflow: hidden; +} +.dhtmlx_popup_controls { + border-radius: 6px; + padding: 5px; +} +.dhtmlx_popup_button, +.dhtmlx_button { + height: 30px; + line-height: 30px; + display: inline-block; + margin: 0 5px; + border-radius: 6px; + color: #FFF; +} +.dhtmlx_popup_button { + min-width: 120px; +} +div.dhx_modal_cover { + background-color: #000; + cursor: default; + filter: alpha(opacity=20); + opacity: 0.2; + position: fixed; + z-index: 19999; + left: 0px; + top: 0px; + width: 100%; + height: 100%; + border: none; + zoom: 1; +} +.dhtmlx-info img, +.dhtmlx_modal_box img { + float: left; + margin-right: 20px; +} +.dhtmlx-alert-error .dhtmlx_popup_title, +.dhtmlx-confirm-error .dhtmlx_popup_title { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC); +} +.dhtmlx-alert-error, +.dhtmlx-confirm-error { + border: 1px solid #ff0000; +} +/*Skin section*/ +.dhtmlx_button, +.dhtmlx_popup_button { + box-shadow: 0px 0px 4px #888; + border: 1px solid #838383; +} +.dhtmlx_button input, +.dhtmlx_popup_button div { + border: 1px solid #FFF; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=); + background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%); + background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%); + border-radius: 6px; + font-size: 15px; + font-weight: normal; + -moz-box-sizing: content-box; + box-sizing: content-box; + color: #fff; + padding: 0px; + margin: 0px; + vertical-align: top; + height: 28px; + line-height: 28px; +} +.dhtmlx_button input:focus, +.dhtmlx_button input:active, +.dhtmlx_popup_button div:active, +.dhtmlx_popup_button div:focus { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==); + background-image: -webkit-linear-gradient(top, #707070 1%, #4c4c4c 99%); + background-image: -moz-linear-gradient(top, #707070 1%, #4c4c4c 99%); +} +.dhtmlx_popup_title { + color: #fff; + text-shadow: 1px 1px #000; + height: 40px; + line-height: 40px; + font-size: 20px; +} +.dhtmlx_popup_text { + margin: 15px 15px 5px 15px; + font-size: 14px; + color: #000; + min-height: 30px; + border-radius: 6px; +} +.dhtmlx-info, +.dhtmlx-error { + font-size: 14px; + color: #000; + box-shadow: 0px 0px 10px #888; + padding: 0px; + background-color: #FFF; + border-radius: 3px; + border: 1px solid #ffffff; +} +.dhtmlx-info div { + padding: 5px 10px 5px 10px; + background-color: #fff; + border-radius: 3px; + border: 1px solid #B8B8B8; +} +.dhtmlx-error { + background-color: #d81b1b; + border: 1px solid #ff3c3c; + box-shadow: 0px 0px 10px #000; +} +.dhtmlx-error div { + background-color: #d81b1b; + border: 1px solid #940000; + color: #FFF; +} +.dhx_cal_event .dhx_header, +.dhx_cal_event .dhx_title, +.dhx_cal_event .dhx_body, +.dhx_cal_event .dhx_footer { + background-color: #FFE763; + border: 1px solid #B7A543; + color: #887A2E; + overflow: hidden; + width: 100%; + font-family: Tahoma; + font-size: 8pt; +} +.dhx_move_denied .dhx_cal_event .dhx_header, +.dhx_move_denied .dhx_cal_event .dhx_title { + cursor: default; +} +.dhx_cal_event .dhx_header { + height: 1px; + margin-left: 1px; + border-width: 1px 1px 0px 1px; + cursor: pointer; +} +.dhx_cal_event .dhx_title { + height: 12px; + border-width: 0px 1px 1px 1px; + border-bottom-style: dotted; + font-size: 7pt; + font-weight: bold; + text-align: center; + background-position: right; + background-repeat: no-repeat; + cursor: pointer; +} +.dhx_cal_event .dhx_body, +.dhx_cal_event.dhx_cal_select_menu .dhx_body { + border-width: 0 1px 1px 1px; + padding: 5px; +} +.dhx_cal_event.dhx_cal_select_menu { + -webkit-box-shadow: 0 0 1px #FFF; + -moz-box-shadow: 0 0 1px #FFF; + box-shadow: 0 0 1px #FFF; +} +.dhx_resize_denied, +.dhx_resize_denied .dhx_event_resize { + cursor: default !important; +} +.dhx_cal_event .dhx_event_resize { + cursor: s-resize; +} +.dhx_cal_event .dhx_footer, +.dhx_cal_event .dhx_select_menu_footer { + height: 1px; + margin-left: 2px; + border-width: 0px 1px 1px 1px; + position: relative; +} +.dhx_cal_event_line { + background-color: #FFE763; + border: 1px solid #B7A543; + border-radius: 3px; + font-family: Tahoma; + font-size: 8pt; + height: 13px; + padding-left: 10px; + color: #887A2E; + cursor: pointer; + overflow: hidden; +} +.dhx_cal_event_clear { + font-family: Tahoma; + font-size: 8pt; + height: 13px; + padding-left: 2px; + color: #887A2E; + white-space: nowrap; + overflow: hidden; + cursor: pointer; +} +.dhx_in_move { + background-color: #FFFF80; +} +.dhx_cal_event.dhx_cal_editor { + border: 1px solid #B7A543; + border-top-style: dotted; + z-index: 999; + position: absolute; + overflow: hidden; +} +textarea.dhx_cal_editor { + width: 100%; + height: 100%; + border: 0 solid black; + margin: 0; + padding: 0; + overflow: auto; +} +div.dhx_menu_head { + background-image: url(imgs/controls.gif); + background-position: 0px -43px; + width: 10px; + height: 10px; + margin-left: 5px; + margin-top: 1px; + border: none; + cursor: default; +} +div.dhx_menu_icon { + background-image: url(imgs/controls.gif); + width: 20px; + height: 20px; + margin-left: -5px; + margin-top: 0px; + border: none; + cursor: pointer; +} +div.icon_details { + background-position: 0px 0px; +} +div.icon_edit { + background-position: -22px 0px; +} +div.icon_save { + background-position: -84px -1px; +} +div.icon_cancel { + background-position: -62px 0px; +} +div.icon_delete { + background-position: -42px 0px; +} +/*view more link in month view*/ +.dhx_month_link { + position: absolute; + box-sizing: border-box; + -moz-box-sizing: border-box; + text-align: right; + cursor: pointer; + padding-right: 10px; +} +.dhx_month_link a { + color: blue; +} +.dhx_month_link a:hover { + text-decoration: underline; +} +.dhx_global_tip { + font-family: Tahoma, Helvetica; + text-align: center; + font-size: 20px; + position: fixed; + top: 60px; + right: 20px; + background-color: rgba(255, 255, 255, 0.7); + color: #000; + z-index: 10000; + padding: 20px 30px; + width: 190px; +} +.dhx_global_tip div { + font-size: 30px; +} +@media (-moz-touch-enabled) { + .dhx_cal_container { + user-select: none; + -moz-user-select: none; + } +} +.dhx_unselectable, +.dhx_unselectable div { + -webkit-user-select: none; + -moz-user-select: none; + -moz-user-select: -moz-none; +} +.dhx_cal_light { + -webkit-tap-highlight-color: transparent; + background-color: #FFE763; + border-radius: 5px; + font-family: Tahoma; + font-size: 8pt; + border: 1px solid #B7A64B; + color: #887A2E; + position: absolute; + z-index: 10001; + width: 580px; + height: 300px; + box-shadow: 5px 5px 5px #888; +} +.dhx_cal_light_wide { + width: 650px; +} +.dhx_mark { + position: relative; + top: 3px; + background-image: url('imgs/controls.gif'); + background-position: 0px -43px; + padding-left: 10px; +} +.dhx_ie6 .dhx_mark { + background-position: 6px -41px; +} +.dhx_cal_light select { + font-family: Tahoma; + font-size: 8pt; + color: #887A2E; + padding: 2px; + margin: 0px; +} +.dhx_cal_ltitle { + padding: 2px 0px 2px 5px; + overflow: hidden; + white-space: nowrap; +} +.dhx_cal_ltitle span { + white-space: nowrap; +} +.dhx_cal_lsection { + background-color: #DBCF8C; + color: #FFF4B5; + font-weight: bold; + padding: 5px 0px 3px 10px; +} +.dhx_section_time { + background-color: #DBCF8C; + white-space: nowrap; +} +.dhx_cal_lsection .dhx_fullday { + float: right; + margin-right: 5px; + color: #887A2E; + font-size: 12px; + font-weight: normal; + line-height: 20px; + vertical-align: top; + cursor: pointer; +} +.dhx_cal_lsection { + font-size: 18px; + font-family: Arial; +} +.dhx_cal_ltext { + padding: 2px 0px 2px 10px; + overflow: hidden; +} +.dhx_cal_ltext textarea { + background-color: #FFF4B5; + /* #FFF4B5; should be the same for dhx_cal_larea, was transperent */ + overflow: auto; + border: none; + color: #887A2E; + height: 100%; + width: 100%; + outline: none !important; + resize: none; +} +.dhx_time { + font-weight: bold; +} +.dhx_cal_light .dhx_title { + padding-left: 10px; +} +.dhx_cal_larea { + border: 1px solid #DCC43E; + background-color: #FFF4B5; + overflow: hidden; + margin-left: 3px; + width: 572px; + height: 1px; +} +.dhx_btn_set { + padding: 5px 10px 0px 10px; + float: left; +} +.dhx_btn_set div { + float: left; + height: 21px; + line-height: 21px; + vertical-align: middle; + cursor: pointer; +} +.dhx_save_btn { + background-image: url('imgs/controls.gif'); + background-position: -84px 0px; + width: 21px; +} +.dhx_cancel_btn { + background-image: url('imgs/controls.gif'); + background-position: -63px 0px; + width: 20px; +} +.dhx_delete_btn { + background-image: url('imgs/controls.gif'); + background-position: -42px 0px; + width: 20px; +} +.dhx_cal_cover { + width: 100%; + height: 100%; + position: absolute; + z-index: 10000; + top: 0px; + left: 0px; + background-color: black; + opacity: 0.1; + filter: alpha(opacity=10); +} +.dhx_custom_button { + padding: 0px 3px 0px 3px; + color: #887A2E; + font-family: Tahoma; + font-size: 8pt; + background-color: #FFE763; + font-weight: normal; + margin-right: 5px; + margin-top: 0px; + cursor: pointer; +} +.dhx_custom_button div { + cursor: pointer; + float: left; + height: 21px; + line-height: 21px; + vertical-align: middle; +} +.dhx_cal_light_wide .dhx_cal_larea { + border-top-width: 0px; +} +.dhx_cal_light_wide .dhx_cal_lsection { + border: 0px; + float: left; + text-align: right; + width: 100px; + height: 20px; + font-size: 16px; + padding: 5px 0px 0px 10px; +} +.dhx_cal_light_wide .dhx_wrap_section { + border-top: 1px solid #DBCF8C; + position: relative; + background-color: #DBCF8C; + overflow: hidden; +} +.dhx_cal_light_wide .dhx_section_time { + padding-top: 2px !important; + height: 20px !important; +} +.dhx_section_time { + text-align: center; +} +.dhx_cal_light_wide .dhx_cal_larea { + width: 730px; +} +.dhx_cal_light_wide { + width: 738px; +} +.dhx_cal_light_wide .dhx_section_time { + background: transparent; +} +.dhx_cal_light_wide .dhx_cal_checkbox label { + padding-left: 0px; +} +.dhx_cal_wide_checkbox input { + margin-top: 8px; + margin-left: 14px; +} +.dhx_cal_light input { + font-family: Tahoma; + font-size: 8pt; + color: #887A2E; +} +.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday { + float: none; + margin-right: 0px; + color: #FFF4B5; + font-weight: bold; + font-size: 16px; + font-family: Arial; + cursor: pointer; +} +.dhx_custom_button { + float: right; + height: 21px; + width: 90px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +.dhx_cal_light_wide .dhx_custom_button { + position: absolute; + top: 0; + right: 0; + margin-top: 2px; +} +.dhx_cal_light_wide .dhx_repeat_right { + margin-right: 55px; +} +.dhx_minical_popup { + position: absolute; + z-index: 10100; + width: 251px; + height: 175px; +} +.dhx_scale_bar_header { + position: absolute; + border-bottom: 1px dotted #8894A3; + width: 100%; +} +.dhx_expand_icon { + position: absolute; + top: 0px; + right: 0px; + background-image: url(imgs/collapse_expand_icon.gif); + width: 18px; + height: 18px; + cursor: pointer; + background-position: 0px 18px; + z-index: 16; +} +.dhx_scheduler_agenda .dhx_cal_data { + background-image: url(imgs/databg.png); +} +.dhx_agenda_area { + width: 100%; + overflow-y: auto; + background-image: url(imgs/databg.png); +} +.dhx_agenda_line { + height: 21px; + clear: both; + overflow: hidden; +} +.dhx_agenda_line div { + float: left; + width: 188px; + border-right: 1px dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_agenda_area .dhx_agenda_line div { + border-right: 0px dotted #8894A3; +} +.dhx_v_border { + position: absolute; + left: 187px; + top: 0; + border-right: 1px dotted #8894A3; + width: 1px; + height: 100%; +} +.dhx_agenda_line .dhx_event_icon { + width: 20px; + border-width: 0px; + background: url(imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor: pointer; +} +.dhx_agenda_line span { + padding-left: 5px; + line-height: 21px; +} +.dhx_year_body { + border-left: 1px dotted #586A7E; +} +.dhx_year_week { + position: relative; +} +.dhx_scale_bar_last { + border-right: 1px dotted #586A7E; +} +.dhx_year_month { + height: 18px; + padding-top: 3px; + border: 1px dotted #586A7E; + text-align: center; + vertical-align: middle; +} +.dhx_year_body .dhx_before .dhx_month_head, +.dhx_year_body .dhx_after .dhx_month_head, +.dhx_year_body .dhx_before .dhx_month_head a, +.dhx_year_body .dhx_after .dhx_month_head a { + color: #E2E3E6 !important; +} +.dhx_year_body .dhx_month_body { + height: 0px; + overflow: hidden; +} +.dhx_month_head.dhx_year_event { + background-color: #FFE763; +} +.dhx_year_body .dhx_before .dhx_month_head, +.dhx_year_body .dhx_after .dhx_month_head { + cursor: default; +} +.dhx_year_tooltip { + border: 1px solid #BBBBBB; + background-image: url(imgs/databg.png); + position: absolute; + z-index: 9998; + width: 300px; + height: auto; + font-family: Tahoma; + font-size: 8pt; + overflow: hidden; +} +.dhx_tooltip_line { + line-height: 20px; + height: 20px; + overflow: hidden; +} +.dhx_tooltip_line .dhx_event_icon { + width: 20px; + height: 20px; + padding-right: 10px; + float: left; + border-width: 0px; + position: relative; + background: url(imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor: pointer; +} +.dhx_tooltip_date { + float: left; + width: auto; + padding-left: 5px; + text-align: center; +} +.dhx_text_disabled { + color: #887A2E; + font-family: Tahoma; + font-size: 8pt; +} +.dhx_mini_calendar { + -moz-box-shadow: 5px 5px 5px #888; + /*Doesn't work in IE*/ + -khtml-box-shadow: 5px 5px 5px #888; + -moz-user-select: -moz-none; + -webkit-user-select: none; + -user-select: none; +} +.dhx_mini_calendar .dhx_month_head { + cursor: pointer; +} +.dhx_mini_calendar .dhx_calendar_click { + background-color: #C2D5FC; +} +.dhx_cal_navline div.dhx_minical_icon { + width: 18px; + height: 18px; + left: 190px; + top: 1px; + cursor: pointer; + background-image: url(imgs/calendar.gif); +} +.dhx_matrix_scell { + height: 100%; +} +.dhx_matrix_cell, +.dhx_matrix_scell { + overflow: hidden; + text-align: center; + vertical-align: middle; + border-bottom: 1px dotted #8894A3; + border-right: 1px dotted #8894A3; +} +.dhx_matrix_cell { + background-color: white; +} +.dhx_matrix_line { + overflow: hidden; +} +.dhx_matrix_cell div, +.dhx_matrix_scell div { + overflow: hidden; + text-align: center; + height: auto; +} +.dhx_cal_lsection .dhx_readonly { + font-size: 9pt; + font-size: 8pt; + padding: 2px; + color: #887A2E; +} +.dhx_cal_event_line .dhx_event_resize { + cursor: w-resize; + background: url(imgs/resize_dots.png) repeat-y; + position: absolute; + top: 0; + width: 4px; + height: 100%; +} +.dhx_event_resize_start { + left: 0; +} +.dhx_event_resize_end { + right: 0; +} +/* Tree view */ +.dhx_matrix_scell.folder, +.dhx_data_table.folder .dhx_matrix_cell { + background-color: #969394; + cursor: pointer; +} +.dhx_matrix_scell .dhx_scell_level0 { + padding-left: 5px; +} +.dhx_matrix_scell .dhx_scell_level1 { + padding-left: 20px; +} +.dhx_matrix_scell .dhx_scell_level2 { + padding-left: 35px; +} +.dhx_matrix_scell .dhx_scell_level3 { + padding-left: 50px; +} +.dhx_matrix_scell .dhx_scell_level4 { + padding-left: 65px; +} +.dhx_matrix_scell.folder { + font-weight: bold; + text-align: left; +} +.dhx_matrix_scell.folder .dhx_scell_expand { + float: left; + width: 10px; + padding-right: 3px; +} +.dhx_matrix_scell.folder .dhx_scell_name { + float: left; + width: auto; +} +.dhx_matrix_scell.item .dhx_scell_name { + padding-left: 15px; + text-align: left; +} +.dhx_data_table.folder .dhx_matrix_cell { + border-right: 0; +} +.dhx_section_timeline { + overflow: hidden; + padding: 4px 0 2px 10px; +} +.dhx_section_timeline select { + width: 552px; +} +/* Tree view end*/ +/* Map view */ +.dhx_map_area { + width: 100%; + height: 100%; + overflow-y: auto; + overflow-x: hidden; + background-image: url(imgs/databg.png); +} +.dhx_map_line .dhx_event_icon { + width: 20px; + border-width: 0px; + background: url(imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor: pointer; +} +.dhx_map_line { + height: 21px; + clear: both; + overflow: hidden; +} +.dhx_map { + position: absolute; +} +.dhx_map_line div { + float: left; + border-right: 1px dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line .headline_description { + float: left; + border-right: 1px dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line .dhx_map_description { + float: left; + border-right: 0 dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line .headline_date, +.dhx_map_line .headline_description { + border-left: 0; +} +.dhx_map_line .line_description { + float: left; + border-right: 1px dotted #8894A3; + text-align: left; + padding-left: 5px; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line.highlight { + background-color: #C4C5CC; +} +.dhx_map_area .dhx_map_line div { + border-right: 0px dotted #8894A3; +} +/* Map view end */ +/* dhtmlXTooltip start */ +.dhtmlXTooltip.tooltip { + -moz-box-shadow: 3px 3px 3px #888888; + -webkit-box-shadow: 3px 3px 3px #888888; + -o-box-shadow: 3px 3px 3px #888888; + box-shadow: 3px 3px 3px #888888; + filter: progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5); + background-color: white; + border-left: 1px dotted #887A2E; + border-top: 1px dotted #887A2E; + color: #887A2E; + cursor: default; + padding: 10px; + position: absolute; + z-index: 500; + font-family: Tahoma; + font-size: 8pt; + opacity: 1; +} +/* dhtmlXTooltip end */ +/* Lightbox checkbox section */ +.dhx_cal_checkbox label { + padding-left: 5px; +} +/* Lightbox checkbox section end */ +/* Lightbox radiobuttons section */ +.dhx_cal_light .radio { + padding: 2px 0px 2px 10px; +} +.dhx_cal_light .radio input, +.dhx_cal_light .radio label { + line-height: 15px; +} +.dhx_cal_light .radio input { + vertical-align: middle; + margin: 0px; + padding: 0px; +} +.dhx_cal_light .radio label { + vertical-align: middle; + padding-right: 10px; +} +/* Lightbox radiobuttons section end */ +/* Lightbox dhtmlx combo section */ +.dhx_cal_light .combo { + padding: 4px; +} +.dhx_cal_light_wide .dhx_combo_box { + width: 608px !important; + left: 10px; +} +/* Lightbox dhtmlx combo section end */ +/* Agenda week start */ +.dhx_wa_column { + float: left; +} +.dhx_wa_column_last .dhx_wa_day_cont { + border-left: 1px dotted #8894A3; +} +.dhx_wa_scale_bar { + font-family: Tahoma; + padding-left: 10px; + font-size: 11px; + border-top: 1px dotted #8894A3; + border-bottom: 1px dotted #8894A3; +} +.dhx_wa_day_data { + background-color: #FCFEFC; + overflow-y: auto; +} +.dhx_wa_ev_body { + border-bottom: 1px dotted #778899; + font-size: 12px; + padding: 5px 0 5px 7px; +} +.dhx_wa_dnd { + font-family: Tahoma; + position: absolute; + padding-right: 7px; + color: #887AE2 !important; + background-color: #FFE763 !important; + border: 1px solid #B7A543; +} +.dhx_cal_event_selected { + background-color: #9cc1db; + color: white; +} +/* Agenda week end */ +/* timeline second scale start */ +.dhx_second_scale_bar { + border-bottom: 1px dotted #586A7E; + padding-top: 2px; +} +/* timeline second scale end */ +/* grid view */ +.dhx_cal_header div div { + border-left: 1px dotted #8894A3; +} +.dhx_grid_area { + width: 100%; + height: 100%; + overflow-y: auto; + background-color: #FCFEFC; +} +.dhx_grid_area table { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + table-layout: fixed; +} +.dhx_grid_area td { + table-layout: fixed; + text-align: center; +} +.dhx_grid_line { + height: 21px; + clear: both; + overflow: hidden; +} +.dhx_grid_line div { + float: left; + cursor: default; + padding-top: 0; + padding-bottom: 0; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_grid_area td, +.dhx_grid_line div { + padding-left: 8px; + padding-right: 8px; +} +.dhx_grid_area tr.dhx_grid_event { + height: 21px; + overflow: hidden; + margin: 0 0 1px 0; +} +.dhx_grid_area tr.dhx_grid_event td { + /*borders for old ies*/ + border-bottom: 1px solid #ECEEF4; +} +.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td, +.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td { + border-bottom-width: 0px; + border-bottom-style: none; +} +.dhx_grid_area tr.dhx_grid_event:nth-child(2n) { + background-color: #ECEEF4; +} +.dhx_grid_area .dhx_grid_dummy { + table-layout: auto; + margin: 0 !important; + padding: 0 !important; +} +.dhx_grid_v_border { + position: absolute; + border-right: 1px solid #A4BED4; + width: 1px; + height: 100%; +} +.dhx_grid_event_selected { + background-color: #9cc1db !important; + color: white !important; +} +.dhx_grid_sort_desc .dhx_grid_view_sort { + background-position: 0 -55px; +} +.dhx_grid_sort_asc .dhx_grid_view_sort { + background-position: 0 -66px; +} +.dhx_grid_view_sort { + width: 10px; + height: 10px; + position: absolute; + border: none !important; + top: 5px; + background-repeat: no-repeat; + background-image: url(imgs/images.png); +} +/* end grid */ +/* marked timespans */ +.dhx_marked_timespan { + position: absolute; + width: 100%; +} +.dhx_time_block { + position: absolute; + width: 100%; + background: silver; + opacity: 0.4; + filter: alpha(opacity=40); + z-index: 1; +} +.dhx_time_block_reset { + opacity: 1; + filter: alpha(opacity=100); +} +.dhx_scheduler_month .dhx_marked_timespan { + display: none; +} +.dhx_mini_calendar .dhx_marked_timespan { + display: none; +} +/* now time */ +.dhx_now_time { + width: 100%; + border-bottom: 2px solid red; + z-index: 1; +} +.dhx_scheduler_month .dhx_now_time { + border-bottom: 0; + border-left: 2px solid red; +} +.dhx_matrix_now_time { + border-left: 2px solid red; + z-index: 1; +} +.dhx_now_time, +.dhx_matrix_now_time { + opacity: 0.5; +} +/* Quick info */ +.dhx_cal_quick_info { + border: 2px solid #888; + border-radius: 5px; + position: absolute; + z-index: 300; + background-color: #8e99ae; + background-color: rgba(98, 107, 127, 0.5); + padding-left: 7px; + width: 300px; + transition: left 0.5s ease, right 0.5s; + -moz-transition: left 0.5s ease, right 0.5s; + -webkit-transition: left 0.5s ease, right 0.5s; + -o-transition: left 0.5s ease, right 0.5s; +} +.dhx_no_animate { + transition: none; + -moz-transition: none; + -webkit-transition: none; + -o-transition: none; +} +.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon { + float: right; +} +.dhx_cal_qi_title { + padding: 5px 0px 10px 5px; + color: #FFF; + letter-spacing: 1px; +} +.dhx_cal_qi_tdate { + font-size: 14px; +} +.dhx_cal_qi_tcontent { + font-size: 18px; + font-weight: bold; +} +.dhx_cal_qi_content { + border: 1px solid #888; + background-color: #fefefe; + padding: 16px 8px; + font-size: 14px; + color: #444; + width: 275px; + overflow: hidden; +} +.dhx_qi_big_icon { + border-radius: 3px; + color: #444; + margin: 5px 9px 5px 0px; + min-width: 60px; + line-height: 20px; + vertical-align: middle; + padding: 5px 10px 5px 5px; + cursor: pointer; + background-color: #fefefe; + border-bottom: 1px solid #666; + border-right: 1px solid #666; + float: left; +} +.dhx_cal_qi_controls div { + float: left; + height: 20px; + text-align: center; + line-height: 20px; +} +.dhx_qi_big_icon .dhx_menu_icon { + margin: 0 8px 0 0px; +} +.dhx_drag_marker { + width: 100%; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; + background-color: #FFE763; + position: absolute; + box-sizing: border-box !important; + border-top: 1px solid #B6B6B6; + border-bottom: 1px solid #b6b6b6; +} +/* bootstrap CSS fix start */ +.dhx_cal_navline div, +.dhx_cal_header, +.dhx_cal_header div, +.dhx_cal_data div, +.dhx_cal_light, +.dhx_cal_light div { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.dhx_cal_light .dhx_cal_radio label { + margin-bottom: 0; +} +.dhx_cal_event div { + line-height: normal; +} +/* bootstrap CSS fix end */ +.dhx_cal_container { + background-color: #C2D5FC; + font-family: Tahoma; + font-size: 8pt; + position: relative; + overflow: hidden; +} +.dhx_cal_container div { + -moz-user-select: none; + -moz-user-select: -moz-none; +} +.dhx_cal_navline { + height: 20px; + position: absolute; + z-index: 3; + width: 750px; + color: #2F3A48; +} +.dhx_cal_navline div { + position: absolute; + top: 2px; + white-space: nowrap; +} +.dhx_cal_navline .dhx_cal_date { + font-weight: 600; + left: 210px; + padding-top: 1px; +} +.dhx_cal_button .dhx_left_bg { + width: 1px; + overflow: hidden; + height: 17px; + z-index: 20; + top: 0px; +} +.dhx_cal_prev_button { + background-image: url(imgs/buttons.png); + background-position: 0px 0px; + width: 29px; + height: 17px; + left: 50px; + cursor: pointer; +} +.dhx_cal_next_button { + background-image: url(imgs/buttons.png); + background-position: -30px 0px; + width: 29px; + height: 17px; + left: 80px; + cursor: pointer; +} +.dhx_cal_today_button { + background-image: url(imgs/buttons.png); + background-position: -60px 0px; + width: 75px; + height: 17px; + left: 112px; + cursor: pointer; + text-align: center; + text-decoration: underline; +} +.dhx_cal_tab { + width: 59px; + height: 19px; + text-align: center; + text-decoration: underline; + padding-top: 2px; + cursor: pointer; + background-color: #D8E1EA; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.dhx_cal_tab.active { + text-decoration: none; + cursor: default; + font-weight: bold; + border: 1px dotted #586A7E; + border-bottom: 0; + background-color: #C2D5FC; +} +.dhx_cal_header { + position: absolute; + left: 10px; + top: 23px; + width: 750px; + border-top: 1px dotted #8894A3; + border-right: 1px dotted #8894A3; + z-index: 2; + overflow: hidden; + color: #2F3A48; +} +.dhx_cal_data { + -webkit-tap-highlight-color: transparent; + border-top: 1px dotted #8894A3; + position: absolute; + top: 44px; + width: 600px; + overflow-y: auto; + overflow-x: hidden; + -webkit-overflow-scrolling: touch; +} +.dhx_cal_data { + -ms-touch-action: pan-y; +} +.dhx_cal_event, +.dhx_cal_event_line, +.dhx_cal_event_clear { + -ms-touch-action: none; +} +.dhx_scale_bar { + position: absolute; + text-align: center; + background-color: #C2D5FC; + padding-top: 3px; + border-left: 1px dotted #586A7E; +} +.dhx_scale_holder { + position: absolute; + border-right: 1px dotted #586A7E; + background-image: url(imgs/databg.png); +} +.dhx_scale_holder_now { + position: absolute; + border-right: 1px dotted #586A7E; + background-image: url(imgs/databg_now.png); +} +.dhx_scale_hour { + height: 41px; + width: 50px; + border-bottom: 1px dotted #8894A3; + background-color: #C2D5FC; + text-align: center; + line-height: 40px; + color: #586A7E; + overflow: hidden; +} +.dhx_month_head { + background-color: #EBEFF4; + color: #2F3A48; + height: 18px; + padding-right: 5px; + padding-top: 3px; + text-align: right; + border-right: 1px dotted #586A7E; +} +.dhx_month_body { + border-right: 1px dotted #586A7E; + border-bottom: 1px dotted #586A7E; + background-color: #FFFFFF; +} +.dhx_now .dhx_month_body { + background-color: #E2EDFF; +} +.dhx_after .dhx_month_body, +.dhx_before .dhx_month_body { + background-color: #ECECEC; +} +.dhx_after .dhx_month_head, +.dhx_before .dhx_month_head { + background-color: #E2E3E6; + color: #94A6BB; +} +.dhx_now .dhx_month_head { + background-color: #D1DEF4; + font-weight: bold; +} +.dhx_scale_ignore { + display: none; +} +.dhx_cal_drag { + position: absolute; + z-index: 9999; + background-color: #FFE763; + border: 1px solid #B7A543; + opacity: 0.5; + filter: alpha(opacity=50); +} +.dhx_loading { + position: absolute; + width: 128px; + height: 15px; + background-image: url(imgs/loading.gif); + z-index: 9999; +} +.dhx_multi_day_icon, +.dhx_multi_day { + background-color: #E1E6FF; + background-repeat: no-repeat; + border-right: 1px dotted #8894A3; +} +.dhx_multi_day { + position: absolute; + border-top: 1px dotted #8894A3; +} +.dhx_multi_day_icon, +.dhx_multi_day_icon_small { + background-position: center center; + background-color: #E1E6FF; + background-repeat: no-repeat; + border-bottom: 1px dotted #8894A3; + border-right: 1px dotted #8894A3; +} +.dhx_multi_day_icon { + background-image: url(imgs/clock_big.gif); +} +.dhx_multi_day_icon_small { + background-image: url(imgs/clock_small.gif); +} +.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container { + background-color: #d0e5ff; +} +/* left border config option support */ +.dhx_scale_hour_border, +.dhx_month_body_border, +.dhx_scale_bar_border, +.dhx_month_head_border { + border-left: 1px dotted #8894A3; +} +/* export to PDF and iCal buttons start */ +.dhx_cal_navline .dhx_cal_export { + width: 18px; + height: 18px; + margin: 2px; + cursor: pointer; + top: 0px; +} +.dhx_cal_navline .dhx_cal_export.pdf { + left: 2px; + background-image: url('imgs/export_pdf.png'); +} +.dhx_cal_navline .dhx_cal_export.ical { + left: 24px; + background-image: url('imgs/export_ical.png'); +} +/* export to PDF and iCal buttons end */ +/*All*/ +.dhx_form_repeat, +.dhx_form_repeat input { + padding: 0; + margin: 0; + padding-left: 5px; + font-family: Tahoma, Verdana; + font-size: 11px; + line-height: 24px; +} +.dhx_form_repeat { + overflow: hidden; + /*height:115px;*/ + height: 0px; + background-color: #FFF4B5; + /*border: 1px solid #DCC43E;*/ +} +.dhx_cal_light_wide .dhx_form_repeat { + background-color: transparent; +} +.dhx_repeat_center, +.dhx_repeat_left { + height: 115px; + padding: 10px 0 10px 10px; + float: left; +} +.dhx_repeat_left { + width: 95px; +} +.dhx_repeat_center { + width: 335px; + margin-top: 12px; +} +.dhx_repeat_divider { + float: left; + height: 115px; + border-left: 1px dotted #DCC43E; + /*background-color: #DCC43E;*/ + width: 1px; +} +.dhx_repeat_right { + float: right; + height: 115px; + width: 160px; + padding: 10px 3px 10px 10px; + margin-top: 7px; +} +input.dhx_repeat_text { + height: 16px; + width: 27px; + margin: 0 4px 0 4px; + line-height: 18px; + padding: 0 0 0 2px; +} +.dhx_form_repeat select { + height: 20px; + width: 87px; + padding: 0 0 0 2px; + margin: 0 4px 0 4px; +} +input.dhx_repeat_date { + height: 18px; + width: 80px; + padding: 0 0 0 2px; + margin: 0 4px 0 4px; + background-repeat: no-repeat; + background-position: 64px 0; + border: 1px #7f9db9 solid; + line-height: 18px; +} +input.dhx_repeat_radio { + margin-right: 4px; +} +input.dhx_repeat_checkbox { + margin: 4px 4px 0 0; +} +.dhx_repeat_days td { + padding-right: 5px; +} +.dhx_repeat_days label { + font-size: 10px; +} +.dhx_custom_button { + width: 90px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +.dhx_custom_button_recurring { + background-image: url(imgs/but_repeat.gif); + background-position: -5px 20px; + width: 20px; + margin-right: 10px; +} +/* increase width of lightbox */ +.dhx_cal_light_rec { + width: 640px; +} +.dhx_cal_light_rec .dhx_cal_larea { + width: 632px; +} +.dhx_cal_light_rec.dhx_cal_light_wide { + width: 816px; +} +.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea { + width: 808px; +} diff --git a/codebase/sources/skins/dhtmlxscheduler_flat.css b/codebase/sources/skins/dhtmlxscheduler_flat.css new file mode 100644 index 0000000..c2b8ee3 --- /dev/null +++ b/codebase/sources/skins/dhtmlxscheduler_flat.css @@ -0,0 +1,2343 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +.dhtmlx_message_area { + position: fixed; + right: 5px; + width: 250px; + z-index: 1000; +} +.dhtmlx-info { + min-width: 120px; + padding: 4px 4px 4px 20px; + font-family: Tahoma; + z-index: 10000; + overflow: hidden; + margin: 5px; + margin-bottom: 10px; + -webkit-transition: all .5s ease; + -moz-transition: all .5s ease; + -o-transition: all .5s ease; + transition: all .5s ease; +} +.dhtmlx-info.hidden { + height: 0px; + padding: 0px; + border-width: 0px; + margin: 0px; + overflow: hidden; +} +.dhtmlx_modal_box { + overflow: hidden; + display: inline-block; + min-width: 300px; + width: 300px; + text-align: center; + position: fixed; + background-color: #fff; + background: -webkit-linear-gradient(top, #ffffff 1%, #d0d0d0 99%); + background: -moz-linear-gradient(top, #ffffff 1%, #d0d0d0 99%); + box-shadow: 0px 0px 14px #888; + font-family: Tahoma; + z-index: 20000; + border-radius: 6px; + border: 1px solid #ffffff; +} +.dhtmlx_popup_title { + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-width: 0px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC); + background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%); + background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%); +} +.dhtmlx-info, +.dhtmlx_popup_button, +.dhtmlx_button { + user-select: none; + -webkit-user-select: none; + -moz-user-select: -moz-none; + cursor: pointer; +} +.dhtmlx_popup_text { + overflow: hidden; +} +.dhtmlx_popup_controls { + border-radius: 6px; + padding: 5px; +} +.dhtmlx_popup_button, +.dhtmlx_button { + height: 30px; + line-height: 30px; + display: inline-block; + margin: 0 5px; + border-radius: 6px; + color: #FFF; +} +.dhtmlx_popup_button { + min-width: 120px; +} +div.dhx_modal_cover { + background-color: #000; + cursor: default; + filter: alpha(opacity=20); + opacity: 0.2; + position: fixed; + z-index: 19999; + left: 0px; + top: 0px; + width: 100%; + height: 100%; + border: none; + zoom: 1; +} +.dhtmlx-info img, +.dhtmlx_modal_box img { + float: left; + margin-right: 20px; +} +.dhtmlx-alert-error .dhtmlx_popup_title, +.dhtmlx-confirm-error .dhtmlx_popup_title { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC); +} +.dhtmlx-alert-error, +.dhtmlx-confirm-error { + border: 1px solid #ff0000; +} +/*Skin section*/ +.dhtmlx_button, +.dhtmlx_popup_button { + box-shadow: 0px 0px 4px #888; + border: 1px solid #838383; +} +.dhtmlx_button input, +.dhtmlx_popup_button div { + border: 1px solid #FFF; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=); + background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%); + background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%); + border-radius: 6px; + font-size: 15px; + font-weight: normal; + -moz-box-sizing: content-box; + box-sizing: content-box; + color: #fff; + padding: 0px; + margin: 0px; + vertical-align: top; + height: 28px; + line-height: 28px; +} +.dhtmlx_button input:focus, +.dhtmlx_button input:active, +.dhtmlx_popup_button div:active, +.dhtmlx_popup_button div:focus { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==); + background-image: -webkit-linear-gradient(top, #707070 1%, #4c4c4c 99%); + background-image: -moz-linear-gradient(top, #707070 1%, #4c4c4c 99%); +} +.dhtmlx_popup_title { + color: #fff; + text-shadow: 1px 1px #000; + height: 40px; + line-height: 40px; + font-size: 20px; +} +.dhtmlx_popup_text { + margin: 15px 15px 5px 15px; + font-size: 14px; + color: #000; + min-height: 30px; + border-radius: 6px; +} +.dhtmlx-info, +.dhtmlx-error { + font-size: 14px; + color: #000; + box-shadow: 0px 0px 10px #888; + padding: 0px; + background-color: #FFF; + border-radius: 3px; + border: 1px solid #ffffff; +} +.dhtmlx-info div { + padding: 5px 10px 5px 10px; + background-color: #fff; + border-radius: 3px; + border: 1px solid #B8B8B8; +} +.dhtmlx-error { + background-color: #d81b1b; + border: 1px solid #ff3c3c; + box-shadow: 0px 0px 10px #000; +} +.dhtmlx-error div { + background-color: #d81b1b; + border: 1px solid #940000; + color: #FFF; +} +.dhx_cal_event .dhx_header, +.dhx_cal_event .dhx_title, +.dhx_cal_event .dhx_body, +.dhx_cal_event .dhx_footer { + background-color: #FFE763; + border: 1px solid #B7A543; + color: #887A2E; + overflow: hidden; + width: 100%; + font-family: Tahoma; + font-size: 8pt; +} +.dhx_move_denied .dhx_cal_event .dhx_header, +.dhx_move_denied .dhx_cal_event .dhx_title { + cursor: default; +} +.dhx_cal_event .dhx_header { + height: 1px; + margin-left: 1px; + border-width: 1px 1px 0px 1px; + cursor: pointer; +} +.dhx_cal_event .dhx_title { + height: 12px; + border-width: 0px 1px 1px 1px; + border-bottom-style: dotted; + font-size: 7pt; + font-weight: bold; + text-align: center; + background-position: right; + background-repeat: no-repeat; + cursor: pointer; +} +.dhx_cal_event .dhx_body, +.dhx_cal_event.dhx_cal_select_menu .dhx_body { + border-width: 0 1px 1px 1px; + padding: 5px; +} +.dhx_cal_event.dhx_cal_select_menu { + -webkit-box-shadow: 0 0 1px #FFF; + -moz-box-shadow: 0 0 1px #FFF; + box-shadow: 0 0 1px #FFF; +} +.dhx_resize_denied, +.dhx_resize_denied .dhx_event_resize { + cursor: default !important; +} +.dhx_cal_event .dhx_event_resize { + cursor: s-resize; +} +.dhx_cal_event .dhx_footer, +.dhx_cal_event .dhx_select_menu_footer { + height: 1px; + margin-left: 2px; + border-width: 0px 1px 1px 1px; + position: relative; +} +.dhx_cal_event_line { + background-color: #FFE763; + border: 1px solid #B7A543; + border-radius: 3px; + font-family: Tahoma; + font-size: 8pt; + height: 13px; + padding-left: 10px; + color: #887A2E; + cursor: pointer; + overflow: hidden; +} +.dhx_cal_event_clear { + font-family: Tahoma; + font-size: 8pt; + height: 13px; + padding-left: 2px; + color: #887A2E; + white-space: nowrap; + overflow: hidden; + cursor: pointer; +} +.dhx_in_move { + background-color: #FFFF80; +} +.dhx_cal_event.dhx_cal_editor { + border: 1px solid #B7A543; + border-top-style: dotted; + z-index: 999; + position: absolute; + overflow: hidden; +} +textarea.dhx_cal_editor { + width: 100%; + height: 100%; + border: 0 solid black; + margin: 0; + padding: 0; + overflow: auto; +} +div.dhx_menu_head { + background-image: url(imgs/controls.gif); + background-position: 0px -43px; + width: 10px; + height: 10px; + margin-left: 5px; + margin-top: 1px; + border: none; + cursor: default; +} +div.dhx_menu_icon { + background-image: url(imgs/controls.gif); + width: 20px; + height: 20px; + margin-left: -5px; + margin-top: 0px; + border: none; + cursor: pointer; +} +div.icon_details { + background-position: 0px 0px; +} +div.icon_edit { + background-position: -22px 0px; +} +div.icon_save { + background-position: -84px -1px; +} +div.icon_cancel { + background-position: -62px 0px; +} +div.icon_delete { + background-position: -42px 0px; +} +/*view more link in month view*/ +.dhx_month_link { + position: absolute; + box-sizing: border-box; + -moz-box-sizing: border-box; + text-align: right; + cursor: pointer; + padding-right: 10px; +} +.dhx_month_link a { + color: blue; +} +.dhx_month_link a:hover { + text-decoration: underline; +} +.dhx_global_tip { + font-family: Tahoma, Helvetica; + text-align: center; + font-size: 20px; + position: fixed; + top: 60px; + right: 20px; + background-color: rgba(255, 255, 255, 0.7); + color: #000; + z-index: 10000; + padding: 20px 30px; + width: 190px; +} +.dhx_global_tip div { + font-size: 30px; +} +@media (-moz-touch-enabled) { + .dhx_cal_container { + user-select: none; + -moz-user-select: none; + } +} +.dhx_unselectable, +.dhx_unselectable div { + -webkit-user-select: none; + -moz-user-select: none; + -moz-user-select: -moz-none; +} +.dhx_cal_light { + -webkit-tap-highlight-color: transparent; + background-color: #FFE763; + border-radius: 5px; + font-family: Tahoma; + font-size: 8pt; + border: 1px solid #B7A64B; + color: #887A2E; + position: absolute; + z-index: 10001; + width: 580px; + height: 300px; + box-shadow: 5px 5px 5px #888; +} +.dhx_cal_light_wide { + width: 650px; +} +.dhx_mark { + position: relative; + top: 3px; + background-image: url('imgs/controls.gif'); + background-position: 0px -43px; + padding-left: 10px; +} +.dhx_ie6 .dhx_mark { + background-position: 6px -41px; +} +.dhx_cal_light select { + font-family: Tahoma; + font-size: 8pt; + color: #887A2E; + padding: 2px; + margin: 0px; +} +.dhx_cal_ltitle { + padding: 2px 0px 2px 5px; + overflow: hidden; + white-space: nowrap; +} +.dhx_cal_ltitle span { + white-space: nowrap; +} +.dhx_cal_lsection { + background-color: #DBCF8C; + color: #FFF4B5; + font-weight: bold; + padding: 5px 0px 3px 10px; +} +.dhx_section_time { + background-color: #DBCF8C; + white-space: nowrap; +} +.dhx_cal_lsection .dhx_fullday { + float: right; + margin-right: 5px; + color: #887A2E; + font-size: 12px; + font-weight: normal; + line-height: 20px; + vertical-align: top; + cursor: pointer; +} +.dhx_cal_lsection { + font-size: 18px; + font-family: Arial; +} +.dhx_cal_ltext { + padding: 2px 0px 2px 10px; + overflow: hidden; +} +.dhx_cal_ltext textarea { + background-color: #FFF4B5; + /* #FFF4B5; should be the same for dhx_cal_larea, was transperent */ + overflow: auto; + border: none; + color: #887A2E; + height: 100%; + width: 100%; + outline: none !important; + resize: none; +} +.dhx_time { + font-weight: bold; +} +.dhx_cal_light .dhx_title { + padding-left: 10px; +} +.dhx_cal_larea { + border: 1px solid #DCC43E; + background-color: #FFF4B5; + overflow: hidden; + margin-left: 3px; + width: 572px; + height: 1px; +} +.dhx_btn_set { + padding: 5px 10px 0px 10px; + float: left; +} +.dhx_btn_set div { + float: left; + height: 21px; + line-height: 21px; + vertical-align: middle; + cursor: pointer; +} +.dhx_save_btn { + background-image: url('imgs/controls.gif'); + background-position: -84px 0px; + width: 21px; +} +.dhx_cancel_btn { + background-image: url('imgs/controls.gif'); + background-position: -63px 0px; + width: 20px; +} +.dhx_delete_btn { + background-image: url('imgs/controls.gif'); + background-position: -42px 0px; + width: 20px; +} +.dhx_cal_cover { + width: 100%; + height: 100%; + position: absolute; + z-index: 10000; + top: 0px; + left: 0px; + background-color: black; + opacity: 0.1; + filter: alpha(opacity=10); +} +.dhx_custom_button { + padding: 0px 3px 0px 3px; + color: #887A2E; + font-family: Tahoma; + font-size: 8pt; + background-color: #FFE763; + font-weight: normal; + margin-right: 5px; + margin-top: 0px; + cursor: pointer; +} +.dhx_custom_button div { + cursor: pointer; + float: left; + height: 21px; + line-height: 21px; + vertical-align: middle; +} +.dhx_cal_light_wide .dhx_cal_larea { + border-top-width: 0px; +} +.dhx_cal_light_wide .dhx_cal_lsection { + border: 0px; + float: left; + text-align: right; + width: 100px; + height: 20px; + font-size: 16px; + padding: 5px 0px 0px 10px; +} +.dhx_cal_light_wide .dhx_wrap_section { + border-top: 1px solid #DBCF8C; + position: relative; + background-color: #DBCF8C; + overflow: hidden; +} +.dhx_cal_light_wide .dhx_section_time { + padding-top: 2px !important; + height: 20px !important; +} +.dhx_section_time { + text-align: center; +} +.dhx_cal_light_wide .dhx_cal_larea { + width: 730px; +} +.dhx_cal_light_wide { + width: 738px; +} +.dhx_cal_light_wide .dhx_section_time { + background: transparent; +} +.dhx_cal_light_wide .dhx_cal_checkbox label { + padding-left: 0px; +} +.dhx_cal_wide_checkbox input { + margin-top: 8px; + margin-left: 14px; +} +.dhx_cal_light input { + font-family: Tahoma; + font-size: 8pt; + color: #887A2E; +} +.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday { + float: none; + margin-right: 0px; + color: #FFF4B5; + font-weight: bold; + font-size: 16px; + font-family: Arial; + cursor: pointer; +} +.dhx_custom_button { + float: right; + height: 21px; + width: 90px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +.dhx_cal_light_wide .dhx_custom_button { + position: absolute; + top: 0; + right: 0; + margin-top: 2px; +} +.dhx_cal_light_wide .dhx_repeat_right { + margin-right: 55px; +} +.dhx_minical_popup { + position: absolute; + z-index: 10100; + width: 251px; + height: 175px; +} +.dhx_scale_bar_header { + position: absolute; + border-bottom: 1px dotted #8894A3; + width: 100%; +} +.dhx_expand_icon { + position: absolute; + top: 0px; + right: 0px; + background-image: url(imgs/collapse_expand_icon.gif); + width: 18px; + height: 18px; + cursor: pointer; + background-position: 0px 18px; + z-index: 16; +} +.dhx_scheduler_agenda .dhx_cal_data { + background-image: url(imgs/databg.png); +} +.dhx_agenda_area { + width: 100%; + overflow-y: auto; + background-image: url(imgs/databg.png); +} +.dhx_agenda_line { + height: 21px; + clear: both; + overflow: hidden; +} +.dhx_agenda_line div { + float: left; + width: 188px; + border-right: 1px dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_agenda_area .dhx_agenda_line div { + border-right: 0px dotted #8894A3; +} +.dhx_v_border { + position: absolute; + left: 187px; + top: 0; + border-right: 1px dotted #8894A3; + width: 1px; + height: 100%; +} +.dhx_agenda_line .dhx_event_icon { + width: 20px; + border-width: 0px; + background: url(imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor: pointer; +} +.dhx_agenda_line span { + padding-left: 5px; + line-height: 21px; +} +.dhx_year_body { + border-left: 1px dotted #586A7E; +} +.dhx_year_week { + position: relative; +} +.dhx_scale_bar_last { + border-right: 1px dotted #586A7E; +} +.dhx_year_month { + height: 18px; + padding-top: 3px; + border: 1px dotted #586A7E; + text-align: center; + vertical-align: middle; +} +.dhx_year_body .dhx_before .dhx_month_head, +.dhx_year_body .dhx_after .dhx_month_head, +.dhx_year_body .dhx_before .dhx_month_head a, +.dhx_year_body .dhx_after .dhx_month_head a { + color: #E2E3E6 !important; +} +.dhx_year_body .dhx_month_body { + height: 0px; + overflow: hidden; +} +.dhx_month_head.dhx_year_event { + background-color: #FFE763; +} +.dhx_year_body .dhx_before .dhx_month_head, +.dhx_year_body .dhx_after .dhx_month_head { + cursor: default; +} +.dhx_year_tooltip { + border: 1px solid #BBBBBB; + background-image: url(imgs/databg.png); + position: absolute; + z-index: 9998; + width: 300px; + height: auto; + font-family: Tahoma; + font-size: 8pt; + overflow: hidden; +} +.dhx_tooltip_line { + line-height: 20px; + height: 20px; + overflow: hidden; +} +.dhx_tooltip_line .dhx_event_icon { + width: 20px; + height: 20px; + padding-right: 10px; + float: left; + border-width: 0px; + position: relative; + background: url(imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor: pointer; +} +.dhx_tooltip_date { + float: left; + width: auto; + padding-left: 5px; + text-align: center; +} +.dhx_text_disabled { + color: #887A2E; + font-family: Tahoma; + font-size: 8pt; +} +.dhx_mini_calendar { + -moz-box-shadow: 5px 5px 5px #888; + /*Doesn't work in IE*/ + -khtml-box-shadow: 5px 5px 5px #888; + -moz-user-select: -moz-none; + -webkit-user-select: none; + -user-select: none; +} +.dhx_mini_calendar .dhx_month_head { + cursor: pointer; +} +.dhx_mini_calendar .dhx_calendar_click { + background-color: #C2D5FC; +} +.dhx_cal_navline div.dhx_minical_icon { + width: 18px; + height: 18px; + left: 190px; + top: 1px; + cursor: pointer; + background-image: url(imgs/calendar.gif); +} +.dhx_matrix_scell { + height: 100%; +} +.dhx_matrix_cell, +.dhx_matrix_scell { + overflow: hidden; + text-align: center; + vertical-align: middle; + border-bottom: 1px dotted #8894A3; + border-right: 1px dotted #8894A3; +} +.dhx_matrix_cell { + background-color: white; +} +.dhx_matrix_line { + overflow: hidden; +} +.dhx_matrix_cell div, +.dhx_matrix_scell div { + overflow: hidden; + text-align: center; + height: auto; +} +.dhx_cal_lsection .dhx_readonly { + font-size: 9pt; + font-size: 8pt; + padding: 2px; + color: #887A2E; +} +.dhx_cal_event_line .dhx_event_resize { + cursor: w-resize; + background: url(imgs/resize_dots.png) repeat-y; + position: absolute; + top: 0; + width: 4px; + height: 100%; +} +.dhx_event_resize_start { + left: 0; +} +.dhx_event_resize_end { + right: 0; +} +/* Tree view */ +.dhx_matrix_scell.folder, +.dhx_data_table.folder .dhx_matrix_cell { + background-color: #969394; + cursor: pointer; +} +.dhx_matrix_scell .dhx_scell_level0 { + padding-left: 5px; +} +.dhx_matrix_scell .dhx_scell_level1 { + padding-left: 20px; +} +.dhx_matrix_scell .dhx_scell_level2 { + padding-left: 35px; +} +.dhx_matrix_scell .dhx_scell_level3 { + padding-left: 50px; +} +.dhx_matrix_scell .dhx_scell_level4 { + padding-left: 65px; +} +.dhx_matrix_scell.folder { + font-weight: bold; + text-align: left; +} +.dhx_matrix_scell.folder .dhx_scell_expand { + float: left; + width: 10px; + padding-right: 3px; +} +.dhx_matrix_scell.folder .dhx_scell_name { + float: left; + width: auto; +} +.dhx_matrix_scell.item .dhx_scell_name { + padding-left: 15px; + text-align: left; +} +.dhx_data_table.folder .dhx_matrix_cell { + border-right: 0; +} +.dhx_section_timeline { + overflow: hidden; + padding: 4px 0 2px 10px; +} +.dhx_section_timeline select { + width: 552px; +} +/* Tree view end*/ +/* Map view */ +.dhx_map_area { + width: 100%; + height: 100%; + overflow-y: auto; + overflow-x: hidden; + background-image: url(imgs/databg.png); +} +.dhx_map_line .dhx_event_icon { + width: 20px; + border-width: 0px; + background: url(imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor: pointer; +} +.dhx_map_line { + height: 21px; + clear: both; + overflow: hidden; +} +.dhx_map { + position: absolute; +} +.dhx_map_line div { + float: left; + border-right: 1px dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line .headline_description { + float: left; + border-right: 1px dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line .dhx_map_description { + float: left; + border-right: 0 dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line .headline_date, +.dhx_map_line .headline_description { + border-left: 0; +} +.dhx_map_line .line_description { + float: left; + border-right: 1px dotted #8894A3; + text-align: left; + padding-left: 5px; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line.highlight { + background-color: #C4C5CC; +} +.dhx_map_area .dhx_map_line div { + border-right: 0px dotted #8894A3; +} +/* Map view end */ +/* dhtmlXTooltip start */ +.dhtmlXTooltip.tooltip { + -moz-box-shadow: 3px 3px 3px #888888; + -webkit-box-shadow: 3px 3px 3px #888888; + -o-box-shadow: 3px 3px 3px #888888; + box-shadow: 3px 3px 3px #888888; + filter: progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5); + background-color: white; + border-left: 1px dotted #887A2E; + border-top: 1px dotted #887A2E; + color: #887A2E; + cursor: default; + padding: 10px; + position: absolute; + z-index: 500; + font-family: Tahoma; + font-size: 8pt; + opacity: 1; +} +/* dhtmlXTooltip end */ +/* Lightbox checkbox section */ +.dhx_cal_checkbox label { + padding-left: 5px; +} +/* Lightbox checkbox section end */ +/* Lightbox radiobuttons section */ +.dhx_cal_light .radio { + padding: 2px 0px 2px 10px; +} +.dhx_cal_light .radio input, +.dhx_cal_light .radio label { + line-height: 15px; +} +.dhx_cal_light .radio input { + vertical-align: middle; + margin: 0px; + padding: 0px; +} +.dhx_cal_light .radio label { + vertical-align: middle; + padding-right: 10px; +} +/* Lightbox radiobuttons section end */ +/* Lightbox dhtmlx combo section */ +.dhx_cal_light .combo { + padding: 4px; +} +.dhx_cal_light_wide .dhx_combo_box { + width: 608px !important; + left: 10px; +} +/* Lightbox dhtmlx combo section end */ +/* Agenda week start */ +.dhx_wa_column { + float: left; +} +.dhx_wa_column_last .dhx_wa_day_cont { + border-left: 1px dotted #8894A3; +} +.dhx_wa_scale_bar { + font-family: Tahoma; + padding-left: 10px; + font-size: 11px; + border-top: 1px dotted #8894A3; + border-bottom: 1px dotted #8894A3; +} +.dhx_wa_day_data { + background-color: #FCFEFC; + overflow-y: auto; +} +.dhx_wa_ev_body { + border-bottom: 1px dotted #778899; + font-size: 12px; + padding: 5px 0 5px 7px; +} +.dhx_wa_dnd { + font-family: Tahoma; + position: absolute; + padding-right: 7px; + color: #887AE2 !important; + background-color: #FFE763 !important; + border: 1px solid #B7A543; +} +.dhx_cal_event_selected { + background-color: #9cc1db; + color: white; +} +/* Agenda week end */ +/* timeline second scale start */ +.dhx_second_scale_bar { + border-bottom: 1px dotted #586A7E; + padding-top: 2px; +} +/* timeline second scale end */ +/* grid view */ +.dhx_cal_header div div { + border-left: 1px dotted #8894A3; +} +.dhx_grid_area { + width: 100%; + height: 100%; + overflow-y: auto; + background-color: #FCFEFC; +} +.dhx_grid_area table { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + table-layout: fixed; +} +.dhx_grid_area td { + table-layout: fixed; + text-align: center; +} +.dhx_grid_line { + height: 21px; + clear: both; + overflow: hidden; +} +.dhx_grid_line div { + float: left; + cursor: default; + padding-top: 0; + padding-bottom: 0; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_grid_area td, +.dhx_grid_line div { + padding-left: 8px; + padding-right: 8px; +} +.dhx_grid_area tr.dhx_grid_event { + height: 21px; + overflow: hidden; + margin: 0 0 1px 0; +} +.dhx_grid_area tr.dhx_grid_event td { + /*borders for old ies*/ + border-bottom: 1px solid #ECEEF4; +} +.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td, +.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td { + border-bottom-width: 0px; + border-bottom-style: none; +} +.dhx_grid_area tr.dhx_grid_event:nth-child(2n) { + background-color: #ECEEF4; +} +.dhx_grid_area .dhx_grid_dummy { + table-layout: auto; + margin: 0 !important; + padding: 0 !important; +} +.dhx_grid_v_border { + position: absolute; + border-right: 1px solid #A4BED4; + width: 1px; + height: 100%; +} +.dhx_grid_event_selected { + background-color: #9cc1db !important; + color: white !important; +} +.dhx_grid_sort_desc .dhx_grid_view_sort { + background-position: 0 -55px; +} +.dhx_grid_sort_asc .dhx_grid_view_sort { + background-position: 0 -66px; +} +.dhx_grid_view_sort { + width: 10px; + height: 10px; + position: absolute; + border: none !important; + top: 5px; + background-repeat: no-repeat; + background-image: url(imgs/images.png); +} +/* end grid */ +/* marked timespans */ +.dhx_marked_timespan { + position: absolute; + width: 100%; +} +.dhx_time_block { + position: absolute; + width: 100%; + background: silver; + opacity: 0.4; + filter: alpha(opacity=40); + z-index: 1; +} +.dhx_time_block_reset { + opacity: 1; + filter: alpha(opacity=100); +} +.dhx_scheduler_month .dhx_marked_timespan { + display: none; +} +.dhx_mini_calendar .dhx_marked_timespan { + display: none; +} +/* now time */ +.dhx_now_time { + width: 100%; + border-bottom: 2px solid red; + z-index: 1; +} +.dhx_scheduler_month .dhx_now_time { + border-bottom: 0; + border-left: 2px solid red; +} +.dhx_matrix_now_time { + border-left: 2px solid red; + z-index: 1; +} +.dhx_now_time, +.dhx_matrix_now_time { + opacity: 0.5; +} +/* Quick info */ +.dhx_cal_quick_info { + border: 2px solid #888; + border-radius: 5px; + position: absolute; + z-index: 300; + background-color: #8e99ae; + background-color: rgba(98, 107, 127, 0.5); + padding-left: 7px; + width: 300px; + transition: left 0.5s ease, right 0.5s; + -moz-transition: left 0.5s ease, right 0.5s; + -webkit-transition: left 0.5s ease, right 0.5s; + -o-transition: left 0.5s ease, right 0.5s; +} +.dhx_no_animate { + transition: none; + -moz-transition: none; + -webkit-transition: none; + -o-transition: none; +} +.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon { + float: right; +} +.dhx_cal_qi_title { + padding: 5px 0px 10px 5px; + color: #FFF; + letter-spacing: 1px; +} +.dhx_cal_qi_tdate { + font-size: 14px; +} +.dhx_cal_qi_tcontent { + font-size: 18px; + font-weight: bold; +} +.dhx_cal_qi_content { + border: 1px solid #888; + background-color: #fefefe; + padding: 16px 8px; + font-size: 14px; + color: #444; + width: 275px; + overflow: hidden; +} +.dhx_qi_big_icon { + border-radius: 3px; + color: #444; + margin: 5px 9px 5px 0px; + min-width: 60px; + line-height: 20px; + vertical-align: middle; + padding: 5px 10px 5px 5px; + cursor: pointer; + background-color: #fefefe; + border-bottom: 1px solid #666; + border-right: 1px solid #666; + float: left; +} +.dhx_cal_qi_controls div { + float: left; + height: 20px; + text-align: center; + line-height: 20px; +} +.dhx_qi_big_icon .dhx_menu_icon { + margin: 0 8px 0 0px; +} +.dhx_drag_marker { + width: 100%; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; + background-color: #FFE763; + position: absolute; + box-sizing: border-box !important; + border-top: 1px solid #B6B6B6; + border-bottom: 1px solid #b6b6b6; +} +/* bootstrap CSS fix start */ +.dhx_cal_navline div, +.dhx_cal_header, +.dhx_cal_header div, +.dhx_cal_data div, +.dhx_cal_light, +.dhx_cal_light div { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.dhx_cal_light .dhx_cal_radio label { + margin-bottom: 0; +} +.dhx_cal_event div { + line-height: normal; +} +/* bootstrap CSS fix end */ +.dhx_cal_container { + background-color: #C2D5FC; + font-family: Tahoma; + font-size: 8pt; + position: relative; + overflow: hidden; +} +.dhx_cal_container div { + -moz-user-select: none; + -moz-user-select: -moz-none; +} +.dhx_cal_navline { + height: 20px; + position: absolute; + z-index: 3; + width: 750px; + color: #2F3A48; +} +.dhx_cal_navline div { + position: absolute; + top: 2px; + white-space: nowrap; +} +.dhx_cal_navline .dhx_cal_date { + font-weight: 600; + left: 210px; + padding-top: 1px; +} +.dhx_cal_button .dhx_left_bg { + width: 1px; + overflow: hidden; + height: 17px; + z-index: 20; + top: 0px; +} +.dhx_cal_prev_button { + background-image: url(imgs/buttons.png); + background-position: 0px 0px; + width: 29px; + height: 17px; + left: 50px; + cursor: pointer; +} +.dhx_cal_next_button { + background-image: url(imgs/buttons.png); + background-position: -30px 0px; + width: 29px; + height: 17px; + left: 80px; + cursor: pointer; +} +.dhx_cal_today_button { + background-image: url(imgs/buttons.png); + background-position: -60px 0px; + width: 75px; + height: 17px; + left: 112px; + cursor: pointer; + text-align: center; + text-decoration: underline; +} +.dhx_cal_tab { + width: 59px; + height: 19px; + text-align: center; + text-decoration: underline; + padding-top: 2px; + cursor: pointer; + background-color: #D8E1EA; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.dhx_cal_tab.active { + text-decoration: none; + cursor: default; + font-weight: bold; + border: 1px dotted #586A7E; + border-bottom: 0; + background-color: #C2D5FC; +} +.dhx_cal_header { + position: absolute; + left: 10px; + top: 23px; + width: 750px; + border-top: 1px dotted #8894A3; + border-right: 1px dotted #8894A3; + z-index: 2; + overflow: hidden; + color: #2F3A48; +} +.dhx_cal_data { + -webkit-tap-highlight-color: transparent; + border-top: 1px dotted #8894A3; + position: absolute; + top: 44px; + width: 600px; + overflow-y: auto; + overflow-x: hidden; + -webkit-overflow-scrolling: touch; +} +.dhx_cal_data { + -ms-touch-action: pan-y; +} +.dhx_cal_event, +.dhx_cal_event_line, +.dhx_cal_event_clear { + -ms-touch-action: none; +} +.dhx_scale_bar { + position: absolute; + text-align: center; + background-color: #C2D5FC; + padding-top: 3px; + border-left: 1px dotted #586A7E; +} +.dhx_scale_holder { + position: absolute; + border-right: 1px dotted #586A7E; + background-image: url(imgs/databg.png); +} +.dhx_scale_holder_now { + position: absolute; + border-right: 1px dotted #586A7E; + background-image: url(imgs/databg_now.png); +} +.dhx_scale_hour { + height: 41px; + width: 50px; + border-bottom: 1px dotted #8894A3; + background-color: #C2D5FC; + text-align: center; + line-height: 40px; + color: #586A7E; + overflow: hidden; +} +.dhx_month_head { + background-color: #EBEFF4; + color: #2F3A48; + height: 18px; + padding-right: 5px; + padding-top: 3px; + text-align: right; + border-right: 1px dotted #586A7E; +} +.dhx_month_body { + border-right: 1px dotted #586A7E; + border-bottom: 1px dotted #586A7E; + background-color: #FFFFFF; +} +.dhx_now .dhx_month_body { + background-color: #E2EDFF; +} +.dhx_after .dhx_month_body, +.dhx_before .dhx_month_body { + background-color: #ECECEC; +} +.dhx_after .dhx_month_head, +.dhx_before .dhx_month_head { + background-color: #E2E3E6; + color: #94A6BB; +} +.dhx_now .dhx_month_head { + background-color: #D1DEF4; + font-weight: bold; +} +.dhx_scale_ignore { + display: none; +} +.dhx_cal_drag { + position: absolute; + z-index: 9999; + background-color: #FFE763; + border: 1px solid #B7A543; + opacity: 0.5; + filter: alpha(opacity=50); +} +.dhx_loading { + position: absolute; + width: 128px; + height: 15px; + background-image: url(imgs/loading.gif); + z-index: 9999; +} +.dhx_multi_day_icon, +.dhx_multi_day { + background-color: #E1E6FF; + background-repeat: no-repeat; + border-right: 1px dotted #8894A3; +} +.dhx_multi_day { + position: absolute; + border-top: 1px dotted #8894A3; +} +.dhx_multi_day_icon, +.dhx_multi_day_icon_small { + background-position: center center; + background-color: #E1E6FF; + background-repeat: no-repeat; + border-bottom: 1px dotted #8894A3; + border-right: 1px dotted #8894A3; +} +.dhx_multi_day_icon { + background-image: url(imgs/clock_big.gif); +} +.dhx_multi_day_icon_small { + background-image: url(imgs/clock_small.gif); +} +.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container { + background-color: #d0e5ff; +} +/* left border config option support */ +.dhx_scale_hour_border, +.dhx_month_body_border, +.dhx_scale_bar_border, +.dhx_month_head_border { + border-left: 1px dotted #8894A3; +} +/* export to PDF and iCal buttons start */ +.dhx_cal_navline .dhx_cal_export { + width: 18px; + height: 18px; + margin: 2px; + cursor: pointer; + top: 0px; +} +.dhx_cal_navline .dhx_cal_export.pdf { + left: 2px; + background-image: url('imgs/export_pdf.png'); +} +.dhx_cal_navline .dhx_cal_export.ical { + left: 24px; + background-image: url('imgs/export_ical.png'); +} +/* export to PDF and iCal buttons end */ +/*All*/ +.dhx_form_repeat, +.dhx_form_repeat input { + padding: 0; + margin: 0; + padding-left: 5px; + font-family: Tahoma, Verdana; + font-size: 11px; + line-height: 24px; +} +.dhx_form_repeat { + overflow: hidden; + /*height:115px;*/ + height: 0px; + background-color: #FFF4B5; + /*border: 1px solid #DCC43E;*/ +} +.dhx_cal_light_wide .dhx_form_repeat { + background-color: transparent; +} +.dhx_repeat_center, +.dhx_repeat_left { + height: 115px; + padding: 10px 0 10px 10px; + float: left; +} +.dhx_repeat_left { + width: 95px; +} +.dhx_repeat_center { + width: 335px; + margin-top: 12px; +} +.dhx_repeat_divider { + float: left; + height: 115px; + border-left: 1px dotted #DCC43E; + /*background-color: #DCC43E;*/ + width: 1px; +} +.dhx_repeat_right { + float: right; + height: 115px; + width: 160px; + padding: 10px 3px 10px 10px; + margin-top: 7px; +} +input.dhx_repeat_text { + height: 16px; + width: 27px; + margin: 0 4px 0 4px; + line-height: 18px; + padding: 0 0 0 2px; +} +.dhx_form_repeat select { + height: 20px; + width: 87px; + padding: 0 0 0 2px; + margin: 0 4px 0 4px; +} +input.dhx_repeat_date { + height: 18px; + width: 80px; + padding: 0 0 0 2px; + margin: 0 4px 0 4px; + background-repeat: no-repeat; + background-position: 64px 0; + border: 1px #7f9db9 solid; + line-height: 18px; +} +input.dhx_repeat_radio { + margin-right: 4px; +} +input.dhx_repeat_checkbox { + margin: 4px 4px 0 0; +} +.dhx_repeat_days td { + padding-right: 5px; +} +.dhx_repeat_days label { + font-size: 10px; +} +.dhx_custom_button { + width: 90px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +.dhx_custom_button_recurring { + background-image: url(imgs/but_repeat.gif); + background-position: -5px 20px; + width: 20px; + margin-right: 10px; +} +/* increase width of lightbox */ +.dhx_cal_light_rec { + width: 640px; +} +.dhx_cal_light_rec .dhx_cal_larea { + width: 632px; +} +.dhx_cal_light_rec.dhx_cal_light_wide { + width: 816px; +} +.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea { + width: 808px; +} +/* event start */ +.dhx_cal_event .dhx_title { + border-width: 1px 1px 0 1px; + -webkit-border-top-left-radius: 1px; + -webkit-border-top-right-radius: 1px; + -moz-border-radius-topleft: 1px; + -moz-border-radius-topright: 1px; + border-top-left-radius: 1px; + border-top-right-radius: 1px; + font-family: "Segoe UI", Arial; + font-weight: bold; + font-size: 12px; + height: 14px; + line-height: 14px; +} +.dhx_cal_event .dhx_body, +.dhx_cal_event.dhx_cal_select_menu .dhx_body { + padding-bottom: 8px; + -webkit-border-bottom-right-radius: 1px; + -webkit-border-bottom-left-radius: 1px; + -moz-border-radius-bottomright: 1px; + -moz-border-radius-bottomleft: 1px; + border-bottom-right-radius: 1px; + border-bottom-left-radius: 1px; +} +.dhx_cal_event .dhx_header, +.dhx_cal_event.dhx_cal_select_menu .dhx_footer { + display: none; +} +.dhx_cal_event .dhx_footer { + height: 15px; + border: 0; + background-color: transparent !important; + margin-top: -11px; +} +.dhx_cal_event .dhx_footer:hover { + background: url(imgs_flat/resizing.png) no-repeat center center; +} +.dhx_cal_event .dhx_header, +.dhx_cal_event .dhx_body, +.dhx_cal_event .dhx_title { + background-color: #5B9BE0; + border-color: transparent; + color: white; +} +.dhx_cal_event .dhx_body, +.dhx_cal_event.dhx_cal_select_menu .dhx_body { + border-bottom: 1px solid white; + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} +.dhx_cal_event.dhx_cal_editor { + border: 1px solid transparent; +} +.dhx_cal_editor { + font-size: 12px; + font-family: "Segoe UI", Arial; +} +div.dhx_menu_head, +div.dhx_menu_icon { + background-image: url(imgs_flat/controls.png); +} +.dhx_cal_event_line { + border: 1px solid transparent; + background-color: #5B9BE0; + color: #FFF; + height: 17px; + line-height: 17px; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; +} +.dhx_cal_event_line:hover div { + background: url(imgs_flat/resize_dots.png) repeat-y; +} +.dhx_cal_event_line_start { + -webkit-border-top-left-radius: 1px; + -webkit-border-bottom-left-radius: 1px; + -moz-border-radius-topleft: 1px; + -moz-border-radius-bottomleft: 1px; + border-top-left-radius: 1px; + border-bottom-left-radius: 1px; +} +.dhx_cal_event_line_end { + -webkit-border-top-right-radius: 1px; + -webkit-border-bottom-right-radius: 1px; + -moz-border-radius-topright: 1px; + -moz-border-radius-bottomright: 1px; + border-top-right-radius: 1px; + border-bottom-right-radius: 1px; +} +.dhx_cal_event .dhx_body, +.dhx_cal_event_line { + font-size: 12px; + font-family: "Segoe UI", Arial; +} +.dhx_cal_event:hover .dhx_footer { + background: url(imgs_flat/resizing.png) no-repeat center center; +} +/* event end */ +/* scales, containers start */ +.dhx_cal_container { + background-color: white; + font-family: "Segoe UI", Arial; +} +.dhx_cal_data { + border-top: 1px solid #CECECE; +} +.dhx_scale_holder { + background-image: url(imgs_flat/databg.png); + border-right: 1px solid #CECECE; +} +.dhx_scale_holder_now { + background-image: url(imgs_flat/databg_now.png); + border-right: 1px solid #CECECE; +} +.dhx_scale_hour { + border-bottom: 1px solid #CECECE; + background-color: white; + font: 11px/44px Arial; + font-family: "Segoe UI", Arial; + font-weight: lighter; + color: #767676; +} +.dhx_scale_h { + display: inline-block; + font-size: 22px; +} +.dhx_scale_m { + display: inline-block; + font-size: 11px; + line-height: 35px; + vertical-align: top; +} +.dhx_cal_header { + border: 1px solid #CECECE; + border-left: 0; + border-bottom: 0; +} +.dhx_scale_bar { + border-left: 1px solid #CECECE; + font: 12px/16px "Segoe UI", Arial; + color: #767676; + line-height: 30px; + padding-top: 2px; + background-color: white; +} +.dhx_scale_bar > a { + color: #5780AD; + text-decoration: none; +} +.dhx_scale_bar > a:hover { + text-decoration: underline; +} +.dhx_month_head > a { + color: #5780AD; + text-decoration: none; +} +.dhx_month_head > a:hover { + text-decoration: underline; +} +/* scales, containers end */ +/* navigation start */ +.dhx_cal_navline div { + top: 14px; +} +.dhx_cal_tab, +.dhx_cal_date, +.dhx_cal_today_button, +.dhx_cal_prev_button, +.dhx_cal_next_button { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + border: none; + color: #454544; + height: 30px; + line-height: 30px; + background: none; + font-family: "Segoe UI", Arial; + font-weight: lighter; +} +.dhx_cal_navline .dhx_cal_date { + border: 0; + color: #454544; + font-family: "Segoe UI", Arial; + font-weight: lighter; + font-size: 22px; + text-align: center; + top: 14px; + position: absolute; + left: 0; + width: 100%; + z-index: -1; +} +.dhx_cal_today_button { + background: none; + color: #5780AD; + font-size: 13px; + font-weight: bolder; + left: auto; + right: 123px; + text-decoration: none; + width: 80px; +} +.dhx_cal_prev_button, +.dhx_cal_next_button { + left: auto; + width: 46px; +} +.dhx_cal_prev_button { + right: 61px; + background: url(imgs_flat/arrow_left.png) no-repeat center center; +} +.dhx_cal_next_button { + right: 14px; + background: url(imgs_flat/arrow_right.png) no-repeat center center; +} +.dhx_cal_tab { + color: #5780AD; + font-size: 13px; + font-weight: bolder; + padding-top: 0; + text-decoration: none; + width: 60px; +} +.dhx_cal_tab:hover, +.dhx_cal_today_button:hover { + text-decoration: underline; +} +.dhx_cal_tab.active { + background-color: #5780AD; + border: none; + color: #FFFFFF; + font-family: "Segoe UI", Arial; + font-weight: lighter; + text-decoration: none; +} +.dhx_cal_tab_standalone { + padding: 0 5px; +} +.dhx_multi_day, +.dhx_multi_day_icon_small, +.dhx_multi_day_icon { + background-color: white; +} +.dhx_multi_day { + border-top: 1px solid #CECECE; +} +.dhx_multi_day_icon, +.dhx_multi_day_icon_small { + border-bottom: 1px solid #CECECE; + border-right: 1px solid #CECECE; +} +.dhx_multi_day_icon_small { + background-image: url(imgs_flat/clock.png); +} +.dhx_multi_day_icon { + background-image: url(imgs_flat/clock_big.gif); +} +/* navigation end */ +/* month view start */ +.dhx_month_head, +.dhx_after .dhx_month_head, +.dhx_before .dhx_month_head, +.dhx_after .dhx_month_body, +.dhx_before .dhx_month_body { + background-color: white; +} +.dhx_month_head { + height: 21px; + padding-top: 0; + font: 12px/21px "Segoe UI", Arial; + color: #5780AD; + border-right: 1px solid #CECECE; +} +.dhx_after .dhx_month_head, +.dhx_before .dhx_month_head, +.dhx_after .dhx_month_head, +.dhx_before .dhx_month_head { + color: #bbbbbb; +} +.dhx_month_body { + border-right: 1px solid #CECECE; + border-bottom: 1px solid #CECECE; +} +.dhx_now .dhx_month_head, +.dhx_now .dhx_month_body { + background-color: #FFF3A1; + font-weight: normal; +} +.dhx_cal_event_clear { + color: #0E64A0; +} +/* month view end */ +/* lightbox start */ +.dhx_cal_larea { + margin-left: 0; +} +.dhx_cal_light_wide .dhx_cal_larea { + margin-left: 3px; +} +.dhx_cal_light_wide .dhx_wrap_section { + padding: 5px 0; +} +.dhx_cal_light, +.dhx_cal_larea, +.dhx_cal_lsection, +.dhx_wrap_section, +.dhx_cal_light_wide .dhx_wrap_section, +.dhx_cal_ltext textarea { + background-color: white; + font-family: "Segoe UI", Arial; +} +.dhx_cal_lsection, +.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday, +.dhx_cal_lsection .dhx_fullday, +.dhx_cal_light input { + color: #747473; + font-family: "Segoe UI", Arial; +} +.dhx_cal_light_wide .dhx_wrap_section { + border-top: 0; + border-bottom: 1px solid #CECECE; +} +.dhx_cal_larea { + border: 1px solid transparent; +} +.dhx_cal_ltext textarea, +.dhx_cal_light select, +.dhx_cal_light { + color: #2E2E2E; +} +.dhx_cal_light { + border: none; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; +} +.dhx_cal_light_wide .dhx_cal_lsection, +.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday { + font-family: "Segoe UI", Arial; + font-size: 13px; + font-weight: bold; +} +.dhx_section_time { + background-color: transparent; +} +.dhx_save_btn, +.dhx_cancel_btn, +.dhx_delete_btn, +.dhx_btn_set div:first-child { + display: none; +} +.dhx_btn_set, +.dhx_btn_set div { + height: 30px; + padding: 0 20px; + line-height: 30px; +} +.dhx_btn_set { + margin: 12px 0 0 0; + padding: 0; + font-size: 13px; + color: #454544; + font-weight: normal; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; +} +.dhx_left_btn_set { + margin-left: 20px; +} +.dhx_right_btn_set { + margin-right: 20px; +} +.dhx_save_btn_set { + border: none; + color: #FFF; + background-color: #5B9BE0; +} +.dhx_cancel_btn_set { + background-color: #FE7510; + color: #FFF; +} +.dhx_delete_btn_set { + border: 1px solid #A4A4A4; + color: #747473; +} +.dhx_cal_ltitle { + height: 30px; + line-height: 30px; + border-bottom: 1px solid #CECECE; +} +.dhx_cal_ltitle span { + float: left; +} +.dhx_cal_light .dhx_title { + font-size: 13px; + padding-left: 13px; +} +.dhx_mark { + display: none; +} +.dhx_time { + font-size: 12px; + padding-left: 10px; +} +.dhx_close_icon { + float: right; + width: 9px; + height: 9px; + background: url(imgs_flat/close_icon.png) no-repeat center center; + padding: 10px; + margin-top: 1px; +} +.dhx_cal_light_wide .dhx_cal_ltext.dhx_cal_template { + line-height: 22px; +} +.dhx_cal_ltext textarea { + line-height: 20px; + box-sizing: border-box; + -moz-box-sizing: border-box; + border: 1px solid #CECECE; + background-color: #F9F9F9; +} +/* lightbox end */ +/* modal box */ +.dhtmlx_modal_box { + border: none; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + background: white; + font-family: "Segoe UI", Arial; + width: 330px; +} +.dhtmlx_popup_text { + font-size: 16px; +} +.dhtmlx_popup_controls { + padding-bottom: 9px; +} +.dhtmlx_popup_button, +.dhtmlx_popup_button:active, +.dhtmlx_popup_button div, +.dhtmlx_popup_button div:active { + color: #444; + background: white; + box-shadow: none; + border: none; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; +} +.dhtmlx_popup_button.dhtmlx_ok_button { + border: none; + background-color: #5B9BE0; +} +.dhtmlx_popup_button.dhtmlx_ok_button div { + background: #5B9BE0; + border: none; + color: #FFF; +} +.dhtmlx_popup_button.dhtmlx_cancel_button { + border: none; + background-color: #FE7510; +} +.dhtmlx_popup_button.dhtmlx_cancel_button div { + background: #FE7510; + border: none; + color: #FFF; +} +/* mobdal box end */ +/* minicalendar */ +.dhx_cal_container.dhx_mini_calendar { + box-sizing: border-box; + border: none; + box-shadow: 0px 2px 10px 0px #AAA; + border-radius: 0px; +} +.dhx_mini_calendar .dhx_year_month { + border: 1px solid #CECECE; + font-family: "Segoe UI", Arial; +} +.dhx_mini_calendar .dhx_month_head, +.dhx_mini_calendar .dhx_year_month, +.dhx_mini_calendar .dhx_month_body, +.dhx_mini_calendar .dhx_scale_bar, +.dhx_mini_calendar .dhx_year_body { + border-color: transparent; +} +.dhx_mini_calendar .dhx_year_body { + padding-top: 1px; +} +.dhx_mini_calendar .dhx_scale_bar { + border-width: 0; +} +.dhx_mini_calendar .dhx_year_week { + border-bottom: 1px solid #CECECE; + padding-top: 1px; +} +.dhx_mini_calendar .dhx_month_head { + padding-right: 0; + margin-right: 1px; + text-align: center; +} +.dhx_mini_calendar .dhx_cal_prev_button, +.dhx_mini_calendar .dhx_cal_next_button { + border: 0; + height: 20px; +} +/* minicalendar end */ +.dhx_cal_navline div.dhx_minical_icon { + left: 210px; + top: 14px; + width: 30px; + height: 30px; + background: url(imgs_flat/calendar.gif) no-repeat; + background-position: 3px 5px; +} +/* timeline */ +.dhx_cal_event_line .dhx_event_resize { + background: none; +} +.dhx_cal_event_line .dhx_event_resize:hover { + background: url(imgs_flat/resize_dots.png) repeat-y; +} +.dhx_matrix_scell, +.dhx_matrix_cell { + border-bottom: 1px solid #CECECE; + border-right: 1px solid #CECECE; +} +.dhx_cal_header div div { + border-left: 1px solid #CECECE; +} +.dhx_matrix_scell { + font-size: 13px; +} +.dhx_matrix_scell.folder { + border-right: 0; +} +.dhx_second_scale_bar { + border-bottom: 1px solid #CECECE; +} +/* timeline end */ +/* recurring */ +.dhx_repeat_divider { + border-left: 1px solid #CECECE; +} +.dhx_custom_button { + background-color: white; + border: 1px solid #CECECE; + color: #747473; +} +.dhx_cal_light_wide .dhx_custom_button { + margin-top: 6px; +} +.dhx_custom_button_recurring { + background-image: url(imgs_flat/but_repeat.gif); +} +.dhx_form_repeat { + background-color: transparent; +} +/* recurring end */ +/* agenda */ +.dhx_v_border, +.dhx_agenda_line div { + border-right: 1px solid #CECECE; +} +.dhx_cal_header .dhx_agenda_line { + height: 100%; + line-height: 35px; +} +.dhx_cal_header .dhx_agenda_line div { + height: 100%; + line-height: 35px; +} +/* agenda end */ +/* year */ +.dhx_year_month { + border: 1px solid #CECECE; +} +.dhx_scale_bar_last { + border-right: 1px solid #CECECE; +} +.dhx_year_body { + border-left: 1px solid #CECECE; +} +/* year end */ +/* expand */ +.dhx_expand_icon { + top: -3px; +} +/* expand end */ +/* units view */ +.dhx_scale_bar .dhx_cal_next_button, +.dhx_scale_bar .dhx_cal_prev_button { + width: 20px; + height: 100%; + top: 0px !important; + border: 0; +} +.dhx_scale_bar .dhx_cal_next_button { + right: 1px !important; + border-left: 1px solid #CECECE; +} +.dhx_scale_bar .dhx_cal_prev_button { + left: 1px !important; + border-right: 1px solid #CECECE; +} +/* units view end */ +/* map view */ +.dhx_map_line .headline_date, +.dhx_map_line .headline_description { + border: 0; +} +.dhx_map_line .headline_date { + border-right: 1px solid #CECECE; +} +.dhx_cal_header .dhx_map_line { + height: 100%; +} +.dhx_cal_header .dhx_map_line .headline_date, +.dhx_cal_header .dhx_map_line .headline_description { + height: 100%; + line-height: 35px; +} +/* map view end */ +/* tooltip start */ +.dhtmlXTooltip.tooltip { + border-left: 1px solid #CECECE; + border-top: 1px solid #CECECE; + color: #747473; + font-size: 12px; + line-height: 16px; +} +/* tooltip end */ +/* week agenda start */ +.dhx_wa_scale_bar { + border-top: 1px solid #CECECE; + border-bottom: 1px solid #CECECE; +} +.dhx_wa_column_last .dhx_wa_day_cont { + border-left: 1px solid #CECECE; +} +.dhx_wa_ev_body { + border-bottom: 1px solid #CECECE; +} +.dhx_wa_scale_bar { + background-color: #f0ede7; +} +.dhx_wa_ev_body.dhx_cal_event_selected { + background-color: #fff3a1; + color: #362d26; +} +.dhx_wa_dnd { + background-color: #fddb93 !important; + color: #747473 !important; + border: 1px solid #ccb177; +} +/* week agenda end */ +/* readonly start */ +.dhx_text_disabled { + color: #2E2E2E; +} +.dhx_cal_ltext .dhx_text_disabled { + line-height: 22px; +} +/* readonly end */ +/* grid view start */ +.dhx_grid_v_border { + border-right-color: #CECECE; +} +.dhx_cal_header .dhx_grid_line, +.dhx_cal_header .dhx_grid_line div { + height: 100%; + line-height: 35px; +} +/* grid view end*/ +/* left border support */ +.dhx_scale_hour_border, +.dhx_month_body_border, +.dhx_scale_bar_border, +.dhx_month_head_border { + border-left: 1px solid #CECECE; +} +.dhx_cal_quick_info { + background: rgba(204, 204, 204, 0.8); + border: none; + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + font-family: "Segoe UI", Arial; + width: 280px; +} +.dhx_cal_qi_title { + color: #000; +} +.dhx_cal_qi_tdate { + color: #444; +} +.dhx_cal_qi_content { + background: none; + border: none; + padding: 10px 8px; +} +.dhx_qi_big_icon { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + border: none; + color: #FFF; + float: none; + font-size: 13px; +} +.dhx_qi_big_icon .dhx_menu_icon { + display: none !important; +} +.dhx_cal_quick_info .icon_details { + background: #5B9BE0; + margin-left: 100px; +} +.dhx_cal_quick_info .icon_details div { + padding-left: 12px; +} +.dhx_cal_quick_info .icon_delete { + background: #FE7510; +} +.dhx_cal_quick_info .icon_delete div { + padding-left: 12px; +} +/* export to PDF and iCal buttons start */ +.dhx_cal_navline .dhx_cal_export { + width: 32px; + height: 32px; + margin: 2px; + cursor: pointer; + top: 12px; +} +.dhx_cal_navline .dhx_cal_export.pdf { + left: auto; + right: 249px; + background-image: url('imgs_flat/export_pdf.png'); +} +.dhx_cal_navline .dhx_cal_export.ical { + left: auto; + right: 210px; + background-image: url('imgs_flat/export_ical.png'); +} +/* export to PDF and iCal buttons end */ +/* minicalendar */ +.dhx_mini_calendar { + font-family: "Segoe UI", Arial; + padding: 5px; +} +.dhx_mini_calendar .dhx_year_event, +.dhx_mini_calendar .dhx_calendar_click { + border-radius: 0px; +} +.dhx_mini_calendar .dhx_month_head { + color: #363636; + font-family: "Segoe UI", Arial; + font-size: 13px; + margin: 2px 2px; +} +.dhx_mini_calendar .dhx_year_month { + color: #454544; + line-height: 20px; + height: 25px; + font-size: 20px; + font-weight: lighter; +} +.dhx_mini_calendar .dhx_cal_prev_button { + top: 8px !important; +} +.dhx_mini_calendar .dhx_cal_next_button { + top: 8px !important; +} +.dhx_mini_calendar .dhx_scale_bar { + font-family: "Segoe UI", Arial; + font-size: 11px; +} diff --git a/codebase/sources/skins/dhtmlxscheduler_glossy.css b/codebase/sources/skins/dhtmlxscheduler_glossy.css new file mode 100644 index 0000000..1bd718c --- /dev/null +++ b/codebase/sources/skins/dhtmlxscheduler_glossy.css @@ -0,0 +1,1882 @@ +/* +dhtmlxScheduler v.4.1.0 Stardard + +This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. + +(c) Dinamenta, UAB. +*/ +.dhtmlx_message_area { + position: fixed; + right: 5px; + width: 250px; + z-index: 1000; +} +.dhtmlx-info { + min-width: 120px; + padding: 4px 4px 4px 20px; + font-family: Tahoma; + z-index: 10000; + overflow: hidden; + margin: 5px; + margin-bottom: 10px; + -webkit-transition: all .5s ease; + -moz-transition: all .5s ease; + -o-transition: all .5s ease; + transition: all .5s ease; +} +.dhtmlx-info.hidden { + height: 0px; + padding: 0px; + border-width: 0px; + margin: 0px; + overflow: hidden; +} +.dhtmlx_modal_box { + overflow: hidden; + display: inline-block; + min-width: 300px; + width: 300px; + text-align: center; + position: fixed; + background-color: #fff; + background: -webkit-linear-gradient(top, #ffffff 1%, #d0d0d0 99%); + background: -moz-linear-gradient(top, #ffffff 1%, #d0d0d0 99%); + box-shadow: 0px 0px 14px #888; + font-family: Tahoma; + z-index: 20000; + border-radius: 6px; + border: 1px solid #ffffff; +} +.dhtmlx_popup_title { + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-width: 0px; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAoCAMAAAAIaGBFAAAAhFBMVEVwcHBubm5sbGxqampoaGhmZmZlZWVjY2NhYWFfX19dXV1bW1taWlpYWFhWVlZUVFRSUlJRUVFPT09NTU1LS0tJSUlHR0dGRkZERERCQkJAQEA+Pj49PT09PT0+Pj5AQEBBQUFDQ0NERERGRkZHR0dJSUlKSkpMTExMTEw5OTk5OTk5OTkny8YEAAAAQklEQVQImQXBCRJCAAAAwKVSQqdyjSPXNP7/QLsIhA6OTiJnF7GrRCpzc/fw9PKW+/gqlCq1RqvTG/yMJrPF6m/bAVEhAxxnHG0oAAAAAElFTkSuQmCC); + background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%); + background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 97%, #393939 97%); +} +.dhtmlx-info, +.dhtmlx_popup_button, +.dhtmlx_button { + user-select: none; + -webkit-user-select: none; + -moz-user-select: -moz-none; + cursor: pointer; +} +.dhtmlx_popup_text { + overflow: hidden; +} +.dhtmlx_popup_controls { + border-radius: 6px; + padding: 5px; +} +.dhtmlx_popup_button, +.dhtmlx_button { + height: 30px; + line-height: 30px; + display: inline-block; + margin: 0 5px; + border-radius: 6px; + color: #FFF; +} +.dhtmlx_popup_button { + min-width: 120px; +} +div.dhx_modal_cover { + background-color: #000; + cursor: default; + filter: alpha(opacity=20); + opacity: 0.2; + position: fixed; + z-index: 19999; + left: 0px; + top: 0px; + width: 100%; + height: 100%; + border: none; + zoom: 1; +} +.dhtmlx-info img, +.dhtmlx_modal_box img { + float: left; + margin-right: 20px; +} +.dhtmlx-alert-error .dhtmlx_popup_title, +.dhtmlx-confirm-error .dhtmlx_popup_title { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAsCAIAAAArRUU2AAAATklEQVR4nIWLuw2AMBBDjVuQiBT2oWbRDATrnB0KQOJoqPzRe3BrHI6dcBASYREKovtK6/6DsDOX+stN+3H1YX9ciRgnYq5EWYhS2dftBIuLT4JyIrPCAAAAAElFTkSuQmCC); +} +.dhtmlx-alert-error, +.dhtmlx-confirm-error { + border: 1px solid #ff0000; +} +/*Skin section*/ +.dhtmlx_button, +.dhtmlx_popup_button { + box-shadow: 0px 0px 4px #888; + border: 1px solid #838383; +} +.dhtmlx_button input, +.dhtmlx_popup_button div { + border: 1px solid #FFF; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAYFBMVEVwcHBtbW1ra2toaGhmZmZjY2NhYWFeXl5cXFxaWlpXV1dVVVVSUlJQUFBNTU1LS0tJSUlGRkZERERBQUE/Pz88PDw9PT0+Pj5AQEBCQkJDQ0NFRUVHR0dISEhKSkpMTEzqthaMAAAAMklEQVQImQXBhQ2AMAAAsOIMlwWH/8+kRSKVyRVKlVrQaHV6g9FktlhFm93hdLk9Xt8PIfgBvdUqyskAAAAASUVORK5CYII=); + background-image: -webkit-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%); + background-image: -moz-linear-gradient(top, #707070 1%, #3d3d3d 70%, #4c4c4c 99%); + border-radius: 6px; + font-size: 15px; + font-weight: normal; + -moz-box-sizing: content-box; + box-sizing: content-box; + color: #fff; + padding: 0px; + margin: 0px; + vertical-align: top; + height: 28px; + line-height: 28px; +} +.dhtmlx_button input:focus, +.dhtmlx_button input:active, +.dhtmlx_popup_button div:active, +.dhtmlx_popup_button div:focus { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeCAMAAADaS4T1AAAAXVBMVEVwcHBubm5tbW1sbGxra2tpaWloaGhnZ2dmZmZlZWVjY2NiYmJhYWFgYGBfX19dXV1cXFxbW1taWlpZWVlXV1dWVlZVVVVUVFRTU1NRUVFQUFBPT09OTk5NTU1LS0tT9SY0AAAAMUlEQVQImQXBhQGAMAAAIGxnx2z9/00BiVQmVyhVakGj1ekNRpPZYhVtdofT5fZ4fT8hpwG05JjexgAAAABJRU5ErkJggg==); + background-image: -webkit-linear-gradient(top, #707070 1%, #4c4c4c 99%); + background-image: -moz-linear-gradient(top, #707070 1%, #4c4c4c 99%); +} +.dhtmlx_popup_title { + color: #fff; + text-shadow: 1px 1px #000; + height: 40px; + line-height: 40px; + font-size: 20px; +} +.dhtmlx_popup_text { + margin: 15px 15px 5px 15px; + font-size: 14px; + color: #000; + min-height: 30px; + border-radius: 6px; +} +.dhtmlx-info, +.dhtmlx-error { + font-size: 14px; + color: #000; + box-shadow: 0px 0px 10px #888; + padding: 0px; + background-color: #FFF; + border-radius: 3px; + border: 1px solid #ffffff; +} +.dhtmlx-info div { + padding: 5px 10px 5px 10px; + background-color: #fff; + border-radius: 3px; + border: 1px solid #B8B8B8; +} +.dhtmlx-error { + background-color: #d81b1b; + border: 1px solid #ff3c3c; + box-shadow: 0px 0px 10px #000; +} +.dhtmlx-error div { + background-color: #d81b1b; + border: 1px solid #940000; + color: #FFF; +} +.dhx_cal_event .dhx_header, +.dhx_cal_event .dhx_title, +.dhx_cal_event .dhx_body, +.dhx_cal_event .dhx_footer { + background-color: #FFE763; + border: 1px solid #B7A543; + color: #887A2E; + overflow: hidden; + width: 100%; + font-family: Tahoma; + font-size: 8pt; +} +.dhx_move_denied .dhx_cal_event .dhx_header, +.dhx_move_denied .dhx_cal_event .dhx_title { + cursor: default; +} +.dhx_cal_event .dhx_header { + height: 1px; + margin-left: 1px; + border-width: 1px 1px 0px 1px; + cursor: pointer; +} +.dhx_cal_event .dhx_title { + height: 12px; + border-width: 0px 1px 1px 1px; + border-bottom-style: dotted; + font-size: 7pt; + font-weight: bold; + text-align: center; + background-position: right; + background-repeat: no-repeat; + cursor: pointer; +} +.dhx_cal_event .dhx_body, +.dhx_cal_event.dhx_cal_select_menu .dhx_body { + border-width: 0 1px 1px 1px; + padding: 5px; +} +.dhx_cal_event.dhx_cal_select_menu { + -webkit-box-shadow: 0 0 1px #FFF; + -moz-box-shadow: 0 0 1px #FFF; + box-shadow: 0 0 1px #FFF; +} +.dhx_resize_denied, +.dhx_resize_denied .dhx_event_resize { + cursor: default !important; +} +.dhx_cal_event .dhx_event_resize { + cursor: s-resize; +} +.dhx_cal_event .dhx_footer, +.dhx_cal_event .dhx_select_menu_footer { + height: 1px; + margin-left: 2px; + border-width: 0px 1px 1px 1px; + position: relative; +} +.dhx_cal_event_line { + background-color: #FFE763; + border: 1px solid #B7A543; + border-radius: 3px; + font-family: Tahoma; + font-size: 8pt; + height: 13px; + padding-left: 10px; + color: #887A2E; + cursor: pointer; + overflow: hidden; +} +.dhx_cal_event_clear { + font-family: Tahoma; + font-size: 8pt; + height: 13px; + padding-left: 2px; + color: #887A2E; + white-space: nowrap; + overflow: hidden; + cursor: pointer; +} +.dhx_in_move { + background-color: #FFFF80; +} +.dhx_cal_event.dhx_cal_editor { + border: 1px solid #B7A543; + border-top-style: dotted; + z-index: 999; + position: absolute; + overflow: hidden; +} +textarea.dhx_cal_editor { + width: 100%; + height: 100%; + border: 0 solid black; + margin: 0; + padding: 0; + overflow: auto; +} +div.dhx_menu_head { + background-image: url(imgs/controls.gif); + background-position: 0px -43px; + width: 10px; + height: 10px; + margin-left: 5px; + margin-top: 1px; + border: none; + cursor: default; +} +div.dhx_menu_icon { + background-image: url(imgs/controls.gif); + width: 20px; + height: 20px; + margin-left: -5px; + margin-top: 0px; + border: none; + cursor: pointer; +} +div.icon_details { + background-position: 0px 0px; +} +div.icon_edit { + background-position: -22px 0px; +} +div.icon_save { + background-position: -84px -1px; +} +div.icon_cancel { + background-position: -62px 0px; +} +div.icon_delete { + background-position: -42px 0px; +} +/*view more link in month view*/ +.dhx_month_link { + position: absolute; + box-sizing: border-box; + -moz-box-sizing: border-box; + text-align: right; + cursor: pointer; + padding-right: 10px; +} +.dhx_month_link a { + color: blue; +} +.dhx_month_link a:hover { + text-decoration: underline; +} +.dhx_global_tip { + font-family: Tahoma, Helvetica; + text-align: center; + font-size: 20px; + position: fixed; + top: 60px; + right: 20px; + background-color: rgba(255, 255, 255, 0.7); + color: #000; + z-index: 10000; + padding: 20px 30px; + width: 190px; +} +.dhx_global_tip div { + font-size: 30px; +} +@media (-moz-touch-enabled) { + .dhx_cal_container { + user-select: none; + -moz-user-select: none; + } +} +.dhx_unselectable, +.dhx_unselectable div { + -webkit-user-select: none; + -moz-user-select: none; + -moz-user-select: -moz-none; +} +.dhx_cal_light { + -webkit-tap-highlight-color: transparent; + background-color: #FFE763; + border-radius: 5px; + font-family: Tahoma; + font-size: 8pt; + border: 1px solid #B7A64B; + color: #887A2E; + position: absolute; + z-index: 10001; + width: 580px; + height: 300px; + box-shadow: 5px 5px 5px #888; +} +.dhx_cal_light_wide { + width: 650px; +} +.dhx_mark { + position: relative; + top: 3px; + background-image: url('imgs/controls.gif'); + background-position: 0px -43px; + padding-left: 10px; +} +.dhx_ie6 .dhx_mark { + background-position: 6px -41px; +} +.dhx_cal_light select { + font-family: Tahoma; + font-size: 8pt; + color: #887A2E; + padding: 2px; + margin: 0px; +} +.dhx_cal_ltitle { + padding: 2px 0px 2px 5px; + overflow: hidden; + white-space: nowrap; +} +.dhx_cal_ltitle span { + white-space: nowrap; +} +.dhx_cal_lsection { + background-color: #DBCF8C; + color: #FFF4B5; + font-weight: bold; + padding: 5px 0px 3px 10px; +} +.dhx_section_time { + background-color: #DBCF8C; + white-space: nowrap; +} +.dhx_cal_lsection .dhx_fullday { + float: right; + margin-right: 5px; + color: #887A2E; + font-size: 12px; + font-weight: normal; + line-height: 20px; + vertical-align: top; + cursor: pointer; +} +.dhx_cal_lsection { + font-size: 18px; + font-family: Arial; +} +.dhx_cal_ltext { + padding: 2px 0px 2px 10px; + overflow: hidden; +} +.dhx_cal_ltext textarea { + background-color: #FFF4B5; + /* #FFF4B5; should be the same for dhx_cal_larea, was transperent */ + overflow: auto; + border: none; + color: #887A2E; + height: 100%; + width: 100%; + outline: none !important; + resize: none; +} +.dhx_time { + font-weight: bold; +} +.dhx_cal_light .dhx_title { + padding-left: 10px; +} +.dhx_cal_larea { + border: 1px solid #DCC43E; + background-color: #FFF4B5; + overflow: hidden; + margin-left: 3px; + width: 572px; + height: 1px; +} +.dhx_btn_set { + padding: 5px 10px 0px 10px; + float: left; +} +.dhx_btn_set div { + float: left; + height: 21px; + line-height: 21px; + vertical-align: middle; + cursor: pointer; +} +.dhx_save_btn { + background-image: url('imgs/controls.gif'); + background-position: -84px 0px; + width: 21px; +} +.dhx_cancel_btn { + background-image: url('imgs/controls.gif'); + background-position: -63px 0px; + width: 20px; +} +.dhx_delete_btn { + background-image: url('imgs/controls.gif'); + background-position: -42px 0px; + width: 20px; +} +.dhx_cal_cover { + width: 100%; + height: 100%; + position: absolute; + z-index: 10000; + top: 0px; + left: 0px; + background-color: black; + opacity: 0.1; + filter: alpha(opacity=10); +} +.dhx_custom_button { + padding: 0px 3px 0px 3px; + color: #887A2E; + font-family: Tahoma; + font-size: 8pt; + background-color: #FFE763; + font-weight: normal; + margin-right: 5px; + margin-top: 0px; + cursor: pointer; +} +.dhx_custom_button div { + cursor: pointer; + float: left; + height: 21px; + line-height: 21px; + vertical-align: middle; +} +.dhx_cal_light_wide .dhx_cal_larea { + border-top-width: 0px; +} +.dhx_cal_light_wide .dhx_cal_lsection { + border: 0px; + float: left; + text-align: right; + width: 100px; + height: 20px; + font-size: 16px; + padding: 5px 0px 0px 10px; +} +.dhx_cal_light_wide .dhx_wrap_section { + border-top: 1px solid #DBCF8C; + position: relative; + background-color: #DBCF8C; + overflow: hidden; +} +.dhx_cal_light_wide .dhx_section_time { + padding-top: 2px !important; + height: 20px !important; +} +.dhx_section_time { + text-align: center; +} +.dhx_cal_light_wide .dhx_cal_larea { + width: 730px; +} +.dhx_cal_light_wide { + width: 738px; +} +.dhx_cal_light_wide .dhx_section_time { + background: transparent; +} +.dhx_cal_light_wide .dhx_cal_checkbox label { + padding-left: 0px; +} +.dhx_cal_wide_checkbox input { + margin-top: 8px; + margin-left: 14px; +} +.dhx_cal_light input { + font-family: Tahoma; + font-size: 8pt; + color: #887A2E; +} +.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday { + float: none; + margin-right: 0px; + color: #FFF4B5; + font-weight: bold; + font-size: 16px; + font-family: Arial; + cursor: pointer; +} +.dhx_custom_button { + float: right; + height: 21px; + width: 90px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +.dhx_cal_light_wide .dhx_custom_button { + position: absolute; + top: 0; + right: 0; + margin-top: 2px; +} +.dhx_cal_light_wide .dhx_repeat_right { + margin-right: 55px; +} +.dhx_minical_popup { + position: absolute; + z-index: 10100; + width: 251px; + height: 175px; +} +.dhx_scale_bar_header { + position: absolute; + border-bottom: 1px dotted #8894A3; + width: 100%; +} +.dhx_expand_icon { + position: absolute; + top: 0px; + right: 0px; + background-image: url(imgs/collapse_expand_icon.gif); + width: 18px; + height: 18px; + cursor: pointer; + background-position: 0px 18px; + z-index: 16; +} +.dhx_scheduler_agenda .dhx_cal_data { + background-image: url(imgs/databg.png); +} +.dhx_agenda_area { + width: 100%; + overflow-y: auto; + background-image: url(imgs/databg.png); +} +.dhx_agenda_line { + height: 21px; + clear: both; + overflow: hidden; +} +.dhx_agenda_line div { + float: left; + width: 188px; + border-right: 1px dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_agenda_area .dhx_agenda_line div { + border-right: 0px dotted #8894A3; +} +.dhx_v_border { + position: absolute; + left: 187px; + top: 0; + border-right: 1px dotted #8894A3; + width: 1px; + height: 100%; +} +.dhx_agenda_line .dhx_event_icon { + width: 20px; + border-width: 0px; + background: url(imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor: pointer; +} +.dhx_agenda_line span { + padding-left: 5px; + line-height: 21px; +} +.dhx_year_body { + border-left: 1px dotted #586A7E; +} +.dhx_year_week { + position: relative; +} +.dhx_scale_bar_last { + border-right: 1px dotted #586A7E; +} +.dhx_year_month { + height: 18px; + padding-top: 3px; + border: 1px dotted #586A7E; + text-align: center; + vertical-align: middle; +} +.dhx_year_body .dhx_before .dhx_month_head, +.dhx_year_body .dhx_after .dhx_month_head, +.dhx_year_body .dhx_before .dhx_month_head a, +.dhx_year_body .dhx_after .dhx_month_head a { + color: #E2E3E6 !important; +} +.dhx_year_body .dhx_month_body { + height: 0px; + overflow: hidden; +} +.dhx_month_head.dhx_year_event { + background-color: #FFE763; +} +.dhx_year_body .dhx_before .dhx_month_head, +.dhx_year_body .dhx_after .dhx_month_head { + cursor: default; +} +.dhx_year_tooltip { + border: 1px solid #BBBBBB; + background-image: url(imgs/databg.png); + position: absolute; + z-index: 9998; + width: 300px; + height: auto; + font-family: Tahoma; + font-size: 8pt; + overflow: hidden; +} +.dhx_tooltip_line { + line-height: 20px; + height: 20px; + overflow: hidden; +} +.dhx_tooltip_line .dhx_event_icon { + width: 20px; + height: 20px; + padding-right: 10px; + float: left; + border-width: 0px; + position: relative; + background: url(imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor: pointer; +} +.dhx_tooltip_date { + float: left; + width: auto; + padding-left: 5px; + text-align: center; +} +.dhx_text_disabled { + color: #887A2E; + font-family: Tahoma; + font-size: 8pt; +} +.dhx_mini_calendar { + -moz-box-shadow: 5px 5px 5px #888; + /*Doesn't work in IE*/ + -khtml-box-shadow: 5px 5px 5px #888; + -moz-user-select: -moz-none; + -webkit-user-select: none; + -user-select: none; +} +.dhx_mini_calendar .dhx_month_head { + cursor: pointer; +} +.dhx_mini_calendar .dhx_calendar_click { + background-color: #C2D5FC; +} +.dhx_cal_navline div.dhx_minical_icon { + width: 18px; + height: 18px; + left: 190px; + top: 1px; + cursor: pointer; + background-image: url(imgs/calendar.gif); +} +.dhx_matrix_scell { + height: 100%; +} +.dhx_matrix_cell, +.dhx_matrix_scell { + overflow: hidden; + text-align: center; + vertical-align: middle; + border-bottom: 1px dotted #8894A3; + border-right: 1px dotted #8894A3; +} +.dhx_matrix_cell { + background-color: white; +} +.dhx_matrix_line { + overflow: hidden; +} +.dhx_matrix_cell div, +.dhx_matrix_scell div { + overflow: hidden; + text-align: center; + height: auto; +} +.dhx_cal_lsection .dhx_readonly { + font-size: 9pt; + font-size: 8pt; + padding: 2px; + color: #887A2E; +} +.dhx_cal_event_line .dhx_event_resize { + cursor: w-resize; + background: url(imgs/resize_dots.png) repeat-y; + position: absolute; + top: 0; + width: 4px; + height: 100%; +} +.dhx_event_resize_start { + left: 0; +} +.dhx_event_resize_end { + right: 0; +} +/* Tree view */ +.dhx_matrix_scell.folder, +.dhx_data_table.folder .dhx_matrix_cell { + background-color: #969394; + cursor: pointer; +} +.dhx_matrix_scell .dhx_scell_level0 { + padding-left: 5px; +} +.dhx_matrix_scell .dhx_scell_level1 { + padding-left: 20px; +} +.dhx_matrix_scell .dhx_scell_level2 { + padding-left: 35px; +} +.dhx_matrix_scell .dhx_scell_level3 { + padding-left: 50px; +} +.dhx_matrix_scell .dhx_scell_level4 { + padding-left: 65px; +} +.dhx_matrix_scell.folder { + font-weight: bold; + text-align: left; +} +.dhx_matrix_scell.folder .dhx_scell_expand { + float: left; + width: 10px; + padding-right: 3px; +} +.dhx_matrix_scell.folder .dhx_scell_name { + float: left; + width: auto; +} +.dhx_matrix_scell.item .dhx_scell_name { + padding-left: 15px; + text-align: left; +} +.dhx_data_table.folder .dhx_matrix_cell { + border-right: 0; +} +.dhx_section_timeline { + overflow: hidden; + padding: 4px 0 2px 10px; +} +.dhx_section_timeline select { + width: 552px; +} +/* Tree view end*/ +/* Map view */ +.dhx_map_area { + width: 100%; + height: 100%; + overflow-y: auto; + overflow-x: hidden; + background-image: url(imgs/databg.png); +} +.dhx_map_line .dhx_event_icon { + width: 20px; + border-width: 0px; + background: url(imgs/icon.png) no-repeat; + background-position: 5px 4px; + cursor: pointer; +} +.dhx_map_line { + height: 21px; + clear: both; + overflow: hidden; +} +.dhx_map { + position: absolute; +} +.dhx_map_line div { + float: left; + border-right: 1px dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line .headline_description { + float: left; + border-right: 1px dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line .dhx_map_description { + float: left; + border-right: 0 dotted #8894A3; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line .headline_date, +.dhx_map_line .headline_description { + border-left: 0; +} +.dhx_map_line .line_description { + float: left; + border-right: 1px dotted #8894A3; + text-align: left; + padding-left: 5px; + line-height: 21px; + overflow: hidden; +} +.dhx_map_line.highlight { + background-color: #C4C5CC; +} +.dhx_map_area .dhx_map_line div { + border-right: 0px dotted #8894A3; +} +/* Map view end */ +/* dhtmlXTooltip start */ +.dhtmlXTooltip.tooltip { + -moz-box-shadow: 3px 3px 3px #888888; + -webkit-box-shadow: 3px 3px 3px #888888; + -o-box-shadow: 3px 3px 3px #888888; + box-shadow: 3px 3px 3px #888888; + filter: progid:DXImageTransform.Microsoft.Shadow(color='#888888', Direction=135, Strength=5); + background-color: white; + border-left: 1px dotted #887A2E; + border-top: 1px dotted #887A2E; + color: #887A2E; + cursor: default; + padding: 10px; + position: absolute; + z-index: 500; + font-family: Tahoma; + font-size: 8pt; + opacity: 1; +} +/* dhtmlXTooltip end */ +/* Lightbox checkbox section */ +.dhx_cal_checkbox label { + padding-left: 5px; +} +/* Lightbox checkbox section end */ +/* Lightbox radiobuttons section */ +.dhx_cal_light .radio { + padding: 2px 0px 2px 10px; +} +.dhx_cal_light .radio input, +.dhx_cal_light .radio label { + line-height: 15px; +} +.dhx_cal_light .radio input { + vertical-align: middle; + margin: 0px; + padding: 0px; +} +.dhx_cal_light .radio label { + vertical-align: middle; + padding-right: 10px; +} +/* Lightbox radiobuttons section end */ +/* Lightbox dhtmlx combo section */ +.dhx_cal_light .combo { + padding: 4px; +} +.dhx_cal_light_wide .dhx_combo_box { + width: 608px !important; + left: 10px; +} +/* Lightbox dhtmlx combo section end */ +/* Agenda week start */ +.dhx_wa_column { + float: left; +} +.dhx_wa_column_last .dhx_wa_day_cont { + border-left: 1px dotted #8894A3; +} +.dhx_wa_scale_bar { + font-family: Tahoma; + padding-left: 10px; + font-size: 11px; + border-top: 1px dotted #8894A3; + border-bottom: 1px dotted #8894A3; +} +.dhx_wa_day_data { + background-color: #FCFEFC; + overflow-y: auto; +} +.dhx_wa_ev_body { + border-bottom: 1px dotted #778899; + font-size: 12px; + padding: 5px 0 5px 7px; +} +.dhx_wa_dnd { + font-family: Tahoma; + position: absolute; + padding-right: 7px; + color: #887AE2 !important; + background-color: #FFE763 !important; + border: 1px solid #B7A543; +} +.dhx_cal_event_selected { + background-color: #9cc1db; + color: white; +} +/* Agenda week end */ +/* timeline second scale start */ +.dhx_second_scale_bar { + border-bottom: 1px dotted #586A7E; + padding-top: 2px; +} +/* timeline second scale end */ +/* grid view */ +.dhx_cal_header div div { + border-left: 1px dotted #8894A3; +} +.dhx_grid_area { + width: 100%; + height: 100%; + overflow-y: auto; + background-color: #FCFEFC; +} +.dhx_grid_area table { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + table-layout: fixed; +} +.dhx_grid_area td { + table-layout: fixed; + text-align: center; +} +.dhx_grid_line { + height: 21px; + clear: both; + overflow: hidden; +} +.dhx_grid_line div { + float: left; + cursor: default; + padding-top: 0; + padding-bottom: 0; + text-align: center; + line-height: 21px; + overflow: hidden; +} +.dhx_grid_area td, +.dhx_grid_line div { + padding-left: 8px; + padding-right: 8px; +} +.dhx_grid_area tr.dhx_grid_event { + height: 21px; + overflow: hidden; + margin: 0 0 1px 0; +} +.dhx_grid_area tr.dhx_grid_event td { + /*borders for old ies*/ + border-bottom: 1px solid #ECEEF4; +} +.dhx_grid_area tr.dhx_grid_event:nth-child(2n+1) td, +.dhx_grid_area tr.dhx_grid_event:nth-child(2n) td { + border-bottom-width: 0px; + border-bottom-style: none; +} +.dhx_grid_area tr.dhx_grid_event:nth-child(2n) { + background-color: #ECEEF4; +} +.dhx_grid_area .dhx_grid_dummy { + table-layout: auto; + margin: 0 !important; + padding: 0 !important; +} +.dhx_grid_v_border { + position: absolute; + border-right: 1px solid #A4BED4; + width: 1px; + height: 100%; +} +.dhx_grid_event_selected { + background-color: #9cc1db !important; + color: white !important; +} +.dhx_grid_sort_desc .dhx_grid_view_sort { + background-position: 0 -55px; +} +.dhx_grid_sort_asc .dhx_grid_view_sort { + background-position: 0 -66px; +} +.dhx_grid_view_sort { + width: 10px; + height: 10px; + position: absolute; + border: none !important; + top: 5px; + background-repeat: no-repeat; + background-image: url(imgs/images.png); +} +/* end grid */ +/* marked timespans */ +.dhx_marked_timespan { + position: absolute; + width: 100%; +} +.dhx_time_block { + position: absolute; + width: 100%; + background: silver; + opacity: 0.4; + filter: alpha(opacity=40); + z-index: 1; +} +.dhx_time_block_reset { + opacity: 1; + filter: alpha(opacity=100); +} +.dhx_scheduler_month .dhx_marked_timespan { + display: none; +} +.dhx_mini_calendar .dhx_marked_timespan { + display: none; +} +/* now time */ +.dhx_now_time { + width: 100%; + border-bottom: 2px solid red; + z-index: 1; +} +.dhx_scheduler_month .dhx_now_time { + border-bottom: 0; + border-left: 2px solid red; +} +.dhx_matrix_now_time { + border-left: 2px solid red; + z-index: 1; +} +.dhx_now_time, +.dhx_matrix_now_time { + opacity: 0.5; +} +/* Quick info */ +.dhx_cal_quick_info { + border: 2px solid #888; + border-radius: 5px; + position: absolute; + z-index: 300; + background-color: #8e99ae; + background-color: rgba(98, 107, 127, 0.5); + padding-left: 7px; + width: 300px; + transition: left 0.5s ease, right 0.5s; + -moz-transition: left 0.5s ease, right 0.5s; + -webkit-transition: left 0.5s ease, right 0.5s; + -o-transition: left 0.5s ease, right 0.5s; +} +.dhx_no_animate { + transition: none; + -moz-transition: none; + -webkit-transition: none; + -o-transition: none; +} +.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon { + float: right; +} +.dhx_cal_qi_title { + padding: 5px 0px 10px 5px; + color: #FFF; + letter-spacing: 1px; +} +.dhx_cal_qi_tdate { + font-size: 14px; +} +.dhx_cal_qi_tcontent { + font-size: 18px; + font-weight: bold; +} +.dhx_cal_qi_content { + border: 1px solid #888; + background-color: #fefefe; + padding: 16px 8px; + font-size: 14px; + color: #444; + width: 275px; + overflow: hidden; +} +.dhx_qi_big_icon { + border-radius: 3px; + color: #444; + margin: 5px 9px 5px 0px; + min-width: 60px; + line-height: 20px; + vertical-align: middle; + padding: 5px 10px 5px 5px; + cursor: pointer; + background-color: #fefefe; + border-bottom: 1px solid #666; + border-right: 1px solid #666; + float: left; +} +.dhx_cal_qi_controls div { + float: left; + height: 20px; + text-align: center; + line-height: 20px; +} +.dhx_qi_big_icon .dhx_menu_icon { + margin: 0 8px 0 0px; +} +.dhx_drag_marker { + width: 100%; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + opacity: 0.5; + background-color: #FFE763; + position: absolute; + box-sizing: border-box !important; + border-top: 1px solid #B6B6B6; + border-bottom: 1px solid #b6b6b6; +} +/* bootstrap CSS fix start */ +.dhx_cal_navline div, +.dhx_cal_header, +.dhx_cal_header div, +.dhx_cal_data div, +.dhx_cal_light, +.dhx_cal_light div { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.dhx_cal_light .dhx_cal_radio label { + margin-bottom: 0; +} +.dhx_cal_event div { + line-height: normal; +} +/* bootstrap CSS fix end */ +.dhx_cal_container { + background-color: #C2D5FC; + font-family: Tahoma; + font-size: 8pt; + position: relative; + overflow: hidden; +} +.dhx_cal_container div { + -moz-user-select: none; + -moz-user-select: -moz-none; +} +.dhx_cal_navline { + height: 20px; + position: absolute; + z-index: 3; + width: 750px; + color: #2F3A48; +} +.dhx_cal_navline div { + position: absolute; + top: 2px; + white-space: nowrap; +} +.dhx_cal_navline .dhx_cal_date { + font-weight: 600; + left: 210px; + padding-top: 1px; +} +.dhx_cal_button .dhx_left_bg { + width: 1px; + overflow: hidden; + height: 17px; + z-index: 20; + top: 0px; +} +.dhx_cal_prev_button { + background-image: url(imgs/buttons.png); + background-position: 0px 0px; + width: 29px; + height: 17px; + left: 50px; + cursor: pointer; +} +.dhx_cal_next_button { + background-image: url(imgs/buttons.png); + background-position: -30px 0px; + width: 29px; + height: 17px; + left: 80px; + cursor: pointer; +} +.dhx_cal_today_button { + background-image: url(imgs/buttons.png); + background-position: -60px 0px; + width: 75px; + height: 17px; + left: 112px; + cursor: pointer; + text-align: center; + text-decoration: underline; +} +.dhx_cal_tab { + width: 59px; + height: 19px; + text-align: center; + text-decoration: underline; + padding-top: 2px; + cursor: pointer; + background-color: #D8E1EA; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.dhx_cal_tab.active { + text-decoration: none; + cursor: default; + font-weight: bold; + border: 1px dotted #586A7E; + border-bottom: 0; + background-color: #C2D5FC; +} +.dhx_cal_header { + position: absolute; + left: 10px; + top: 23px; + width: 750px; + border-top: 1px dotted #8894A3; + border-right: 1px dotted #8894A3; + z-index: 2; + overflow: hidden; + color: #2F3A48; +} +.dhx_cal_data { + -webkit-tap-highlight-color: transparent; + border-top: 1px dotted #8894A3; + position: absolute; + top: 44px; + width: 600px; + overflow-y: auto; + overflow-x: hidden; + -webkit-overflow-scrolling: touch; +} +.dhx_cal_data { + -ms-touch-action: pan-y; +} +.dhx_cal_event, +.dhx_cal_event_line, +.dhx_cal_event_clear { + -ms-touch-action: none; +} +.dhx_scale_bar { + position: absolute; + text-align: center; + background-color: #C2D5FC; + padding-top: 3px; + border-left: 1px dotted #586A7E; +} +.dhx_scale_holder { + position: absolute; + border-right: 1px dotted #586A7E; + background-image: url(imgs/databg.png); +} +.dhx_scale_holder_now { + position: absolute; + border-right: 1px dotted #586A7E; + background-image: url(imgs/databg_now.png); +} +.dhx_scale_hour { + height: 41px; + width: 50px; + border-bottom: 1px dotted #8894A3; + background-color: #C2D5FC; + text-align: center; + line-height: 40px; + color: #586A7E; + overflow: hidden; +} +.dhx_month_head { + background-color: #EBEFF4; + color: #2F3A48; + height: 18px; + padding-right: 5px; + padding-top: 3px; + text-align: right; + border-right: 1px dotted #586A7E; +} +.dhx_month_body { + border-right: 1px dotted #586A7E; + border-bottom: 1px dotted #586A7E; + background-color: #FFFFFF; +} +.dhx_now .dhx_month_body { + background-color: #E2EDFF; +} +.dhx_after .dhx_month_body, +.dhx_before .dhx_month_body { + background-color: #ECECEC; +} +.dhx_after .dhx_month_head, +.dhx_before .dhx_month_head { + background-color: #E2E3E6; + color: #94A6BB; +} +.dhx_now .dhx_month_head { + background-color: #D1DEF4; + font-weight: bold; +} +.dhx_scale_ignore { + display: none; +} +.dhx_cal_drag { + position: absolute; + z-index: 9999; + background-color: #FFE763; + border: 1px solid #B7A543; + opacity: 0.5; + filter: alpha(opacity=50); +} +.dhx_loading { + position: absolute; + width: 128px; + height: 15px; + background-image: url(imgs/loading.gif); + z-index: 9999; +} +.dhx_multi_day_icon, +.dhx_multi_day { + background-color: #E1E6FF; + background-repeat: no-repeat; + border-right: 1px dotted #8894A3; +} +.dhx_multi_day { + position: absolute; + border-top: 1px dotted #8894A3; +} +.dhx_multi_day_icon, +.dhx_multi_day_icon_small { + background-position: center center; + background-color: #E1E6FF; + background-repeat: no-repeat; + border-bottom: 1px dotted #8894A3; + border-right: 1px dotted #8894A3; +} +.dhx_multi_day_icon { + background-image: url(imgs/clock_big.gif); +} +.dhx_multi_day_icon_small { + background-image: url(imgs/clock_small.gif); +} +.dhtmlxLayoutPolyContainer_dhx_skyblue .dhx_cal_container { + background-color: #d0e5ff; +} +/* left border config option support */ +.dhx_scale_hour_border, +.dhx_month_body_border, +.dhx_scale_bar_border, +.dhx_month_head_border { + border-left: 1px dotted #8894A3; +} +/* export to PDF and iCal buttons start */ +.dhx_cal_navline .dhx_cal_export { + width: 18px; + height: 18px; + margin: 2px; + cursor: pointer; + top: 0px; +} +.dhx_cal_navline .dhx_cal_export.pdf { + left: 2px; + background-image: url('imgs/export_pdf.png'); +} +.dhx_cal_navline .dhx_cal_export.ical { + left: 24px; + background-image: url('imgs/export_ical.png'); +} +/* export to PDF and iCal buttons end */ +/*All*/ +.dhx_form_repeat, +.dhx_form_repeat input { + padding: 0; + margin: 0; + padding-left: 5px; + font-family: Tahoma, Verdana; + font-size: 11px; + line-height: 24px; +} +.dhx_form_repeat { + overflow: hidden; + /*height:115px;*/ + height: 0px; + background-color: #FFF4B5; + /*border: 1px solid #DCC43E;*/ +} +.dhx_cal_light_wide .dhx_form_repeat { + background-color: transparent; +} +.dhx_repeat_center, +.dhx_repeat_left { + height: 115px; + padding: 10px 0 10px 10px; + float: left; +} +.dhx_repeat_left { + width: 95px; +} +.dhx_repeat_center { + width: 335px; + margin-top: 12px; +} +.dhx_repeat_divider { + float: left; + height: 115px; + border-left: 1px dotted #DCC43E; + /*background-color: #DCC43E;*/ + width: 1px; +} +.dhx_repeat_right { + float: right; + height: 115px; + width: 160px; + padding: 10px 3px 10px 10px; + margin-top: 7px; +} +input.dhx_repeat_text { + height: 16px; + width: 27px; + margin: 0 4px 0 4px; + line-height: 18px; + padding: 0 0 0 2px; +} +.dhx_form_repeat select { + height: 20px; + width: 87px; + padding: 0 0 0 2px; + margin: 0 4px 0 4px; +} +input.dhx_repeat_date { + height: 18px; + width: 80px; + padding: 0 0 0 2px; + margin: 0 4px 0 4px; + background-repeat: no-repeat; + background-position: 64px 0; + border: 1px #7f9db9 solid; + line-height: 18px; +} +input.dhx_repeat_radio { + margin-right: 4px; +} +input.dhx_repeat_checkbox { + margin: 4px 4px 0 0; +} +.dhx_repeat_days td { + padding-right: 5px; +} +.dhx_repeat_days label { + font-size: 10px; +} +.dhx_custom_button { + width: 90px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + -ms-border-radius: 4px; + -o-border-radius: 4px; + border-radius: 4px; +} +.dhx_custom_button_recurring { + background-image: url(imgs/but_repeat.gif); + background-position: -5px 20px; + width: 20px; + margin-right: 10px; +} +/* increase width of lightbox */ +.dhx_cal_light_rec { + width: 640px; +} +.dhx_cal_light_rec .dhx_cal_larea { + width: 632px; +} +.dhx_cal_light_rec.dhx_cal_light_wide { + width: 816px; +} +.dhx_cal_light_rec.dhx_cal_light_wide .dhx_cal_larea { + width: 808px; +} +.dhx_cal_tab.active { + border: none; +} +.dhx_multi_day { + border: none; + border-top: 1px solid #A4BED4; +} +.dhx_multi_day_icon, +.dhx_multi_day_icon_small { + border-right: none; +} +.dhx_cal_container { + background-image: url(imgs_glossy/top-days-bg.png); + background-position: 0 24px; + background-repeat: repeat-x; + background-color: #EBEBEB; +} +.dhx_cal_navline { + background-color: #EBEBEB; + height: 23px !important; +} +.dhx_cal_prev_button { + background-image: url(imgs_glossy/buttons.gif); + width: 30px; + height: 20px; +} +.dhx_cal_next_button { + background-image: url(imgs_glossy/buttons.gif); + width: 30px; + height: 20px; +} +.dhx_cal_today_button { + padding-top: 3px; + background-image: url(imgs_glossy/buttons.gif); + width: 67px; + left: 110px; + text-decoration: none; +} +.dhx_cal_navline .dhx_cal_date { + padding-top: 4px; + left: 230px; +} +.dhx_cal_tab { + background-image: url(imgs_glossy/white_tab.png); + width: 60px; + height: 15px; + text-decoration: none; + padding-top: 4px; + margin-top: 4px; +} +.dhx_cal_tab.active { + background-image: url(imgs_glossy/blue_tab.png); + height: 18px; + width: 60px; + padding-top: 4px; + margin-top: 2px; +} +.dhx_cal_data { + border-top: 1px solid #A4BED4; +} +.dhx_cal_header { + background-image: url(imgs_glossy/top-days-bg.png); + background-repeat: repeat-x; + border-top: 0px; + border-right: 0px; +} +.dhx_scale_bar { + background-image: url(imgs_glossy/top-separator.gif); + background-position: 0px 0px; + background-repeat: no-repeat; + background-color: transparent; + padding-top: 3px; + border-left: 0px; +} +.dhx_scale_holder { + border-right: 1px solid #A4BED4; +} +.dhx_scale_holder_now { + border-right: 1px solid #A4BED4; +} +.dhx_scale_hour { + background-image: url(imgs_glossy/left-time-bg.png); + border-bottom: 1px solid #A4BED4; + color: #2F3A48; +} +.dhx_multi_day { + background-image: url(imgs_glossy/multi-days-bg.png); + background-repeat: repeat; + border-bottom: 1px solid #A4BED4; + border-left: 0px; +} +.dhx_multi_day_icon, +.dhx_multi_day_icon_small { + background-image: url(imgs_glossy/clock_big.png); + border-bottom: 1px solid #A4BED4; + border-left: 1px solid #ffffff; + background-color: transparent; + background-repeat: no-repeat; +} +.dhx_multi_day_icon_small { + background-image: url(imgs_glossy/clock_small.png); +} +.dhx_month_head { + background-color: #FFFFFF; +} +.dhx_after .dhx_month_head, +.dhx_before .dhx_month_head { + background-color: #EFEDE2; +} +.dhx_now .dhx_month_head { + background-color: #E4EFFF; +} +.dhx_after .dhx_month_body, +.dhx_before .dhx_month_body { + background-color: #EFEDE2; +} +.dhx_cal_event div { + border: 1px solid #FFBD51; + background-color: #FFE4AB; + color: #000000; +} +.dhx_cal_event_clear { + color: #000000; +} +.dhx_cal_event_line { + background-image: url(imgs_glossy/event-bg.png); + border: 1px solid #FFBD51; + color: #000000; +} +.dhx_in_move { + background-image: url(imgs_glossy/move.png); +} +.dhx_cal_event .dhx_body { + background-color: #FFE4AB; +} +.dhx_cal_event .dhx_title { + background-color: #FFE4AB; +} +.dhx_cal_light { + -moz-box-shadow: 5px 5px 5px #888888; + -khtml-box-shadow: 5px 5px 5px #888; + background-color: #EBEBEB; + border: 2px solid #A4BED4; + color: #000000; +} +.dhx_cal_larea { + border: 1px solid #A4BED4; + border-width: 0 1px 1px; + background-color: #FFFFFF; +} +.dhx_cal_lsection { + background-image: url(imgs_glossy/lightbox.png); + font-size: 14px; + padding: 5px 0 5px 10px; + color: #000000; +} +.dhx_cal_light_wide .dhx_cal_lsection { + background-image: url(imgs_glossy/multi-days-bg.png); +} +.dhx_cal_ltext textarea { + background-color: #ffffff; + color: #000000; +} +.dhx_cal_light select, +.dhx_cal_light input { + color: #000000; +} +.dhx_save_btn { + background-image: url(imgs_glossy/controlls5.png); +} +.dhx_cancel_btn { + background-image: url(imgs_glossy/controlls5.png); +} +.dhx_delete_btn { + background-image: url(imgs_glossy/controlls5.png); +} +div.dhx_menu_head { + background-image: url(imgs_glossy/controlls5.png); + border: 1px solid #FFE4AB; +} +div.dhx_menu_icon { + background-image: url(imgs_glossy/controlls5.png); + border: medium none; +} +.dhx_section_time { + height: 20px !important; + padding: 7px 0 !important; + text-align: center; + background: white; +} +.dhx_year_month { + background-image: url(imgs_glossy/top-days-bg.png); + border: 0px; +} +.dhx_year_week { + background-image: url(imgs_glossy/top-days-bg.png); +} +.dhx_month_head { + border-right: 1px solid #A4BED4; +} +.dhx_month_body, +.dhx_matrix_cell, +.dhx_matrix_scell { + border-right: 1px solid #A4BED4; + border-bottom: 1px solid #A4BED4; +} +.dhx_year_body { + border-left: 1px solid #A4BED4; +} +.dhx_scale_bar_last { + border-right: none; +} +.dhx_month_head.dhx_year_event { + background-color: #FFE4AB; +} +.dhx_year_body .dhx_before .dhx_month_head, +.dhx_year_body .dhx_after .dhx_month_head, +.dhx_year_body .dhx_before .dhx_month_head a, +.dhx_year_body .dhx_after .dhx_month_head a { + color: #EFEDE2 !important; +} +.dhx_cal_lsection .dhx_readonly { + color: #000000; +} +.dhx_year_tooltip { + -moz-box-shadow: 2px 2px 2px #888; + /*Doesn't work in IE*/ + -khtml-box-shadow: 2px 2px 2px #888; +} +.dhx_custom_button { + margin-top: -2px; +} +/*2.3*/ +.dhx_cal_lsection .dhx_fullday { + color: #000000; +} +.dhx_cal_lsection.dhx_cal_checkbox { + height: 16px; + line-height: 18px; +} +.dhx_cal_light_wide .dhx_cal_lsection.dhx_cal_checkbox { + height: 20px; +} +.dhx_cal_light_wide .dhx_combo_box { + width: 602px !important; + left: 0px; +} +.dhx_cal_checkbox label { + vertical-align: top; +} +.dhx_cal_light_wide .dhx_cal_lsection { + color: black; +} +.dhx_cal_light_wide .dhx_wrap_section { + border-top: 1px solid #A4BED4; + background-image: url(imgs_glossy/multi-days-bg.png); +} +.dhx_cal_light_wide .dhx_cal_ltext { + border-left: 1px solid #A4BED4; +} +.dhx_cal_light_wide .dhx_cal_ltext { + background-color: white; +} +.dhx_custom_button { + background: white; + color: black; +} +.dhx_form_repeat { + background: white; +} +.dhx_repeat_divider { + border-left: 1px solid #A4BED4; +} +/* timeline second scale start */ +.dhx_cal_header.dhx_second_cal_header { + background-image: url("imgs_glossy/second-top-days-bg.png"); + padding-right: 20px; +} +.dhx_cal_header div div { + border-left: 0; +} +.dhx_scale_bar { + padding-top: 4px; +} +.dhx_second_scale_bar { + border-bottom: 0; + padding-top: 4px; +} +/* timeline second scale end */ +.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday, +.dhx_cal_lsection .dhx_fullday { + color: #000000; + font-size: 14px; +} +.dhx_cal_light_wide .dhx_cal_lsection { + font-size: 14px; + padding-right: 10px; +} +/* left border config option support */ +.dhx_scale_hour_border, +.dhx_month_body_border, +.dhx_scale_bar_border, +.dhx_month_head_border { + border-left: 1px solid #A4BED4; +} +/* export to PDF and iCal buttons start */ +.dhx_cal_navline .dhx_cal_export { + width: 18px; + height: 18px; + margin: 2px; + cursor: pointer; + top: 1px; +} +.dhx_cal_navline .dhx_cal_export.pdf { + left: 2px; + background-image: url('imgs_glossy/export_pdf.png'); +} +.dhx_cal_navline .dhx_cal_export.ical { + left: 24px; + background-image: url('imgs_glossy/export_ical.png'); +} +/* export to PDF and iCal buttons end */ |