From b31ad64fb7ef5c10480da582575f4c2542a91b72 Mon Sep 17 00:00:00 2001 From: Johannes Zillmann Date: Mon, 6 Feb 2017 19:13:43 +0100 Subject: [PATCH] Introduce Result View --- src/javascript/components/App.jsx | 8 ++++++- src/javascript/components/DebugView.jsx | 8 +++---- .../{MarkdownView.jsx => ResultView.jsx} | 22 +++++++++++++++--- src/javascript/components/TopBar.jsx | 21 ++++++++++++++++- .../components/debug/MarkdownPageView.jsx | 23 +++++++++++++++++++ .../components/{ => debug}/PdfPageView.jsx | 0 .../components/{ => debug}/TextPageView.jsx | 6 ++++- src/javascript/models/AppState.jsx | 14 +++++++---- .../{ToSingleTextPage.jsx => ToMarkdown.jsx} | 4 ++-- 9 files changed, 90 insertions(+), 16 deletions(-) rename src/javascript/components/{MarkdownView.jsx => ResultView.jsx} (72%) create mode 100644 src/javascript/components/debug/MarkdownPageView.jsx rename src/javascript/components/{ => debug}/PdfPageView.jsx (100%) rename src/javascript/components/{ => debug}/TextPageView.jsx (66%) rename src/javascript/models/transformations/{ToSingleTextPage.jsx => ToMarkdown.jsx} (83%) diff --git a/src/javascript/components/App.jsx b/src/javascript/components/App.jsx index 3786c6f..080e1a5 100644 --- a/src/javascript/components/App.jsx +++ b/src/javascript/components/App.jsx @@ -6,6 +6,7 @@ import TopBar from './TopBar.jsx'; import { View } from '../models/AppState.jsx'; import PdfUploadView from './PdfUploadView.jsx'; import LoadingView from './LoadingView.jsx'; +import ResultView from './ResultView.jsx'; import DebugView from './DebugView.jsx'; export default class App extends React.Component { @@ -26,14 +27,19 @@ export default class App extends React.Component { case View.LOADING: mainView = break; + case View.RESULT: + mainView = + break; case View.DEBUG: mainView = break; + default: + throw `View ${this.props.appState.mainView} not supported!`; } return (
- +
{ mainView } diff --git a/src/javascript/components/DebugView.jsx b/src/javascript/components/DebugView.jsx index 059cb41..187254c 100644 --- a/src/javascript/components/DebugView.jsx +++ b/src/javascript/components/DebugView.jsx @@ -10,9 +10,9 @@ import Label from 'react-bootstrap/lib/Label' import Checkbox from 'react-bootstrap/lib/Checkbox' import ContentView from '../models/ContentView.jsx'; -import PdfPageView from './PdfPageView.jsx'; -import TextPageView from './TextPageView.jsx'; -import MarkdownView from './MarkdownView.jsx'; +import PdfPageView from './debug/PdfPageView.jsx'; +import TextPageView from './debug/TextPageView.jsx'; +import MarkdownPageView from './debug/MarkdownPageView.jsx'; // A view which displays the content of the given pages transformed by the given transformations export default class DebugView extends React.Component { @@ -92,7 +92,7 @@ export default class DebugView extends React.Component { pageComponents = transformedPages.map(page => ); break; case ContentView.MARKDOWN: - pageComponents = transformedPages.map(page => ); + pageComponents = transformedPages.map(page => ); break; } diff --git a/src/javascript/components/MarkdownView.jsx b/src/javascript/components/ResultView.jsx similarity index 72% rename from src/javascript/components/MarkdownView.jsx rename to src/javascript/components/ResultView.jsx index 87e0cd3..1e02774 100644 --- a/src/javascript/components/MarkdownView.jsx +++ b/src/javascript/components/ResultView.jsx @@ -5,17 +5,33 @@ import ButtonToolbar from 'react-bootstrap/lib/ButtonToolbar' import ButtonGroup from 'react-bootstrap/lib/ButtonGroup' import Button from 'react-bootstrap/lib/Button' -export default class MarkdownView extends React.Component { +export default class ResultView extends React.Component { static propTypes = { - page: React.PropTypes.object.isRequired, + pdfPages: React.PropTypes.array.isRequired, + transformations: React.PropTypes.array.isRequired, }; constructor(props) { super(props); + } + + componentWillMount() { + const {pdfPages, transformations} = this.props; + var transformedPages = pdfPages; + var lastTransformation; + transformations.forEach(transformation => { + if (lastTransformation) { + transformedPages = lastTransformation.processAnnotations(transformedPages); + } + transformedPages = transformation.transform(transformedPages); + lastTransformation = transformation; + }); + this.state = { preview: true, - text: props.page.text + text: transformedPages[0].text + }; } diff --git a/src/javascript/components/TopBar.jsx b/src/javascript/components/TopBar.jsx index 0320a12..1423002 100644 --- a/src/javascript/components/TopBar.jsx +++ b/src/javascript/components/TopBar.jsx @@ -1,17 +1,25 @@ import React from 'react'; import Navbar from 'react-bootstrap/lib/Navbar' +import Nav from 'react-bootstrap/lib/Nav' +import NavItem from 'react-bootstrap/lib/NavItem' import MenuItem from 'react-bootstrap/lib/MenuItem' import Dropdown from 'react-bootstrap/lib/Dropdown' import Popover from 'react-bootstrap/lib/Popover' import OverlayTrigger from 'react-bootstrap/lib/OverlayTrigger' import AppLogo from './AppLogo.jsx'; +import { View } from '../models/AppState.jsx'; export default class TopBar extends React.Component { - render() { + static propTypes = { + mainView: React.PropTypes.object.isRequired, + switchMainViewFunction: React.PropTypes.func.isRequired, + }; + render() { + const {mainView, switchMainViewFunction} = this.props; const aboutPopover = (

@@ -20,6 +28,8 @@ export default class TopBar extends React.Component { ); + const showTabs = mainView == View.RESULT || mainView == View.DEBUG; + return ( @@ -41,6 +51,15 @@ export default class TopBar extends React.Component { + { showTabs && +

} ); diff --git a/src/javascript/components/debug/MarkdownPageView.jsx b/src/javascript/components/debug/MarkdownPageView.jsx new file mode 100644 index 0000000..0f60503 --- /dev/null +++ b/src/javascript/components/debug/MarkdownPageView.jsx @@ -0,0 +1,23 @@ +import React from 'react'; +import Remarkable from 'remarkable'; + +export default class MarkdownPageView extends React.Component { + + static propTypes = { + page: React.PropTypes.object.isRequired, + }; + + render() { + const remarkable = new Remarkable({ + breaks: true + }); + + const html = remarkable.render(this.props.page.text); + return ( +
+
+
+ ); + } + +} \ No newline at end of file diff --git a/src/javascript/components/PdfPageView.jsx b/src/javascript/components/debug/PdfPageView.jsx similarity index 100% rename from src/javascript/components/PdfPageView.jsx rename to src/javascript/components/debug/PdfPageView.jsx diff --git a/src/javascript/components/TextPageView.jsx b/src/javascript/components/debug/TextPageView.jsx similarity index 66% rename from src/javascript/components/TextPageView.jsx rename to src/javascript/components/debug/TextPageView.jsx index 7fd0ddc..a709c2f 100644 --- a/src/javascript/components/TextPageView.jsx +++ b/src/javascript/components/debug/TextPageView.jsx @@ -11,7 +11,11 @@ export default class TextPageView extends React.Component { return (

{ header }

-
); diff --git a/src/javascript/models/AppState.jsx b/src/javascript/models/AppState.jsx index e551823..f2d4a39 100644 --- a/src/javascript/models/AppState.jsx +++ b/src/javascript/models/AppState.jsx @@ -8,7 +8,7 @@ import RemoveRepetitiveElements from './transformations/RemoveRepetitiveElements import HeadlineDetector from './transformations/HeadlineDetector.jsx' import HeadlineToUppercase from './transformations/HeadlineToUppercase.jsx' import ToTextPages from './transformations/ToTextPages.jsx'; -import ToSingleTextPage from './transformations/ToSingleTextPage.jsx' +import ToMarkdown from './transformations/ToMarkdown.jsx' // Holds the state of the Application export default class AppState { @@ -27,12 +27,13 @@ export default class AppState { new HeadlineDetector(), new HeadlineToUppercase(), new ToTextPages(), - new ToSingleTextPage()]; + new ToMarkdown()]; //bind functions this.render = this.render.bind(this); this.storeFileBuffer = this.storeFileBuffer.bind(this); this.storePdfPages = this.storePdfPages.bind(this); + this.switchMainView = this.switchMainView.bind(this); } render() { @@ -49,7 +50,12 @@ export default class AppState { storePdfPages(pdfPages) { this.pdfPages = pdfPages; this.fileBuffer = null; - this.mainView = View.DEBUG; + this.mainView = View.RESULT; + this.render(); + } + + switchMainView(view) { + this.mainView = view; this.render(); } @@ -57,4 +63,4 @@ export default class AppState { export class View extends Enum { } -View.initEnum(['UPLOAD', 'LOADING', 'DEBUG']) \ No newline at end of file +View.initEnum(['UPLOAD', 'LOADING', 'RESULT', 'DEBUG']) \ No newline at end of file diff --git a/src/javascript/models/transformations/ToSingleTextPage.jsx b/src/javascript/models/transformations/ToMarkdown.jsx similarity index 83% rename from src/javascript/models/transformations/ToSingleTextPage.jsx rename to src/javascript/models/transformations/ToMarkdown.jsx index 88372d3..0de233e 100644 --- a/src/javascript/models/transformations/ToSingleTextPage.jsx +++ b/src/javascript/models/transformations/ToMarkdown.jsx @@ -2,10 +2,10 @@ import Transformation from './Transformation.jsx'; import TextPage from '../TextPage.jsx'; import ContentView from '../ContentView.jsx'; -export default class ToSingleTextPage extends Transformation { +export default class ToMarkdown extends Transformation { constructor() { - super("To Single Text Page"); + super("To Markdown"); } showPageSelection() {