123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814 |
- $axure.internal(function($ax) {
- var _actionHandlers = {};
- var _action = $ax.action = {};
- var animationQueue = {};
- var getAnimation = function(id) {
- return animationQueue[id] && animationQueue[id][0];
- };
- var _addAnimation = _action.addAnimation = function(id, func) {
- var wasEmpty = !getAnimation(id);
- // Add the func to the queue. Create the queue if necessary.
- var queue = animationQueue[id];
- if(!queue) {
- animationQueue[id] = queue = [];
- }
- queue[queue.length] = func;
- // If it was empty, there isn't a callback waiting to be called on this. You have to fire it manually.
- if(wasEmpty) func();
- };
- var _fireAnimationFromQueue = _action.fireAnimationFromQueue = function(id) {
- // Remove the function that was just fired
- if(animationQueue[id]) $ax.splice(animationQueue[id], 0, 1);
- // Fire the next func if there is one
- var func = getAnimation(id);
- if(func) func();
- };
- var _refreshing;
- _action.refreshStart = function(repeaterId) { _refreshing = repeaterId; };
- _action.refreshEnd = function() { _refreshing = undefined; };
- var _repeatersToRefeash = _action.repeatersToRefresh = [];
- var _ignoreAction = function(repeaterId) {
- return _refreshing == repeaterId;
- };
- var _addRefresh = function(repeaterId) {
- if(_repeatersToRefeash.indexOf(repeaterId) == -1) _repeatersToRefeash.push(repeaterId);
- };
- var _dispatchAction = $ax.action.dispatchAction = function(eventInfo, actions, currentIndex) {
- currentIndex = currentIndex || 0;
- //If no actions, you can bubble
- if(currentIndex >= actions.length) return;
- //actions are responsible for doing their own dispatching
- _actionHandlers[actions[currentIndex].action](eventInfo, actions, currentIndex);
- };
- _actionHandlers.wait = function(eventInfo, actions, index) {
- var action = actions[index];
- var infoCopy = $ax.eventCopy(eventInfo);
- window.setTimeout(function() {
- _dispatchAction(infoCopy, actions, index + 1);
- }, action.waitTime);
- };
- _actionHandlers.expr = function(eventInfo, actions, index) {
- var action = actions[index];
- $ax.expr.evaluateExpr(action.expr, eventInfo); //this should be a block
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.setFunction = _actionHandlers.expr;
- _actionHandlers.linkWindow = function(eventInfo, actions, index) {
- linkActionHelper(eventInfo, actions, index);
- };
- _actionHandlers.closeCurrent = function(eventInfo, actions, index) {
- $ax.closeWindow();
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.linkFrame = function(eventInfo, actions, index) {
- linkActionHelper(eventInfo, actions, index);
- };
- var linkActionHelper = function(eventInfo, actions, index) {
- var action = actions[index];
- eventInfo.link = true;
- if(action.linkType != 'frame') {
- var includeVars = _includeVars(action.target, eventInfo);
- if(action.target.targetType == "reloadPage") {
- $ax.reload(action.target.includeVariables);
- } else if(action.target.targetType == "backUrl") {
- $ax.back();
- }
- var url = action.target.url;
- if(!url && action.target.urlLiteral) {
- url = $ax.expr.evaluateExpr(action.target.urlLiteral, eventInfo, true);
- }
- if(url) {
- if(action.linkType == "popup") {
- $ax.navigate({
- url: url,
- target: action.linkType,
- includeVariables: includeVars,
- popupOptions: action.popup
- });
- } else {
- $ax.navigate({
- url: url,
- target: action.linkType,
- includeVariables: includeVars
- });
- }
- }
- } else linkFrame(eventInfo, action);
- eventInfo.link = false;
- _dispatchAction(eventInfo, actions, index + 1);
- };
- var _includeVars = function(target, eventInfo) {
- if(target.includeVariables) return true;
- // If it is a url literal, that is a string literal, that has only 1 sto, that is an item that is a page, include vars.
- if(target.urlLiteral) {
- var literal = target.urlLiteral;
- var sto = literal.stos[0];
- if(literal.exprType == 'stringLiteral' && literal.value.indexOf('[[') == 0 && literal.value.indexOf(']]' == literal.value.length - 2) && literal.stos.length == 1 && sto.sto == 'item' && eventInfo.item) {
- var data = $ax.repeater.getData(eventInfo.item.repeater.elementId, eventInfo.item.index, sto.name, 'data');
- if(data && data.type == 'page') return true;
- }
- }
- return false;
- };
- var linkFrame = function(eventInfo, action) {
- for(var i = 0; i < action.framesToTargets.length; i++) {
- var framePath = action.framesToTargets[i].framePath;
- var target = action.framesToTargets[i].target;
- var includeVars = _includeVars(target, eventInfo);
- var url = target.url;
- if(!url && target.urlLiteral) {
- url = $ax.expr.evaluateExpr(target.urlLiteral, eventInfo, true);
- }
- $ax('#' + $ax.getElementIdsFromPath(framePath, eventInfo)[0]).openLink(url, includeVars);
- }
- };
- var _repeatPanelMap = {};
- _actionHandlers.setPanelState = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.panelsToStates.length; i++) {
- var panelToState = action.panelsToStates[i];
- var stateInfo = panelToState.stateInfo;
- var elementIds = $ax.getElementIdsFromPath(panelToState.panelPath, eventInfo);
- for(var j = 0; j < elementIds.length; j++) {
- var elementId = elementIds[j];
- // Need new scope for elementId and info
- (function(elementId, stateInfo) {
- _addAnimation(elementId, function() {
- var stateNumber = stateInfo.stateNumber;
- if(stateInfo.setStateType == "value") {
- var oldTarget = eventInfo.targetElement;
- eventInfo.targetElement = elementId;
- var stateName = $ax.expr.evaluateExpr(stateInfo.stateValue, eventInfo);
- eventInfo.targetElement = oldTarget;
- stateNumber = Number(stateName);
- var panelCount = $('#' + elementId).children().length;
- // If not number, or too low or high, try to get it as a name rather than id
- if(isNaN(stateNumber) || stateNumber <= 0 || stateNumber > panelCount) {
- var states = $ax.getObjectFromElementId(elementId).diagrams;
- var stateNameFound = false;
- for(var k = 0; k < states.length; k++) {
- if(states[k].label == stateName) {
- stateNumber = k + 1;
- stateNameFound = true;
- }
- }
- // Wasn't a state number, or a state name, so return
- if(!stateNameFound) {
- return $ax.action.fireAnimationFromQueue(elementId);
- }
- }
- } else if(stateInfo.setStateType == 'next' || stateInfo.setStateType == 'previous') {
- var info = $ax.deepCopy(stateInfo);
- var repeat = info.repeat;
- // Only map it, if repeat exists.
- if(typeof (repeat) == 'number') _repeatPanelMap[elementId] = info;
- return _progessPanelState(elementId, info);
- }
- delete _repeatPanelMap[elementId];
- // If setting to current (to stop repeat) break here
- if(stateInfo.setStateType == 'current') return $ax.action.fireAnimationFromQueue(elementId);
- $ax('#' + elementId).SetPanelState(stateNumber, stateInfo.options, stateInfo.showWhenSet);
- });
- })(elementId, stateInfo);
- }
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- var _progessPanelState = function(id, info) {
- var direction = info.setStateType;
- var loop = info.loop;
- var repeat = info.repeat;
- var options = info.options;
- var hasRepeat = typeof (repeat) == 'number';
- var currentStateId = $ax.visibility.GetPanelState(id);
- var stateNumber = '';
- if(currentStateId != '') {
- currentStateId = $ax.repeater.getScriptIdFromElementId(currentStateId);
- var currentStateNumber = Number(currentStateId.substr(currentStateId.indexOf('state') + 5));
- if(direction == "next") {
- stateNumber = currentStateNumber + 2;
- if(stateNumber > $('#' + id).children().length) {
- if(loop) stateNumber = 1;
- else {
- delete _repeatPanelMap[id];
- return $ax.action.fireAnimationFromQueue(id);
- }
- }
- } else if(direction == "previous") {
- stateNumber = currentStateNumber;
- if(stateNumber <= 0) {
- if(loop) stateNumber = $('#' + id).children().length;
- else {
- delete _repeatPanelMap[id];
- return $ax.action.fireAnimationFromQueue(id);
- }
- }
- }
- $ax('#' + id).SetPanelState(stateNumber, options, info.showWhenSet);
- if(hasRepeat) {
- var animate = options && options.animateIn;
- if(animate && animate.easing && animate.easing != 'none' && animate.duration > repeat) repeat = animate.duration;
- animate = options && options.animateOut;
- if(animate && animate.easing && animate.easing != 'none' && animate.duration > repeat) repeat = animate.duration;
- window.setTimeout(function() {
- // Either new repeat, or no repeat anymore.
- if(_repeatPanelMap[id] != info) return;
- _addAnimation(id, function() {
- _progessPanelState(id, info);
- });
- }, repeat);
- } else delete _repeatPanelMap[id];
- }
- };
- _actionHandlers.fadeWidget = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.objectsToFades.length; i++) {
- var fadeInfo = action.objectsToFades[i].fadeInfo;
- var elementIds = $ax.getElementIdsFromPath(action.objectsToFades[i].objectPath, eventInfo);
- for(var j = 0; j < elementIds.length; j++) {
- var elementId = elementIds[j];
- // Need new scope for elementId and info
- (function(elementId, fadeInfo) {
- _addAnimation(elementId, function() {
- if(fadeInfo.fadeType == "hide") {
- $ax('#' + elementId).hide(fadeInfo.options);
- } else if(fadeInfo.fadeType == "show") {
- $ax('#' + elementId).show(fadeInfo.options, eventInfo);
- } else if(fadeInfo.fadeType == "toggle") {
- $ax('#' + elementId).toggleVisibility(fadeInfo.options);
- }
- });
- })(elementId, fadeInfo);
- }
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.moveWidget = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.objectsToMoves.length; i++) {
- var moveInfo = action.objectsToMoves[i].moveInfo;
- var elementIds = $ax.getElementIdsFromPath(action.objectsToMoves[i].objectPath, eventInfo);
- for(var j = 0; j < elementIds.length; j++) {
- var elementId = elementIds[j];
- // Need new scope for elementId and info
- (function(elementId, moveInfo) {
- var oldTarget = eventInfo.targetElement;
- eventInfo.targetElement = elementId;
- var xValue = $ax.expr.evaluateExpr(moveInfo.xValue, eventInfo);
- var yValue = $ax.expr.evaluateExpr(moveInfo.yValue, eventInfo);
- eventInfo.targetElement = oldTarget;
- var widgetDragInfo = eventInfo.dragInfo;
- _addAnimation(elementId, function() {
- if(moveInfo.moveType == "location") {
- $ax('#' + elementId).moveTo(xValue, yValue, moveInfo.options);
- } else if(moveInfo.moveType == "delta") {
- $ax('#' + elementId).moveBy(xValue, yValue, moveInfo.options);
- } else if(moveInfo.moveType == "drag") {
- $ax('#' + elementId).moveBy(widgetDragInfo.xDelta, widgetDragInfo.yDelta, moveInfo.options);
- } else if(moveInfo.moveType == "dragX") {
- $ax('#' + elementId).moveBy(widgetDragInfo.xDelta, 0, moveInfo.options);
- } else if(moveInfo.moveType == "dragY") {
- $ax('#' + elementId).moveBy(0, widgetDragInfo.yDelta, moveInfo.options);
- } else if(moveInfo.moveType == "locationBeforeDrag") {
- var loc = widgetDragInfo.movedWidgets[elementId];
- if(loc) $ax('#' + elementId).moveTo(loc.x, loc.y, moveInfo.options);
- else _fireAnimationFromQueue(elementId);
- } else if(moveInfo.moveType == "withThis") {
- var widgetMoveInfo = $ax.move.GetWidgetMoveInfo();
- var srcElementId = $ax.getElementIdsFromEventAndScriptId(eventInfo, eventInfo.srcElement)[0];
- var delta = widgetMoveInfo[srcElementId];
- $ax('#' + elementId).moveBy(delta.x, delta.y, delta.options);
- }
- });
- })(elementId, moveInfo);
- }
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.setWidgetSize = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.objectsToResize.length; i++) {
- var resizeInfo = action.objectsToResize[i].sizeInfo;
- var elementIds = $ax.getElementIdsFromPath(action.objectsToResize[i].objectPath, eventInfo);
- for(var j = 0; j < elementIds.length; j++) {
- var elementId = elementIds[j];
- // Need new scope for elementId and info
- (function(elementId, resizeInfo) {
- var oldTarget = eventInfo.targetElement;
- eventInfo.targetElement = elementId;
- var width = $ax.expr.evaluateExpr(resizeInfo.width, eventInfo);
- var height = $ax.expr.evaluateExpr(resizeInfo.height, eventInfo);
- eventInfo.targetElement = oldTarget;
- // TODO:[bf] Does this merit it's own file? Is there another file it should be refactored out to? Just refactored out to another function?
- _addAnimation(elementId, function() {
- var query = $jobj(elementId);
- // Get the current width and height
- var oldWidth = query.css('width');
- oldWidth = Number(oldWidth && oldWidth.substring(0, oldWidth.length - 2));
- var oldHeight = query.css('height');
- oldHeight = Number(oldHeight && oldHeight.substring(0, oldHeight.length - 2));
- // If either one is not a number, use the old value
- width = width != "" ? Number(width) : oldWidth;
- height = height != "" ? Number(height) : oldHeight;
- width = isNaN(width) ? oldWidth : width;
- height = isNaN(height) ? oldHeight : height;
- // can't be negative
- width = Math.max(width, 0);
- height = Math.max(height, 0);
- if(height == oldHeight && width == oldWidth) {
- _fireAnimationFromQueue(elementId);
- return;
- }
- var css = { width: width, height: height };
- var obj = $obj(elementId);
- if(obj.percentWidth) css = { height: height };
- // No longer fitToContent, calculate additional styling that needs to be done.
- $ax.dynamicPanelManager.setFitToContentCss(elementId, false, oldWidth, oldHeight);
- var easing = resizeInfo.easing || 'none';
- var duration = resizeInfo.duration || 0;
- var stateCss = $ax.deepCopy(css);
- // This will move panel if fixed. The callback will make sure resizing ends there.
- if((obj.fixedHorizontal && obj.fixedHorizontal == 'center') || (obj.fixedVertical && obj.fixedVertical == 'middle')) {
- var loc = $ax.dynamicPanelManager.getFixedPosition(elementId, oldWidth, oldHeight, width, height);
- if(loc) {
- if(loc[0] != 0 && !$ax.dynamicPanelManager.isPercentWidthPanel(obj)) css['margin-left'] = '+=' + loc[0];
- if(loc[1] != 0) css['margin-top'] = '+=' + loc[1];
- }
- }
- var onComplete = function() {
- $ax.flyoutManager.updateFlyout(elementId);
- $ax.dynamicPanelManager.fitParentPanel(elementId);
- $ax.dynamicPanelManager.updatePanelPercentWidth(elementId);
- $ax.dynamicPanelManager.updatePanelContentPercentWidth(elementId);
- $ax.event.raiseSyntheticEvent(elementId, 'onResize');
- _fireAnimationFromQueue(elementId);
- };
- // This does the resize animation. Moving is handled elsewhere.
- if(easing == 'none') {
- query.animate(css, 0);
- query.children().animate(css, 0);
- onComplete();
- } else {
- query.children().animate(stateCss, duration, easing);
- query.animate(css, duration, easing, onComplete);
- }
- });
- })(elementId, resizeInfo);
- }
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.setPanelOrder = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.panelPaths.length; i++) {
- var func = action.panelPaths[i].setOrderInfo.bringToFront ? 'bringToFront' : 'sendToBack';
- var elementIds = $ax.getElementIdsFromPath(action.panelPaths[i].panelPath, eventInfo);
- for(var j = 0; j < elementIds.length; j++) $ax('#' + elementIds[j])[func]();
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.modifyDataSetEditItems = function(eventInfo, actions, index) {
- var action = actions[index];
- var add = action.repeatersToAddTo;
- var repeaters = add || action.repeatersToRemoveFrom;
- var itemId;
- for(var i = 0; i < repeaters.length; i++) {
- var data = repeaters[i];
- // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters
- var id = $ax.getElementIdsFromPath(data.path, eventInfo)[0];
- if(data.addType == 'this') {
- var scriptId = $ax.repeater.getScriptIdFromElementId(eventInfo.srcElement);
- itemId = $ax.repeater.getItemIdFromElementId(eventInfo.srcElement);
- var repeaterId = $ax.getParentRepeaterFromScriptId(scriptId);
- if(add) $ax.repeater.addEditItems(repeaterId, [itemId]);
- else $ax.repeater.removeEditItems(repeaterId, [itemId]);
- } else if(data.addType == 'all') {
- var allItems = $ax.repeater.getAllItemIds(id);
- if(add) $ax.repeater.addEditItems(id, allItems);
- else $ax.repeater.removeEditItems(id, allItems);
- } else {
- var oldTarget = eventInfo.targetElement;
- var itemIds = $ax.repeater.getAllItemIds(id);
- var itemIdsToAdd = [];
- for(var j = 0; j < itemIds.length; j++) {
- itemId = itemIds[j];
- eventInfo.targetElement = $ax.repeater.createElementId(id, itemId);
- if($ax.expr.evaluateExpr(data.query, eventInfo) == "true") {
- itemIdsToAdd[itemIdsToAdd.length] = String(itemId);
- }
- eventInfo.targetElement = oldTarget;
- }
- if(add) $ax.repeater.addEditItems(id, itemIdsToAdd);
- else $ax.repeater.removeEditItems(id, itemIdsToAdd);
- }
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _action.repeaterInfoNames = { addItemsToDataSet: 'dataSetsToAddTo', deleteItemsFromDataSet: 'dataSetItemsToRemove', updateItemsInDataSet: 'dataSetsToUpdate',
- addFilterToRepeater: 'repeatersToAddFilter', removeFilterFromRepeater: 'repeatersToRemoveFilter',
- addSortToRepeater: 'repeaterToAddSort', removeSortFromRepeater: 'repeaterToRemoveSort',
- setRepeaterToPage: 'repeatersToSetPage', setItemsPerRepeaterPage: 'repeatersToSetItemCount'
- };
- _actionHandlers.addItemsToDataSet = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.dataSetsToAddTo.length; i++) {
- var datasetInfo = action.dataSetsToAddTo[i];
- // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters
- var id = $ax.getElementIdsFromPath(datasetInfo.path, eventInfo)[0];
- if(_ignoreAction(id)) continue;
- var dataset = datasetInfo.data;
- for(var j = 0; j < dataset.length; j++) $ax.repeater.addItem(id, $ax.deepCopy(dataset[j]), eventInfo);
- if(dataset.length) _addRefresh(id);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.deleteItemsFromDataSet = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.dataSetItemsToRemove.length; i++) {
- // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters
- var deleteInfo = action.dataSetItemsToRemove[i];
- var id = $ax.getElementIdsFromPath(deleteInfo.path, eventInfo)[0];
- if(_ignoreAction(id)) continue;
- $ax.repeater.deleteItems(id, eventInfo, deleteInfo.type, deleteInfo.rule);
- _addRefresh(id);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.updateItemsInDataSet = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.dataSetsToUpdate.length; i++) {
- var dataSet = action.dataSetsToUpdate[i];
- // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters
- var id = $ax.getElementIdsFromPath(dataSet.path, eventInfo)[0];
- if(_ignoreAction(id)) continue;
- $ax.repeater.updateEditItems(id, dataSet.props, eventInfo, dataSet.type, dataSet.rule);
- _addRefresh(id);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.setRepeaterToDataSet = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.repeatersToSet.length; i++) {
- var setRepeaterInfo = action.repeatersToSet[i];
- // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters
- var id = $ax.getElementIdsFromPath(setRepeaterInfo.path, eventInfo)[0];
- $ax.repeater.setDataSet(id, setRepeaterInfo.localDataSetId);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.addFilterToRepeater = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.repeatersToAddFilter.length; i++) {
- var addFilterInfo = action.repeatersToAddFilter[i];
- // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters
- var id = $ax.getElementIdsFromPath(addFilterInfo.path, eventInfo)[0];
- if(_ignoreAction(id)) continue;
- $ax.repeater.addFilter(id, addFilterInfo.label, addFilterInfo.filter, eventInfo.srcElement);
- _addRefresh(id);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.removeFilterFromRepeater = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.repeatersToRemoveFilter.length; i++) {
- var removeFilterInfo = action.repeatersToRemoveFilter[i];
- // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters
- var id = $ax.getElementIdsFromPath(removeFilterInfo.path, eventInfo)[0];
- if(_ignoreAction(id)) continue;
- if(removeFilterInfo.removeAll) $ax.repeater.removeFilter(id);
- else if(removeFilterInfo.filterName != '') {
- $ax.repeater.removeFilter(id, removeFilterInfo.filterName);
- }
- _addRefresh(id);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.addSortToRepeater = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.repeatersToAddSort.length; i++) {
- var addSortInfo = action.repeatersToAddSort[i];
- // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters
- var id = $ax.getElementIdsFromPath(addSortInfo.path, eventInfo)[0];
- if(_ignoreAction(id)) continue;
- $ax.repeater.addSort(id, addSortInfo.label, addSortInfo.columnName, addSortInfo.ascending, addSortInfo.toggle, addSortInfo.sortType);
- _addRefresh(id);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.removeSortFromRepeater = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.repeatersToRemoveSort.length; i++) {
- var removeSortInfo = action.repeatersToRemoveSort[i];
- // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters
- var id = $ax.getElementIdsFromPath(removeSortInfo.path, eventInfo)[0];
- if(_ignoreAction(id)) continue;
- if(removeSortInfo.removeAll) $ax.repeater.removeSort(id);
- else if(removeSortInfo.sortName != '') $ax.repeater.removeSort(id, removeSortInfo.sortName);
- _addRefresh(id);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.setRepeaterToPage = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.repeatersToSetPage.length; i++) {
- var setPageInfo = action.repeatersToSetPage[i];
- // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters
- var id = $ax.getElementIdsFromPath(setPageInfo.path, eventInfo)[0];
- if(_ignoreAction(id)) continue;
- var oldTarget = eventInfo.targetElement;
- eventInfo.targetElement = id;
- $ax.repeater.setRepeaterToPage(id, setPageInfo.pageType, setPageInfo.pageValue, eventInfo);
- eventInfo.targetElement = oldTarget;
- _addRefresh(id);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.setItemsPerRepeaterPage = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.repeatersToSetItemCount.length; i++) {
- var setItemCountInfo = action.repeatersToSetItemCount[i];
- // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters
- var id = $ax.getElementIdsFromPath(setItemCountInfo.path, eventInfo)[0];
- if(_ignoreAction(id)) continue;
- if(setItemCountInfo.noLimit) $ax.repeater.setNoItemLimit(id);
- else $ax.repeater.setItemLimit(id, setItemCountInfo.itemCountValue, eventInfo);
- _addRefresh(id);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.refreshRepeater = function(eventInfo, actions, index) {
- // We use this as a psudo action now.
- var action = actions[index];
- for(var i = 0; i < action.repeatersToRefresh.length; i++) {
- var id = $ax.getElementIdsFromPath(action.repeatersToRefresh[i], eventInfo)[i];
- var idIndex = _repeatersToRefeash.indexOf(id);
- if(idIndex == -1) continue;
- $ax.repeater.refreshRepeater(id, eventInfo);
- $ax.splice(_repeatersToRefeash, index, 1);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.scrollToWidget = function(eventInfo, actions, index) {
- var action = actions[index];
- var elementIds = $ax.getElementIdsFromPath(action.objectPath, eventInfo);
- if(elementIds.length > 0) $ax('#' + elementIds[0]).scroll(action.options);
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.enableDisableWidgets = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.pathToInfo.length; i++) {
- var elementIds = $ax.getElementIdsFromPath(action.pathToInfo[i].objectPath, eventInfo);
- var enable = action.pathToInfo[i].enableDisableInfo.enable;
- for(var j = 0; j < elementIds.length; j++) $ax('#' + elementIds[j]).enabled(enable);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.setImage = function(eventInfo, actions, index) {
- var oldTarget = eventInfo.targetElement;
- var action = actions[index];
- var view = $ax.adaptive.currentViewId;
- eventInfo.image = true;
- for(var i = 0; i < action.imagesToSet.length; i++) {
- var imgInfo = action.imagesToSet[i];
- imgInfo = view ? imgInfo.adaptive[view] : imgInfo.base;
- var elementIds = $ax.getElementIdsFromPath(action.imagesToSet[i].objectPath, eventInfo);
- for(var j = 0; j < elementIds.length; j++) {
- var elementId = elementIds[j];
- eventInfo.targetElement = elementId;
- var evaluatedImgs = _evaluateImages(imgInfo, eventInfo);
- var img = evaluatedImgs.normal;
- if($ax.style.IsWidgetDisabled(elementId)) {
- if(imgInfo.disabled) img = evaluatedImgs.disabled;
- } else if($ax.style.IsWidgetSelected(elementId)) {
- if(imgInfo.selected) img = evaluatedImgs.selected;
- } else if($ax.event.mouseDownObjectId == elementId && imgInfo.mouseDown) img = evaluatedImgs.mouseDown;
- else if($ax.event.mouseOverIds.indexOf(elementId) != -1 && imgInfo.mouseOver) {
- img = evaluatedImgs.mouseOver;
- //Update mouseOverObjectId
- var currIndex = $ax.event.mouseOverIds.indexOf($ax.event.mouseOverObjectId);
- var imgIndex = $ax.event.mouseOverIds.indexOf(elementId);
- if(currIndex < imgIndex) $ax.event.mouseOverObjectId = elementId;
- }
- // $('#' + $ax.repeater.applySuffixToElementId(elementId, '_img')).attr('src', img);
- $jobj($ax.style.GetImageIdFromShape(elementId)).attr('src', img);
- //Set up overrides
- $ax.style.mapElementIdToImageOverrides(elementId, evaluatedImgs);
- $ax.style.updateElementIdImageStyle(elementId);
- }
- }
- eventInfo.targetElement = oldTarget;
- eventInfo.image = false;
- _dispatchAction(eventInfo, actions, index + 1);
- };
- var _evaluateImages = function(imgInfo, eventInfo) {
- var retVal = {};
- for(var state in imgInfo) {
- if(!imgInfo.hasOwnProperty(state)) continue;
- var img = imgInfo[state].path || $ax.expr.evaluateExpr(imgInfo[state].literal, eventInfo);
- if(!img) img = $axure.utils.getTransparentGifPath();
- retVal[state] = img;
- }
- return retVal;
- };
- $ax.clearRepeaterImageOverrides = function(repeaterId) {
- var childIds = $ax.getChildElementIdsForRepeater(repeaterId);
- for(var i = childIds; i < childIds.length; i++) $ax.style.deleteElementIdToImageOverride(childIds[i]);
- };
- _actionHandlers.setFocusOnWidget = function(eventInfo, actions, index) {
- var action = actions[index];
- if(action.objectPaths.length > 0) {
- var elementIds = $ax.getElementIdsFromPath(action.objectPaths[0], eventInfo);
- if(elementIds.length > 0) {
- $ax('#' + elementIds[0]).focus();
- }
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.expandCollapseTree = function(eventInfo, actions, index) {
- var action = actions[index];
- for(var i = 0; i < action.pathToInfo.length; i++) {
- var pair = action.pathToInfo[i];
- var elementIds = $ax.getElementIdsFromPath(pair.treeNodePath, eventInfo);
- for(var j = 0; j < elementIds.length; j++) $ax('#' + elementIds[j]).expanded(pair.expandCollapseInfo.expand);
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.other = function(eventInfo, actions, index) {
- var action = actions[index];
- $ax.navigate({
- url: $axure.utils.getOtherPath() + "#other=" + encodeURI(action.otherDescription),
- target: "popup",
- includeVariables: false,
- popupOptions: action.popup
- });
- _dispatchAction(eventInfo, actions, index + 1);
- };
- _actionHandlers.raiseEvent = function(eventInfo, actions, index) {
- var action = actions[index];
- //look for the nearest element id
- if(eventInfo.srcElement) {
- var objId = eventInfo.srcElement;
- var obj = $ax.getObjectFromElementId(objId);
- var rdoId = $ax.getRdoParentFromElementId(objId);
- var rdo = $ax.getObjectFromElementId(rdoId);
- // Check if rdo should be this
- var oldIsMasterEvent = eventInfo.isMasterEvent;
- if(obj.type == 'referenceDiagramObject' && eventInfo.isMasterEvent) {
- rdoId = objId;
- rdo = obj;
- // It is now an rdo event
- eventInfo.isMasterEvent = false;
- }
- for(var i = 0; i < action.raisedEvents.length; i++) {
- var raisedEvent = action.raisedEvents[i];
- var oldRaisedId = eventInfo.raisedId;
- var event = rdo.interactionMap && rdo.interactionMap && rdo.interactionMap.raised[raisedEvent];
- // raised event will optimize away if it doesn't do anything. Whole interaction map may be optimized away as well.
- if(event) {
- var oldSrc = eventInfo.srcElement;
- eventInfo.srcElement = rdoId;
- eventInfo.raisedId = rdoId;
- $ax.event.handleEvent(rdoId, eventInfo, event, false, true);
- eventInfo.raisedId = oldRaisedId;
- eventInfo.srcElement = oldSrc;
- }
- }
- eventInfo.isMasterEvent = oldIsMasterEvent;
- }
- _dispatchAction(eventInfo, actions, index + 1);
- };
- });
|