From 0165021017d76e957d1f71a8bffd5c87b8001ce6 Mon Sep 17 00:00:00 2001 From: "oskar.wiksten" Date: Sat, 7 May 2011 14:42:14 +0000 Subject: [PATCH] Updated resource editor: Improve autocomplete. Bugfix for table editor on chrome. Decrease indentation on conversation tree. Shorten strings in conversation tree. Dynamically calculate item store prices and monster exp. Tooltip for "follow next phrase" button in conversation editor. git-svn-id: https://andors-trail.googlecode.com/svn/trunk@83 08aca716-68be-ccc6-4d58-36f5abd142ac --- .../AndorsTrail/resource/ResourceLoader.java | 2 +- AndorsTrailEdit/AndorsTrailEditor.js | 52 ++- AndorsTrailEdit/DataStore.js | 12 +- AndorsTrailEdit/EditorFunctions.js | 21 +- AndorsTrailEdit/Editor_Conversation.js | 15 +- AndorsTrailEdit/Editor_Droplist.js | 2 +- AndorsTrailEdit/Editor_Item.js | 8 +- AndorsTrailEdit/Editor_Monster.js | 43 ++- AndorsTrailEdit/editor.html | 25 +- AndorsTrailEdit/editor.js | 301 ------------------ AndorsTrailEdit/inc/jquery.shorten.min.js | 7 - AndorsTrailEdit/inc/ui.dynatree.css | 2 +- 12 files changed, 140 insertions(+), 350 deletions(-) delete mode 100644 AndorsTrailEdit/editor.js delete mode 100644 AndorsTrailEdit/inc/jquery.shorten.min.js diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java index d08c2de50..5e1db4c9f 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/ResourceLoader.java @@ -183,7 +183,7 @@ public final class ResourceLoader { loader.prepareTileset(R.drawable.monsters_warrior1, "monsters_warrior1", src_sz1x1, defaultTileSize); //loader.prepareTileset(R.drawable.monsters_wraiths, "monsters_wraiths", new Size(3, 1), defaultTileSize); loader.prepareTileset(R.drawable.monsters_zombie1, "monsters_zombie1", src_sz1x1, defaultTileSize); - loader.prepareTileset(R.drawable.monsters_zombie2, "monsters_zombie2", src_sz1x1, defaultTileSize); + //loader.prepareTileset(R.drawable.monsters_zombie2, "monsters_zombie2", src_sz1x1, defaultTileSize); //loader.prepareTileset(R.drawable.monsters_dragon1, "monsters_dragon1", src_sz1x1, dst_sz4x3); if (AndorsTrailApplication.DEVELOPMENT_DEBUGRESOURCES) { diff --git a/AndorsTrailEdit/AndorsTrailEditor.js b/AndorsTrailEdit/AndorsTrailEditor.js index 6f1afa2ab..aec130ed0 100644 --- a/AndorsTrailEdit/AndorsTrailEditor.js +++ b/AndorsTrailEdit/AndorsTrailEditor.js @@ -16,7 +16,6 @@ IncludeJavascript("Editor_Droplist.js"); IncludeJavascript("Editor_Conversation.js"); IncludeJavascript("Editor_Monster.js"); -IncludeJavascript("inc/jquery.shorten.min.js"); IncludeJavascript("inc/jquery.dynatree.min.js"); @@ -92,23 +91,56 @@ function addExampleModelItems(model) { function startEditor() { model = { - actorConditions: new DataStore('actorcondition', new FieldList("[id|name|iconID|isStacking|" + actorConditions: new DataStore({ + objectTypename: 'actorcondition' + ,fieldList: new FieldList("[id|name|iconID|isStacking|" + "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|" - + "];")) - ,quests: new DataStore('quest', new FieldList("[id|name|showInLog|stages[progress|logText|rewardExperience|finishesQuest|]|];")) - ,items: new DataStore('item', new FieldList("[searchTag|iconID|name|category|baseMarketCost|" + + "];" + ) + ,idField: 'id' + ,nameField: 'name' + }) + ,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("[searchTag|iconID|name|category|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|]|" - + "];")) - ,droplists: new DataStore('droplist', new FieldList("[id|items[itemID|quantity_Min|quantity_Max|chance|]|];"), 'id') - ,dialogue: new DataStore('dialogue', new FieldList("[id|message|progressQuest|rewardDropListID|replies[text|nextPhraseID|requires_Progress|requires_itemID|requires_Quantity|]|];"), 'id') - ,monsters: new DataStore('monster', new FieldList("[iconID|name|tags|size|maxHP|maxAP|moveCost|attackCost|attackChance|criticalChance|criticalMultiplier|attackDamage_Min|attackDamage_Max|blockChance|damageResistance|droplistID|phraseID|" + + "];" + ) + ,idField: 'searchTag' + ,nameField: 'name' + }) + ,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|progressQuest|rewardDropListID|replies[text|nextPhraseID|requires_Progress|requires_itemID|requires_Quantity|]|];") + ,idField: 'id' + ,nameField: 'id' + }) + ,monsters: new DataStore({ + objectTypename: 'monster' + ,fieldList: new FieldList("[iconID|name|tags|size|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: 'name' + ,nameField: 'name' + }) }; addExampleModelItems(model); diff --git a/AndorsTrailEdit/DataStore.js b/AndorsTrailEdit/DataStore.js index c64053aed..d17ad7b76 100644 --- a/AndorsTrailEdit/DataStore.js +++ b/AndorsTrailEdit/DataStore.js @@ -22,10 +22,11 @@ var specialEncodings = [ ]; -function DataStore(objectTypename, fieldList, nameField) { - this.objectTypename = objectTypename; - this.fieldList = fieldList; - this.nameField = nameField ? nameField : 'name'; +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.items = []; this.add = function(obj) { @@ -38,7 +39,8 @@ function DataStore(objectTypename, fieldList, nameField) { this.clear = function() { this.items = {}; } this.findById = function(id) { for (var i = 0; i < this.items.length; ++i) { - if (this.items[i].id == id) return this.items[i]; + var item = this.items[i]; + if (item[this.idField] == id) return item; } } diff --git a/AndorsTrailEdit/EditorFunctions.js b/AndorsTrailEdit/EditorFunctions.js index 1582b6a51..154ff2eda 100644 --- a/AndorsTrailEdit/EditorFunctions.js +++ b/AndorsTrailEdit/EditorFunctions.js @@ -63,14 +63,16 @@ function applyCommonEditorBindings(div, obj, dataStore) { } } -function bindFieldToDataStore(field, dataStore, converter) { +function bindFieldToDataStore(field, dataStore) { var dataCallback = function(request, response) { var result = []; var pattern = new RegExp(request.term, "i"); dataStore.items.forEach(function(obj) { - var name = converter(obj); - if (name.match(pattern)) { - result.push(name); + var id = obj[dataStore.idField]; + var name = obj[dataStore.nameField]; + var displayName = name + " (" + id + ")"; + if (displayName.match(pattern)) { + result.push({label: displayName, value: id}); } }); response(result); @@ -85,6 +87,13 @@ function bindFieldToDataStore(field, dataStore, converter) { }); } +function shortenString(str, maxChars) { + if (!str) return str; + str = str.toString(); + if (str.length <= maxChars) return str; + return str.substring(0, maxChars) + ".."; +} + function applyTableEditor(input) { var updateRowText = function(row, obj) { @@ -92,9 +101,7 @@ function applyTableEditor(input) { var id = $( this ).attr("id"); var val = obj[id]; val = val ? val : ""; - $( this ).text(val).shorten({ - width: '200' - }).css('display',''); + $( this ).text(shortenString(val, 30)); }); }; diff --git a/AndorsTrailEdit/Editor_Conversation.js b/AndorsTrailEdit/Editor_Conversation.js index 1aa67e9d9..85f476a26 100644 --- a/AndorsTrailEdit/Editor_Conversation.js +++ b/AndorsTrailEdit/Editor_Conversation.js @@ -64,8 +64,8 @@ function buildEditorForPhrase(div, phrase, tree, treeNode) { checkboxHidesElement( $( '#hasProgressQuest', dialoguePhrase ), $( '#hasProgressQuestDisplay', dialoguePhrase ), phrase.progressQuest); checkboxHidesElement( $( '#hasRewardDroplist', dialoguePhrase ), $( '#hasRewardDroplistDisplay', dialoguePhrase ), phrase.rewardDropListID); - bindFieldToDataStore( $( "#progressQuest", dialoguePhrase ), model.quests , function(obj) { return obj.id; } ); - bindFieldToDataStore( $( "#rewardDropListID", dialoguePhrase ), model.droplists , function(obj) { return obj.id; } ); + bindFieldToDataStore( $( "#progressQuest", dialoguePhrase ), model.quests); + bindFieldToDataStore( $( "#rewardDropListID", dialoguePhrase ), model.droplists); var reloadReplyTable = function() { applyTableEditor({ @@ -177,12 +177,13 @@ function buildEditorForReply(div, reply, tree, treeNode) { checkboxHidesElement( $( '#requiresItems', dialogueReply ), $( '#requiresItemsDisplay', dialogueReply ), reply.requires_itemID); checkboxHidesElement( $( '#requiresQuest', dialogueReply ), $( '#requiresQuestDisplay', dialogueReply ), reply.requires_Progress); - bindFieldToDataStore( $( "#requires_itemID", dialogueReply ), model.items , function(obj) { return obj.searchTag; } ); - bindFieldToDataStore( $( "#requires_Progress", dialogueReply ), model.quests , function(obj) { return obj.id; } ); + bindFieldToDataStore( $( "#requires_itemID", dialogueReply ), model.items); + bindFieldToDataStore( $( "#requires_Progress", dialogueReply ), model.quests); var replyLeadsTo = $( "#replyLeadsTo", dialogueReply ); - replyLeadsTo.change(function() { nextPhraseID.val( $(this).val() ).change(); }); replyLeadsTo.val(reply.nextPhraseID); + if (!replyLeadsTo.val()) { replyLeadsTo.val(""); } + replyLeadsTo.change(function() { nextPhraseID.val( $(this).val() ).change(); }); changeHidesElement(replyLeadsTo, $( "#nextPhraseIDDisplay", dialogueReply ) , function() { return replyLeadsTo.val() == ''; } ); var nextPhraseID = $( "#nextPhraseID", dialogueReply ); @@ -229,11 +230,11 @@ function buildEditorForReply(div, reply, tree, treeNode) { // Tree node title generators function getPhraseNodeText(phrase) { - return phrase.message ? phrase.message : "(no phrase text)"; + return phrase.message ? shortenString(phrase.message, 30) : "(no phrase text)"; } function getReplyNodeText(reply) { - return reply.text ? reply.text : "(no reply text)"; + return reply.text ? shortenString(reply.text, 30) : "(no reply text)"; } // ======================================================== diff --git a/AndorsTrailEdit/Editor_Droplist.js b/AndorsTrailEdit/Editor_Droplist.js index e1edbb08f..41de64c39 100644 --- a/AndorsTrailEdit/Editor_Droplist.js +++ b/AndorsTrailEdit/Editor_Droplist.js @@ -10,7 +10,7 @@ function createDroplistEditor(obj) { array: obj.items, templateFunction: function() { return { quantity: 1, chance: 100 } }, editorSetup: function(div) { - bindFieldToDataStore( $( "#itemID", div ), model.items , function(obj) { return obj.searchTag; } ); + bindFieldToDataStore( $( "#itemID", div ), model.items); } }); diff --git a/AndorsTrailEdit/Editor_Item.js b/AndorsTrailEdit/Editor_Item.js index ff632fd39..e84f48a93 100644 --- a/AndorsTrailEdit/Editor_Item.js +++ b/AndorsTrailEdit/Editor_Item.js @@ -16,7 +16,7 @@ function createItemEditor(obj) { if (!obj.hit_conditionsTarget) obj.hit_conditionsTarget = []; if (!obj.kill_conditionsSource) obj.kill_conditionsSource = []; var setupEditor = function(div) { - bindFieldToDataStore( $( "#condition", div ), model.actorConditions , function(obj) { return obj.id; } ); + bindFieldToDataStore( $( "#condition", div ), model.actorConditions); } applyTableEditor({ @@ -55,6 +55,12 @@ function createItemEditor(obj) { editorSetup: setupEditor }); + $( "#baseMarketCost", div ).change(function() { + var val = parseInt( $( this ).val() ); + $( "#marketCost_Sell", div ).val(Math.round(val * (100 + 15) / 100)); + $( "#marketCost_Buy", div ).val(Math.round(val * (100 - 15) / 100)); + }).change(); + return div; } diff --git a/AndorsTrailEdit/Editor_Monster.js b/AndorsTrailEdit/Editor_Monster.js index 302c43813..dfe788af6 100644 --- a/AndorsTrailEdit/Editor_Monster.js +++ b/AndorsTrailEdit/Editor_Monster.js @@ -1,5 +1,8 @@ function createMonsterEditor(obj) { + if (!obj.maxAP) { obj.maxAP = 10; } + if (!obj.size) { obj.size = "1x1"; } + var div = $( "#templates #editMonster" ).clone(); applyCommonEditorBindings(div, obj, model.monsters); checkboxHidesElement(div.find('#hasConversation'), div.find('#hasConversationDisplay'), obj.phraseID); @@ -7,13 +10,13 @@ function createMonsterEditor(obj) { checkboxHidesElement(div.find('#hasCritical'), div.find('#hasCriticalDisplay'), obj.criticalChance || obj.criticalMultiplier); checkboxHidesElement(div.find('#hasHitEffect'), div.find('#hasHitEffectDisplay'), obj.hasHitEffect); imageSelector.imageify(div.find('#monsterimage'), div.find('#iconID'), 'monsters'); - bindFieldToDataStore( $( "#droplistID", div ), model.droplists , function(obj) { return obj.id; } ); + bindFieldToDataStore( $( "#droplistID", div ), model.droplists ); var createNewCondition = function() { return { chance: 100, magnitude: 1 }; } if (!obj.onHit_conditionsSource) obj.onHit_conditionsSource = []; if (!obj.onHit_conditionsTarget) obj.onHit_conditionsTarget = []; var setupEditor = function(div) { - bindFieldToDataStore( $( "#condition", div ), model.actorConditions , function(obj) { return obj.id; } ); + bindFieldToDataStore( $( "#condition", div ), model.actorConditions ); } applyTableEditor({ table: $( "#onHit_conditionsSource", div ), @@ -29,6 +32,42 @@ function createMonsterEditor(obj) { templateFunction: createNewCondition, editorSetup: setupEditor }); + + var expDependsOn = []; + var div100 = function(v) { return v / 100; } + var v = function(s) { + var field = $( s, div ); + expDependsOn.push(field); + var val = field.val(); + if (!val) return 0; + return parseInt(val); + } + var updateExperience = function() { + /* + 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); + */ + + expDependsOn = []; + + var EXP_FACTOR_DAMAGERESISTANCE = 9; + var EXP_FACTOR_SCALING = 0.7; + + var attacksPerTurn = Math.floor(v("#maxAP") / v("#attackCost")); + var avgDamagePotential = (v("#attackDamage_Min") + v("#attackDamage_Max")) / 2; + var avgAttackHP = attacksPerTurn * div100(v("#attackChance")) * avgDamagePotential * (1 + div100(v("#criticalChance")) * v("#criticalMultiplier")); + var avgDefenseHP = v("#maxHP") * (1 + div100(v("#blockChance"))) + EXP_FACTOR_DAMAGERESISTANCE * v("#damageResistance"); + var experience = (avgAttackHP * 3 + avgDefenseHP) * EXP_FACTOR_SCALING; + + $( "#experience", div ).val(Math.ceil(experience)); + }; + + updateExperience(); + jQuery.each(expDependsOn, function(idx, o) { + o.change(updateExperience); + }); + return div; } diff --git a/AndorsTrailEdit/editor.html b/AndorsTrailEdit/editor.html index f10ea7636..f429c4095 100644 --- a/AndorsTrailEdit/editor.html +++ b/AndorsTrailEdit/editor.html @@ -19,7 +19,7 @@
@@ -143,6 +143,10 @@
Combat +
+ + +
@@ -346,6 +350,13 @@
+
+ +
+ Sell: + Buy: +
+
Has equip effect
@@ -626,7 +637,7 @@
- Follow + Follow
@@ -666,7 +677,7 @@
- Follow + Follow
@@ -718,17 +729,17 @@
Allow stacked effects
-
Has effect every round
+
Has effect every round (every 6s)
-
Has effect every full round
+
Has effect every full round (every 25:th s)
Has constant ability effect
- Every round + Every round (6s)
diff --git a/AndorsTrailEdit/editor.js b/AndorsTrailEdit/editor.js deleted file mode 100644 index 539f16f1f..000000000 --- a/AndorsTrailEdit/editor.js +++ /dev/null @@ -1,301 +0,0 @@ - -var updatingOutput = false; -var parsingOutput = false; - -function updateOutput() { - if (parsingOutput) return; - updatingOutput = true; - var rowcontainer = $("#datarows"); - var op = ""; - op += "["; - for (var i = 0; i < fields.length; i++) { - if (fields[i].type == "table") continue; - op += fields[i].name + "|"; - } - op += "];\n"; - $('tr', rowcontainer).each(function(i){ - var row = $(this); - if (row.find("#" + fields[0].name).size() == 0) return; - op += "{"; - for (var i = 0; i < fields.length; i++) { - row.find("#" + fields[i].name).each(function() { op += $(this).val() + "|"; }); - } - op += "};\n"; - }); - $("#result").val(op); - updatingOutput = false; -} - -var parse_currentRow; -var parse_fieldDef; - -function parseLine(_, line) { - var match = line.match(/(.*?)\|/gm); - if (match.length != parse_fieldDef.length) { - alert("ERROR: Cannot parse row, expected " + parse_fieldDef.length + " fields, but found " + match.length + " fields."); - return; - } - for (var i = 0; i < match.length; i++) { - if (parse_fieldDef[i] >= 0) { - fields[parse_fieldDef[i]].value = match[i].replace(/\|/, ''); - } - } - addRow(); -} - -function parseFieldDef(str) { - var fielddef = str.match(/\[(.+?)\];/gm); - parse_fieldDef = []; - if (fielddef && fielddef.length >= 1) { - fielddef = fielddef[0].match(/(.*?)\|/gm); - for (var i = 0; i < fielddef.length; i++) { - parse_fieldDef[i] = -1; - var fieldname = fielddef[i].replace(/[\[\]\|]/g, ''); - for (var j = 0; j < fields.length; j++) { - if (fields[j].name == fieldname) { - parse_fieldDef[i] = j; - break; - } - } - } - } else { - for (var i = 0; i < fields.length; i++) { - parse_fieldDef[i] = i; - } - } -} - -function parseOutput() { - if (updatingOutput) return; - parsingOutput = true; - $("#datarows").html(""); - var str = $("#result").val(); - parseFieldDef(str); - str.replace(/\{(.+?)\};/gm, parseLine); - parsingOutput = false; -} - -function createField(field) { - if (field.value == undefined) field.value = ""; - return "" + eval("createField_" + field.type + "(field);") + ""; -} - -function createTextField(field, size) { - return ""; -} - -function createField_multiline(field) { - return ""; -} -function createField_longtext(field) { return createTextField(field, 20); } -function createField_text(field) { return createTextField(field, 10); } -function createField_size(field) { return createTextField(field, 5); } -function createField_range(field) { return createTextField(field, 5); } -function createField_int(field) { return createTextField(field, 3); } -function createField_table(field) { - var result = ""; - for (var i = 0; i < field.fields.length; i++) { - result += ""; - } - result += ""; - for (var j = 0; j < field.length; j++) { - result += ""; - for (var i = 0; i < field.fields.length; i++) { - var f = fields[field.startindex + (j * field.fields.length) + i]; - result += createField(f); - } - result += ""; - } - result += "
" + field.fields[i].name + "
"; - return result; -} - -function createField_image(field) { - return "
"; -} - -function createField_select(field) { - var result = ""; - return result; -} - -function parseimageid(str) { - var defaultimage = {image: "defaultimage", lid: 0, path: '' }; - if (str == null || str == "") return defaultimage; - var v = str.split(":"); - if (v.length < 1) return defaultimage; - return {image: v[0], lid: v[1], path: imagepath }; -} -function genimageid(v) { - if (v == null) return ""; - return v.image + ":" + v.lid; -} - -var currentIcon; - -function selectimage(v) { - currentIcon = $(this); - $( "#selecticon_dialog" ).dialog("open"); -} - -function findTileImage(name) { - for (var i = 0; i < tileimages.length; i++) { - if (tileimages[i].name == name) { - return tileimages[i]; - } - } - return 0; -} - -function updateImageFromFormField(control) { - var imagestruct = parseimageid($(control).find("input").val()); - var sourceimage = findTileImage(imagestruct.image); - var x = -(imagestruct.lid % sourceimage.numtilesx) * sourceimage.tilesizex; - var y = -Math.floor(imagestruct.lid / sourceimage.numtilesx) * sourceimage.tilesizey; - control.css({"background-image": "url(" +imagestruct.path + imagestruct.image + ".png)", "background-position": x+"px " + y+"px"}); -} - -function setSelectedImage(control, imagestruct) { - $(control).find("input").val(genimageid(imagestruct)); - updateImageFromFormField(control); - $(control).change(); -} - -function addDefaultRow() { - for (var i = 0; i < fields.length; i++) { - fields[i].value = fields[i].default; - } - addRow(); -} -function addNameRow(tagname) { - var result = ""; - for (var i = 0; i < fields.length; i++) { - if (!fields[i].hide) { - result += "<" + tagname + ">" + fields[i].name + ""; - } - } - return result; -} - -function addRow() { - var str = ""; - for (var i = 0; i < fields.length; i++) { - if (!fields[i].hide) { - str += createField(fields[i]); - } - } - $("#datarows").append("" + str + ""); - $("#datarows").find(".selectimage").click(selectimage); - $("#datarows").find(".selectimage").each(function() { updateImageFromFormField($(this)); }); - - if ($("#datarows > tr").size() % 10 == 0) { - $("#datarows").append("" + addNameRow("td") + ""); - } - $("#datarows").change(); - -} - -function explodeTableFields() { - var moreFields = []; - for (var n = 0; n < fields.length; n++) { - var field = fields[n]; - if (field.type == "table") { - field.startindex = fields.length; - for (var j = 0; j < field.length; j++) { - for (var i = 0; i < field.fields.length; i++) { - var f = jQuery.extend(true, {}, field.fields[i]); // Deep copy - f.hide = 1; - f.name += j; - fields.push(f); - } - } - } - } -} - -$(document).ready(function() { - explodeTableFields(); - - $("#result").resizable(); - $("#inputarea").resizable(); - - var headerrow = $("#headerrow"); - headerrow.append(addNameRow("th")); - - var hasWarning = false; - for (var i = 0; i < tileimages.length; i++) { - tileimages[i].url = imagepath + tileimages[i].name + ".png"; - var img = new Image(); - img.src = tileimages[i].url; - tileimages[i].imgwidth = img.width; - tileimages[i].imgheight = img.height; - if (!hasWarning && (tileimages[i].imgwidth <= 0 || tileimages[i].imgheight <= 0)) { - alert("WARNING: could not load tile image " + tileimages[i].url + " . You may need to reload the page once."); - hasWarning = true; - } - tileimages[i].tilesizex = Math.floor(tileimages[i].imgwidth / tileimages[i].numtilesx); - tileimages[i].tilesizey = Math.floor(tileimages[i].imgheight / tileimages[i].numtilesy); - - $("#selecticon_dialog_tileset").append("
"); - } - - $("#selecticon_dialog_tileset img").each(function() { - var img = findTileImage($(this).attr("id")); - $(this).click(function(e) { - var x = e.pageX - $(this).offset().left; - var y = e.pageY - $(this).offset().top; - setSelectedImage(currentIcon, { - image: img.name, - lid: Math.floor(x / img.tilesizex) + img.numtilesx * Math.floor(y / img.tilesizey) - }); - $( "#selecticon_dialog" ).dialog("close"); - }); - }); - - $( "#selecticon_dialog" ).dialog({ - autoOpen: false, - modal: true, - width: 600, - height: 800, - position: [50,50], - buttons: { - Cancel: function() { - $( this ).dialog( "close" ); - } - } - }); - - $("#buttons").append(""); - $("#newrow").click(addDefaultRow).click(); - - $("#buttons").append("Auto update output"); - $("#autooutput").change(function() { - if ($(this).attr('checked')) { - $("#datarows").change(updateOutput); - $("#result").change(parseOutput); - } else { - $("#datarows").unbind("change"); - $("#result").unbind("change"); - } - }).change(); - - $("#datarows").sortable(); - - //$("#updateoutput").click(updateOutput); - //$("#parseoutput").click(parseOutput); -}); diff --git a/AndorsTrailEdit/inc/jquery.shorten.min.js b/AndorsTrailEdit/inc/jquery.shorten.min.js deleted file mode 100644 index 694c9e246..000000000 --- a/AndorsTrailEdit/inc/jquery.shorten.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Shorten, a jQuery plugin to automatically shorten text to fit in a block or a pre-set width and configure how the text ends. - * Copyright (C) 2009-2011 Marc Diethelm - * License: (GPL 3, http://www.gnu.org/licenses/gpl-3.0.txt) see license.txt - */ - -(function(a){function s(g,c){return c.measureText(g).width}function t(g,c){c.text(g);return c.width()}var q=false,o,j,k;a.fn.shorten=function(){var g={},c=arguments,r=c.callee;if(c.length)if(c[0].constructor==Object)g=c[0];else if(c[0]=="options")return a(this).eq(0).data("shorten-options");else g={width:parseInt(c[0]),tail:c[1]};this.css("visibility","hidden");var h=a.extend({},r.defaults,g);return this.each(function(){var e=a(this),d=e.text(),p=d.length,i,f=a("").html(h.tail).text(),l={shortened:false, textOverflow:false};i=e.css("float")!="none"?h.width||e.width():h.width||e.parent().width();if(i<0)return true;e.data("shorten-options",h);this.style.display="block";this.style.whiteSpace="nowrap";if(o){var b=a(this),n=document.createElement("canvas");ctx=n.getContext("2d");b.html(n);ctx.font=b.css("font-style")+" "+b.css("font-variant")+" "+b.css("font-weight")+" "+Math.ceil(parseFloat(b.css("font-size")))+"px "+b.css("font-family");j=ctx;k=s}else{b=a('
'); $td=a("td",b);a(this).html(b);j=$td;k=t}b=k.call(this,d,j);if(b"+h.tail+"
").text();if(n.length==1&&n.charCodeAt(0)==8230){e.text(d);this.style.overflow="hidden";this.style[r._native]="ellipsis";this.style.visibility="visible";l.shortened=true;l.textOverflow="ellipsis";e.data("shorten-info",l);return true}}f=k.call(this,f,j);i-=f;f=i*1.15; if(b-f>0){f=d.substring(0,Math.ceil(p*(f/b)));if(k.call(this,f,j)>i){d=f;p=d.length}}do{p--;d=d.substring(0,p)}while(k.call(this,d,j)>=i);e.html(a.trim(a("").text(d).html())+h.tail);this.style.visibility="visible";l.shortened=true;e.data("shorten-info",l);return true})};var m=document.documentElement.style;if("textOverflow"in m)q="textOverflow";else if("OTextOverflow"in m)q="OTextOverflow";if(typeof Modernizr!="undefined"&&Modernizr.canvastext)o=Modernizr.canvastext;else{m=document.createElement("canvas"); o=!!(m.getContext&&m.getContext("2d")&&typeof m.getContext("2d").fillText==="function")}a.fn.shorten._is_canvasTextSupported=o;a.fn.shorten._native=q;a.fn.shorten.defaults={tail:"…",tooltip:true}})(jQuery); diff --git a/AndorsTrailEdit/inc/ui.dynatree.css b/AndorsTrailEdit/inc/ui.dynatree.css index 4976f5b02..d2c1fc53c 100644 --- a/AndorsTrailEdit/inc/ui.dynatree.css +++ b/AndorsTrailEdit/inc/ui.dynatree.css @@ -16,7 +16,7 @@ ul.dynatree-container ul.dynatree-container ul { - padding: 0 0 0 16px; + padding: 0 0 0 8px; margin: 0; }