mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-09 15:05:44 +01:00
use header instead of content type
This commit is contained in:
@@ -15,6 +15,7 @@ type Props = {
|
|||||||
|
|
||||||
type State = {
|
type State = {
|
||||||
content: string,
|
content: string,
|
||||||
|
language: string,
|
||||||
error: Error,
|
error: Error,
|
||||||
hasError: boolean,
|
hasError: boolean,
|
||||||
loaded: boolean
|
loaded: boolean
|
||||||
@@ -26,6 +27,7 @@ class SourcecodeViewer extends React.Component<Props, State> {
|
|||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
content: "",
|
content: "",
|
||||||
|
language: "",
|
||||||
error: new Error(),
|
error: new Error(),
|
||||||
hasError: false,
|
hasError: false,
|
||||||
loaded: false
|
loaded: false
|
||||||
@@ -34,6 +36,22 @@ class SourcecodeViewer extends React.Component<Props, State> {
|
|||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const { file } = this.props;
|
const { file } = this.props;
|
||||||
|
getProgrammingLanguage(file._links.self.href)
|
||||||
|
.then(result => {
|
||||||
|
if (result.error) {
|
||||||
|
this.setState({
|
||||||
|
...this.state,
|
||||||
|
hasError: true,
|
||||||
|
error: result.error
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.setState({
|
||||||
|
...this.state,
|
||||||
|
language: result.language
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(err => {});
|
||||||
getContent(file._links.self.href)
|
getContent(file._links.self.href)
|
||||||
.then(result => {
|
.then(result => {
|
||||||
if (result.error) {
|
if (result.error) {
|
||||||
@@ -59,7 +77,7 @@ class SourcecodeViewer extends React.Component<Props, State> {
|
|||||||
const error = this.state.error;
|
const error = this.state.error;
|
||||||
const hasError = this.state.hasError;
|
const hasError = this.state.hasError;
|
||||||
const loaded = this.state.loaded;
|
const loaded = this.state.loaded;
|
||||||
const { contentType } = this.props;
|
const language = this.state.language;
|
||||||
|
|
||||||
if (hasError) {
|
if (hasError) {
|
||||||
return <ErrorNotification error={error} />;
|
return <ErrorNotification error={error} />;
|
||||||
@@ -76,7 +94,7 @@ class SourcecodeViewer extends React.Component<Props, State> {
|
|||||||
return (
|
return (
|
||||||
<SyntaxHighlighter
|
<SyntaxHighlighter
|
||||||
showLineNumbers="true"
|
showLineNumbers="true"
|
||||||
language={getLanguage(contentType)}
|
language={getLanguage(language)}
|
||||||
style={arduinoLight}
|
style={arduinoLight}
|
||||||
>
|
>
|
||||||
{content}
|
{content}
|
||||||
@@ -85,37 +103,27 @@ class SourcecodeViewer extends React.Component<Props, State> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getLanguage(contentType: string) {
|
export function getLanguage(language: string) {
|
||||||
const language = contentType.substring(
|
return language.toLowerCase();
|
||||||
contentType.indexOf("/") + 1,
|
}
|
||||||
contentType.length
|
|
||||||
);
|
|
||||||
|
|
||||||
let languageType;
|
export function getProgrammingLanguage(url: string) {
|
||||||
|
return apiClient
|
||||||
switch (language) {
|
.head(url)
|
||||||
case "x-go":
|
.then(response => {
|
||||||
languageType = "go";
|
return { language: response.headers.get("Language") };
|
||||||
break;
|
})
|
||||||
case "x-java-source":
|
.catch(err => {
|
||||||
languageType = "java";
|
return { error: err };
|
||||||
break;
|
});
|
||||||
case "x-web-markdown":
|
|
||||||
languageType = "markdown";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
languageType = language;
|
|
||||||
}
|
|
||||||
|
|
||||||
return languageType;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getContent(url: string) {
|
export function getContent(url: string) {
|
||||||
return apiClient
|
return apiClient
|
||||||
.get(url)
|
.get(url)
|
||||||
.then(response => response.text())
|
.then(response => response.text())
|
||||||
.then(content => {
|
.then(response => {
|
||||||
return content;
|
return response;
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
return { error: err };
|
return { error: err };
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
//@flow
|
//@flow
|
||||||
import fetchMock from "fetch-mock";
|
import fetchMock from "fetch-mock";
|
||||||
import { getContent, getLanguage } from "./SourcecodeViewer";
|
import {
|
||||||
|
getContent,
|
||||||
|
getLanguage,
|
||||||
|
getProgrammingLanguage
|
||||||
|
} from "./SourcecodeViewer";
|
||||||
|
|
||||||
describe("get content", () => {
|
describe("get content", () => {
|
||||||
const CONTENT_URL = "/repositories/scmadmin/TestRepo/content/testContent";
|
const CONTENT_URL = "/repositories/scmadmin/TestRepo/content/testContent";
|
||||||
@@ -18,22 +22,28 @@ describe("get content", () => {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should return language", done => {
|
||||||
|
let headers = {
|
||||||
|
Language: "JAVA"
|
||||||
|
};
|
||||||
|
|
||||||
|
fetchMock.head("/api/v2" + CONTENT_URL, {
|
||||||
|
headers
|
||||||
|
});
|
||||||
|
|
||||||
|
getProgrammingLanguage(CONTENT_URL).then(content => {
|
||||||
|
expect(content.language).toBe("JAVA");
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("get correct language type", () => {
|
describe("get correct language type", () => {
|
||||||
it("should return javascript", () => {
|
it("should return javascript", () => {
|
||||||
expect(getLanguage("application/javascript")).toBe("javascript");
|
expect(getLanguage("JAVASCRIPT")).toBe("javascript");
|
||||||
});
|
});
|
||||||
it("should return text", () => {
|
it("should return nothing for plain text", () => {
|
||||||
expect(getLanguage("text/plain")).toBe("plain");
|
expect(getLanguage("")).toBe("");
|
||||||
});
|
|
||||||
it("should return go", () => {
|
|
||||||
expect(getLanguage("text/x-go")).toBe("go");
|
|
||||||
});
|
|
||||||
it("should return java", () => {
|
|
||||||
expect(getLanguage("text/x-java-source")).toBe("java");
|
|
||||||
});
|
|
||||||
it("should return markdown", () => {
|
|
||||||
expect(getLanguage("text/x-web-markdown")).toBe("markdown");
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user