diff options
Diffstat (limited to 'internal/admin/static')
| -rw-r--r-- | internal/admin/static/itemeditor.js | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/internal/admin/static/itemeditor.js b/internal/admin/static/itemeditor.js index d02e7ab..d02945a 100644 --- a/internal/admin/static/itemeditor.js +++ b/internal/admin/static/itemeditor.js @@ -59,24 +59,24 @@ var SECTIONS = [ ['success_base', 'Base', 'number', '', 'narrow'], ['success_per_level', 'Per Lvl', 'number', '', 'narrow'], ['success_cap', 'Cap', 'number', '', 'narrow'], - ['start_message', 'Start Message', 'text', '', 'wide'], - ['message', 'Message', 'text', '', 'wide'], - ['fail_message', 'Fail Message', 'text', '', 'wide', function(item) { return item.type === 'cooking' || item.subtype === 'smelt'; }], - ['end_message', 'End Message', 'text', '', 'wide'], + ['start_message', 'Start Message', 'text', 'e.g. You begin smithing %i1.', 'wide'], + ['success_message', 'Success Message', 'text', 'e.g. You smith a %n.', 'wide'], + ['fail_message', 'Fail Message', 'text', 'e.g. You accidentally burn the %i1.', 'wide', function(item) { return item.type === 'cooking' || item.subtype === 'smelt'; }], + ['end_message', 'End Message', 'text', 'e.g. You\'ve finished smithing.', 'wide'], ], fieldGroups: [ ['type', 'subtype', 'level', 'xp', 'wait', 'output_qty'], {fields: ['station', 'tool'], right: true}, {label: 'Success', fields: ['success_base', 'success_per_level', 'success_cap', 'fail']}, - ['start_message', 'message', 'fail_message', 'end_message'], + ['start_message', 'success_message', 'fail_message', 'end_message'], ], subSubtables: [ {label:'Ingredients', key:'ingredients', fields:[ ['quantity', 'Qty', 'number', '1', 'narrow'], ]}, {label:'Steps', key:'steps', fields:[ - ['tick', 'Ticks', 'number', '', 'narrow'], - ['message', 'Message', 'text', '', 'wide'], + ['delay', 'Delay (ticks)', 'number', '', 'narrow'], + ['message', 'Message', 'text', '', 'wide'], ]}, ], } @@ -556,6 +556,8 @@ function renderSubFieldHTML(sec, stKey, idx, f, val) { if (f[4] === 'narrow') extraCls = ' obj-narrow'; else if (f[4] === 'grow') extraCls = ' obj-grow'; if (f[4] === 'wide') extraStyle = ' style="flex:1 1 100%"'; + var defaultPh = ''; + if (f[3]) defaultPh = ' placeholder="' + escAttr(f[3]) + '"'; if (f[2] === 'search') { var entity = f[6] || 'items'; var ph = f[3] ? ' placeholder="' + escAttr(f[3]) + '"' : ' placeholder="Search ' + entity + '..."'; @@ -573,7 +575,7 @@ function renderSubFieldHTML(sec, stKey, idx, f, val) { sel += '</select></label>'; return sel; } - return '<label class="obj-field' + extraCls + '"' + extraStyle + '><span>' + esc(f[1]) + '</span><input id="' + fid + '" value="' + escAttr(String(val)) + '"></label>'; + return '<label class="obj-field' + extraCls + '"' + extraStyle + '><span>' + esc(f[1]) + '</span><input id="' + fid + '" value="' + escAttr(String(val)) + '"' + defaultPh + '></label>'; } function renderSubtable(sec, st, data) { @@ -653,7 +655,7 @@ function renderSubtable(sec, st, data) { if (sst.key === 'steps') { var stepsArr = item[sst.key]; if (!stepsArr || !Array.isArray(stepsArr) || stepsArr.length === 0) { - h += '<button class="btn btn-sm obj-sub-add" style="margin-top:4px" onclick="addSubSubRow(\'' + sec.id + '\',\'' + st.key + '\',' + idx + ',\'' + sst.key + '\')">+ Add Custom Delay/Message</button>'; + h += '<button class="btn btn-sm obj-sub-add" data-section="steps-add-' + idx + '" style="margin-top:4px" onclick="addSubSubRow(\'' + sec.id + '\',\'' + st.key + '\',' + idx + ',\'' + sst.key + '\')">+ Add Custom Delay/Message</button>'; return; } } @@ -721,7 +723,9 @@ function removeConsumePair(secID, subKey, rowIdx, subSubKey, subIdx, pairIdx) { function renderSubSubtable(sec, st, rowIdx, sst, parentItem) { var arr = parentItem[sst.key] || []; var isIngredients = sst.key === 'ingredients'; - var h = '<div class="obj-subtable" style="margin:6px 0 6px 12px;border-left:2px solid var(--accent)">'; + var isSteps = sst.key === 'steps'; + var stepsAttr = isSteps ? ' data-section="steps-section"' : ''; + var h = '<div class="obj-subtable"' + stepsAttr + ' style="margin:6px 0 6px 12px;border-left:2px solid var(--accent)">'; if (!isIngredients) { h += '<div class="obj-subtable-header">' + esc(sst.label) + '</div>'; } @@ -1035,6 +1039,11 @@ function setupCraftTypeChange() { var xpField = document.getElementById(id.replace(/_type$/, '_xp')); var stationField = document.getElementById(id.replace(/_type$/, '_station')); + var combineHideFields = ['success_message', 'fail_message', 'tool', 'wait', + 'success_base', 'success_per_level', 'success_cap', 'fail']; + + var recipeRow = typeSelect.closest('.obj-sub-row'); + function update() { var t = typeSelect.value; @@ -1049,6 +1058,25 @@ function setupCraftTypeChange() { if (sLbl) sLbl.style.display = (t === 'fletching' || t === 'combine' || t === 'pharmacy') ? 'none' : ''; } + combineHideFields.forEach(function(fKey) { + var el = document.getElementById(id.replace(/_type$/, '_' + fKey)); + if (!el) return; + var lbl = el.closest('.obj-field'); + if (lbl) lbl.style.display = t === 'combine' ? 'none' : ''; + }); + + var successGroup = document.querySelector('.success-group'); + if (successGroup) successGroup.style.display = t === 'combine' ? 'none' : ''; + var successBtn = document.getElementById(successGroup ? successGroup.id + '_btn' : ''); + if (successBtn) successBtn.style.display = t === 'combine' ? 'none' : ''; + + var stepsSection = recipeRow.querySelector('[data-section="steps-section"]'); + var stepsAddBtn = recipeRow.querySelector('[data-section^="steps-add-"]'); + + var showSteps = t === 'combine'; + if (stepsSection) stepsSection.style.display = showSteps ? '' : 'none'; + if (stepsAddBtn) stepsAddBtn.style.display = showSteps ? '' : 'none'; + if (subtypeSel) { var sLbl = subtypeSel.closest('.obj-field'); if (t === 'smithing') { |
