Skip to content

Commit

Permalink
Merge pull request #14886 from Snuffleupagus/preprocessCSS-refactor
Browse files Browse the repository at this point in the history
Use the regular `preprocess`-function for the CSS files as well
  • Loading branch information
timvandermeij authored May 8, 2022
2 parents 753abc3 + 80910f4 commit 72943ae
Show file tree
Hide file tree
Showing 10 changed files with 74 additions and 102 deletions.
98 changes: 19 additions & 79 deletions external/builder/builder.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,25 @@ function preprocess(inFilename, outFilename, defines) {
return fs.realpathSync(inFilename) + ":" + lineNumber;
}

function expandCssImports(content, baseUrl) {
return content.replace(
/^\s*@import\s+url\(([^)]+)\);\s*$/gm,
function (all, url) {
const file = path.join(path.dirname(baseUrl), url);
const imported = fs.readFileSync(file, "utf8").toString();
return expandCssImports(imported, file);
}
);
}

// TODO make this really read line by line.
const lines = fs.readFileSync(inFilename).toString().split("\n");
const totalLines = lines.length;
let content = fs.readFileSync(inFilename, "utf8").toString();
// Handle CSS-imports first, when necessary.
if (/\.css$/i.test(inFilename)) {
content = expandCssImports(content, inFilename);
}
const lines = content.split("\n"),
totalLines = lines.length;
let out = "";
let i = 0;
function readLine() {
Expand Down Expand Up @@ -123,7 +139,7 @@ function preprocess(inFilename, outFilename, defines) {
let state = STATE_NONE;
const stack = [];
const control =
/^(?:\/\/|<!--)\s*#(if|elif|else|endif|expand|include|error)\b(?:\s+(.*?)(?:-->)?$)?/;
/^(?:\/\/|\s*\/\*|<!--)\s*#(if|elif|else|endif|expand|include|error)\b(?:\s+(.*?)(?:\*\/|-->)?$)?/;

while ((line = readLine()) !== null) {
++lineNumber;
Expand Down Expand Up @@ -199,82 +215,6 @@ function preprocess(inFilename, outFilename, defines) {
}
exports.preprocess = preprocess;

function preprocessCSS(inFilename, outFilename, defines) {
function hasPrefixedMozcentral(line) {
return /(^|\W)-(ms|o|webkit)-\w/.test(line);
}

function expandImports(content, baseUrl) {
return content.replace(
/^\s*@import\s+url\(([^)]+)\);\s*$/gm,
function (all, url) {
const file = path.join(path.dirname(baseUrl), url);
const imported = fs.readFileSync(file, "utf8").toString();
return expandImports(imported, file);
}
);
}

function removePrefixed(content, hasPrefixedFilter) {
const lines = content.split(/\r?\n/g);
let i = 0;
while (i < lines.length) {
const line = lines[i];
if (!hasPrefixedFilter(line)) {
i++;
continue;
}
if (/\{\s*$/.test(line)) {
let bracketLevel = 1;
let j = i + 1;
while (j < lines.length && bracketLevel > 0) {
const checkBracket = /([{}])\s*$/.exec(lines[j]);
if (checkBracket) {
if (checkBracket[1] === "{") {
bracketLevel++;
} else if (!lines[j].includes("{")) {
bracketLevel--;
}
}
j++;
}
lines.splice(i, j - i);
} else if (/[};]\s*$/.test(line)) {
lines.splice(i, 1);
} else {
// multiline? skipping until next directive or bracket
do {
lines.splice(i, 1);
} while (
i < lines.length &&
!/\}\s*$/.test(lines[i]) &&
!lines[i].includes(":")
);
if (i < lines.length && /\S\s*}\s*$/.test(lines[i])) {
lines[i] = lines[i].substring(lines[i].indexOf("}"));
}
}
// collapse whitespaces
while (lines[i] === "" && lines[i - 1] === "") {
lines.splice(i, 1);
}
}
return lines.join("\n");
}

if (!defines) {
throw new Error("Missing CSS preprocessor defines.");
}

let content = fs.readFileSync(inFilename, "utf8").toString();
content = expandImports(content, inFilename);
if (defines.MOZCENTRAL) {
content = removePrefixed(content, hasPrefixedMozcentral);
}
fs.writeFileSync(outFilename, content);
}
exports.preprocessCSS = preprocessCSS;

