mirror of
https://github.com/FrankerFaceZ/FrankerFaceZ.git
synced 2025-08-07 23:00:54 +00:00
4.20.69
Nice. * Changed: Warn users that they have `Show Mod Icons` disabled within [Chat > Actions](~chat.actions). * Changed: Blocked Badges, Highlight Badges, and Blocked Types within [Chat > Filtering](~chat.filtering) no longer have a default item. This will hopefully minimize user confusion. * Changed: Blocked Badges also has a new description telling users that it isn't for hiding badges, with a link to the correct place to change badge visibility. * Changed: Remove the New Link Tokenization experiment, making it enabled for all users. * Changed: When navigating within the FFZ Control Center in a pop-out window, update the URL so that it can be shared to link to a specific settings page. * Changed: Disable the websocket connection for users in the API Links experiment to reduce load on the socket cluster. * Fixed: Bug with the FFZ Control Center failing to load if experiments haven't been populated correctly. * Fixed: Badge Visibility not being populated when opening the FFZ Control Center on a page without chat. * API Added: `<markdown />` now supports a link syntax for navigating to a new section of the FFZ Control Center. * API Fixed: Better tokenization for settings paths. Brackets can now be used safely in embedded JSON. * API Fixed: `deep_equals` and `shallow_object_equals` returning false when objects were otherwise equal but had keys in a different order.
This commit is contained in:
parent
f5135ad291
commit
77d6cf56d2
27 changed files with 365 additions and 96 deletions
|
@ -7,6 +7,99 @@
|
|||
|
||||
import MD from 'markdown-it';
|
||||
import MILA from 'markdown-it-link-attributes';
|
||||
import {parse as parse_path} from 'utilities/path-parser';
|
||||
|
||||
let _md;
|
||||
|
||||
function getMD() {
|
||||
if ( ! _md ) {
|
||||
const md = _md = new MD({
|
||||
html: false,
|
||||
linkify: true
|
||||
});
|
||||
|
||||
md.use(SettingsLinks);
|
||||
md.use(MILA, {
|
||||
attrs: {
|
||||
class: 'ffz-tooltip',
|
||||
target: '_blank',
|
||||
rel: 'noopener',
|
||||
'data-tooltip-type': 'link'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return _md;
|
||||
}
|
||||
|
||||
|
||||
function SettingsLinks(md) {
|
||||
const default_render = md.renderer.rules.link_open || this.defaultRender;
|
||||
|
||||
md.renderer.rules.link_open = function(tokens, idx, options, env, self) {
|
||||
const token = tokens[idx];
|
||||
if ( token && token.type === 'link_open' && Array.isArray(token.attrs) ) {
|
||||
let href;
|
||||
for(const attr of token.attrs) {
|
||||
if ( attr[0] === 'href' ) {
|
||||
href = attr[1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( href.startsWith('~') ) {
|
||||
let path;
|
||||
|
||||
if ( href === '~' ) {
|
||||
// We don't have a path, make one from the bits.
|
||||
let i = idx + 1;
|
||||
let bits = [];
|
||||
|
||||
while(i < tokens.length) {
|
||||
const tok = tokens[i],
|
||||
type = tok?.type;
|
||||
if ( type === 'text' )
|
||||
bits.push(tok);
|
||||
else if ( type === 'link_close' )
|
||||
break;
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
bits = bits.map(x => x.content).join('');
|
||||
const toks = parse_path(bits);
|
||||
path = toks.map(x => x.key).join('.');
|
||||
} else
|
||||
path = href.slice(1);
|
||||
|
||||
if ( path && path.length ) {
|
||||
for(const attr of token.attrs) {
|
||||
if ( attr[0] === 'class' ) {
|
||||
attr[1] = attr[1].replace(/ffz-tooltip/g, '');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
token.attrs.push([
|
||||
'data-settings-link',
|
||||
path
|
||||
]);
|
||||
token.attrs.push([
|
||||
'onclick',
|
||||
'FrankerFaceZ.get().resolve("main_menu").mdNavigate(this);return false'
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return default_render(tokens, idx, options, env, self);
|
||||
}
|
||||
}
|
||||
|
||||
SettingsLinks.defaultRender = function(tokens, idx, options, env, self) {
|
||||
return self.renderToken(tokens, idx, options);
|
||||
}
|
||||
|
||||
|
||||
export default {
|
||||
props: {
|
||||
|
@ -15,21 +108,7 @@ export default {
|
|||
|
||||
computed: {
|
||||
md() {
|
||||
const md = new MD({
|
||||
html: false,
|
||||
linkify: true
|
||||
});
|
||||
|
||||
md.use(MILA, {
|
||||
attrs: {
|
||||
class: 'ffz-tooltip',
|
||||
target: '_blank',
|
||||
rel: 'noopener',
|
||||
'data-tooltip-type': 'link'
|
||||
}
|
||||
});
|
||||
|
||||
return md;
|
||||
return getMD();
|
||||
},
|
||||
|
||||
output() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue