mirror of
https://github.com/flarum/framework.git
synced 2025-05-22 22:59:57 +08:00
Patch Mithril bug causing redraws to fail
Turns out there's a little more to the regression in e5a7013. First, we need to give the spaces in between list items a key too. Second, there's a bug in the latest Mithril code where using string keys can break the diffing algorithm. I've patched it manually in our dist JS files for now, and reported the issue: https://github.com/lhorie/mithril.js/issues/934
This commit is contained in:
12
js/admin/dist/app.js
vendored
12
js/admin/dist/app.js
vendored
@ -1051,11 +1051,9 @@ var m = (function app(window, undefined) {
|
||||
|
||||
function checkView(data, view, cached, cachedControllers, controllers, views) {
|
||||
var controller = getController(cached.views, view, cachedControllers, data.controller);
|
||||
//Faster to coerce to number and check for NaN
|
||||
var key = +(data && data.attrs && data.attrs.key);
|
||||
data = pendingRequests === 0 || forcing || cachedControllers && cachedControllers.indexOf(controller) > -1 ? data.view(controller) : {tag: "placeholder"};
|
||||
if (data.subtree === "retain") return data;
|
||||
if (key === key) (data.attrs = data.attrs || {}).key = key;
|
||||
(data.attrs = data.attrs || {}).key = key;
|
||||
updateLists(views, controllers, view, controller);
|
||||
return data;
|
||||
}
|
||||
@ -20671,15 +20669,19 @@ System.register('flarum/helpers/listItems', ['flarum/components/Separator', 'fla
|
||||
var className = item.props ? item.props.itemClassName : item.itemClassName;
|
||||
|
||||
if (isListItem) {
|
||||
item.props.key = item.itemName;
|
||||
item.attrs = item.attrs || {};
|
||||
item.attrs.key = item.attrs.key || item.itemName;
|
||||
}
|
||||
|
||||
var space = new String(' ');
|
||||
space.attrs = { key: '_space_' + item.itemName };
|
||||
|
||||
return [isListItem ? item : m(
|
||||
'li',
|
||||
{ className: classList([item.itemName ? 'item-' + item.itemName : '', className, active ? 'active' : '']),
|
||||
key: item.itemName },
|
||||
item
|
||||
), ' '];
|
||||
), space];
|
||||
});
|
||||
}
|
||||
|
||||
|
12
js/forum/dist/app.js
vendored
12
js/forum/dist/app.js
vendored
@ -1051,11 +1051,9 @@ var m = (function app(window, undefined) {
|
||||
|
||||
function checkView(data, view, cached, cachedControllers, controllers, views) {
|
||||
var controller = getController(cached.views, view, cachedControllers, data.controller);
|
||||
//Faster to coerce to number and check for NaN
|
||||
var key = +(data && data.attrs && data.attrs.key);
|
||||
data = pendingRequests === 0 || forcing || cachedControllers && cachedControllers.indexOf(controller) > -1 ? data.view(controller) : {tag: "placeholder"};
|
||||
if (data.subtree === "retain") return data;
|
||||
if (key === key) (data.attrs = data.attrs || {}).key = key;
|
||||
(data.attrs = data.attrs || {}).key = key;
|
||||
updateLists(views, controllers, view, controller);
|
||||
return data;
|
||||
}
|
||||
@ -29793,15 +29791,19 @@ System.register('flarum/helpers/listItems', ['flarum/components/Separator', 'fla
|
||||
var className = item.props ? item.props.itemClassName : item.itemClassName;
|
||||
|
||||
if (isListItem) {
|
||||
item.props.key = item.itemName;
|
||||
item.attrs = item.attrs || {};
|
||||
item.attrs.key = item.attrs.key || item.itemName;
|
||||
}
|
||||
|
||||
var space = new String(' ');
|
||||
space.attrs = { key: '_space_' + item.itemName };
|
||||
|
||||
return [isListItem ? item : m(
|
||||
'li',
|
||||
{ className: classList([item.itemName ? 'item-' + item.itemName : '', className, active ? 'active' : '']),
|
||||
key: item.itemName },
|
||||
item
|
||||
), ' '];
|
||||
), space];
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -35,9 +35,13 @@ export default function listItems(items) {
|
||||
const className = item.props ? item.props.itemClassName : item.itemClassName;
|
||||
|
||||
if (isListItem) {
|
||||
item.props.key = item.itemName;
|
||||
item.attrs = item.attrs || {};
|
||||
item.attrs.key = item.attrs.key || item.itemName;
|
||||
}
|
||||
|
||||
const space = new String(' ');
|
||||
space.attrs = {key: '_space_'+item.itemName};
|
||||
|
||||
return [
|
||||
isListItem
|
||||
? item
|
||||
@ -49,7 +53,7 @@ export default function listItems(items) {
|
||||
key={item.itemName}>
|
||||
{item}
|
||||
</li>,
|
||||
' '
|
||||
space
|
||||
];
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user