123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489 |
- function DragDropController()
- {
- this.m_xtabHorizDropZone = null;
- this.m_xtabVertDropZone = null;
- this.m_xtabCornerDropZone = null;
- this.m_lastSectionDropZone = null;
- this.m_ddi = null;
- var rfDoc = getReportFrameDoc();
- if (rfDoc == null)
- return;
- this.m_xtabHorizDropZone = new DragDropZone(rfDoc.getElementById("xtabHorizDropZone"), HORIZONTAL_ZONE, 0, 0);
- this.m_xtabVertDropZone = new DragDropZone(rfDoc.getElementById("xtabVertDropZone"), VERTICAL_ZONE, 0, 0);
- this.m_xtabCornerDropZone = new DragDropZone(rfDoc.getElementById("xtabCornerDropZone"), VERTICAL_ZONE, 6, 0);
- this.m_lastSectionDropZone = new DragDropZone(rfDoc.getElementById("lastSectionDropZone"), HORIZONTAL_ZONE, 0, 6);
- this.m_ddi = new DragDropIndicator(rfDoc.getElementById("dragDropIndicator"));
- };
- function DragDropController_getDragDropZoneIds()
- {
- var idArray = new Array();
- try
- {
- if (goApplicationManager.getMiniQueryManager().hasPivottedColumns())
- {
- if (this.m_xtabHorizDropZone.getElement() != null)
- idArray[idArray.length] = this.m_xtabHorizDropZone.getElement().id;
- if (this.m_xtabVertDropZone.getElement() != null)
- idArray[idArray.length] = this.m_xtabVertDropZone.getElement().id;
- if (this.m_xtabCornerDropZone.getElement() != null)
- idArray[idArray.length] = this.m_xtabCornerDropZone.getElement().id;
- }
- if (this.m_lastSectionDropZone.getElement() != null && this.m_lastSectionDropZone.getElement().style.display == "inline")
- {
- idArray[idArray.length] = this.m_lastSectionDropZone.getElement().id;
- }
- }
- catch (e)
- {
- }
- return idArray;
- };
- function DragDropController_dragStart()
- {
- if (goApplicationManager.getMiniQueryManager().hasPivottedColumns())
- {
- this.dragStartCrosstab(null);
- this.dragStartCornerDropZone(null);
- }
- this.dragStartSection(null)
- };
- function DragDropController_dragStartCrosstab(srcElem)
- {
- var oMQMgr = goApplicationManager.getMiniQueryManager();
-
- var rfDoc = getReportFrameDoc();
- if (rfDoc == null)
- return;
- var reportCells = rfDoc.getElementsByTagName("TD");
- var el = srcElem, left = 0, width = 0, top = 0, height = 0;
- var lastPivotColIndex = null, lastPivotColId = null;
-
-
- var numPivots = 0;
- for (var i=0; i < oMQMgr.getAllColumns().length; i++)
- {
- if (oMQMgr.isPivoted(i))
- {
- lastPivotColIndex = i;
- numPivots++;
- }
- }
- var numMeasures = oMQMgr.getElementsByAttribute("usage", USAGE_VALUE_MEASURE).length;
-
- if (lastPivotColIndex != null) {
- lastPivotColId = oMQMgr.getTag(lastPivotColIndex);
-
- el = getFirstElementWithTag(reportCells, el, lastPivotColId);
-
- if (el == null) return;
-
- var row = el.parentNode;
- var lastCellIndex = row.cells.length - 1 - ((numPivots > 1 || numMeasures == 0 || !reLevelFooter.test(row.cells[row.cells.length-1].className)) ? 0 : 1)
- for (i = el.cellIndex; i <= lastCellIndex; i++)
- {
- width += row.cells[i].offsetWidth;
- }
-
- top += el.offsetHeight - 4;
-
- while (el != null)
- {
- if (el.tagName != "TR" && typeof el.offsetLeft=="number")
- left += el.offsetLeft;
- if (el.tagName != "TR" && typeof el.offsetTop=="number")
- top += el.offsetTop;
- el = el.parentNode;
- }
-
- if (this.m_xtabHorizDropZone != null)
- this.m_xtabHorizDropZone.setStyle(14, width, top, left, "inline");
- }
-
- top = 0;
- left = 0;
- el = srcElem;
-
-
- var lastNonMeasure = null;
- for (var i=0; i < oMQMgr.getAllColumns().length; i++) {
- if ( !oMQMgr.isMeasure(i) && (oMQMgr.getColumnRole(i) === MINI_QUERY_NONE_STR || oMQMgr.getColumnRole(i) === MINI_QUERY_GROUP_LIST) )
- lastNonMeasure = i;
- }
- if (lastNonMeasure != null)
- {
- lastNonMeasure = oMQMgr.getTag(lastNonMeasure);
-
- el = getFirstElementWithTag(reportCells, el, lastNonMeasure);
-
- if (el == null) return;
-
- var rows = el.parentNode.parentNode.rows;
- var cellIndex = el.cellIndex;
- var ci = cellIndex;
- for (i = numPivots; i < rows.length; i++)
- {
- if (!reLevelFooter.test(rows[i].cells[ci].className))
- {
- if (rows[i].cells[ci].getAttribute("tag") == lastNonMeasure)
- {
- height += rows[i].cells[ci].offsetHeight;
- }
- else
- {
- ci = cellIndex;
- while (ci >= 0 && rows[i].cells[ci].getAttribute("tag") != lastNonMeasure)
- ci--;
-
- if (ci < 0)
- {
- if (rows[i].cells[0].colSpan > 1)
- height += rows[i].cells[0].offsetHeight;
- ci = cellIndex;
- }
- else
- height += rows[i].cells[ci].offsetHeight;
- }
- }
- }
-
- left += el.offsetWidth - 4;
-
- while (el != null)
- {
- if (el.tagName != "TR" && typeof el.offsetLeft=="number")
- left += el.offsetLeft;
- if (el.tagName != "TR" && typeof el.offsetTop=="number")
- top += el.offsetTop;
- el = el.parentNode;
- }
-
- if (this.m_xtabVertDropZone)
- this.m_xtabVertDropZone.setStyle(height, 14, top, left, "inline");
- }
- };
- function DragDropController_dragStartCornerDropZone(cornerElem)
- {
- var oMQMgr = goApplicationManager.getMiniQueryManager();
-
- var top = 0;
- var left = 0;
- var height = 0;
- var width = 0;
- el = cornerElem;
- var numCols = oMQMgr.getAllColumns().length;
- var numMeasures = oMQMgr.getElementsByAttribute("usage", USAGE_VALUE_MEASURE).length;
-
- if (numMeasures == 1)
- {
- var rfDoc = getReportFrameDoc();
- if (rfDoc == null)
- return;
-
- if (el == null)
- {
- var reportCells = rfDoc.getElementsByTagName("TD");
- for (var i = 0; i < reportCells.length; i++)
- {
- if (reCrosstabCorner.test(reportCells[i].className))
- {
- el = reportCells[i];
- height = el.offsetHeight;
- break;
- }
- }
-
- if (el == null) return;
- }
- else
- {
- height = el.offsetHeight;
- }
-
- left += el.offsetWidth - 10;
-
- while (el != null)
- {
- if (el.tagName != "TR" && typeof el.offsetLeft=="number")
- left += el.offsetLeft;
- if (el.tagName != "TR" && typeof el.offsetTop=="number")
- top += el.offsetTop;
- el = el.parentNode;
- }
-
- if (this.m_xtabCornerDropZone != null)
- this.m_xtabCornerDropZone.setStyle(height, 20, top, left, "inline");
- }
- };
- function DragDropController_dragStartSection(srcElem)
- {
- var oMQMgr = goApplicationManager.getMiniQueryManager();
-
- var rfDoc = getReportFrameDoc();
- if (rfDoc == null)
- return;
- var el = srcElem, left = 0, width = 0, top = 0, height = 0;
-
- var lastSection = null;
- for (var i = 0; i < oMQMgr.getAllColumns().length; i++)
- {
- if (oMQMgr.getColumnRole(i) === MINI_QUERY_GROUP_SECTION)
- {
- lastSection = i;
- }
- }
-
- if (lastSection != null)
- {
- lastSection = oMQMgr.getTag(lastSection);
-
- if (el == null)
- {
- var reportCells = rfDoc.getElementsByTagName("TD");
- for (var i = 0; i < reportCells.length; i++)
- {
- if (reSectionHeader.test(reportCells[i].className) && reportCells[i].getAttribute("tag") == lastSection)
- {
- el = reportCells[i];
- break;
- }
- }
- }
- else
- {
- var table = el.parentNode.parentNode;
- var ri = el.parentNode.sectionRowIndex;
- el = null;
- for (var i = ri; i < table.rows.length; i++)
- {
- if (reSectionHeader.test(table.rows[i].cells[0].className) && table.rows[i].cells[0].getAttribute("tag") == lastSection)
- {
- el = table.rows[i].cells[0];
- break;
- }
- }
- }
-
- if (el == null) return;
-
- top += el.offsetHeight - 14;
- width = el.offsetWidth;
-
- while (el != null)
- {
- if (el.tagName != "TR" && typeof el.offsetLeft=="number")
- left += el.offsetLeft;
- if (el.tagName != "TR" && typeof el.offsetTop=="number")
- top += el.offsetTop;
- el = el.parentNode;
- }
-
- if (this.m_lastSectionDropZone != null)
- this.m_lastSectionDropZone.setStyle(14, width, top, left, "inline");
- }
- };
- function DragDropController_dragEnd()
- {
- if (this.m_xtabHorizDropZone != null)
- this.m_xtabHorizDropZone.hide();
- if (this.m_xtabVertDropZone != null)
- this.m_xtabVertDropZone.hide();
- if (this.m_xtabCornerDropZone != null)
- this.m_xtabCornerDropZone.hide();
- if (this.m_lastSectionDropZone != null)
- this.m_lastSectionDropZone.hide();
- if (this.m_ddi != null)
- this.m_ddi.hide();
- };
- function DragDropController_setDropEffect(evt)
- {
- evt.returnValue = false;
- evt.dataTransfer.dropEffect = DROP_EFFECT;
- };
- function DragDropController_allowDropEffect(evt)
- {
- evt.dataTransfer.effectAllowed = DROP_EFFECT;
- };
- DragDropController.prototype.getDragDropZoneIds = DragDropController_getDragDropZoneIds;
- DragDropController.prototype.dragStart = DragDropController_dragStart;
- DragDropController.prototype.dragStartCrosstab = DragDropController_dragStartCrosstab;
- DragDropController.prototype.dragStartCornerDropZone = DragDropController_dragStartCornerDropZone;
- DragDropController.prototype.dragStartSection = DragDropController_dragStartSection;
- DragDropController.prototype.dragEnd = DragDropController_dragEnd;
- DragDropController.prototype.setDropEffect = DragDropController_setDropEffect;
- DragDropController.prototype.allowDropEffect = DragDropController_allowDropEffect;
- function DragDropZone(ddZone, zoneDirection, offsetLeft, offsetTop)
- {
- this.m_oDDZone = ddZone;
- this.m_zoneDirection = zoneDirection;
- this.m_offsetLeft = offsetLeft;
- this.m_offsetTop = offsetTop;
- };
- function DragDropZone_setStyle(height, width, top, left, display)
- {
- try
- {
- if (this.getElement() != null)
- {
- this.getElement().style.height = height+"px";
- this.getElement().style.width = width+"px";
- this.getElement().style.top = top+"px";
- this.getElement().style.left = left+"px";
- this.getElement().style.display = display;
- }
- }
- catch (e)
- {
- }
- };
- function DragDropZone_hide()
- {
- try
- {
- if (this.getElement() != null)
- this.getElement().style.display = "none";
- }
- catch (e)
- {
- }
- };
- function DragDropZone_show()
- {
- try
- {
- if (this.getElement() != null)
- this.getElement().style.display = "inline";
- }
- catch (e)
- {
- }
- };
- function DragDropZone_getElement()
- {
- return this.m_oDDZone;
- };
- function DragDropZone_dragOver()
- {
- if (ddController == null)
- return;
-
- var ddi = ddController.m_ddi;
- var zone = this.m_oDDZone;
- if (ddi != null && zone != null)
- {
- var height = this.m_zoneDirection == VERTICAL_ZONE ? zone.offsetHeight: DDI_SMALL_SIZE;
- var width = this.m_zoneDirection == HORIZONTAL_ZONE ? zone.offsetWidth : DDI_SMALL_SIZE;
- var top = zone.offsetTop + this.m_offsetTop;
- var left = zone.offsetLeft + this.m_offsetLeft
- ddi.setStyle(height, width, top, left, "inline");
- cfgSet("lastDropTarget", zone.id);
- _last_srcElem = zone;
- }
- };
- DragDropZone.prototype.getElement = DragDropZone_getElement;
- DragDropZone.prototype.setStyle = DragDropZone_setStyle;
- DragDropZone.prototype.hide = DragDropZone_hide;
- DragDropZone.prototype.show = DragDropZone_show;
- DragDropZone.prototype.dragOver = DragDropZone_dragOver;
- function DragDropIndicator(ddIndicator)
- {
- this.m_oDDZone = ddIndicator;
- this.m_zoneDirection = 0;
- };
- DragDropIndicator.prototype.getElement = DragDropZone_getElement;
- DragDropIndicator.prototype.setStyle = DragDropZone_setStyle;
- DragDropIndicator.prototype.hide = DragDropZone_hide;
- DragDropIndicator.prototype.show = DragDropZone_show;
- function getReportFrameDoc()
- {
- var rf = getReportFrame();
- return rf ? rf.document : null;
- };
- function getFirstElementWithTag(reportCells, el, tag)
- {
- var i;
- if (el == null)
- {
- for (i = 0; i < reportCells.length; i++)
- {
- if (reportCells[i].getAttribute("tag") == tag)
- return reportCells[i];
- }
- }
- else
- {
- var table = el.parentNode.parentNode;
- var rows = (window.ie) ? table.rows : table.getAttribute("rows");
- var row;
- for (var ri = 0; ri < rows.length; ri++)
- {
- row = rows[ri];
- for (var ci = 0; ci < row.cells.length; ci++)
- {
- if (row.cells[ci].getAttribute("tag") == tag)
- {
- return row.cells[ci];
- }
- }
- }
- }
- return null;
- };
- var ddController = null;
- var DROP_EFFECT = 'move';
- var VERTICAL_ZONE = 1;
- var HORIZONTAL_ZONE = 2;
- var DDI_SMALL_SIZE = 8;
|