1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-08-03 08:28:31 +00:00

Add the ability to filter text from game names

This commit is contained in:
Pyrrhic 2020-11-15 01:47:15 -06:00
parent 32859318b2
commit 4f7cd07d58
5 changed files with 58 additions and 8 deletions

View file

@ -6,6 +6,7 @@
:words="item.words" :words="item.words"
:removable="item.removable" :removable="item.removable"
:adding="true" :adding="true"
:text_only="item.text_only"
@save="new_term" @save="new_term"
/> />
<div v-if="! val.length || val.length === 1 && hasInheritance" class="tw-mg-t-05 tw-c-text-alt-2 tw-font-size-4 tw-align-center tw-c-text-alt-2 tw-pd-05"> <div v-if="! val.length || val.length === 1 && hasInheritance" class="tw-mg-t-05 tw-c-text-alt-2 tw-font-size-4 tw-align-center tw-c-text-alt-2 tw-pd-05">
@ -19,6 +20,7 @@
:colored="item.colored" :colored="item.colored"
:words="item.words" :words="item.words"
:removable="item.removable" :removable="item.removable"
:text_only="item.text_only"
@remove="remove(term)" @remove="remove(term)"
@save="save(term, $event)" @save="save(term, $event)"
/> />
@ -35,7 +37,14 @@ let last_id = 0;
export default { export default {
mixins: [SettingMixin], mixins: [SettingMixin],
props: ['item', 'context'], props: {
item: Object,
context: Object,
text_only: {
type: Boolean,
default: false
}
},
data() { data() {
return { return {

View file

@ -35,7 +35,7 @@
</figure> </figure>
</div> </div>
</div> </div>
<div class="tw-flex-shrink-0 tw-mg-x-05"> <div v-if="! text_only" class="tw-flex-shrink-0 tw-mg-x-05">
<span v-if="! editing">{{ term_type }}</span> <span v-if="! editing">{{ term_type }}</span>
<select <select
v-else v-else
@ -56,6 +56,7 @@
</option> </option>
</select> </select>
</div> </div>
<div v-else class="tw-mg-r-1" />
<div v-if="removable" class="tw-flex-shrink-0 tw-mg-r-05 tw-relative tw-tooltip-wrapper"> <div v-if="removable" class="tw-flex-shrink-0 tw-mg-r-05 tw-relative tw-tooltip-wrapper">
<button <button
v-if="editing" v-if="editing"
@ -160,6 +161,10 @@ export default {
adding: { adding: {
type: Boolean, type: Boolean,
default: false default: false
},
text_only: {
type: Boolean,
default: false
} }
}, },

View file

@ -38,6 +38,16 @@ export default class Game extends SiteModule {
default: [], default: [],
onUIChange: () => this.parent.updateCards() onUIChange: () => this.parent.updateCards()
}); });
this.settings.addUI('directory.game.filtered-text', {
ui: {
path: 'Directory > Categories >> Filtered Text',
component: 'basic-terms',
text_only: true,
onUIChange: () => this.parent.updateCards()
},
default: [],
});
} }
onEnable() { onEnable() {
@ -51,7 +61,7 @@ export default class Game extends SiteModule {
}); });
this.settings.provider.on('changed', key => { this.settings.provider.on('changed', key => {
if ( key === 'directory.game.blocked-games' || key === 'directory.game.hidden-thumbnails' ) { if ( key === 'directory.game.blocked-games' || key === 'directory.game.hidden-thumbnails' || key === 'directory.game.filtered-text' ) {
this.parent.updateCards(); this.parent.updateCards();
for(const inst of this.GameHeader.instances) for(const inst of this.GameHeader.instances)

View file

@ -336,6 +336,19 @@ export default class Directory extends SiteModule {
let bad_tag = false; let bad_tag = false;
if (typeof game === 'string' || game instanceof String) {
const filtered_text = this.settings.profile(0).get('directory.game.filtered-text', []);
filtered_text.forEach(text => {
text = text.v.v;
if (game.includes(text)) {
const matchingElement = document.evaluate(`.//*[text()="${game}"]`, el, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if (matchingElement) {
matchingElement.innerText = game.replaceAll(text, "");;
}
}
});
}
el.classList.toggle('ffz-hide-thumbnail', this.settings.provider.get('directory.game.hidden-thumbnails', []).includes(game)); el.classList.toggle('ffz-hide-thumbnail', this.settings.provider.get('directory.game.hidden-thumbnails', []).includes(game));
el.dataset.ffzType = props.streamType; el.dataset.ffzType = props.streamType;

View file

@ -201,7 +201,7 @@ export default class Layout extends Module {
this.on('site.directory:update-cards', () => { this.on('site.directory:update-cards', () => {
for(const inst of this.SideBarChannels.instances) for(const inst of this.SideBarChannels.instances)
this.updateCardClass(inst); this.updateCard(inst);
}); });
this.ResizeDetector.ready(() => { this.ResizeDetector.ready(() => {
@ -213,11 +213,11 @@ export default class Layout extends Module {
this.SideBarChannels.ready((cls, instances) => { this.SideBarChannels.ready((cls, instances) => {
for(const inst of instances) for(const inst of instances)
this.updateCardClass(inst); this.updateCard(inst);
}); });
this.SideBarChannels.on('mount', this.updateCardClass, this); this.SideBarChannels.on('mount', this.updateCard, this);
this.SideBarChannels.on('update', this.updateCardClass, this); this.SideBarChannels.on('update', this.updateCard, this);
/*const t = this; /*const t = this;
this.RightColumn.ready((cls, instances) => { this.RightColumn.ready((cls, instances) => {
@ -291,7 +291,7 @@ export default class Layout extends Module {
return this.settings.get('layout.is-minimal') return this.settings.get('layout.is-minimal')
} }
updateCardClass(inst) { updateCard(inst) {
const node = this.fine.getChildNode(inst); const node = this.fine.getChildNode(inst);
if ( node ) { if ( node ) {
@ -304,6 +304,19 @@ export default class Layout extends Module {
const game = inst.props?.tooltipContent?.props?.gameName || inst.props?.metadataLeft?.props?.activity?.stream?.game?.name || inst.props?.metadataLeft; const game = inst.props?.tooltipContent?.props?.gameName || inst.props?.metadataLeft?.props?.activity?.stream?.game?.name || inst.props?.metadataLeft;
node.classList.toggle('tw-hide', this.settings.provider.get('directory.game.blocked-games', []).includes(game)); node.classList.toggle('tw-hide', this.settings.provider.get('directory.game.blocked-games', []).includes(game));
if (typeof game === 'string' || game instanceof String) {
const filtered_text = this.settings.profile(0).get('directory.game.filtered-text', []);
filtered_text.forEach(text => {
text = text.v.v;
if (game.includes(text)) {
const matchingElement = document.evaluate(`.//*[text()="${game}"]`, node, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if (matchingElement) {
matchingElement.innerText = game.replaceAll(text, "");;
}
}
});
}
} }
} }