123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517 |
- // Licensed Materials - Property of IBM
- //
- // IBM Cognos Products: pps
- //
- // (C) Copyright IBM Corp. 2005, 2017
- //
- // US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
- //Maintain the undo information
- var TYPE_XTAB_MEASURE = 1;
- var TYPE_ROW = 2;
- var TYPE_COLUMN = 3;
- var TYPE_NEST_ROWS = 4;
- var TYPE_NEST_COLS = 5;
- var TYPE_REORDER_ROW = 6;
- var TYPE_REORDER_COLUMN = 7;
- var TYPE_CHANGE_DIMBAR_FILTER = 9;
- var TYPE_NONE = 0;
- var NEST_BETWEEN_CATEGORY_SENSITIVITY = 3;
- var previousOper = TYPE_NONE;
- var previousLevel = -1;
- var selectedMeasureCell = null;
- var overCategoryHeader = null;
- function getOper(type, obj, event) {
- if (type == "dimbar")
- return TYPE_CHANGE_DIMBAR_FILTER;
- if (type == "d" || type == "m")
- return TYPE_XTAB_MEASURE;
- else if (type == "r" || type.indexOf("lr") >= 0) {
- if (isReordering(type, event, obj))
- return TYPE_REORDER_ROW;
- else
- return TYPE_ROW;
- } else if (type == "c" || type.indexOf("lc") >= 0) {
- if (isReordering(type, event, obj))
- return TYPE_REORDER_COLUMN;
- else
- return TYPE_COLUMN;
- } else if (type == "rn")
- return TYPE_NEST_ROWS;
- else if (type == "cn")
- return TYPE_NEST_COLS;
- else
- return TYPE_NONE;
- }
- function getLevel(type, obj, event) {
- var oper = getOper(type, obj, event);
- if (oper == TYPE_NEST_ROWS || oper == TYPE_NEST_COLS)
- return obj.getAttribute("level");
- else if (oper == TYPE_ROW || oper == TYPE_COLUMN || oper == TYPE_REORDER_ROW || oper == TYPE_REORDER_COLUMN)
- if (type == "r" || type == "c")
- return obj.getAttribute("mylevel");
- else
- return parseLevelNumber(type);
- else
- return -1;
- }
- function isNestLeftOfCategory(event, obj) {
- return (parseInt(event.clientX - getOffsetLeft(obj)) <= NEST_BETWEEN_CATEGORY_SENSITIVITY);
- }
- function isNestRightOfCategory(event, obj) {
- return (parseInt(getOffsetLeft(obj) + obj.offsetWidth - event.clientX) <= NEST_BETWEEN_CATEGORY_SENSITIVITY);
- }
- function isNestAboveCategory(event, obj) {
- return (parseInt(event.clientY - getOffsetTop(obj)) <= NEST_BETWEEN_CATEGORY_SENSITIVITY);
- }
- function isNestBelowCategory(event, obj) {
- return (parseInt(getOffsetTop(obj) + obj.offsetHeight - event.clientY) <= NEST_BETWEEN_CATEGORY_SENSITIVITY);
- }
- function processDragOverOrEnter(event)
- {
- if (!topparent.allFramesInitialized())
- return;
- var eventM = new eventManager(event);
- eventM.cancelBubble();
-
- if ( !isValidDragAndDropObject() )
- return;
- var obj = bubbletoDragAndDropSensitiveObject(eventM.getSrc());
- if (obj == null)
- return;
- type = obj.getAttribute("type");
- //Get operation and Level
- var oper = getOper(type, obj, event);
- var level = getLevel(type, obj, event);
- //Check if we need to undo the previous drag drop effect
- if ((oper != TYPE_CHANGE_DIMBAR_FILTER) && (oper != previousOper || level != previousLevel)) {
- dragLeave(event, previousOper, previousLevel);
- if (oper == TYPE_REORDER_ROW || oper == TYPE_REORDER_COLUMN)
- overCategoryHeader = obj;
- else
- overCategoryHeader = null;
- switch (oper) {
- case TYPE_XTAB_MEASURE: onDragOverXtabMeasure(event); break;
- case TYPE_ROW: onDragOverRow(event, level); break;
- case TYPE_COLUMN: onDragOverColumn(event, level); break;
- case TYPE_NEST_ROWS: onDragOverRowNestZone(event, level); break;
- case TYPE_NEST_COLS: onDragOverColNestZone(event, level); break;
- case TYPE_REORDER_ROW:
- case TYPE_REORDER_COLUMN: onDragOverCategoryNestBetween(event, obj); break;
- }
- }
- if (eventM.theEvent.dataTransfer)
- processDragCursor(type, obj, event);
- previousOper = oper;
- previousLevel = level;
- eventM.preventDefault();
- }
- function dragLeave(event, oper, level) {
- switch (oper) {
- case TYPE_XTAB_MEASURE: onDragLeaveXtabMeasure(); break;
- case TYPE_ROW: onDragLeaveRow(event, level); break;
- case TYPE_COLUMN: onDragLeaveColumn(event, level); break;
- case TYPE_NEST_ROWS: onDragLeaveRowNestZone(level); break;
- case TYPE_NEST_COLS: onDragLeaveColNestZone(level); break;
- case TYPE_REORDER_ROW:
- case TYPE_REORDER_COLUMN: onDragLeaveCategoryNestBetween(event); break;
- }
- }
- function processDragCursor(type, obj, event) {
- var eventM = new eventManager(event);
- if (getOper(type, obj, event) == TYPE_CHANGE_DIMBAR_FILTER)
- eventM.theEvent.dataTransfer.dropEffect = "move";
- else if (getOper(type, obj, event) == TYPE_ROW || getOper(type, obj, event) == TYPE_COLUMN)
- eventM.theEvent.dataTransfer.dropEffect = "move";
- else if (getOper(type, obj, event) == TYPE_REORDER_ROW || getOper(type, obj, event) == TYPE_REORDER_COLUMN)
- eventM.theEvent.dataTransfer.dropEffect = "move";
- else if (getOper(type, obj, event) == TYPE_NEST_ROWS || getOper(type, obj, event) == TYPE_NEST_COLS)
- eventM.theEvent.dataTransfer.dropEffect = "copy";
- else if (getOper(type, obj, event) == TYPE_XTAB_MEASURE && isDraggingMeasure())
- eventM.theEvent.dataTransfer.dropEffect = "move";
- else
- eventM.theEvent.dataTransfer.dropEffect = "none";
- }
- function processDragLeave(event) {
- if (!topparent.allFramesInitialized())
- return;
- var eventM = new eventManager(event);
- eventM.cancelBubble();
- if (eventM.theEvent.clientX < document.getElementById("innerNiceMain-tab0").offsetLeft || eventM.theEvent.clientY < document.getElementById("innerNiceMain-tab0").offsetTop) {
- dragLeave(event, previousOper, previousLevel);
- previousOper = TYPE_NONE;
- previousLevel = -1;
- }
-
- eventM.preventDefault();
- }
- function processDragEnter(event) {
- processDragOverOrEnter(event);
- }
- function processDragOver(event) {
- processDragOverOrEnter(event);
- }
- function processNestBetweenOverOrEnter(event) {
- var eventM = new eventManager(event);
- eventM.cancelBubble();
- eventM.theEvent.dataTransfer.dropEffect = "move";
- eventM.preventDefault();
- }
- function processDrop(event)
- {
- if (!topparent.allFramesInitialized())
- return;
- var eventM = new eventManager(event);
- eventM.cancelBubble();
- if ( !isValidDragAndDropObject() )
- return;
- var obj = bubbletoDragAndDropSensitiveObject(eventM.getSrc());
- if (obj == null) {
- //Dump the object from the drop framework
- topparent.getGlobal("dndManager").cancelDrag();
- return;
- }
- var oper = getOper(type, obj, event);
- var level = getLevel(type, obj, event);
- switch (oper) {
- case TYPE_XTAB_MEASURE: onDropMeasure(parseInt(obj.getAttribute("measureno"))); break;
- case TYPE_ROW: onDropRowReplace(event, obj.getAttribute("code"), level); break;
- case TYPE_COLUMN: onDropColumnReplace(obj.getAttribute("code"), level); break;
- case TYPE_NEST_ROWS: onDropRowNest(event, obj.getAttribute("code"), level, obj.getAttribute("dimIdx")); break;
- case TYPE_NEST_COLS: onDropColumnNest(obj.getAttribute("code"), level , obj.getAttribute("dimIdx")); break;
- case TYPE_REORDER_ROW:
- case TYPE_REORDER_COLUMN: onDropCategoryNestBetween(event, obj); break;
- case TYPE_CHANGE_DIMBAR_FILTER: onDropMeasuresOnDimbar(event); break;
- }
- topparent.getGlobal("dndManager").cancelDrag();
- eventM.preventDefault();
- }
- function processNestBetweenDrop(event) {
- var eventM = new eventManager(event);
- eventM.cancelBubble();
- if (overCategoryHeader != null) {
- onDropCategoryNestBetween(eventM.theEvent, overCategoryHeader);
- }
- topparent.getGlobal("dndManager").cancelDrag();
- onDragLeaveCategoryNestBetween(eventM.theEvent);
- eventM.preventDefault();
- }
- function bubbletoDragAndDropSensitiveObject( obj )
- {
- var target = obj;
- if (!obj)
- return null;
- if (!obj.getAttribute || !obj.getAttribute("type") || obj.getAttribute("type") == "")
- target = bubbletoDragAndDropSensitiveObject( obj.parentNode );
- return target;
- }
- function isValidDragAndDropObject()
- {
- var retValue = true;
- var text = topparent.getGlobal("dndManager").getData();
- if (!text)
- retValue = false;
- return retValue;
- }
- function onDragOverCategoryNestBetween(event, obj)
- {
- showXtabDragNestBetweenDiv(event, obj);
- }
- function onDragLeaveCategoryNestBetween(event)
- {
- hideXtabDragNestBetweenDiv();
- }
- function onDropCategoryNestBetween(event, obj)
- {
- var dndManager = topparent.getGlobal("dndManager");
- var catInfo = new DragInfo (dndManager.getData());
- var RC = obj.getAttribute("type") == "r"? "R" : "C";
- var cmd = "";
- if (obj.getAttribute("parent_code")) {
- //We want to drill up on the summary,
- //hide all categories but the target category and source category,
- //and then reorder the categories accordingly.
- var level = parseInt(obj.getAttribute("mylevel"));
- cmd += "DG:" + RC + level + "\t" + constructOperandId(obj.getAttribute("parent_id"),obj.getAttribute("dimIdx"),obj.getAttribute("parent_code"));
- cmd += "\t\tMS:1\t" + RC + level + "\t" + constructOperandId(catInfo['ppds_id'],obj.getAttribute("dimIdx"),catInfo['code']) + "\t" + constructOperandId(obj.getAttribute("ppdsId"),obj.getAttribute("dimIdx"),obj.getAttribute("code"));
- if (level)
- cmd += "\t\tES:" + RC + level;
- else
- cmd += "\t\tET:" + RC + "0";
- } else {
- //Show the dragged category in case it is hidden
- cmd += "MS:0\t" + constructOperandId(catInfo['ppds_id'],catInfo['dim'],catInfo['code']);
- }
- cmd += "\t\t" + constructReorderCategoryCommand(catInfo['ppds_id'], catInfo['code'], obj);
- doit (cmd);
- }
- function onDropMeasuresOnDimbar(event)
- {
- var dndManager = topparent.getGlobal("dndManager");
- var catInfo = new DragInfo (dndManager.getData());
- var cmd = "DC:" + catInfo['ppds_id'] + "," + catInfo['dim'] + "," + catInfo['code'];
- doit (cmd);
- }
- function onDragOverRowNestZone(event, level)
- {
- var eventM = new eventManager(event);
- var id;
- id = "rowNest" + level;
- var tags = document.getElementsByName(id);
- for (var i=0; i < tags.length; i++)
- {
- if (tags[i].parentNode.className.indexOf(" nest-area") >= 0)
- return; //no point in processing, it's already selected...
- else
- {
- tags[i].parentNode.className += " nest-area";
- }
- }
- }
- function onDragOverColNestZone(event, level)
- {
- var eventM = new eventManager(event);
- var id;
- id = "columnNest" + level;
- var tags = document.getElementsByName(id);
- for (var i=0; i < tags.length; i++)
- {
- if (tags[i].parentNode.className.indexOf(" nest-area") >= 0)
- return; //no point in processing, it's already selected...
- else
- {
- tags[i].parentNode.className += " nest-area";
- }
- }
- }
- function onDragLeaveRowNestZone(level)
- {
- var id;
- id = "rowNest" + level;
- var tags = document.getElementsByName(id);
- for (var i=0; i < tags.length; i++)
- {
- if (tags[i].parentNode.className.indexOf(" nest-area") >= 0)
- tags[i].parentNode.className = tags[i].parentNode.className.replace(RegExp(" nest-area", "g"), "");
- else
- return;
- }
- }
- function onDragLeaveColNestZone(level)
- {
- var id;
- id = "columnNest" + level;
- var tags = document.getElementsByName(id);
- for (var i=0; i < tags.length; i++)
- {
- if (tags[i].parentNode.className.indexOf(" nest-area") >= 0)
- tags[i].parentNode.className = tags[i].parentNode.className.replace(RegExp(" nest-area", "g"), "");
- else
- return;
- }
- }
- function onDropColumnReplace(code, level) {
- doColumnReplaceCommand (code, level);
- }
- function onDropColumnNest(code, level, dimIdx) {
- doColumnNestCommand (code, level, dimIdx);
- }
- function onDragOverColumn(event, level) {
- var obj = document.getElementById("lc" + level);
- deselectAllXtab(event);
- selectLevel(event, obj, true);
- }
- function onDragLeaveColumn(event,level) {
- var obj = document.getElementById("lc" + level);
- selectLevel(event, obj, false );
- }
- function onDropRowReplace(event, code, level ) {
- var eventM = new eventManager(event);
- doRowReplaceCommand (code, level);
- eventM.cancelBubble();
- }
- function onDropRowNest(event, code, level, dimIdx) {
- var eventM = new eventManager(event);
- doRowNestCommand (code, level, dimIdx);
- eventM.cancelBubble();
- }
- function onDragOverRow(event,level) {
- var obj = document.getElementById("lr" + level);
- deselectAllXtab(event);
- selectLevel(event, obj, true );
- }
- function onDragLeaveRow(event, level) {
- var obj = document.getElementById("lr" + level);
- selectLevel(event, obj, false );
- }
- function onDropMeasure(measureNo) {
- if ( !isDraggingMeasure() ) return;
- doReplaceMeasureCommand(measureNo);
- }
- function onDragOverXtabMeasure(event) {
- if ( isDraggingMeasure() )
- {
- var eventM = new eventManager(event);
- var obj = bubbletoDragAndDropSensitiveObject(eventM.getSrc());
- if (obj && obj.getAttribute("type") == "m")
- obj.className += " measure-drag-over";
- selectedMeasureCell = obj;
- }
- }
- function onDragLeaveXtabMeasure() {
- if (selectedMeasureCell)
- {
- var name = selectedMeasureCell.className;
- name = name.replace(RegExp(" measure-drag-over", "g"), "");
- selectedMeasureCell.className = name;
- selectedMeasureCell = null;
- }
- }
- function hideErrorDialog() {
- el = document.getElementById('testDivError');
- el.parentElement.removeChild(el);
- }
- function isDraggingMeasure()
- {
- var dndManager = topparent.getGlobal("dndManager");
- var catInfo = new DragInfo (dndManager.getData());
- var dim = parseInt(catInfo['dim']);
- var sCmd = "gDimensionInfo[" + dim + "]";
- var dimInfo = topparent.getGlobal(sCmd);
-
- if (dimInfo.isMeasureDimension)
- return true;
- return false;
- }
- function getParentOfDraggedCategory() {
- //Since we are draggin from the tree, we have to get the parent from the tree.
- var dndManager = topparent.getGlobal("dndManager");
- var catInfo = new DragInfo (dndManager.getData());
- return catInfo['parentId'];
- }
- function getDraggedCategory() {
- var dndManager = topparent.getGlobal("dndManager");
- var catInfo = new DragInfo (dndManager.getData());
- var dim = parseInt(catInfo['dim']);
- var code = catInfo['code'];
- return dimCache.getCategory(dim,code);
- }
- function getIdofDraggedCategory() {
- var dndManager = topparent.getGlobal("dndManager");
- var catInfo = new DragInfo(dndManager.getData());
- return catInfo['ppds_id'];
- }
- function isReordering(type, event, obj) {
- if (!event || !type || !obj)
- return false;
- if (parseInt(obj.getAttribute("ppdsId")) == parseInt(getIdofDraggedCategory()))
- return false;
- if (obj.getAttribute("summary") && !topparent.getGlobal("gDimensionInfo[" + obj.getAttribute("dimIdx") + "]").isMeasureDimension)
- return false;
- if (parseInt(obj.getAttribute("parent_id")) != parseInt(getParentOfDraggedCategory()))
- return false;
- if (topparent.getGlobal("gDimensionInfo[" + obj.getAttribute("dimIdx") + "]").isTimeDimension)
- return false;
- if (type == "r") {
- if (isNestAboveCategory(event, obj) || isNestBelowCategory(event, obj))
- return true;
- } else if (type == "c") {
- if (isNestLeftOfCategory(event, obj) || isNestRightOfCategory(event, obj))
- return true;
- }
-
- return false;
- }
- function DimensionInfo (isTime, isMeasure)
- {
- this.isTimeDimension = isTime;
- this.isMeasureDimension = isMeasure;
- }
|