// 8.0.0.3382. Generated 1/14/2019 10:26:32 PM UTC
//***** axQuery.js *****//
$axure = function(query) {
return $axure.query(query);
};
// ******* AxQuery and Page metadata ******** //
(function() {
var $ax = function() {
var returnVal = $axure.apply(this, arguments);
var axFn = $ax.fn;
for (var key in axFn) {
returnVal[key] = axFn[key];
}
return returnVal;
};
$ax.public = $axure;
$ax.fn = {};
$axure.internal = function(initFunction) {
//Attach messagecenter to $ax object so that it can be used in viewer.js, etc in internal scope
if(!$ax.messageCenter) $ax.messageCenter = $axure.messageCenter;
return initFunction($ax);
};
var _lastFiredResize = 0;
var _resizeFunctions = [];
var _lastTimeout;
var _fireResize = function() {
if (_lastTimeout) window.clearTimeout(_lastTimeout);
_lastTimeout = undefined;
_lastFiredResize = new Date().getTime();
for(var i = 0; i < _resizeFunctions.length; i++) _resizeFunctions[i]();
};
$axure.resize = function(fn) {
if(fn) _resizeFunctions[_resizeFunctions.length] = fn;
else $(window).resize();
};
$(window).resize(function() {
var THRESHOLD = 50;
var now = new Date().getTime();
if(now - _lastFiredResize > THRESHOLD) {
_fireResize();
} else if(!_lastTimeout) {
_lastTimeout = window.setTimeout(_fireResize, THRESHOLD);
}
});
window.$obj = function(id) {
return $ax.getObjectFromElementId(id);
};
window.$id = function(obj) {
return obj.scriptIds[0];
};
window.$jobj = function(id) {
return $(document.getElementById(id));
};
window.$jobjAll = function(id) {
return $addAll($jobj(id), id);
};
window.$addAll = function(jobj, id) {
return jobj.add($jobj(id + '_ann')).add($jobj(id + '_ref'));
};
$ax.INPUT = function(id) { return id + "_input"; };
$ax.IsImageFocusable = function (type) { return $ax.public.fn.IsImageBox(type) || $ax.public.fn.IsVector(type) || $ax.public.fn.IsTreeNodeObject(type) || $ax.public.fn.IsTableCell(type); };
$ax.IsTreeNodeObject = function (type) { return $ax.public.fn.IsTreeNodeObject(type); };
$ax.IsSelectionButton = function (type) { return $ax.public.fn.IsCheckBox(type) || $ax.public.fn.IsRadioButton(type); };
var _fn = {};
$axure.fn = _fn;
$axure.fn.jQuery = function() {
var elements = this.getElements();
return $(elements);
};
$axure.fn.$ = $axure.fn.jQuery;
var _query = function(query, queryArg) {
var returnVal = {};
var _axQueryObject = returnVal.query = { };
_axQueryObject.filterFunctions = [];
if (query == '*') {
_axQueryObject.filterFunctions[0] = function() { return true; };
} else if (typeof(query) === 'function') {
_axQueryObject.filterFunctions[0] = query;
} else {
var firstString = $.trim(query.toString());
if (firstString.charAt(0) == '@') {
_axQueryObject.filterFunctions[0] = function(diagramObject) {
return diagramObject.label == firstString.substring(1);
};
} else if (firstString.charAt(0) == '#') {
_axQueryObject.elementId = firstString.substring(1);
} else {
if (firstString == 'label') {
_axQueryObject.filterFunctions[0] = function(diagramObject) {
return queryArg instanceof Array && queryArg.indexOf(diagramObject.label) > 0 ||
queryArg instanceof RegExp && queryArg.test(diagramObject.label) ||
diagramObject.label == queryArg;
};
} else if(firstString == 'elementId') {
_axQueryObject.filterFunctions[0] = function(diagramObject, elementId) {
return queryArg instanceof Array && queryArg.indexOf(elementId) > 0 ||
elementId == queryArg;
};
}
}
}
var axureFn = $axure.fn;
for (var key in axureFn) {
returnVal[key] = axureFn[key];
}
return returnVal;
};
$axure.query = _query;
var _getFilterFnFromQuery = function(query) {
var filter = function(diagramObject, elementId) {
// Non diagram objects are allowed to be queryed, such as text inputs.
if (diagramObject && !$ax.public.fn.IsReferenceDiagramObject(diagramObject.type) && !document.getElementById(elementId)) return false;
var retVal = true;
for(var i = 0; i < query.filterFunctions.length && retVal; i++) {
retVal = query.filterFunctions[i](diagramObject, elementId);
}
return retVal;
};
return filter;
};
$ax.public.fn.filter = function(query, queryArg) {
var returnVal = _query(query, queryArg);
if(this.query.elementId) returnVal.query.elementId = this.query.elementId;
//If there is already a function, offset by 1 when copying other functions over.
var offset = returnVal.query.filterFunctions[0] ? 1 : 0;
//Copy all functions over to new array.
for(var i = 0; i < this.query.filterFunctions.length; i++) returnVal.query.filterFunctions[i+offset] = this.query.filterFunctions[i];
//Functions are in reverse order now
returnVal.query.filterFunctions.reverse();
return returnVal;
};
$ax.public.fn.each = function(fn) {
var filter = _getFilterFnFromQuery(this.query);
var elementIds = this.query.elementId ? [this.query.elementId] : $ax.getAllElementIds();
for (var i = 0; i < elementIds.length; i++) {
var elementId = elementIds[i];
var diagramObject = $ax.getObjectFromElementId(elementId);
if (filter(diagramObject, elementId)) {
fn.apply(diagramObject, [diagramObject, elementId]);
}
}
};
$ax.public.fn.getElements = function() {
var elements = [];
this.each(function(dObj, elementId) {
var elementById = document.getElementById(elementId);
if(elementById) elements[elements.length] = elementById;
});
return elements;
};
$ax.public.fn.getElementIds = function() {
var elementIds = [];
this.each(function(dObj, elementId) { elementIds[elementIds.length] = elementId; });
return elementIds;
};
// Deep means to keep getting parents parent until at the root parent. Parent is then an array instead of an id.
// Filter options: layer, rdo, repeater, item, dynamicPanel, state
$ax.public.fn.getParents = function (deep, filter) {
if(filter == '*') filter = ['layer', 'rdo', 'repeater', 'item', 'dynamicPanel', 'state'];
var elementIds = this.getElementIds();
var parentIds = [];
var getParent = function(elementId) {
var containerIndex = elementId.indexOf('_container');
if(containerIndex !== -1) elementId = elementId.substring(0, containerIndex);
if(elementId.indexOf('_text') !== -1) elementId = $ax.GetShapeIdFromText(elementId);
// Check repeater item before layer, because repeater item detects it's parent layer, but wants to go directly to it's repeater first.
// if repeater item, then just return repeater
var scriptId = $ax.repeater.getScriptIdFromElementId(elementId);
var itemNum = $ax.repeater.getItemIdFromElementId(elementId);
var parentRepeater = $ax.getParentRepeaterFromScriptId(scriptId);
// scriptId is item or repeater itself
if (parentRepeater == scriptId) {
// If you are repeater item, return your repeater
if (itemNum) return filter.indexOf('repeater') != -1 ? scriptId : getParent(scriptId);
// Otherwise you are actually at repeater, clean parentRepeater, or else you loop
parentRepeater = undefined;
}
// Layer only references it if it is a direct layer to it
var parent = $ax.getLayerParentFromElementId(elementId);
// If layer is allowed we found parent, otherwise ignore and keep climbing
if (parent) return filter.indexOf('layer') != -1 ? parent : getParent(parent);
// if state, then just return panel
if(scriptId.indexOf('_state') != -1) {
var panelId = $ax.repeater.createElementId(scriptId.split('_')[0], itemNum);
// If dynamic panel is allowed we found parent, otherwise ignore and keep climbing
return filter.indexOf('dynamicPanel') != -1 ? panelId : getParent(panelId);
}
var parentType = '';
if(parentRepeater) {
parentType = 'item';
parent = $ax.repeater.createElementId(parentRepeater, itemNum);
}
var masterPath = $ax.getPathFromScriptId($ax.repeater.getScriptIdFromElementId(elementId));
masterPath.pop();
if(masterPath.length > 0) {
var masterId = $ax.getElementIdFromPath(masterPath, { itemNum: itemNum });
if(!masterId) return undefined;
var masterRepeater = $ax.getParentRepeaterFromElementId($ax.repeater.getScriptIdFromElementId(masterId));
if(!parentRepeater || masterRepeater) {
parentType = 'rdo';
parent = masterId;
}
}
var obj = $obj(elementId);
var parentDynamicPanel = obj.parentDynamicPanel;
if(parentDynamicPanel) {
// Make sure the parent if not parentRepeater, or dynamic panel is also in that repeater
// If there is a parent master, the dynamic panel must be in it, otherwise parentDynamicPanel would be undefined.
var panelPath = masterPath;
panelPath[panelPath.length] = parentDynamicPanel;
panelId = $ax.getElementIdFromPath(panelPath, { itemNum: itemNum });
if(!panelId) return undefined;
var panelRepeater = $ax.getParentRepeaterFromElementId(panelId);
if(!parentRepeater || panelRepeater) {
parentType = 'state';
parent = panelId + '_state' + obj.panelIndex;
}
}
// If at top or parent type is desired, then return parent, otherwise keep climbing
return !parent || filter.indexOf(parentType) != -1 ? parent : getParent(parent);
};
for(var i = 0; i < elementIds.length; i++) {
var parent = getParent(elementIds[i]);
if(deep) {
var parents = [];
while(parent) {
parents[parents.length] = parent;
// If id is not a valid object, you are either repeater item or dynamic panel state
//if(!$obj(parent)) parent = $ax.visibility.getWidgetFromContainer($jobj(parent).parent().attr('id'));
parent = getParent(parent);
}
parent = parents;
}
parentIds[parentIds.length] = parent;
}
return parentIds;
};
// Get the path to the child, where non leaf nodes can be masters, layers, dynamic panels, and repeaters.
$ax.public.fn.getChildren = function(deep, ignoreUnplaced) { // ignoreUnplaced should probably be the default, but when that is done a full audit of usages should be done
var elementIds = this.getElementIds();
var children = [];
var getChildren = function(elementId) {
var obj = $obj(elementId);
if(!obj) return undefined;
var isRepeater = obj.type == $ax.constants.REPEATER_TYPE;
var isDynamicPanel = obj.type == $ax.constants.DYNAMIC_PANEL_TYPE;
var isLayer = obj.type == $ax.constants.LAYER_TYPE;
var isMaster = obj.type == $ax.constants.MASTER_TYPE;
var isMenu = obj.type == $ax.constants.MENU_OBJECT_TYPE;
var isTreeNode = obj.type == $ax.constants.TREE_NODE_OBJECT_TYPE;
var isTable = obj.type == $ax.constants.TABLE_TYPE;
//var isCompoundVector = obj.type == $ax.constants.VECTOR_SHAPE_TYPE && obj.generateCompound;
if (isRepeater || isDynamicPanel || isLayer || isMaster || isMenu || isTreeNode || isTable) {// || isCompoundVector) {
// Find parent that children should be pulled from. Default is just the elementId query (used by table and master)
var parent = $jobj(elementId);
if(isRepeater) {
parent = $();
var itemIds = $ax.getItemIdsForRepeater(elementId);
for(var itemIndex = 0; itemIndex < itemIds.length; itemIndex++) parent = parent.add($jobj($ax.repeater.createElementId(elementId, itemIds[itemIndex])));
} else if(isDynamicPanel) {
// Really only need to do active state probably...
parent = $jobj(elementId).children();
// Get through all containers
while ($(parent[0]).attr('id').indexOf('container') != -1) parent = parent.children();
// Now at states, but want states content
parent = parent.children();
} else if(isTreeNode) parent = $jobj($ax.repeater.applySuffixToElementId(elementId, '_children'));
// Menu doesn't want all children, only tables and menus, so it must be handled specially
var children = isMenu ? parent.children('.ax_table').add(parent.children('.ax_menu')) : parent.children();
children = $ax.visibility.getRealChildren(_fixForBasicLinks(children));
// For tree nodes you want the the button shape contained by the elementQuery too
if(isTreeNode) {
var treeNodeChildren = $jobj(elementId).children();
for(var treeNodeIndex = 0; treeNodeIndex < treeNodeChildren.length; treeNodeIndex++) {
var treeNodeChild = $(treeNodeChildren[treeNodeIndex]);
var childObj = $obj(treeNodeChild.attr('id'));
if (childObj && $ax.public.fn.IsVector(childObj.type)) children = children.add(treeNodeChild);
}
}
var childrenIds = [];
for(var childIndex = 0; childIndex < children.length; childIndex++) {
var childObj = $(children[childIndex]);
var id = childObj.attr('id');
if(typeof(id) == 'undefined' && childObj.is('a')) id = $(childObj.children()[0]).attr('id');
// Ignore annotations and any other children that are not elements
if (id.split('_').length > 1) continue;
// Ignore Unplaced
if(ignoreUnplaced && $ax.visibility.isScriptIdLimbo($ax.repeater.getScriptIdFromElementId(id))) continue;
childrenIds.push(id);
}
if(deep) {
var childObjs = [];
for(var i = 0; i < childrenIds.length; i++) {
var childId = childrenIds[i];
childObjs[i] = { id: childId, children: getChildren(childId) };
}
childrenIds = childObjs;
}
return childrenIds;
}
return undefined;
};
for(var i = 0; i < elementIds.length; i++) {
children[children.length] = { id : elementIds[i], children : getChildren(elementIds[i])};
}
return children;
};
var _fixForBasicLinks = function(query) {
var hasBasicLinks = query.filter('.basiclink').length > 0;
if(!hasBasicLinks) return query;
var retval = $();
for(var i = 0; i < query.length; i++) {
var child = $(query[i]);
if(child.hasClass('basiclink')) retval = retval.add(child.children());
else retval = retval.add(child);
}
return retval;
};
})();
//***** globals.js *****//
$axure.internal(function($ax) {
var _globals = $ax.globals = {};
$ax.globals.MaxZIndex = 1000;
$ax.globals.MinZIndex = -1000;
});
//***** axutils.js *****//
/*
*
*
*
*
*/
(function() {
// define the root namespace object
if(!window.$axure) window.$axure = {};
$axure.utils = {};
// ------------------------------------------------------------------------
// Makes an object bindable
// ------------------------------------------------------------------------
$axure.utils.makeBindable = function(obj, events) {
if(obj.registeredBindings != null) return;
// copy the events
obj.bindableEvents = events.slice();
obj.registeredBindings = {};
obj.bind = function(eventName, fn) {
var binding = {};
binding.eventName = eventName;
binding.action = fn;
var bindingList = this.registeredBindings[eventName];
if(bindingList == null) {
bindingList = [];
this.registeredBindings[eventName] = bindingList;
}
bindingList[bindingList.length] = binding;
};
obj.unbind = function(eventName) {
if(eventName.indexOf('.') >= 0) {
this.registeredBindings[eventName] = null;
} else {
var event = eventName.split('.')[0];
for(var bindingKey in this.registeredBindings) {
if(bindingKey.split('.')[0] == event) {
this.registeredBindings[bindingKey] = null;
}
}
}
};
obj.triggerEvent = function(eventName, arg) {
for(var bindingKey in this.registeredBindings) {
if(bindingKey.split('.')[0] == eventName) {
var bindings = this.registeredBindings[bindingKey];
for(var i = 0; i < bindings.length; i++) {
if(arg == null) {
bindings[i].action();
} else {
bindings[i].action(arg);
}
}
}
}
};
};
$axure.utils.loadCSS = function(url) {
$('head').append('');
};
$axure.utils.loadJS = function(url) {
$('head').append('');
};
$axure.utils.curry = function(fn) {
var curriedArgs = Array.prototype.slice.call(arguments, [1]);
return function() {
fn.apply(this, curriedArgs.concat(Array.prototype.slice.call(arguments)));
};
};
$axure.utils.succeeded = function(result) {
return result && result.success;
};
$axure.utils.createUniqueTag = function() {
return Math.random().toString().substring(2) +
Math.random().toString().substring(2) +
Math.random().toString().substring(2) +
Math.random().toString().substring(2);
};
$axure.utils.formatDate = function(date) {
var months = [
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var hours = date.getHours();
var amPm = (hours > 11 ? 'PM' : 'AM');
hours = hours % 12;
if(hours == '0') hours = '12';
var minutes = date.getMinutes() + '';
if(minutes.length == 1) {
minutes = '0' + minutes;
}
return [
months[date.getMonth()], ' ', date.getDate(), ' ', date.getFullYear(), ' ',
hours, ':', minutes, ' ', amPm].join('');
};
$axure.utils.quickObject = function() {
var returnVal = {};
for(var i = 0; i < arguments.length; i += 2) {
returnVal[arguments[i]] = arguments[i + 1];
}
return returnVal;
};
var matrixBase = {
mul: function(val) {
if(val.x !== undefined) {
return $axure.utils.Vector2D(
this.m11 * val.x + this.m12 * val.y + this.tx,
this.m21 * val.x + this.m22 * val.y + this.ty);
} else if(val.m11) {
return $axure.utils.Matrix2D(
this.m11 * val.m11 + this.m12 * val.m21,
this.m11 * val.m12 + this.m12 * val.m22,
this.m21 * val.m11 + this.m22 * val.m21,
this.m21 * val.m12 + this.m22 * val.m22,
val.tx + this.tx * val.m11 + this.ty * val.m21,
val.ty + this.tx * val.m12 + this.ty * val.m22
);
} else if(Number(val)) {
var num = Number(val);
return $axure.utils.Matrix2D(this.m11 * num, this.m12 * num,
this.m21 * num, this.m22 * num,
this.tx * num, this.ty * num);
} else return undefined;
},
rotate: function(angle) {
var angleRad = angle * Math.PI / 180;
var c = Math.cos(angleRad);
var s = Math.sin(angleRad);
return this.mul($axure.utils.Matrix2D(c, -s, s, c));
},
translate: function(tx, ty) {
return this.mul($axure.utils.Matrix2D(1, 0, 0, 1, tx, ty));
}
};
$axure.utils.Matrix2D = function(m11, m12, m21, m22, tx, ty) {
return $.extend({
m11: m11 || 0,
m12: m12 || 0,
m21: m21 || 0,
m22: m22 || 0,
tx: tx || 0,
ty: ty || 0
}, matrixBase);
};
$axure.utils.Vector2D = function(x, y) {
return { x: x || 0, y: y || 0 };
};
$axure.utils.Matrix2D.identity = function() {
return $axure.utils.Matrix2D(1, 0, 0, 1, 0, 0);
};
$axure.utils.fixPng = function(png) {
if(!(/MSIE ((5\.5)|6)/.test(navigator.userAgent) && navigator.platform == "Win32")) return;
var src = png.src;
if(!png.style.width) { png.style.width = $(png).width(); }
if(!png.style.height) { png.style.height = $(png).height(); }
png.onload = function() { };
png.src = $axure.utils.getTransparentGifPath();
png.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
};
})();
// TODO: [mas] simplify this
if(window.$axure && window.$axure.internal) {
$axure.internal(function($ax) { $ax.utils = $axure.utils; });
}
// Its too much of a pain to escape everything and use regular expresions, just replace manually
(function () {
var original = String.prototype.replace;
// TODO: maybe use flags or object instead to pass options in
String.prototype.replace = function (search, newVal, replaceFirst, ignoreCase) {
// Use original is some cases
if (search instanceof RegExp) return original.apply(this, arguments);
search = String(search);
var searchCompare = ignoreCase ? this.toLowerCase() : this;
if (ignoreCase) search = search.toLowerCase();
var searchLength = search.length;
var thisLength = this.length;
var index = 0;
var retVal = '';
while (index != -1) {
var nextIndex = searchCompare.indexOf(search, index);
if (nextIndex != -1) {
retVal += this.substring(index, nextIndex) + newVal;
index = nextIndex + searchLength;
if (index >= thisLength) index = -1;
} else {
retVal += this.substring(index);
index = -1;
}
if (replaceFirst) break;
}
return retVal;
};
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (elt /*, from*/) {
var len = this.length >>> 0;
var from = trunc(Number(arguments[1]) || 0);
if(from < 0) from += len;
for(; from < len; from++) {
if(from in this && this[from] === elt) return from;
}
return -1;
};
}
var trunc = function(num) {
return num < 0 ? Math.ceil(num) : Math.floor(num);
};
})();
//***** annotation.js *****//
// ******* 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.textRotation;
//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('span[id$="_ann"]').each(function(index, value) {
var elementId = value.id.replace('_ann', '');
var annPos = $(value).position();
var left = annPos.left - NOTE_SIZE;
var top = annPos.top;
$('#' + elementId + 'Note').css('left', left).css('top', top);
});
//undo the transform reset
if(WEBKIT && rotation) {
$('#' + elementId).css('-webkit-transform', oldShapeTransform || '');
$('#' + textId).css('-webkit-transform', oldTextTransform || '');
}
};
var dialogs = {};
$ax.annotation.ToggleWorkflow = function(event, id, width, height) {
if(dialogs[id]) {
var $dialog = dialogs[id];
// reset the dialog
dialogs[id] = undefined;
if($dialog.dialog("isOpen")) {
$dialog.dialog("close");
return;
}
}
// we'll need to save the scroll position just for stupid IE which will skip otherwise
var win = $(window);
var scrollY = win.scrollTop();
var scrollX = win.scrollLeft();
var bufferH = 10;
var bufferV = 10;
var blnLeft = false;
var blnAbove = false;
var sourceTop = event.pageY - scrollY;
var sourceLeft = event.pageX - scrollX;
if(sourceLeft > width + bufferH) {
blnLeft = true;
}
if(sourceTop > height + bufferV) {
blnAbove = true;
}
var top = 0;
var left = 0;
if(blnAbove) top = sourceTop - height - 20;
else top = sourceTop + 10;
if(blnLeft) left = sourceLeft - width - 4;
else left = sourceLeft - 6;
$ax.globals.MaxZIndex = $ax.globals.MaxZIndex + 1;
if(IE_10_AND_BELOW) height += 50;
var dObj = $ax.getObjectFromElementId(id);
var ann = dObj.annotation;
var $dialog = $('
')
.appendTo('body')
.html($ax.legacy.GetAnnotationHtml(ann))
.dialog({
title: dObj.label,
width: width,
height: height,
minHeight: 150,
zIndex: $ax.globals.MaxZIndex,
position: [left, top],
dialogClass: 'dialogFix',
autoOpen: false
});
$dialog.parent().appendTo('#base');
$dialog.dialog('open');
dialogs[id] = $dialog;
// scroll ... just for IE
window.scrollTo(scrollX, scrollY);
};
$ax.annotation.InitializeAnnotations = function (query) {
if(!$ax.document.configuration.showAnnotations) return;
query.each(function(dObj, elementId) {
if(!dObj.annotation) return;
if(dObj.type == 'hyperlink') {
var parentId = $ax.GetParentIdFromLink(elementId);
var textId = $ax.GetTextPanelId(parentId);
var elementIdQuery = $('#' + elementId);
elementIdQuery.after("");
if($ax.document.configuration.useLabels) {
var label = $('#' + elementId).attr("data-label");
if(!label || label == "") label = "?";
$('#' + textId).append("" + label + "
");
} else {
$('#' + textId).append("");
}
$('#' + elementId + 'Note').click(function(e) {
$ax.annotation.ToggleWorkflow(e, elementId, 300, 200, false);
return false;
});
_updateLinkLocations(parentId);
} else {
if($ax.document.configuration.useLabels) {
var label = $('#' + elementId).attr("data-label");
if(!label || label == "") label = "?";
$('#' + elementId + "_ann").append("" + label + "
");
} else {
$('#' + elementId + "_ann").append("");
}
$('#' + elementId + 'Note').click(function(e) {
$ax.annotation.ToggleWorkflow(e, elementId, 300, 200, false);
return false;
});
}
$('#' + elementId + 'Note.annnoteimage').append("");
});
};
$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 == false) {
for(var index in dialogs) {
var $dialog = dialogs[index];
if($dialog.dialog("isOpen")) {
$dialog.dialog("close");
}
}
}
}
});
});
//adjust annotation location to a element's top right corner
$ax.annotation.adjustIconLocation = function(id) {
var ann = document.getElementById(id + "_ann");
if(ann) {
var corners = $ax.public.fn.getCornersFromComponent(id);
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 - 7) + "px";
ann.style.top = (newTopRight.y - 4) + "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';
}
}
});
//***** axQuery.std.js *****//
// ******* AxQuery Plugins ******** //
$axure.internal(function($ax) {
$ax.constants = {};
$ax.constants.TABLE_TYPE = 'table';
$ax.constants.MENU_OBJECT_TYPE = 'menuObject';
$ax.constants.MASTER_TYPE = 'master';
$ax.constants.PAGE_TYPE = 'page';
$ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE = 'referenceDiagramObject';
$ax.constants.REPEATER_TYPE = 'repeater';
$ax.constants.DYNAMIC_PANEL_TYPE = 'dynamicPanel';
$ax.constants.LAYER_TYPE = 'layer';
$ax.constants.TEXT_BOX_TYPE = 'textBox';
$ax.constants.TEXT_AREA_TYPE = 'textArea';
$ax.constants.LIST_BOX_TYPE = 'listBox';
$ax.constants.COMBO_BOX_TYPE = 'comboBox';
$ax.constants.CHECK_BOX_TYPE = 'checkbox';
$ax.constants.RADIO_BUTTON_TYPE = 'radioButton';
$ax.constants.BUTTON_TYPE = 'button'; //html button
$ax.constants.IMAGE_MAP_REGION_TYPE = 'imageMapRegion';
$ax.constants.IMAGE_BOX_TYPE = 'imageBox';
$ax.constants.VECTOR_SHAPE_TYPE = 'vectorShape';
$ax.constants.SNAPSHOT_TYPE = 'screenshot';
$ax.constants.TREE_NODE_OBJECT_TYPE = 'treeNodeObject';
$ax.constants.TABLE_CELL_TYPE = 'tableCell';
$ax.constants.VERTICAL_LINE_TYPE = 'verticalLine';
$ax.constants.HORIZONTAL_LINE_TYPE = 'horizontalLine';
$ax.constants.INLINE_FRAME_TYPE = 'inlineFrame';
$ax.constants.CONNECTOR_TYPE = 'connector';
$ax.constants.ALL_TYPE = '*';
$ax.constants.TEXT_TYPE = 'richTextPanel';
$ax.constants.LINK_TYPE = 'hyperlink';
// TODO: Need solid passo f this. Constants should be able to bemade local, may need some public lists or something.
// public.fn function should take not arg and use this. May need some $ax.IsType fuctions that will take a type arg and be static
$ax.public.fn.IsTable = function (type) { return type == $ax.constants.TABLE_TYPE; }
$ax.public.fn.IsMenuObject = function (type) { return type == $ax.constants.MENU_OBJECT_TYPE; }
$ax.public.fn.IsMaster = function (type) { return type == $ax.constants.MASTER_TYPE; }
$ax.public.fn.IsPage = function (type) { return type == $ax.constants.PAGE_TYPE; }
$ax.public.fn.IsReferenceDiagramObject = function (type) { return type == $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE; }
$ax.public.fn.IsRepeater = function (type) { return type == $ax.constants.REPEATER_TYPE; }
$ax.public.fn.IsDynamicPanel = $ax.IsDynamicPanel = function (type) { return type == $ax.constants.DYNAMIC_PANEL_TYPE; }
$ax.public.fn.IsLayer = $ax.IsLayer = function (type) { return type == $ax.constants.LAYER_TYPE; }
$ax.public.fn.IsTextBox = function (type) { return type == $ax.constants.TEXT_BOX_TYPE; }
$ax.public.fn.IsTextArea = function (type) { return type == $ax.constants.TEXT_AREA_TYPE; }
$ax.public.fn.IsListBox = function (type) { return type == $ax.constants.LIST_BOX_TYPE; }
$ax.public.fn.IsComboBox = function (type) { return type == $ax.constants.COMBO_BOX_TYPE; }
$ax.public.fn.IsCheckBox = function (type) { return type == $ax.constants.CHECK_BOX_TYPE; }
$ax.public.fn.IsRadioButton = function (type) { return type == $ax.constants.RADIO_BUTTON_TYPE; }
$ax.public.fn.IsButton = function (type) { return type == $ax.constants.BUTTON_TYPE; }
$ax.public.fn.IsIamgeMapRegion = function (type) { return type == $ax.constants.IMAGE_MAP_REGION_TYPE; }
$ax.public.fn.IsImageBox = function (type) { return type == $ax.constants.IMAGE_BOX_TYPE; }
$ax.public.fn.IsVector = function (type) { return type == $ax.constants.VECTOR_SHAPE_TYPE; }
$ax.public.fn.IsSnapshot = function (type) { return type == $ax.constants.SNAPSHOT_TYPE; }
$ax.public.fn.IsTreeNodeObject = function (type) { return type == $ax.constants.TREE_NODE_OBJECT_TYPE; }
$ax.public.fn.IsTableCell = function (type) { return type == $ax.constants.TABLE_CELL_TYPE; }
$ax.public.fn.IsInlineFrame = function (type) { return type == $ax.constants.INLINE_FRAME_TYPE; }
$ax.public.fn.IsConnector = function (type) { return type == $ax.constants.CONNECTOR_TYPE; }
$ax.public.fn.IsContainer = function (type) { return type== $ax.constants.VECTOR_SHAPE_TYPE || type == $ax.constants.TABLE_TYPE || type == $ax.constants.MENU_OBJECT_TYPE || type == $ax.constants.TREE_NODE_OBJECT_TYPE; }
var PLAIN_TEXT_TYPES = [$ax.constants.TEXT_BOX_TYPE, $ax.constants.TEXT_AREA_TYPE, $ax.constants.LIST_BOX_TYPE,
$ax.constants.COMBO_BOX_TYPE, $ax.constants.CHECK_BOX_TYPE, $ax.constants.RADIO_BUTTON_TYPE, $ax.constants.BUTTON_TYPE];
$ax.public.fn.IsResizable = function (type) { return $.inArray(type, RESIZABLE_TYPES) !== -1; }
var RESIZABLE_TYPES = [
$ax.constants.BUTTON_TYPE, $ax.constants.DYNAMIC_PANEL_TYPE, $ax.constants.IMAGE_BOX_TYPE, $ax.constants.IMAGE_MAP_REGION_TYPE,
$ax.constants.INLINE_FRAME_TYPE, $ax.constants.LAYER_TYPE, $ax.constants.LIST_BOX_TYPE, $ax.constants.COMBO_BOX_TYPE,
$ax.constants.VECTOR_SHAPE_TYPE, $ax.constants.TEXT_AREA_TYPE, $ax.constants.TEXT_BOX_TYPE, $ax.constants.SNAPSHOT_TYPE
];
$ax.public.fn.SupportsRichText = function() {
var obj = $obj(this.getElementIds()[0]);
// Catch root tree nodes as they are not supported.
if(obj.type == $ax.constants.TREE_NODE_OBJECT_TYPE) return obj.friendlyType == 'Tree Node';
// Do the same for tree node icons maybe?
return $.inArray(obj.type, SUPPORTS_RICH_TEXT_TYPES) != -1;
}
var SUPPORTS_RICH_TEXT_TYPES = [$ax.constants.CHECK_BOX_TYPE, $ax.constants.RADIO_BUTTON_TYPE,
$ax.constants.IMAGE_BOX_TYPE, $ax.constants.VECTOR_SHAPE_TYPE, $ax.constants.TABLE_CELL_TYPE, $ax.constants.CONNECTOR_TYPE];
var _addJQueryFunction = function(name) {
$ax.public.fn[name] = function() {
var val = $.fn[name].apply(this.jQuery(), arguments);
return arguments[0] ? this : val;
};
};
var _jQueryFunctionsToAdd = ['text', 'val', 'css'];
for (var jqueryFunctionIndex = 0; jqueryFunctionIndex < _jQueryFunctionsToAdd.length; jqueryFunctionIndex++) _addJQueryFunction(_jQueryFunctionsToAdd[jqueryFunctionIndex]);
// var _addJQueryEventFunction = function(name) {
// $ax.public.fn[name] = function() {
// $.fn[name].apply(this.jQuery(), arguments);
// return this;
// };
// };
// var _addJQueryEventFunction = function(name) {
// $ax.public.fn[name] = (function(nn) {
// return function() {
// $.fn[nn].apply(this.jQuery(), arguments);
// return this;
// };
// })(name);
// };
var _addJQueryEventFunction = function(name) {
$ax.public.fn[name] = function() {
//With Martin - No idea why this is necessary. We tried encapsulating the function thinking it was related to closure (above),
//but that didn't fix the problem. If we don't add this Repeaters will give "Uncaught TypeError: Object #