Skip to content

Commit 6bcbd55

Browse files
committed
Added multi-subject support
1 parent 26a99ce commit 6bcbd55

File tree

14 files changed

+136
-21
lines changed

14 files changed

+136
-21
lines changed

config.json

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,53 @@
99
"ui" : {
1010
"displayModes" : []
1111
},
12+
"subjects" : {
13+
"csSUBJECT:none" : {
14+
"name" : "nessuna materia",
15+
"item_types" : []
16+
},
17+
"csSUBJECT:art_history" : {
18+
"name" : "storia dell'arte",
19+
"item_types" : [
20+
"csITEMTYPE:commission",
21+
"csITEMTYPE:context",
22+
"csITEMTYPE:history",
23+
"csITEMTYPE:size",
24+
"csITEMTYPE:description",
25+
"csITEMTYPE:inspiration",
26+
"csITEMTYPE:style",
27+
"csITEMTYPE:color",
28+
"csITEMTYPE:light",
29+
"csITEMTYPE:architecture",
30+
"csITEMTYPE:material",
31+
"csITEMTYPE:interpretation",
32+
"csITEMTYPE:hypothesis",
33+
"csITEMTYPE:document"
34+
]
35+
},
36+
"csSUBJECT:italian" : {
37+
"name" : "italiano",
38+
"item_types" : [
39+
"csITEMTYPE:context",
40+
"csITEMTYPE:history",
41+
"csITEMTYPE:description",
42+
"csITEMTYPE:document",
43+
"csITEMTYPE:text"
44+
]
45+
},
46+
"csSUBJECT:history" : {
47+
"name" : "storia",
48+
"item_types" : [
49+
"csITEMTYPE:context",
50+
"csITEMTYPE:history",
51+
"csITEMTYPE:description",
52+
"csITEMTYPE:document",
53+
"csITEMTYPE:event"
54+
]
55+
}
56+
},
1257
"sheet" : {
58+
"currentSubject" : "csSUBJECT:art_history",
1359
"editing" : {
1460
"deleteWarningLengthThreshold" : 25,
1561
"deleteWarningWhenImagePresent" : true,

js/clientMenu.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ function updateClientMenuOption(o) {
44
let setting = getNestedJSON(CONFIG, o.dataset.setting)
55
switch (typeof setting) {
66
case "boolean":
7-
if (setting || setting==null) o.classList.add('setting-bool-active')
7+
if (setting) o.classList.add('setting-bool-active')
88
break
99
default:
1010
break
@@ -36,3 +36,12 @@ const toggleDynamicBackgrounds = (e) => {
3636
document.getElementById('content-body').classList.remove('dynamic-backgrounds-enabled')
3737
}
3838
}
39+
40+
const toggleSaveSubject = (e) => {
41+
e = document.getElementById(e)
42+
CONFIG.sheet.editing.saveCurrentSubject = !CONFIG.sheet.editing.saveCurrentSubject
43+
44+
// Update the UI
45+
if (CONFIG.sheet.editing.saveCurrentSubject) e.classList.add('setting-bool-active')
46+
else e.classList.remove('setting-bool-active')
47+
}

js/controlPanel.js

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,35 @@ function addItem(type) {
66
}, null, `${itemType.emoji} Aggiungi ${itemType.names.singular}`, "contenuto:", "Aggiungi")
77
}
88

9-
function addItemGenerationButtons(parent) {
10-
const exclude = [""]
11-
Object.keys(CONFIG.sheet.items.types).forEach((key) => {
12-
if (exclude.includes(key)) { return }
13-
const type = CONFIG.sheet.items.types[key]
9+
function addItemGenerationButtons(types) {
10+
const parent = document.getElementById("add-element-panel")
11+
parent.querySelectorAll('*').forEach(cn => cn.remove())
12+
13+
types.forEach(type => {
14+
type = CONFIG.sheet.items.types[type]
1415
const e = document.createElement("button")
15-
e.ontouchend = e.onclick = _ => { addItem(key) }
16+
e.ontouchend = e.onclick = _ => { addItem(type) }
1617
e.className = "item-gen-button"
1718
e.innerText = `${type.emoji} ${capitalize(type.names.singular)}`
1819
parent.appendChild(e)
1920
})
2021
}
22+
23+
function addSubjectSelectionOptions(subjects) {
24+
const parent = document.getElementById('csSUBJECT-selector')
25+
parent.childNodes.forEach(cn => cn.remove())
26+
27+
subjects.forEach(subjectName => {
28+
const subject = CONFIG.subjects[subjectName]
29+
const e = document.createElement('option')
30+
e.value = subjectName
31+
e.innerText = subject.name
32+
parent.appendChild(e)
33+
})
34+
}
35+
36+
37+
document.getElementById('csSUBJECT-selector').onchange = ev => {
38+
CONFIG.sheet.currentSubject = ev.currentTarget.value
39+
addItemGenerationButtons(CONFIG.subjects[CONFIG.sheet.currentSubject].item_types)
40+
}

js/startup.js

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const immutableConfig = [ // Config paths that should NOT be saved locally
77
"sheet.items"
88
]
99

10+
1011
function checkConfig(local) {
1112
// Warn if the config is empty
1213
if (Object.keys(local).length===0)
@@ -20,18 +21,23 @@ function checkConfig(local) {
2021

2122
return local
2223
}
23-
function startup(configData) {
24+
25+
function loadConfig(configData) {
2426
console.info("Config data obtained")
27+
2528
console.log("Saving remote config...")
2629
const remoteConfigData = {...configData}
2730
console.info("Remote config saved")
31+
2832
const localConfig = JSON.parse(localStorage.getItem(configData.client.localConfigKey))
29-
console.log(`Local config data ${localConfig!=null ? 'detected' : 'not found - loading default'}`)
33+
console.log(`Local config data ${localConfig!=null ? 'found' : 'not found - loading default'}`)
3034
if (localConfig!=null && localConfig.client.saveLocalConfig) configData = localConfig
3135
console.info(`saveLocalConfig is ${configData.client.saveLocalConfig}${configData.client.saveLocalConfig ? 'default' : 'if present, local'} config has been discarded`)
36+
3237
console.log("Checking config data...")
3338
CONFIG = checkConfig(configData)
3439
console.info("Config data loaded")
40+
3541
console.log("Restoring immutable config data...")
3642
for (const path of immutableConfig) {
3743
const immutableValue = getNestedJSON(remoteConfigData, path)
@@ -40,24 +46,34 @@ function startup(configData) {
4046
}
4147
console.info("Immutable config data ready")
4248

43-
if (CONFIG.client.developmentMode) console.info("Development mode is enabled")
49+
console.log(configData)
50+
}
51+
52+
function applyConfig() {
53+
if (!CONFIG.client.developmentMode) document.getElementById("client-debug-options")?.remove()
4454

45-
// Apply config
46-
if (!CONFIG.client.developmentMode) document.getElementById("client-debug-options").remove()
4755
const clientMenuOptions = document.querySelectorAll("#client-menu-dropdown > #client-options > button")
4856
clientMenuOptions.forEach((o) => { updateClientMenuOption(o) })
49-
const itemGenerationPanel = document.getElementById("add-element-panel")
50-
addItemGenerationButtons(itemGenerationPanel)
57+
58+
addSubjectSelectionOptions(Object.keys(CONFIG.subjects).filter(v => v!=='csSUBJECT:none'))
59+
const subjectSelector = document.getElementById('csSUBJECT-selector')
60+
if (CONFIG.sheet.editing.saveCurrentSubject) subjectSelector.value = CONFIG.sheet.currentSubject
61+
subjectSelector.onchange({currentTarget: subjectSelector})
62+
5163
const contentBody = document.getElementById("content-body")
5264
addItemSections(contentBody)
65+
5366
const imageCarousels = document.getElementsByClassName("imageCarousel-wrapper")
5467
forAllElements(imageCarousels, addImageCarouselOptions)
68+
5569
const versionLabel = document.querySelector("#clientInfo-wrapper > #version")
5670
versionLabel.innerText = `v${CONFIG.client.version}${CONFIG.client.developmentMode ? "dev" : ""}`
71+
5772
const displayModes = CONFIG.ui.displayModes
5873
if (displayModes.length!==0) { for (const dm of displayModes) {
5974
document.body.classList.add(dm)
6075
} }
76+
6177
const content_body = document.getElementById('content-body')
6278
if (CONFIG.sheet.editing.enableDynamicBackgrounds) content_body.classList.add('dynamic-backgrounds-enabled')
6379

@@ -73,6 +89,14 @@ function startup(configData) {
7389
}
7490
}
7591

92+
function startup(configData) {
93+
loadConfig(configData)
94+
95+
if (CONFIG.client.developmentMode) console.info("Development mode is enabled")
96+
97+
applyConfig()
98+
}
99+
76100
console.log("Fetching config data...")
77101
const configPath = "" // Path to config from index.html's path
78102
// Get the current path, cut out the file name and replace it with config.json

style/clientMenu.css

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

style/commitLog.css

Lines changed: 7 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

style/common.css

Lines changed: 7 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

style/common.less

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ body {
2828
background-color: var(--color-background-main);
2929
}
3030

31-
button {
31+
button, select {
3232
&:extend(.material);
3333
display: flex;
3434
align-items: center;

style/controlPanel.css

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

style/dialog.css

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)