Advertisement
icaruscoil

tokenAction v0.2.1

Oct 1st, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var tokenAction = tokenAction || (function() {
  2.     'use strict';
  3.  
  4.     var version = '0.2.1',
  5.         sheetVersion = '5th Edition OGL by Roll20',
  6.        
  7.     checkInstall = function() {
  8.         log('TokenAction v'+version+' is ready!  Designed for use with the '+sheetVersion+' character sheet!');
  9.     },
  10.    
  11.     getSelectedCharacters = function(selected) {
  12.         return _.chain(selected)
  13.             .map(function(s){
  14.                 return getObj(s._type,s._id);
  15.             })
  16.             .reject(_.isUndefined)
  17.             .map(function(c){
  18.                 return getObj('character', c.get('represents'));
  19.             })
  20.             .filter(_.identity)
  21.             .value();        
  22.     },
  23.    
  24.     createAbility = function(name, pattern, id) {
  25.         var checkAbility = findObjs({_type: 'ability', _characterid: id, name: name});
  26.        
  27.         if (checkAbility[0]) {
  28.             checkAbility[0].set({action: pattern});
  29.         } else {
  30.             createObj('ability', {name: name, action: pattern, characterid: id, istokenaction: true});
  31.         }
  32.     },
  33.    
  34.     createRepeating = function(name, pattern, id) {
  35.         var repeatingAttrs = filterObjs(function(o){
  36.             return o.get('type')==='attribute' && o.get('characterid') === id && o.get('name').match(name);
  37.         });
  38.        
  39.         _.each(repeatingAttrs,function(attr){
  40.             var repeatingId = attr.get('name').split('_')[2],
  41.                 repeatingName = attr.get('current'),
  42.                 repeatingAction = "%{" + id + "|" + (pattern.replace(/%%RID%%/g,repeatingId)) + "}",
  43.                 checkAbility = findObjs({_type: 'ability', _characterid: id, name: repeatingName});
  44.                
  45.             if (checkAbility[0]) {
  46.                 checkAbility[0].set({action: repeatingAction});
  47.             } else {
  48.                 createObj("ability", {name: repeatingName, action: repeatingAction, characterid: id, istokenaction: true});
  49.             }
  50.         });
  51.     },
  52.    
  53.     isNpc = function(id) {
  54.         var checkNpc = findObjs({_type: 'attribute', _characterid: id, name: 'npc'});
  55.         if (_.isUndefined(checkNpc[0])) {
  56.             return false;
  57.         } else {
  58.             return checkNpc[0].get('current');
  59.         }
  60.     },
  61.    
  62.     deleteAbilities = function(id) {
  63.         var abilities = findObjs ({_type: 'ability', _characterid: id});
  64.         _.each(abilities, function(r) {
  65.             r.remove();
  66.         });
  67.     },
  68.    
  69.     createSpell = function(id) {
  70.         var checkAbility = findObjs({_type: 'ability', _characterid: id, name: 'Spells'}),
  71.             repeatingAttrs = filterObjs(function(o){
  72.                 return o.get('type') === 'attribute' && o.get('characterid') === id && o.get('name').match(/repeating_spell-\S+_[^_]+_spellname\b/);
  73.             }),
  74.             spellText = "",
  75.             sk = [],
  76.             sb = {
  77.                 'Cantrips': [],
  78.                 '1st': [],
  79.                 '2nd': [],
  80.                 '3rd': [],
  81.                 '4th': [],
  82.                 '5th': [],
  83.                 '6th': [],
  84.                 '7th': [],
  85.                 '8th': [],
  86.                 '9th': []
  87.             };
  88.        
  89.         if (!repeatingAttrs[0]) {
  90.             return;
  91.         }
  92.        
  93.         _.each(repeatingAttrs, function(s){
  94.             var level = s.get('name').split('_')[1].replace('spell-', ''),
  95.                 apiButton = "[" + s.get('current') + "](~repeating_spell-" + level + "_" + s.get('name').split('_')[2] + "_spell)";
  96.            
  97.             if (level === "cantrip") {
  98.                 level = "Cantrips";
  99.             } else if (level === "1") {
  100.                 level = "1st";
  101.             } else if (level === "2") {
  102.                 level = "2nd";
  103.             } else if (level === "3") {
  104.                 level = "3rd";
  105.             } else if (level === "4") {
  106.                 level = "4th";
  107.             } else if (level === "5") {
  108.                 level = "5th";
  109.             } else if (level === "6") {
  110.                 level = "6th";
  111.             } else if (level === "7") {
  112.                 level = "7th";
  113.             } else if (level === "8") {
  114.                 level = "8th";
  115.             } else if (level === "9") {
  116.                 level = "9th";
  117.             }
  118.            
  119.             sb[level].push(apiButton);
  120.             sb[level].sort();
  121.         });
  122.        
  123.         sk = _.keys(sb);
  124.        
  125.         _.each(sk, function(e){
  126.             if (_.isEmpty(sb[e])){
  127.                 sb = _.omit(sb, e);
  128.             }
  129.         });
  130.        
  131.         sk = _.keys(sb);
  132.        
  133.         _.each(sk, function(e){
  134.             spellText += "**" + e + ":**" + "\n" + sb[e].join(' | ') + "\n\n";
  135.         });
  136.        
  137.         if (checkAbility[0]) {
  138.             checkAbility[0].set({action: "/w @{character_name} &{template:atk} {{desc=" + spellText + "}}"});
  139.         } else {
  140.             createObj("ability", {name: 'Spells', action: "/w @{character_name} &{template:atk} {{desc=" + spellText + "}}", characterid: id, istokenaction: true});
  141.         }
  142.     },
  143.  
  144.     handleInput = function(msg) {
  145.         var char;
  146.        
  147.         if (msg.type === 'api' && msg.content.search(/^!ta\b/) !== -1 && msg.selected) {
  148.             char = _.uniq(getSelectedCharacters(msg.selected));
  149.            
  150.             _.each(char, function(a) {
  151.                 if (isNpc(a.id) === "1") {
  152.                     createAbility('Init', "%{" + a.id + "|npc_init}", a.id);
  153.                     createRepeating(/repeating_npcaction_[^_]+_name\b/, 'repeating_npcaction_%%RID%%_npc_action', a.id);
  154.                     createRepeating(/repeating_npcaction-l_[^_]+_name\b/, 'repeating_npcaction-l_%%RID%%_npc_action', a.id);
  155.                 } else {
  156.                     createAbility('Init', "%{" + a.id + "|initiative}", a.id);
  157.                     createAbility('Check', "&{template:simple} {{always=1}} ?{Ability|Strength, {{rname=Strength&" + "#125;&" + "#125; {{mod=[[ [[@{selected|strength_mod}]] [Strength Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|strength_mod}]] [Strength Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|strength_mod}]] [Strength Modifier] ]]&" + "#125;&" + "#125; |Dexterity, {{rname=Dexterity&" + "#125;&" + "#125; {{mod=[[ [[@{selected|dexterity_mod}]] [Dexterity Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|dexterity_mod}]] [Dexterity Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|dexterity_mod}]] [Dexterity Modifier] ]]&" + "#125;&" + "#125; |Constitution, {{rname=Constitution&" + "#125;&" + "#125; {{mod=[[ [[@{selected|constitution_mod}]] [Constitution Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|constitution_mod}]] [Constitution Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|constitution_mod}]] [Constitution Modifier] ]]&" + "#125;&" + "#125; |Intelligence, {{rname=Intelligence&" + "#125;&" + "#125; {{mod=[[ [[@{selected|intelligence_mod}]] [Intelligence Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|intelligence_mod}]] [Intelligence Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|intelligence_mod}]] [Intelligence Modifier] ]]&" + "#125;&" + "#125; |Wisdom, {{rname=Wisdom&" + "#125;&" + "#125; {{mod=[[ [[@{selected|wisdom_mod}]] [Wisdom Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|wisdom_mod}]] [Wisdom Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|wisdom_mod}]] [Wisdom Modifier] ]]&" + "#125;&" + "#125; |Charisma, {{rname=Charisma&" + "#125;&" + "#125; {{mod=[[ [[@{selected|charisma_mod}]] [Charisma Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|charisma_mod}]] [Charisma Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|charisma_mod}]] [Charisma Modifier] ]]&" + "#125;&" + "#125; |Acrobatics, {{rname=Acrobatics&" + "#125;&" + "#125; {{mod=[[ [[@{selected|acrobatics_bonus}]] [Acrobatics Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|acrobatics_bonus}]] [Acrobatics Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|acrobatics_bonus}]] [Acrobatics Modifier] ]]&" + "#125;&" + "#125; |Animal Handling, {{rname=Animal Handling&" + "#125;&" + "#125; {{mod=[[ [[@{selected|animal_handling_bonus}]] [Animal Handling Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|animal_handling_bonus}]] [Animal Handling Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|animal_handling_bonus}]] [Animal Handling Modifier] ]]&" + "#125;&" + "#125; |Arcana, {{rname=Arcana&" + "#125;&" + "#125; {{mod=[[ [[@{selected|arcana_bonus}]] [Arcana Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|arcana_bonus}]] [Arcana Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|arcana_bonus}]] [Arcana Modifier] ]]&" + "#125;&" + "#125; |Athletics, {{rname=Athletics&" + "#125;&" + "#125; {{mod=[[ [[@{selected|athletics_bonus}]] [Athletics Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|athletics_bonus}]] [Athletics Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|athletics_bonus}]] [Athletics Modifier] ]]&" + "#125;&" + "#125; |Deception, {{rname=Deception&" + "#125;&" + "#125; {{mod=[[ [[@{selected|deception_bonus}]] [Deception Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|deception_bonus}]] [Deception Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|deception_bonus}]] [Deception Modifier] ]]&" + "#125;&" + "#125; |History, {{rname=History&" + "#125;&" + "#125; {{mod=[[ [[@{selected|history_bonus}]][History Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|history_bonus}]] [History Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|history_bonus}]] [History Modifier] ]]&" + "#125;&" + "#125; |Insight, {{rname=Insight&" + "#125;&" + "#125; {{mod=[[ [[@{selected|insight_bonus}]] [Insight Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|insight_bonus}]] [Insight Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|insight_bonus}]] [Insight Modifier] ]]&" + "#125;&" + "#125; |Intimidation, {{rname=Intimidation&" + "#125;&" + "#125; {{mod=[[ [[@{selected|intimidation_bonus}]] [Intimidation Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|intimidation_bonus}]] [Intimidation Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|intimidation_bonus}]] [Intimidation Modifier] ]]&" + "#125;&" + "#125; |Investigation, {{rname=Investigation&" + "#125;&" + "#125; {{mod=[[ [[@{selected|investigation_bonus}]] [Investigation Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|investigation_bonus}]] [Investigation Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|investigation_bonus}]] [Investigation Modifier] ]]&" + "#125;&" + "#125; |Medicine, {{rname=Medicine&" + "#125;&" + "#125; {{mod=[[ [[@{selected|medicine_bonus}]] [Medicine Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|medicine_bonus}]] [Medicine Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|medicine_bonus}]] [Medicine Modifier] ]]&" + "#125;&" + "#125; |Nature, {{rname=Nature&" + "#125;&" + "#125; {{mod=[[ [[@{selected|nature_bonus}]] [Nature Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|nature_bonus}]] [Nature Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|nature_bonus}]] [Nature Modifier] ]]&" + "#125;&" + "#125; |Perception, {{rname=Perception&" + "#125;&" + "#125; {{mod=[[ [[@{selected|perception_bonus}]] [Perception Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|perception_bonus}]] [Perception Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|perception_bonus}]] [Perception Modifier] ]]&" + "#125;&" + "#125; |Performance, {{rname=Performance&" + "#125;&" + "#125; {{mod=[[ [[@{selected|performance_bonus}]] [Performance Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|performance_bonus}]] [Performance Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|performance_bonus}]] [Performance Modifier] ]]&" + "#125;&" + "#125; |Persuasion, {{rname=Persuasion&" + "#125;&" + "#125; {{mod=[[ [[@{selected|persuasion_bonus}]] [Persuasion Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|persuasion_bonus}]] [Persuasion Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|persuasion_bonus}]] [Persuasion Modifier] ]]&" + "#125;&" + "#125; |Religion, {{rname=Religion&" + "#125;&" + "#125; {{mod=[[ [[@{selected|religion_bonus}]] [Religion Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|religion_bonus}]] [Religion Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|religion_bonus}]] [Religion Modifier] ]]&" + "#125;&" + "#125; |Sleight of Hand, {{rname=Sleight of Hand&" + "#125;&" + "#125; {{mod=[[ [[@{selected|sleight_of_hand_bonus}]] [Sleight of Hand Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|sleight_of_hand_bonus}]] [Sleight of Hand Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|sleight_of_hand_bonus}]] [Sleight of Hand Modifier] ]]&" + "#125;&" + "#125; |Stealth, {{rname=Stealth&" + "#125;&" + "#125; {{mod=[[ [[@{selected|stealth_bonus}]] [Stealth Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|stealth_bonus}]] [Stealth Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|stealth_bonus}]] [Stealth Modifier] ]]&" + "#125;&" + "#125; |Survival, {{rname=Survival&" + "#125;&" + "#125; {{mod=[[ [[@{selected|survival_bonus}]] [Survival Modifier] ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|survival_bonus}]] [Survival Modifier] ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|survival_bonus}]] [Survival Modifier] ]]&" + "#125;&" + "#125; } @{selected|charname_output}", a.id);
  158.                     createAbility('Save', "&{template:simple} {{always=1}} ?{Save|Strength, {{rname=Strength Save&" + "#125;&" + "#125; {{mod=[[ [[@{selected|strength_save_bonus}]] [Stength Modifier + Proficency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|strength_save_bonus}]] [Strength Modifier + Proficiency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|strength_save_bonus}]] [Strength Modifier + Proficiency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; |Dexterity, {{rname=Dexterity Save&" + "#125;&" + "#125; {{mod=[[ [[@{selected|dexterity_save_bonus}]] [Dexterity Modifier + Proficency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125;{{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|dexterity_save_bonus}]] [Dexterity Modifier + Proficiency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|dexterity_save_bonus}]] [Dexterity Modifier + Proficiency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; |Constitution, {{rname=Constitution Save&" + "#125;&" + "#125; {{mod=[[ [[@{selected|constitution_save_bonus}]] [Constitution Modifier + Proficency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|constitution_save_bonus}]] [Constitution Modifier + Proficiency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|constitution_save_bonus}]] [Constitution Modifier + Proficiency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; |Intelligence, {{rname=Intelligence Save&" + "#125;&" + "#125; {{mod=[[ [[@{selected|intelligence_save_bonus}]] [Intelligence Modifier + Proficency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|intelligence_save_bonus}]] [Intelligence Modifier + Proficiency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|intelligence_save_bonus}]] [Intelligence Modifier + Proficiency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; |Wisdom, {{rname=Wisdom Save&" + "#125;&" + "#125; {{mod=[[ [[@{selected|wisdom_save_bonus}]] [Wisdom Modifier + Proficency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|wisdom_save_bonus}]] [Wisdom Modifier + Proficiency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|wisdom_save_bonus}]] [Wisdom Modifier + Proficiency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; |Charisma, {{rname=Charisma Save&" + "#125;&" + "#125; {{mod=[[ [[@{selected|charisma_save_bonus}]] [Charisma Modifier + Proficency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; {{r1=[[ 1d20@{selected|halflingluck} + [[@{selected|charisma_save_bonus}]] [Charisma Modifier + Proficiency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125; {{r2=[[ 1d20@{selected|halflingluck} + [[@{selected|charisma_save_bonus}]] [Charisma Modifier + Proficiency Bonus]@{selected|globalsavingthrowbonus} ]]&" + "#125;&" + "#125;} @{selected|charname_output}", a.id);
  159.                     createRepeating(/repeating_attack_[^_]+_atkname\b/, 'repeating_attack_%%RID%%_attack', a.id);
  160.                     createSpell(a.id);
  161.                 }
  162.                 sendChat("TokenAction", "/w " + msg.who + " Created Token Actions for " + a.get('name') + ".");
  163.             });
  164.         } else if (msg.type === 'api' && msg.content.search(/^!deleteta\b/) !== -1 && msg.selected) {
  165.             char = _.uniq(getSelectedCharacters(msg.selected));
  166.            
  167.             _.each(char, function(d) {
  168.                 deleteAbilities(d.id);
  169.                 sendChat("TokenAction", "/w " + msg.who + " Deleted Token Actions for " + d.get('name') + ".");
  170.             });
  171.         }
  172.         return;
  173.     },
  174.  
  175.     registerEventHandlers = function() {
  176.         on('chat:message', handleInput);
  177.     };
  178.  
  179.     return {
  180.         CheckInstall: checkInstall,
  181.         RegisterEventHandlers: registerEventHandlers
  182.     };
  183. }());
  184.  
  185. on('ready',function() {
  186.     'use strict';
  187.  
  188.     tokenAction.CheckInstall();
  189.     tokenAction.RegisterEventHandlers();
  190. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement