import React from 'react'; import ReactDOM from 'react-dom'; import Crowi from './util/Crowi'; import CrowiRenderer from './util/CrowiRenderer'; import HeaderSearchBox from './components/HeaderSearchBox'; import SearchPage from './components/SearchPage'; import PageEditor from './components/PageEditor'; import EditorOptionsSelector from './components/PageEditor/EditorOptionsSelector'; import PageListSearch from './components/PageListSearch'; import PageHistory from './components/PageHistory'; import PageComments from './components/PageComments'; import PageCommentFormBehavior from './components/PageCommentFormBehavior'; import PageAttachment from './components/PageAttachment'; import SeenUserList from './components/SeenUserList'; import RevisionPath from './components/Page/RevisionPath'; import RevisionUrl from './components/Page/RevisionUrl'; import BookmarkButton from './components/BookmarkButton'; import NewPageNameInputter from './components/NewPageNameInputter'; import SearchTypeahead from './components/SearchTypeahead'; import CustomCssEditor from './components/Admin/CustomCssEditor'; import CustomScriptEditor from './components/Admin/CustomScriptEditor'; import * as entities from 'entities'; if (!window) { window = {}; } const mainContent = document.querySelector('#content-main'); let pageId = null; let pageRevisionId = null; let pageRevisionCreatedAt = null; let pagePath; let pageContent = ''; if (mainContent !== null) { pageId = mainContent.getAttribute('data-page-id'); pageRevisionId = mainContent.getAttribute('data-page-revision-id'); pageRevisionCreatedAt = +mainContent.getAttribute('data-page-revision-created'); pagePath = mainContent.attributes['data-path'].value; const rawText = document.getElementById('raw-text-original'); if (rawText) { pageContent = rawText.innerHTML; } } const isLoggedin = document.querySelector('.main-container.nologin') == null; // FIXME const crowi = new Crowi({ me: $('body').data('current-username'), csrfToken: $('body').data('csrftoken'), }, window); window.crowi = crowi; crowi.setConfig(JSON.parse(document.getElementById('crowi-context-hydrate').textContent || '{}')); if (isLoggedin) { crowi.fetchUsers(); } const crowiRenderer = new CrowiRenderer(crowi); window.crowiRenderer = crowiRenderer; // FIXME var isEnabledPlugins = $('body').data('plugin-enabled'); if (isEnabledPlugins) { var crowiPlugin = window.crowiPlugin; crowiPlugin.installAll(crowi, crowiRenderer); } // for PageEditor const onSaveSuccess = function(page) { crowi.getCrowiForJquery().updateCurrentRevision(page.revision._id); } /** * define components * key: id of element * value: React Element */ const componentMappings = { 'search-top': , 'search-page': , 'page-list-search': , 'page-comments-list': , 'page-attachment': , //'revision-history': , 'seen-user-list': , 'bookmark-button': , 'page-name-inputter': , }; // additional definitions if pagePath exists if (pagePath) { componentMappings['revision-path'] = ; componentMappings['revision-url'] = ; } let componentInstances = {}; Object.keys(componentMappings).forEach((key) => { const elem = document.getElementById(key); if (elem) { componentInstances[key] = ReactDOM.render(componentMappings[key], elem); } }); // render components with refs to another component const elem = document.getElementById('page-comment-form-behavior'); if (elem) { ReactDOM.render(, elem); } /* * PageEditor */ let pageEditor = null; // render PageEditor const pageEditorElem = document.getElementById('page-editor'); if (pageEditorElem) { pageEditor = ReactDOM.render( , pageEditorElem ); // set refs for pageEditor crowi.setPageEditor(pageEditor); } // render EditorOptionsSelector const editorOptionSelectorElem = document.getElementById('page-editor-options-selector'); if (editorOptionSelectorElem) { ReactDOM.render( { // set onChange event handler pageEditor.setEditorOptions(opts); crowi.saveEditorOptions(opts); }} />, editorOptionSelectorElem ); } // render for admin const customCssEditorElem = document.getElementById('custom-css-editor'); if (customCssEditorElem != null) { // get input[type=hidden] element const customCssInputElem = document.getElementById('inputCustomCss'); ReactDOM.render( , customCssEditorElem ) } const customScriptEditorElem = document.getElementById('custom-script-editor'); if (customScriptEditorElem != null) { // get input[type=hidden] element const customScriptInputElem = document.getElementById('inputCustomScript'); ReactDOM.render( , customScriptEditorElem ) } // うわーもうー $('a[data-toggle="tab"][href="#revision-history"]').on('show.bs.tab', function() { ReactDOM.render(, document.getElementById('revision-history')); });