/**
* Merge two defines arrays. Values in the second param will override values in
* the first.
Expand Down
3 changes: 3 additions & 0 deletions external/builder/fixtures/if-nested-expected.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
div {
margin: 0;
}
14 changes: 14 additions & 0 deletions external/builder/fixtures/if-nested.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/*#if TRUE*/
div {
margin: 0;
/*#if FALSE*/
padding: 0;
/*#endif*/
}
/*#endif*/

/*#if FALSE*/
p {
margin: 0;
}
/*#endif*/
9 changes: 7 additions & 2 deletions gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -816,7 +816,7 @@ gulp.task("cmaps", function (done) {

function preprocessCSS(source, defines) {
const outName = getTempFile("~preprocess", ".css");
builder.preprocessCSS(source, outName, defines);
builder.preprocess(source, outName, defines);
let out = fs.readFileSync(outName).toString();
fs.unlinkSync(outName);

Expand Down Expand Up @@ -1334,6 +1334,11 @@ gulp.task(
const CHROME_BUILD_DIR = BUILD_DIR + "/chromium/",
CHROME_BUILD_CONTENT_DIR = CHROME_BUILD_DIR + "/content/";

const CHROME_WEB_FILES = [
...COMMON_WEB_FILES,
"!web/images/toolbarButton-openFile.svg",
];

// Clear out everything in the chrome extension build directory
rimraf.sync(CHROME_BUILD_DIR);

Expand All @@ -1353,7 +1358,7 @@ gulp.task(
gulp.dest(CHROME_BUILD_CONTENT_DIR + "web")
),
gulp
.src(COMMON_WEB_FILES, { base: "web/" })
.src(CHROME_WEB_FILES, { base: "web/" })
.pipe(gulp.dest(CHROME_BUILD_CONTENT_DIR + "web")),

gulp
Expand Down
3 changes: 0 additions & 3 deletions web/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -2201,9 +2201,6 @@ function webViewerInitialized() {
fileInput: evt.dataTransfer,
});
});
} else if (!PDFJSDev.test("MOZCENTRAL")) {
appConfig.toolbar.openFile.hidden = true;
appConfig.secondaryToolbar.openFileButton.hidden = true;
}

if (!PDFViewerApplication.supportsDocumentFonts) {
Expand Down
2 changes: 1 addition & 1 deletion web/secondary_toolbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ class SecondaryToolbar {
close: true,
},
];
if (typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")) {
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
this.buttons.push({
element: options.openFileButton,
eventName: "openfile",
Expand Down
2 changes: 1 addition & 1 deletion web/toolbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class Toolbar {
{ element: options.download, eventName: "download" },
{ element: options.viewBookmark, eventName: null },
];
if (typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")) {
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
this.buttons.push({ element: options.openFile, eventName: "openfile" });
}
this.items = {
Expand Down
35 changes: 24 additions & 11 deletions web/viewer.css
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@

--main-color: rgba(12, 12, 13, 1);
--body-bg-color: rgba(237, 237, 240, 1);
--errorWrapper-bg-color: rgba(255, 110, 110, 1); /* -webkit-non-mozcentral */
/*#if !MOZCENTRAL*/
--errorWrapper-bg-color: rgba(255, 110, 110, 1);
/*#endif*/
--progressBar-color: rgba(10, 132, 255, 1);
--progressBar-indeterminate-bg-color: rgba(221, 221, 222, 1);
--progressBar-indeterminate-blend-color: rgba(116, 177, 239, 1);
Expand Down Expand Up @@ -77,7 +79,9 @@
--toolbarButton-zoomIn-icon: url(images/toolbarButton-zoomIn.svg);
--toolbarButton-presentationMode-icon: url(images/toolbarButton-presentationMode.svg);
--toolbarButton-print-icon: url(images/toolbarButton-print.svg);
--toolbarButton-openFile-icon: url(images/toolbarButton-openFile.svg); /* -webkit-non-mozcentral */
/*#if GENERIC*/
--toolbarButton-openFile-icon: url(images/toolbarButton-openFile.svg);
/*#endif*/
--toolbarButton-download-icon: url(images/toolbarButton-download.svg);
--toolbarButton-bookmark-icon: url(images/toolbarButton-bookmark.svg);
--toolbarButton-viewThumbnail-icon: url(images/toolbarButton-viewThumbnail.svg);
Expand Down Expand Up @@ -112,7 +116,9 @@
:root {
--main-color: rgba(249, 249, 250, 1);
--body-bg-color: rgba(42, 42, 46, 1);
--errorWrapper-bg-color: rgba(169, 14, 14, 1); /* -webkit-non-mozcentral */
/*#if !MOZCENTRAL*/
--errorWrapper-bg-color: rgba(169, 14, 14, 1);
/*#endif*/
--progressBar-color: rgba(0, 96, 223, 1);
--progressBar-indeterminate-bg-color: rgba(40, 40, 43, 1);
--progressBar-indeterminate-blend-color: rgba(20, 68, 133, 1);
Expand Down Expand Up @@ -457,9 +463,11 @@ select {
#findInput {
width: 200px;
}
/*#if !MOZCENTRAL*/
#findInput::-webkit-input-placeholder {
color: rgba(191, 191, 191, 1);
}
/*#endif*/
#findInput::placeholder {
font-style: normal;
}
Expand Down Expand Up @@ -817,10 +825,12 @@ select {
mask-image: var(--toolbarButton-print-icon);
}

#openFile::before, /* -webkit-non-mozcentral */
#secondaryOpenFile::before /* -webkit-non-mozcentral */ {
/*#if GENERIC*/
#openFile::before,
#secondaryOpenFile::before {
mask-image: var(--toolbarButton-openFile-icon);
}
/*#endif*/

#download::before,
#secondaryDownload::before {
Expand Down Expand Up @@ -1002,10 +1012,11 @@ a.secondaryToolbarButton[href="#"] {
background-repeat: no-repeat;
background-position: 3px;
}

/*#if !MOZCENTRAL*/
#pageNumber::-webkit-inner-spin-button {
-webkit-appearance: none;
}
/*#endif*/

.toolbarField:focus {
border-color: #0a84ff;
Expand Down Expand Up @@ -1174,7 +1185,8 @@ a:focus > .thumbnail > .thumbnailSelectionRing,
background: rgba(0, 0, 255, 0.3);
}

#errorWrapper /* -webkit-non-mozcentral */ {
/*#if !MOZCENTRAL*/
#errorWrapper {
background-color: var(--errorWrapper-bg-color);
color: var(--main-color);
left: 0;
Expand All @@ -1184,24 +1196,25 @@ a:focus > .thumbnail > .thumbnailSelectionRing,
padding: 3px 6px;
}

