4836: side menu inline edit now properly saved after exiting edit mode.
[acontent.git] / docs / include / jscripts / infusion / framework / core / js / Fluid.js
1 var fluid_1_1=fluid_1_1||{};var fluid=fluid||fluid_1_1;(function($,fluid){fluid.version="Infusion 1.1.1";fluid.fail=function(message){fluid.setLogging(true);fluid.log(message.message?message.message:message);throw new Error(message)};fluid.wrap=function(obj){return((!obj||obj.jquery)?obj:$(obj))};fluid.unwrap=function(obj){return obj&&obj.jquery&&obj.length===1?obj[0]:obj};fluid.keyForValue=function(obj,value){for(var key in obj){if(obj[key]===value){return key}}return null};fluid.findKeyInObject=fluid.keyForValue;fluid.clear=function(target){if(target instanceof Array){target.length=0}else{for(var i in target){delete target[i]}}};fluid.container=function(containerSpec){var container=containerSpec;if(typeof containerSpec==="string"||containerSpec.nodeType&&(containerSpec.nodeType===1||containerSpec.nodeType===9)){container=$(containerSpec)}if(!container||!container.jquery||container.length!==1){if(typeof (containerSpec)!=="string"){containerSpec=container.selector}fluid.fail({name:"NotOne",message:"A single container element was not found for selector "+containerSpec})}return container};var defaultsStore={};var globalDefaultsStore={};fluid.defaults=function(){var offset=0;var store=defaultsStore;if(typeof arguments[0]==="boolean"){store=globalDefaultsStore;offset=1}var componentName=arguments[offset];var defaultsObject=arguments[offset+1];if(defaultsObject!==undefined){store[componentName]=defaultsObject;return defaultsObject}return store[componentName]};fluid.createDomBinder=function(container,selectors){var cache={},that={};function cacheKey(name,thisContainer){return $.data(fluid.unwrap(thisContainer))+"-"+name}function record(name,thisContainer,result){cache[cacheKey(name,thisContainer)]=result}that.locate=function(name,localContainer){var selector,thisContainer,togo;selector=selectors[name];thisContainer=localContainer?localContainer:container;if(!thisContainer){fluid.fail("DOM binder invoked for selector "+name+" without container")}if(!selector){return thisContainer}if(typeof (selector)==="function"){togo=$(selector.call(null,fluid.unwrap(thisContainer)))}else{togo=$(selector,thisContainer)}if(togo.get(0)===document){togo=[]}if(!togo.selector){togo.selector=selector;togo.context=thisContainer}togo.selectorName=name;record(name,thisContainer,togo);return togo};that.fastLocate=function(name,localContainer){var thisContainer=localContainer?localContainer:container;var key=cacheKey(name,thisContainer);var togo=cache[key];return togo?togo:that.locate(name,localContainer)};that.clear=function(){cache={}};that.refresh=function(names,localContainer){var thisContainer=localContainer?localContainer:container;if(typeof names==="string"){names=[names]}if(thisContainer.length===undefined){thisContainer=[thisContainer]}for(var i=0;i<names.length;++i){for(var j=0;j<thisContainer.length;++j){that.locate(names[i],thisContainer[j])}}};return that};fluid.mergeListeners=function(events,listeners){if(listeners){for(var key in listeners){var value=listeners[key];var keydot=key.indexOf(".");var namespace;if(keydot!==-1){namespace=key.substring(keydot+1);key=key.substring(0,keydot)}if(!events[key]){events[key]=fluid.event.getEventFirer()}var firer=events[key];if(typeof (value)==="function"){firer.addListener(value,namespace)}else{if(value&&typeof value.length==="number"){for(var i=0;i<value.length;++i){firer.addListener(value[i],namespace)}}}}}};fluid.instantiateFirers=function(that,options){that.events={};if(options.events){for(var event in options.events){var eventType=options.events[event];that.events[event]=fluid.event.getEventFirer(eventType==="unicast",eventType==="preventable")}}fluid.mergeListeners(that.events,options.listeners)};fluid.mergeComponentOptions=function(that,componentName,userOptions){var defaults=fluid.defaults(componentName);that.options=fluid.merge(defaults?defaults.mergePolicy:null,{},defaults,userOptions)};fluid.expectFilledSelector=function(result,message){if(result&&result.length===0&&result.jquery){fluid.fail(message+': selector "'+result.selector+'" with name '+result.selectorName+" returned no results in context "+fluid.dumpEl(result.context))}};fluid.initView=function(componentName,container,userOptions){var that={};fluid.expectFilledSelector(container,'Error instantiating component with name "'+componentName);fluid.mergeComponentOptions(that,componentName,userOptions);if(container){that.container=fluid.container(container);fluid.initDomBinder(that)}fluid.instantiateFirers(that,that.options);return that};fluid.COMPONENT_OPTIONS={};fluid.VALUE={};fluid.emptySubcomponent=function(options){var that={};options=$.makeArray(options);for(var i=0;i<options.length;++i){that[options[i]]=function(){}}return that};fluid.initSubcomponent=function(that,className,args){return fluid.initSubcomponents(that,className,args)[0]};fluid.initSubcomponents=function(that,className,args){var entry=that.options[className];if(!entry){return }var entries=$.makeArray(entry);var optindex=-1;var togo=[];args=$.makeArray(args);for(var i=0;i<args.length;++i){if(args[i]===fluid.COMPONENT_OPTIONS){optindex=i}}for(i=0;i<entries.length;++i){entry=entries[i];if(optindex!==-1&&entry.options){args[optindex]=entry.options}if(typeof (entry)!=="function"){var entryType=typeof (entry)==="string"?entry:entry.type;var globDef=fluid.defaults(true,entryType);fluid.merge("reverse",that.options,globDef);togo[i]=entryType==="fluid.emptySubcomponent"?fluid.emptySubcomponent(entry.options):fluid.invokeGlobalFunction(entryType,args,{fluid:fluid})}else{togo[i]=entry.apply(null,args)}var returnedOptions=togo[i]?togo[i].returnedOptions:null;if(returnedOptions){fluid.merge(that.options.mergePolicy,that.options,returnedOptions);if(returnedOptions.listeners){fluid.mergeListeners(that.events,returnedOptions.listeners)}}}return togo};fluid.initDomBinder=function(that){that.dom=fluid.createDomBinder(that.container,that.options.selectors);that.locate=that.dom.locate};fluid.isPrimitive=function(value){var valueType=typeof (value);return !value||valueType==="string"||valueType==="boolean"||valueType==="number"};function mergeImpl(policy,basePath,target,source){var thisPolicy=policy&&typeof (policy)!=="string"?policy[basePath]:policy;if(typeof (thisPolicy)==="function"){thisPolicy.apply(null,target,source);return target}if(thisPolicy==="replace"){fluid.clear(target)}for(var name in source){var path=(basePath?basePath+".":"")+name;var thisTarget=target[name];var thisSource=source[name];var primitiveTarget=fluid.isPrimitive(thisTarget);if(thisSource!==undefined){if(thisSource!==null&&typeof thisSource==="object"&&!thisSource.nodeType&&!thisSource.jquery&&thisSource!==fluid.VALUE){if(primitiveTarget){target[name]=thisTarget=thisSource instanceof Array?[]:{}}mergeImpl(policy,path,thisTarget,thisSource)}else{if(thisTarget===null||thisTarget===undefined||thisPolicy!=="reverse"){target[name]=thisSource}}}}return target}fluid.merge=function(policy,target){var path="";for(var i=2;i<arguments.length;++i){var source=arguments[i];if(source!==null&&source!==undefined){mergeImpl(policy,path,target,source)}}if(policy&&typeof (policy)!=="string"){for(var key in policy){var elrh=policy[key];if(typeof (elrh)==="string"&&elrh!=="replace"){var oldValue=fluid.model.getBeanValue(target,key);if(oldValue===null||oldValue===undefined){var value=fluid.model.getBeanValue(target,elrh);fluid.model.setBeanValue(target,key,value)}}}}return target};fluid.copy=function(tocopy){if(fluid.isPrimitive(tocopy)){return tocopy}return $.extend(true,typeof (tocopy.length)==="number"?[]:{},tocopy)};fluid.invokeGlobalFunction=function(functionPath,args,environment){var func=fluid.model.getBeanValue(window,functionPath,environment);if(!func){fluid.fail("Error invoking global function: "+functionPath+" could not be located")}else{return func.apply(null,args)}};fluid.event={};var fluid_guid=1;fluid.event.getEventFirer=function(unicast,preventable){var log=fluid.log;var listeners={};return{addListener:function(listener,namespace,predicate){if(!listener){return }if(unicast){namespace="unicast"}if(!namespace){if(!listener.$$guid){listener.$$guid=fluid_guid++}namespace=listener.$$guid}listeners[namespace]={listener:listener,predicate:predicate}},removeListener:function(listener){if(typeof (listener)==="string"){delete listeners[listener]}else{if(typeof (listener)==="object"&&listener.$$guid){delete listeners[listener.$$guid]}}},fire:function(){for(var i in listeners){var lisrec=listeners[i];var listener=lisrec.listener;if(lisrec.predicate&&!lisrec.predicate(listener,arguments)){continue}try{var ret=listener.apply(null,arguments);if(preventable&&ret===false){return false}}catch(e){log("FireEvent received exception "+e.message+" e "+e+" firing to listener "+i);throw (e)}}}}};fluid.model={};fluid.model.copyModel=function(target,source){fluid.clear(target);$.extend(true,target,source)};fluid.model.parseEL=function(EL){return EL.toString().split(".")};fluid.model.composePath=function(prefix,suffix){return prefix===""?suffix:prefix+"."+suffix};fluid.model.setBeanValue=function(root,EL,newValue){var segs=fluid.model.parseEL(EL);for(var i=0;i<segs.length-1;i+=1){if(!root[segs[i]]){root[segs[i]]={}}root=root[segs[i]]}root[segs[segs.length-1]]=newValue};fluid.model.getBeanValue=function(root,EL,environment){if(EL===""||EL===null||EL===undefined){return root}var segs=fluid.model.parseEL(EL);for(var i=0;i<segs.length;++i){if(!root){return root}var segment=segs[i];if(environment&&environment[segment]){root=environment[segment];environment=null}else{root=root[segment]}}return root};var logging;fluid.setLogging=function(enabled){if(typeof enabled==="boolean"){logging=enabled}else{logging=false}};fluid.log=function(str){if(logging){str=new Date().toTimeString()+":  "+str;if(typeof (console)!=="undefined"){if(console.debug){console.debug(str)}else{console.log(str)}}else{if(typeof (YAHOO)!=="undefined"){YAHOO.log(str)}else{if(typeof (opera)!=="undefined"){opera.postError(str)}}}}};fluid.dumpEl=function(element){var togo;if(!element){return"null"}if(element.nodeType===3||element.nodeType===8){return"[data: "+element.data+"]"}if(element.nodeType===9){return"[document: location "+element.location+"]"}if(!element.nodeType&&typeof element.length==="number"){togo="[";for(var i=0;i<element.length;++i){togo+=fluid.dumpEl(element[i]);if(i<element.length-1){togo+=", "}}return togo+"]"}element=$(element);togo=element.get(0).tagName;if(element.attr("id")){togo+="#"+element.attr("id")}if(element.attr("class")){togo+="."+element.attr("class")}return togo};fluid.findAncestor=function(element,test){element=fluid.unwrap(element);while(element){if(test(element)){return element}element=element.parentNode}};fluid.jById=function(id,dokkument){dokkument=dokkument&&dokkument.nodeType===9?dokkument:document;var element=fluid.byId(id,dokkument);var togo=element?$(element):[];togo.selector="#"+id;togo.context=dokkument;return togo};fluid.byId=function(id,dokkument){dokkument=dokkument&&dokkument.nodeType===9?dokkument:document;var el=dokkument.getElementById(id);if(el){if(el.getAttribute("id")!==id){fluid.fail("Problem in document structure - picked up element "+fluid.dumpEl(el)+" for id "+id+" without this id - most likely the element has a name which conflicts with this id")}return el}else{return null}};fluid.getId=function(element){return fluid.unwrap(element).getAttribute("id")};fluid.allocateSimpleId=function(element){element=fluid.unwrap(element);if(!element.id){element.id="fluid-id-"+(fluid_guid++)}return element.id};fluid.transform=function(list){var togo=[];for(var i=0;i<list.length;++i){var transit=list[i];for(var j=0;j<arguments.length-1;++j){transit=arguments[j+1](transit,i)}togo[togo.length]=transit}return togo};fluid.find=function(list,fn,deflt){for(var i=0;i<list.length;++i){var transit=fn(list[i],i);if(transit!==null&&transit!==undefined){return transit}}return deflt};fluid.accumulate=function(list,fn,arg){for(var i=0;i<list.length;++i){arg=fn(list[i],arg,i)}return arg};fluid.remove_if=function(list,fn){for(var i=0;i<list.length;++i){if(fn(list[i],i)){list.splice(i,1);--i}}return list};fluid.formatMessage=function(messageString,args){if(!args){return messageString}if(typeof (args)==="string"){args=[args]}for(var i=0;i<args.length;++i){messageString=messageString.replace("{"+i+"}",args[i])}return messageString};fluid.messageLocator=function(messageBase){return function(messagecodes,args){if(typeof (messagecodes)==="string"){messagecodes=[messagecodes]}for(var i=0;i<messagecodes.length;++i){var code=messagecodes[i];var message=messageBase[code];if(message===undefined){continue}return fluid.formatMessage(message,args)}return"[Message string for key "+messagecodes[0]+" not found]"}};fluid.stringTemplate=function(template,values){var newString=template;for(var key in values){if(values.hasOwnProperty(key)){var searchStr="%"+key;newString=newString.replace(searchStr,values[key])}}return newString}})(jQuery,fluid_1_1);