+
@@ -59,92 +55,20 @@ DIFF_STYLE_TOGGLE = r'''
'''
MAIN_CSS = r'''
-
-@media (prefers-color-scheme: light) {
- html {
- --c-bg-primary: #ffffff;
- --c-fg-primary: #000000;
- --c-bg-auxiliary: #f8f8f8;
- --c-fg-auxiliary: #a0a0a0;
- --c-border-line: #e0e0e0;
- --c-bg-insert: #ecfdf0;
- --c-bg-delete: #fbe9eb;
- --c-bg-delete-lineno: #f9d7dc;
- --c-fg-delete-lineno: #ae969a;
- --c-bg-delete-word: #fac5cd;
- --c-fg-delete-word: #400000;
- --c-fg-insert-word: #004000;
- --c-bg-insert-word: #c7f0d2;
- --c-fg-insert-lineno: #9bb0a1;
- --c-bg-insert-lineno: #ddfbe6;
- --c-bg-empty: #f0f0f0;
- --c-fg-foldline: #bbbbbb;
- --c-border-delete: #e0c8c8; /* pick a darker border color inside the light red gutter */
- }
-}
-
-@media (prefers-color-scheme: dark) {
- html {
- --c-bg-primary: #010409;
- --c-fg-primary: #a0a0a0;
- --c-bg-auxiliary: #0d1117;
- --c-fg-auxiliary: #f0f6fc;
- --c-fg-foldline: #bbbbbb;
- --c-border-line: #3d444d;
- --c-bg-insert: #223738;
- --c-bg-delete: #280d1f;
- --c-bg-delete-lineno: #421632;
- --c-fg-delete-lineno: #ae969a;
- --c-bg-delete-word: #421632;
- --c-fg-delete-word: #fac5cd;
- --c-fg-insert-word: #c7f0d2;
- --c-bg-insert-word: #325148;
- --c-fg-insert-lineno: #9bb0a1;
- --c-bg-insert-lineno: #325148;
- --c-bg-empty: #080b0f;
- --c-border-delete: #e0c8c8;
- }
-}
-
-@media print {
- html {
- /* Copy of the light theme, but we clip all light gray backgrounds to white. */
- --c-bg-primary: #ffffff;
- --c-fg-primary: #000000;
- --c-bg-auxiliary: #ffffff;
- --c-fg-auxiliary: #a0a0a0;
- --c-border-line: #e0e0e0;
- --c-bg-insert: #ecfdf0;
- --c-bg-delete: #fbe9eb;
- --c-bg-delete-lineno: #f9d7dc;
- --c-fg-delete-lineno: #ae969a;
- --c-bg-delete-word: #fac5cd;
- --c-fg-delete-word: #400000;
- --c-fg-insert-word: #004000;
- --c-bg-insert-word: #c7f0d2;
- --c-fg-insert-lineno: #9bb0a1;
- --c-bg-insert-lineno: #ddfbe6;
- --c-bg-empty: #ffffff;
- --c-fg-foldline: #bbbbbb;
- --c-border-delete: #e0c8c8;
- }
-}
-
-@layer wsd-base-style {
- html {
- background-color: var(--c-bg-primary);
- height: 100%;
- width: 100%;
+@layer base-style {
+ html, body {
+ margin: 0;
+ padding: 0;
+ font-family: sans-serif;
}
- #wsd-js-controls {
+ #js-controls {
display: none;
- color: var(--c-fg-primary);
- background-color: var(--c-bg-auxiliary);
+ background-color: #f8f8f8;
padding: 5px 20px;
font-size: 10pt;
font-weight: bold;
- border: 1px solid var(--c-border-line);
+ border: 1px solid #e0e0e0;
position: sticky;
top: 0;
z-index: 1;
@@ -152,59 +76,59 @@ MAIN_CSS = r'''
}
@media screen and (max-width: 40em) {
- #wsd-js-controls {
+ #js-controls {
position: initial;
}
- .wsd-diff {
+ .diff {
border-top: none;
}
- .wsd-file-title {
- background-color: var(--c-bg-auxiliary);
- border-bottom: solid 1px var(--c-border-line);
+ .file-title {
+ background-color: #f8f8f8;
+ border-bottom: solid 1px #e0e0e0;
}
}
- #wsd-js-controls input[type="checkbox"] {
+ input[type="checkbox"] {
width: 20px;
height: 20px;
}
- #wsd-js-controls input, #wsd-js-controls label, #wsd-js-controls .control-label {
+ input, label, .control-label {
vertical-align: middle;
}
- .wsd-field-group {
+ .field-group {
display: inline-block;
}
- .wsd-field {
+ .field {
white-space: nowrap;
display: inline-block;
}
- #wsd-js-controls label {
+ label {
font-weight: normal;
margin-right: .5em;
margin-left: 5px;
}
- .wsd-control-label {
+ .control-label {
margin-right: .5em;
margin-left: 5px;
padding-bottom: 3px;
}
- .wsd-file-container {
+ .file-container {
font-family: monospace;
font-size: 9pt;
- background-color: var(--c-bg-auxiliary);
- border: solid 1px var(--c-border-line);
+ background-color: #f8f8f8;
+ border: solid 1px #e0e0e0;
margin: 15px;
}
- .wsd-file-title {
+ .file-title {
padding: 10px 20px;
font-size: 10pt;
font-weight: bold;
@@ -214,7 +138,7 @@ MAIN_CSS = r'''
display: flex;
}
- .wsd-filename {
+ .filename {
max-width: 30em;
text-overflow: ellipsis;
overflow: hidden;
@@ -222,64 +146,58 @@ MAIN_CSS = r'''
direction: rtl;
}
- .wsd-diff-files {
- color: var(--c-fg-primary);
- }
-
- .wsd-diff {
- background-color: var(--c-bg-primary);
+ .diff {
overflow-x: auto;
display: grid;
align-items: start;
- border-top: 1px solid var(--c-border-line);
+ border-top: 1px solid #e0e0e0;
}
- .wsd-line {
+ .line {
padding-left: calc(4em + 5px);
text-indent: -4em;
padding-top: 2px;
- align-self: stretch; /* Make sure empty lines don't collapse */
}
/* Make individual syntax tokens wrap anywhere */
- .wsd-line > span {
+ .line > span {
overflow-wrap: anywhere;
white-space: pre-wrap;
}
- .wsd-line {
+ .line {
min-width: 15em;
}
- .wsd-line.wsd-left.wsd-change, .wsd-line.wsd-left.wsd-insert {
- background-color: var(--c-bg-delete);
+ .line.left.change, .line.left.insert {
+ background-color: #fbe9eb;
}
- .wsd-line.wsd-right.wsd-change, .wsd-line.wsd-right.wsd-insert {
- background-color: var(--c-bg-insert);
+ .line.right.change, .line.right.insert {
+ background-color: #ecfdf0;
}
- .wsd-lineno.wsd-left.wsd-change, .wsd-lineno.wsd-left.wsd-insert {
- background-color: var(--c-bg-delete-lineno);
- color: var(--c-fg-delete-lineno);
+ .lineno.left.change, .lineno.left.insert {
+ background-color: #f9d7dc;
+ color: #ae969a;
}
- .wsd-lineno.wsd-right.wsd-change, .wsd-lineno.wsd-right.wsd-insert {
- background-color: var(--c-bg-insert-lineno);
- color: var(--c-fg-insert-lineno);
+ .lineno.right.change, .lineno.right.insert {
+ background-color: #ddfbe6;
+ color: #9bb0a1;
}
- .wsd-right > .wsd-word-change {
- background-color: var(--c-bg-insert-word);
- color: var(--c-fg-insert-word);
+ .right > .word_change {
+ background-color: #c7f0d2;
+ color: #004000;
}
- .wsd-left > .wsd-word-change {
- background-color: var(--c-bg-delete-word);
- color: var(--c-fg-delete-word);
+ .left > .word_change {
+ background-color: #fac5cd;
+ color: #400000;
}
- .wsd-lineno {
+ .lineno {
word-break: keep-all;
margin: 0;
padding-left: 30px;
@@ -287,89 +205,57 @@ MAIN_CSS = r'''
overflow: clip;
position: relative;
text-align: right;
- color: var(--c-fg-auxiliary);
- background-color: var(--c-bg-auxiliary);
- border-right: 1px solid var(--c-border-line);
+ color: #a0a0a0;
+ background-color: #f8f8f8;
+ border-right: 1px solid #e0e0e0;
align-self: stretch;
}
- .wsd-lineno::after {
+ .lineno.change, .lineno.insert {
+ color: #000000;
+ }
+
+ .lineno::after {
position: absolute;
right: 0;
content: "\a↳\a↳\a↳\a↳\a↳\a↳\a↳\a↳\a↳\a↳\a↳\a↳\a↳\a↳\a↳\a↳\a↳\a↳";
white-space: pre;
- color: var(--c-fg-auxiliary);
+ color: #a0a0a0;
}
/* Default rules for split diff for wide screens (laptops) */
- .wsd-diff {
+ .diff {
grid-template-columns: min-content 1fr min-content 1fr;
}
- .wsd-empty {
- background-color: var(--c-bg-empty);
+ .empty {
+ background-color: #f0f0f0;
align-self: stretch;
}
/* line continuation arrows only in non-empty lines */
- .wsd-lineno.wsd-empty::after {
+ .lineno.empty::after {
content: "";
}
-
- .wsd-lineno, .wsd-left {
- user-select: none;
- }
-
- /* Collapsing runs of unchanged lines */
- .wsd-collapse {
- grid-column: 1 / span 4;
- display: grid;
- grid-template-columns: subgrid;
- }
-
- .wsd-collapse-controls {
- grid-column: 1 / span 4;
- display: flex;
- justify-content: center;
- color: var(--c-fg-auxiliary);
-
- background-image: radial-gradient(var(--c-fg-foldline) 1px, transparent 0);
- background-size: 10px 10px;
- background-position: center;
- background-repeat: repeat-x;
- background-color: var(--c-bg-auxiliary)
- }
-
- .wsd-collapse-controls > label {
- background-color: var(--c-bg-auxiliary);
- }
-
- .wsd-collapse:has(input[type="checkbox"]:checked) > span {
- display: none;
- }
}
-@layer wsd-automatic-media-rule {
+@layer automatic-media-rule {
/* Unified diff for narrow screens (phones) */
@media screen and (max-width: 70em) {
- .wsd-diff {
+ .diff {
grid-auto-flow: dense;
grid-template-columns: min-content min-content 1fr;
}
- .wsd-collapse, .wsd-collapse-controls {
- grid-column: 1 / span 3;
- }
-
- .wsd-lineno {
+ .lineno {
padding-left: 1em;
}
- .wsd-lineno.wsd-left {
+ .lineno.left {
grid-column: 1;
}
- .wsd-lineno.wsd-left.wsd-change, .wsd-lineno.wsd-right.wsd-change {
+ .lineno.left.change, .lineno.right.change {
grid-column: 1 / span 2;
display: grid;
grid-template-columns: 1fr 1fr;
@@ -380,31 +266,31 @@ MAIN_CSS = r'''
column-gap: 10px;
}
- .wsd-lineno.wsd-right.wsd-change::before {
+ .lineno.right.change::before {
content: "";
align-self: stretch;
grid-column: 1;
- border-right: 1px solid var(--c-border-line);
+ border-right: 1px solid #e0e0e0;
margin-right: -6px; /* move border into column gap, and 1px over to align with other borders */
}
- .wsd-lineno.wsd-left.wsd-change::before {
+ .lineno.left.change::before {
content: "";
align-self: stretch;
grid-column: 2;
- border-left: 1px solid var(--c-border-delete);
+ border-left: 1px solid #e0c8c8; /* pick a darker border color inside the light red gutter */
margin-left: -5px;
}
- .wsd-lineno.wsd-left.wsd-insert {
- border-right: 1px solid var(--c-border-delete);
+ .lineno.left.insert {
+ border-right: 1px solid #e0c8c8;
}
- .wsd-lineno.wsd-right.wsd-change::after {
+ .lineno.right.change::after {
grid-column: 2;
}
- .wsd-lineno.wsd-left.wsd-insert {
+ .lineno.left.insert {
grid-column: 1 / span 2;
display: grid;
grid-template-columns: 1fr 1fr;
@@ -414,46 +300,46 @@ MAIN_CSS = r'''
padding-right: 0;
}
- .wsd-lineno.wsd-right {
+ .lineno.right {
grid-column: 2;
}
- .wsd-lineno.wsd-right.wsd-insert {
+ .lineno.right.insert {
grid-column: 2;
}
- .wsd-line.wsd-left, .wsd-line.wsd-right.wsd-empty {
+ .line.left, .line.right.empty {
display: none;
}
- .wsd-line {
+ .line {
grid-column: 3;
}
- .wsd-line.wsd-left.wsd-insert {
+ .line.left.insert {
display: block;
}
- .wsd-line.wsd-left.wsd-change {
+ .line.left.change {
display: block;
}
- .wsd-lineno.wsd-right.wsd-empty {
+ .lineno.right.empty {
display: none;
}
- .wsd-lineno.wsd-left.wsd-empty {
- background-color: var(--c-bg-insert-lineno);
+ .lineno.left.empty {
+ background-color: #ddfbe6;
}
/* line continuation arrows only in right line number column */
- .wsd-lineno.wsd-left.wsd-insert::after {
+ .lineno.left.insert::after {
}
- .wsd-lineno.wsd-left.wsd-insert::before {
+ .lineno.left.insert::before {
content: "";
grid-column: 2;
- border-left: 1px solid var(--c-border-delete); /* pick a darker border color inside the light red gutter */
+ border-left: 1px solid #e0c8c8; /* pick a darker border color inside the light red gutter */
margin-left: -5px;
}
}
@@ -465,13 +351,13 @@ DIFF_STYLE_SCRIPT = r'''
const findRule = ((stylesheet, name) => Array.from(stylesheet.cssRules).find(
element => (element instanceof CSSLayerBlockRule && element.name == name)).cssRules[0]);
- const automaticMediaElement = findRule(findStylesheet('wsd-main-style'), 'wsd-automatic-media-rule');
+ const automaticMediaElement = findRule(findStylesheet('main-style'), 'automatic-media-rule');
const automaticMediaRule = automaticMediaElement.media[0];
const impossibleMediaRule = "screen and (max-width: 0px)";
const tautologicalMediaRule = "screen and (min-width: 0px)";
- const toggleAuto = document.getElementById("wsd-toggle-split-auto");
- const toggleForce = document.getElementById("wsd-toggle-split-force");
+ const toggleAuto = document.getElementById("toggle-split-auto");
+ const toggleForce = document.getElementById("toggle-split-force");
toggleAuto.checked = true;
toggleForce.disabled = true;
@@ -512,10 +398,11 @@ DIFF_STYLE_SCRIPT = r'''
});
toggleForce.checked = !mediaMatch.matches;
- document.getElementById('wsd-js-controls').style = 'display: flex';
+ document.getElementById('js-controls').style = 'display: flex';
'''
-HTML_TEMPLATE = r'''
+HTML_TEMPLATE = r'''
+
@@ -523,13 +410,7 @@ HTML_TEMPLATE = r'''
-