| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 | // ******* SITEMAP TOOLBAR VIEWER ACTIONS ******** //$axure.internal(function ($ax) {    var userTriggeredEventNames = ['onClick', 'onDoubleClick', 'onMouseOver', 'onMouseMove', 'onMouseOut', 'onMouseDown', 'onMouseUp',        'onKeyDown', 'onKeyUp', 'onFocus', 'onLostFocus', 'onTextChange', 'onSelectionChange', 'onSelectedChange', 'onSelect', 'onUnselect',        'onSwipeLeft', 'onSwipeRight', 'onSwipeUp', 'onSwipeDown', 'onDragStart', 'onDrag', 'onDragDrop', 'onScroll', 'onContextMenu', 'onMouseHover', 'onLongClick'];        //var _toggleSelectWidgetNoteForRepeater = function (repeaterId, scriptId, select) {    //    var itemIds = $ax.getItemIdsForRepeater(repeaterId);    //    for(var i = 0; i < itemIds.length; i++) {    //        var itemId = itemIds[i];    //        var elementId = $ax.repeater.createElementId(scriptId, itemId);    //        if(select) $('#' + elementId).addClass('widgetNoteSelected');    //        else $('#' + elementId).removeClass('widgetNoteSelected');    //    }    //}    $ax.messageCenter.addMessageListener(function (message, data) {        //If annotation toggle message received from sitemap, toggle footnotes        if(message == 'toggleSelectWidgetNote') {            if (!IOS) {                $('.widgetNoteSelected').removeClass('widgetNoteSelected');            }            if(!data.value) return;            //if(lastSelectedWidgetNote == data.id) {            //    lastSelectedWidgetNote = null;            //    return;            //}            $ax('*').each(function(obj, elementId) {                if (obj.id == data.id) {                    if (!IOS) {                        $('#' + elementId).addClass('widgetNoteSelected');                    }                    _scrollToSelectedNote($('#' + elementId), data.view);                }            });        }    });    var _scrollToSelectedNote = function ($elmt, view) {        var isLandscape = IOS ? window.orientation != 0 && window.orientation != 180 : false;        var winWidth = !IOS ? $(window).width() : (isLandscape ? window.screen.height : window.screen.width) - view.panelWidthOffset;        var winHeight = !IOS ? $(window).height() : view.height;        var docLeft = $('html').last().scrollLeft();        var docTop = $('html').last().scrollTop();        var docRight = docLeft + winWidth;        var docBottom = docTop + winHeight;        var scale = $('#base').css('transform');;        scale = (scale == "none") ? 1 : Number(scale.substring(scale.indexOf('(') + 1, scale.indexOf(',')));        var bodyLeft = ($('body').css('left') !== undefined && $('body').css('left') !== "auto") ? Number($('body').css('left').replace('px','')) : 0;        var top = scale * Number($elmt.css('top').replace('px', ''));        var bottom = top + scale * $elmt.height();        var left = scale * Number($elmt.css('left').replace('px', '')) + bodyLeft;        var right = left + scale * $elmt.width();        var doHorizontalMove = left < docLeft || right > docRight;        var doVerticalMove = top < docTop || bottom > docBottom;        var padding = scale * 50;        var newScrollLeft = 0        if (left < docLeft) {            newScrollLeft = left - padding;        } else if (right > docRight) {            newScrollLeft = right + padding - winWidth;        }        var newScrollTop = 0        if (top < docTop) {            newScrollTop = top - padding;        } else if (bottom > docBottom) {            newScrollTop = bottom + padding - winHeight;        }        // Device Frame or Scale to width or Scale to fit (situations where there is no horizontal scroll)        if (view.h || view.scaleVal == 1 || view.scaleVal == 2) {            doHorizontalMove = false;        }        // Has Device Frame or Scale to Width and widget with note is outside of viewable panel right bounds        if ((view.scaleVal == 1 || view.h) && (left > docRight)) {            doVerticalMove = false;        }        // TODO: need to do something for dynamic panel with scroll        if (doHorizontalMove && doVerticalMove) {            $("html, body").animate({ scrollLeft: newScrollLeft, scrollTop: newScrollTop }, 300);        } else if (doHorizontalMove) {            $("html, body").animate({ scrollLeft: newScrollLeft }, 300);        } else if (doVerticalMove) {            $("html, body").animate({ scrollTop: newScrollTop }, 300);        }    }    var highlightEnabled = false;    $ax.messageCenter.addMessageListener(function(message, data) {        if(message == 'highlightInteractive') {            highlightEnabled = data == true;            _applyHighlight($ax('*'));        }    });    var _applyHighlight = $ax.applyHighlight = function(query, ignoreUnset) {        if(ignoreUnset && !highlightEnabled) return;        var pulsateClassName = 'legacyPulsateBorder';        //Determine if the widget has a defined userTriggeredEventName specified in the array above        var _isInteractive = function(diagramObject) {            if(diagramObject && diagramObject.interactionMap) {                for(var index in userTriggeredEventNames) {                    if(diagramObject.interactionMap[userTriggeredEventNames[index]]) return true;                }            }            return false;        };        //Traverse through parent layers (if any) of an element and see if any have a defined userTriggeredEventName        var _findMatchInParent = function(id) {            var parents = $ax('#' + id).getParents(true, ['layer'])[0];            for(var i in parents) {                var parentId = parents[i];                var parentObj = $ax.getObjectFromScriptId(parentId);                if(_isInteractive(parentObj)) return true;            }            return false;        };        //Find all widgets with a defined userTriggeredEventName specified in the array above        var $matchingElements = query.filter(function (obj, id) {            //This prevents the top left corner of the page from highlighting with everything else            if($ax.public.fn.IsLayer(obj.type)) return false;            if(_isInteractive(obj)) return true;            else if($ax.public.fn.IsVector(obj.type) && obj.referencePageUrl) return true;            //Last check on the object's parent layer(s), if a layer has a defined userTriggeredEventName            //then we shall highlight each member of that layer TODO This is a design decision and is subject to change            return _findMatchInParent(id);        }).$();        var isHighlighted = $matchingElements.is('.' + pulsateClassName);        //Toggle the pulsate class on the matched elements        if(highlightEnabled && !isHighlighted) {            $matchingElements.addClass(pulsateClassName);        } else if(!highlightEnabled && isHighlighted) {            $matchingElements.removeClass(pulsateClassName);        }    };        var getElementsFromPoint = function (x, y) {        var elementsFromPointFn = document.elementsFromPoint || document.msElementsFromPoint;        if (typeof elementsFromPointFn === "function") {            return elementsFromPointFn.bind(document)(x, y);        }        return [];    }    $axure.getIdAndRectAtLoc = function (data) {        var element = document.elementFromPoint(data.x, data.y);        if (!element) return undefined;        var jObj = _getElementIdFromTarget(element);        if (jObj.length > 0) {          var id = jObj.attr('id');          var axObj = $ax('#' + id);          var rect = axObj.pageBoundingRect();          return { 'id': id, 'rect': rect };        }        return undefined;    }    $axure.getListOfIdAndRectAtLoc = function (data) {        var domElements = getElementsFromPoint(data.x, data.y);        if (!domElements || !domElements.length) return [];        const elements = [];                domElements.forEach(function (domElement) {            var jObj = _getElementIdFromTarget(domElement);            if (jObj.length > 0) {                var id = jObj.attr('id');                var axObj = $ax('#' + id);                                var rect = axObj.pageBoundingRect();                if (elements.findIndex(function (x) { return x.id === id }) < 0) {                                        elements.push( { 'id': id, 'rect': rect } );                }            }        });        return elements;    }    $axure.getIdRectAndStyleAtLoc = function(data) {        var element = document.elementFromPoint(data.x, data.y);        if (!element) return undefined;        var jObj = _getElementIdFromTarget(element);        if (jObj.length > 0) {          var id = jObj.attr('id');          return $axure.getRectAndStyleById(id);        }        return undefined;    }    $axure.getListOfIdRectAndStyleAtLoc = function(data) {        var domElements = getElementsFromPoint(data.x, data.y);        if (!domElements || !domElements.length) return [];                const elements = [];                domElements.forEach(function (domElement) {            var jObj = _getElementIdFromTarget(domElement);            if (jObj.length > 0) {                var id = jObj.attr('id');                if (elements.findIndex(function (x) { return x.id === id }) < 0) {                                        elements.push($axure.getRectAndStyleById(id));                }            }        });        return elements;    }    $axure.getRectAndStyleById = function (id) {        var axObj = $ax('#' + id);        var rect = axObj.pageBoundingRect();        var style = $ax.style.computeFullStyle(id, $ax.style.generateState(id), $ax.adaptive.currentViewId);        style.text = axObj.text();        return { 'id': id, 'rect': rect, 'style': style };    }    $axure.isIdVisible = function (id) {        return id ? $ax.visibility.IsIdVisible(id) : false;    }    $axure.getParentElementById = function (elementId) {        if (!elementId) return undefined;        var parentId = $ax.getLayerParentFromElementId(elementId);        if (!parentId) {            return undefined;        }        return $axure.getRectAndStyleById(parentId);    }    var _getElementIdFromTarget = function (target) {        var targetId = target.id;        var jTarget = $(target);        while((!targetId || targetId.indexOf('cache') > -1) && jTarget[0].tagName != 'HTML') {            jTarget = jTarget.parent();            targetId = jTarget.attr('id');        }        if(targetId && targetId != 'base') {            var sections = targetId.split('_');            return $('#' + sections[0]);        }        return '';    }});
 |