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 '';
- }
- });
|