diff --git a/src/app.js b/src/app.js
index 37a3c65..a2181e5 100644
--- a/src/app.js
+++ b/src/app.js
@@ -37,12 +37,7 @@ function InnerApp({ gitProvider }) {
return ;
}
- const commits = versions.map(v => v.commit);
- const slideLines = versions.map(v => v.lines);
-
- return (
-
- );
+ return ;
}
function useVersionsLoader(gitProvider) {
diff --git a/src/git-providers/differ.js b/src/git-providers/differ.js
index 0306d27..c46765d 100644
--- a/src/git-providers/differ.js
+++ b/src/git-providers/differ.js
@@ -84,3 +84,26 @@ export function getSlides(codes, language) {
.filter(line => line.middle || line.left || line.right);
});
}
+
+export function getChanges(lines) {
+ const changes = [];
+ let currentChange = null;
+ let i = 0;
+ const isNewLine = i => !lines[i].left && lines[i].middle;
+ while (i < lines.length) {
+ if (isNewLine(i)) {
+ if (!currentChange) {
+ currentChange = { start: i };
+ }
+ } else {
+ if (currentChange) {
+ currentChange.end = i - 1;
+ changes.push(currentChange);
+ currentChange = null;
+ }
+ }
+ i++;
+ }
+
+ return changes;
+}
diff --git a/src/git-providers/versioner.worker.js b/src/git-providers/versioner.worker.js
index 3f95383..79284b6 100644
--- a/src/git-providers/versioner.worker.js
+++ b/src/git-providers/versioner.worker.js
@@ -1,5 +1,5 @@
import { getLanguage, loadLanguage } from "./language-detector";
-import { getSlides } from "./differ";
+import { getSlides, getChanges } from "./differ";
import github from "./github-commit-fetcher";
import gitlab from "./gitlab-commit-fetcher";
@@ -25,5 +25,9 @@ export async function getVersions(source, params) {
const codes = commits.map(commit => commit.content);
const slides = getSlides(codes, lang);
- return commits.map((commit, i) => ({ commit, lines: slides[i] }));
+ return commits.map((commit, i) => ({
+ commit,
+ lines: slides[i],
+ changes: getChanges(slides[i])
+ }));
}
diff --git a/src/git-providers/vscode-provider.js b/src/git-providers/vscode-provider.js
index 3ed205c..a0dc299 100644
--- a/src/git-providers/vscode-provider.js
+++ b/src/git-providers/vscode-provider.js
@@ -1,5 +1,5 @@
import { getLanguage, loadLanguage } from "./language-detector";
-import { getSlides } from "./differ";
+import { getSlides, getChanges } from "./differ";
const vscode = window.vscode;
@@ -43,7 +43,11 @@ async function getVersions(last) {
const codes = commits.map(commit => commit.content);
const slides = getSlides(codes, lang);
- return commits.map((commit, i) => ({ commit, lines: slides[i] }));
+ return commits.map((commit, i) => ({
+ commit,
+ lines: slides[i],
+ changes: getChanges(slides[i])
+ }));
}
export default {
diff --git a/src/history.js b/src/history.js
index 84fcb6e..d37f41a 100644
--- a/src/history.js
+++ b/src/history.js
@@ -99,14 +99,13 @@ function CommitList({ commits, currentIndex, selectCommit }) {
);
}
-export default function History({ commits, slideLines, loadMore }) {
- return (
-
- );
+export default function History({ versions, loadMore }) {
+ return ;
}
-function Slides({ commits, slideLines, loadMore }) {
+function Slides({ versions, loadMore }) {
const [current, target, setTarget] = useSliderSpring(0);
+ const commits = versions.map(v => v.commit);
const setClampedTarget = newTarget => {
setTarget(Math.min(commits.length - 0.75, Math.max(-0.25, newTarget)));
if (newTarget >= commits.length - 5) {
@@ -140,7 +139,7 @@ function Slides({ commits, slideLines, loadMore }) {
onSwipedRight={prevSlide}
style={{ height: "100%" }}
>
-
+
);
diff --git a/src/scroller.js b/src/scroller.js
index 0b14a00..34c3f2c 100644
--- a/src/scroller.js
+++ b/src/scroller.js
@@ -74,7 +74,7 @@ export default function Scroller({
if (newTop === prevState.currentTop && !prevState.snap) {
return prevState;
}
- console.log("manual scroll", newTop);
+ // console.log("manual scroll", newTop);
return {
...prevState,
snap: false,
diff --git a/src/slide.js b/src/slide.js
index 46bde3d..d0d0ed9 100644
--- a/src/slide.js
+++ b/src/slide.js
@@ -72,39 +72,8 @@ function Slide({ lines, styles, changes }) {
);
}
-let lastLines = null;
-let lastChanges = null;
-function getChanges(lines) {
- if (lastLines === lines) {
- return lastChanges;
- }
-
- const changes = [];
- let currentChange = null;
- let i = 0;
- const isNewLine = i => !lines[i].left && lines[i].middle;
- while (i < lines.length) {
- if (isNewLine(i)) {
- if (!currentChange) {
- currentChange = { start: i };
- }
- } else {
- if (currentChange) {
- currentChange.end = i - 1;
- changes.push(currentChange);
- currentChange = null;
- }
- }
- i++;
- }
-
- lastLines = lines;
- console.log("changes", changes);
- return changes;
-}
-
-export default function SlideWrapper({ time, lines }) {
+export default function SlideWrapper({ time, version }) {
+ const { lines, changes } = version;
const styles = animation((time + 1) / 2, lines);
- const changes = React.useMemo(() => getChanges(lines), [lines]);
return ;
}