You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
7.1 KiB
161 lines
7.1 KiB
// ******* Annotation MANAGER ******** //
|
|
$axure.internal(function($ax) {
|
|
var NOTE_SIZE = 10;
|
|
|
|
var _annotationManager = $ax.annotation = {};
|
|
|
|
var _updateLinkLocations = $ax.annotation.updateLinkLocations = function(elementId) {
|
|
var textId = $ax.GetTextPanelId(elementId);
|
|
if(!textId) return;
|
|
|
|
var rotation = $ax.getObjectFromElementId(elementId).style.rotation;
|
|
//we have to do this because webkit reports the post-transform position but when you set positions it's pre-transform
|
|
if(WEBKIT && rotation) {
|
|
//we can dynamiclly rotate a widget now, show need to remember the transform rather than just remove it
|
|
//here jquery.css will return 'none' if element is display none
|
|
var oldShapeTransform = document.getElementById(elementId).style['-webkit-transform'];
|
|
var oldTextTransform = document.getElementById(textId).style['-webkit-transform'];
|
|
$('#' + elementId).css('-webkit-transform', 'scale(1)');
|
|
$('#' + textId).css('-webkit-transform', 'scale(1)');
|
|
}
|
|
|
|
$('#' + textId).find('div[id$="_ann"]').each(function(index, value) {
|
|
var elementId = value.id.replace('_ann', '');
|
|
var $link = $('#' + elementId);
|
|
var annPos = $link.position();
|
|
annPos.left += $link.width();
|
|
//var annPos = $(value).position();
|
|
var left = annPos.left;// - NOTE_SIZE;
|
|
var top = annPos.top - 5;
|
|
|
|
$(value).css('left', left).css('top', top);
|
|
});
|
|
|
|
//undo the transform reset
|
|
if(WEBKIT && rotation) {
|
|
$('#' + elementId).css('-webkit-transform', oldShapeTransform || '');
|
|
$('#' + textId).css('-webkit-transform', oldTextTransform || '');
|
|
}
|
|
};
|
|
|
|
var _toggleAnnotationDialog = function (elementId, event) {
|
|
var win = $(window);
|
|
var scrollY = win.scrollTop();
|
|
var scrollX = win.scrollLeft();
|
|
|
|
var messageData = { id: elementId, x: event.pageX - scrollX, y: event.pageY - scrollY }
|
|
if (!$axure.utils.isInPlayer()) messageData.page = $ax.pageData.notesData;
|
|
$ax.messageCenter.postMessage('toggleAnnDialog', messageData);
|
|
}
|
|
|
|
$ax.annotation.initialize = function () {
|
|
_createFootnotes($ax('*'), true);
|
|
}
|
|
|
|
var _createFootnotes = $ax.annotation.createFootnotes = function(query, create) {
|
|
if(!$ax.document.configuration.showAnnotations) return;
|
|
|
|
var widgetNotes = $ax.pageData.notesData.widgetNotes;
|
|
if (widgetNotes) {
|
|
var ownerToFns = $ax.pageData.notesData.ownerToFns;
|
|
if(!$.isEmptyObject(ownerToFns)) {
|
|
query.each(function(dObj, elementId) {
|
|
var fns = ownerToFns[dObj.id];
|
|
if (fns !== undefined) {
|
|
var elementIdQuery = $('#' + elementId);
|
|
if (dObj.type == 'hyperlink') {
|
|
var parentId = $ax.GetParentIdFromLink(elementId);
|
|
if (create) {
|
|
elementIdQuery.after("<div id='" + elementId + "_ann' class='annnote'>​</div>");
|
|
appendFns($('#' + elementId + "_ann"), fns);
|
|
}
|
|
_updateLinkLocations(parentId);
|
|
} else {
|
|
if (create) {
|
|
elementIdQuery.after("<div id='" + elementId + "_ann' class='annnote'>​</div>");
|
|
appendFns($('#' + elementId + "_ann"), fns);
|
|
}
|
|
_adjustIconLocation(elementId, dObj);
|
|
}
|
|
|
|
if (create) {
|
|
$('#' + elementId + "_ann").click(function (e) {
|
|
_toggleAnnotationDialog(dObj.id, e);
|
|
return false;
|
|
});
|
|
|
|
var isVisible = true;
|
|
var isMaster = $ax.public.fn.IsReferenceDiagramObject(dObj.type);
|
|
if (isMaster) isVisible = dObj.visible;
|
|
else isVisible = $ax.visibility.IsIdVisible(elementId);
|
|
if (!isVisible) {
|
|
var ann = document.getElementById(elementId + "_ann");
|
|
if (ann) $ax.visibility.SetVisible(ann, false);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function appendFns($parent, fns) {
|
|
for (var index = 0; index < fns.length; index++) {
|
|
$parent.append("<div class='annnotelabel' >" + fns[index] + "</div>");
|
|
}
|
|
}
|
|
};
|
|
|
|
$ax.annotation.updateAllFootnotes = function () {
|
|
_createFootnotes($ax('*'), false);
|
|
}
|
|
|
|
$ax.annotation.jQueryAnn = function(query) {
|
|
var elementIds = [];
|
|
query.each(function(diagramObject, elementId) {
|
|
if(diagramObject.annotation) elementIds[elementIds.length] = elementId;
|
|
});
|
|
var elementIdSelectors = jQuery.map(elementIds, function(elementId) { return '#' + elementId + '_ann'; });
|
|
var jQuerySelectorText = (elementIdSelectors.length > 0) ? elementIdSelectors.join(', ') : '';
|
|
return $(jQuerySelectorText);
|
|
};
|
|
|
|
$(window.document).ready(function() {
|
|
//$ax.annotation.InitializeAnnotations($ax(function(dObj) { return dObj.annotation; }));
|
|
|
|
$ax.messageCenter.addMessageListener(function(message, data) {
|
|
//If the annotations are being hidden via the Sitemap toggle button, hide any open dialogs
|
|
if(message == 'annotationToggle') {
|
|
if (data == true) {
|
|
$('div.annnote').show();
|
|
} else {
|
|
$('div.annnote').hide();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
//adjust annotation location to a element's top right corner
|
|
var _adjustIconLocation = $ax.annotation.adjustIconLocation = function(id, dObj) {
|
|
var ann = document.getElementById(id + "_ann");
|
|
if(ann) {
|
|
var corners = $ax.public.fn.getCornersFromComponent(id);
|
|
var width = $(ann).width();
|
|
var newTopRight = $ax.public.fn.vectorPlus(corners.relativeTopRight, corners.centerPoint);
|
|
//note size is 14x8, this is how rp calculated it as well
|
|
ann.style.left = (newTopRight.x - width) + "px";
|
|
|
|
var elementType = dObj ? dObj.type : $ax.getTypeFromElementId(id);
|
|
var yOffset = $ax.public.fn.IsTableCell(elementType) ? 0 : -8;
|
|
ann.style.top = (newTopRight.y + yOffset) + "px";
|
|
}
|
|
|
|
var ref = document.getElementById(id + "_ref");
|
|
if(ref) {
|
|
if(!corners) corners = $ax.public.fn.getCornersFromComponent(id);
|
|
var newBottomRight = $ax.public.fn.vectorPlus(corners.relativeBottomRight, corners.centerPoint);
|
|
|
|
ref.style.left = (newBottomRight.x - 8) + 'px';
|
|
ref.style.top = (newBottomRight.y - 10) + 'px';
|
|
}
|
|
}
|
|
});
|