diff --git a/TokenNameNumber/TokenNameNumber.js b/TokenNameNumber/TokenNameNumber.js index 085d1bb7b5..05f1fd3923 100644 --- a/TokenNameNumber/TokenNameNumber.js +++ b/TokenNameNumber/TokenNameNumber.js @@ -5,10 +5,10 @@ var TokenNameNumber = TokenNameNumber || (function() { 'use strict'; - var version = '0.5.1', - lastUpdate = 1429599526, + var version = '0.5.2', + lastUpdate = 1430870264, schemaVersion = 0.3, - maxWaitTime = 1000, + addTokenCache = [], statuses = [ 'red', 'blue', 'green', 'brown', 'purple', 'pink', 'yellow', // 0-6 'skull', 'sleepy', 'half-heart', 'half-haze', 'interdiction', @@ -40,7 +40,7 @@ var TokenNameNumber = TokenNameNumber || (function() { config: { randomSpace: 0, useDots: false, - dots: ['red','brown','yellow','green','blue','pink','purple'] + dots: ['red','brown','yellow','green','blue','purple'] } }, state.TokenNameNumber); break; @@ -295,35 +295,44 @@ var TokenNameNumber = TokenNameNumber || (function() { return base(num); }, - setNumberFunction = function(id,lastTimeout) { - var obj = getObj('graphic',id), - matchers = (obj && getMatchers(obj.get('pageid'), obj.get('represents'))) || [], - tokenName = (obj && obj.get('name')), + + setNumberOnToken = function(obj) { + var matchers, + tokenName, matcher, renamer, parts, num, statuspart=''; + if( _.contains(addTokenCache,obj.id) + &&'graphic' === obj.get('type') + && 'token' === obj.get('subtype') ) { - if(obj && (tokenName.match( /%%NUMBERED%%/ ) || _.some(matchers,function(m) { return m.test(tokenName);}) ) ) { - if( 0 === matchers.length || !_.some(matchers,function(m) { return m.test(tokenName);}) ) { - matcher='^('+esRE(tokenName).replace(/%%NUMBERED%%/,')(\\d+)(')+')$'; - addMatcher(obj.get('pageid'), obj.get('represents'), matcher ); - } - if( !_.some(matchers,function(m) { + addTokenCache = _.without(addTokenCache,obj.id); + matchers = (getMatchers(obj.get('pageid'), obj.get('represents'))) || []; + tokenName = (obj.get('name')); + + + + if(tokenName.match( /%%NUMBERED%%/ ) || _.some(matchers,function(m) { return m.test(tokenName);}) ) { + if( 0 === matchers.length || !_.some(matchers,function(m) { return m.test(tokenName);}) ) { + matcher='^('+esRE(tokenName).replace(/%%NUMBERED%%/,')(\\d+)(')+')$'; + addMatcher(obj.get('pageid'), obj.get('represents'), matcher ); + } + if( !_.some(matchers,function(m) { if(m.test(tokenName)) { matcher=m; return true; } return false; }) ) { - matcher=new RegExp('^('+esRE(tokenName).replace(/%%NUMBERED%%/,')(\\d+)(')+')$'); - renamer=new RegExp('^('+esRE(tokenName).replace(/%%NUMBERED%%/,')(%%NUMBERED%%)(')+')$'); - } - renamer = renamer || matcher; + matcher=new RegExp('^('+esRE(tokenName).replace(/%%NUMBERED%%/,')(\\d+)(')+')$'); + renamer=new RegExp('^('+esRE(tokenName).replace(/%%NUMBERED%%/,')(%%NUMBERED%%)(')+')$'); + } + renamer = renamer || matcher; - num = (_.chain(findObjs({ + num = (_.chain(findObjs({ type: 'graphic', subtype: 'token', represents: obj.get('represents'), @@ -338,39 +347,35 @@ var TokenNameNumber = TokenNameNumber || (function() { },0) .value() ); - num += ( state.TokenNameNumber.config.randomSpace ? (randomInteger(state.TokenNameNumber.config.randomSpace)-1) : 0); + num += ( state.TokenNameNumber.config.randomSpace ? (randomInteger(state.TokenNameNumber.config.randomSpace)-1) : 0); - if(state.TokenNameNumber.config.useDots) { - statuspart = _.map(getDotNumber(num), function(n){ - return state.TokenNameNumber.config.dots[n]; - }).join(','); - if(statuspart) { - obj.set({ - statusmarkers: statuspart - }); - } - } - - parts=renamer.exec(tokenName); - obj.set({ - name: parts[1]+(++num)+parts[3] - }); - } else if ( lastTimeout < maxWaitTime ) { - setTimeout(_.bind(setNumberFunction,this,id,lastTimeout*2), lastTimeout*2); - } + if(state.TokenNameNumber.config.useDots) { + statuspart = _.map(getDotNumber(num), function(n){ + return state.TokenNameNumber.config.dots[n]; + }).join(','); + if(statuspart) { + obj.set({ + statusmarkers: statuspart + }); + } + } + + parts=renamer.exec(tokenName); + obj.set({ + name: parts[1]+(++num)+parts[3] + }); + } + } }, - setNumberOnToken = function(obj) { - if( 'graphic' === obj.get('type') - && 'token' === obj.get('subtype') ) { - - setTimeout(_.bind(setNumberFunction,this,obj.id,200), 200); - } + handleAddGraphic = function(obj) { + addTokenCache.push(obj.id); }, registerEventHandlers = function() { on('chat:message', handleInput); - on('add:graphic', setNumberOnToken); + on('add:graphic', setNumberOnToken); + on('add:graphic', handleAddGraphic); }; return { diff --git a/TokenNameNumber/package.json b/TokenNameNumber/package.json index 6f9c6440f9..fa984da6c4 100644 --- a/TokenNameNumber/package.json +++ b/TokenNameNumber/package.json @@ -1,6 +1,6 @@ { "name": "TokenNameNumber", - "version": "0.5.1", + "version": "0.5.2", "description": "Automatic Numbering of tokens with special placeholder.", "authors": "The Aaron", "roll20userid": "104025",