123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 |
- /* This file is part of AToMPM - A Tool for Multi-Paradigm Modelling
- * Copyright 2011 by the AToMPM team and licensed under the LGPL
- * See COPYING.lesser and README.md in the root of this project for full details
- */
- var utils = {};
- /* return a vobject geometric attribute (i.e., position, etc.) value given its
- current and new values...
- oldVal newVal result
- aa;bbbb ccccc aa;cccc
- aa ccccc aa;cccc */
- utils.buildVobjGeomAttrVal =
- function(oldVal,newVal)
- {
- if( (matches = String(oldVal).match(/^(.*?)(;.*){0,1}$/)) )
- oldVal = matches[1];
- return oldVal+';'+newVal;
- };
- utils.clone =
- function(obj)
- {
- return (obj == undefined ? undefined : utils.jsonp(utils.jsons(obj)));
- };
- utils.contains =
- function(arr,x)
- {
- return arr.indexOf(x) > -1;
- };
- /* cause one type to inherit properties from another */
- utils.extend =
- function(child,parent)
- {
- for( var prop in parent.prototype )
- if( !(prop in child.prototype) )
- child.prototype[prop] = parent.prototype[prop];
- };
- /* remove specified elements from the array in-place, and return array */
- utils.filter =
- function(arr,items)
- {
- for( var i=0; i<arr.length; )
- if( utils.contains(items,arr[i]) )
- arr.splice(i,1);
- else
- i++;
- return arr;
- };
- /* flatten an array of arrays into a single array */
- utils.flatten =
- function(arrays)
- {
- return (arrays.length == 0 ?
- [] :
- [].concat.apply([], arrays));
- };
-
- /* return the given array's first element */
- utils.head =
- function(arr)
- {
- return arr[0];
- };
- utils.isArray =
- function(obj)
- {
- return Object.prototype.toString.call(obj) == '[object Array]';
- };
- utils.isObject =
- function(obj)
- {
- return Object.prototype.toString.call(obj) == '[object Object]';
- };
- /* increment the numeric part of a sequence# of the form 'src#number' */
- utils.incrementSequenceNumber =
- function(sn,inc)
- {
- var matches = sn.match(/(.*)#(\d*)/);
- return matches[1]+'#'+(parseInt(matches[2])+(inc == undefined ? 1 : inc));
- };
- utils.isHttpSuccessCode =
- function(statusCode)
- {
- return Math.floor(statusCode/100.0) == 2;
- };
- /* decode/encode a json string... in short, replace marked line breaks ('\\n')
- by placeholders so the source json string can be parsed... this enables
- multiline json values */
- utils.jsond =
- function(str,rep)
- {
- if( rep == undefined )
- rep = '\\\n';
- return str.replace(/\/\*newline\*\//g,rep);
- };
- utils.jsone =
- function(str)
- {
- return str.replace(/\\\n/g,'/*newline*/');
- };
- /* shortcuts for JSON.* functions */
- utils.jsonp =
- function(str)
- {
- return JSON.parse(str);
- };
- utils.jsons =
- function(obj,replacer,space)
- {
- return JSON.stringify(obj,replacer,space);
- };
- /* return an array containing all the keys of a hash */
- utils.keys =
- function(hash)
- {
- var keys = [];
- for( var k in hash )
- keys.push(k);
- return keys;
- };
- /* return the maximal value in an array given a measurement function */
- utils.max =
- function(arr,measure)
- {
- var max = -Infinity;
- arr.forEach(
- function(_)
- {
- var meas = measure(_);
- if( meas > max )
- max = meas;
- });
- return max;
- };
- /* merge an array of dictionaries into a single dictionary... in case of key
- clashes, the value in the furthest dictionary is taken */
- utils.mergeDicts =
- function(dicts)
- {
- if( dicts.length == 0 )
- return {};
-
- var merged = {};
- dicts.forEach(
- function(d)
- {
- for( var key in d )
- merged[key] = d[key];
- });
- return merged;
- };
- /* escapes regexp special characters from a string (so the string can be used as
- data within a regexp) */
- utils.regexpe =
- function(str)
- {
- return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
- };
- /* return a dicts keys sorted by value according to the given function */
- utils.sortDict =
- function(dict,sortf)
- {
- var tuples = [];
- for(var key in dict)
- tuples.push([key, dict[key]]);
-
- tuples.sort( function(a,b) {return sortf(a[1],b[1]);} );
- return tuples.map( function(t) {return t[0];} );
- };
- /* remove specified keys from given dictionary (in-place) and return dictionary
- of removed entries */
- utils.splitDict =
- function(dict,keys)
- {
- var other = {};
- keys.forEach(
- function(k)
- {
- if( k in dict )
- {
- other[k] = dict[k];
- delete dict[k];
- }
- });
- return other;
- };
- /* returns the numeric part of a sequence# of the form 'src#number' */
- utils.sn2int =
- function(sn)
- {
- return parseInt(sn.match(/.*#(\d*)/)[1]);
- };
- /* return the given array's last element */
- utils.tail =
- function(arr)
- {
- return arr[arr.length-1];
- };
- /* transform the given array into a set (i.e., remove duplicate elements) */
- utils.toSet =
- function(arr)
- {
- var set = [];
- arr.forEach(
- function(_)
- {
- if( ! utils.contains(set,_) )
- set.push(_);
- });
- return set;
- };
- /* return an array containing all the values of a hash */
- utils.values =
- function(hash)
- {
- var values = [];
- for( var k in hash )
- values.push(hash[k]);
- return values;
- };
- /* creates a cookie with given name and value, which expires after the given
- amount of days (undefined == expire when browser closes) */
- utils.createCookie =
- function(name,value,days) {
- if (days) {
- var date = new Date();
- date.setTime(date.getTime()+(days*24*60*60*1000));
- var expires = "; expires="+date.toGMTString();
- }
- else var expires = "";
- document.cookie = name+"="+value+expires+"; path=/";
- };
- /* returns the value of the cookie with given name */
- utils.readCookie =
- function(name) {
- var nameEQ = name + "=";
- var ca = document.cookie.split(';');
- for(var i=0;i < ca.length;i++) {
- var c = ca[i];
- while (c.charAt(0)==' ') c = c.substring(1,c.length);
- if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
- }
- return null;
- };
- /* erases the cookie with given name */
- utils.eraseCookie =
- function(name) {
- createCookie(name,"",-1);
- };
-
- __pendingCalls = {};
- /* performs a function after the specified amount of milleseconds
- unless this call is repeated during that time interval. If it is,
- the timer is reset. 'args' is an array containing arguments for the
- function call. */
- utils.doAfterUnlessRepeated =
- function(func, args, ms) {
- function doIt() {
- func.apply(undefined, args);
- }
- if (__pendingCalls[func]) {
- clearTimeout(__pendingCalls[func]);
- }
- __pendingCalls[func] = setTimeout(doIt, ms);
- };
- /* NOTE: 'exports' exists in back-end 'require', but not in browser import...
- this ensures no errors are reported during browser imports */
- var exports = exports || {};
- exports.buildVobjGeomAttrVal = utils.buildVobjGeomAttrVal;
- exports.clone = utils.clone;
- exports.contains = utils.contains;
- exports.extend = utils.extend;
- exports.filter = utils.filter;
- exports.flatten = utils.flatten;
- exports.head = utils.head;
- exports.isArray = utils.isArray;
- exports.isObject = utils.isObject;
- exports.incrementSequenceNumber = utils.incrementSequenceNumber;
- exports.isHttpSuccessCode = utils.isHttpSuccessCode;
- exports.jsond = utils.jsond;
- exports.jsone = utils.jsone;
- exports.jsonp = utils.jsonp;
- exports.jsons = utils.jsons;
- exports.keys = utils.keys;
- exports.max = utils.max;
- exports.mergeDicts = utils.mergeDicts;
- exports.regexpe = utils.regexpe;
- exports.sortDict = utils.sortDict;
- exports.splitDict = utils.splitDict;
- exports.sn2int = utils.sn2int;
- exports.tail = utils.tail;
- exports.toSet = utils.toSet;
- exports.values = utils.values;
- exports.createCookie = utils.createCookie;
- exports.readCookie = utils.readCookie;
- exports.eraseCookie = utils.eraseCookie;
- exports.doAfterUnlessRepeated = utils.doAfterUnlessRepeated;
|