diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 69242e0e..d24f9f06 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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") diff --git a/app/src/main/assets/webview/colors_dark.css b/app/src/main/assets/webview/colors_dark.css new file mode 100644 index 00000000..abd4e73a --- /dev/null +++ b/app/src/main/assets/webview/colors_dark.css @@ -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; +} diff --git a/app/src/main/assets/webview/colors_light.css b/app/src/main/assets/webview/colors_light.css new file mode 100644 index 00000000..25eb8e44 --- /dev/null +++ b/app/src/main/assets/webview/colors_light.css @@ -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; +} diff --git a/app/src/main/assets/webview/markdown.css b/app/src/main/assets/webview/markdown.css new file mode 100644 index 00000000..c2f4b688 --- /dev/null +++ b/app/src/main/assets/webview/markdown.css @@ -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; +} diff --git a/app/src/main/assets/webview/syntax.css b/app/src/main/assets/webview/syntax.css new file mode 100644 index 00000000..72776665 --- /dev/null +++ b/app/src/main/assets/webview/syntax.css @@ -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; +} diff --git a/app/src/main/assets/webview/syntax_dark.css b/app/src/main/assets/webview/syntax_dark.css new file mode 100644 index 00000000..e7858b39 --- /dev/null +++ b/app/src/main/assets/webview/syntax_dark.css @@ -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; +} diff --git a/app/src/main/assets/webview/template.html b/app/src/main/assets/webview/template.html new file mode 100644 index 00000000..ea35654c --- /dev/null +++ b/app/src/main/assets/webview/template.html @@ -0,0 +1,14 @@ + + +
+ + + + + + + + +