#errorMessageLeft /* -webkit-non-mozcentral */ {
#errorMessageLeft {
float: left;
}
#errorMessageRight /* -webkit-non-mozcentral */ {
#errorMessageRight {
float: right;
}

#errorSpacer /* -webkit-non-mozcentral */ {
#errorSpacer {
clear: both;
}
#errorMoreInfo /* -webkit-non-mozcentral */ {
#errorMoreInfo {
background-color: var(--field-bg-color);
color: var(--field-color);
border: 1px solid var(--field-border-color);
padding: 3px;
margin: 3px;
width: 98%;
}
/*#endif*/

.dialogButton {
width: auto;
Expand Down
6 changes: 3 additions & 3 deletions web/viewer.html
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@
<span data-l10n-id="presentation_mode_label">Presentation Mode</span>
</button>

<!--#if !MOZCENTRAL-->
<!--#if GENERIC-->
<button id="secondaryOpenFile" class="secondaryToolbarButton visibleLargeView" title="Open File" tabindex="52" data-l10n-id="open_file">
<span data-l10n-id="open_file_label">Open</span>
</button>
Expand Down Expand Up @@ -267,7 +267,7 @@
<span data-l10n-id="presentation_mode_label">Presentation Mode</span>
</button>

<!--#if !MOZCENTRAL-->
<!--#if GENERIC-->
<button id="openFile" class="toolbarButton hiddenLargeView" title="Open File" tabindex="32" data-l10n-id="open_file">
<span data-l10n-id="open_file_label">Open</span>
</button>
Expand Down Expand Up @@ -453,7 +453,7 @@
</div> <!-- outerContainer -->
<div id="printContainer"></div>

<!--#if GENERIC -->
<!--#if GENERIC-->
<input type="file" id="fileInput" class="hidden">
<!--#endif-->
</body>
Expand Down
4 changes: 2 additions & 2 deletions web/viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ function getViewerConfiguration() {
zoomOut: document.getElementById("zoomOut"),
viewFind: document.getElementById("viewFind"),
openFile:
typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")
typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")
? document.getElementById("openFile")
: null,
print: document.getElementById("print"),
Expand All @@ -104,7 +104,7 @@ function getViewerConfiguration() {
"secondaryPresentationMode"
),
openFileButton:
typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")
typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")
? document.getElementById("secondaryOpenFile")
: null,
printButton: document.getElementById("secondaryPrint"),
Expand Down

0 comments on commit 72943ae

Please sign in to comment.