Add markdown css (#775)
This commit is contained in:
parent
7254ed4d79
commit
aed23f65e8
|
|
@ -200,7 +200,6 @@ dependencies {
|
|||
implementation("androidx.navigation:navigation-ui:$navVersion")
|
||||
implementation("androidx.recyclerview:recyclerview:1.2.1")
|
||||
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
|
||||
implementation("androidx.webkit:webkit:1.4.0")
|
||||
implementation("com.caverock:androidsvg-aar:1.4")
|
||||
implementation("com.github.bumptech.glide:glide:$glideVersion")
|
||||
implementation("com.github.bumptech.glide:okhttp3-integration:$glideVersion")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,156 @@
|
|||
/* Primer Colors */
|
||||
/* Please also update colors_light.css with light mode appropriate colors when modifying this file. */
|
||||
|
||||
:root {
|
||||
--blue-900: #082a52;
|
||||
--blue-800: #063366;
|
||||
--blue-700: #0b498f;
|
||||
--blue-600: #0c65c9;
|
||||
--blue-500: #0d6edb;
|
||||
--blue-400: #2e8fff;
|
||||
--blue-300: #85beff;
|
||||
--blue-200: #d1e6ff;
|
||||
--blue-100: #e5f2ff;
|
||||
--blue-000: #f5faff;
|
||||
--gray-1000: #050505;
|
||||
--gray-950: #0b0b0d;
|
||||
--gray-900: #17181a;
|
||||
--gray-850: #242528;
|
||||
--gray-800: #2e2f37;
|
||||
--gray-750: #383a42;
|
||||
--gray-700: #41434e;
|
||||
--gray-650: #4b4d58;
|
||||
--gray-600: #525560;
|
||||
--gray-550: #5e616e;
|
||||
--gray-500: #6c6f7e;
|
||||
--gray-450: #787c8c;
|
||||
--gray-400: #9194a1;
|
||||
--gray-350: #a9abb6;
|
||||
--gray-300: #bfc1c9;
|
||||
--gray-250: #d6d7dc;
|
||||
--gray-200: #e3e4e8;
|
||||
--gray-150: #eff0f5;
|
||||
--gray-100: #f7f7f9;
|
||||
--gray-050: #fbfbfc;
|
||||
--gray-000: #ffffff;
|
||||
--green-900: #184d25;
|
||||
--green-800: #1b612b;
|
||||
--green-700: #1e7533;
|
||||
--green-600: #2b8f43;
|
||||
--green-500: #32b24f;
|
||||
--green-400: #40d663;
|
||||
--green-300: #95f0ab;
|
||||
--green-200: #cbf7d5;
|
||||
--green-100: #e5ffeb;
|
||||
--green-000: #f5fff8;
|
||||
--yellow-900: #755f13;
|
||||
--yellow-800: #b89007;
|
||||
--yellow-700: #e0b112;
|
||||
--yellow-600: #ffcb1a;
|
||||
--yellow-500: #ffd74d;
|
||||
--yellow-400: #ffe166;
|
||||
--yellow-300: #ffec8a;
|
||||
--yellow-200: #fff6b8;
|
||||
--yellow-100: #fffce5;
|
||||
--yellow-000: #fffef5;
|
||||
--orange-900: #a84603;
|
||||
--orange-800: #c75204;
|
||||
--orange-700: #d65c09;
|
||||
--orange-600: #eb680e;
|
||||
--orange-500: #fa6f0f;
|
||||
--orange-400: #ff8a38;
|
||||
--orange-300: #ffae75;
|
||||
--orange-200: #ffd5b2;
|
||||
--orange-100: #ffeee0;
|
||||
--orange-000: #fffaf5;
|
||||
--red-900: #8f1d22;
|
||||
--red-800: #a82229;
|
||||
--red-700: #bd222d;
|
||||
--red-600: #d62b38;
|
||||
--red-500: #e04352;
|
||||
--red-400: #f55363;
|
||||
--red-300: #ff808d;
|
||||
--red-200: #ffb2bb;
|
||||
--red-100: #ffe0e4;
|
||||
--red-000: #fff0f2;
|
||||
--pink-900: #702653;
|
||||
--pink-800: #9e3674;
|
||||
--pink-700: #c2428e;
|
||||
--pink-600: #d63c99;
|
||||
--pink-500: #f051b0;
|
||||
--pink-400: #f576c2;
|
||||
--pink-300: #fa9bd4;
|
||||
--pink-200: #ffbde4;
|
||||
--pink-100: #fee0f2;
|
||||
--pink-000: #fff0f9;
|
||||
--purple-900: #2e1757;
|
||||
--purple-800: #3f2175;
|
||||
--purple-700: #522e8f;
|
||||
--purple-600: #6139a8;
|
||||
--purple-500: #7548c7;
|
||||
--purple-400: #916bd6;
|
||||
--purple-300: #b899f0;
|
||||
--purple-200: #dac7ff;
|
||||
--purple-100: #eae0ff;
|
||||
--purple-000: #f6f2ff;
|
||||
--textPrimary: var(--gray-050);
|
||||
--textSecondary: var(--gray-300);
|
||||
--textTertiary: var(--gray-400);
|
||||
--textPlaceholder: rgba(145, 148, 161, 0.5);
|
||||
--link: var(--blue-400);
|
||||
--appBackground: var(--gray-1000);
|
||||
--backgroundSecondary: var(--gray-900);
|
||||
--backgroundTertiary: var(--gray-850);
|
||||
--border: rgba(191, 193, 201, 0.16);
|
||||
--borderOpaque: var(--gray-700);
|
||||
--iconPrimary: var(--gray-300);
|
||||
--iconSecondary: var(--gray-500);
|
||||
--inputBackground: rgba(191, 193, 201, 0.12);
|
||||
--backgroundPrimary: var(--gray-1000);
|
||||
--backgroundElevatedPrimary: var(--gray-900);
|
||||
--backgroundElevatedSecondary: rgba(191, 193, 201, 0.04);
|
||||
--backgroundElevatedTertiary: rgba(191, 193, 201, 0.08);
|
||||
--backgroundInset: var(--gray-900);
|
||||
--link-hover: var(--gray-800);
|
||||
--color-icon-success: var(--green-600);
|
||||
--color-text-danger: var(--red-600);
|
||||
--diffLineNumberAdditionBackground: #08260f;
|
||||
--diffLineNumberAdditionText: #95f0ab;
|
||||
--diffLineAdditionBackground: #061c0b;
|
||||
--diffLineNumberDeletionBackground: #3b0507;
|
||||
--diffLineNumberDeletionText: #ff808d;
|
||||
--diffLineDeletionBackground: #300406;
|
||||
--suggestedChangeDeletionText: #ffffff;
|
||||
--suggestedChangeAdditionText: #ffffff;
|
||||
--suggestedChangeDeletionBackground: rgba(218,54,51,0.6);
|
||||
--suggestedChangeAdditionBackground: rgba(46,160,67,0.6);
|
||||
--videoBackground: #000000;
|
||||
}
|
||||
|
||||
/* Custom Base Styles */
|
||||
|
||||
:root {
|
||||
--link-highlight: rgba(46, 143, 255, 0.08);
|
||||
--pre-background: var(--backgroundElevatedTertiary);
|
||||
--code-background: var(--pre-background);
|
||||
--hr-background: var(--borderOpaque);
|
||||
--thead-background: var(--pre-background);
|
||||
--thead-border: var(--hr-background);
|
||||
--tr-border: var(--gray-300);
|
||||
--tr-alt-background: var(--pre-background);
|
||||
--kbd-background: var(--pre-background);
|
||||
--kbd-color: var(--gray-350);
|
||||
--kbd-border: var(--gray-750);
|
||||
--blockquote-color: var(--gray-400);
|
||||
--blockquote-border: var(--hr-background);
|
||||
--heading-color: var(--gray-100);
|
||||
--h6-color: var(--gray-500);
|
||||
--frame-border: var(--hr-background);
|
||||
--frame-color: var(--gray-200);
|
||||
--mention-color: var(--textPrimary);
|
||||
--email-toggle-color: var(--kbd-color);
|
||||
--email-toggle-background: var(--blockquote-border);
|
||||
--email-quoted-color: var(--blockquote-color);
|
||||
--keyword-color: var(--gray-600);
|
||||
--code-font: ui-monospace, Menlo, monospace;
|
||||
}
|
||||
|
|
@ -0,0 +1,156 @@
|
|||
/* Primer Colors */
|
||||
/* Please also update colors_dark.css with dark mode appropriate colors when modifying this file. */
|
||||
|
||||
:root {
|
||||
--blue-900: #05264c;
|
||||
--blue-800: #032f62;
|
||||
--blue-700: #044289;
|
||||
--blue-600: #005cc5;
|
||||
--blue-500: #0366d6;
|
||||
--blue-400: #2188ff;
|
||||
--blue-300: #79b8ff;
|
||||
--blue-200: #c8e1ff;
|
||||
--blue-100: #dbedff;
|
||||
--blue-000: #f1f8ff;
|
||||
--gray-1000: #050505;
|
||||
--gray-950: #0b0b0d;
|
||||
--gray-900: #17181a;
|
||||
--gray-850: #242528;
|
||||
--gray-800: #2f3037;
|
||||
--gray-750: #383a42;
|
||||
--gray-700: #41434e;
|
||||
--gray-650: #4b4d58;
|
||||
--gray-600: #525560;
|
||||
--gray-550: #5e616e;
|
||||
--gray-500: #6a6d7c;
|
||||
--gray-450: #787c8c;
|
||||
--gray-400: #9194a1;
|
||||
--gray-350: #a9abb6;
|
||||
--gray-300: #bfc1c9;
|
||||
--gray-250: #d6d7dc;
|
||||
--gray-200: #e3e4e8;
|
||||
--gray-150: #eff0f5;
|
||||
--gray-100: #f7f7f9;
|
||||
--gray-050: #fbfbfc;
|
||||
--gray-000: #ffffff;
|
||||
--green-900: #144620;
|
||||
--green-800: #165c26;
|
||||
--green-700: #176f2c;
|
||||
--green-600: #22863a;
|
||||
--green-500: #28a745;
|
||||
--green-400: #34d058;
|
||||
--green-300: #85e89d;
|
||||
--green-200: #bef5cb;
|
||||
--green-100: #dcffe4;
|
||||
--green-000: #f0fff4;
|
||||
--yellow-900: #735c0f;
|
||||
--yellow-800: #b08800;
|
||||
--yellow-700: #dbab09;
|
||||
--yellow-600: #f9c513;
|
||||
--yellow-500: #ffd33d;
|
||||
--yellow-400: #ffdf5d;
|
||||
--yellow-300: #ffea7f;
|
||||
--yellow-200: #fff5b1;
|
||||
--yellow-100: #fffbdd;
|
||||
--yellow-000: #fffdef;
|
||||
--orange-900: #a04100;
|
||||
--orange-800: #c24e00;
|
||||
--orange-700: #d15704;
|
||||
--orange-600: #e36209;
|
||||
--orange-500: #f66a0a;
|
||||
--orange-400: #fb8532;
|
||||
--orange-300: #ffab70;
|
||||
--orange-200: #ffd1ac;
|
||||
--orange-100: #ffebda;
|
||||
--orange-000: #fff8f2;
|
||||
--red-900: #86181d;
|
||||
--red-800: #9e1c23;
|
||||
--red-700: #b31d28;
|
||||
--red-600: #cb2431;
|
||||
--red-500: #d73a49;
|
||||
--red-400: #ea4a5a;
|
||||
--red-300: #f97583;
|
||||
--red-200: #fdaeb7;
|
||||
--red-100: #ffdce0;
|
||||
--red-000: #ffeef0;
|
||||
--pink-900: #6d224f;
|
||||
--pink-800: #99306f;
|
||||
--pink-700: #b93a86;
|
||||
--pink-600: #d03592;
|
||||
--pink-500: #ea4aaa;
|
||||
--pink-400: #ec6cb9;
|
||||
--pink-300: #f692ce;
|
||||
--pink-200: #f9b3dd;
|
||||
--pink-100: #fedbf0;
|
||||
--pink-000: #ffeef8;
|
||||
--purple-900: #29134e;
|
||||
--purple-800: #3a1d6e;
|
||||
--purple-700: #4c2888;
|
||||
--purple-600: #5a32a3;
|
||||
--purple-500: #6f42c1;
|
||||
--purple-400: #8a63d2;
|
||||
--purple-300: #b392f0;
|
||||
--purple-200: #d1bcf9;
|
||||
--purple-100: #e6dcfd;
|
||||
--purple-000: #f5f0ff;
|
||||
--textPrimary: var(--gray-1000);
|
||||
--textSecondary: var(--gray-700);
|
||||
--textTertiary: var(--gray-500);
|
||||
--textPlaceholder: rgba(82, 85, 96, 0.5);
|
||||
--link: var(--blue-500);
|
||||
--appBackground: var(--gray-000);
|
||||
--backgroundSecondary: var(--gray-000);
|
||||
--backgroundTertiary: var(--gray-000);
|
||||
--border: rgba(65, 67, 78, 0.25);
|
||||
--borderOpaque: var(--gray-300);
|
||||
--iconPrimary: var(--gray-600);
|
||||
--iconSecondary: var(--gray-400);
|
||||
--inputBackground: rgba(65, 67, 78, 0.12);
|
||||
--backgroundPrimary: var(--gray-150);
|
||||
--backgroundElevatedPrimary: var(--gray-150);
|
||||
--backgroundElevatedSecondary: var(--gray-000);
|
||||
--backgroundElevatedTertiary: var(--gray-000);
|
||||
--backgroundInset: var(--gray-200);
|
||||
--link-hover: var(--gray-200);
|
||||
--color-icon-success: var(--green-600);
|
||||
--color-text-danger: var(--red-600);
|
||||
--diffLineNumberAdditionBackground: #dcffe4;
|
||||
--diffLineNumberAdditionText: #22863a;
|
||||
--diffLineAdditionBackground: #f0fff4;
|
||||
--diffLineNumberDeletionBackground: #ffdce0;
|
||||
--diffLineNumberDeletionText: #cb2431;
|
||||
--diffLineDeletionBackground: #ffeef0;
|
||||
--suggestedChangeDeletionText: #ffffff;
|
||||
--suggestedChangeAdditionText: #ffffff;
|
||||
--suggestedChangeDeletionBackground: rgba(218,54,51,0.6);
|
||||
--suggestedChangeAdditionBackground: rgba(46,160,67,0.6);
|
||||
--videoBackground: #000000;
|
||||
}
|
||||
|
||||
/* Custom Base Styles */
|
||||
|
||||
:root {
|
||||
--link-highlight: rgba(3, 102, 214, 0.08);
|
||||
--pre-background: var(--gray-100);
|
||||
--code-background: var(--pre-background);
|
||||
--hr-background: var(--gray-200);
|
||||
--thead-background: var(--pre-background);
|
||||
--thead-border: var(--hr-background);
|
||||
--tr-border: var(--gray-300);
|
||||
--tr-alt-background: var(--pre-background);
|
||||
--kbd-background: var(--pre-background);
|
||||
--kbd-color: var(--gray-650);
|
||||
--kbd-border: var(--gray-250);
|
||||
--blockquote-color: var(--gray-500);
|
||||
--blockquote-border: var(--hr-background);
|
||||
--heading-color: var(--gray-900);
|
||||
--h6-color: var(--gray-500);
|
||||
--frame-border: var(--hr-background);
|
||||
--frame-color: var(--gray-850);
|
||||
--mention-color: var(--gray-850);
|
||||
--email-toggle-color: var(--kbd-color);
|
||||
--email-toggle-background: var(--blockquote-border);
|
||||
--email-quoted-color: var(--blockquote-color);
|
||||
--keyword-color: var(--gray-400);
|
||||
--code-font: ui-monospace, Menlo, monospace;
|
||||
}
|
||||
|
|
@ -0,0 +1,587 @@
|
|||
/* Shared styles between light & dark mode so all colors should be variables */
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
input:disabled {
|
||||
touch-action: none;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-text-size-adjust: none;
|
||||
text-size-adjust: none;
|
||||
font: -apple-system-body;
|
||||
}
|
||||
|
||||
body {
|
||||
color: var(--textPrimary);
|
||||
background-color: var(--background);
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--link);
|
||||
text-decoration: none;
|
||||
-webkit-tap-highlight-color: var(--link-highlight);
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
a:not([target]):hover {
|
||||
border-radius: 5px;
|
||||
background-color: var(--link-hover);
|
||||
transition-duration: 0.2s;
|
||||
transform: scale(1.015);
|
||||
}
|
||||
|
||||
/*
|
||||
Web views hold on to their hover event if the app is backgrounded. We need to disable custom hover effects by setting a
|
||||
class on body and overriding them in CSS when we apply this workaround. When the mouse enters the web view again, we
|
||||
can disable our override.
|
||||
*/
|
||||
body.hover-override a:not([target]) {
|
||||
background-color: transparent;
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
details summary {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
table {
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
table, table *, pre {
|
||||
touch-action: pan-x;
|
||||
}
|
||||
|
||||
.markdown-body ul.contains-task-list {
|
||||
list-style: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.task-list-item {
|
||||
padding-left: 40px;
|
||||
margin-left: -16px;
|
||||
}
|
||||
|
||||
.task-list-item-checkbox {
|
||||
margin-left: -24px
|
||||
}
|
||||
|
||||
pre, code, kbd {
|
||||
font-size: 1em;
|
||||
font-family: var(--code-font);
|
||||
}
|
||||
|
||||
.issue-keyword {
|
||||
border-bottom: 1px dotted var(--keyword-color);
|
||||
}
|
||||
|
||||
.team-mention, .user-mention {
|
||||
font-weight: 600;
|
||||
color: var(--mention-color);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.email-hidden-toggle, .email-hidden-reply {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Fix checkboxes looking cut off when they render larger than the default size */
|
||||
input[type="checkbox"] {
|
||||
transform: translate(0px);
|
||||
}
|
||||
|
||||
/* --- */
|
||||
|
||||
.markdown-body {
|
||||
font-size: inherit;
|
||||
line-height: 1.5;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.markdown-body kbd {
|
||||
display: inline-block;
|
||||
padding: 0.18em 0.31em;
|
||||
font-size: 0.7em;
|
||||
line-height: 1.2em;
|
||||
color: var(--kbd-color);
|
||||
vertical-align: middle;
|
||||
background-color: var(--kbd-background);
|
||||
border: 1px solid var(--kbd-border);
|
||||
border-radius: 0.25em;
|
||||
box-shadow: inset 0 -1px 0 var(--kbd-border);
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
.markdown-body:after, .markdown-body:before {
|
||||
display: table;
|
||||
content: ""
|
||||
}
|
||||
|
||||
.markdown-body:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown-body > :first-child {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
.markdown-body > :last-child {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.markdown-body a:not([href]) {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.markdown-body .absent {
|
||||
color: var(--red-600);
|
||||
}
|
||||
|
||||
.markdown-body .anchor {
|
||||
float: left;
|
||||
padding-right: 4px;
|
||||
margin-left: -20px;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.markdown-body .anchor:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.markdown-body blockquote, .markdown-body details, .markdown-body dl, .markdown-body ol, .markdown-body p, .markdown-body pre, .markdown-body table, .markdown-body ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.markdown-body hr {
|
||||
height: .25em;
|
||||
padding: 0;
|
||||
margin: 24px 0;
|
||||
background-color: var(--hr-background);
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.markdown-body blockquote {
|
||||
padding-left: 1em;
|
||||
color: var(--blockquote-color);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.markdown-body blockquote::before {
|
||||
content: '';
|
||||
width: 2px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
background-color: var(--blockquote-border);
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.markdown-body blockquote > :first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.markdown-body blockquote > :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 {
|
||||
margin-top: 24px;
|
||||
margin-bottom: 16px;
|
||||
font-weight: 600;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link {
|
||||
color: var(--heading-color);
|
||||
vertical-align: middle;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.markdown-body h1:hover .anchor, .markdown-body h2:hover .anchor, .markdown-body h3:hover .anchor, .markdown-body h4:hover .anchor, .markdown-body h5:hover .anchor, .markdown-body h6:hover .anchor {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.markdown-body h1:hover .anchor .octicon-link, .markdown-body h2:hover .anchor .octicon-link, .markdown-body h3:hover .anchor .octicon-link, .markdown-body h4:hover .anchor .octicon-link, .markdown-body h5:hover .anchor .octicon-link, .markdown-body h6:hover .anchor .octicon-link {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.markdown-body h1 code, .markdown-body h1 tt, .markdown-body h2 code, .markdown-body h2 tt, .markdown-body h3 code, .markdown-body h3 tt, .markdown-body h4 code, .markdown-body h4 tt, .markdown-body h5 code, .markdown-body h5 tt, .markdown-body h6 code, .markdown-body h6 tt {
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
.markdown-body h1 {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.markdown-body h1, .markdown-body h2 {
|
||||
padding-bottom: .3em;
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.markdown-body h2 {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.markdown-body h3 {
|
||||
font-size: 1.25em;
|
||||
}
|
||||
|
||||
.markdown-body h4 {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.markdown-body h5 {
|
||||
font-size: .875em;
|
||||
}
|
||||
|
||||
.markdown-body h6 {
|
||||
font-size: .85em;
|
||||
color: var(--h6-color);
|
||||
}
|
||||
|
||||
.markdown-body ul {
|
||||
padding-left: 1.5em;
|
||||
}
|
||||
|
||||
.markdown-body ol.no-list, .markdown-body ul.no-list {
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.markdown-body ol ol, .markdown-body ol ul, .markdown-body ul ol, .markdown-body ul ul {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.markdown-body li {
|
||||
word-wrap: break-all;
|
||||
}
|
||||
|
||||
.markdown-body li > p {
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.markdown-body li + li {
|
||||
margin-top: .25em;
|
||||
}
|
||||
|
||||
.markdown-body dl {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.markdown-body dl dt {
|
||||
padding: 0;
|
||||
margin-top: 16px;
|
||||
font-size: 1em;
|
||||
font-style: italic;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown-body dl dd {
|
||||
padding: 0 16px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.markdown-body table {
|
||||
display: block;
|
||||
width: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.markdown-body table th {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown-body table td, .markdown-body table th {
|
||||
padding: 6px 13px;
|
||||
border: 1px solid var(--thead-border);
|
||||
}
|
||||
|
||||
.markdown-body table tr {
|
||||
background-color: var(--background);
|
||||
border-top: 1px solid var(--tr-border);
|
||||
}
|
||||
|
||||
.markdown-body table tr:nth-child(2n) {
|
||||
background-color: var(--tr-alt-background);
|
||||
}
|
||||
|
||||
.markdown-body table img {
|
||||
background-color: initial;
|
||||
}
|
||||
|
||||
.markdown-body img {
|
||||
max-width: 100%;
|
||||
box-sizing: initial;
|
||||
background-color: var(--background);
|
||||
}
|
||||
|
||||
.markdown-body img[align=right] {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.markdown-body img[align=left] {
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
.markdown-body video {
|
||||
max-width: 100%;
|
||||
box-sizing: initial;
|
||||
background-color: var(--videoBackground);
|
||||
}
|
||||
|
||||
.markdown-body .emoji {
|
||||
max-width: none;
|
||||
vertical-align: text-top;
|
||||
background-color: initial;
|
||||
}
|
||||
|
||||
.markdown-body span.frame {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.markdown-body span.frame > span {
|
||||
display: block;
|
||||
float: left;
|
||||
width: auto;
|
||||
padding: 7px;
|
||||
margin: 13px 0 0;
|
||||
overflow: hidden;
|
||||
border: 1px solid var(--frame-border);
|
||||
}
|
||||
|
||||
.markdown-body span.frame span img {
|
||||
display: block;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.markdown-body span.frame span span {
|
||||
display: block;
|
||||
padding: 5px 0 0;
|
||||
clear: both;
|
||||
color: var(--frame-color);
|
||||
}
|
||||
|
||||
.markdown-body span.align-center {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown-body span.align-center > span {
|
||||
display: block;
|
||||
margin: 13px auto 0;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.markdown-body span.align-center span img {
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.markdown-body span.align-right {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown-body span.align-right > span {
|
||||
display: block;
|
||||
margin: 13px 0 0;
|
||||
overflow: hidden;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.markdown-body span.align-right span img {
|
||||
margin: 0;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.markdown-body span.float-left {
|
||||
display: block;
|
||||
float: left;
|
||||
margin-right: 13px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.markdown-body span.float-left span {
|
||||
margin: 13px 0 0;
|
||||
}
|
||||
|
||||
.markdown-body span.float-right {
|
||||
display: block;
|
||||
float: right;
|
||||
margin-left: 13px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.markdown-body span.float-right > span {
|
||||
display: block;
|
||||
margin: 13px auto 0;
|
||||
overflow: hidden;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.markdown-body code, .markdown-body tt {
|
||||
padding: .2em .4em;
|
||||
margin: 0;
|
||||
font-size: 85%;
|
||||
background-color: var(--code-background);
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.markdown-body code br, .markdown-body tt br {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.markdown-body del code {
|
||||
text-decoration: inherit;
|
||||
}
|
||||
|
||||
.markdown-body pre {
|
||||
word-wrap: normal;
|
||||
}
|
||||
|
||||
.markdown-body pre > code {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-size: 100%;
|
||||
word-break: normal;
|
||||
white-space: pre;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.markdown-body .highlight {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.markdown-body .highlight pre {
|
||||
margin-bottom: 0;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
.markdown-body .highlight pre, .markdown-body pre {
|
||||
padding: 16px;
|
||||
overflow: auto;
|
||||
font-size: 85%;
|
||||
line-height: 1.45;
|
||||
background-color: var(--pre-background);
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.markdown-body pre code, .markdown-body pre tt {
|
||||
display: inline;
|
||||
max-width: auto;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow: visible;
|
||||
line-height: inherit;
|
||||
word-wrap: normal;
|
||||
background-color: initial;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.markdown-body .csv-data td, .markdown-body .csv-data th {
|
||||
padding: 5px;
|
||||
overflow: hidden;
|
||||
font-size: 12px;
|
||||
line-height: 1;
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.markdown-body .csv-data .blob-num {
|
||||
padding: 10px 8px 9px;
|
||||
text-align: right;
|
||||
background: var(--background);
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.markdown-body .csv-data tr {
|
||||
border-top: 0;
|
||||
}
|
||||
|
||||
.markdown-body .csv-data th {
|
||||
font-weight: 600;
|
||||
background: var(--thead-background);
|
||||
border-top: 0;
|
||||
}
|
||||
|
||||
.open.octicon, .draft.octicon, .closed.octicon, .merged.octicon, .color-text-secondary.octicon {
|
||||
display: inline-block;
|
||||
margin-top: 0.15em;
|
||||
vertical-align: text-top;
|
||||
fill: currentColor;
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
font: -apple-system-body;
|
||||
}
|
||||
|
||||
.open.octicon {
|
||||
color: var(--color-icon-success);
|
||||
}
|
||||
|
||||
.draft.octicon {
|
||||
color: var(--textTertiary);
|
||||
}
|
||||
|
||||
.closed.octicon {
|
||||
color: var(--color-text-danger);
|
||||
}
|
||||
|
||||
.merged.octicon {
|
||||
color: var(--purple-500);
|
||||
}
|
||||
|
||||
.color-text-secondary.octicon {
|
||||
color: var(--textSecondary);
|
||||
}
|
||||
|
||||
.reference {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.issue-link {
|
||||
font-weight: 600;
|
||||
color: var(--mention-color);
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.issue-shorthand {
|
||||
font-weight: 400;
|
||||
color: var(--textTertiary);
|
||||
}
|
||||
|
||||
.mr-1 {
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.ml-1 {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.d-inline-block {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.v-align-middle {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.Box {
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
/* From https://github.com/primer/github-syntax-light/blob/master/lib/github-light.css */
|
||||
.pl-c /* comment, punctuation.definition.comment, string.comment */ {
|
||||
color: #6a737d;
|
||||
}
|
||||
|
||||
.pl-c1 /* constant, entity.name.constant, variable.other.constant, variable.language, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header, meta.output */,
|
||||
.pl-s .pl-v /* string variable */ {
|
||||
color: #005cc5;
|
||||
}
|
||||
|
||||
.pl-e /* entity */,
|
||||
.pl-en /* entity.name */ {
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.pl-smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */,
|
||||
.pl-s .pl-s1 /* string source */ {
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.pl-ent /* entity.name.tag, markup.quote */ {
|
||||
color: #22863a;
|
||||
}
|
||||
|
||||
.pl-k /* keyword, storage, storage.type */ {
|
||||
color: #d73a49;
|
||||
}
|
||||
|
||||
.pl-s /* string */,
|
||||
.pl-pds /* punctuation.definition.string, source.regexp, string.regexp.character-class */,
|
||||
.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
|
||||
.pl-sr /* string.regexp */,
|
||||
.pl-sr .pl-cce /* string.regexp constant.character.escape */,
|
||||
.pl-sr .pl-sre /* string.regexp source.ruby.embedded */,
|
||||
.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */ {
|
||||
color: #032f62;
|
||||
}
|
||||
|
||||
.pl-v /* variable */,
|
||||
.pl-smw /* sublimelinter.mark.warning */ {
|
||||
color: #e36209;
|
||||
}
|
||||
|
||||
.pl-bu /* invalid.broken, invalid.deprecated, invalid.unimplemented, message.error, brackethighlighter.unmatched, sublimelinter.mark.error */ {
|
||||
color: #b31d28;
|
||||
}
|
||||
|
||||
.pl-ii /* invalid.illegal */ {
|
||||
color: #fafbfc;
|
||||
background-color: #b31d28;
|
||||
}
|
||||
|
||||
.pl-c2 /* carriage-return */ {
|
||||
color: #fafbfc;
|
||||
background-color: #d73a49;
|
||||
}
|
||||
|
||||
.pl-c2::before /* carriage-return */ {
|
||||
content: "^M";
|
||||
}
|
||||
|
||||
.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
|
||||
font-weight: bold;
|
||||
color: #22863a;
|
||||
}
|
||||
|
||||
.pl-ml /* markup.list */ {
|
||||
color: #735c0f;
|
||||
}
|
||||
|
||||
.pl-mh /* markup.heading */,
|
||||
.pl-mh .pl-en /* markup.heading entity.name */,
|
||||
.pl-ms /* meta.separator */ {
|
||||
font-weight: bold;
|
||||
color: #005cc5;
|
||||
}
|
||||
|
||||
.pl-mi /* markup.italic */ {
|
||||
font-style: italic;
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.pl-mb /* markup.bold */ {
|
||||
font-weight: bold;
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.pl-md /* markup.deleted, meta.diff.header.from-file, punctuation.definition.deleted */ {
|
||||
color: #b31d28;
|
||||
background-color: #ffeef0;
|
||||
}
|
||||
|
||||
.pl-mi1 /* markup.inserted, meta.diff.header.to-file, punctuation.definition.inserted */ {
|
||||
color: #22863a;
|
||||
background-color: #f0fff4;
|
||||
}
|
||||
|
||||
.pl-mc /* markup.changed, punctuation.definition.changed */ {
|
||||
color: #e36209;
|
||||
background-color: #ffebda;
|
||||
}
|
||||
|
||||
.pl-mi2 /* markup.ignored, markup.untracked */ {
|
||||
color: #f6f8fa;
|
||||
background-color: #005cc5;
|
||||
}
|
||||
|
||||
.pl-mdr /* meta.diff.range */ {
|
||||
font-weight: bold;
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.pl-ba /* brackethighlighter.tag, brackethighlighter.curly, brackethighlighter.round, brackethighlighter.square, brackethighlighter.angle, brackethighlighter.quote */ {
|
||||
color: #586069;
|
||||
}
|
||||
|
||||
.pl-sg /* sublimelinter.gutter-mark */ {
|
||||
color: #959da5;
|
||||
}
|
||||
|
||||
.pl-corl /* constant.other.reference.link, string.other.link */ {
|
||||
text-decoration: underline;
|
||||
color: #032f62;
|
||||
}
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
/* From https://github.com/primer/github-syntax-dark/blob/master/lib/github-dark.css */
|
||||
.pl-c /* comment, punctuation.definition.comment, string.comment */ {
|
||||
color: #959da5;
|
||||
}
|
||||
|
||||
.pl-c1 /* constant, entity.name.constant, variable.other.constant, variable.language, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.quote, markup.raw, meta.diff.header */,
|
||||
.pl-s .pl-v /* string variable */ {
|
||||
color: #c8e1ff;
|
||||
}
|
||||
|
||||
.pl-e /* entity */,
|
||||
.pl-en /* entity.name */ {
|
||||
color: #b392f0;
|
||||
}
|
||||
|
||||
.pl-smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */,
|
||||
.pl-s .pl-s1 /* string source */ {
|
||||
color: #f6f8fa;
|
||||
}
|
||||
|
||||
.pl-ent /* entity.name.tag */ {
|
||||
color: #7bcc72;
|
||||
}
|
||||
|
||||
.pl-k /* keyword, storage, storage.type */ {
|
||||
color: #ea4a5a;
|
||||
}
|
||||
|
||||
.pl-s /* string */,
|
||||
.pl-pds /* punctuation.definition.string, source.regexp, string.regexp.character-class */,
|
||||
.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
|
||||
.pl-sr /* string.regexp */,
|
||||
.pl-sr .pl-cce /* string.regexp constant.character.escape */,
|
||||
.pl-sr .pl-sre /* string.regexp source.ruby.embedded */,
|
||||
.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */ {
|
||||
color: #79b8ff;
|
||||
}
|
||||
|
||||
.pl-v /* variable */,
|
||||
.pl-ml /* markup.list, sublimelinter.mark.warning */ {
|
||||
color: #fb8532;
|
||||
}
|
||||
|
||||
.pl-bu /* invalid.broken, invalid.deprecated, invalid.unimplemented, message.error, brackethighlighter.unmatched, sublimelinter.mark.error */ {
|
||||
color: #d73a49;
|
||||
}
|
||||
|
||||
.pl-ii /* invalid.illegal */ {
|
||||
color: #fafbfc;
|
||||
background-color: #d73a49;
|
||||
}
|
||||
|
||||
.pl-c2 /* carriage-return */ {
|
||||
color: #fafbfc;
|
||||
background-color: #d73a49;
|
||||
}
|
||||
|
||||
.pl-c2::before /* carriage-return */ {
|
||||
content: "^M";
|
||||
}
|
||||
|
||||
.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
|
||||
font-weight: bold;
|
||||
color: #7bcc72;
|
||||
}
|
||||
|
||||
.pl-mh /* markup.heading */,
|
||||
.pl-mh .pl-en /* markup.heading entity.name */,
|
||||
.pl-ms /* meta.separator */ {
|
||||
font-weight: bold;
|
||||
color: #0366d6;
|
||||
}
|
||||
|
||||
.pl-mi /* markup.italic */ {
|
||||
font-style: italic;
|
||||
color: #f6f8fa;
|
||||
}
|
||||
|
||||
.pl-mb /* markup.bold */ {
|
||||
font-weight: bold;
|
||||
color: #f6f8fa;
|
||||
}
|
||||
|
||||
.pl-md /* markup.deleted, meta.diff.header.from-file, punctuation.definition.deleted */ {
|
||||
color: #ffdcd7;
|
||||
background-color: #67060c;
|
||||
}
|
||||
|
||||
.pl-mi1 /* markup.inserted, meta.diff.header.to-file, punctuation.definition.inserted */ {
|
||||
color: #aff5b4;
|
||||
background-color: #033a16;
|
||||
}
|
||||
|
||||
.pl-mc /* markup.changed, punctuation.definition.changed */ {
|
||||
color: #b08800;
|
||||
background-color: #fffdef;
|
||||
}
|
||||
|
||||
.pl-mi2 /* markup.ignored, markup.untracked */ {
|
||||
color: #2f363d;
|
||||
background-color: #959da5;
|
||||
}
|
||||
|
||||
.pl-mdr /* meta.diff.range */ {
|
||||
font-weight: bold;
|
||||
color: #b392f0;
|
||||
}
|
||||
|
||||
.pl-mo /* meta.output */ {
|
||||
color: #0366d6;
|
||||
}
|
||||
|
||||
.pl-ba /* brackethighlighter.tag, brackethighlighter.curly, brackethighlighter.round, brackethighlighter.square, brackethighlighter.angle, brackethighlighter.quote */ {
|
||||
color: #ffeef0;
|
||||
}
|
||||
|
||||
.pl-sg /* sublimelinter.gutter-mark */ {
|
||||
color: #6a737d;
|
||||
}
|
||||
|
||||
.pl-corl /* constant.other.reference.link, string.other.link */ {
|
||||
text-decoration: underline;
|
||||
color: #79b8ff;
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||
<meta name="HandheldFriendly" content="true">
|
||||
<link rel="stylesheet" type="text/css" href="file:///android_asset/webview/colors_light.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="file:///android_asset/webview/markdown.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="file:///android_asset/webview/syntax.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<main id="content" class="markdown-body">@body@</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||
<meta name="HandheldFriendly" content="true">
|
||||
<link rel="stylesheet" type="text/css" href="file:///android_asset/webview/colors_dark.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="file:///android_asset/webview/markdown.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="file:///android_asset/webview/syntax_dark.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<main id="content" class="markdown-body">@body@</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -27,6 +27,7 @@ import android.text.Spannable;
|
|||
import android.text.SpannableStringBuilder;
|
||||
import android.text.TextUtils;
|
||||
import android.text.style.ClickableSpan;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
|
@ -43,15 +44,12 @@ import androidx.appcompat.app.AlertDialog;
|
|||
import androidx.lifecycle.Lifecycle;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.viewpager2.widget.ViewPager2;
|
||||
import androidx.webkit.WebSettingsCompat;
|
||||
import androidx.webkit.WebViewFeature;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.progressindicator.CircularProgressIndicator;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
import com.google.android.material.tabs.TabLayoutMediator;
|
||||
|
||||
import org.json.JSONObject;
|
||||
import org.lsposed.manager.App;
|
||||
import org.lsposed.manager.R;
|
||||
import org.lsposed.manager.databinding.FragmentPagerBinding;
|
||||
|
|
@ -70,6 +68,9 @@ import org.lsposed.manager.util.LinearLayoutManagerFix;
|
|||
import org.lsposed.manager.util.NavUtil;
|
||||
import org.lsposed.manager.util.chrome.CustomTabsURLSpan;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
|
|
@ -80,10 +81,27 @@ import rikka.widget.borderview.BorderRecyclerView;
|
|||
import rikka.widget.borderview.BorderView;
|
||||
|
||||
public class RepoItemFragment extends BaseFragment implements RepoLoader.Listener {
|
||||
private static final String HTML_TEMPLATE = readWebviewHTML("template.html");
|
||||
private static final String HTML_TEMPLATE_DARK = readWebviewHTML("template_dark.html");
|
||||
FragmentPagerBinding binding;
|
||||
private OnlineModule module;
|
||||
private ReleaseAdapter releaseAdapter;
|
||||
|
||||
private static String readWebviewHTML(String name) {
|
||||
try {
|
||||
var input = App.getInstance().getAssets().open("webview/" + name);
|
||||
var result = new ByteArrayOutputStream(1024);
|
||||
var buffer = new byte[1024];
|
||||
for (int length; (length = input.read(buffer)) != -1; ) {
|
||||
result.write(buffer, 0, length);
|
||||
}
|
||||
return result.toString(StandardCharsets.UTF_8.name());
|
||||
} catch (IOException e) {
|
||||
Log.e(App.TAG, "read webview HTML", e);
|
||||
return "<html><body>@body@</body></html>";
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
|
|
@ -126,26 +144,26 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.Listene
|
|||
|
||||
private void renderGithubMarkdown(WebView view, String text) {
|
||||
try {
|
||||
var json = new JSONObject();
|
||||
json.put("text", text);
|
||||
view.setBackgroundColor(Color.TRANSPARENT);
|
||||
var setting = view.getSettings();
|
||||
setting.setOffscreenPreRaster(true);
|
||||
setting.setDomStorageEnabled(true);
|
||||
setting.setAppCacheEnabled(true);
|
||||
setting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
|
||||
setting.setAllowContentAccess(false);
|
||||
setting.setAllowFileAccessFromFileURLs(true);
|
||||
setting.setAllowFileAccess(false);
|
||||
setting.setGeolocationEnabled(false);
|
||||
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
|
||||
int nightModeFlags = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
|
||||
if (nightModeFlags == Configuration.UI_MODE_NIGHT_YES) {
|
||||
WebSettingsCompat.setForceDark(setting, WebSettingsCompat.FORCE_DARK_ON);
|
||||
}
|
||||
}
|
||||
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK_STRATEGY)) {
|
||||
WebSettingsCompat.setForceDarkStrategy(setting, WebSettingsCompat.DARK_STRATEGY_PREFER_WEB_THEME_OVER_USER_AGENT_DARKENING);
|
||||
}
|
||||
setting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
|
||||
String body;
|
||||
int nightModeFlags = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
|
||||
if (nightModeFlags == Configuration.UI_MODE_NIGHT_YES) {
|
||||
body = HTML_TEMPLATE_DARK.replace("@body@", text);
|
||||
} else {
|
||||
body = HTML_TEMPLATE.replace("@body@", text);
|
||||
}
|
||||
body = body.replace("src=\"/", "src=\"/Xposed-Modules-Repo/" + module.getName() + "/raw/main/")
|
||||
.replace("href=\"/", "href=\"/Xposed-Modules-Repo/" + module.getName() + "/blob/main/");
|
||||
view.setWebViewClient(new WebViewClient() {
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
|
||||
|
|
@ -154,10 +172,10 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.Listene
|
|||
return true;
|
||||
}
|
||||
});
|
||||
view.loadDataWithBaseURL(null, "<html><head><style>body{overflow-wrap: anywhere;font-size: 3vw;}code{word-break: break-all;}</style></head><body>" + text + "</body></html>",
|
||||
"text/html; charset=utf-8", "utf-8", null);
|
||||
view.loadDataWithBaseURL("https://github.com", body, "text/html",
|
||||
StandardCharsets.UTF_8.name(), null);
|
||||
} catch (Throwable e) {
|
||||
android.util.Log.e(App.TAG, "render readme", e);
|
||||
Log.e(App.TAG, "render readme", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue