mirror of
https://github.com/flarum/framework.git
synced 2025-05-23 15:19:56 +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) {
|
function checkView(data, view, cached, cachedControllers, controllers, views) {
|
||||||
var controller = getController(cached.views, view, cachedControllers, data.controller);
|
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"};
|
data = pendingRequests === 0 || forcing || cachedControllers && cachedControllers.indexOf(controller) > -1 ? data.view(controller) : {tag: "placeholder"};
|
||||||
if (data.subtree === "retain") return data;
|
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);
|
updateLists(views, controllers, view, controller);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
@ -20671,15 +20669,19 @@ System.register('flarum/helpers/listItems', ['flarum/components/Separator', 'fla
|
|||||||
var className = item.props ? item.props.itemClassName : item.itemClassName;
|
var className = item.props ? item.props.itemClassName : item.itemClassName;
|
||||||
|
|
||||||
if (isListItem) {
|
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(
|
return [isListItem ? item : m(
|
||||||
'li',
|
'li',
|
||||||
{ className: classList([item.itemName ? 'item-' + item.itemName : '', className, active ? 'active' : '']),
|
{ className: classList([item.itemName ? 'item-' + item.itemName : '', className, active ? 'active' : '']),
|
||||||
key: item.itemName },
|
key: item.itemName },
|
||||||
item
|
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) {
|
function checkView(data, view, cached, cachedControllers, controllers, views) {
|
||||||
var controller = getController(cached.views, view, cachedControllers, data.controller);
|
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"};
|
data = pendingRequests === 0 || forcing || cachedControllers && cachedControllers.indexOf(controller) > -1 ? data.view(controller) : {tag: "placeholder"};
|
||||||
if (data.subtree === "retain") return data;
|
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);
|
updateLists(views, controllers, view, controller);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
@ -29793,15 +29791,19 @@ System.register('flarum/helpers/listItems', ['flarum/components/Separator', 'fla
|
|||||||
var className = item.props ? item.props.itemClassName : item.itemClassName;
|
var className = item.props ? item.props.itemClassName : item.itemClassName;
|
||||||
|
|
||||||
if (isListItem) {
|
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(
|
return [isListItem ? item : m(
|
||||||
'li',
|
'li',
|
||||||
{ className: classList([item.itemName ? 'item-' + item.itemName : '', className, active ? 'active' : '']),
|
{ className: classList([item.itemName ? 'item-' + item.itemName : '', className, active ? 'active' : '']),
|
||||||
key: item.itemName },
|
key: item.itemName },
|
||||||
item
|
item
|
||||||
), ' '];
|
), space];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,9 +35,13 @@ export default function listItems(items) {
|
|||||||
const className = item.props ? item.props.itemClassName : item.itemClassName;
|
const className = item.props ? item.props.itemClassName : item.itemClassName;
|
||||||
|
|
||||||
if (isListItem) {
|
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 [
|
return [
|
||||||
isListItem
|
isListItem
|
||||||
? item
|
? item
|
||||||
@ -49,7 +53,7 @@ export default function listItems(items) {
|
|||||||
key={item.itemName}>
|
key={item.itemName}>
|
||||||
{item}
|
{item}
|
||||||
</li>,
|
</li>,
|
||||||
' '
|
space
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user