Web accessibility
This commit is contained in:
@@ -4,7 +4,7 @@ mixin space(space)
|
|||||||
.s-user-card.flex__1
|
.s-user-card.flex__1
|
||||||
span.s-avatar.s-avatar__32.s-user-card--avatar
|
span.s-avatar.s-avatar__32.s-user-card--avatar
|
||||||
if space.avatar
|
if space.avatar
|
||||||
img.s-avatar--image(src=mUtils.getPublicUrlForMxc(space.avatar))
|
img.s-avatar--image(src=mUtils.getPublicUrlForMxc(space.avatar) alt="")
|
||||||
else
|
else
|
||||||
.s-avatar--letter.bg-silver-400.bar-md(aria-hidden="true")= space.name[0]
|
.s-avatar--letter.bg-silver-400.bar-md(aria-hidden="true")= space.name[0]
|
||||||
.s-user-card--info.ai-start
|
.s-user-card--info.ai-start
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
mixin guild(guild)
|
mixin guild(guild)
|
||||||
span.s-avatar.s-avatar__32.s-user-card--avatar
|
span.s-avatar.s-avatar__32.s-user-card--avatar
|
||||||
if guild.icon
|
if guild.icon
|
||||||
img.s-avatar--image(src=`https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.png?size=32`)
|
img.s-avatar--image(src=`https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.png?size=32` alt="")
|
||||||
else
|
else
|
||||||
.s-avatar--letter.bg-silver-400.bar-md(aria-hidden="true")= guild.name[0]
|
.s-avatar--letter.bg-silver-400.bar-md(aria-hidden="true")= guild.name[0]
|
||||||
.s-user-card--info.ai-start
|
.s-user-card--info.ai-start
|
||||||
@@ -82,10 +82,10 @@ html(lang="en")
|
|||||||
+define-themed-button("matrix", "black")
|
+define-themed-button("matrix", "black")
|
||||||
body.themed.theme-system
|
body.themed.theme-system
|
||||||
header.s-topbar
|
header.s-topbar
|
||||||
.s-topbar--skip-link(href="#content") Skip to main content
|
a.s-topbar--skip-link(href="#content") Skip to main content
|
||||||
.s-topbar--container.wmx9
|
.s-topbar--container.wmx9
|
||||||
a.s-topbar--logo(href=rel("/"))
|
a.s-topbar--logo(href=rel("/"))
|
||||||
img.s-avatar.s-avatar__32(src=rel("/icon.png"))
|
img.s-avatar.s-avatar__32(src=rel("/icon.png") alt="")
|
||||||
nav.s-topbar--navigation
|
nav.s-topbar--navigation
|
||||||
ul.s-topbar--content
|
ul.s-topbar--content
|
||||||
li.ps-relative.g8
|
li.ps-relative.g8
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ test("web guild: unbridged self-service guild shows available spaces", async t =
|
|||||||
})
|
})
|
||||||
t.has(html, `<strong>Data Horde</strong>`)
|
t.has(html, `<strong>Data Horde</strong>`)
|
||||||
t.has(html, `<li>here is the space topic</li>`)
|
t.has(html, `<li>here is the space topic</li>`)
|
||||||
t.has(html, `<img class="s-avatar--image" src="https://bridge.example.org/download/matrix/cadence.moe/TLqQOsTSrZkVKwBSWYTZNTrw">`)
|
t.has(html, `<img class="s-avatar--image" src="https://bridge.example.org/download/matrix/cadence.moe/TLqQOsTSrZkVKwBSWYTZNTrw" alt="">`)
|
||||||
t.notMatch(html, /<strong>some room<\/strong>/)
|
t.notMatch(html, /<strong>some room<\/strong>/)
|
||||||
t.notMatch(html, /<strong>somebody else's space<\/strong>/)
|
t.notMatch(html, /<strong>somebody else's space<\/strong>/)
|
||||||
})
|
})
|
||||||
@@ -190,21 +190,66 @@ test("api invite: can invite with valid nonce", async t => {
|
|||||||
api: {
|
api: {
|
||||||
async getStateEvent(roomID, type, key) {
|
async getStateEvent(roomID, type, key) {
|
||||||
called++
|
called++
|
||||||
|
if (type === "m.room.member" && key === "@cadence:cadence.moe") {
|
||||||
return {membership: "leave"}
|
return {membership: "leave"}
|
||||||
|
} else if (type === "m.room.power_levels" && key === "") {
|
||||||
|
return {}
|
||||||
|
} else {
|
||||||
|
t.fail(`unexpected getStateEvent call. roomID: ${roomID}, type: ${type}, key: ${key}`)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getStateEventOuter(roomID, type, key) {
|
||||||
|
called++
|
||||||
|
return {
|
||||||
|
type: "m.room.create",
|
||||||
|
state_key: "",
|
||||||
|
sender: "@_ooye_bot:cadence.moe",
|
||||||
|
event_id: "$create",
|
||||||
|
origin_server_ts: 0,
|
||||||
|
room_id: roomID,
|
||||||
|
content: {
|
||||||
|
room_version: "11"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async inviteToRoom(roomID, mxidToInvite, mxid) {
|
async inviteToRoom(roomID, mxidToInvite, mxid) {
|
||||||
|
called++
|
||||||
t.equal(roomID, "!jjmvBegULiLucuWEHU:cadence.moe")
|
t.equal(roomID, "!jjmvBegULiLucuWEHU:cadence.moe")
|
||||||
called++
|
|
||||||
},
|
},
|
||||||
async setUserPowerCascade(roomID, mxid, power) {
|
async *generateFullHierarchy(spaceID) {
|
||||||
t.equal(power, 50) // moderator
|
|
||||||
called++
|
called++
|
||||||
|
yield {
|
||||||
|
room_id: "!hierarchy",
|
||||||
|
children_state: [],
|
||||||
|
guest_can_join: false,
|
||||||
|
num_joined_members: 2,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async sendState(roomID, type, key, content) {
|
||||||
|
called++
|
||||||
|
t.ok(["!hierarchy", "!jjmvBegULiLucuWEHU:cadence.moe"].includes(roomID), `expected room ID to be in hierarchy, but was ${roomID}`)
|
||||||
|
t.equal(type, "m.room.power_levels")
|
||||||
|
t.equal(key, "")
|
||||||
|
t.deepEqual(content, {
|
||||||
|
users: {"@cadence:cadence.moe": 50}
|
||||||
|
})
|
||||||
|
return "$updated"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
t.notOk(error)
|
t.notOk(error)
|
||||||
t.equal(called, 3)
|
/*
|
||||||
|
1. get membership
|
||||||
|
2. invite to room
|
||||||
|
set power:
|
||||||
|
3. generate hierarchy
|
||||||
|
4-5. calculate powers
|
||||||
|
6. send state
|
||||||
|
7-8. calculate powers
|
||||||
|
9. send state
|
||||||
|
*/
|
||||||
|
t.equal(called, 9) // get membership +
|
||||||
})
|
})
|
||||||
|
|
||||||
test("api invite: access denied when nonce has been used", async t => {
|
test("api invite: access denied when nonce has been used", async t => {
|
||||||
@@ -235,21 +280,56 @@ test("api invite: can invite to a moderated guild", async t => {
|
|||||||
api: {
|
api: {
|
||||||
async getStateEvent(roomID, type, key) {
|
async getStateEvent(roomID, type, key) {
|
||||||
called++
|
called++
|
||||||
throw new MatrixServerError({errcode: "M_NOT_FOUND", error: "Event not found or something"})
|
if (type === "m.room.member" && key === "@cadence:cadence.moe") {
|
||||||
|
return {membership: "leave"}
|
||||||
|
} else if (type === "m.room.power_levels" && key === "") {
|
||||||
|
return {}
|
||||||
|
} else {
|
||||||
|
t.fail(`unexpected getStateEvent call. roomID: ${roomID}, type: ${type}, key: ${key}`)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getStateEventOuter(roomID, type, key) {
|
||||||
|
called++
|
||||||
|
return {
|
||||||
|
type: "m.room.create",
|
||||||
|
state_key: "",
|
||||||
|
sender: "@_ooye_bot:cadence.moe",
|
||||||
|
event_id: "$create",
|
||||||
|
origin_server_ts: 0,
|
||||||
|
room_id: roomID,
|
||||||
|
content: {
|
||||||
|
room_version: "11"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async inviteToRoom(roomID, mxidToInvite, mxid) {
|
async inviteToRoom(roomID, mxidToInvite, mxid) {
|
||||||
|
called++
|
||||||
t.equal(roomID, "!jjmvBegULiLucuWEHU:cadence.moe")
|
t.equal(roomID, "!jjmvBegULiLucuWEHU:cadence.moe")
|
||||||
called++
|
|
||||||
},
|
},
|
||||||
async setUserPowerCascade(roomID, mxid, power) {
|
async *generateFullHierarchy(spaceID) {
|
||||||
t.equal(power, 100) // moderator
|
|
||||||
called++
|
called++
|
||||||
|
yield {
|
||||||
|
room_id: "!hierarchy",
|
||||||
|
children_state: [],
|
||||||
|
guest_can_join: false,
|
||||||
|
num_joined_members: 2,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async sendState(roomID, type, key, content) {
|
||||||
|
called++
|
||||||
|
t.ok(["!hierarchy", "!jjmvBegULiLucuWEHU:cadence.moe"].includes(roomID), `expected room ID to be in hierarchy, but was ${roomID}`)
|
||||||
|
t.equal(type, "m.room.power_levels")
|
||||||
|
t.equal(key, "")
|
||||||
|
t.deepEqual(content, {
|
||||||
|
users: {"@cadence:cadence.moe": 100}
|
||||||
|
})
|
||||||
|
return "$updated"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
t.notOk(error)
|
t.notOk(error)
|
||||||
t.equal(called, 3)
|
t.equal(called, 9)
|
||||||
})
|
})
|
||||||
|
|
||||||
test("api invite: does not reinvite joined users", async t => {
|
test("api invite: does not reinvite joined users", async t => {
|
||||||
|
|||||||
Reference in New Issue
Block a user