mirror of
https://github.com/OMGeeky/andors-trail.git
synced 2026-02-23 15:38:29 +01:00
Work in progress on updated Content editor that uses angular.js instead of jqueryui.
This commit is contained in:
@@ -1,25 +1,3 @@
|
||||
function IncludeJavascript(jsFile) {
|
||||
document.write('<script type="text/javascript" src="' + jsFile + '"></scr' + 'ipt>');
|
||||
}
|
||||
|
||||
IncludeJavascript("FieldList.js");
|
||||
IncludeJavascript("DataStore.js");
|
||||
IncludeJavascript("ImageSelector.js");
|
||||
IncludeJavascript("EditorTabs.js");
|
||||
IncludeJavascript("EditorFunctions.js");
|
||||
IncludeJavascript("ImportExport.js");
|
||||
|
||||
IncludeJavascript("Editor_ActorCondition.js");
|
||||
IncludeJavascript("Editor_Quest.js");
|
||||
IncludeJavascript("Editor_Item.js");
|
||||
IncludeJavascript("Editor_Droplist.js");
|
||||
IncludeJavascript("Editor_Conversation.js");
|
||||
IncludeJavascript("Editor_Monster.js");
|
||||
|
||||
IncludeJavascript("inc/jquery.dynatree.min.js");
|
||||
IncludeJavascript("inc/mustache.js");
|
||||
|
||||
|
||||
var model;
|
||||
var imageSelector;
|
||||
var tabs;
|
||||
@@ -29,312 +7,330 @@ var equipConditionsDialog;
|
||||
var droplistItemDialog;
|
||||
var phraseRewardDialog;
|
||||
|
||||
function loadResourceFile(filename, onSuccess) {
|
||||
var url = document.location.href;
|
||||
url = url.substring(0, url.lastIndexOf('/'));
|
||||
url = url.substring(0, url.lastIndexOf('/'));
|
||||
url += "/AndorsTrail/res/" + filename;
|
||||
//var url = "http://andors-trail.googlecode.com/git/AndorsTrail/res/" + filename;
|
||||
$.get(url, function(data) {
|
||||
onSuccess(data);
|
||||
require([
|
||||
"FieldList",
|
||||
"DataStore",
|
||||
"ImageSelector",
|
||||
"EditorTabs",
|
||||
"EditorFunctions",
|
||||
"ImportExport",
|
||||
"Editor_ActorCondition",
|
||||
"Editor_Quest",
|
||||
"Editor_Item",
|
||||
"Editor_Droplist",
|
||||
"Editor_Conversation",
|
||||
"Editor_Monster",
|
||||
"inc/jquery.dynatree.min",
|
||||
"inc/mustache",
|
||||
], function() {
|
||||
|
||||
function loadResourceFile(filename, onSuccess) {
|
||||
var url = document.location.href;
|
||||
url = url.substring(0, url.lastIndexOf('/'));
|
||||
url = url.substring(0, url.lastIndexOf('/'));
|
||||
url += "/AndorsTrail/res/" + filename;
|
||||
//var url = "http://andors-trail.googlecode.com/git/AndorsTrail/res/" + filename;
|
||||
$.get(url, function(data) {
|
||||
onSuccess(data);
|
||||
}, 'text')
|
||||
.error(function() { alert("Error loading " + url); });
|
||||
}
|
||||
}
|
||||
|
||||
function openTabForObject(obj, dataStore) {
|
||||
tabs.openTabForObject(obj, dataStore.objectTypename, obj[dataStore.nameField]);
|
||||
}
|
||||
function openTabForObject(obj, dataStore) {
|
||||
tabs.openTabForObject(obj, dataStore.objectTypename, obj[dataStore.nameField]);
|
||||
}
|
||||
|
||||
function bindObjectsToItemList(itemListDiv, dataStore) {
|
||||
itemListDiv.children().remove();
|
||||
var createListItem = function(obj) {
|
||||
var item = $( Mustache.to_html( $('#listitem').html(), { name: obj[dataStore.nameField] } ) );
|
||||
if (dataStore.iconField) {
|
||||
var elem = $( 'img', item );
|
||||
imageSelector.setImage( elem , obj[dataStore.iconField] , 0.7);
|
||||
}
|
||||
return item;
|
||||
};
|
||||
var addToList = function(obj) {
|
||||
var item = createListItem(obj);
|
||||
item.click(function() { openTabForObject(obj, dataStore); });
|
||||
itemListDiv.append(item);
|
||||
item.hide().fadeIn('slow');
|
||||
};
|
||||
dataStore.items.forEach(addToList);
|
||||
dataStore.onAdded = addToList;
|
||||
dataStore.onDeserialized = function() {
|
||||
bindObjectsToItemList(itemListDiv, dataStore);
|
||||
// TODO: Should also close all tabs.
|
||||
};
|
||||
dataStore.onPropertyChanged = function(obj, propertyName, value) {
|
||||
var listItem = $("li:eq(" + dataStore.items.indexOf(obj) + ")", itemListDiv);
|
||||
listItem.html( createListItem(obj).html() );
|
||||
if (propertyName == dataStore.nameField) {
|
||||
//TODO: Should this really be in the same function?
|
||||
// (splitting the left part from the tab controls would reduce coupling, which would be a good thing.)
|
||||
tabs.renameTabForObject(obj, value);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function bindEditorType(dataStore, div, createObjectEditor, newObjectCreator) {
|
||||
tabs.registerEditorType(dataStore.objectTypename, createObjectEditor);
|
||||
|
||||
bindObjectsToItemList( $( "ul", div ), dataStore );
|
||||
|
||||
$( "#add", div )
|
||||
.button()
|
||||
.click(function() {
|
||||
var obj = newObjectCreator();
|
||||
dataStore.add(obj);
|
||||
openTabForObject( obj, dataStore );
|
||||
});
|
||||
|
||||
$( "#clear", div )
|
||||
.button()
|
||||
.click(function() {
|
||||
if (confirm("Are you sure?")) {
|
||||
dataStore.clear();
|
||||
function bindObjectsToItemList(itemListDiv, dataStore) {
|
||||
itemListDiv.children().remove();
|
||||
var createListItem = function(obj) {
|
||||
var item = $( Mustache.to_html( $('#listitem').html(), { name: obj[dataStore.nameField] } ) );
|
||||
if (dataStore.iconField) {
|
||||
var elem = $( 'img', item );
|
||||
imageSelector.setImage( elem , obj[dataStore.iconField] , 0.7);
|
||||
}
|
||||
});
|
||||
}
|
||||
return item;
|
||||
};
|
||||
var addToList = function(obj) {
|
||||
var item = createListItem(obj);
|
||||
item.click(function() { openTabForObject(obj, dataStore); });
|
||||
itemListDiv.append(item);
|
||||
item.hide().fadeIn('slow');
|
||||
};
|
||||
dataStore.items.forEach(addToList);
|
||||
dataStore.onAdded = addToList;
|
||||
dataStore.onDeserialized = function() {
|
||||
bindObjectsToItemList(itemListDiv, dataStore);
|
||||
// TODO: Should also close all tabs.
|
||||
};
|
||||
dataStore.onPropertyChanged = function(obj, propertyName, value) {
|
||||
var listItem = $("li:eq(" + dataStore.items.indexOf(obj) + ")", itemListDiv);
|
||||
listItem.html( createListItem(obj).html() );
|
||||
if (propertyName == dataStore.nameField) {
|
||||
//TODO: Should this really be in the same function?
|
||||
// (splitting the left part from the tab controls would reduce coupling, which would be a good thing.)
|
||||
tabs.renameTabForObject(obj, value);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function addExampleModelItems(model) {
|
||||
model.actorConditions.add({id: "bless", name: "Bless", isPositive: true, iconID: "actorconditions_1:38", category: 0, hasAbilityEffect: 1, attackChance: 15, blockChance: 5});
|
||||
model.actorConditions.add({id: "poison_weak", name: "Weak Poison", iconID: "actorconditions_1:60", category: 3, hasRoundEffect: 1, round_visualEffectID: 2, round_boostHP_Min: -1, round_boostHP_Max: -1});
|
||||
function bindEditorType(dataStore, div, createObjectEditor, newObjectCreator) {
|
||||
tabs.registerEditorType(dataStore.objectTypename, createObjectEditor);
|
||||
|
||||
bindObjectsToItemList( $( "ul", div ), dataStore );
|
||||
|
||||
$( "#add", div )
|
||||
.button()
|
||||
.click(function() {
|
||||
var obj = newObjectCreator();
|
||||
dataStore.add(obj);
|
||||
openTabForObject( obj, dataStore );
|
||||
});
|
||||
|
||||
$( "#clear", div )
|
||||
.button()
|
||||
.click(function() {
|
||||
if (confirm("Are you sure?")) {
|
||||
dataStore.clear();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
model.quests.add({id: "testQuest", name: "Test quest", stages: [ { progress: 10, logText: "Stage 10"} , { progress: 20, logText: "Stage 20", finishesQuest: 1 } ] });
|
||||
function addExampleModelItems(model) {
|
||||
model.actorConditions.add({id: "bless", name: "Bless", isPositive: true, iconID: "actorconditions_1:38", category: 0, hasAbilityEffect: 1, attackChance: 15, blockChance: 5});
|
||||
model.actorConditions.add({id: "poison_weak", name: "Weak Poison", iconID: "actorconditions_1:60", category: 3, hasRoundEffect: 1, round_visualEffectID: 2, round_boostHP_Min: -1, round_boostHP_Max: -1});
|
||||
|
||||
model.items.add({id: "item0", iconID: "items_weapons:0", name: "Longsword", category: 'lsword', baseMarketCost: 51, hasEquipEffect: 1, equip_attackChance: 10, equip_attackDamage_Min: 2, equip_attackDamage_Max: 4, equip_attackCost: 4});
|
||||
model.items.add({id: "dmg_ring1", iconID: "items_jewelry:0", name: "Ring of damage +1", category: 'ring', baseMarketCost: 62, hasEquipEffect: 1, equip_attackDamage_Min: 1, equip_attackDamage_Max: 1});
|
||||
model.quests.add({id: "testQuest", name: "Test quest", stages: [ { progress: 10, logText: "Stage 10"} , { progress: 20, logText: "Stage 20", finishesQuest: 1 } ] });
|
||||
|
||||
model.droplists.add({id: "merchant1", items: [ { itemID: 'dmg_ring1', quantity_Min: 4, quantity_Max: 5, chance: 100 } , { itemID: 'item0', quantity_Min: 1, quantity_Max: 1, chance: 100 } ] } );
|
||||
model.items.add({id: "item0", iconID: "items_weapons:0", name: "Longsword", category: 'lsword', baseMarketCost: 51, hasEquipEffect: 1, equip_attackChance: 10, equip_attackDamage_Min: 2, equip_attackDamage_Max: 4, equip_attackCost: 4});
|
||||
model.items.add({id: "dmg_ring1", iconID: "items_jewelry:0", name: "Ring of damage +1", category: 'ring', baseMarketCost: 62, hasEquipEffect: 1, equip_attackDamage_Min: 1, equip_attackDamage_Max: 1});
|
||||
|
||||
model.dialogue.add({id: "mikhail_default", message: 'Anything else I can help you with?', replies: [ { text: 'Do you have any tasks for me?', nextPhraseID: 'mikhail_tasks' }, { text: 'Is there anything else you can tell me about Andor?', nextPhraseID: 'mikhail_andor1' } ]});
|
||||
model.dialogue.add({id: 'mikhail_andor1', message: 'As I said, Andor went out yesterday and hasn\'t been back since. I\'m starting to worry about him. Please go look for your brother, he said he would only be out a short while.'});
|
||||
model.dialogue.add({id: 'mikhail_tasks', message: 'Oh yes, there were some things I need help with, bread and rats. Which one would you like to talk about?'});
|
||||
model.droplists.add({id: "merchant1", items: [ { itemID: 'dmg_ring1', quantity_Min: 4, quantity_Max: 5, chance: 100 } , { itemID: 'item0', quantity_Min: 1, quantity_Max: 1, chance: 100 } ] } );
|
||||
|
||||
model.monsters.add({id: "small_ant", name: "Small ant", iconID: "monsters_insects:2", maxHP: 30, size: '1x1'});
|
||||
model.monsters.add({id: "red_ant", name: "Red ant", iconID: "monsters_insects:3", maxHP: 20, size: '1x1'});
|
||||
model.monsters.add({id: "wasp", name: "Wasp", iconID: "monsters_insects:1", maxHP: 10, size: '1x1'});
|
||||
}
|
||||
model.dialogue.add({id: "mikhail_default", message: 'Anything else I can help you with?', replies: [ { text: 'Do you have any tasks for me?', nextPhraseID: 'mikhail_tasks' }, { text: 'Is there anything else you can tell me about Andor?', nextPhraseID: 'mikhail_andor1' } ]});
|
||||
model.dialogue.add({id: 'mikhail_andor1', message: 'As I said, Andor went out yesterday and hasn\'t been back since. I\'m starting to worry about him. Please go look for your brother, he said he would only be out a short while.'});
|
||||
model.dialogue.add({id: 'mikhail_tasks', message: 'Oh yes, there were some things I need help with, bread and rats. Which one would you like to talk about?'});
|
||||
|
||||
function startEditor() {
|
||||
|
||||
model = {
|
||||
actorConditions: new DataStore({
|
||||
objectTypename: 'actorcondition'
|
||||
,fieldList: new FieldList("[id|name|iconID|category|isStacking|isPositive|"
|
||||
+ "hasRoundEffect|round_visualEffectID|round_boostHP_Min|round_boostHP_Max|round_boostAP_Min|round_boostAP_Max|"
|
||||
+ "hasFullRoundEffect|fullround_visualEffectID|fullround_boostHP_Min|fullround_boostHP_Max|fullround_boostAP_Min|fullround_boostAP_Max|"
|
||||
+ "hasAbilityEffect|boostMaxHP|boostMaxAP|moveCostPenalty|attackCost|attackChance|criticalChance|criticalMultiplier|attackDamage_Min|attackDamage_Max|blockChance|damageResistance|"
|
||||
+ "];"
|
||||
)
|
||||
,idField: 'id'
|
||||
,nameField: 'name'
|
||||
,iconField: 'iconID'
|
||||
})
|
||||
,quests: new DataStore({
|
||||
objectTypename: 'quest'
|
||||
,fieldList: new FieldList("[id|name|showInLog|stages[progress|logText|rewardExperience|finishesQuest|]|];")
|
||||
,idField: 'id'
|
||||
,nameField: 'name'
|
||||
})
|
||||
,items: new DataStore({
|
||||
objectTypename: 'item'
|
||||
,fieldList: new FieldList("[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|"
|
||||
+ "hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|"
|
||||
+ "hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|"
|
||||
+ "hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|"
|
||||
+ "hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|"
|
||||
+ "];"
|
||||
)
|
||||
,idField: 'id'
|
||||
,nameField: 'name'
|
||||
,iconField: 'iconID'
|
||||
})
|
||||
,droplists: new DataStore({
|
||||
objectTypename: 'droplist'
|
||||
,fieldList: new FieldList("[id|items[itemID|quantity_Min|quantity_Max|chance|]|];")
|
||||
,idField: 'id'
|
||||
,nameField: 'id'
|
||||
})
|
||||
,dialogue: new DataStore({
|
||||
objectTypename: 'dialogue'
|
||||
,fieldList: new FieldList("[id|message|rewards[rewardType|rewardID|value|]|replies[text|nextPhraseID|requires_Progress|requires_itemID|requires_Quantity|requires_Type|]|];")
|
||||
,idField: 'id'
|
||||
,nameField: 'id'
|
||||
})
|
||||
,monsters: new DataStore({
|
||||
objectTypename: 'monster'
|
||||
,fieldList: new FieldList("[id|iconID|name|tags|size|monsterClass|unique|faction|maxHP|maxAP|moveCost|attackCost|attackChance|criticalChance|criticalMultiplier|attackDamage_Min|attackDamage_Max|blockChance|damageResistance|droplistID|phraseID|"
|
||||
+ "hasHitEffect|onHit_boostHP_Min|onHit_boostHP_Max|onHit_boostAP_Min|onHit_boostAP_Max|onHit_conditionsSource[condition|magnitude|duration|chance|]|onHit_conditionsTarget[condition|magnitude|duration|chance|]|"
|
||||
+ "];"
|
||||
)
|
||||
,idField: 'id'
|
||||
,nameField: 'name'
|
||||
,iconField: 'iconID'
|
||||
})
|
||||
,itemCategories: new DataStore({
|
||||
objectTypename: 'itemcategory'
|
||||
,fieldList: new FieldList("[id|name|actionType|inventorySlot|size|];")
|
||||
,idField: 'id'
|
||||
,nameField: 'name'
|
||||
})
|
||||
};
|
||||
|
||||
addExampleModelItems(model);
|
||||
|
||||
|
||||
|
||||
|
||||
imageSelector = new ImageSelector("../AndorsTrail/res/drawable/", $( "#dialog-images" ) );
|
||||
imageSelector.add(new TilesetImage("actorconditions_1", {x:14, y:8}, undefined, [ 'conditions' ] ));
|
||||
imageSelector.add(new TilesetImage("actorconditions_2", {x:3, y:1}, undefined, [ 'conditions' ] ));
|
||||
imageSelector.add(new TilesetImage("items_armours", {x:14, y:3}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_armours_3", {x:10, y:4}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_armours_2", {x:7, y:1}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_weapons", {x:14, y:6}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_weapons_3", {x:13, y:5}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_weapons_2", {x:7, y:1}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_jewelry", {x:14, y:1}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_rings_1", {x:10, y:3}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_necklaces_1", {x:10, y:3}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_consumables", {x:14, y:5}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_books", {x:11, y:1}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_misc", {x:14, y:4}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_misc_2", {x:20, y:12}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_misc_3", {x:20, y:12}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_misc_4", {x:20, y:4}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_armor1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_demon1", {x: 1, y:1}, {x:64, y:64}, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_dogs", {x: 7, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_eye1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_eye2", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_eye3", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_eye4", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_ghost1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_hydra1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_insects", {x: 6, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_liches", {x: 4, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_mage", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_mage2", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_man1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_men", {x: 9, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_men2", {x: 10, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_misc", {x: 12, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_rats", {x: 5, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_rogue1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_skeleton1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_skeleton2", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_snakes", {x: 6, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_cyclops", {x: 1, y:1}, {x:64, y:96}, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_warrior1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_wraiths", {x: 3, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_zombie1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_zombie2", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_karvis1", {x: 2, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_karvis2", {x: 9, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_rltiles1", {x:20, y:8}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_rltiles2", {x:20, y:9}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_rltiles3", {x:10, y:3}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_redshrike1", {x:6, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_ld1", {x:20, y:12}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_ld2", {x:20, y:12}, undefined, [ 'monsters' ] ));
|
||||
|
||||
|
||||
|
||||
$( "#left #tools" ).accordion({ fillSpace: true });
|
||||
|
||||
tabs = new EditorTabs( $( "#center #tabs" ) );
|
||||
|
||||
|
||||
bindEditorType(model.actorConditions, $( "#tools #actorconditionlist" ), createActorConditionEditor, function() {
|
||||
return {name: "New Condition", id: 'new_condition' };
|
||||
});
|
||||
bindEditorType(model.quests, $( "#tools #questlist" ), createQuestEditor, function() {
|
||||
return {name: "New Quest", id: 'new_quest' };
|
||||
});
|
||||
bindEditorType(model.items, $( "#tools #itemlist" ), createItemEditor, function() {
|
||||
return {name: "New Item", id: "new_item", category: 'other' };
|
||||
});
|
||||
bindEditorType(model.droplists, $( "#tools #droplist" ), createDroplistEditor, function() {
|
||||
return {id: "new_droplist" };
|
||||
});
|
||||
bindEditorType(model.dialogue, $( "#tools #conversationlist" ), createConversationEditor, function() {
|
||||
return {id: "new_conversation" };
|
||||
});
|
||||
bindEditorType(model.monsters, $( "#tools #monsterlist" ), createMonsterEditor, function() {
|
||||
return {id: "new_monster", name: "New Monster", maxAP: 10, attackCost: 5, moveCost: 5 };
|
||||
});
|
||||
|
||||
|
||||
|
||||
$( "#buttons #import" ).button().click( showImportDialog );
|
||||
$( "#buttons #export" ).button().click( showExportDialog );
|
||||
|
||||
|
||||
var defaultButtons = {
|
||||
Close: function() { $( this ).dialog( "close" ); }
|
||||
};
|
||||
|
||||
prepareImportExportDialogs(defaultButtons);
|
||||
|
||||
questlogDialog = $( "#templates #dialog-questlog" )
|
||||
.dialog({
|
||||
title: "Quest log item",
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 450,
|
||||
buttons: defaultButtons
|
||||
model.monsters.add({id: "small_ant", name: "Small ant", iconID: "monsters_insects:2", maxHP: 30, size: '1x1'});
|
||||
model.monsters.add({id: "red_ant", name: "Red ant", iconID: "monsters_insects:3", maxHP: 20, size: '1x1'});
|
||||
model.monsters.add({id: "wasp", name: "Wasp", iconID: "monsters_insects:1", maxHP: 10, size: '1x1'});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
model = {
|
||||
actorConditions: new DataStore({
|
||||
objectTypename: 'actorcondition'
|
||||
,fieldList: new FieldList("[id|name|iconID|category|isStacking|isPositive|"
|
||||
+ "hasRoundEffect|round_visualEffectID|round_boostHP_Min|round_boostHP_Max|round_boostAP_Min|round_boostAP_Max|"
|
||||
+ "hasFullRoundEffect|fullround_visualEffectID|fullround_boostHP_Min|fullround_boostHP_Max|fullround_boostAP_Min|fullround_boostAP_Max|"
|
||||
+ "hasAbilityEffect|boostMaxHP|boostMaxAP|moveCostPenalty|attackCost|attackChance|criticalChance|criticalMultiplier|attackDamage_Min|attackDamage_Max|blockChance|damageResistance|"
|
||||
+ "];"
|
||||
)
|
||||
,idField: 'id'
|
||||
,nameField: 'name'
|
||||
,iconField: 'iconID'
|
||||
})
|
||||
,quests: new DataStore({
|
||||
objectTypename: 'quest'
|
||||
,fieldList: new FieldList("[id|name|showInLog|stages[progress|logText|rewardExperience|finishesQuest|]|];")
|
||||
,idField: 'id'
|
||||
,nameField: 'name'
|
||||
})
|
||||
,items: new DataStore({
|
||||
objectTypename: 'item'
|
||||
,fieldList: new FieldList("[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|"
|
||||
+ "hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|"
|
||||
+ "hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|"
|
||||
+ "hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|"
|
||||
+ "hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|"
|
||||
+ "];"
|
||||
)
|
||||
,idField: 'id'
|
||||
,nameField: 'name'
|
||||
,iconField: 'iconID'
|
||||
})
|
||||
,droplists: new DataStore({
|
||||
objectTypename: 'droplist'
|
||||
,fieldList: new FieldList("[id|items[itemID|quantity_Min|quantity_Max|chance|]|];")
|
||||
,idField: 'id'
|
||||
,nameField: 'id'
|
||||
})
|
||||
,dialogue: new DataStore({
|
||||
objectTypename: 'dialogue'
|
||||
,fieldList: new FieldList("[id|message|rewards[rewardType|rewardID|value|]|replies[text|nextPhraseID|requires_Progress|requires_itemID|requires_Quantity|requires_Type|]|];")
|
||||
,idField: 'id'
|
||||
,nameField: 'id'
|
||||
})
|
||||
,monsters: new DataStore({
|
||||
objectTypename: 'monster'
|
||||
,fieldList: new FieldList("[id|iconID|name|tags|size|monsterClass|unique|faction|maxHP|maxAP|moveCost|attackCost|attackChance|criticalChance|criticalMultiplier|attackDamage_Min|attackDamage_Max|blockChance|damageResistance|droplistID|phraseID|"
|
||||
+ "hasHitEffect|onHit_boostHP_Min|onHit_boostHP_Max|onHit_boostAP_Min|onHit_boostAP_Max|onHit_conditionsSource[condition|magnitude|duration|chance|]|onHit_conditionsTarget[condition|magnitude|duration|chance|]|"
|
||||
+ "];"
|
||||
)
|
||||
,idField: 'id'
|
||||
,nameField: 'name'
|
||||
,iconField: 'iconID'
|
||||
})
|
||||
,itemCategories: new DataStore({
|
||||
objectTypename: 'itemcategory'
|
||||
,fieldList: new FieldList("[id|name|actionType|inventorySlot|size|];")
|
||||
,idField: 'id'
|
||||
,nameField: 'name'
|
||||
})
|
||||
};
|
||||
|
||||
addExampleModelItems(model);
|
||||
|
||||
|
||||
|
||||
|
||||
imageSelector = new ImageSelector("../AndorsTrail/res/drawable/", $( "#dialog-images" ) );
|
||||
imageSelector.add(new TilesetImage("actorconditions_1", {x:14, y:8}, undefined, [ 'conditions' ] ));
|
||||
imageSelector.add(new TilesetImage("actorconditions_2", {x:3, y:1}, undefined, [ 'conditions' ] ));
|
||||
imageSelector.add(new TilesetImage("items_armours", {x:14, y:3}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_armours_3", {x:10, y:4}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_armours_2", {x:7, y:1}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_weapons", {x:14, y:6}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_weapons_3", {x:13, y:5}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_weapons_2", {x:7, y:1}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_jewelry", {x:14, y:1}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_rings_1", {x:10, y:3}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_necklaces_1", {x:10, y:3}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_consumables", {x:14, y:5}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_books", {x:11, y:1}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_misc", {x:14, y:4}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_misc_2", {x:20, y:12}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_misc_3", {x:20, y:12}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("items_misc_4", {x:20, y:4}, undefined, [ 'items' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_armor1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_demon1", {x: 1, y:1}, {x:64, y:64}, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_dogs", {x: 7, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_eye1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_eye2", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_eye3", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_eye4", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_ghost1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_hydra1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_insects", {x: 6, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_liches", {x: 4, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_mage", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_mage2", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_man1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_men", {x: 9, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_men2", {x: 10, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_misc", {x: 12, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_rats", {x: 5, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_rogue1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_skeleton1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_skeleton2", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_snakes", {x: 6, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_cyclops", {x: 1, y:1}, {x:64, y:96}, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_warrior1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_wraiths", {x: 3, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_zombie1", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_zombie2", {x: 1, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_karvis1", {x: 2, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_karvis2", {x: 9, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_rltiles1", {x:20, y:8}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_rltiles2", {x:20, y:9}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_rltiles3", {x:10, y:3}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_redshrike1", {x:6, y:1}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_ld1", {x:20, y:12}, undefined, [ 'monsters' ] ));
|
||||
imageSelector.add(new TilesetImage("monsters_ld2", {x:20, y:12}, undefined, [ 'monsters' ] ));
|
||||
|
||||
|
||||
|
||||
$( "#left #tools" ).accordion({ fillSpace: true });
|
||||
|
||||
tabs = new EditorTabs( $( "#center #tabs" ) );
|
||||
|
||||
|
||||
bindEditorType(model.actorConditions, $( "#tools #actorconditionlist" ), createActorConditionEditor, function() {
|
||||
return {name: "New Condition", id: 'new_condition' };
|
||||
});
|
||||
|
||||
onHitConditionsDialog = $( "#templates #dialog-onHitConditions" )
|
||||
.dialog({
|
||||
title: "Actor status conditon",
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 350,
|
||||
buttons: defaultButtons
|
||||
bindEditorType(model.quests, $( "#tools #questlist" ), createQuestEditor, function() {
|
||||
return {name: "New Quest", id: 'new_quest' };
|
||||
});
|
||||
|
||||
equipConditionsDialog = $( "#templates #dialog-equipConditions" )
|
||||
.dialog({
|
||||
title: "Actor status conditon",
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 350,
|
||||
buttons: defaultButtons
|
||||
bindEditorType(model.items, $( "#tools #itemlist" ), createItemEditor, function() {
|
||||
return {name: "New Item", id: "new_item", category: 'other' };
|
||||
});
|
||||
|
||||
droplistItemDialog = $( "#templates #dialog-droplistItem" )
|
||||
.dialog({
|
||||
title: "Droplist item",
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 350,
|
||||
buttons: defaultButtons
|
||||
bindEditorType(model.droplists, $( "#tools #droplist" ), createDroplistEditor, function() {
|
||||
return {id: "new_droplist" };
|
||||
});
|
||||
|
||||
phraseRewardDialog = $( "#templates #dialog-phrasereward" )
|
||||
.dialog({
|
||||
title: "Phrase reward",
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 350,
|
||||
buttons: defaultButtons
|
||||
bindEditorType(model.dialogue, $( "#tools #conversationlist" ), createConversationEditor, function() {
|
||||
return {id: "new_conversation" };
|
||||
});
|
||||
|
||||
loadResourceFile( 'values/content_itemcategories.xml', function(data) {
|
||||
var allContent = '';
|
||||
$( data ).find("string").each(function() {
|
||||
allContent = allContent + $(this).text();
|
||||
bindEditorType(model.monsters, $( "#tools #monsterlist" ), createMonsterEditor, function() {
|
||||
return {id: "new_monster", name: "New Monster", maxAP: 10, attackCost: 5, moveCost: 5 };
|
||||
});
|
||||
model.itemCategories.deserialize(allContent);
|
||||
model.itemCategories.items.forEach(function(c) {
|
||||
$("#editItem select#category").append( $("<option>").val(c.id).text(c.name) );
|
||||
|
||||
|
||||
|
||||
$( "#buttons #import" ).button().click( showImportDialog );
|
||||
$( "#buttons #export" ).button().click( showExportDialog );
|
||||
|
||||
|
||||
var defaultButtons = {
|
||||
Close: function() { $( this ).dialog( "close" ); }
|
||||
};
|
||||
|
||||
prepareImportExportDialogs(defaultButtons);
|
||||
|
||||
questlogDialog = $( "#templates #dialog-questlog" )
|
||||
.dialog({
|
||||
title: "Quest log item",
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 450,
|
||||
buttons: defaultButtons
|
||||
});
|
||||
|
||||
onHitConditionsDialog = $( "#templates #dialog-onHitConditions" )
|
||||
.dialog({
|
||||
title: "Actor status conditon",
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 350,
|
||||
buttons: defaultButtons
|
||||
});
|
||||
|
||||
equipConditionsDialog = $( "#templates #dialog-equipConditions" )
|
||||
.dialog({
|
||||
title: "Actor status conditon",
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 350,
|
||||
buttons: defaultButtons
|
||||
});
|
||||
|
||||
droplistItemDialog = $( "#templates #dialog-droplistItem" )
|
||||
.dialog({
|
||||
title: "Droplist item",
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 350,
|
||||
buttons: defaultButtons
|
||||
});
|
||||
|
||||
phraseRewardDialog = $( "#templates #dialog-phrasereward" )
|
||||
.dialog({
|
||||
title: "Phrase reward",
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 350,
|
||||
buttons: defaultButtons
|
||||
});
|
||||
|
||||
loadResourceFile( 'values/content_itemcategories.xml', function(data) {
|
||||
var allContent = '';
|
||||
$( data ).find("string").each(function() {
|
||||
allContent = allContent + $(this).text();
|
||||
});
|
||||
model.itemCategories.deserialize(allContent);
|
||||
model.itemCategories.items.forEach(function(c) {
|
||||
$("#editItem select#category").append( $("<option>").val(c.id).text(c.name) );
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -1,162 +1,66 @@
|
||||
|
||||
var DataStore_Data_fieldValue = '[^\\{\\}\\|]*';
|
||||
var DataStore_Data_arrayObject = '\\{(' + DataStore_Data_fieldValue + '\\|)*\\}\\s*';
|
||||
var DataStore_Data_arrayObjectPattern = new RegExp(DataStore_Data_arrayObject, 'g');
|
||||
var DataStore_Data_arrayField = '\\{\\s*(' + DataStore_Data_arrayObject + ')*\\s*\\}';
|
||||
var DataStore_Data_field = '(' + DataStore_Data_fieldValue + '|' + DataStore_Data_arrayField + ')\\|';
|
||||
var DataStore_Data_pattern = new RegExp(DataStore_Data_field, 'gm');
|
||||
var DataStore_Data_line = "^(\\{(" + DataStore_Data_field + ")*\\};)$";
|
||||
var DataStore_Data_linePattern = new RegExp(DataStore_Data_line, 'gm');
|
||||
var DataStore = (function(_) {
|
||||
function DataStore(options) {
|
||||
var defaultOptions = {
|
||||
nameField: 'name'
|
||||
,idField: 'id'
|
||||
,iconIDField: 'iconID'
|
||||
,newItemTemplate: function() { return {}; }
|
||||
};
|
||||
options = _.extend(defaultOptions, options);
|
||||
|
||||
var showErrorMessages = true;
|
||||
|
||||
var specialEncodings = [
|
||||
{
|
||||
decoded: "'", decoded_Regex: /'/gm,
|
||||
encoded: "\\'", encoded_Regex: /\\'/gm
|
||||
},
|
||||
{
|
||||
decoded: "\n", decoded_Regex: /\n/gm,
|
||||
encoded: "\\n", encoded_Regex: /\\n/gm
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
function DataStore(input) {
|
||||
this.objectTypename = input.objectTypename;
|
||||
this.fieldList = input.fieldList;
|
||||
this.nameField = input.nameField ? input.nameField : 'name';
|
||||
this.idField = input.idField ? input.idField : 'id';
|
||||
this.iconField = input.iconField;
|
||||
this.items = [];
|
||||
|
||||
this.add = function(obj) {
|
||||
if (this.items.indexOf(obj) < 0) {
|
||||
this.items.push(obj);
|
||||
this.onAdded(obj);
|
||||
}
|
||||
}
|
||||
this.get = function(index) { return this.items[index]; }
|
||||
this.clear = function() {
|
||||
this.items = [];
|
||||
if (this.onDeserialized) { this.onDeserialized(); }
|
||||
}
|
||||
this.findById = function(id) {
|
||||
for (var i = 0; i < this.items.length; ++i) {
|
||||
var item = this.items[i];
|
||||
if (item[this.idField] == id) return item;
|
||||
}
|
||||
}
|
||||
|
||||
this.onAdded = function(obj) { }
|
||||
this.onPropertyChanged = function(obj, propertyName, value) { }
|
||||
this.onDeserialized = function() { }
|
||||
|
||||
this.deserialize = function(str) {
|
||||
var header = findHeader(str);
|
||||
if (!header) {
|
||||
alert("Could not find header row, cannot deserialize");
|
||||
return;
|
||||
}
|
||||
this.fieldList = header;
|
||||
this.items = deserializeObjectList(header, str);
|
||||
this.onDeserialized();
|
||||
}
|
||||
this.serialize = function() {
|
||||
return serializeObjectList(this.fieldList, this.items);
|
||||
}
|
||||
}
|
||||
|
||||
function deserializeObject(fieldList, data) {
|
||||
var match = data.match(DataStore_Data_pattern);
|
||||
if (!match) return;
|
||||
|
||||
if (match.length != fieldList._fields.length) {
|
||||
if (showErrorMessages) {
|
||||
alert("Error parsing data object. Expected " + fieldList._fields.length + " fields, but found " + match.length + " fields.\ndata = \"" + data + "\"");
|
||||
showErrorMessages = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
var obj = {};
|
||||
for (var i = 0; i < fieldList._fields.length; ++i) {
|
||||
var s = match[i].match(DataStore_Data_field)[1]; // Strip trailing pipe
|
||||
this.name = options.name;
|
||||
this.objectTypename = options.objectTypename;
|
||||
this.legacyFieldList = options.legacyFieldList;
|
||||
|
||||
this.findById = function(id) {
|
||||
return _.find(this.items, function(obj) { return obj[options.idField] === id; });
|
||||
};
|
||||
this.hasObjectWithId = function(id) {
|
||||
return _.some(this.items, function(obj) { return obj[options.idField] === id; });
|
||||
};
|
||||
this.hasIcon = function() { return iconIDField; };
|
||||
this.getIcon = function(obj) { return obj[options.iconIDField]; };
|
||||
this.getId = function(obj) { return obj[options.idField]; };
|
||||
this.getName = function(obj) {
|
||||
return obj[options.nameField];
|
||||
};
|
||||
this.addNew = function() {
|
||||
var obj = options.newItemTemplate();
|
||||
this.ensureUniqueId(obj);
|
||||
this.items.push(obj);
|
||||
return obj;
|
||||
};
|
||||
this.add = function(o) {
|
||||
this.items.push(o);
|
||||
};
|
||||
this.clone = function(o) {
|
||||
var obj = _.extend({}, o);
|
||||
this.ensureUniqueId(obj);
|
||||
this.items.push(obj);
|
||||
return obj;
|
||||
};
|
||||
this.remove = function(o) {
|
||||
this.items = _.without(this.items, o);
|
||||
};
|
||||
|
||||
var f = fieldList._fields[i];
|
||||
var v = s;
|
||||
var fieldName = fieldList.getFieldName(i);
|
||||
if (f instanceof FieldList) {
|
||||
fieldName = f._name;
|
||||
v = [];
|
||||
var objects = s.match(DataStore_Data_arrayObjectPattern);
|
||||
if (objects) {
|
||||
for (var j = 0; j < objects.length; ++j) {
|
||||
v[j] = deserializeObject(f, objects[j]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for(var j = 0; j < specialEncodings.length; ++j) {
|
||||
var e = specialEncodings[j];
|
||||
v = v.replace(e.encoded_Regex, e.decoded);
|
||||
}
|
||||
}
|
||||
obj[fieldName] = v;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
function deserializeObjectList(fieldList, data) {
|
||||
var result = [];
|
||||
if(!data) return result;
|
||||
var match = data.match(DataStore_Data_linePattern);
|
||||
if(!match) return result;
|
||||
for(var i = 0; i < match.length; ++i) {
|
||||
result[i] = deserializeObject(fieldList, match[i]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function serializeObject(fieldList, obj) {
|
||||
if (!obj) return "";
|
||||
var result = "{";
|
||||
|
||||
for(var i = 0; i < fieldList._fields.length; ++i) {
|
||||
var fieldName = fieldList.getFieldName(i);
|
||||
var f = fieldList._fields[i];
|
||||
var v = obj[fieldName];
|
||||
if (f instanceof FieldList) {
|
||||
if (v && v.length > 0) {
|
||||
result += "{";
|
||||
if (v.length > 1) { result += "\n"; }
|
||||
for(var j = 0; j < v.length; ++j) {
|
||||
if (v.length > 1) { result += "\t"; }
|
||||
result += serializeObject(f, v[j]);
|
||||
if (v.length > 1) { result += "\n"; }
|
||||
}
|
||||
if (v.length > 1) { result += "\t"; }
|
||||
result += "}";
|
||||
this.findFirstFreeId = function(id) {
|
||||
var i = 0;
|
||||
var result = id;
|
||||
while(this.hasObjectWithId(result)) {
|
||||
i = i + 1;
|
||||
result = id + i;
|
||||
}
|
||||
} else if (v != undefined) {
|
||||
v = "" + v;
|
||||
for(var j = 0; j < specialEncodings.length; ++j) {
|
||||
var e = specialEncodings[j];
|
||||
v = v.replace(e.decoded_Regex, e.encoded);
|
||||
}
|
||||
result += v;
|
||||
}
|
||||
result += "|";
|
||||
return result;
|
||||
};
|
||||
this.ensureUniqueId = function(obj) {
|
||||
obj[options.idField] = this.findFirstFreeId(obj[options.idField]);
|
||||
};
|
||||
}
|
||||
result += "}";
|
||||
return result;
|
||||
}
|
||||
|
||||
function serializeObjectList(fieldList, obj) {
|
||||
var result = fieldList.getHeader() + ";\n";
|
||||
if(!obj) return result;
|
||||
|
||||
for(var i = 0; i < obj.length; ++i) {
|
||||
result += serializeObject(fieldList, obj[i]) + ";\n";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
return DataStore;
|
||||
})(_);
|
||||
|
||||
@@ -1,62 +1,201 @@
|
||||
|
||||
var FieldList_Header_fieldName = '[^\\[\\]\\|]*';
|
||||
var FieldList_Header_arrayField = FieldList_Header_fieldName + '\\[(' + FieldList_Header_fieldName + '\\|)*\\]';
|
||||
var FieldList_Header_arrayFieldName = new RegExp(FieldList_Header_fieldName);
|
||||
var FieldList_Header_field = '(' + FieldList_Header_fieldName + '|' + FieldList_Header_arrayField + ')\\|';
|
||||
var FieldList_Header_pattern = new RegExp(FieldList_Header_field, 'g');
|
||||
var FieldList_Header_line = "^(\\[(" + FieldList_Header_field + ")*\\];)$";
|
||||
var FieldList_Header_linePattern = new RegExp(FieldList_Header_line, 'm');
|
||||
var FieldList = (function() {
|
||||
var FieldList_Header_fieldName = '[^\\[\\]\\|]*';
|
||||
var FieldList_Header_arrayField = FieldList_Header_fieldName + '\\[(' + FieldList_Header_fieldName + '\\|)*\\]';
|
||||
var FieldList_Header_arrayFieldName = new RegExp(FieldList_Header_fieldName);
|
||||
var FieldList_Header_field = '(' + FieldList_Header_fieldName + '|' + FieldList_Header_arrayField + ')\\|';
|
||||
var FieldList_Header_pattern = new RegExp(FieldList_Header_field, 'g');
|
||||
var FieldList_Header_line = "^(\\[(" + FieldList_Header_field + ")*\\];)$";
|
||||
var FieldList_Header_linePattern = new RegExp(FieldList_Header_line, 'm');
|
||||
|
||||
function FieldList(header, name) {
|
||||
this._name = name ? name : "";
|
||||
this._fields = [];
|
||||
|
||||
var match = header.match(FieldList_Header_pattern);
|
||||
if (!match) return;
|
||||
|
||||
for (var i = 0; i < match.length; ++i) {
|
||||
var s = match[i].match(FieldList_Header_field)[1]; // Strip trailing pipe
|
||||
function FieldList(header, name) {
|
||||
this._name = name ? name : "";
|
||||
this._fields = [];
|
||||
|
||||
var f = s;
|
||||
if (s.match(FieldList_Header_arrayField)) {
|
||||
var name = s.match(FieldList_Header_arrayFieldName)[0];
|
||||
f = new FieldList(s, name);
|
||||
}
|
||||
this._fields[i] = f;
|
||||
}
|
||||
|
||||
this.getFieldName = function(i) {
|
||||
var f = this._fields[i];
|
||||
if (f instanceof FieldList) {
|
||||
return f._name;
|
||||
} else {
|
||||
return f;
|
||||
}
|
||||
}
|
||||
var match = header.match(FieldList_Header_pattern);
|
||||
if (!match) return;
|
||||
|
||||
this.getHeader = function() {
|
||||
var result = this._name + "[";
|
||||
for(var i = 0; i < this._fields.length; ++i) {
|
||||
for (var i = 0; i < match.length; ++i) {
|
||||
var s = match[i].match(FieldList_Header_field)[1]; // Strip trailing pipe
|
||||
|
||||
var f = s;
|
||||
if (s.match(FieldList_Header_arrayField)) {
|
||||
var name = s.match(FieldList_Header_arrayFieldName)[0];
|
||||
f = new FieldList(s, name);
|
||||
}
|
||||
this._fields[i] = f;
|
||||
}
|
||||
|
||||
this.getFieldName = function(i) {
|
||||
var f = this._fields[i];
|
||||
if (f instanceof FieldList) {
|
||||
result += f.getHeader();
|
||||
return f._name;
|
||||
} else {
|
||||
result += f;
|
||||
return f;
|
||||
}
|
||||
}
|
||||
|
||||
this.getHeader = function() {
|
||||
var result = this._name + "[";
|
||||
for(var i = 0; i < this._fields.length; ++i) {
|
||||
var f = this._fields[i];
|
||||
if (f instanceof FieldList) {
|
||||
result += f.getHeader();
|
||||
} else {
|
||||
result += f;
|
||||
}
|
||||
result += "|";
|
||||
}
|
||||
result += "]";
|
||||
return result;
|
||||
}
|
||||
|
||||
this.getHeaderLine = function() {
|
||||
return this.getHeader() + ";";
|
||||
}
|
||||
}
|
||||
|
||||
function findHeader(str) {
|
||||
var match = str.match(FieldList_Header_linePattern);
|
||||
if (!match) return;
|
||||
return new FieldList(match[0]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
var DataStore_Data_fieldValue = '[^\\{\\}\\|]*';
|
||||
var DataStore_Data_arrayObject = '\\{(' + DataStore_Data_fieldValue + '\\|)*\\}\\s*';
|
||||
var DataStore_Data_arrayObjectPattern = new RegExp(DataStore_Data_arrayObject, 'g');
|
||||
var DataStore_Data_arrayField = '\\{\\s*(' + DataStore_Data_arrayObject + ')*\\s*\\}';
|
||||
var DataStore_Data_field = '(' + DataStore_Data_fieldValue + '|' + DataStore_Data_arrayField + ')\\|';
|
||||
var DataStore_Data_pattern = new RegExp(DataStore_Data_field, 'gm');
|
||||
var DataStore_Data_line = "^(\\{(" + DataStore_Data_field + ")*\\};)$";
|
||||
var DataStore_Data_linePattern = new RegExp(DataStore_Data_line, 'gm');
|
||||
|
||||
var showErrorMessages = true;
|
||||
|
||||
var specialEncodings = [
|
||||
{
|
||||
decoded: "'", decoded_Regex: /'/gm,
|
||||
encoded: "\\'", encoded_Regex: /\\'/gm
|
||||
},
|
||||
{
|
||||
decoded: "\n", decoded_Regex: /\n/gm,
|
||||
encoded: "\\n", encoded_Regex: /\\n/gm
|
||||
}
|
||||
];
|
||||
|
||||
var deserialize = function(str, dataStore) {
|
||||
var header = findHeader(str);
|
||||
if (!header) {
|
||||
alert("Could not find header row, cannot deserialize");
|
||||
return;
|
||||
}
|
||||
dataStore.legacyFieldList = header;
|
||||
dataStore.items = deserializeObjectList(header, str);
|
||||
}
|
||||
var serialize = function(dataStore) {
|
||||
return serializeObjectList(dataStore.fieldList, dataStore.items);
|
||||
}
|
||||
|
||||
|
||||
function deserializeObject(fieldList, data) {
|
||||
var match = data.match(DataStore_Data_pattern);
|
||||
if (!match) return;
|
||||
|
||||
if (match.length != fieldList._fields.length) {
|
||||
if (showErrorMessages) {
|
||||
alert("Error parsing data object. Expected " + fieldList._fields.length + " fields, but found " + match.length + " fields.\ndata = \"" + data + "\"");
|
||||
showErrorMessages = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
var obj = {};
|
||||
for (var i = 0; i < fieldList._fields.length; ++i) {
|
||||
var s = match[i].match(DataStore_Data_field)[1]; // Strip trailing pipe
|
||||
|
||||
var f = fieldList._fields[i];
|
||||
var v = s;
|
||||
var fieldName = fieldList.getFieldName(i);
|
||||
if (f instanceof FieldList) {
|
||||
fieldName = f._name;
|
||||
v = [];
|
||||
var objects = s.match(DataStore_Data_arrayObjectPattern);
|
||||
if (objects) {
|
||||
for (var j = 0; j < objects.length; ++j) {
|
||||
v[j] = deserializeObject(f, objects[j]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for(var j = 0; j < specialEncodings.length; ++j) {
|
||||
var e = specialEncodings[j];
|
||||
v = v.replace(e.encoded_Regex, e.decoded);
|
||||
}
|
||||
}
|
||||
obj[fieldName] = v;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
function deserializeObjectList(fieldList, data) {
|
||||
var result = [];
|
||||
if(!data) return result;
|
||||
var match = data.match(DataStore_Data_linePattern);
|
||||
if(!match) return result;
|
||||
for(var i = 0; i < match.length; ++i) {
|
||||
result[i] = deserializeObject(fieldList, match[i]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function serializeObject(fieldList, obj) {
|
||||
if (!obj) return "";
|
||||
var result = "{";
|
||||
|
||||
for(var i = 0; i < fieldList._fields.length; ++i) {
|
||||
var fieldName = fieldList.getFieldName(i);
|
||||
var f = fieldList._fields[i];
|
||||
var v = obj[fieldName];
|
||||
if (f instanceof FieldList) {
|
||||
if (v && v.length > 0) {
|
||||
result += "{";
|
||||
if (v.length > 1) { result += "\n"; }
|
||||
for(var j = 0; j < v.length; ++j) {
|
||||
if (v.length > 1) { result += "\t"; }
|
||||
result += serializeObject(f, v[j]);
|
||||
if (v.length > 1) { result += "\n"; }
|
||||
}
|
||||
if (v.length > 1) { result += "\t"; }
|
||||
result += "}";
|
||||
}
|
||||
} else if (v != undefined) {
|
||||
v = "" + v;
|
||||
for(var j = 0; j < specialEncodings.length; ++j) {
|
||||
var e = specialEncodings[j];
|
||||
v = v.replace(e.decoded_Regex, e.encoded);
|
||||
}
|
||||
result += v;
|
||||
}
|
||||
result += "|";
|
||||
}
|
||||
result += "]";
|
||||
result += "}";
|
||||
return result;
|
||||
}
|
||||
|
||||
this.getHeaderLine = function() {
|
||||
return this.getHeader() + ";";
|
||||
|
||||
function serializeObjectList(fieldList, obj) {
|
||||
var result = fieldList.getHeader() + ";\n";
|
||||
if(!obj) return result;
|
||||
|
||||
for(var i = 0; i < obj.length; ++i) {
|
||||
result += serializeObject(fieldList, obj[i]) + ";\n";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
function findHeader(str) {
|
||||
var match = str.match(FieldList_Header_linePattern);
|
||||
if (!match) return;
|
||||
return new FieldList(match[0]);
|
||||
}
|
||||
|
||||
return {
|
||||
FieldList: FieldList
|
||||
,deserialize: deserialize
|
||||
,serialize: serialize
|
||||
};
|
||||
})();
|
||||
|
||||
14
AndorsTrailEdit/app.js
Normal file
14
AndorsTrailEdit/app.js
Normal file
@@ -0,0 +1,14 @@
|
||||
var app = (function(controllers) {
|
||||
return angular
|
||||
.module('ateditor', [])
|
||||
.config(['$routeProvider', function($routeProvider) {
|
||||
$routeProvider
|
||||
.when('/actorcondition/edit/:id', {templateUrl: 'edit_actorcondition.html', controller: controllers.ActorConditionController})
|
||||
.when('/quest/edit/:id', {templateUrl: 'edit_quest.html', controller: controllers.QuestController})
|
||||
.when('/item/edit/:id', {templateUrl: 'edit_item.html', controller: controllers.ItemController})
|
||||
.when('/droplist/edit/:id', {templateUrl: 'edit_droplist.html', controller: controllers.DropListController})
|
||||
.when('/dialogue/edit/:id', {templateUrl: 'edit_dialogue.html', controller: controllers.DialogueController})
|
||||
.when('/monster/edit/:id', {templateUrl: 'edit_monster.html', controller: controllers.MonsterController})
|
||||
.when('/itemcategory/edit/:id', {templateUrl: 'edit_itemcategory.html', controller: controllers.ItemCategoryController});
|
||||
}]);
|
||||
})(controllers);
|
||||
118
AndorsTrailEdit/controllers.js
Normal file
118
AndorsTrailEdit/controllers.js
Normal file
@@ -0,0 +1,118 @@
|
||||
var controllers = (function(model) {
|
||||
|
||||
function NavigationController($scope, $routeParams) {
|
||||
$scope.sections = model.sections;
|
||||
$scope.previousItems = [];
|
||||
|
||||
$scope.editObj = function(section, obj) {
|
||||
$scope.previousItems = _.reject($scope.previousItems, function(i) {
|
||||
return (i.section === section) && (i.obj === obj);
|
||||
});
|
||||
$scope.previousItems.unshift({section: section, obj: obj});
|
||||
if ($scope.previousItems.length > 5) {
|
||||
$scope.previousItems.pop();
|
||||
}
|
||||
window.location = "#/" + section.objectTypename + "/edit/" + obj.id;
|
||||
};
|
||||
$scope.addObj = function(section) {
|
||||
var item = section.addNew();
|
||||
$scope.editObj(section, item);
|
||||
};
|
||||
$scope.clear = function(section) {
|
||||
if(!confirm("Are you sure you want to clear all " + section.name + " ?")) return;
|
||||
section.items = [];
|
||||
};
|
||||
$scope.getName = function(section, obj) {
|
||||
return section.getName(obj);
|
||||
}
|
||||
$scope.delObj = function(section, obj) {
|
||||
if(!confirm("Are you sure you want to remove " + section.getName(obj) + " ?")) return;
|
||||
this.destroy(function() {
|
||||
section.remove(obj);
|
||||
});
|
||||
};
|
||||
$scope.dupObj = function(section, obj) {
|
||||
var item = section.clone(obj);
|
||||
$scope.editObj(section, item);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
function ActorConditionController($scope, $routeParams) {
|
||||
$scope.datasource = model.actorConditions;
|
||||
$scope.obj = model.actorConditions.findById($routeParams.id);
|
||||
}
|
||||
function QuestController($scope, $routeParams) {
|
||||
$scope.datasource = model.quests;
|
||||
$scope.obj = model.quests.findById($routeParams.id);
|
||||
}
|
||||
function ItemController($scope, $routeParams) {
|
||||
$scope.datasource = model.items;
|
||||
$scope.obj = model.items.findById($routeParams.id);
|
||||
}
|
||||
function DropListController($scope, $routeParams) {
|
||||
$scope.datasource = model.droplists;
|
||||
$scope.obj = model.droplists.findById($routeParams.id);
|
||||
}
|
||||
function DialogueController($scope, $routeParams) {
|
||||
$scope.datasource = model.dialogue;
|
||||
$scope.obj = model.dialogue.findById($routeParams.id);
|
||||
}
|
||||
function MonsterController($scope, $routeParams) {
|
||||
$scope.datasource = model.monsters;
|
||||
var m = model.monsters.findById($routeParams.id) || {};
|
||||
m.attackDamage = m.attackDamage || {};
|
||||
m.hasConversation = m.phraseID;
|
||||
m.hasCombatTraits = m.attackChance || m.attackDamage.min || m.criticalSkill || m.criticalMultiplier || m.blockChance || m.damageResistance || m.hitEffect;
|
||||
m.hasHitEffect = m.hitEffect;
|
||||
m.hitEffect = m.hitEffect || { conditionsSource: [], conditionsTarget: [] };
|
||||
$scope.obj = m;
|
||||
$scope.getExperience = function(obj) {
|
||||
/*
|
||||
final float avgAttackHP = t.getAttacksPerTurn(maxAP) * div100(t.attackChance) * t.damagePotential.averagef() * (1 + div100(t.criticalChance) * t.criticalMultiplier);
|
||||
final float avgDefenseHP = maxHP * (1 + div100(t.blockChance)) + Constants.EXP_FACTOR_DAMAGERESISTANCE * t.damageResistance;
|
||||
return (int) Math.ceil((avgAttackHP * 3 + avgDefenseHP) * Constants.EXP_FACTOR_SCALING);
|
||||
*/
|
||||
|
||||
var EXP_FACTOR_DAMAGERESISTANCE = 9;
|
||||
var EXP_FACTOR_SCALING = 0.7;
|
||||
|
||||
var div100 = function(v) { return v / 100; }
|
||||
var v = function(i) { return i ? i : 0; }
|
||||
|
||||
var attacksPerTurn = Math.floor(v(obj.maxAP) / v(obj.attackCost));
|
||||
var avgDamagePotential = (v(obj.attackDamage.min) + v(obj.attackDamage.max)) / 2;
|
||||
var avgAttackHP = attacksPerTurn * div100(v(obj.attackChance)) * avgDamagePotential * (1 + div100(v(obj.criticalSkill)) * v(obj.criticalMultiplier));
|
||||
var avgDefenseHP = v(obj.maxHP) * (1 + div100(v(obj.blockChance))) + EXP_FACTOR_DAMAGERESISTANCE * v(obj.damageResistance);
|
||||
var experience = (avgAttackHP * 3 + avgDefenseHP) * EXP_FACTOR_SCALING;
|
||||
|
||||
return Math.ceil(experience);
|
||||
};
|
||||
$scope.recalculateExperience = function() {
|
||||
$scope.experience = $scope.getExperience($scope.obj);
|
||||
};
|
||||
$scope.recalculateExperience();
|
||||
$scope.addCondition = function(list) {
|
||||
list.push({magnitude:1, duration:1, chance:100});
|
||||
};
|
||||
$scope.removeCondition = function(list, cond) {
|
||||
var idx = list.indexOf(cond);
|
||||
list.splice(idx, 1);
|
||||
};
|
||||
}
|
||||
function ItemCategoryController($scope, $routeParams) {
|
||||
$scope.datasource = model.itemCategories;
|
||||
$scope.obj = model.itemCategories.findById($routeParams.id);
|
||||
}
|
||||
|
||||
return {
|
||||
NavigationController: NavigationController
|
||||
,ActorConditionController: ActorConditionController
|
||||
,QuestController: QuestController
|
||||
,ItemController: ItemController
|
||||
,DropListController: DropListController
|
||||
,DialogueController: DialogueController
|
||||
,MonsterController: MonsterController
|
||||
,ItemCategoryController: ItemCategoryController
|
||||
};
|
||||
})(model);
|
||||
55
AndorsTrailEdit/directives.js
Normal file
55
AndorsTrailEdit/directives.js
Normal file
@@ -0,0 +1,55 @@
|
||||
(function(app, $) {
|
||||
|
||||
// Copied from http://jsfiddle.net/p69aT/
|
||||
// -> originally from https://groups.google.com/forum/?fromgroups=#!topic/angular/7XVOebG6z6E
|
||||
app.directive('fadey', function() {
|
||||
return {
|
||||
restrict: 'A',
|
||||
link: function(scope, elm, attrs) {
|
||||
elm = $(elm);
|
||||
elm.hide();
|
||||
elm.fadeIn();
|
||||
|
||||
scope.destroy = function(complete) {
|
||||
elm.slideUp(function() {
|
||||
if (complete) {
|
||||
complete.apply(scope);
|
||||
}
|
||||
});
|
||||
elm.fadeOut();
|
||||
};
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
// Copied from
|
||||
// http://www.codeproject.com/Articles/464939/Angular-JS-Using-Directives-to-Create-Custom-Attri
|
||||
app.directive('ngDsFade', function () {
|
||||
return function(scope, element, attrs) {
|
||||
element.css('display', 'none');
|
||||
scope.$watch(attrs.ngDsFade, function(value) {
|
||||
if (value) {
|
||||
element.fadeIn(400);
|
||||
} else {
|
||||
element.fadeOut(300);
|
||||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
app.directive('ngTileImage', function () {
|
||||
return function(scope, element, attrs) {
|
||||
element.css('display', 'none');
|
||||
scope.$watch(attrs.ngDsFade, function(value) {
|
||||
if (value) {
|
||||
element.fadeIn(400);
|
||||
} else {
|
||||
element.fadeOut(300);
|
||||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
})(app, jQuery);
|
||||
5
AndorsTrailEdit/edit_actorcondition.html
Normal file
5
AndorsTrailEdit/edit_actorcondition.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<div>
|
||||
<p>id: {{obj.id}}</p>
|
||||
<input type="text" ng-model="obj.id"><br />
|
||||
<input type="text" ng-model="obj.name"><br />
|
||||
</div>
|
||||
5
AndorsTrailEdit/edit_dialogue.html
Normal file
5
AndorsTrailEdit/edit_dialogue.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<div>
|
||||
<p>id: {{obj.id}}</p>
|
||||
<input type="text" ng-model="obj.id"><br />
|
||||
<input type="text" ng-model="obj.name"><br />
|
||||
</div>
|
||||
5
AndorsTrailEdit/edit_droplist.html
Normal file
5
AndorsTrailEdit/edit_droplist.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<div>
|
||||
<p>id: {{obj.id}}</p>
|
||||
<input type="text" ng-model="obj.id"><br />
|
||||
<input type="text" ng-model="obj.name"><br />
|
||||
</div>
|
||||
5
AndorsTrailEdit/edit_item.html
Normal file
5
AndorsTrailEdit/edit_item.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<div>
|
||||
<p>id: {{obj.id}}</p>
|
||||
<input type="text" ng-model="obj.id"><br />
|
||||
<input type="text" ng-model="obj.name"><br />
|
||||
</div>
|
||||
5
AndorsTrailEdit/edit_itemcategory.html
Normal file
5
AndorsTrailEdit/edit_itemcategory.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<div>
|
||||
<p>id: {{obj.id}}</p>
|
||||
<input type="text" ng-model="obj.id"><br />
|
||||
<input type="text" ng-model="obj.name"><br />
|
||||
</div>
|
||||
198
AndorsTrailEdit/edit_monster.html
Normal file
198
AndorsTrailEdit/edit_monster.html
Normal file
@@ -0,0 +1,198 @@
|
||||
<h3>Monster / NPC</h3>
|
||||
<fieldset class="fieldSet">
|
||||
<legend>General</legend>
|
||||
<div class="fieldWithLabel">
|
||||
<div id="monsterimage" class="field"><input type="hidden" ng-model="obj.iconID" /></div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="id" class="label">Internal id:</label>
|
||||
<input class="field" type="text" size="30" id="id" ng-model="obj.id" class="fieldInput"/>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="name" class="label">Display name:</label>
|
||||
<input class="field" type="text" size="30" id="name" ng-model="obj.name" class="fieldInput"/>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="spawnGroup" class="label">Spawngroup:</label>
|
||||
<input class="field" type="text" size="30" id="spawnGroup" ng-model="obj.spawnGroup" class="fieldInput" title="This is a grouping of monster types. Use these tags on spawn areas to spawn random monsters with the same tag. Several monsters may have the same tag." />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="size" class="label">Size:</label>
|
||||
<select class="field" id="size" ng-model="obj.size">
|
||||
<option value="">1x1</option>
|
||||
<option value="1x2">1x2</option>
|
||||
<option value="1x3">1x3</option>
|
||||
<option value="2x1">2x1</option>
|
||||
<option value="2x2">2x2</option>
|
||||
<option value="2x3">2x3</option>
|
||||
<option value="3x1">3x1</option>
|
||||
<option value="3x2">3x2</option>
|
||||
<option value="3x3">3x3</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="faction" class="label">Faction:</label>
|
||||
<input class="field" type="text" size="30" id="faction" ng-model="obj.faction" class="fieldInput"/>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<div class="label"><input type="checkbox" id="unique" ng-model="obj.isUnique" />Is unique (will not respawn)</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="monsterClass" class="label">Monster class:</label>
|
||||
<select class="field" id="monsterClass" ng-model="obj.monsterClass">
|
||||
<option value="0">Humanoid</option>
|
||||
<option value="1">Insect</option>
|
||||
<option value="2">Demon</option>
|
||||
<option value="3">Construct</option>
|
||||
<option value="4">Animal</option>
|
||||
<option value="5">Giant</option>
|
||||
<option value="6">Undead</option>
|
||||
<option value="7">Reptile</option>
|
||||
<option value="8">Ghost</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<div class="label"><input type="checkbox" id="hasConversation" ng-model="obj.hasConversation" />Has conversation</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel" id="hasConversationDisplay" ng-ds-fade="obj.hasConversation">
|
||||
<label for="phraseID" class="label">Conversation phrase ID:</label>
|
||||
<input class="field" type="text" size="30" id="phraseID" ng-model="obj.phraseID" class="fieldInput" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="droplistID" class="label">Droplist ID (combat or shop):</label>
|
||||
<input class="field" type="text" size="30" id="droplistID" ng-model="obj.droplistID" class="fieldInput"/>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="fieldSet">
|
||||
<legend>Stats</legend>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="maxAP" class="label">Total AP:</label>
|
||||
<input class="field" type="text" size="5" id="maxAP" ng-model="obj.maxAP" class="fieldInput integer" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="moveCost" class="label">Movement cost (AP):</label>
|
||||
<input class="field" type="text" size="5" id="moveCost" ng-model="obj.moveCost" class="fieldInput integer" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="maxHP" class="label">Max HP:</label>
|
||||
<input class="field" type="text" size="5" id="maxHP" ng-model="obj.maxHP" class="fieldInput integer" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<div class="label"><input type="checkbox" id="hasCombat" ng-model="obj.hasCombatTraits" />Has combat traits</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="fieldSet" id="hasCombatDisplay" ng-ds-fade="obj.hasCombatTraits">
|
||||
<legend>Combat</legend>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="experience" class="label">Experience:</label>
|
||||
<input class="field" type="text" size="7" id="experience" ng-model="experience" class="fieldInput integer" readonly="readonly" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="attackCost" class="label">Attack cost (AP):</label>
|
||||
<input class="field" type="text" size="5" id="attackCost" ng-model="obj.attackCost" class="fieldInput integer" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="attackChance" class="label">Attack chance:</label>
|
||||
<div class="field"><input type="text" size="5" id="attackChance" ng-model="obj.attackChance" class="fieldInput integer" />%</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="attackDamage" class="label">Attack damage (range):</label>
|
||||
<div class="field">
|
||||
<input type="text" size="3" id="attackDamage_Min" ng-model="obj.attackDamage.min" class="fieldInput integer" />
|
||||
-
|
||||
<input type="text" size="3" id="attackDamage_Max" ng-model="obj.attackDamage.max" class="fieldInput integer" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<div class="label"><input type="checkbox" id="hasCritical" ng-model="obj.hasCritical" />Has critical chance</div>
|
||||
</div>
|
||||
<div id="hasCriticalDisplay" ng-ds-fade="obj.hasCritical">
|
||||
<div class="fieldWithLabel">
|
||||
<label for="criticalSkill" class="label">Critical skill:</label>
|
||||
<input class="field" type="text" size="5" id="criticalSkill" ng-model="obj.criticalSkill" class="fieldInput integer" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="criticalMultiplier" class="label">Critical multiplier:</label>
|
||||
<input class="field" type="text" size="5" id="criticalMultiplier" ng-model="obj.criticalMultiplier" class="fieldInput integer" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="blockChance" class="label">Block chance:</label>
|
||||
<div class="field"><input type="text" size="5" id="blockChance" ng-model="obj.blockChance" class="fieldInput integer" />%</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="damageResistance" class="label">Damage resistance:</label>
|
||||
<input class="field" type="text" size="5" id="damageResistance" ng-model="obj.damageResistance" class="fieldInput integer" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<div class="label"><input type="checkbox" id="hasHitEffect" ng-model="obj.hasHitEffect" />Has effect on each hit</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="fieldSet" id="hasHitEffectDisplay" ng-ds-fade="obj.hasHitEffect">
|
||||
<legend>On every successful attack hit</legend>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="onHit_boostHP" class="label">Boost current HP (range):</label>
|
||||
<div class="field">
|
||||
<input type="text" size="3" id="onHit_boostHP_Min" ng-model="obj.hitEffect.increaseCurrentHP.min" class="fieldInput integer" />
|
||||
-
|
||||
<input type="text" size="3" id="onHit_boostHP_Max" ng-model="obj.hitEffect.increaseCurrentHP.max" class="fieldInput integer" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="onHit_boostAP" class="label">Boost current AP (range):</label>
|
||||
<div class="field">
|
||||
<input type="text" size="3" id="onHit_boostAP_Min" ng-model="obj.hitEffect.increaseCurrentAP.min" class="fieldInput integer" />
|
||||
-
|
||||
<input type="text" size="3" id="onHit_boostAP_Max" ng-model="obj.hitEffect.increaseCurrentAP.max" class="fieldInput integer" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="onHit_conditionsSource" class="label">Conditions added to source</label>
|
||||
<table class="field" id="onHit_conditionsSource">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Condition</th>
|
||||
<th>Magnitude</th>
|
||||
<th>Duration</th>
|
||||
<th>Chance</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="condition in obj.hitEffect.conditionsSource">
|
||||
<td><input type="text" ng-model="condition.condition" class="fieldInput" /></td>
|
||||
<td><input type="text" size="3" ng-model="condition.magnitude" class="fieldInput integer" /></td>
|
||||
<td><input type="text" size="3" ng-model="condition.duration" class="fieldInput integer" /></td>
|
||||
<td><input type="text" size="3" ng-model="condition.chance" class="fieldInput" /></td>
|
||||
<td><a ng-click="removeCondition(obj.hitEffect.conditionsSource, condition)">X</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<button ng-click="addCondition(obj.hitEffect.conditionsSource)">Add</button>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="onHit_conditionsTarget" class="label">Conditions added to target</label>
|
||||
<table class="field" id="onHit_conditionsTarget">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Condition</th>
|
||||
<th>Magnitude</th>
|
||||
<th>Duration</th>
|
||||
<th>Chance</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="condition in obj.hitEffect.conditionsTarget">
|
||||
<td><input type="text" ng-model="condition.condition" class="fieldInput" /></td>
|
||||
<td><input type="text" size="3" ng-model="condition.magnitude" class="fieldInput integer" /></td>
|
||||
<td><input type="text" size="3" ng-model="condition.duration" class="fieldInput integer" /></td>
|
||||
<td><input type="text" size="3" ng-model="condition.chance" class="fieldInput" /></td>
|
||||
<td><a ng-click="removeCondition(obj.hitEffect.conditionsTarget, condition)">X</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<button ng-click="obj.hitEffect.conditionsTarget.push({magnitude:1, duration:1, chance:100})">Add</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="endSets"> </div>
|
||||
5
AndorsTrailEdit/edit_quest.html
Normal file
5
AndorsTrailEdit/edit_quest.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<div>
|
||||
<p>id: {{obj.id}}</p>
|
||||
<input type="text" ng-model="obj.id"><br />
|
||||
<input type="text" ng-model="obj.name"><br />
|
||||
</div>
|
||||
@@ -1,23 +1,18 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" ng-app="ateditor">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<link rel="shortcut icon" href="http://andorstrail.com/favicon.ico"/>
|
||||
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.11/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.11/jquery-ui.min.js"></script>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="styles2.css" />
|
||||
<link rel="stylesheet" type="text/css" href="inc/ui.dynatree.css" />
|
||||
<script type="text/javascript" src="AndorsTrailEditor.js"></script>
|
||||
<title>Andor's Trail Content Editor</title>
|
||||
<meta charset="utf-8">
|
||||
<link rel="stylesheet" href="styles2.css" />
|
||||
<link rel="stylesheet" href="inc/ui.dynatree.css" />
|
||||
<link rel="stylesheet" href="inc/bootstrap/css/bootstrap.min.css" />
|
||||
<title>ee</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="screen">
|
||||
<div id="top">
|
||||
<div class="andorsTrailLogo" id="title">
|
||||
Andor's Trail Content Editor
|
||||
ee
|
||||
<span id="version">
|
||||
v0.7.0dev
|
||||
</span>
|
||||
@@ -28,247 +23,69 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/template" id="listitem">
|
||||
<li><img />{{name}}</li>
|
||||
</script>
|
||||
|
||||
<div id="left" class="workarea">
|
||||
<div id="tools">
|
||||
<h3><a href="#">Actor conditions</a></h3>
|
||||
<div id="actorconditionlist">
|
||||
<div class="tools-buttons">
|
||||
<div id="add">Add</div>
|
||||
<div id="clear">Clear</div>
|
||||
<div id="tools" ng-controller="controllers.NavigationController" ng-init="$('.collapse').collapse()">
|
||||
<div class="accordion" id="accordion2">
|
||||
<div class="accordion-group" ng-show="previousItems.length > 0">
|
||||
<div class="accordion-heading">
|
||||
<a class="accordion-toggle" data-toggle="collapse" href="#collapse-previous">Recently opened</a>
|
||||
</div>
|
||||
<div id="collapse-previous" class="accordion-body collapse">
|
||||
<div class="accordion-inner">
|
||||
<ul class="itemlist">
|
||||
<li ng-repeat="p in previousItems" ng-click="editObj(p.section, p.obj)" fadey>
|
||||
<img />{{getName(p.section, p.obj)}}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="itemlist"> </ul>
|
||||
</div>
|
||||
|
||||
<h3><a href="#">Quests</a></h3>
|
||||
<div id="questlist">
|
||||
<div class="tools-buttons">
|
||||
<div id="add">Add</div>
|
||||
<div id="clear">Clear</div>
|
||||
<div class="accordion-group" ng-repeat="section in sections">
|
||||
<div class="accordion-heading">
|
||||
<a class="accordion-toggle" data-toggle="collapse" ng-href="#collapse-{{section.objectTypename}}">
|
||||
{{section.name}}
|
||||
</a>
|
||||
</div>
|
||||
<div id="collapse-{{section.objectTypename}}" class="accordion-body collapse">
|
||||
<div class="accordion-inner">
|
||||
<div class="tools-buttons">
|
||||
<button ng-click="addObj(section)">Add</button>
|
||||
<button ng-click="clear(section)">Clear</button>
|
||||
</div>
|
||||
<ul class="itemlist">
|
||||
<li ng-repeat="obj in section.items" ng-click="editObj(section, obj)" fadey>
|
||||
<div style="float: left;">
|
||||
<img style="float: left;"/>
|
||||
{{getName(section, obj)}}
|
||||
</div>
|
||||
<div style="float: right;">
|
||||
<a ng-click="dupObj(section, obj)">D</a>
|
||||
<a ng-click="delObj(section, obj)">X</a>
|
||||
</div>
|
||||
<div style="clear: both;"> </div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="itemlist"> </ul>
|
||||
</div>
|
||||
|
||||
<h3><a href="#">Items</a></h3>
|
||||
<div id="itemlist">
|
||||
<div class="tools-buttons">
|
||||
<div id="add">Add</div>
|
||||
<div id="clear">Clear</div>
|
||||
</div>
|
||||
<ul class="itemlist"> </ul>
|
||||
</div>
|
||||
|
||||
<h3><a href="#">Droplists</a></h3>
|
||||
<div id="droplist">
|
||||
<div class="tools-buttons">
|
||||
<div id="add">Add</div>
|
||||
<div id="clear">Clear</div>
|
||||
</div>
|
||||
<ul class="itemlist"> </ul>
|
||||
</div>
|
||||
|
||||
<h3><a href="#">Dialogue</a></h3>
|
||||
<div id="conversationlist">
|
||||
<div class="tools-buttons">
|
||||
<div id="add">Add</div>
|
||||
<div id="clear">Clear</div>
|
||||
</div>
|
||||
<ul class="itemlist"> </ul>
|
||||
</div>
|
||||
|
||||
<h3><a href="#">Monsters & NPCs</a></h3>
|
||||
<div id="monsterlist">
|
||||
<div class="tools-buttons">
|
||||
<div id="add">Add</div>
|
||||
<div id="clear">Clear</div>
|
||||
</div>
|
||||
<ul class="itemlist"> </ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="center" class="workarea">
|
||||
<div id="tabs">
|
||||
<ul>
|
||||
<li><a href="#tabs-1">Start</a></li>
|
||||
</ul>
|
||||
<div id="tabs-1">
|
||||
<h3>Welcome to the content editor for Andor's Trail.</h3>
|
||||
Start by importing some content from the game by pressing the top right "Import" button.<br />
|
||||
Or you could start by creating new content by selecting something from the left list.<br />
|
||||
<br />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="center" class="workarea" ng-view></div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="hidden" id="templates">
|
||||
|
||||
<!-- ========================================================= -->
|
||||
<!-- Monster editor -->
|
||||
|
||||
<div id="editMonster">
|
||||
<h3>Monster / NPC</h3>
|
||||
<fieldset class="fieldSet">
|
||||
<legend>General</legend>
|
||||
<div class="fieldWithLabel">
|
||||
<div id="monsterimage" class="field"><input type="hidden" id="iconID" /></div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="id" class="label">Internal id:</label>
|
||||
<input class="field" type="text" size="30" id="id" class="fieldInput"/>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="name" class="label">Display name:</label>
|
||||
<input class="field" type="text" size="30" id="name" class="fieldInput"/>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="tags" class="label">Spawngroup:</label>
|
||||
<input class="field" type="text" size="30" id="tags" class="fieldInput" title="This is a grouping of monster types. Use these tags on spawn areas to spawn random monsters with the same tag. Several monsters may have the same tag." />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="size" class="label">Size:</label>
|
||||
<input class="field" type="text" size="5" id="size" class="fieldInput" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="faction" class="label">Faction:</label>
|
||||
<input class="field" type="text" size="30" id="faction" class="fieldInput"/>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<div class="label"><input type="checkbox" id="unique" />Is unique (will not respawn)</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="monsterClass" class="label">Monster class:</label>
|
||||
<select class="field" id="monsterClass">
|
||||
<option value="0">Humanoid</option>
|
||||
<option value="1">Insect</option>
|
||||
<option value="2">Demon</option>
|
||||
<option value="3">Construct</option>
|
||||
<option value="4">Animal</option>
|
||||
<option value="5">Giant</option>
|
||||
<option value="6">Undead</option>
|
||||
<option value="7">Reptile</option>
|
||||
<option value="8">Ghost</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<div class="label"><input type="checkbox" id="hasConversation" />Has conversation</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel" id="hasConversationDisplay">
|
||||
<label for="phraseID" class="label">Conversation phrase ID:</label>
|
||||
<input class="field" type="text" size="30" id="phraseID" class="fieldInput" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="droplistID" class="label">Droplist ID (combat or shop):</label>
|
||||
<input class="field" type="text" size="30" id="droplistID" class="fieldInput"/>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="fieldSet">
|
||||
<legend>Stats</legend>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="maxAP" class="label">Total AP:</label>
|
||||
<input class="field" type="text" size="5" id="maxAP" class="fieldInput integer" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="moveCost" class="label">Movement cost (AP):</label>
|
||||
<input class="field" type="text" size="5" id="moveCost" class="fieldInput integer" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="maxHP" class="label">Max HP:</label>
|
||||
<input class="field" type="text" size="5" id="maxHP" class="fieldInput integer" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<div class="label"><input type="checkbox" id="hasCombat" />Has combat traits</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="fieldSet" id="hasCombatDisplay">
|
||||
<legend>Combat</legend>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="experience" class="label">Experience:</label>
|
||||
<input class="field" type="text" size="7" id="experience" class="fieldInput integer" readonly="readonly" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="attackCost" class="label">Attack cost (AP):</label>
|
||||
<input class="field" type="text" size="5" id="attackCost" class="fieldInput integer" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="attackChance" class="label">Attack chance:</label>
|
||||
<div class="field"><input type="text" size="5" id="attackChance" class="fieldInput integer" />%</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="attackDamage" class="label">Attack damage (range):</label>
|
||||
<div class="field"><input type="text" size="3" id="attackDamage_Min" class="fieldInput integer" /> - <input type="text" size="3" id="attackDamage_Max" class="fieldInput integer" /></div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<div class="label"><input type="checkbox" id="hasCritical" />Has critical chance</div>
|
||||
</div>
|
||||
<div id="hasCriticalDisplay">
|
||||
<div class="fieldWithLabel">
|
||||
<label for="criticalChance" class="label">Critical skill:</label>
|
||||
<div class="field"><input type="text" size="5" id="criticalChance" class="fieldInput integer" />%</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="criticalMultiplier" class="label">Critical multiplier:</label>
|
||||
<input class="field" type="text" size="5" id="criticalMultiplier" class="fieldInput integer" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="blockChance" class="label">Block chance:</label>
|
||||
<div class="field"><input type="text" size="5" id="blockChance" class="fieldInput integer" />%</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="damageResistance" class="label">Damage resistance:</label>
|
||||
<input class="field" type="text" size="5" id="damageResistance" class="fieldInput integer" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<div class="label"><input type="checkbox" id="hasHitEffect" />Has effect on each hit</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="fieldSet" id="hasHitEffectDisplay">
|
||||
<legend>On every successful attack hit</legend>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="onHit_boostHP" class="label">Boost current HP (range):</label>
|
||||
<div class="field"><input type="text" size="3" id="onHit_boostHP_Min" class="fieldInput" /> - <input type="text" size="3" id="onHit_boostHP_Max" class="fieldInput integer" /></div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="onHit_boostAP" class="label">Boost current AP (range):</label>
|
||||
<div class="field"><input type="text" size="3" id="onHit_boostAP_Min" class="fieldInput" /> - <input type="text" size="3" id="onHit_boostAP_Max" class="fieldInput integer" /></div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="onHit_conditionsSource" class="label">Conditions added to source</label>
|
||||
<table class="field" id="onHit_conditionsSource">
|
||||
<thead><tr>
|
||||
<th id="condition">Condition</th>
|
||||
<th id="magnitude">Magnitude</th>
|
||||
<th id="duration">Duration</th>
|
||||
<th id="chance">Chance</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="add">Add</div>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="onHit_conditionsTarget" class="label">Conditions added to target</label>
|
||||
<table class="field" id="onHit_conditionsTarget">
|
||||
<thead><tr>
|
||||
<th id="condition">Condition</th>
|
||||
<th id="magnitude">Magnitude</th>
|
||||
<th id="duration">Duration</th>
|
||||
<th id="chance">Chance</th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="add">Add</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div class="endSets"> </div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="dialog-onHitConditions">
|
||||
@@ -1006,9 +823,16 @@
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(startEditor);
|
||||
</script>
|
||||
<script src="inc/jquery.min.js"></script>
|
||||
<script src="inc/underscore-min.js"></script>
|
||||
<script src="inc/angular.min.js"></script>
|
||||
<script src="inc/bootstrap/js/bootstrap.min.js"></script>
|
||||
<script src="FieldList.js"></script>
|
||||
<script src="DataStore.js"></script>
|
||||
<script src="model.js"></script>
|
||||
<script src="controllers.js"></script>
|
||||
<script src="app.js"></script>
|
||||
<script src="directives.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
159
AndorsTrailEdit/inc/angular.min.js
vendored
Normal file
159
AndorsTrailEdit/inc/angular.min.js
vendored
Normal file
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
AngularJS v1.0.3
|
||||
(c) 2010-2012 Google, Inc. http://angularjs.org
|
||||
License: MIT
|
||||
*/
|
||||
(function(U,ca,p){'use strict';function m(b,a,c){var d;if(b)if(N(b))for(d in b)d!="prototype"&&d!="length"&&d!="name"&&b.hasOwnProperty(d)&&a.call(c,b[d],d);else if(b.forEach&&b.forEach!==m)b.forEach(a,c);else if(L(b)&&wa(b.length))for(d=0;d<b.length;d++)a.call(c,b[d],d);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d);return b}function lb(b){var a=[],c;for(c in b)b.hasOwnProperty(c)&&a.push(c);return a.sort()}function ec(b,a,c){for(var d=lb(b),e=0;e<d.length;e++)a.call(c,b[d[e]],d[e]);return d}
|
||||
function mb(b){return function(a,c){b(c,a)}}function xa(){for(var b=Z.length,a;b;){b--;a=Z[b].charCodeAt(0);if(a==57)return Z[b]="A",Z.join("");if(a==90)Z[b]="0";else return Z[b]=String.fromCharCode(a+1),Z.join("")}Z.unshift("0");return Z.join("")}function x(b){m(arguments,function(a){a!==b&&m(a,function(a,d){b[d]=a})});return b}function G(b){return parseInt(b,10)}function ya(b,a){return x(new (x(function(){},{prototype:b})),a)}function D(){}function ma(b){return b}function I(b){return function(){return b}}
|
||||
function t(b){return typeof b=="undefined"}function v(b){return typeof b!="undefined"}function L(b){return b!=null&&typeof b=="object"}function F(b){return typeof b=="string"}function wa(b){return typeof b=="number"}function na(b){return Sa.apply(b)=="[object Date]"}function J(b){return Sa.apply(b)=="[object Array]"}function N(b){return typeof b=="function"}function oa(b){return b&&b.document&&b.location&&b.alert&&b.setInterval}function R(b){return F(b)?b.replace(/^\s*/,"").replace(/\s*$/,""):b}function fc(b){return b&&
|
||||
(b.nodeName||b.bind&&b.find)}function Ta(b,a,c){var d=[];m(b,function(b,g,i){d.push(a.call(c,b,g,i))});return d}function gc(b,a){var c=0,d;if(J(b)||F(b))return b.length;else if(L(b))for(d in b)(!a||b.hasOwnProperty(d))&&c++;return c}function za(b,a){if(b.indexOf)return b.indexOf(a);for(var c=0;c<b.length;c++)if(a===b[c])return c;return-1}function Ua(b,a){var c=za(b,a);c>=0&&b.splice(c,1);return a}function V(b,a){if(oa(b)||b&&b.$evalAsync&&b.$watch)throw B("Can't copy Window or Scope");if(a){if(b===
|
||||
a)throw B("Can't copy equivalent objects or arrays");if(J(b)){for(;a.length;)a.pop();for(var c=0;c<b.length;c++)a.push(V(b[c]))}else for(c in m(a,function(b,c){delete a[c]}),b)a[c]=V(b[c])}else(a=b)&&(J(b)?a=V(b,[]):na(b)?a=new Date(b.getTime()):L(b)&&(a=V(b,{})));return a}function hc(b,a){var a=a||{},c;for(c in b)b.hasOwnProperty(c)&&c.substr(0,2)!=="$$"&&(a[c]=b[c]);return a}function ha(b,a){if(b===a)return!0;if(b===null||a===null)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&
|
||||
c=="object")if(J(b)){if((c=b.length)==a.length){for(d=0;d<c;d++)if(!ha(b[d],a[d]))return!1;return!0}}else if(na(b))return na(a)&&b.getTime()==a.getTime();else{if(b&&b.$evalAsync&&b.$watch||a&&a.$evalAsync&&a.$watch||oa(b)||oa(a))return!1;c={};for(d in b){if(d.charAt(0)!=="$"&&!N(b[d])&&!ha(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c[d]&&d.charAt(0)!=="$"&&!N(a[d]))return!1;return!0}return!1}function Va(b,a){var c=arguments.length>2?ia.call(arguments,2):[];return N(a)&&!(a instanceof RegExp)?c.length?
|
||||
function(){return arguments.length?a.apply(b,c.concat(ia.call(arguments,0))):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}:a}function ic(b,a){var c=a;/^\$+/.test(b)?c=p:oa(a)?c="$WINDOW":a&&ca===a?c="$DOCUMENT":a&&a.$evalAsync&&a.$watch&&(c="$SCOPE");return c}function da(b,a){return JSON.stringify(b,ic,a?" ":null)}function nb(b){return F(b)?JSON.parse(b):b}function Wa(b){b&&b.length!==0?(b=E(""+b),b=!(b=="f"||b=="0"||b=="false"||b=="no"||b=="n"||b=="[]")):b=!1;
|
||||
return b}function pa(b){b=u(b).clone();try{b.html("")}catch(a){}return u("<div>").append(b).html().match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+E(b)})}function Xa(b){var a={},c,d;m((b||"").split("&"),function(b){b&&(c=b.split("="),d=decodeURIComponent(c[0]),a[d]=v(c[1])?decodeURIComponent(c[1]):!0)});return a}function ob(b){var a=[];m(b,function(b,d){a.push(Ya(d,!0)+(b===!0?"":"="+Ya(b,!0)))});return a.length?a.join("&"):""}function Za(b){return Ya(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,
|
||||
"=").replace(/%2B/gi,"+")}function Ya(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(a?null:/%20/g,"+")}function jc(b,a){function c(a){a&&d.push(a)}var d=[b],e,g,i=["ng:app","ng-app","x-ng-app","data-ng-app"],f=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;m(i,function(a){i[a]=!0;c(ca.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(m(b.querySelectorAll("."+a),c),m(b.querySelectorAll("."+a+"\\:"),c),m(b.querySelectorAll("["+
|
||||
a+"]"),c))});m(d,function(a){if(!e){var b=f.exec(" "+a.className+" ");b?(e=a,g=(b[2]||"").replace(/\s+/g,",")):m(a.attributes,function(b){if(!e&&i[b.name])e=a,g=b.value})}});e&&a(e,g?[g]:[])}function pb(b,a){b=u(b);a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");var c=qb(a);c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,i){a.$apply(function(){b.data("$injector",i);c(b)(a)})}]);return c}function $a(b,a){a=a||"_";return b.replace(kc,
|
||||
function(b,d){return(d?a:"")+b.toLowerCase()})}function qa(b,a,c){if(!b)throw new B("Argument '"+(a||"?")+"' is "+(c||"required"));return b}function ra(b,a,c){c&&J(b)&&(b=b[b.length-1]);qa(N(b),a,"not a function, got "+(b&&typeof b=="object"?b.constructor.name||"Object":typeof b));return b}function lc(b){function a(a,b,e){return a[b]||(a[b]=e())}return a(a(b,"angular",Object),"module",function(){var b={};return function(d,e,g){e&&b.hasOwnProperty(d)&&(b[d]=null);return a(b,d,function(){function a(c,
|
||||
d,e){return function(){b[e||"push"]([c,d,arguments]);return j}}if(!e)throw B("No module: "+d);var b=[],c=[],k=a("$injector","invoke"),j={_invokeQueue:b,_runBlocks:c,requires:e,name:d,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:k,run:function(a){c.push(a);
|
||||
return this}};g&&k(g);return j})}})}function rb(b){return b.replace(mc,function(a,b,d,e){return e?d.toUpperCase():d}).replace(nc,"Moz$1")}function ab(b,a){function c(){var e;for(var b=[this],c=a,i,f,h,k,j,l;b.length;){i=b.shift();f=0;for(h=i.length;f<h;f++){k=u(i[f]);c?k.triggerHandler("$destroy"):c=!c;j=0;for(e=(l=k.children()).length,k=e;j<k;j++)b.push(ja(l[j]))}}return d.apply(this,arguments)}var d=ja.fn[b],d=d.$original||d;c.$original=d;ja.fn[b]=c}function Q(b){if(b instanceof Q)return b;if(!(this instanceof
|
||||
Q)){if(F(b)&&b.charAt(0)!="<")throw B("selectors not implemented");return new Q(b)}if(F(b)){var a=ca.createElement("div");a.innerHTML="<div> </div>"+b;a.removeChild(a.firstChild);bb(this,a.childNodes);this.remove()}else bb(this,b)}function cb(b){return b.cloneNode(!0)}function sa(b){sb(b);for(var a=0,b=b.childNodes||[];a<b.length;a++)sa(b[a])}function tb(b,a,c){var d=$(b,"events");$(b,"handle")&&(t(a)?m(d,function(a,c){db(b,c,a);delete d[c]}):t(c)?(db(b,a,d[a]),delete d[a]):Ua(d[a],c))}function sb(b){var a=
|
||||
b[Aa],c=Ba[a];c&&(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),tb(b)),delete Ba[a],b[Aa]=p)}function $(b,a,c){var d=b[Aa],d=Ba[d||-1];if(v(c))d||(b[Aa]=d=++oc,d=Ba[d]={}),d[a]=c;else return d&&d[a]}function ub(b,a,c){var d=$(b,"data"),e=v(c),g=!e&&v(a),i=g&&!L(a);!d&&!i&&$(b,"data",d={});if(e)d[a]=c;else if(g)if(i)return d&&d[a];else x(d,a);else return d}function Ca(b,a){return(" "+b.className+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" ")>-1}function vb(b,a){a&&m(a.split(" "),function(a){b.className=
|
||||
R((" "+b.className+" ").replace(/[\n\t]/g," ").replace(" "+R(a)+" "," "))})}function wb(b,a){a&&m(a.split(" "),function(a){if(!Ca(b,a))b.className=R(b.className+" "+R(a))})}function bb(b,a){if(a)for(var a=!a.nodeName&&v(a.length)&&!oa(a)?a:[a],c=0;c<a.length;c++)b.push(a[c])}function xb(b,a){return Da(b,"$"+(a||"ngController")+"Controller")}function Da(b,a,c){b=u(b);for(b[0].nodeType==9&&(b=b.find("html"));b.length;){if(c=b.data(a))return c;b=b.parent()}}function yb(b,a){var c=Ea[a.toLowerCase()];
|
||||
return c&&zb[b.nodeName]&&c}function pc(b,a){var c=function(c,e){if(!c.preventDefault)c.preventDefault=function(){c.returnValue=!1};if(!c.stopPropagation)c.stopPropagation=function(){c.cancelBubble=!0};if(!c.target)c.target=c.srcElement||ca;if(t(c.defaultPrevented)){var g=c.preventDefault;c.preventDefault=function(){c.defaultPrevented=!0;g.call(c)};c.defaultPrevented=!1}c.isDefaultPrevented=function(){return c.defaultPrevented};m(a[e||c.type],function(a){a.call(b,c)});aa<=8?(c.preventDefault=null,
|
||||
c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function ga(b){var a=typeof b,c;if(a=="object"&&b!==null)if(typeof(c=b.$$hashKey)=="function")c=b.$$hashKey();else{if(c===p)c=b.$$hashKey=xa()}else c=b;return a+":"+c}function Fa(b){m(b,this.put,this)}function eb(){}function Ab(b){var a,c;if(typeof b=="function"){if(!(a=b.$inject))a=[],c=b.toString().replace(qc,""),c=c.match(rc),m(c[1].split(sc),function(b){b.replace(tc,
|
||||
function(b,c,d){a.push(d)})}),b.$inject=a}else J(b)?(c=b.length-1,ra(b[c],"fn"),a=b.slice(0,c)):ra(b,"fn",!0);return a}function qb(b){function a(a){return function(b,c){if(L(b))m(b,mb(a));else return a(b,c)}}function c(a,b){N(b)&&(b=l.instantiate(b));if(!b.$get)throw B("Provider "+a+" must define $get factory method.");return j[a+f]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[];m(a,function(a){if(!k.get(a))if(k.put(a,!0),F(a)){var c=ta(a);b=b.concat(e(c.requires)).concat(c._runBlocks);
|
||||
try{for(var d=c._invokeQueue,c=0,f=d.length;c<f;c++){var h=d[c],g=h[0]=="$injector"?l:l.get(h[0]);g[h[1]].apply(g,h[2])}}catch(n){throw n.message&&(n.message+=" from "+a),n;}}else if(N(a))try{b.push(l.invoke(a))}catch(i){throw i.message&&(i.message+=" from "+a),i;}else if(J(a))try{b.push(l.invoke(a))}catch(j){throw j.message&&(j.message+=" from "+String(a[a.length-1])),j;}else ra(a,"module")});return b}function g(a,b){function c(d){if(typeof d!=="string")throw B("Service name expected");if(a.hasOwnProperty(d)){if(a[d]===
|
||||
i)throw B("Circular dependency: "+h.join(" <- "));return a[d]}else try{return h.unshift(d),a[d]=i,a[d]=b(d)}finally{h.shift()}}function d(a,b,e){var f=[],k=Ab(a),g,n,i;n=0;for(g=k.length;n<g;n++)i=k[n],f.push(e&&e.hasOwnProperty(i)?e[i]:c(i,h));a.$inject||(a=a[g]);switch(b?-1:f.length){case 0:return a();case 1:return a(f[0]);case 2:return a(f[0],f[1]);case 3:return a(f[0],f[1],f[2]);case 4:return a(f[0],f[1],f[2],f[3]);case 5:return a(f[0],f[1],f[2],f[3],f[4]);case 6:return a(f[0],f[1],f[2],f[3],
|
||||
f[4],f[5]);case 7:return a(f[0],f[1],f[2],f[3],f[4],f[5],f[6]);case 8:return a(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7]);case 9:return a(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8]);case 10:return a(f[0],f[1],f[2],f[3],f[4],f[5],f[6],f[7],f[8],f[9]);default:return a.apply(b,f)}}return{invoke:d,instantiate:function(a,b){var c=function(){},e;c.prototype=(J(a)?a[a.length-1]:a).prototype;c=new c;e=d(a,c,b);return L(e)?e:c},get:c,annotate:Ab}}var i={},f="Provider",h=[],k=new Fa,j={$provide:{provider:a(c),
|
||||
factory:a(d),service:a(function(a,b){return d(a,["$injector",function(a){return a.instantiate(b)}])}),value:a(function(a,b){return d(a,I(b))}),constant:a(function(a,b){j[a]=b;o[a]=b}),decorator:function(a,b){var c=l.get(a+f),d=c.$get;c.$get=function(){var a=r.invoke(d,c);return r.invoke(b,null,{$delegate:a})}}}},l=g(j,function(){throw B("Unknown provider: "+h.join(" <- "));}),o={},r=o.$injector=g(o,function(a){a=l.get(a+f);return r.invoke(a.$get,a)});m(e(b),function(a){r.invoke(a||D)});return r}function uc(){var b=
|
||||
!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;m(a,function(a){!b&&E(a.nodeName)==="a"&&(b=a)});return b}function g(){var b=c.hash(),d;b?(d=i.getElementById(b))?d.scrollIntoView():(d=e(i.getElementsByName(b)))?d.scrollIntoView():b==="top"&&a.scrollTo(0,0):a.scrollTo(0,0)}var i=a.document;b&&d.$watch(function(){return c.hash()},function(){d.$evalAsync(g)});return g}]}function vc(b,a,c,d){function e(a){try{a.apply(null,
|
||||
ia.call(arguments,1))}finally{if(n--,n===0)for(;w.length;)try{w.pop()()}catch(b){c.error(b)}}}function g(a,b){(function ea(){m(q,function(a){a()});s=b(ea,a)})()}function i(){O!=f.url()&&(O=f.url(),m(A,function(a){a(f.url())}))}var f=this,h=a[0],k=b.location,j=b.history,l=b.setTimeout,o=b.clearTimeout,r={};f.isMock=!1;var n=0,w=[];f.$$completeOutstandingRequest=e;f.$$incOutstandingRequestCount=function(){n++};f.notifyWhenNoOutstandingRequests=function(a){m(q,function(a){a()});n===0?a():w.push(a)};
|
||||
var q=[],s;f.addPollFn=function(a){t(s)&&g(100,l);q.push(a);return a};var O=k.href,C=a.find("base");f.url=function(a,b){if(a){if(O!=a)return O=a,d.history?b?j.replaceState(null,"",a):(j.pushState(null,"",a),C.attr("href",C.attr("href"))):b?k.replace(a):k.href=a,f}else return k.href.replace(/%27/g,"'")};var A=[],K=!1;f.onUrlChange=function(a){K||(d.history&&u(b).bind("popstate",i),d.hashchange?u(b).bind("hashchange",i):f.addPollFn(i),K=!0);A.push(a);return a};f.baseHref=function(){var a=C.attr("href");
|
||||
return a?a.replace(/^https?\:\/\/[^\/]*/,""):a};var W={},y="",M=f.baseHref();f.cookies=function(a,b){var d,e,f,k;if(a)if(b===p)h.cookie=escape(a)+"=;path="+M+";expires=Thu, 01 Jan 1970 00:00:00 GMT";else{if(F(b))d=(h.cookie=escape(a)+"="+escape(b)+";path="+M).length+1,d>4096&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"),W.length>20&&c.warn("Cookie '"+a+"' possibly not set or overflowed because too many cookies were already set ("+W.length+
|
||||
" > 20 )")}else{if(h.cookie!==y){y=h.cookie;d=y.split("; ");W={};for(f=0;f<d.length;f++)e=d[f],k=e.indexOf("="),k>0&&(W[unescape(e.substring(0,k))]=unescape(e.substring(k+1)))}return W}};f.defer=function(a,b){var c;n++;c=l(function(){delete r[c];e(a)},b||0);r[c]=!0;return c};f.defer.cancel=function(a){return r[a]?(delete r[a],o(a),e(D),!0):!1}}function wc(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new vc(b,d,a,c)}]}function xc(){this.$get=function(){function b(b,
|
||||
d){function e(a){if(a!=l){if(o){if(o==a)o=a.n}else o=a;g(a.n,a.p);g(a,l);l=a;l.n=null}}function g(a,b){if(a!=b){if(a)a.p=b;if(b)b.n=a}}if(b in a)throw B("cacheId "+b+" taken");var i=0,f=x({},d,{id:b}),h={},k=d&&d.capacity||Number.MAX_VALUE,j={},l=null,o=null;return a[b]={put:function(a,b){var c=j[a]||(j[a]={key:a});e(c);t(b)||(a in h||i++,h[a]=b,i>k&&this.remove(o.key))},get:function(a){var b=j[a];if(b)return e(b),h[a]},remove:function(a){var b=j[a];if(b){if(b==l)l=b.p;if(b==o)o=b.n;g(b.n,b.p);delete j[a];
|
||||
delete h[a];i--}},removeAll:function(){h={};i=0;j={};l=o=null},destroy:function(){j=f=h=null;delete a[b]},info:function(){return x({},f,{size:i})}}}var a={};b.info=function(){var b={};m(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function yc(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function Bb(b){var a={},c="Directive",d=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,e=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,g="Template must have exactly one root element. was: ";
|
||||
this.directive=function f(d,e){F(d)?(qa(e,"directive"),a.hasOwnProperty(d)||(a[d]=[],b.factory(d+c,["$injector","$exceptionHandler",function(b,c){var e=[];m(a[d],function(a){try{var f=b.invoke(a);if(N(f))f={compile:I(f)};else if(!f.compile&&f.link)f.compile=I(f.link);f.priority=f.priority||0;f.name=f.name||d;f.require=f.require||f.controller&&f.name;f.restrict=f.restrict||"A";e.push(f)}catch(k){c(k)}});return e}])),a[d].push(e)):m(d,mb(f));return this};this.$get=["$injector","$interpolate","$exceptionHandler",
|
||||
"$http","$templateCache","$parse","$controller","$rootScope",function(b,h,k,j,l,o,r,n){function w(a,b,c){a instanceof u||(a=u(a));m(a,function(b,c){b.nodeType==3&&(a[c]=u(b).wrap("<span></span>").parent()[0])});var d=s(a,b,a,c);return function(b,c){qa(b,"scope");var e=c?ua.clone.call(a):a;e.data("$scope",b);q(e,"ng-scope");c&&c(e,b);d&&d(b,e,e);return e}}function q(a,b){try{a.addClass(b)}catch(c){}}function s(a,b,c,d){function e(a,c,d,k){for(var g,h,j,n,o,l=0,r=0,q=f.length;l<q;r++)j=c[r],g=f[l++],
|
||||
h=f[l++],g?(g.scope?(n=a.$new(L(g.scope)),u(j).data("$scope",n)):n=a,(o=g.transclude)||!k&&b?g(h,n,j,d,function(b){return function(c){var d=a.$new();return b(d,c).bind("$destroy",Va(d,d.$destroy))}}(o||b)):g(h,n,j,p,k)):h&&h(a,j.childNodes,p,k)}for(var f=[],k,g,h,j=0;j<a.length;j++)g=new ea,k=O(a[j],[],g,d),g=(k=k.length?C(k,a[j],g,b,c):null)&&k.terminal||!a[j].childNodes.length?null:s(a[j].childNodes,k?k.transclude:b),f.push(k),f.push(g),h=h||k||g;return h?e:null}function O(a,b,c,f){var k=c.$attr,
|
||||
g;switch(a.nodeType){case 1:A(b,fa(Cb(a).toLowerCase()),"E",f);var h,j,n;g=a.attributes;for(var o=0,l=g&&g.length;o<l;o++)if(h=g[o],h.specified)j=h.name,n=fa(j.toLowerCase()),k[n]=j,c[n]=h=R(aa&&j=="href"?decodeURIComponent(a.getAttribute(j,2)):h.value),yb(a,n)&&(c[n]=!0),X(a,b,h,n),A(b,n,"A",f);a=a.className;if(F(a)&&a!=="")for(;g=e.exec(a);)n=fa(g[2]),A(b,n,"C",f)&&(c[n]=R(g[3])),a=a.substr(g.index+g[0].length);break;case 3:H(b,a.nodeValue);break;case 8:try{if(g=d.exec(a.nodeValue))n=fa(g[1]),A(b,
|
||||
n,"M",f)&&(c[n]=R(g[2]))}catch(r){}}b.sort(y);return b}function C(a,b,c,d,e){function f(a,b){if(a)a.require=z.require,l.push(a);if(b)b.require=z.require,ba.push(b)}function h(a,b){var c,d="data",e=!1;if(F(a)){for(;(c=a.charAt(0))=="^"||c=="?";)a=a.substr(1),c=="^"&&(d="inheritedData"),e=e||c=="?";c=b[d]("$"+a+"Controller");if(!c&&!e)throw B("No controller: "+a);}else J(a)&&(c=[],m(a,function(a){c.push(h(a,b))}));return c}function j(a,d,e,f,g){var n,q,w,K,s;n=b===e?c:hc(c,new ea(u(e),c.$attr));q=n.$$element;
|
||||
if(C){var zc=/^\s*([@=&])\s*(\w*)\s*$/,O=d.$parent||d;m(C.scope,function(a,b){var c=a.match(zc)||[],e=c[2]||b,f,g,k;switch(c[1]){case "@":n.$observe(e,function(a){d[b]=a});n.$$observers[e].$$scope=O;break;case "=":g=o(n[e]);k=g.assign||function(){f=d[b]=g(O);throw B(Db+n[e]+" (directive: "+C.name+")");};f=d[b]=g(O);d.$watch(function(){var a=g(O);a!==d[b]&&(a!==f?f=d[b]=a:k(O,a=f=d[b]));return a});break;case "&":g=o(n[e]);d[b]=function(a){return g(O,a)};break;default:throw B("Invalid isolate scope definition for directive "+
|
||||
C.name+": "+a);}})}t&&m(t,function(a){var b={$scope:d,$element:q,$attrs:n,$transclude:g};s=a.controller;s=="@"&&(s=n[a.name]);q.data("$"+a.name+"Controller",r(s,b))});f=0;for(w=l.length;f<w;f++)try{K=l[f],K(d,q,n,K.require&&h(K.require,q))}catch(y){k(y,pa(q))}a&&a(d,e.childNodes,p,g);f=0;for(w=ba.length;f<w;f++)try{K=ba[f],K(d,q,n,K.require&&h(K.require,q))}catch(Ha){k(Ha,pa(q))}}for(var n=-Number.MAX_VALUE,l=[],ba=[],s=null,C=null,A=null,y=c.$$element=u(b),z,H,X,D,v=d,t,x,Y,E=0,G=a.length;E<G;E++){z=
|
||||
a[E];X=p;if(n>z.priority)break;if(Y=z.scope)M("isolated scope",C,z,y),L(Y)&&(q(y,"ng-isolate-scope"),C=z),q(y,"ng-scope"),s=s||z;H=z.name;if(Y=z.controller)t=t||{},M("'"+H+"' controller",t[H],z,y),t[H]=z;if(Y=z.transclude)M("transclusion",D,z,y),D=z,n=z.priority,Y=="element"?(X=u(b),y=c.$$element=u("<\!-- "+H+": "+c[H]+" --\>"),b=y[0],Ga(e,u(X[0]),b),v=w(X,d,n)):(X=u(cb(b)).contents(),y.html(""),v=w(X,d));if(Y=z.template)if(M("template",A,z,y),A=z,Y=Ha(Y),z.replace){X=u("<div>"+R(Y)+"</div>").contents();
|
||||
b=X[0];if(X.length!=1||b.nodeType!==1)throw new B(g+Y);Ga(e,y,b);H={$attr:{}};a=a.concat(O(b,a.splice(E+1,a.length-(E+1)),H));K(c,H);G=a.length}else y.html(Y);if(z.templateUrl)M("template",A,z,y),A=z,j=W(a.splice(E,a.length-E),j,y,c,e,z.replace,v),G=a.length;else if(z.compile)try{x=z.compile(y,c,v),N(x)?f(null,x):x&&f(x.pre,x.post)}catch(I){k(I,pa(y))}if(z.terminal)j.terminal=!0,n=Math.max(n,z.priority)}j.scope=s&&s.scope;j.transclude=D&&v;return j}function A(d,e,g,h){var j=!1;if(a.hasOwnProperty(e))for(var n,
|
||||
e=b.get(e+c),o=0,l=e.length;o<l;o++)try{if(n=e[o],(h===p||h>n.priority)&&n.restrict.indexOf(g)!=-1)d.push(n),j=!0}catch(r){k(r)}return j}function K(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;m(a,function(d,e){e.charAt(0)!="$"&&(b[e]&&(d+=(e==="style"?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});m(b,function(b,f){f=="class"?(q(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):f=="style"?e.attr("style",e.attr("style")+";"+b):f.charAt(0)!="$"&&!a.hasOwnProperty(f)&&(a[f]=b,d[f]=c[f])})}function W(a,b,c,d,e,
|
||||
f,k){var h=[],n,o,r=c[0],q=a.shift(),w=x({},q,{controller:null,templateUrl:null,transclude:null,scope:null});c.html("");j.get(q.templateUrl,{cache:l}).success(function(j){var l,q,j=Ha(j);if(f){q=u("<div>"+R(j)+"</div>").contents();l=q[0];if(q.length!=1||l.nodeType!==1)throw new B(g+j);j={$attr:{}};Ga(e,c,l);O(l,a,j);K(d,j)}else l=r,c.html(j);a.unshift(w);n=C(a,c,d,k);for(o=s(c.contents(),k);h.length;){var ba=h.pop(),j=h.pop();q=h.pop();var y=h.pop(),m=l;q!==r&&(m=cb(l),Ga(j,u(q),m));n(function(){b(o,
|
||||
y,m,e,ba)},y,m,e,ba)}h=null}).error(function(a,b,c,d){throw B("Failed to load template: "+d.url);});return function(a,c,d,e,f){h?(h.push(c),h.push(d),h.push(e),h.push(f)):n(function(){b(o,c,d,e,f)},c,d,e,f)}}function y(a,b){return b.priority-a.priority}function M(a,b,c,d){if(b)throw B("Multiple directives ["+b.name+", "+c.name+"] asking for "+a+" on: "+pa(d));}function H(a,b){var c=h(b,!0);c&&a.push({priority:0,compile:I(function(a,b){var d=b.parent(),e=d.data("$binding")||[];e.push(c);q(d.data("$binding",
|
||||
e),"ng-binding");a.$watch(c,function(a){b[0].nodeValue=a})})})}function X(a,b,c,d){var e=h(c,!0);e&&b.push({priority:100,compile:I(function(a,b,c){b=c.$$observers||(c.$$observers={});d==="class"&&(e=h(c[d],!0));c[d]=p;(b[d]||(b[d]=[])).$$inter=!0;(c.$$observers&&c.$$observers[d].$$scope||a).$watch(e,function(a){c.$set(d,a)})})})}function Ga(a,b,c){var d=b[0],e=d.parentNode,f,g;if(a){f=0;for(g=a.length;f<g;f++)if(a[f]==d){a[f]=c;break}}e&&e.replaceChild(c,d);c[u.expando]=d[u.expando];b[0]=c}var ea=
|
||||
function(a,b){this.$$element=a;this.$attr=b||{}};ea.prototype={$normalize:fa,$set:function(a,b,c,d){var e=yb(this.$$element[0],a),f=this.$$observers;e&&(this.$$element.prop(a,b),d=e);this[a]=b;d?this.$attr[a]=d:(d=this.$attr[a])||(this.$attr[a]=d=$a(a,"-"));c!==!1&&(b===null||b===p?this.$$element.removeAttr(d):this.$$element.attr(d,b));f&&m(f[a],function(a){try{a(b)}catch(c){k(c)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers={}),e=d[a]||(d[a]=[]);e.push(b);n.$evalAsync(function(){e.$$inter||
|
||||
b(c[a])});return b}};var D=h.startSymbol(),ba=h.endSymbol(),Ha=D=="{{"||ba=="}}"?ma:function(a){return a.replace(/\{\{/g,D).replace(/}}/g,ba)};return w}]}function fa(b){return rb(b.replace(Ac,""))}function Bc(){var b={};this.register=function(a,c){L(a)?x(b,a):b[a]=c};this.$get=["$injector","$window",function(a,c){return function(d,e){if(F(d)){var g=d,d=b.hasOwnProperty(g)?b[g]:fb(e.$scope,g,!0)||fb(c,g,!0);ra(d,g,!0)}return a.instantiate(d,e)}}]}function Cc(){this.$get=["$window",function(b){return u(b.document)}]}
|
||||
function Dc(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Ec(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse",function(c){function d(d,f){for(var h,k,j=0,l=[],o=d.length,r=!1,n=[];j<o;)(h=d.indexOf(b,j))!=-1&&(k=d.indexOf(a,h+e))!=-1?(j!=h&&l.push(d.substring(j,h)),l.push(j=c(r=d.substring(h+e,k))),j.exp=r,j=k+g,r=!0):(j!=o&&l.push(d.substring(j)),j=o);if(!(o=
|
||||
l.length))l.push(""),o=1;if(!f||r)return n.length=o,j=function(a){for(var b=0,c=o,d;b<c;b++){if(typeof(d=l[b])=="function")d=d(a),d==null||d==p?d="":typeof d!="string"&&(d=da(d));n[b]=d}return n.join("")},j.exp=d,j.parts=l,j}var e=b.length,g=a.length;d.startSymbol=function(){return b};d.endSymbol=function(){return a};return d}]}function Eb(b){for(var b=b.split("/"),a=b.length;a--;)b[a]=Za(b[a]);return b.join("/")}function va(b,a){var c=Fb.exec(b),c={protocol:c[1],host:c[3],port:G(c[5])||Gb[c[1]]||
|
||||
null,path:c[6]||"/",search:c[8],hash:c[10]};if(a)a.$$protocol=c.protocol,a.$$host=c.host,a.$$port=c.port;return c}function ka(b,a,c){return b+"://"+a+(c==Gb[b]?"":":"+c)}function Fc(b,a,c){var d=va(b);return decodeURIComponent(d.path)!=a||t(d.hash)||d.hash.indexOf(c)!==0?b:ka(d.protocol,d.host,d.port)+a.substr(0,a.lastIndexOf("/"))+d.hash.substr(c.length)}function Gc(b,a,c){var d=va(b);if(decodeURIComponent(d.path)==a)return b;else{var e=d.search&&"?"+d.search||"",g=d.hash&&"#"+d.hash||"",i=a.substr(0,
|
||||
a.lastIndexOf("/")),f=d.path.substr(i.length);if(d.path.indexOf(i)!==0)throw B('Invalid url "'+b+'", missing path prefix "'+i+'" !');return ka(d.protocol,d.host,d.port)+a+"#"+c+f+e+g}}function gb(b,a,c){a=a||"";this.$$parse=function(b){var c=va(b,this);if(c.path.indexOf(a)!==0)throw B('Invalid url "'+b+'", missing path prefix "'+a+'" !');this.$$path=decodeURIComponent(c.path.substr(a.length));this.$$search=Xa(c.search);this.$$hash=c.hash&&decodeURIComponent(c.hash)||"";this.$$compose()};this.$$compose=
|
||||
function(){var b=ob(this.$$search),c=this.$$hash?"#"+Za(this.$$hash):"";this.$$url=Eb(this.$$path)+(b?"?"+b:"")+c;this.$$absUrl=ka(this.$$protocol,this.$$host,this.$$port)+a+this.$$url};this.$$rewriteAppUrl=function(a){if(a.indexOf(c)==0)return a};this.$$parse(b)}function Ia(b,a,c){var d;this.$$parse=function(b){var c=va(b,this);if(c.hash&&c.hash.indexOf(a)!==0)throw B('Invalid url "'+b+'", missing hash prefix "'+a+'" !');d=c.path+(c.search?"?"+c.search:"");c=Hc.exec((c.hash||"").substr(a.length));
|
||||
this.$$path=c[1]?(c[1].charAt(0)=="/"?"":"/")+decodeURIComponent(c[1]):"";this.$$search=Xa(c[3]);this.$$hash=c[5]&&decodeURIComponent(c[5])||"";this.$$compose()};this.$$compose=function(){var b=ob(this.$$search),c=this.$$hash?"#"+Za(this.$$hash):"";this.$$url=Eb(this.$$path)+(b?"?"+b:"")+c;this.$$absUrl=ka(this.$$protocol,this.$$host,this.$$port)+d+(this.$$url?"#"+a+this.$$url:"")};this.$$rewriteAppUrl=function(a){if(a.indexOf(c)==0)return a};this.$$parse(b)}function Hb(b,a,c,d){Ia.apply(this,arguments);
|
||||
this.$$rewriteAppUrl=function(b){if(b.indexOf(c)==0)return c+d+"#"+a+b.substr(c.length)}}function Ja(b){return function(){return this[b]}}function Ib(b,a){return function(c){if(t(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Ic(){var b="",a=!1;this.hashPrefix=function(a){return v(a)?(b=a,this):b};this.html5Mode=function(b){return v(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,g){function i(a){c.$broadcast("$locationChangeSuccess",
|
||||
f.absUrl(),a)}var f,h,k,j=d.url(),l=va(j);a?(h=d.baseHref()||"/",k=h.substr(0,h.lastIndexOf("/")),l=ka(l.protocol,l.host,l.port)+k+"/",f=e.history?new gb(Fc(j,h,b),k,l):new Hb(Gc(j,h,b),b,l,h.substr(k.length+1))):(l=ka(l.protocol,l.host,l.port)+(l.path||"")+(l.search?"?"+l.search:"")+"#"+b+"/",f=new Ia(j,b,l));g.bind("click",function(a){if(!a.ctrlKey&&!(a.metaKey||a.which==2)){for(var b=u(a.target);E(b[0].nodeName)!=="a";)if(b[0]===g[0]||!(b=b.parent())[0])return;var d=b.prop("href"),e=f.$$rewriteAppUrl(d);
|
||||
d&&!b.attr("target")&&e&&(f.$$parse(e),c.$apply(),a.preventDefault(),U.angular["ff-684208-preventDefault"]=!0)}});f.absUrl()!=j&&d.url(f.absUrl(),!0);d.onUrlChange(function(a){f.absUrl()!=a&&(c.$evalAsync(function(){var b=f.absUrl();f.$$parse(a);i(b)}),c.$$phase||c.$digest())});var o=0;c.$watch(function(){var a=d.url(),b=f.$$replace;if(!o||a!=f.absUrl())o++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",f.absUrl(),a).defaultPrevented?f.$$parse(a):(d.url(f.absUrl(),b),i(a))});f.$$replace=
|
||||
!1;return o});return f}]}function Jc(){this.$get=["$window",function(b){function a(a){a instanceof B&&(a.stack?a=a.message&&a.stack.indexOf(a.message)===-1?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function c(c){var e=b.console||{},g=e[c]||e.log||D;return g.apply?function(){var b=[];m(arguments,function(c){b.push(a(c))});return g.apply(e,b)}:function(a,b){g(a,b)}}return{log:c("log"),warn:c("warn"),info:c("info"),error:c("error")}}]}function Kc(b,
|
||||
a){function c(a){return a.indexOf(q)!=-1}function d(){return n+1<b.length?b.charAt(n+1):!1}function e(a){return"0"<=a&&a<="9"}function g(a){return a==" "||a=="\r"||a=="\t"||a=="\n"||a=="\u000b"||a=="\u00a0"}function i(a){return"a"<=a&&a<="z"||"A"<=a&&a<="Z"||"_"==a||a=="$"}function f(a){return a=="-"||a=="+"||e(a)}function h(a,c,d){d=d||n;throw B("Lexer Error: "+a+" at column"+(v(c)?"s "+c+"-"+n+" ["+b.substring(c,d)+"]":" "+d)+" in expression ["+b+"].");}function k(){for(var a="",c=n;n<b.length;){var k=
|
||||
E(b.charAt(n));if(k=="."||e(k))a+=k;else{var g=d();if(k=="e"&&f(g))a+=k;else if(f(k)&&g&&e(g)&&a.charAt(a.length-1)=="e")a+=k;else if(f(k)&&(!g||!e(g))&&a.charAt(a.length-1)=="e")h("Invalid exponent");else break}n++}a*=1;o.push({index:c,text:a,json:!0,fn:function(){return a}})}function j(){for(var c="",d=n,f,k,h;n<b.length;){var j=b.charAt(n);if(j=="."||i(j)||e(j))j=="."&&(f=n),c+=j;else break;n++}if(f)for(k=n;k<b.length;){j=b.charAt(k);if(j=="("){h=c.substr(f-d+1);c=c.substr(0,f-d);n=k;break}if(g(j))k++;
|
||||
else break}d={index:d,text:c};if(Ka.hasOwnProperty(c))d.fn=d.json=Ka[c];else{var l=Jb(c,a);d.fn=x(function(a,b){return l(a,b)},{assign:function(a,b){return Kb(a,c,b)}})}o.push(d);h&&(o.push({index:f,text:".",json:!1}),o.push({index:f+1,text:h,json:!1}))}function l(a){var c=n;n++;for(var d="",e=a,f=!1;n<b.length;){var k=b.charAt(n);e+=k;if(f)k=="u"?(k=b.substring(n+1,n+5),k.match(/[\da-f]{4}/i)||h("Invalid unicode escape [\\u"+k+"]"),n+=4,d+=String.fromCharCode(parseInt(k,16))):(f=Lc[k],d+=f?f:k),
|
||||
f=!1;else if(k=="\\")f=!0;else if(k==a){n++;o.push({index:c,text:e,string:d,json:!0,fn:function(){return d}});return}else d+=k;n++}h("Unterminated quote",c)}for(var o=[],r,n=0,w=[],q,s=":";n<b.length;){q=b.charAt(n);if(c("\"'"))l(q);else if(e(q)||c(".")&&e(d()))k();else if(i(q)){if(j(),"{,".indexOf(s)!=-1&&w[0]=="{"&&(r=o[o.length-1]))r.json=r.text.indexOf(".")==-1}else if(c("(){}[].,;:"))o.push({index:n,text:q,json:":[,".indexOf(s)!=-1&&c("{[")||c("}]:,")}),c("{[")&&w.unshift(q),c("}]")&&w.shift(),
|
||||
n++;else if(g(q)){n++;continue}else{var m=q+d(),C=Ka[q],A=Ka[m];A?(o.push({index:n,text:m,fn:A}),n+=2):C?(o.push({index:n,text:q,fn:C,json:"[,:".indexOf(s)!=-1&&c("+-")}),n+=1):h("Unexpected next character ",n,n+1)}s=q}return o}function Mc(b,a,c,d){function e(a,c){throw B("Syntax Error: Token '"+c.text+"' "+a+" at column "+(c.index+1)+" of the expression ["+b+"] starting at ["+b.substring(c.index)+"].");}function g(){if(M.length===0)throw B("Unexpected end of expression: "+b);return M[0]}function i(a,
|
||||
b,c,d){if(M.length>0){var e=M[0],f=e.text;if(f==a||f==b||f==c||f==d||!a&&!b&&!c&&!d)return e}return!1}function f(b,c,d,f){return(b=i(b,c,d,f))?(a&&!b.json&&e("is not valid json",b),M.shift(),b):!1}function h(a){f(a)||e("is unexpected, expecting ["+a+"]",i())}function k(a,b){return function(c,d){return a(c,d,b)}}function j(a,b,c){return function(d,e){return b(d,e,a,c)}}function l(){for(var a=[];;)if(M.length>0&&!i("}",")",";","]")&&a.push(v()),!f(";"))return a.length==1?a[0]:function(b,c){for(var d,
|
||||
e=0;e<a.length;e++){var f=a[e];f&&(d=f(b,c))}return d}}function o(){for(var a=f(),b=c(a.text),d=[];;)if(a=f(":"))d.push(H());else{var e=function(a,c,e){for(var e=[e],f=0;f<d.length;f++)e.push(d[f](a,c));return b.apply(a,e)};return function(){return e}}}function r(){for(var a=n(),b;;)if(b=f("||"))a=j(a,b.fn,n());else return a}function n(){var a=w(),b;if(b=f("&&"))a=j(a,b.fn,n());return a}function w(){var a=q(),b;if(b=f("==","!="))a=j(a,b.fn,w());return a}function q(){var a;a=s();for(var b;b=f("+",
|
||||
"-");)a=j(a,b.fn,s());if(b=f("<",">","<=",">="))a=j(a,b.fn,q());return a}function s(){for(var a=m(),b;b=f("*","/","%");)a=j(a,b.fn,m());return a}function m(){var a;return f("+")?C():(a=f("-"))?j(W,a.fn,m()):(a=f("!"))?k(a.fn,m()):C()}function C(){var a;if(f("("))a=v(),h(")");else if(f("["))a=A();else if(f("{"))a=K();else{var b=f();(a=b.fn)||e("not a primary expression",b)}for(var c;b=f("(","[",".");)b.text==="("?(a=u(a,c),c=null):b.text==="["?(c=a,a=ea(a)):b.text==="."?(c=a,a=t(a)):e("IMPOSSIBLE");
|
||||
return a}function A(){var a=[];if(g().text!="]"){do a.push(H());while(f(","))}h("]");return function(b,c){for(var d=[],e=0;e<a.length;e++)d.push(a[e](b,c));return d}}function K(){var a=[];if(g().text!="}"){do{var b=f(),b=b.string||b.text;h(":");var c=H();a.push({key:b,value:c})}while(f(","))}h("}");return function(b,c){for(var d={},e=0;e<a.length;e++){var f=a[e],k=f.value(b,c);d[f.key]=k}return d}}var W=I(0),y,M=Kc(b,d),H=function(){var a=r(),c,d;return(d=f("="))?(a.assign||e("implies assignment but ["+
|
||||
b.substring(0,d.index)+"] can not be assigned to",d),c=r(),function(b,d){return a.assign(b,c(b,d),d)}):a},u=function(a,b){var c=[];if(g().text!=")"){do c.push(H());while(f(","))}h(")");return function(d,e){for(var f=[],k=b?b(d,e):d,h=0;h<c.length;h++)f.push(c[h](d,e));h=a(d,e)||D;return h.apply?h.apply(k,f):h(f[0],f[1],f[2],f[3],f[4])}},t=function(a){var b=f().text,c=Jb(b,d);return x(function(b,d){return c(a(b,d),d)},{assign:function(c,d,e){return Kb(a(c,e),b,d)}})},ea=function(a){var b=H();h("]");
|
||||
return x(function(c,d){var e=a(c,d),f=b(c,d),k;if(!e)return p;if((e=e[f])&&e.then){k=e;if(!("$$v"in e))k.$$v=p,k.then(function(a){k.$$v=a});e=e.$$v}return e},{assign:function(c,d,e){return a(c,e)[b(c,e)]=d}})},v=function(){for(var a=H(),b;;)if(b=f("|"))a=j(a,b.fn,o());else return a};a?(H=r,u=t=ea=v=function(){e("is not valid json",{text:b,index:0})},y=C()):y=l();M.length!==0&&e("is an unexpected token",M[0]);return y}function Kb(b,a,c){for(var a=a.split("."),d=0;a.length>1;d++){var e=a.shift(),g=
|
||||
b[e];g||(g={},b[e]=g);b=g}return b[a.shift()]=c}function fb(b,a,c){if(!a)return b;for(var a=a.split("."),d,e=b,g=a.length,i=0;i<g;i++)d=a[i],b&&(b=(e=b)[d]);return!c&&N(b)?Va(e,b):b}function Lb(b,a,c,d,e){return function(g,i){var f=i&&i.hasOwnProperty(b)?i:g,h;if(f===null||f===p)return f;if((f=f[b])&&f.then){if(!("$$v"in f))h=f,h.$$v=p,h.then(function(a){h.$$v=a});f=f.$$v}if(!a||f===null||f===p)return f;if((f=f[a])&&f.then){if(!("$$v"in f))h=f,h.$$v=p,h.then(function(a){h.$$v=a});f=f.$$v}if(!c||f===
|
||||
null||f===p)return f;if((f=f[c])&&f.then){if(!("$$v"in f))h=f,h.$$v=p,h.then(function(a){h.$$v=a});f=f.$$v}if(!d||f===null||f===p)return f;if((f=f[d])&&f.then){if(!("$$v"in f))h=f,h.$$v=p,h.then(function(a){h.$$v=a});f=f.$$v}if(!e||f===null||f===p)return f;if((f=f[e])&&f.then){if(!("$$v"in f))h=f,h.$$v=p,h.then(function(a){h.$$v=a});f=f.$$v}return f}}function Jb(b,a){if(hb.hasOwnProperty(b))return hb[b];var c=b.split("."),d=c.length,e;if(a)e=d<6?Lb(c[0],c[1],c[2],c[3],c[4]):function(a,b){var e=0,
|
||||
k;do k=Lb(c[e++],c[e++],c[e++],c[e++],c[e++])(a,b),b=p,a=k;while(e<d);return k};else{var g="var l, fn, p;\n";m(c,function(a,b){g+="if(s === null || s === undefined) return s;\nl=s;\ns="+(b?"s":'((k&&k.hasOwnProperty("'+a+'"))?k:s)')+'["'+a+'"];\nif (s && s.then) {\n if (!("$$v" in s)) {\n p=s;\n p.$$v = undefined;\n p.then(function(v) {p.$$v=v;});\n}\n s=s.$$v\n}\n'});g+="return s;";e=Function("s","k",g);e.toString=function(){return g}}return hb[b]=e}function Nc(){var b={};this.$get=["$filter","$sniffer",
|
||||
function(a,c){return function(d){switch(typeof d){case "string":return b.hasOwnProperty(d)?b[d]:b[d]=Mc(d,!1,a,c.csp);case "function":return d;default:return D}}}]}function Oc(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return Pc(function(a){b.$evalAsync(a)},a)}]}function Pc(b,a){function c(a){return a}function d(a){return i(a)}var e=function(){var f=[],h,k;return k={resolve:function(a){if(f){var c=f;f=p;h=g(a);c.length&&b(function(){for(var a,b=0,d=c.length;b<d;b++)a=c[b],h.then(a[0],
|
||||
a[1])})}},reject:function(a){k.resolve(i(a))},promise:{then:function(b,k){var g=e(),i=function(d){try{g.resolve((b||c)(d))}catch(e){a(e),g.reject(e)}},n=function(b){try{g.resolve((k||d)(b))}catch(c){a(c),g.reject(c)}};f?f.push([i,n]):h.then(i,n);return g.promise}}}},g=function(a){return a&&a.then?a:{then:function(c){var d=e();b(function(){d.resolve(c(a))});return d.promise}}},i=function(a){return{then:function(c,k){var g=e();b(function(){g.resolve((k||d)(a))});return g.promise}}};return{defer:e,reject:i,
|
||||
when:function(f,h,k){var j=e(),l,o=function(b){try{return(h||c)(b)}catch(d){return a(d),i(d)}},r=function(b){try{return(k||d)(b)}catch(c){return a(c),i(c)}};b(function(){g(f).then(function(a){l||(l=!0,j.resolve(g(a).then(o,r)))},function(a){l||(l=!0,j.resolve(r(a)))})});return j.promise},all:function(a){var b=e(),c=a.length,d=[];c?m(a,function(a,e){g(a).then(function(a){e in d||(d[e]=a,--c||b.resolve(d))},function(a){e in d||b.reject(a)})}):b.resolve(d);return b.promise}}}function Qc(){var b={};this.when=
|
||||
function(a,c){b[a]=x({reloadOnSearch:!0},c);if(a){var d=a[a.length-1]=="/"?a.substr(0,a.length-1):a+"/";b[d]={redirectTo:a}}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache",function(a,c,d,e,g,i,f){function h(){var b=k(),h=r.current;if(b&&h&&b.$route===h.$route&&ha(b.pathParams,h.pathParams)&&!b.reloadOnSearch&&!o)h.params=b.params,V(h.params,d),a.$broadcast("$routeUpdate",h);else if(b||
|
||||
h)o=!1,a.$broadcast("$routeChangeStart",b,h),(r.current=b)&&b.redirectTo&&(F(b.redirectTo)?c.path(j(b.redirectTo,b.params)).search(b.params).replace():c.url(b.redirectTo(b.pathParams,c.path(),c.search())).replace()),e.when(b).then(function(){if(b){var a=[],c=[],d;m(b.resolve||{},function(b,d){a.push(d);c.push(F(b)?g.get(b):g.invoke(b))});if(!v(d=b.template))if(v(d=b.templateUrl))d=i.get(d,{cache:f}).then(function(a){return a.data});v(d)&&(a.push("$template"),c.push(d));return e.all(c).then(function(b){var c=
|
||||
{};m(b,function(b,d){c[a[d]]=b});return c})}}).then(function(c){if(b==r.current){if(b)b.locals=c,V(b.params,d);a.$broadcast("$routeChangeSuccess",b,h)}},function(c){b==r.current&&a.$broadcast("$routeChangeError",b,h,c)})}function k(){var a,d;m(b,function(b,e){if(!d&&(a=l(c.path(),e)))d=ya(b,{params:x({},c.search(),a),pathParams:a}),d.$route=b});return d||b[null]&&ya(b[null],{params:{},pathParams:{}})}function j(a,b){var c=[];m((a||"").split(":"),function(a,d){if(d==0)c.push(a);else{var e=a.match(/(\w+)(.*)/),
|
||||
f=e[1];c.push(b[f]);c.push(e[2]||"");delete b[f]}});return c.join("")}var l=function(a,b){var c="^"+b.replace(/([\.\\\(\)\^\$])/g,"\\$1")+"$",d=[],e={};m(b.split(/\W/),function(a){if(a){var b=RegExp(":"+a+"([\\W])");c.match(b)&&(c=c.replace(b,"([^\\/]*)$1"),d.push(a))}});var f=a.match(RegExp(c));f&&m(d,function(a,b){e[a]=f[b+1]});return f?e:null},o=!1,r={routes:b,reload:function(){o=!0;a.$evalAsync(h)}};a.$on("$locationChangeSuccess",h);return r}]}function Rc(){this.$get=I({})}function Sc(){var b=
|
||||
10;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse",function(a,c,d){function e(){this.$id=xa();this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this["this"]=this.$root=this;this.$$asyncQueue=[];this.$$listeners={}}function g(a){if(h.$$phase)throw B(h.$$phase+" already in progress");h.$$phase=a}function i(a,b){var c=d(a);ra(c,b);return c}function f(){}e.prototype={$new:function(a){if(N(a))throw B("API-CHANGE: Use $controller to instantiate controllers.");
|
||||
a?(a=new e,a.$root=this.$root):(a=function(){},a.prototype=this,a=new a,a.$id=xa());a["this"]=a;a.$$listeners={};a.$parent=this;a.$$asyncQueue=[];a.$$watchers=a.$$nextSibling=a.$$childHead=a.$$childTail=null;a.$$prevSibling=this.$$childTail;this.$$childHead?this.$$childTail=this.$$childTail.$$nextSibling=a:this.$$childHead=this.$$childTail=a;return a},$watch:function(a,b,c){var d=i(a,"watch"),e=this.$$watchers,g={fn:b,last:f,get:d,exp:a,eq:!!c};if(!N(b)){var h=i(b||D,"listener");g.fn=function(a,b,
|
||||
c){h(c)}}if(!e)e=this.$$watchers=[];e.unshift(g);return function(){Ua(e,g)}},$digest:function(){var a,d,e,i,r,n,m,q=b,s,p=[],C,A;g("$digest");do{m=!1;s=this;do{for(r=s.$$asyncQueue;r.length;)try{s.$eval(r.shift())}catch(K){c(K)}if(i=s.$$watchers)for(n=i.length;n--;)try{if(a=i[n],(d=a.get(s))!==(e=a.last)&&!(a.eq?ha(d,e):typeof d=="number"&&typeof e=="number"&&isNaN(d)&&isNaN(e)))m=!0,a.last=a.eq?V(d):d,a.fn(d,e===f?d:e,s),q<5&&(C=4-q,p[C]||(p[C]=[]),A=N(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):
|
||||
a.exp,A+="; newVal: "+da(d)+"; oldVal: "+da(e),p[C].push(A))}catch(W){c(W)}if(!(i=s.$$childHead||s!==this&&s.$$nextSibling))for(;s!==this&&!(i=s.$$nextSibling);)s=s.$parent}while(s=i);if(m&&!q--)throw h.$$phase=null,B(b+" $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: "+da(p));}while(m||r.length);h.$$phase=null},$destroy:function(){if(h!=this){var a=this.$parent;this.$broadcast("$destroy");if(a.$$childHead==this)a.$$childHead=this.$$nextSibling;if(a.$$childTail==
|
||||
this)a.$$childTail=this.$$prevSibling;if(this.$$prevSibling)this.$$prevSibling.$$nextSibling=this.$$nextSibling;if(this.$$nextSibling)this.$$nextSibling.$$prevSibling=this.$$prevSibling;this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null}},$eval:function(a,b){return d(a)(this,b)},$evalAsync:function(a){this.$$asyncQueue.push(a)},$apply:function(a){try{return g("$apply"),this.$eval(a)}catch(b){c(b)}finally{h.$$phase=null;try{h.$digest()}catch(d){throw c(d),d;}}},
|
||||
$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);return function(){c[za(c,b)]=null}},$emit:function(a,b){var d=[],e,f=this,g=!1,h={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},i=[h].concat(ia.call(arguments,1)),m,p;do{e=f.$$listeners[a]||d;h.currentScope=f;m=0;for(p=e.length;m<p;m++)if(e[m])try{if(e[m].apply(null,i),g)return h}catch(C){c(C)}else e.splice(m,1),m--,p--;f=f.$parent}while(f);
|
||||
return h},$broadcast:function(a,b){var d=this,e=this,f={name:a,targetScope:this,preventDefault:function(){f.defaultPrevented=!0},defaultPrevented:!1},g=[f].concat(ia.call(arguments,1)),h,i;do{d=e;f.currentScope=d;e=d.$$listeners[a]||[];h=0;for(i=e.length;h<i;h++)if(e[h])try{e[h].apply(null,g)}catch(m){c(m)}else e.splice(h,1),h--,i--;if(!(e=d.$$childHead||d!==this&&d.$$nextSibling))for(;d!==this&&!(e=d.$$nextSibling);)d=d.$parent}while(d=e);return f}};var h=new e;return h}]}function Tc(){this.$get=
|
||||
["$window",function(b){var a={},c=G((/android (\d+)/.exec(E(b.navigator.userAgent))||[])[1]);return{history:!(!b.history||!b.history.pushState||c<4),hashchange:"onhashchange"in b&&(!b.document.documentMode||b.document.documentMode>7),hasEvent:function(c){if(c=="input"&&aa==9)return!1;if(t(a[c])){var e=b.document.createElement("div");a[c]="on"+c in e}return a[c]},csp:!1}}]}function Uc(){this.$get=I(U)}function Mb(b){var a={},c,d,e;if(!b)return a;m(b.split("\n"),function(b){e=b.indexOf(":");c=E(R(b.substr(0,
|
||||
e)));d=R(b.substr(e+1));c&&(a[c]?a[c]+=", "+d:a[c]=d)});return a}function Nb(b){var a=L(b)?b:p;return function(c){a||(a=Mb(b));return c?a[E(c)]||null:a}}function Ob(b,a,c){if(N(c))return c(b,a);m(c,function(c){b=c(b,a)});return b}function Vc(){var b=/^\s*(\[|\{[^\{])/,a=/[\}\]]\s*$/,c=/^\)\]\}',?\n/,d=this.defaults={transformResponse:[function(d){F(d)&&(d=d.replace(c,""),b.test(d)&&a.test(d)&&(d=nb(d,!0)));return d}],transformRequest:[function(a){return L(a)&&Sa.apply(a)!=="[object File]"?da(a):a}],
|
||||
headers:{common:{Accept:"application/json, text/plain, */*","X-Requested-With":"XMLHttpRequest"},post:{"Content-Type":"application/json;charset=utf-8"},put:{"Content-Type":"application/json;charset=utf-8"}}},e=this.responseInterceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(a,b,c,h,k,j){function l(a){function c(a){var b=x({},a,{data:Ob(a.data,a.headers,f)});return 200<=a.status&&a.status<300?b:k.reject(b)}a.method=la(a.method);var e=a.transformRequest||
|
||||
d.transformRequest,f=a.transformResponse||d.transformResponse,h=d.headers,h=x({"X-XSRF-TOKEN":b.cookies()["XSRF-TOKEN"]},h.common,h[E(a.method)],a.headers),e=Ob(a.data,Nb(h),e),g;t(a.data)&&delete h["Content-Type"];g=o(a,e,h);g=g.then(c,c);m(w,function(a){g=a(g)});g.success=function(b){g.then(function(c){b(c.data,c.status,c.headers,a)});return g};g.error=function(b){g.then(null,function(c){b(c.data,c.status,c.headers,a)});return g};return g}function o(b,c,d){function e(a,b,c){m&&(200<=a&&a<300?m.put(w,
|
||||
[a,b,Mb(c)]):m.remove(w));f(b,a,c);h.$apply()}function f(a,c,d){c=Math.max(c,0);(200<=c&&c<300?j.resolve:j.reject)({data:a,status:c,headers:Nb(d),config:b})}function i(){var a=za(l.pendingRequests,b);a!==-1&&l.pendingRequests.splice(a,1)}var j=k.defer(),o=j.promise,m,p,w=r(b.url,b.params);l.pendingRequests.push(b);o.then(i,i);b.cache&&b.method=="GET"&&(m=L(b.cache)?b.cache:n);if(m)if(p=m.get(w))if(p.then)return p.then(i,i),p;else J(p)?f(p[1],p[0],V(p[2])):f(p,200,{});else m.put(w,o);p||a(b.method,
|
||||
w,c,e,d,b.timeout,b.withCredentials);return o}function r(a,b){if(!b)return a;var c=[];ec(b,function(a,b){a==null||a==p||(L(a)&&(a=da(a)),c.push(encodeURIComponent(b)+"="+encodeURIComponent(a)))});return a+(a.indexOf("?")==-1?"?":"&")+c.join("&")}var n=c("$http"),w=[];m(e,function(a){w.push(F(a)?j.get(a):j.invoke(a))});l.pendingRequests=[];(function(a){m(arguments,function(a){l[a]=function(b,c){return l(x(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){m(arguments,function(a){l[a]=
|
||||
function(b,c,d){return l(x(d||{},{method:a,url:b,data:c}))}})})("post","put");l.defaults=d;return l}]}function Wc(){this.$get=["$browser","$window","$document",function(b,a,c){return Xc(b,Yc,b.defer,a.angular.callbacks,c[0],a.location.protocol.replace(":",""))}]}function Xc(b,a,c,d,e,g){function i(a,b){var c=e.createElement("script"),d=function(){e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;aa?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror=
|
||||
d;e.body.appendChild(c)}return function(e,h,k,j,l,o,r){function n(a,c,d,e){c=(h.match(Fb)||["",g])[1]=="file"?d?200:404:c;a(c==1223?204:c,d,e);b.$$completeOutstandingRequest(D)}b.$$incOutstandingRequestCount();h=h||b.url();if(E(e)=="jsonp"){var p="_"+(d.counter++).toString(36);d[p]=function(a){d[p].data=a};i(h.replace("JSON_CALLBACK","angular.callbacks."+p),function(){d[p].data?n(j,200,d[p].data):n(j,-2);delete d[p]})}else{var q=new a;q.open(e,h,!0);m(l,function(a,b){a&&q.setRequestHeader(b,a)});
|
||||
var s;q.onreadystatechange=function(){q.readyState==4&&n(j,s||q.status,q.responseText,q.getAllResponseHeaders())};if(r)q.withCredentials=!0;q.send(k||"");o>0&&c(function(){s=-1;q.abort()},o)}}}function Zc(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},
|
||||
DATETIME_FORMATS:{MONTH:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),SHORTMONTH:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),DAY:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),SHORTDAY:"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",
|
||||
shortTime:"h:mm a"},pluralCat:function(b){return b===1?"one":"other"}}}}function $c(){this.$get=["$rootScope","$browser","$q","$exceptionHandler",function(b,a,c,d){function e(e,f,h){var k=c.defer(),j=k.promise,l=v(h)&&!h,f=a.defer(function(){try{k.resolve(e())}catch(a){k.reject(a),d(a)}l||b.$apply()},f),h=function(){delete g[j.$$timeoutId]};j.$$timeoutId=f;g[f]=k;j.then(h,h);return j}var g={};e.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),a.defer.cancel(b.$$timeoutId)):
|
||||
!1};return e}]}function Pb(b){function a(a,e){return b.factory(a+c,e)}var c="Filter";this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}];a("currency",Qb);a("date",Rb);a("filter",ad);a("json",bd);a("limitTo",cd);a("lowercase",dd);a("number",Sb);a("orderBy",Tb);a("uppercase",ed)}function ad(){return function(b,a){if(!(b instanceof Array))return b;var c=[];c.check=function(a){for(var b=0;b<c.length;b++)if(!c[b](a))return!1;return!0};var d=function(a,b){if(b.charAt(0)===
|
||||
"!")return!d(a,b.substr(1));switch(typeof a){case "boolean":case "number":case "string":return(""+a).toLowerCase().indexOf(b)>-1;case "object":for(var c in a)if(c.charAt(0)!=="$"&&d(a[c],b))return!0;return!1;case "array":for(c=0;c<a.length;c++)if(d(a[c],b))return!0;return!1;default:return!1}};switch(typeof a){case "boolean":case "number":case "string":a={$:a};case "object":for(var e in a)e=="$"?function(){var b=(""+a[e]).toLowerCase();b&&c.push(function(a){return d(a,b)})}():function(){var b=e,f=
|
||||
(""+a[e]).toLowerCase();f&&c.push(function(a){return d(fb(a,b),f)})}();break;case "function":c.push(a);break;default:return b}for(var g=[],i=0;i<b.length;i++){var f=b[i];c.check(f)&&g.push(f)}return g}}function Qb(b){var a=b.NUMBER_FORMATS;return function(b,d){if(t(d))d=a.CURRENCY_SYM;return Ub(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,2).replace(/\u00A4/g,d)}}function Sb(b){var a=b.NUMBER_FORMATS;return function(b,d){return Ub(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function Ub(b,a,c,d,e){if(isNaN(b)||
|
||||
!isFinite(b))return"";var g=b<0,b=Math.abs(b),i=b+"",f="",h=[],k=!1;if(i.indexOf("e")!==-1){var j=i.match(/([\d\.]+)e(-?)(\d+)/);j&&j[2]=="-"&&j[3]>e+1?i="0":(f=i,k=!0)}if(!k){i=(i.split(Vb)[1]||"").length;t(e)&&(e=Math.min(Math.max(a.minFrac,i),a.maxFrac));var i=Math.pow(10,e),b=Math.round(b*i)/i,b=(""+b).split(Vb),i=b[0],b=b[1]||"",k=0,j=a.lgSize,l=a.gSize;if(i.length>=j+l)for(var k=i.length-j,o=0;o<k;o++)(k-o)%l===0&&o!==0&&(f+=c),f+=i.charAt(o);for(o=k;o<i.length;o++)(i.length-o)%j===0&&o!==0&&
|
||||
(f+=c),f+=i.charAt(o);for(;b.length<e;)b+="0";e&&(f+=d+b.substr(0,e))}h.push(g?a.negPre:a.posPre);h.push(f);h.push(g?a.negSuf:a.posSuf);return h.join("")}function ib(b,a,c){var d="";b<0&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function P(b,a,c,d){return function(e){e=e["get"+b]();if(c>0||e>-c)e+=c;e===0&&c==-12&&(e=12);return ib(e,a,d)}}function La(b,a){return function(c,d){var e=c["get"+b](),g=la(a?"SHORT"+b:b);return d[g][e]}}function Rb(b){function a(a){var b;
|
||||
if(b=a.match(c)){var a=new Date(0),g=0,i=0;b[9]&&(g=G(b[9]+b[10]),i=G(b[9]+b[11]));a.setUTCFullYear(G(b[1]),G(b[2])-1,G(b[3]));a.setUTCHours(G(b[4]||0)-g,G(b[5]||0)-i,G(b[6]||0),G(b[7]||0))}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var g="",i=[],f,h,e=e||"mediumDate",e=b.DATETIME_FORMATS[e]||e;F(c)&&(c=fd.test(c)?G(c):a(c));wa(c)&&(c=new Date(c));if(!na(c))return c;for(;e;)(h=gd.exec(e))?(i=i.concat(ia.call(h,
|
||||
1)),e=i.pop()):(i.push(e),e=null);m(i,function(a){f=hd[a];g+=f?f(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function bd(){return function(b){return da(b,!0)}}function cd(){return function(b,a){if(!(b instanceof Array))return b;var a=G(a),c=[],d,e;if(!b||!(b instanceof Array))return c;a>b.length?a=b.length:a<-b.length&&(a=-b.length);a>0?(d=0,e=a):(d=b.length+a,e=b.length);for(;d<e;d++)c.push(b[d]);return c}}function Tb(b){return function(a,c,d){function e(a,b){return Wa(b)?
|
||||
function(b,c){return a(c,b)}:a}if(!(a instanceof Array))return a;if(!c)return a;for(var c=J(c)?c:[c],c=Ta(c,function(a){var c=!1,d=a||ma;if(F(a)){if(a.charAt(0)=="+"||a.charAt(0)=="-")c=a.charAt(0)=="-",a=a.substring(1);d=b(a)}return e(function(a,b){var c;c=d(a);var e=d(b),f=typeof c,g=typeof e;f==g?(f=="string"&&(c=c.toLowerCase()),f=="string"&&(e=e.toLowerCase()),c=c===e?0:c<e?-1:1):c=f<g?-1:1;return c},c)}),g=[],i=0;i<a.length;i++)g.push(a[i]);return g.sort(e(function(a,b){for(var d=0;d<c.length;d++){var e=
|
||||
c[d](a,b);if(e!==0)return e}return 0},d))}}function S(b){N(b)&&(b={link:b});b.restrict=b.restrict||"AC";return I(b)}function Wb(b,a){function c(a,c){c=c?"-"+$a(c,"-"):"";b.removeClass((a?Ma:Na)+c).addClass((a?Na:Ma)+c)}var d=this,e=b.parent().controller("form")||Oa,g=0,i=d.$error={};d.$name=a.name;d.$dirty=!1;d.$pristine=!0;d.$valid=!0;d.$invalid=!1;e.$addControl(d);b.addClass(Pa);c(!0);d.$addControl=function(a){a.$name&&!d.hasOwnProperty(a.$name)&&(d[a.$name]=a)};d.$removeControl=function(a){a.$name&&
|
||||
d[a.$name]===a&&delete d[a.$name];m(i,function(b,c){d.$setValidity(c,!0,a)})};d.$setValidity=function(a,b,k){var j=i[a];if(b){if(j&&(Ua(j,k),!j.length)){g--;if(!g)c(b),d.$valid=!0,d.$invalid=!1;i[a]=!1;c(!0,a);e.$setValidity(a,!0,d)}}else{g||c(b);if(j){if(za(j,k)!=-1)return}else i[a]=j=[],g++,c(!1,a),e.$setValidity(a,!1,d);j.push(k);d.$valid=!1;d.$invalid=!0}};d.$setDirty=function(){b.removeClass(Pa).addClass(Xb);d.$dirty=!0;d.$pristine=!1;e.$setDirty()}}function T(b){return t(b)||b===""||b===null||
|
||||
b!==b}function Qa(b,a,c,d,e,g){var i=function(){var c=R(a.val());d.$viewValue!==c&&b.$apply(function(){d.$setViewValue(c)})};if(e.hasEvent("input"))a.bind("input",i);else{var f;a.bind("keydown",function(a){a=a.keyCode;a===91||15<a&&a<19||37<=a&&a<=40||f||(f=g.defer(function(){i();f=null}))});a.bind("change",i)}d.$render=function(){a.val(T(d.$viewValue)?"":d.$viewValue)};var h=c.ngPattern,k=function(a,b){return T(b)||a.test(b)?(d.$setValidity("pattern",!0),b):(d.$setValidity("pattern",!1),p)};h&&(h.match(/^\/(.*)\/$/)?
|
||||
(h=RegExp(h.substr(1,h.length-2)),e=function(a){return k(h,a)}):e=function(a){var c=b.$eval(h);if(!c||!c.test)throw new B("Expected "+h+" to be a RegExp but was "+c);return k(c,a)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var j=G(c.ngMinlength),e=function(a){return!T(a)&&a.length<j?(d.$setValidity("minlength",!1),p):(d.$setValidity("minlength",!0),a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var l=G(c.ngMaxlength),c=function(a){return!T(a)&&a.length>l?(d.$setValidity("maxlength",
|
||||
!1),p):(d.$setValidity("maxlength",!0),a)};d.$parsers.push(c);d.$formatters.push(c)}}function jb(b,a){b="ngClass"+b;return S(function(c,d,e){function g(b,d){if(a===!0||c.$index%2===a)d&&b!==d&&i(d),f(b)}function i(a){L(a)&&!J(a)&&(a=Ta(a,function(a,b){if(a)return b}));d.removeClass(J(a)?a.join(" "):a)}function f(a){L(a)&&!J(a)&&(a=Ta(a,function(a,b){if(a)return b}));a&&d.addClass(J(a)?a.join(" "):a)}c.$watch(e[b],g,!0);e.$observe("class",function(){var a=c.$eval(e[b]);g(a,a)});b!=="ngClass"&&c.$watch("$index",
|
||||
function(d,g){var j=d%2;j!==g%2&&(j==a?f(c.$eval(e[b])):i(c.$eval(e[b])))})})}var E=function(b){return F(b)?b.toLowerCase():b},la=function(b){return F(b)?b.toUpperCase():b},B=U.Error,aa=G((/msie (\d+)/.exec(E(navigator.userAgent))||[])[1]),u,ja,ia=[].slice,Ra=[].push,Sa=Object.prototype.toString,Yb=U.angular||(U.angular={}),ta,Cb,Z=["0","0","0"];D.$inject=[];ma.$inject=[];Cb=aa<9?function(b){b=b.nodeName?b:b[0];return b.scopeName&&b.scopeName!="HTML"?la(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?
|
||||
b.nodeName:b[0].nodeName};var kc=/[A-Z]/g,id={full:"1.0.3",major:1,minor:0,dot:3,codeName:"bouncy-thunder"},Ba=Q.cache={},Aa=Q.expando="ng-"+(new Date).getTime(),oc=1,Zb=U.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},db=U.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)},mc=/([\:\-\_]+(.))/g,nc=/^moz([A-Z])/,ua=Q.prototype={ready:function(b){function a(){c||(c=!0,b())}
|
||||
var c=!1;this.bind("DOMContentLoaded",a);Q(U).bind("load",a)},toString:function(){var b=[];m(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return b>=0?u(this[b]):u(this[this.length+b])},length:0,push:Ra,sort:[].sort,splice:[].splice},Ea={};m("multiple,selected,checked,disabled,readOnly,required".split(","),function(b){Ea[E(b)]=b});var zb={};m("input,select,option,textarea,button,form".split(","),function(b){zb[la(b)]=!0});m({data:ub,inheritedData:Da,scope:function(b){return Da(b,
|
||||
"$scope")},controller:xb,injector:function(b){return Da(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Ca,css:function(b,a,c){a=rb(a);if(v(c))b.style[a]=c;else{var d;aa<=8&&(d=b.currentStyle&&b.currentStyle[a],d===""&&(d="auto"));d=d||b.style[a];aa<=8&&(d=d===""?p:d);return d}},attr:function(b,a,c){var d=E(a);if(Ea[d])if(v(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||D).specified?d:p;else if(v(c))b.setAttribute(a,
|
||||
c);else if(b.getAttribute)return b=b.getAttribute(a,2),b===null?p:b},prop:function(b,a,c){if(v(c))b[a]=c;else return b[a]},text:x(aa<9?function(b,a){if(b.nodeType==1){if(t(a))return b.innerText;b.innerText=a}else{if(t(a))return b.nodeValue;b.nodeValue=a}}:function(b,a){if(t(a))return b.textContent;b.textContent=a},{$dv:""}),val:function(b,a){if(t(a))return b.value;b.value=a},html:function(b,a){if(t(a))return b.innerHTML;for(var c=0,d=b.childNodes;c<d.length;c++)sa(d[c]);b.innerHTML=a}},function(b,
|
||||
a){Q.prototype[a]=function(a,d){var e,g;if((b.length==2&&b!==Ca&&b!==xb?a:d)===p)if(L(a)){for(e=0;e<this.length;e++)if(b===ub)b(this[e],a);else for(g in a)b(this[e],g,a[g]);return this}else{if(this.length)return b(this[0],a,d)}else{for(e=0;e<this.length;e++)b(this[e],a,d);return this}return b.$dv}});m({removeData:sb,dealoc:sa,bind:function a(c,d,e){var g=$(c,"events"),i=$(c,"handle");g||$(c,"events",g={});i||$(c,"handle",i=pc(c,g));m(d.split(" "),function(d){var h=g[d];if(!h){if(d=="mouseenter"||
|
||||
d=="mouseleave"){var k=0;g.mouseenter=[];g.mouseleave=[];a(c,"mouseover",function(a){k++;k==1&&i(a,"mouseenter")});a(c,"mouseout",function(a){k--;k==0&&i(a,"mouseleave")})}else Zb(c,d,i),g[d]=[];h=g[d]}h.push(e)})},unbind:tb,replaceWith:function(a,c){var d,e=a.parentNode;sa(a);m(new Q(c),function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c,a);d=c})},children:function(a){var c=[];m(a.childNodes,function(a){a.nodeName!="#text"&&c.push(a)});return c},contents:function(a){return a.childNodes},
|
||||
append:function(a,c){m(new Q(c),function(c){a.nodeType===1&&a.appendChild(c)})},prepend:function(a,c){if(a.nodeType===1){var d=a.firstChild;m(new Q(c),function(c){d?a.insertBefore(c,d):(a.appendChild(c),d=c)})}},wrap:function(a,c){var c=u(c)[0],d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:function(a){sa(a);var c=a.parentNode;c&&c.removeChild(a)},after:function(a,c){var d=a,e=a.parentNode;m(new Q(c),function(a){e.insertBefore(a,d.nextSibling);d=a})},addClass:wb,removeClass:vb,toggleClass:function(a,
|
||||
c,d){t(d)&&(d=!Ca(a,c));(d?wb:vb)(a,c)},parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},next:function(a){return a.nextSibling},find:function(a,c){return a.getElementsByTagName(c)},clone:cb,triggerHandler:function(a,c){var d=($(a,"events")||{})[c];m(d,function(c){c.call(a,null)})}},function(a,c){Q.prototype[c]=function(c,e){for(var g,i=0;i<this.length;i++)g==p?(g=a(this[i],c,e),g!==p&&(g=u(g))):bb(g,a(this[i],c,e));return g==p?this:g}});Fa.prototype={put:function(a,c){this[ga(a)]=
|
||||
c},get:function(a){return this[ga(a)]},remove:function(a){var c=this[a=ga(a)];delete this[a];return c}};eb.prototype={push:function(a,c){var d=this[a=ga(a)];d?d.push(c):this[a]=[c]},shift:function(a){var c=this[a=ga(a)];if(c)return c.length==1?(delete this[a],c[0]):c.shift()},peek:function(a){if(a=this[ga(a)])return a[0]}};var rc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,sc=/,/,tc=/^\s*(_?)(\S+?)\1\s*$/,qc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Db="Non-assignable model expression: ";Bb.$inject=["$provide"];
|
||||
var Ac=/^(x[\:\-_]|data[\:\-_])/i,Fb=/^([^:]+):\/\/(\w+:{0,1}\w*@)?([\w\.-]*)(:([0-9]+))?(\/[^\?#]*)?(\?([^#]*))?(#(.*))?$/,$b=/^([^\?#]*)?(\?([^#]*))?(#(.*))?$/,Hc=$b,Gb={http:80,https:443,ftp:21};gb.prototype={$$replace:!1,absUrl:Ja("$$absUrl"),url:function(a,c){if(t(a))return this.$$url;var d=$b.exec(a);d[1]&&this.path(decodeURIComponent(d[1]));if(d[2]||d[1])this.search(d[3]||"");this.hash(d[5]||"",c);return this},protocol:Ja("$$protocol"),host:Ja("$$host"),port:Ja("$$port"),path:Ib("$$path",function(a){return a.charAt(0)==
|
||||
"/"?a:"/"+a}),search:function(a,c){if(t(a))return this.$$search;v(c)?c===null?delete this.$$search[a]:this.$$search[a]=c:this.$$search=F(a)?Xa(a):a;this.$$compose();return this},hash:Ib("$$hash",ma),replace:function(){this.$$replace=!0;return this}};Ia.prototype=ya(gb.prototype);Hb.prototype=ya(Ia.prototype);var Ka={"null":function(){return null},"true":function(){return!0},"false":function(){return!1},undefined:D,"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return v(d)?v(e)?d+e:d:v(e)?e:p},"-":function(a,
|
||||
c,d,e){d=d(a,c);e=e(a,c);return(v(d)?d:0)-(v(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"^":function(a,c,d,e){return d(a,c)^e(a,c)},"=":D,"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,
|
||||
c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Lc={n:"\n",f:"\u000c",r:"\r",t:"\t",v:"\u000b","'":"'",'"':'"'},hb={},Yc=U.XMLHttpRequest||function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(c){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(d){}throw new B("This browser does not support XMLHttpRequest.");
|
||||
};Pb.$inject=["$provide"];Qb.$inject=["$locale"];Sb.$inject=["$locale"];var Vb=".",hd={yyyy:P("FullYear",4),yy:P("FullYear",2,0,!0),y:P("FullYear",1),MMMM:La("Month"),MMM:La("Month",!0),MM:P("Month",2,1),M:P("Month",1,1),dd:P("Date",2),d:P("Date",1),HH:P("Hours",2),H:P("Hours",1),hh:P("Hours",2,-12),h:P("Hours",1,-12),mm:P("Minutes",2),m:P("Minutes",1),ss:P("Seconds",2),s:P("Seconds",1),EEEE:La("Day"),EEE:La("Day",!0),a:function(a,c){return a.getHours()<12?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=a.getTimezoneOffset();
|
||||
return ib(a/60,2)+ib(Math.abs(a%60),2)}},gd=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,fd=/^\d+$/;Rb.$inject=["$locale"];var dd=I(E),ed=I(la);Tb.$inject=["$parse"];var jd=I({restrict:"E",compile:function(a,c){c.href||c.$set("href","");return function(a,c){c.bind("click",function(a){if(!c.attr("href"))return a.preventDefault(),!1})}}}),kb={};m(Ea,function(a,c){var d=fa("ng-"+c);kb[d]=function(){return{priority:100,compile:function(){return function(a,g,i){a.$watch(i[d],
|
||||
function(a){i.$set(c,!!a)})}}}}});m(["src","href"],function(a){var c=fa("ng-"+a);kb[c]=function(){return{priority:99,link:function(d,e,g){g.$observe(c,function(c){c&&(g.$set(a,c),aa&&e.prop(a,c))})}}}});var Oa={$addControl:D,$removeControl:D,$setValidity:D,$setDirty:D};Wb.$inject=["$element","$attrs","$scope"];var Ra=function(a){return["$timeout",function(c){var d={name:"form",restrict:"E",controller:Wb,compile:function(){return{pre:function(a,d,i,f){if(!i.action){var h=function(a){a.preventDefault?
|
||||
a.preventDefault():a.returnValue=!1};Zb(d[0],"submit",h);d.bind("$destroy",function(){c(function(){db(d[0],"submit",h)},0,!1)})}var k=d.parent().controller("form"),j=i.name||i.ngForm;j&&(a[j]=f);k&&d.bind("$destroy",function(){k.$removeControl(f);j&&(a[j]=p);x(f,Oa)})}}}};return a?x(V(d),{restrict:"EAC"}):d}]},kd=Ra(),ld=Ra(!0),md=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,nd=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/,od=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,
|
||||
ac={text:Qa,number:function(a,c,d,e,g,i){Qa(a,c,d,e,g,i);e.$parsers.push(function(a){var c=T(a);return c||od.test(a)?(e.$setValidity("number",!0),a===""?null:c?a:parseFloat(a)):(e.$setValidity("number",!1),p)});e.$formatters.push(function(a){return T(a)?"":""+a});if(d.min){var f=parseFloat(d.min),a=function(a){return!T(a)&&a<f?(e.$setValidity("min",!1),p):(e.$setValidity("min",!0),a)};e.$parsers.push(a);e.$formatters.push(a)}if(d.max){var h=parseFloat(d.max),d=function(a){return!T(a)&&a>h?(e.$setValidity("max",
|
||||
!1),p):(e.$setValidity("max",!0),a)};e.$parsers.push(d);e.$formatters.push(d)}e.$formatters.push(function(a){return T(a)||wa(a)?(e.$setValidity("number",!0),a):(e.$setValidity("number",!1),p)})},url:function(a,c,d,e,g,i){Qa(a,c,d,e,g,i);a=function(a){return T(a)||md.test(a)?(e.$setValidity("url",!0),a):(e.$setValidity("url",!1),p)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,g,i){Qa(a,c,d,e,g,i);a=function(a){return T(a)||nd.test(a)?(e.$setValidity("email",!0),a):(e.$setValidity("email",
|
||||
!1),p)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){t(d.name)&&c.attr("name",xa());c.bind("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var g=d.ngTrueValue,i=d.ngFalseValue;F(g)||(g=!0);F(i)||(i=!1);c.bind("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$formatters.push(function(a){return a===
|
||||
g});e.$parsers.push(function(a){return a?g:i})},hidden:D,button:D,submit:D,reset:D},bc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel",link:function(d,e,g,i){i&&(ac[E(g.type)]||ac.text)(d,e,g,i,c,a)}}}],Na="ng-valid",Ma="ng-invalid",Pa="ng-pristine",Xb="ng-dirty",pd=["$scope","$exceptionHandler","$attrs","$element","$parse",function(a,c,d,e,g){function i(a,c){c=c?"-"+$a(c,"-"):"";e.removeClass((a?Ma:Na)+c).addClass((a?Na:Ma)+c)}this.$modelValue=this.$viewValue=Number.NaN;
|
||||
this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var f=g(d.ngModel),h=f.assign;if(!h)throw B(Db+d.ngModel+" ("+pa(e)+")");this.$render=D;var k=e.inheritedData("$formController")||Oa,j=0,l=this.$error={};e.addClass(Pa);i(!0);this.$setValidity=function(a,c){if(l[a]!==!c){if(c){if(l[a]&&j--,!j)i(!0),this.$valid=!0,this.$invalid=!1}else i(!1),this.$invalid=!0,this.$valid=!1,j++;l[a]=!c;i(c,a);k.$setValidity(a,
|
||||
c,this)}};this.$setViewValue=function(d){this.$viewValue=d;if(this.$pristine)this.$dirty=!0,this.$pristine=!1,e.removeClass(Pa).addClass(Xb),k.$setDirty();m(this.$parsers,function(a){d=a(d)});if(this.$modelValue!==d)this.$modelValue=d,h(a,d),m(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})};var o=this;a.$watch(function(){var c=f(a);if(o.$modelValue!==c){var d=o.$formatters,e=d.length;for(o.$modelValue=c;e--;)c=d[e](c);if(o.$viewValue!==c)o.$viewValue=c,o.$render()}})}],qd=function(){return{require:["ngModel",
|
||||
"^?form"],controller:pd,link:function(a,c,d,e){var g=e[0],i=e[1]||Oa;i.$addControl(g);c.bind("$destroy",function(){i.$removeControl(g)})}}},rd=I({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),cc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var g=function(a){if(d.required&&(T(a)||a===!1))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(g);e.$parsers.unshift(g);
|
||||
d.$observe("required",function(){g(e.$viewValue)})}}}},sd=function(){return{require:"ngModel",link:function(a,c,d,e){var g=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){var c=[];a&&m(a.split(g),function(a){a&&c.push(R(a))});return c});e.$formatters.push(function(a){return J(a)?a.join(", "):p})}}},td=/^(true|false|\d+)$/,ud=function(){return{priority:100,compile:function(a,c){return td.test(c.ngValue)?function(a,c,g){g.$set("value",a.$eval(g.ngValue))}:function(a,
|
||||
c,g){a.$watch(g.ngValue,function(a){g.$set("value",a,!1)})}}}},vd=S(function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==p?"":a)})}),wd=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],xd=[function(){return function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBindHtmlUnsafe);a.$watch(d.ngBindHtmlUnsafe,
|
||||
function(a){c.html(a||"")})}}],yd=jb("",!0),zd=jb("Odd",0),Ad=jb("Even",1),Bd=S({compile:function(a,c){c.$set("ngCloak",p);a.removeClass("ng-cloak")}}),Cd=[function(){return{scope:!0,controller:"@"}}],Dd=["$sniffer",function(a){return{priority:1E3,compile:function(){a.csp=!0}}}],dc={};m("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave".split(" "),function(a){var c=fa("ng-"+a);dc[c]=["$parse",function(d){return function(e,g,i){var f=d(i[c]);g.bind(E(a),function(a){e.$apply(function(){f(e,
|
||||
{$event:a})})})}}]});var Ed=S(function(a,c,d){c.bind("submit",function(){a.$apply(d.ngSubmit)})}),Fd=["$http","$templateCache","$anchorScroll","$compile",function(a,c,d,e){return{restrict:"ECA",terminal:!0,compile:function(g,i){var f=i.ngInclude||i.src,h=i.onload||"",k=i.autoscroll;return function(g,i){var o=0,m,n=function(){m&&(m.$destroy(),m=null);i.html("")};g.$watch(f,function(f){var p=++o;f?a.get(f,{cache:c}).success(function(a){p===o&&(m&&m.$destroy(),m=g.$new(),i.html(a),e(i.contents())(m),
|
||||
v(k)&&(!k||g.$eval(k))&&d(),m.$emit("$includeContentLoaded"),g.$eval(h))}).error(function(){p===o&&n()}):n()})}}}}],Gd=S({compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),Hd=S({terminal:!0,priority:1E3}),Id=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,g,i){var f=i.count,h=g.attr(i.$attr.when),k=i.offset||0,j=e.$eval(h),l={},o=c.startSymbol(),r=c.endSymbol();m(j,function(a,e){l[e]=c(a.replace(d,o+f+"-"+k+r))});e.$watch(function(){var c=
|
||||
parseFloat(e.$eval(f));return isNaN(c)?"":(j[c]||(c=a.pluralCat(c-k)),l[c](e,g,!0))},function(a){g.text(a)})}}}],Jd=S({transclude:"element",priority:1E3,terminal:!0,compile:function(a,c,d){return function(a,c,i){var f=i.ngRepeat,i=f.match(/^\s*(.+)\s+in\s+(.*)\s*$/),h,k,j;if(!i)throw B("Expected ngRepeat in form of '_item_ in _collection_' but got '"+f+"'.");f=i[1];h=i[2];i=f.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!i)throw B("'item' in 'item in collection' should be identifier or (key, value) but got '"+
|
||||
f+"'.");k=i[3]||i[1];j=i[2];var l=new eb;a.$watch(function(a){var e,f,i=a.$eval(h),m=gc(i,!0),p,u=new eb,C,A,v,t,y=c;if(J(i))v=i||[];else{v=[];for(C in i)i.hasOwnProperty(C)&&C.charAt(0)!="$"&&v.push(C);v.sort()}e=0;for(f=v.length;e<f;e++){C=i===v?e:v[e];A=i[C];if(t=l.shift(A)){p=t.scope;u.push(A,t);if(e!==t.index)t.index=e,y.after(t.element);y=t.element}else p=a.$new();p[k]=A;j&&(p[j]=C);p.$index=e;p.$first=e===0;p.$last=e===m-1;p.$middle=!(p.$first||p.$last);t||d(p,function(a){y.after(a);t={scope:p,
|
||||
element:y=a,index:e};u.push(A,t)})}for(C in l)if(l.hasOwnProperty(C))for(v=l[C];v.length;)A=v.pop(),A.element.remove(),A.scope.$destroy();l=u})}}}),Kd=S(function(a,c,d){a.$watch(d.ngShow,function(a){c.css("display",Wa(a)?"":"none")})}),Ld=S(function(a,c,d){a.$watch(d.ngHide,function(a){c.css("display",Wa(a)?"none":"")})}),Md=S(function(a,c,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&m(d,function(a,d){c.css(d,"")});a&&c.css(a)},!0)}),Nd=I({restrict:"EA",compile:function(a,c){var d=c.ngSwitch||c.on,
|
||||
e={};a.data("ng-switch",e);return function(a,i){var f,h,k;a.$watch(d,function(d){h&&(k.$destroy(),h.remove(),h=k=null);if(f=e["!"+d]||e["?"])a.$eval(c.change),k=a.$new(),f(k,function(a){h=a;i.append(a)})})}}}),Od=S({transclude:"element",priority:500,compile:function(a,c,d){a=a.inheritedData("ng-switch");qa(a);a["!"+c.ngSwitchWhen]=d}}),Pd=S({transclude:"element",priority:500,compile:function(a,c,d){a=a.inheritedData("ng-switch");qa(a);a["?"]=d}}),Qd=S({controller:["$transclude","$element",function(a,
|
||||
c){a(function(a){c.append(a)})}]}),Rd=["$http","$templateCache","$route","$anchorScroll","$compile","$controller",function(a,c,d,e,g,i){return{restrict:"ECA",terminal:!0,link:function(a,c,k){function j(){var j=d.current&&d.current.locals,k=j&&j.$template;if(k){c.html(k);l&&(l.$destroy(),l=null);var k=g(c.contents()),p=d.current;l=p.scope=a.$new();if(p.controller)j.$scope=l,j=i(p.controller,j),c.contents().data("$ngControllerController",j);k(l);l.$emit("$viewContentLoaded");l.$eval(m);e()}else c.html(""),
|
||||
l&&(l.$destroy(),l=null)}var l,m=k.onload||"";a.$on("$routeChangeSuccess",j);j()}}}],Sd=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(c,d){d.type=="text/ng-template"&&a.put(d.id,c[0].text)}}}],Td=I({terminal:!0}),Ud=["$compile","$parse",function(a,c){var d=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w\d]*)|(?:\(\s*([\$\w][\$\w\d]*)\s*,\s*([\$\w][\$\w\d]*)\s*\)))\s+in\s+(.*)$/,e={$setViewValue:D};return{restrict:"E",require:["select",
|
||||
"?ngModel"],controller:["$element","$scope","$attrs",function(a,c,d){var h=this,k={},j=e,l;h.databound=d.ngModel;h.init=function(a,c,d){j=a;l=d};h.addOption=function(c){k[c]=!0;j.$viewValue==c&&(a.val(c),l.parent()&&l.remove())};h.removeOption=function(a){this.hasOption(a)&&(delete k[a],j.$viewValue==a&&this.renderUnknownOption(a))};h.renderUnknownOption=function(c){c="? "+ga(c)+" ?";l.val(c);a.prepend(l);a.val(c);l.prop("selected",!0)};h.hasOption=function(a){return k.hasOwnProperty(a)};c.$on("$destroy",
|
||||
function(){h.renderUnknownOption=D})}],link:function(e,i,f,h){function k(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(A.parent()&&A.remove(),c.val(a),a===""&&s.prop("selected",!0)):t(a)&&s?c.val(""):e.renderUnknownOption(a)};c.bind("change",function(){a.$apply(function(){A.parent()&&A.remove();d.$setViewValue(c.val())})})}function j(a,c,d){var e;d.$render=function(){var a=new Fa(d.$viewValue);m(c.children(),function(c){c.selected=v(a.get(c.value))})};a.$watch(function(){ha(e,d.$viewValue)||
|
||||
(e=V(d.$viewValue),d.$render())});c.bind("change",function(){a.$apply(function(){var a=[];m(c.children(),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function l(e,f,g){function h(){var a={"":[]},c=[""],d,i,s,t,u;s=g.$modelValue;t=r(e)||[];var y=l?lb(t):t,A,w,x;w={};u=!1;var z,B;if(n)u=new Fa(s);else if(s===null||q)a[""].push({selected:s===null,id:"",label:""}),u=!0;for(x=0;A=y.length,x<A;x++){w[k]=t[l?w[l]=y[x]:x];d=m(e,w)||"";if(!(i=a[d]))i=a[d]=[],c.push(d);n?d=u.remove(o(e,
|
||||
w))!=p:(d=s===o(e,w),u=u||d);z=j(e,w);z=z===p?"":z;i.push({id:l?y[x]:x,label:z,selected:d})}!n&&!u&&a[""].unshift({id:"?",label:"",selected:!0});w=0;for(y=c.length;w<y;w++){d=c[w];i=a[d];if(v.length<=w)s={element:C.clone().attr("label",d),label:i.label},t=[s],v.push(t),f.append(s.element);else if(t=v[w],s=t[0],s.label!=d)s.element.attr("label",s.label=d);z=null;x=0;for(A=i.length;x<A;x++)if(d=i[x],u=t[x+1]){z=u.element;if(u.label!==d.label)z.text(u.label=d.label);if(u.id!==d.id)z.val(u.id=d.id);if(u.element.selected!==
|
||||
d.selected)z.prop("selected",u.selected=d.selected)}else d.id===""&&q?B=q:(B=D.clone()).val(d.id).attr("selected",d.selected).text(d.label),t.push({element:B,label:d.label,id:d.id,selected:d.selected}),z?z.after(B):s.element.append(B),z=B;for(x++;t.length>x;)t.pop().element.remove()}for(;v.length>w;)v.pop()[0].element.remove()}var i;if(!(i=w.match(d)))throw B("Expected ngOptions in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '"+w+"'.");var j=c(i[2]||i[1]),k=i[4]||
|
||||
i[6],l=i[5],m=c(i[3]||""),o=c(i[2]?i[1]:k),r=c(i[7]),v=[[{element:f,label:""}]];q&&(a(q)(e),q.removeClass("ng-scope"),q.remove());f.html("");f.bind("change",function(){e.$apply(function(){var a,c=r(e)||[],d={},h,i,j,m,q,s;if(n){i=[];m=0;for(s=v.length;m<s;m++){a=v[m];j=1;for(q=a.length;j<q;j++)if((h=a[j].element)[0].selected)h=h.val(),l&&(d[l]=h),d[k]=c[h],i.push(o(e,d))}}else h=f.val(),h=="?"?i=p:h==""?i=null:(d[k]=c[h],l&&(d[l]=h),i=o(e,d));g.$setViewValue(i)})});g.$render=h;e.$watch(h)}if(h[1]){for(var o=
|
||||
h[0],r=h[1],n=f.multiple,w=f.ngOptions,q=!1,s,D=u(ca.createElement("option")),C=u(ca.createElement("optgroup")),A=D.clone(),h=0,x=i.children(),E=x.length;h<E;h++)if(x[h].value==""){s=q=x.eq(h);break}o.init(r,q,A);if(n&&(f.required||f.ngRequired)){var y=function(a){r.$setValidity("required",!f.required||a&&a.length);return a};r.$parsers.push(y);r.$formatters.unshift(y);f.$observe("required",function(){y(r.$viewValue)})}w?l(e,i,r):n?j(e,i,r):k(e,i,r,o)}}}}],Vd=["$interpolate",function(a){var c={addOption:D,
|
||||
removeOption:D};return{restrict:"E",priority:100,compile:function(d,e){if(t(e.value)){var g=a(d.text(),!0);g||e.$set("value",d.text())}return function(a,d,e){var k=d.parent(),j=k.data("$selectController")||k.parent().data("$selectController");j&&j.databound?d.prop("selected",!1):j=c;g?a.$watch(g,function(a,c){e.$set("value",a);a!==c&&j.removeOption(c);j.addOption(a)}):j.addOption(e.value);d.bind("$destroy",function(){j.removeOption(e.value)})}}}}],Wd=I({restrict:"E",terminal:!0});(ja=U.jQuery)?(u=
|
||||
ja,x(ja.fn,{scope:ua.scope,controller:ua.controller,injector:ua.injector,inheritedData:ua.inheritedData}),ab("remove",!0),ab("empty"),ab("html")):u=Q;Yb.element=u;(function(a){x(a,{bootstrap:pb,copy:V,extend:x,equals:ha,element:u,forEach:m,injector:qb,noop:D,bind:Va,toJson:da,fromJson:nb,identity:ma,isUndefined:t,isDefined:v,isString:F,isFunction:N,isObject:L,isNumber:wa,isElement:fc,isArray:J,version:id,isDate:na,lowercase:E,uppercase:la,callbacks:{counter:0}});ta=lc(U);try{ta("ngLocale")}catch(c){ta("ngLocale",
|
||||
[]).provider("$locale",Zc)}ta("ng",["ngLocale"],["$provide",function(a){a.provider("$compile",Bb).directive({a:jd,input:bc,textarea:bc,form:kd,script:Sd,select:Ud,style:Wd,option:Vd,ngBind:vd,ngBindHtmlUnsafe:xd,ngBindTemplate:wd,ngClass:yd,ngClassEven:Ad,ngClassOdd:zd,ngCsp:Dd,ngCloak:Bd,ngController:Cd,ngForm:ld,ngHide:Ld,ngInclude:Fd,ngInit:Gd,ngNonBindable:Hd,ngPluralize:Id,ngRepeat:Jd,ngShow:Kd,ngSubmit:Ed,ngStyle:Md,ngSwitch:Nd,ngSwitchWhen:Od,ngSwitchDefault:Pd,ngOptions:Td,ngView:Rd,ngTransclude:Qd,
|
||||
ngModel:qd,ngList:sd,ngChange:rd,required:cc,ngRequired:cc,ngValue:ud}).directive(kb).directive(dc);a.provider({$anchorScroll:uc,$browser:wc,$cacheFactory:xc,$controller:Bc,$document:Cc,$exceptionHandler:Dc,$filter:Pb,$interpolate:Ec,$http:Vc,$httpBackend:Wc,$location:Ic,$log:Jc,$parse:Nc,$route:Qc,$routeParams:Rc,$rootScope:Sc,$q:Oc,$sniffer:Tc,$templateCache:yc,$timeout:$c,$window:Uc})}])})(Yb);u(ca).ready(function(){jc(ca,pb)})})(window,document);angular.element(document).find("head").append('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak{display:none;}ng\\:form{display:block;}</style>');
|
||||
1092
AndorsTrailEdit/inc/bootstrap/css/bootstrap-responsive.css
vendored
Normal file
1092
AndorsTrailEdit/inc/bootstrap/css/bootstrap-responsive.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
9
AndorsTrailEdit/inc/bootstrap/css/bootstrap-responsive.min.css
vendored
Normal file
9
AndorsTrailEdit/inc/bootstrap/css/bootstrap-responsive.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
6039
AndorsTrailEdit/inc/bootstrap/css/bootstrap.css
vendored
Normal file
6039
AndorsTrailEdit/inc/bootstrap/css/bootstrap.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
9
AndorsTrailEdit/inc/bootstrap/css/bootstrap.min.css
vendored
Normal file
9
AndorsTrailEdit/inc/bootstrap/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
AndorsTrailEdit/inc/bootstrap/img/glyphicons-halflings-white.png
Normal file
BIN
AndorsTrailEdit/inc/bootstrap/img/glyphicons-halflings-white.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.6 KiB |
BIN
AndorsTrailEdit/inc/bootstrap/img/glyphicons-halflings.png
Normal file
BIN
AndorsTrailEdit/inc/bootstrap/img/glyphicons-halflings.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
2159
AndorsTrailEdit/inc/bootstrap/js/bootstrap.js
vendored
Normal file
2159
AndorsTrailEdit/inc/bootstrap/js/bootstrap.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
6
AndorsTrailEdit/inc/bootstrap/js/bootstrap.min.js
vendored
Normal file
6
AndorsTrailEdit/inc/bootstrap/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
AndorsTrailEdit/inc/jquery.min.js
vendored
Normal file
4
AndorsTrailEdit/inc/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
35
AndorsTrailEdit/inc/require.js
Normal file
35
AndorsTrailEdit/inc/require.js
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
RequireJS 2.1.2 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
|
||||
Available via the MIT or new BSD license.
|
||||
see: http://github.com/jrburke/requirejs for details
|
||||
*/
|
||||
var requirejs,require,define;
|
||||
(function(Y){function H(b){return"[object Function]"===L.call(b)}function I(b){return"[object Array]"===L.call(b)}function x(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function M(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function r(b,c){return da.call(b,c)}function i(b,c){return r(b,c)&&b[c]}function E(b,c){for(var d in b)if(r(b,d)&&c(b[d],d))break}function Q(b,c,d,i){c&&E(c,function(c,h){if(d||!r(b,h))i&&"string"!==typeof c?(b[h]||(b[h]={}),Q(b[h],
|
||||
c,d,i)):b[h]=c});return b}function t(b,c){return function(){return c.apply(b,arguments)}}function Z(b){if(!b)return b;var c=Y;x(b.split("."),function(b){c=c[b]});return c}function J(b,c,d,i){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=i;d&&(c.originalError=d);return c}function ea(b){function c(a,g,v){var e,n,b,c,d,j,f,h=g&&g.split("/");e=h;var l=m.map,k=l&&l["*"];if(a&&"."===a.charAt(0))if(g){e=i(m.pkgs,g)?h=[g]:h.slice(0,h.length-1);g=a=e.concat(a.split("/"));
|
||||
for(e=0;g[e];e+=1)if(n=g[e],"."===n)g.splice(e,1),e-=1;else if(".."===n)if(1===e&&(".."===g[2]||".."===g[0]))break;else 0<e&&(g.splice(e-1,2),e-=2);e=i(m.pkgs,g=a[0]);a=a.join("/");e&&a===g+"/"+e.main&&(a=g)}else 0===a.indexOf("./")&&(a=a.substring(2));if(v&&(h||k)&&l){g=a.split("/");for(e=g.length;0<e;e-=1){b=g.slice(0,e).join("/");if(h)for(n=h.length;0<n;n-=1)if(v=i(l,h.slice(0,n).join("/")))if(v=i(v,b)){c=v;d=e;break}if(c)break;!j&&(k&&i(k,b))&&(j=i(k,b),f=e)}!c&&j&&(c=j,d=f);c&&(g.splice(0,d,
|
||||
c),a=g.join("/"))}return a}function d(a){z&&x(document.getElementsByTagName("script"),function(g){if(g.getAttribute("data-requiremodule")===a&&g.getAttribute("data-requirecontext")===j.contextName)return g.parentNode.removeChild(g),!0})}function y(a){var g=i(m.paths,a);if(g&&I(g)&&1<g.length)return d(a),g.shift(),j.require.undef(a),j.require([a]),!0}function f(a){var g,b=a?a.indexOf("!"):-1;-1<b&&(g=a.substring(0,b),a=a.substring(b+1,a.length));return[g,a]}function h(a,g,b,e){var n,u,d=null,h=g?g.name:
|
||||
null,l=a,m=!0,k="";a||(m=!1,a="_@r"+(L+=1));a=f(a);d=a[0];a=a[1];d&&(d=c(d,h,e),u=i(p,d));a&&(d?k=u&&u.normalize?u.normalize(a,function(a){return c(a,h,e)}):c(a,h,e):(k=c(a,h,e),a=f(k),d=a[0],k=a[1],b=!0,n=j.nameToUrl(k)));b=d&&!u&&!b?"_unnormalized"+(M+=1):"";return{prefix:d,name:k,parentMap:g,unnormalized:!!b,url:n,originalName:l,isDefine:m,id:(d?d+"!"+k:k)+b}}function q(a){var g=a.id,b=i(k,g);b||(b=k[g]=new j.Module(a));return b}function s(a,g,b){var e=a.id,n=i(k,e);if(r(p,e)&&(!n||n.defineEmitComplete))"defined"===
|
||||
g&&b(p[e]);else q(a).on(g,b)}function C(a,g){var b=a.requireModules,e=!1;if(g)g(a);else if(x(b,function(g){if(g=i(k,g))g.error=a,g.events.error&&(e=!0,g.emit("error",a))}),!e)l.onError(a)}function w(){R.length&&(fa.apply(F,[F.length-1,0].concat(R)),R=[])}function A(a,g,b){var e=a.map.id;a.error?a.emit("error",a.error):(g[e]=!0,x(a.depMaps,function(e,c){var d=e.id,h=i(k,d);h&&(!a.depMatched[c]&&!b[d])&&(i(g,d)?(a.defineDep(c,p[d]),a.check()):A(h,g,b))}),b[e]=!0)}function B(){var a,g,b,e,n=(b=1E3*m.waitSeconds)&&
|
||||
j.startTime+b<(new Date).getTime(),c=[],h=[],f=!1,l=!0;if(!T){T=!0;E(k,function(b){a=b.map;g=a.id;if(b.enabled&&(a.isDefine||h.push(b),!b.error))if(!b.inited&&n)y(g)?f=e=!0:(c.push(g),d(g));else if(!b.inited&&(b.fetched&&a.isDefine)&&(f=!0,!a.prefix))return l=!1});if(n&&c.length)return b=J("timeout","Load timeout for modules: "+c,null,c),b.contextName=j.contextName,C(b);l&&x(h,function(a){A(a,{},{})});if((!n||e)&&f)if((z||$)&&!U)U=setTimeout(function(){U=0;B()},50);T=!1}}function D(a){r(p,a[0])||
|
||||
q(h(a[0],null,!0)).init(a[1],a[2])}function G(a){var a=a.currentTarget||a.srcElement,b=j.onScriptLoad;a.detachEvent&&!V?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=j.onScriptError;(!a.detachEvent||V)&&a.removeEventListener("error",b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function K(){var a;for(w();F.length;){a=F.shift();if(null===a[0])return C(J("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));D(a)}}var T,W,j,N,U,m={waitSeconds:7,
|
||||
baseUrl:"./",paths:{},pkgs:{},shim:{},map:{},config:{}},k={},X={},F=[],p={},S={},L=1,M=1;N={require:function(a){return a.require?a.require:a.require=j.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?a.exports:a.exports=p[a.map.id]={}},module:function(a){return a.module?a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return m.config&&i(m.config,a.map.id)||{}},exports:p[a.map.id]}}};W=function(a){this.events=i(X,a.id)||{};this.map=a;this.shim=
|
||||
i(m.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};W.prototype={init:function(a,b,c,e){e=e||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&(c=t(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=c;this.inited=!0;this.ignore=e.ignore;e.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=
|
||||
b)},fetch:function(){if(!this.fetched){this.fetched=!0;j.startTime=(new Date).getTime();var a=this.map;if(this.shim)j.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],t(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=this.map.url;S[a]||(S[a]=!0,j.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var e=this.exports,n=this.factory;
|
||||
if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(H(n)){if(this.events.error)try{e=j.execCb(c,n,b,e)}catch(d){a=d}else e=j.execCb(c,n,b,e);this.map.isDefine&&((b=this.module)&&void 0!==b.exports&&b.exports!==this.exports?e=b.exports:void 0===e&&this.usingExports&&(e=this.exports));if(a)return a.requireMap=this.map,a.requireModules=[this.map.id],a.requireType="define",C(this.error=a)}else e=n;this.exports=e;if(this.map.isDefine&&
|
||||
!this.ignore&&(p[c]=e,l.onResourceLoad))l.onResourceLoad(j,this.map,this.depMaps);delete k[c];this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=h(a.prefix);this.depMaps.push(d);s(d,"defined",t(this,function(e){var n,d;d=this.map.name;var v=this.map.parentMap?this.map.parentMap.name:null,f=j.makeRequire(a.parentMap,{enableBuildCallback:!0,
|
||||
skipMap:!0});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,v,!0)})||""),e=h(a.prefix+"!"+d,this.map.parentMap),s(e,"defined",t(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=i(k,e.id)){this.depMaps.push(e);if(this.events.error)d.on("error",t(this,function(a){this.emit("error",a)}));d.enable()}}else n=t(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),n.error=t(this,function(a){this.inited=!0;this.error=
|
||||
a;a.requireModules=[b];E(k,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&delete k[a.map.id]});C(a)}),n.fromText=t(this,function(e,c){var d=a.name,u=h(d),v=O;c&&(e=c);v&&(O=!1);q(u);r(m.config,b)&&(m.config[d]=m.config[b]);try{l.exec(e)}catch(k){throw Error("fromText eval for "+d+" failed: "+k);}v&&(O=!0);this.depMaps.push(u);j.completeLoad(d);f([d],n)}),e.load(a.name,f,n,m)}));j.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){this.enabling=this.enabled=!0;x(this.depMaps,t(this,function(a,
|
||||
b){var c,e;if("string"===typeof a){a=h(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=i(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;s(a,"defined",t(this,function(a){this.defineDep(b,a);this.check()}));this.errback&&s(a,"error",this.errback)}c=a.id;e=k[c];!r(N,c)&&(e&&!e.enabled)&&j.enable(a,this)}));E(this.pluginMaps,t(this,function(a){var b=i(k,a.id);b&&!b.enabled&&j.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=
|
||||
this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){x(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};j={config:m,contextName:b,registry:k,defined:p,urlFetched:S,defQueue:F,Module:W,makeModuleMap:h,nextTick:l.nextTick,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=m.pkgs,c=m.shim,e={paths:!0,config:!0,map:!0};E(a,function(a,b){e[b]?"map"===b?Q(m[b],a,!0,!0):Q(m[b],a,!0):m[b]=a});a.shim&&(E(a.shim,function(a,
|
||||
b){I(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=j.makeShimExports(a);c[b]=a}),m.shim=c);a.packages&&(x(a.packages,function(a){a="string"===typeof a?{name:a}:a;b[a.name]={name:a.name,location:a.location||a.name,main:(a.main||"main").replace(ga,"").replace(aa,"")}}),m.pkgs=b);E(k,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=h(b))});if(a.deps||a.callback)j.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(Y,arguments));
|
||||
return b||a.exports&&Z(a.exports)}},makeRequire:function(a,d){function f(e,c,u){var i,m;d.enableBuildCallback&&(c&&H(c))&&(c.__requireJsBuild=!0);if("string"===typeof e){if(H(c))return C(J("requireargs","Invalid require call"),u);if(a&&r(N,e))return N[e](k[a.id]);if(l.get)return l.get(j,e,a);i=h(e,a,!1,!0);i=i.id;return!r(p,i)?C(J("notloaded",'Module name "'+i+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):p[i]}K();j.nextTick(function(){K();m=q(h(null,a));m.skipMap=d.skipMap;
|
||||
m.init(e,c,u,{enabled:!0});B()});return f}d=d||{};Q(f,{isBrowser:z,toUrl:function(b){var d=b.lastIndexOf("."),g=null;-1!==d&&(g=b.substring(d,b.length),b=b.substring(0,d));return j.nameToUrl(c(b,a&&a.id,!0),g)},defined:function(b){return r(p,h(b,a,!1,!0).id)},specified:function(b){b=h(b,a,!1,!0).id;return r(p,b)||r(k,b)}});a||(f.undef=function(b){w();var c=h(b,a,!0),d=i(k,b);delete p[b];delete S[c.url];delete X[b];d&&(d.events.defined&&(X[b]=d.events),delete k[b])});return f},enable:function(a){i(k,
|
||||
a.id)&&q(a).enable()},completeLoad:function(a){var b,c,d=i(m.shim,a)||{},h=d.exports;for(w();F.length;){c=F.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);D(c)}c=i(k,a);if(!b&&!r(p,a)&&c&&!c.inited){if(m.enforceDefine&&(!h||!Z(h)))return y(a)?void 0:C(J("nodefine","No define call for "+a,null,[a]));D([a,d.deps||[],d.exportsFn])}B()},nameToUrl:function(a,b){var c,d,h,f,j,k;if(l.jsExtRegExp.test(a))f=a+(b||"");else{c=m.paths;d=m.pkgs;f=a.split("/");for(j=f.length;0<j;j-=1)if(k=
|
||||
f.slice(0,j).join("/"),h=i(d,k),k=i(c,k)){I(k)&&(k=k[0]);f.splice(0,j,k);break}else if(h){c=a===h.name?h.location+"/"+h.main:h.location;f.splice(0,j,c);break}f=f.join("/");f+=b||(/\?/.test(f)?"":".js");f=("/"===f.charAt(0)||f.match(/^[\w\+\.\-]+:/)?"":m.baseUrl)+f}return m.urlArgs?f+((-1===f.indexOf("?")?"?":"&")+m.urlArgs):f},load:function(a,b){l.load(j,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||ha.test((a.currentTarget||a.srcElement).readyState))P=
|
||||
null,a=G(a),j.completeLoad(a.id)},onScriptError:function(a){var b=G(a);if(!y(b.id))return C(J("scripterror","Script error",a,[b.id]))}};j.require=j.makeRequire();return j}var l,w,A,D,s,G,P,K,ba,ca,ia=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ja=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,aa=/\.js$/,ga=/^\.\//;w=Object.prototype;var L=w.toString,da=w.hasOwnProperty,fa=Array.prototype.splice,z=!!("undefined"!==typeof window&&navigator&&document),$=!z&&"undefined"!==typeof importScripts,ha=z&&
|
||||
"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,V="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),B={},q={},R=[],O=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(H(requirejs))return;q=requirejs;requirejs=void 0}"undefined"!==typeof require&&!H(require)&&(q=require,require=void 0);l=requirejs=function(b,c,d,y){var f,h="_";!I(b)&&"string"!==typeof b&&(f=b,I(c)?(b=c,c=d,d=y):b=[]);f&&f.context&&(h=f.context);(y=i(B,h))||(y=B[h]=l.s.newContext(h));
|
||||
f&&y.configure(f);return y.require(b,c,d)};l.config=function(b){return l(b)};l.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=l);l.version="2.1.2";l.jsExtRegExp=/^\/|:|\?|\.js$/;l.isBrowser=z;w=l.s={contexts:B,newContext:ea};l({});x(["toUrl","undef","defined","specified"],function(b){l[b]=function(){var c=B._;return c.require[b].apply(c,arguments)}});if(z&&(A=w.head=document.getElementsByTagName("head")[0],D=document.getElementsByTagName("base")[0]))A=
|
||||
w.head=D.parentNode;l.onError=function(b){throw b;};l.load=function(b,c,d){var i=b&&b.config||{},f;if(z)return f=i.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script"),f.type=i.scriptType||"text/javascript",f.charset="utf-8",f.async=!0,f.setAttribute("data-requirecontext",b.contextName),f.setAttribute("data-requiremodule",c),f.attachEvent&&!(f.attachEvent.toString&&0>f.attachEvent.toString().indexOf("[native code"))&&!V?(O=!0,f.attachEvent("onreadystatechange",
|
||||
b.onScriptLoad)):(f.addEventListener("load",b.onScriptLoad,!1),f.addEventListener("error",b.onScriptError,!1)),f.src=d,K=f,D?A.insertBefore(f,D):A.appendChild(f),K=null,f;$&&(importScripts(d),b.completeLoad(c))};z&&M(document.getElementsByTagName("script"),function(b){A||(A=b.parentNode);if(s=b.getAttribute("data-main"))return q.baseUrl||(G=s.split("/"),ba=G.pop(),ca=G.length?G.join("/")+"/":"./",q.baseUrl=ca,s=ba),s=s.replace(aa,""),q.deps=q.deps?q.deps.concat(s):[s],!0});define=function(b,c,d){var i,
|
||||
f;"string"!==typeof b&&(d=c,c=b,b=null);I(c)||(d=c,c=[]);!c.length&&H(d)&&d.length&&(d.toString().replace(ia,"").replace(ja,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c));if(O){if(!(i=K))P&&"interactive"===P.readyState||M(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),i=P;i&&(b||(b=i.getAttribute("data-requiremodule")),f=B[i.getAttribute("data-requirecontext")])}(f?f.defQueue:R).push([b,c,d])};define.amd=
|
||||
{jQuery:!0};l.exec=function(b){return eval(b)};l(q)}})(this);
|
||||
1
AndorsTrailEdit/inc/underscore-min.js
vendored
Normal file
1
AndorsTrailEdit/inc/underscore-min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
6
AndorsTrailEdit/main.js
Normal file
6
AndorsTrailEdit/main.js
Normal file
@@ -0,0 +1,6 @@
|
||||
require([
|
||||
"/inc/bootstrap/js/bootstrap.min.js",
|
||||
"app"]
|
||||
,function() {
|
||||
|
||||
});
|
||||
98
AndorsTrailEdit/model.js
Normal file
98
AndorsTrailEdit/model.js
Normal file
@@ -0,0 +1,98 @@
|
||||
|
||||
var model = (function(DataStore, FieldList) {
|
||||
|
||||
var model = {
|
||||
actorConditions: new DataStore({
|
||||
name: 'Actor Conditions'
|
||||
,objectTypename: 'actorcondition'
|
||||
,iconIDField: 'iconID'
|
||||
,newItemTemplate: function() { return {name: "New Condition", id: 'new_condition' }; }
|
||||
})
|
||||
,quests: new DataStore({
|
||||
name: 'Quests'
|
||||
,objectTypename: 'quest'
|
||||
,newItemTemplate: function() { return {name: "New Quest", id: 'new_quest' }; }
|
||||
})
|
||||
,items: new DataStore({
|
||||
name: 'Items'
|
||||
,objectTypename: 'item'
|
||||
,iconIDField: 'iconID'
|
||||
,newItemTemplate: function() { return {name: "New Item", id: "new_item", category: 'other' }; }
|
||||
})
|
||||
,droplists: new DataStore({
|
||||
name: 'Droplists'
|
||||
,objectTypename: 'droplist'
|
||||
,nameField: 'id'
|
||||
,newItemTemplate: function() { return {id: "new_droplist" }; }
|
||||
})
|
||||
,dialogue: new DataStore({
|
||||
name: 'Dialogue'
|
||||
,objectTypename: 'dialogue'
|
||||
,nameField: 'id'
|
||||
,newItemTemplate: function() { return {id: "new_conversation" }; }
|
||||
})
|
||||
,monsters: new DataStore({
|
||||
name: 'Monsters'
|
||||
,objectTypename: 'monster'
|
||||
,iconIDField: 'iconID'
|
||||
,newItemTemplate: function() { return {id: "new_monster", name: "New Monster", maxAP: 10, attackCost: 5, moveCost: 5 }; }
|
||||
})
|
||||
,itemCategories: new DataStore({
|
||||
name: 'Item Categories'
|
||||
,objectTypename: 'itemcategory'
|
||||
,newItemTemplate: function() { return {id: "new_itemtype", name: 'ItemType' }; }
|
||||
})
|
||||
};
|
||||
|
||||
model.sections = [ model.actorConditions, model.quests, model.items, model.droplists, model.dialogue, model.monsters, model.itemCategories ];
|
||||
|
||||
|
||||
function addExampleModelItems(model) {
|
||||
model.actorConditions.add({id: "bless", name: "Bless", isPositive: true, iconID: "actorconditions_1:38", category: 0, hasAbilityEffect: 1, attackChance: 15, blockChance: 5});
|
||||
model.actorConditions.add({id: "poison_weak", name: "Weak Poison", iconID: "actorconditions_1:60", category: 3, hasRoundEffect: 1, round_visualEffectID: 2, round_boostHP_Min: -1, round_boostHP_Max: -1});
|
||||
|
||||
model.quests.add({id: "testQuest", name: "Test quest", stages: [ { progress: 10, logText: "Stage 10"} , { progress: 20, logText: "Stage 20", finishesQuest: 1 } ] });
|
||||
|
||||
model.items.add({id: "item0", iconID: "items_weapons:0", name: "Longsword", category: 'lsword', baseMarketCost: 51, hasEquipEffect: 1, equip_attackChance: 10, equip_attackDamage_Min: 2, equip_attackDamage_Max: 4, equip_attackCost: 4});
|
||||
model.items.add({id: "dmg_ring1", iconID: "items_jewelry:0", name: "Ring of damage +1", category: 'ring', baseMarketCost: 62, hasEquipEffect: 1, equip_attackDamage_Min: 1, equip_attackDamage_Max: 1});
|
||||
|
||||
model.droplists.add({id: "merchant1", items: [ { itemID: 'dmg_ring1', quantity_Min: 4, quantity_Max: 5, chance: 100 } , { itemID: 'item0', quantity_Min: 1, quantity_Max: 1, chance: 100 } ] } );
|
||||
|
||||
model.dialogue.add({id: "mikhail_default", message: 'Anything else I can help you with?', replies: [ { text: 'Do you have any tasks for me?', nextPhraseID: 'mikhail_tasks' }, { text: 'Is there anything else you can tell me about Andor?', nextPhraseID: 'mikhail_andor1' } ]});
|
||||
model.dialogue.add({id: 'mikhail_andor1', message: 'As I said, Andor went out yesterday and hasn\'t been back since. I\'m starting to worry about him. Please go look for your brother, he said he would only be out a short while.'});
|
||||
model.dialogue.add({id: 'mikhail_tasks', message: 'Oh yes, there were some things I need help with, bread and rats. Which one would you like to talk about?'});
|
||||
|
||||
model.monsters.add({id: "small_ant", name: "Small ant", iconID: "monsters_insects:2", maxHP: 30, size: ''});
|
||||
model.monsters.add({id: "red_ant", name: "Red ant", iconID: "monsters_insects:3", maxHP: 20, size: ''});
|
||||
model.monsters.add({id: "wasp", name: "Wasp", iconID: "monsters_insects:1", maxHP: 10, size: ''});
|
||||
}
|
||||
addExampleModelItems(model);
|
||||
|
||||
function addLegacyFieldLists(model) {
|
||||
model.actorConditions.legacyFieldList = new FieldList("[id|name|iconID|category|isStacking|isPositive|"
|
||||
+ "hasRoundEffect|round_visualEffectID|round_boostHP_Min|round_boostHP_Max|round_boostAP_Min|round_boostAP_Max|"
|
||||
+ "hasFullRoundEffect|fullround_visualEffectID|fullround_boostHP_Min|fullround_boostHP_Max|fullround_boostAP_Min|fullround_boostAP_Max|"
|
||||
+ "hasAbilityEffect|boostMaxHP|boostMaxAP|moveCostPenalty|attackCost|attackChance|criticalChance|criticalMultiplier|attackDamage_Min|attackDamage_Max|blockChance|damageResistance|"
|
||||
+ "];"
|
||||
);
|
||||
model.quests.legacyFieldList = new FieldList("[id|name|showInLog|stages[progress|logText|rewardExperience|finishesQuest|]|];");
|
||||
model.items.legacyFieldList = new FieldList("[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|"
|
||||
+ "hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|"
|
||||
+ "hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|"
|
||||
+ "hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|"
|
||||
+ "hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|"
|
||||
+ "];"
|
||||
);
|
||||
model.droplists.legacyFieldList = new FieldList("[id|items[itemID|quantity_Min|quantity_Max|chance|]|];");
|
||||
model.dialogue.legacyFieldList = new FieldList("[id|message|rewards[rewardType|rewardID|value|]|replies[text|nextPhraseID|requires_Progress|requires_itemID|requires_Quantity|requires_Type|]|];");
|
||||
model.monsters.legacyFieldList = new FieldList("[id|iconID|name|tags|size|monsterClass|unique|faction|maxHP|maxAP|moveCost|attackCost|attackChance|criticalChance|criticalMultiplier|attackDamage_Min|attackDamage_Max|blockChance|damageResistance|droplistID|phraseID|"
|
||||
+ "hasHitEffect|onHit_boostHP_Min|onHit_boostHP_Max|onHit_boostAP_Min|onHit_boostAP_Max|onHit_conditionsSource[condition|magnitude|duration|chance|]|onHit_conditionsTarget[condition|magnitude|duration|chance|]|"
|
||||
+ "];"
|
||||
);
|
||||
model.itemCategories.legacyFieldList = new FieldList("[id|name|actionType|inventorySlot|size|];");
|
||||
}
|
||||
addLegacyFieldLists(model);
|
||||
|
||||
|
||||
return model;
|
||||
})(DataStore, FieldList.FieldList);
|
||||
@@ -3,10 +3,11 @@ html,body { margin:0; padding:0; height: 100%; font-size: 0.9em; }
|
||||
#screen #top { height: 50px; color: #eeeeee; }
|
||||
#screen #top #title { font-size: 2em; float: left; text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; }
|
||||
#screen #top #version { font-size: 10pt; margin-left: 3ex; }
|
||||
.andorsTrailLogo { background-image: url(logo.png); background-repeat: no-repeat; background-position: 3px 3px; padding:10px 0px 15px 50px; }
|
||||
.andorsTrailLogo { background-repeat: no-repeat; background-position: 3px 3px; padding:10px 0px 15px 50px; }
|
||||
#screen #top #buttons { float: right; font-size: 1.2em; margin: 10px; }
|
||||
#screen .workarea { margin: 5px; border: 1px #c0d0ff solid; background-color: #eeeeee; position: absolute; top: 50px; bottom: 0; }
|
||||
#screen #left { width: 250px; padding: 0px; font-size: 1em; }
|
||||
#screen #left { width: 250px; padding: 0px; font-size: 1em; background-color: white; }
|
||||
#screen #left .accordion-group { background-color: #ddd; }
|
||||
#screen #center { left: 256px; right: 0; }
|
||||
#screen #center #tabs { border: 0px; padding: 0px; }
|
||||
#screen #centerwide { left: 0px; right: 0; }
|
||||
|
||||
6
AndorsTrailEdit/test_angular/app.js
Normal file
6
AndorsTrailEdit/test_angular/app.js
Normal file
@@ -0,0 +1,6 @@
|
||||
angular
|
||||
.module('oskar1', [])
|
||||
.config(['$routeProvider', function($routeProvider) {
|
||||
$routeProvider
|
||||
.when('/item/:id', {templateUrl: 'detail.html', controller: DetailCtrl});
|
||||
}]);
|
||||
33
AndorsTrailEdit/test_angular/controllers.js
Normal file
33
AndorsTrailEdit/test_angular/controllers.js
Normal file
@@ -0,0 +1,33 @@
|
||||
var ListOfItems = function(options) {
|
||||
var o = {
|
||||
idField: 'id'
|
||||
};
|
||||
angular.extend(o, options);
|
||||
|
||||
this.items = [];
|
||||
this.findById = function(id) {
|
||||
for (var i = 0; i < this.items.length; ++i) {
|
||||
var item = this.items[i];
|
||||
if (item[o.idField] == id) return item;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
var Model = {
|
||||
items: new ListOfItems()
|
||||
};
|
||||
|
||||
Model.items.items = [{id: 'a', name: 'test1'}, {id: 'b', name: 'test2'}];
|
||||
|
||||
function ListCtrl($scope, $routeParams) {
|
||||
$scope.items = Model.items.items;
|
||||
$scope.add = function() {
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
function DetailCtrl($scope, $routeParams) {
|
||||
alert("newing DetailCtrl");
|
||||
$scope.item = Model.items.findById($routeParams.id);
|
||||
}
|
||||
5
AndorsTrailEdit/test_angular/detail.html
Normal file
5
AndorsTrailEdit/test_angular/detail.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<div>
|
||||
<p>id: {{item.id}}</p>
|
||||
<input type="text" ng-model="item.id"><br />
|
||||
<input type="text" ng-model="item.name"><br />
|
||||
</div>
|
||||
4
AndorsTrailEdit/test_angular/partial1.html
Normal file
4
AndorsTrailEdit/test_angular/partial1.html
Normal file
@@ -0,0 +1,4 @@
|
||||
<div>
|
||||
<p>id1: {{obj.id}}</p>
|
||||
<input type="text" ng-model="obj.id">
|
||||
</div>
|
||||
4
AndorsTrailEdit/test_angular/partial2.html
Normal file
4
AndorsTrailEdit/test_angular/partial2.html
Normal file
@@ -0,0 +1,4 @@
|
||||
<div>
|
||||
<p>id2: {{obj.id}}</p>
|
||||
<input type="text" ng-model="obj.id">
|
||||
</div>
|
||||
8
AndorsTrailEdit/test_angular/services.js
Normal file
8
AndorsTrailEdit/test_angular/services.js
Normal file
@@ -0,0 +1,8 @@
|
||||
angular
|
||||
.module('itemsService', ['ngResource'])
|
||||
.factory('Item', function($resource) {
|
||||
var items = [];
|
||||
return $resource('phones/:phoneId.json', {}, {
|
||||
query: {method:'GET', params:{phoneId:'phones'}, isArray:true}
|
||||
});
|
||||
});
|
||||
24
AndorsTrailEdit/test_angular/test.html
Normal file
24
AndorsTrailEdit/test_angular/test.html
Normal file
@@ -0,0 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" ng-app="oskar1">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<link rel="stylesheet" type="text/css" href="styles2.css" />
|
||||
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="../inc/angular.min.js"></script>
|
||||
<script type="text/javascript" src="app.js"></script>
|
||||
<script type="text/javascript" src="controllers.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<div ng-controller="ListCtrl">
|
||||
<ul ng-repeat="item in items">
|
||||
<li><a href="#/item/{{item.id}}">{{item.id}} : {{item.name}}</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div ng-view></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user