mirror of
https://github.com/flarum/core.git
synced 2025-07-10 11:26:24 +02:00
Mithril 2 update (#2255)
* Update frontend to Mithril 2 - Update Mithril version to v2.0.4 - Add Typescript typings for Mithril - Rename "props" to "attrs"; "initProps" to "initAttrs"; "m.prop" to "m.stream"; "m.withAttr" to "utils/withAttr". - Use Mithril 2's new lifecycle hooks - SubtreeRetainer has been rewritten to be more useful for the new system - Utils for forcing page re-initializations have been added (force attr in links, setRouteWithForcedRefresh util) - Other mechanical changes, following the upgrade guide - Remove some of the custom stuff in our Component base class - Introduce "fragments" for non-components that control their own DOM - Remove Mithril patches, introduce a few new ones (route attrs in <a>; - Redesign AlertManagerState `show` with 3 overloads: `show(children)`, `show(attrs, children)`, `show(componentClass, attrs, children)` - The `affixedSidebar` util has been replaced with an `AffixedSidebar` component Challenges: - `children` and `tag` are now reserved, and can not be used as attr names - Behavior of links to current page changed in Mithril. If moving to a page that is handled by the same component, the page component WILL NOT be re-initialized by default. Additional code to keep track of the current url is needed (See IndexPage, DiscussionPage, and UserPage for examples) - Native Promise rejections are shown on console when not handled - Instances of components can no longer be stored. The state pattern should be used instead. Refs #1821. Co-authored-by: Alexander Skvortsov <sasha.skvortsov109@gmail.com> Co-authored-by: Matthew Kilgore <tankerkiller125@gmail.com> Co-authored-by: Franz Liedke <franz@develophp.org>
This commit is contained in:
committed by
GitHub
parent
1321b8cc28
commit
71f3379fcc
js
package-lock.jsonpackage.jsonshims.d.tstsconfig.json
src
admin
AdminApplication.js
components
AdminLinkButton.jsAdminNav.jsAppearancePage.jsBasicsPage.jsEditGroupModal.jsExtensionsPage.jsHeaderSecondary.jsMailPage.jsPermissionDropdown.jsPermissionGrid.jsSessionDropdown.jsSettingDropdown.jsSettingsModal.jsUploadImageButton.js
routes.jsutils
common
Application.jsComponent.jsComponent.tsFragment.tsModel.jsSession.jsStore.jsTranslator.jscompat.js
components
Alert.jsAlertManager.jsBadge.jsButton.jsCheckbox.jsConfirmDocumentUnload.jsDropdown.jsFieldSet.jsGroupBadge.jsLinkButton.jsLoadingIndicator.jsModal.jsModalManager.jsNavigation.jsPage.jsPlaceholder.jsRequestErrorModal.jsSelect.jsSelectDropdown.jsSplitDropdown.jsSwitch.js
helpers
states
utils
forum
ForumApplication.jscompat.js
components
AffixedSidebar.jsAvatarEditor.jsChangeEmailModal.jsChangePasswordModal.jsCommentPost.jsComposer.jsComposerBody.jsComposerButton.jsComposerPostPreview.jsDiscussionComposer.jsDiscussionHero.jsDiscussionList.jsDiscussionListItem.jsDiscussionListPane.jsDiscussionPage.jsDiscussionRenamedNotification.jsDiscussionRenamedPost.jsDiscussionsSearchSource.jsDiscussionsUserPage.jsEditPostComposer.jsEditUserModal.jsEventPost.jsForgotPasswordModal.jsHeaderPrimary.jsHeaderSecondary.jsIndexPage.jsLogInButton.jsLogInModal.jsNotification.jsNotificationGrid.jsNotificationList.jsNotificationsDropdown.jsNotificationsPage.jsPost.jsPostEdited.jsPostMeta.jsPostPreview.jsPostStream.jsPostStreamScrubber.jsPostUser.jsPostsUserPage.jsRenameDiscussionModal.jsReplyComposer.jsReplyPlaceholder.jsSearch.jsSessionDropdown.jsSettingsPage.jsSignUpModal.jsTerminalPost.jsTextEditor.jsTextEditorButton.jsUserCard.jsUserPage.jsUsersSearchSource.jsWelcomeHero.js
routes.jsstates
utils
@ -14,23 +14,21 @@ export default class Modal extends Component {
|
||||
*/
|
||||
static isDismissible = true;
|
||||
|
||||
init() {
|
||||
/**
|
||||
* Attributes for an alert component to show below the header.
|
||||
*
|
||||
* @type {object}
|
||||
*/
|
||||
this.alertAttrs = null;
|
||||
/**
|
||||
* Attributes for an alert component to show below the header.
|
||||
*
|
||||
* @type {object}
|
||||
*/
|
||||
alertAttrs = null;
|
||||
|
||||
oncreate(vnode) {
|
||||
super.oncreate(vnode);
|
||||
|
||||
this.attrs.onshow(() => this.onready());
|
||||
}
|
||||
|
||||
config(isInitialized, context) {
|
||||
if (isInitialized) return;
|
||||
|
||||
this.props.onshow(() => this.onready());
|
||||
|
||||
context.onunload = () => {
|
||||
this.props.onhide();
|
||||
};
|
||||
onremove() {
|
||||
this.attrs.onhide();
|
||||
}
|
||||
|
||||
view() {
|
||||
@ -109,7 +107,7 @@ export default class Modal extends Component {
|
||||
* Hide the modal.
|
||||
*/
|
||||
hide() {
|
||||
this.props.onhide();
|
||||
this.attrs.onhide();
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user