From 67c9d23889c471b73f81195ac1020a3b8c1b6065 Mon Sep 17 00:00:00 2001 From: Hatton Date: Tue, 1 Sep 2026 15:50:28 -0600 Subject: [PATCH] Add the page-copy collection for the copy-page e2e test (Test Case ID 348) Two books. "Copy Source" has one content page that carries everything the manual test "Copy Page Preserves Everything" says a copied page must keep: a user-defined style, an image, a Talking Book recording, a video, and a custom origami layout. "Copy Destination" is an ordinary book the page is pasted into. The page is prebuilt because adding an image, a recording, or a video through Bloom's UI needs a native file dialog or a microphone, which an e2e test must not open. The media are BloomDesktop's own public test assets (bird.png and an mp3 from src/BloomTests) plus a 2-second FFmpeg test pattern for the video. Co-Authored-By: Claude Fable 5.1 --- .../Copy Destination/Copy Destination.htm | 61 ++++ .../page-copy/Copy Destination/appearance.css | 249 +++++++++++++ .../Copy Destination/appearance.json | 15 + .../page-copy/Copy Destination/branding.css | 93 +++++ .../Copy Destination/defaultLangStyles.css | 29 ++ .../page-copy/Copy Destination/meta.json | 1 + .../page-copy/Copy Destination/origami.css | 341 ++++++++++++++++++ .../Copy Destination/publish-settings.json | 1 + .../page-copy/Copy Source/Copy Source.htm | 112 ++++++ .../page-copy/Copy Source/appearance.css | 249 +++++++++++++ .../page-copy/Copy Source/appearance.json | 15 + .../i77c18c83-0224-405f-bb97-70d32078855c.mp3 | Bin 0 -> 17762 bytes collections/page-copy/Copy Source/bird.png | Bin 0 -> 6484 bytes .../page-copy/Copy Source/branding.css | 93 +++++ .../Copy Source/defaultLangStyles.css | 29 ++ collections/page-copy/Copy Source/meta.json | 1 + collections/page-copy/Copy Source/origami.css | 341 ++++++++++++++++++ .../Copy Source/publish-settings.json | 1 + .../page-copy/Copy Source/video/pagecopy.mp4 | Bin 0 -> 5514 bytes .../page-copy/customCollectionStyles.css | 13 + .../page-copy/page-copy.bloomCollection | 51 +++ manifest.json | 11 +- 22 files changed, 1705 insertions(+), 1 deletion(-) create mode 100644 collections/page-copy/Copy Destination/Copy Destination.htm create mode 100644 collections/page-copy/Copy Destination/appearance.css create mode 100644 collections/page-copy/Copy Destination/appearance.json create mode 100644 collections/page-copy/Copy Destination/branding.css create mode 100644 collections/page-copy/Copy Destination/defaultLangStyles.css create mode 100644 collections/page-copy/Copy Destination/meta.json create mode 100644 collections/page-copy/Copy Destination/origami.css create mode 100644 collections/page-copy/Copy Destination/publish-settings.json create mode 100644 collections/page-copy/Copy Source/Copy Source.htm create mode 100644 collections/page-copy/Copy Source/appearance.css create mode 100644 collections/page-copy/Copy Source/appearance.json create mode 100644 collections/page-copy/Copy Source/audio/i77c18c83-0224-405f-bb97-70d32078855c.mp3 create mode 100644 collections/page-copy/Copy Source/bird.png create mode 100644 collections/page-copy/Copy Source/branding.css create mode 100644 collections/page-copy/Copy Source/defaultLangStyles.css create mode 100644 collections/page-copy/Copy Source/meta.json create mode 100644 collections/page-copy/Copy Source/origami.css create mode 100644 collections/page-copy/Copy Source/publish-settings.json create mode 100644 collections/page-copy/Copy Source/video/pagecopy.mp4 create mode 100644 collections/page-copy/customCollectionStyles.css create mode 100644 collections/page-copy/page-copy.bloomCollection diff --git a/collections/page-copy/Copy Destination/Copy Destination.htm b/collections/page-copy/Copy Destination/Copy Destination.htm new file mode 100644 index 0000000..553d26a --- /dev/null +++ b/collections/page-copy/Copy Destination/Copy Destination.htm @@ -0,0 +1,61 @@ + + + + + + + + Copy Destination + + + + + + + + +
+
0
+
en
+
False
+
English
+

Copy Destination

+
Copy Destination
+
+ +
+
+ Just Text +
+
+ +
+
+
+
+
+
+

This book starts with ordinary text and no media.

+
+

+
+
+
+
+
+
+
+
+

The test pastes the source book's page after this one.

+
+

+
+
+
+
+
+
+ + + diff --git a/collections/page-copy/Copy Destination/appearance.css b/collections/page-copy/Copy Destination/appearance.css new file mode 100644 index 0000000..e1babc5 --- /dev/null +++ b/collections/page-copy/Copy Destination/appearance.css @@ -0,0 +1,249 @@ +/* From appearance-theme-default.css */ +/* This is the default theme, not only in the sense that it is the one we use by default for new books, + * but also in the sense that it is copied to the start of each appearance.css file. Thus, the values + * set in this initial .bloom-page block are defaults for EVERY page in EVERY book, and this block is + * intended to provide a default for EVERY variable controlled by the appearance system. + * Some of these values are overridden for certain page sizes by other rules in this file. + * Intentionally, those rules are not more specific than this one, they just come later in the file + * and win for that reason. + * The rules for any other theme are copied later than the ones from this file in appearance.css, + * so anything in those files with the same (or of course greater) specificity can override these. + * For example, page-margin-right is set to 12mm in a .bloom-page block early in this file. + * For an A4Landscape page, a later rule in this file overrides the .bloom-page rule and makes it 15mm. + * If the book uses the large margins theme, a .bloom-page rule in that file overrides it again to 25mm. + * The rounded border theme overrides it to 2.5mm for Device page sizes, using a different selector again. + * These rules all have the same specificity even though they have different selectors, so the last one wins. + * I don't much like depending on the order of rules like this, or having rules left in the + * generated appearance.css file that we know will never apply to anything. But I don't see a better way + * to get the desired results: + * - a default for every property here that applies to every page in every book in every theme + * - a way to override default property values for certain page sizes + * - a way to override for certain themes (either for all page sizes or by page-size) + * Note: variables here set to zero representing a distance should have some unit, since they may + * be used in calc() expressions. For example, 0px, 0mm, 0in are all valid. 0 as a multiplier is fine. +*/ +.bloom-page { + --topLevel-text-padding: 1em; + + /* display: value in .numberedPage:after to display the page number */ + --pageNumber-show: doShow-css-will-ignore-this-and-use-default; /* default is number displaying (the value is a self-documenting trick) */ + + /* font-size: value in .numberedPage:after to display the page number */ + --pageNumber-font-size: 11pt; + /* Either --pageNumber-top or --pageNumber-bottom should be set to a value, but not both. */ + /* bottom: value in .numberedPage:after to display the page number */ + --pageNumber-bottom: 15px; /* Based on experiment with 5mm unprintable area for desktop printers (tested using boxes in Acrobat). + /* top: value in .numberedPage:after to display the page number */ + --pageNumber-top: unset; + /* used for both height: and width: values in .numberedPage:after to display the page number. + * Values like 20mm or 20vmin are valid. */ + --pageNumber-background-width: unset; /* for when we need to have a colored background, e.g. a circle */ + /* background-color: value in .numberedPage:after to display the page number */ + --pageNumber-background-color: transparent; + /* color: value in .numberedPage:after to display the page number */ + --pageNumber-color: black; + --pageNumber-outline-color: white; + /* border-radius: value in .numberedPage:after to display the page number */ + --pageNumber-border-radius: 0px; + /* left: value in .numberedPage.side-left:after to display the page number */ + --pageNumber-left-margin: auto; + --pageNumber-extra-height: 0mm; + + /* Themes should set to 0 if the marginBox is a different color than the page background. This affects the text padding. + Note that we could eventually figure this out in code, and probably need to once we provide a UI for + setting the marginBox border or page background color. */ + --page-and-marginBox-are-same-color-multiplicand: 1; + + /* right: value in .numberedPage.side-right:after to display the page number + * If this is used, --pageNumber-always-left-margin should be set to unset (a keyword). + * Note that if used, this should be set the same value as --page-margin-right, which is + * what this default value achieves. */ + --pageNumber-right-margin: var(--page-margin-right); + + /* left: value in .numberedPage.side-right:after to display the page number */ + /* This allows the page number to always be on the left, regardless of page side. + * If this is used, --pageNumber-right-margin must be set to unset (a keyword). + * Valid values would include auto (a keyword), 5px, or 8%. + * The unset keyword removes having any value associated with this variable. */ + --pageNumber-always-left-margin: unset; + + /* background-color: value in .bloom-page when a theme wants a decorative shell behind the page surface */ + /* DO WE NEED THIS? --page-frame-color: unset;*/ + + /* background-color: value in .bloom-page */ + --page-background-color: white; + + /* padding-left: value in .split-pane.vertical-percent + * .split-pane-component.position-right .split-pane-component-inner > div */ + --page-verticalSplit-width: 3px; /* 3px is matching Bloom 5.6's right margin for vertical split */ + /* padding-top: value in .split-pane.horizontal-percent + * .split-pane-component.position-bottom .split-pane-component-inner > div */ + --page-horizontalSplit-height: 0px; + /* gap: value for .bloom-translationGroup */ + /* When Bloom is configured to show each block of text in more than one language, this controls + the space between the different language sections of each block. */ + --multilingual-editable-vertical-gap: 1em; + /* border-radius: value in .bloom-canvas (picture added by user to front cover or content page) */ + --image-border-radius: 0px; /* 0px is the default, but we want to be explicit about square corners */ + /* Most Bloom books are too small to need a gutter. NB: THIS MUST HAVE UNITS even when 0, else calc() fails */ + --page-gutter: 0mm; + + --page-margin: 12mm; + + /* padding-top: value in .bloom-page.outsideFrontCover and .bloom-page.outsideBackCover */ + /* same default value as --page-margin-top, but used for outside cover pages */ + --cover-margin-top: var(--page-margin); + /* padding-bottom: value in .bloom-page.outsideFrontCover and .bloom-page.outsideBackCover */ + /* same default value as --page-margin-bottom, but used for outside cover pages */ + --cover-margin-bottom: var(--page-margin); + /* padding-left: and padding-right: value in .bloom-page.outsideFrontCover and .bloom-page.outsideBackCover */ + --cover-margin-side: var( + --page-margin + ); /* same default value as --page-margin-left and --page-margin-right, but used for outside cover pages */ + /* display: value in .coverBottomBookTopic */ + --cover-topic-show: doShow-css-will-ignore-this-and-use-default; /* default is topic displaying (the value is a self-documenting trick) */ + /* display: value in .coverBottomLangName */ + --cover-languageName-show: doShow-css-will-ignore-this-and-use-defaultblock; /* default is language name displaying (the value is a self-documenting trick) */ + /* display: value in .cover .creditsRow */ + --cover-creditsRow-show: doShow-css-will-ignore-this-and-use-default; /* default is credits row displaying (the value is a self-documenting trick) */ + + /* background-color: value in .numberedPage .marginBox */ + /* This is not just for text boxes, but for everything inside the page margins. + (For example, the space between text boxes or the background of partly transparent images.) + It defaults to the page surface color rather than transparent, because in edit mode we set + the parent translationGroup color to show padding and still need the editable content area + itself to paint like the page surface. */ + --marginBox-background-color: var(--page-background-color); + /* padding: value in .numberedPage .marginBox */ + --marginBox-padding: 0px; + /* border-radius: value in .numberedPage .marginBox */ + --marginBox-border-radius: 0px; + /* border-color: value in .numberedPage .marginBox */ + --marginBox-border-color: black; + /* border-style: value in .numberedPage .marginBox */ + --marginBox-border-style: none; /* default is no border, but we want to be explicit. 'none' is a keyword. */ + /* border-width: value in .numberedPage .marginBox */ + --marginBox-border-width: medium; /* must not be 0px/0mm/0in to have a border. 'medium' is a keyword. */ + + /* In some themes, at edit- + time, the format button lands under the page number. See BL-13206. The name is is intentionally vague about direction and what we do with it. + Must have a unit: this feeds a calc() with px, where a unitless 0 makes the whole expression invalid (BL-14901). */ + --formatButton-pageNumber-dodge: 0px; +} + +/* this rule might not always be what we need for every kind of interactive page, but it's a good default. + E.g., it allows the blue of the Simple Choice to come through. */ +.bloom-page.bloom-interactive-page { + --marginBox-background-color: transparent; +} + +/* Beware of making these rules more specific. We want them to be able to be overridden by .bloom-page rules + * that come from other themes (and hence later in the generated appearance.css file). + */ +.A3Landscape, +.A3Portrait, +.A4Landscape, +.A4Portrait, +.B5Portrait, +.LetterLandscape, +.LetterPortrait, +.LegalLandscape, +.LegalLandscape { + --page-margin: 15mm; + --page-gutter: 10mm; +} +.HalfLetterPortrait,/* SIL Mexico says use same as A5 */ +.HalfLetterLandscape, +.A5Landscape, +.A5Portrait, +.Size6x9Landscape, +.Size6x9Portrait, +.USComicPortrait { + --page-margin: 12mm; +} +.QuarterLetterPortrait, +.QuarterLetterLandscape, +.A6Portrait, +.A6Landscape { + --page-margin: 10mm; +} +.Cm13Landscape { + --page-margin: 5mm; +} +.bloom-page[class*="Ebook"], +.bloom-page[class*="Device"] { + --page-margin: 10px; +} + +.bloom-page[class*="Ebook"], +.bloom-page[class*="Device"], +.bloomPlayer-page .bloom-page { + /* Deliberately set both of these, which combines with a special device/bloom-player rule + * in basePage.less which sets both left and right margin to auto, and we get + * centered as the default for device/bloom-player pages. (To override this, you need to + * set the margin you don't want to something like "deliberately-invalid".)*/ + --pageNumber-right-margin: 0px; + --pageNumber-always-left-margin: 0px; +} + +.numberedPage[class*="Ebook"], +.numberedPage[class*="Device"] { + /* These page sizes have small margins, so we need extra height on numbered ones. + (Note that this disappears if page numbers are turned off, because --pageNumber-show-multiplicand is 0.) */ + --pageNumber-extra-height: 8mm !important; +} + +/* We need a small margin (above) for xmatter pages (e.g., Robots Mali credits page, + * especially in landscape, comment in BL-13002). + * But we need more on numbered pages, so we can fit the page number. + * This unfortunately breaks our rule about keeping the specificity at one class so that + * the settings dialog can override. But currently we don't expect to make page margins + * a book setting, so for now we're OK.*/ +/*.numberedPage.Device16x9Portrait, +.numberedPage.Device16x9Landscape { + --page-margin-bottom: 45px; /* need room for page number, so not as small as others +}*/ + +/* classes are doubled in this rule because it needs to beat the one above that sets the + * bottom margin for numbered pages in Device page sizes. This makes it equally specific + * and thus the last one wins. */ +.no-margin-page.no-margin-page, +.comic.comic { + --page-margin-top: 0px; + --page-margin-bottom: 0px; + --page-margin-right: 0px; + --page-margin-left: 0px; + --pageNumber-font-size: 0px; /* review will this work to hide it? */ + --pageNumber-show-multiplicand: 0; /* no extra space for suppressed page number */ + --pageNumber-extra-height: 0mm !important; +} + +/***************************************************************************** + * These variables / rules are for xmatter pages. + */ +.bloom-frontMatter, +.bloom-backMatter { + --MarginBetweenXMatterBlocks: 2em; + --MarginBetweenXMatterMinorItems: 5px; + --DefaultCoverTitle1FontSize: 25pt; + --DefaultCoverTitle2FontSize: 12pt; + /* Same as our ordinary default, but we have to set it explicitly because of a trick + that copies the DefaultCoverTitle1FontSize to the translationGroup. */ + --DefaultCoverTitle3FontSize: 10pt; +} + +/* From this book's appearance settings */ +.bloom-page { + --pageNumber-show-multiplicand: 1; + --cover-creditsRow-show: doShow-css-will-ignore-this-and-use-default; + --cover-title-L1-show: doShow-css-will-ignore-this-and-use-default; + --cover-title-L2-show: doShow-css-will-ignore-this-and-use-default; + --cover-title-L3-show: none; + --cover-topic-show: doShow-css-will-ignore-this-and-use-default; + --cover-languageName-show: doShow-css-will-ignore-this-and-use-default; + --pageNumber-show: doShow-css-will-ignore-this-and-use-default; + --pageNumber-left-margin-override: unset; + --pageNumber-right-margin-override: unset; + --cover-background-color: #c6c6c6; +} + diff --git a/collections/page-copy/Copy Destination/appearance.json b/collections/page-copy/Copy Destination/appearance.json new file mode 100644 index 0000000..d3fd107 --- /dev/null +++ b/collections/page-copy/Copy Destination/appearance.json @@ -0,0 +1,15 @@ +{ + "cssThemeName": "default", + "fullBleed": false, + "pageNumber-position": "automatic", + "cover-creditsRow-show": true, + "cover-title-L1-show": true, + "cover-title-L2-show": true, + "cover-title-L3-show": false, + "cover-topic-show": true, + "cover-languageName-show": true, + "pageNumber-show": true, + "pageNumber-left-margin-override": "unset", + "pageNumber-right-margin-override": "unset", + "cover-background-color": "#c6c6c6" +} \ No newline at end of file diff --git a/collections/page-copy/Copy Destination/branding.css b/collections/page-copy/Copy Destination/branding.css new file mode 100644 index 0000000..d1c94da --- /dev/null +++ b/collections/page-copy/Copy Destination/branding.css @@ -0,0 +1,93 @@ +/*{ + label: "default branding"; + compatibleWithAppearanceVersion: 6.0; +}*/ +/***** +Note the following division of labor: +Rules that place branding on an xmatter page belong in bloom-xmatter-commons.less or the stylesheet of a particular xmatter. +Rules that format the branding go in branding-base.less, or in the branding.less of a particular branding. +****/ +[data-book*="branding"] { + display: flex; + flex-direction: column; +} +[data-book*="branding"] img { + margin-left: auto; + margin-right: auto; + width: auto; + max-width: 100%; + align-self: center; + object-fit: contain; +} +[data-book="outside-back-cover-branding-bottom-html"] { + width: 100%; +} +/* these rules allow different branding insertions depending on orientation */ +.portraitOnly, +.landscapeOnly { + display: none; +} +.Size6x9Portrait .portraitOnly, +.USComicPortrait .portraitOnly, +.Device16x9Portrait .portraitOnly, +.QuarterLetterPortrait .portraitOnly, +.HalfLetterPortrait .portraitOnly, +.LetterPortrait .portraitOnly, +.LegalPortrait .portraitOnly, +.A3Portrait .portraitOnly, +.A4Portrait .portraitOnly, +.A5Portrait .portraitOnly, +.B5Portrait .portraitOnly, +.A6Portrait .portraitOnly { + display: unset; +} +.Size6x9Landscape .landscapeOnly, +.Cm13Landscape .landscapeOnly, +.Device16x9Landscape .landscapeOnly, +.LetterLandscape .landscapeOnly, +.LegalLandscape .landscapeOnly, +.A3Landscape .landscapeOnly, +.A4Landscape .landscapeOnly, +.A5Landscape .landscapeOnly, +.A6Landscape .landscapeOnly { + display: unset; +} +.bloom-branding-wrapper { + border: 5px solid #d65649; + background-color: white; + border-radius: 8px; + width: fit-content; + max-width: 100%; + margin-left: auto; + margin-right: auto; +} +.bloom-branding-wrapper img.branding { + width: 4.7cm; + padding: 10px; + box-sizing: border-box; + vertical-align: top; +} +.bloom-branding-wrapper .bloom-qrcode { + width: 2.8cm; + padding: 10px; + box-sizing: border-box; +} +.bloom-branding-wrapper .bloom-lang-on-blorg { + font-size: 9pt; + line-height: 1.2; + width: 100%; + box-sizing: border-box; + margin-left: 12px; + margin-right: 10px; + margin-bottom: 10px; + max-width: 7cm; +} +.bloom-branding-wrapper .bloom-lang-on-blorg .bloom-blorg-url { + color: #d65649; + font-weight: bold; +} +.bloom-page.bloom-customLayout[data-custom-layout-id] .marginBox .bloom-translationGroup:not(.bloom-imageDescription) { + display: flex !important; +} +/*# sourceMappingURL=branding.css.map */ +/*# sourceMappingURL=branding.css.map */ \ No newline at end of file diff --git a/collections/page-copy/Copy Destination/defaultLangStyles.css b/collections/page-copy/Copy Destination/defaultLangStyles.css new file mode 100644 index 0000000..285d600 --- /dev/null +++ b/collections/page-copy/Copy Destination/defaultLangStyles.css @@ -0,0 +1,29 @@ +@font-face { font-family: ABeeZee; src: url(./host/fonts/ABeeZee-Regular.woff2); } +@font-face { font-family: ABeeZee; font-style: italic; src: url(./host/fonts/ABeeZee-Italic.woff2); } +@font-face { font-family: Andika; src: url(./host/fonts/Andika-Regular.woff2); } +@font-face { font-family: Andika; font-weight: bold; src: url(./host/fonts/Andika-Bold.woff2); } +@font-face { font-family: Andika; font-style: italic; src: url(./host/fonts/Andika-Italic.woff2); } +@font-face { font-family: Andika; font-weight: bold; font-style: italic; src: url(./host/fonts/Andika-BoldItalic.woff2); } +@font-face { font-family: "Andika New Basic"; font-weight: normal; font-style: normal; src: url("./host/fonts/Andika New Basic"); } +@font-face { font-family: "Andika New Basic"; font-weight: bold; font-style: normal; src: url("./host/fonts/Andika New Basic Bold"); } +@font-face { font-family: "Andika New Basic"; font-weight: normal; font-style: italic; src: url("./host/fonts/Andika New Basic Italic"); } +@font-face { font-family: "Andika New Basic"; font-weight: bold; font-style: italic; src: url("./host/fonts/Andika New Basic Bold Italic") ; } +/* *** DO NOT EDIT! *** These styles are controlled by the Settings dialog box in Bloom. */ +/* They may be over-ridden by rules in customCollectionStyles.css, appearance.css or customBookStyles[2].css */ + +.numberedPage::after +{ + font-family: 'Andika'; + direction: ltr; +} + +[lang='en'] +{ + font-family: 'Andika'; + direction: ltr; +} + +.bloom-page:not(.bloom-frontMatter):not(.bloom-backMatter) [lang='*'] +{ + font-family: 'Andika'; +} diff --git a/collections/page-copy/Copy Destination/meta.json b/collections/page-copy/Copy Destination/meta.json new file mode 100644 index 0000000..c76e7a5 --- /dev/null +++ b/collections/page-copy/Copy Destination/meta.json @@ -0,0 +1 @@ +{"a11y_NoEssentialInfoByColor": false, "a11y_NoTextIncludedInAnyImages": false, "bookInstanceId": "3f8c1a52-6d24-4b09-9e35-71c8a4d5e002", "suitableForMakingShells": false, "suitableForMakingTemplates": false, "suitableForVernacularLibrary": true, "bloomdVersion": 0, "experimental": false, "brandingProjectName": "Default", "nameLocked": false, "folio": false, "isRtl": false, "title": "Copy Destination", "allTitles": "{\"en\": \"Copy Destination\"}", "originalTitle": "Copy Destination", "BaseUrl": null, "isbn": "", "bookLineage": "", "license": "cc-by", "formatVersion": "2.1", "licenseNotes": null, "copyright": null, "credits": "", "tags": [], "pageCount": 0, "languages": [], "languageDescriptors": null, "summary": null, "allowUploadingToBloomLibrary": true, "draft": false, "bookletMakingIsAppropriate": true, "country": "United States", "province": "", "district": "", "tools": [], "currentTool": null, "toolboxIsOpen": false, "author": null, "publisher": null, "originalPublisher": null, "subjects": null, "hazards": null, "a11yFeatures": null, "a11yLevel": null, "a11yCertifier": null, "readingLevelDescription": null, "typicalAgeRange": null, "features": [], "page-number-style": "Decimal", "language-display-names": {"en": "English"}, "internetLimits": null, "use-original-copyright": false, "imported-book-source-url": null, "phashOfFirstContentImage": null} \ No newline at end of file diff --git a/collections/page-copy/Copy Destination/origami.css b/collections/page-copy/Copy Destination/origami.css new file mode 100644 index 0000000..45b3b5f --- /dev/null +++ b/collections/page-copy/Copy Destination/origami.css @@ -0,0 +1,341 @@ +/*! + +Split Pane v0.4.0 + +Copyright (c) 2014 Simon Hagström + +Released under the MIT license +https://raw.github.com/shagstrom/split-pane/master/LICENSE + +*/ +.split-pane { + position: relative; + height: 100%; + width: 100%; + overflow: hidden; +} + +.split-pane.fixed-top > .split-pane-component, +.split-pane.fixed-bottom > .split-pane-component, +.split-pane.horizontal-percent > .split-pane-component { + position: absolute; + left: 0; + width: 100%; + overflow: auto; + top: auto; + bottom: 0; + z-index: 1; +} + +/* nicescroll looks for position:absolute to find where to place its elements. + * For "Just Text" pages, the .split-pane > .split-pane-component element layers + * are omitted, so we need to add a rule to set position:absolute on the + * .split-pane-component-inner element. + * This prevents the strange behavior reported in BL-15093. + * Note that position:absolute causes padding of the parent to be ignored, so we + * have to set the top, left, right, and bottom to what would be the padding value + * in order to get the correct layout. We also really want to restrict this rule + * to only "Just Text" pages. The ":has()" pseudo-class does that since the "Just + * a Picture" page will not have an immediate child with a visible + * .bloom-translationGroup class. (BL-15611, BL-15720) + */ +.marginBox + > .split-pane-component-inner:has(> .bloom-translationGroup:not(.box-header-off)) { + position: absolute; + top: var(--marginBox-padding); + left: var(--marginBox-padding); + right: var(--marginBox-padding); + bottom: var(--marginBox-padding); + width: initial; + height: initial; +} + +.split-pane.fixed-top > .split-pane-component:first-child, +.split-pane.fixed-bottom > .split-pane-component:first-child, +.split-pane.horizontal-percent > .split-pane-component:first-child { + top: 0; + bottom: auto; +} + +.split-pane.fixed-top > .split-pane-divider, +.split-pane.fixed-bottom > .split-pane-divider, +.split-pane.horizontal-percent > .split-pane-divider { + position: absolute; + width: 100%; + left: 0; + cursor: ns-resize; + z-index: 2; + + /* JohnT mod: this extra padding makes it impossible to grab the crop control right above the split. + padding-bottom: 5px; /* this actually enlarges the target area for the user trying to find the splitter, without changing the layout of the page (because the position is absolute)*/ +} + +.split-pane.fixed-left > .split-pane-component, +.split-pane.fixed-right > .split-pane-component, +.split-pane.vertical-percent > .split-pane-component { + position: absolute; + top: 0; + height: 100%; + overflow: auto; + left: auto; + right: 0; + z-index: 1; +} + +.split-pane.fixed-left > .split-pane-component:first-child, +.split-pane.fixed-right > .split-pane-component:first-child, +.split-pane.vertical-percent > .split-pane-component:first-child { + left: 0; + right: auto; +} + +.split-pane.fixed-left > .split-pane-divider, +.split-pane.fixed-right > .split-pane-divider, +.split-pane.vertical-percent > .split-pane-divider { + position: absolute; + height: 100%; + top: 0; + cursor: ew-resize; + z-index: 2; +} + +.split-pane-resize-shim { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 10000; + display: none; +} + +.split-pane.fixed-left > .split-pane-resize-shim, +.split-pane.fixed-right > .split-pane-resize-shim, +.split-pane.vertical-percent > .split-pane-resize-shim { + cursor: ew-resize; +} + +.split-pane.fixed-top > .split-pane-resize-shim, +.split-pane.fixed-bottom > .split-pane-resize-shim, +.split-pane.horizontal-percent > .split-pane-resize-shim { + cursor: ns-resize; +} + +.split-pane > .split-pane-component { + overflow: hidden !important; +} +.split-pane.vertical-percent > .split-pane-component.position-left { + right: 50%; + margin-right: var(--side-by-side-gap); +} +.split-pane.vertical-percent > .split-pane-component.position-right { + width: 50%; +} +.split-pane.horizontal-percent > .split-pane-component.position-top { + bottom: 50%; + margin-bottom: var(--top-bottom-gap); +} +.split-pane.horizontal-percent > .split-pane-component.position-bottom { + height: 50%; +} +.split-pane-divider { + visibility: hidden; +} +.split-pane.vertical-percent > .vertical-divider { + right: 50%; + border-right: 3px dashed transparent; +} +.split-pane.horizontal-percent > .horizontal-divider { + bottom: 50%; + border-bottom: 3px dashed transparent; +} +.origami-controls { + position: absolute; + top: 0; + right: 0; + z-index: 20000; + height: 99%; + width: 99%; +} +.origami-controls .close { + font-weight: bold; +} +.origami-controls .button, +.origami-controls .origami-controls .button:visited { + display: inline-block; + text-decoration: none; + position: relative; + height: 20px; + width: 20px; + text-align: center; + color: #d2d2d2; + background-color: transparent; + line-height: 1em; + font-size: 18px; +} +.origami-controls .close-button-wrapper { + float: left; + padding: 5px; + position: absolute; + right: 0; + top: 0; +} +.origami-controls .vertical-adders { + left: 0; + position: absolute; + top: 10%; +} +.origami-controls .vertical-adders .button { + position: absolute; + left: 10px; +} +.origami-controls .vertical-adders .button.add-top { + top: 10px; +} +.origami-controls .vertical-adders .button.add-bottom { + bottom: 10px; +} +.origami-controls .vertical-adders .separator { + border-bottom: 3px #d2d2d2 dashed; + width: 100%; + position: absolute; + top: 50%; +} +.origami-controls .horizontal-adders { + bottom: 0; + right: 10%; + position: absolute; +} +.origami-controls .horizontal-adders .button { + position: absolute; + bottom: 10px; +} +.origami-controls .horizontal-adders .button.add-left { + left: 10px; +} +.origami-controls .horizontal-adders .button.add-right { + right: 10px; +} +.origami-controls .horizontal-adders .separator { + border-right: 3px #d2d2d2 dashed; + height: 100%; + position: absolute; + left: 50%; +} +.origami-controls .horizontal-adders > div { + float: left; +} +/* I wasn't convinced this was helpful... may return to it +.adders{ + transition-property: width, height; + transition-duration: 0.5s; +}*/ +.origami-controls .vertical-adders, +.origami-controls .horizontal-adders { + /* -background-color: lightgrey;rgba(0,0,0,.1) ;*/ +} +.split-pane-component-inner { + position: relative; + width: 100%; + height: 100%; + padding: 0px; + box-sizing: border-box; + transition-property: font-size; + transition-duration: 0.5s; + font-size: 12pt; +} +.container-selector-links { + display: none; +} +.container-textBox-id { + display: none; +} +.selector-links { + top: 45%; + text-align: center; +} +.selector-links a { + z-index: 50000; +} +.selector-links div { + display: inline; +} +.split-pane-component-inner { + container-type: size; + container-name: split-pane-component-inner; +} +.split-pane-component-inner .vertical-adders { + display: none; +} +.split-pane-component-inner .horizontal-adders { + display: none; +} +@container split-pane-component-inner (min-width: 60px) { + .horizontal-adders { + width: 70px; + height: 50px; + } +} +@container split-pane-component-inner (min-height: 60px) { + .vertical-adders { + width: 50px; + height: 70px; + } +} +@container split-pane-component-inner (min-width: 150px) and (min-height: 150px) { + .textBox-identifier { + transition-property: font-size; + transition-duration: 0.5s; + font-size: 24pt; + } +} +@container split-pane-component-inner (min-height: 250px) { + .vertical-adders { + height: 100px; + } + .horizontal-adders { + height: 100px; + } +} +@container split-pane-component-inner (min-width: 250px) { + .vertical-adders { + width: 100px; + } + .horizontal-adders { + width: 100px; + } +} +.origami-layout-mode { + /*the commented line below would also add it to an empty bloom-content1 for re-entry to layout mode*/ + /*but that would be problematic/confusing in a multilingual context*/ + /*.origami-layout-mode .split-pane-component-inner .bloom-editable.bloom-content1:empty:before,*/ + /* not setting z-index in the upper layer allows the adder buttons to be visible and active when the */ + /* cursor is over the "Text Box" text, but not when it is over the .formatButton gearbox icon. (BL-9176) */ +} +.origami-layout-mode .bloom-editable p { + color: #ececec !important; +} +.origami-layout-mode .bloom-editable p span { + background-color: unset !important; +} +.origami-layout-mode .origami-ui .adders { + display: none; +} +.origami-layout-mode .split-pane-component-inner .textBox-identifier { + /*content: "Text Box";*/ + color: #7e7e7e; + white-space: normal; + transition-property: font-size; + transition-duration: 0.5s; + text-align: center; + width: 100%; + position: absolute; + top: 45%; +} +.origami-layout-mode .split-pane-component-inner .textBox-identifier .formatButton { + z-index: 60000; + padding-left: 10px; + display: inline-flex; +} +/*# sourceMappingURL=origami.css.map */ +/*# sourceMappingURL=origami.css.map */ \ No newline at end of file diff --git a/collections/page-copy/Copy Destination/publish-settings.json b/collections/page-copy/Copy Destination/publish-settings.json new file mode 100644 index 0000000..363661c --- /dev/null +++ b/collections/page-copy/Copy Destination/publish-settings.json @@ -0,0 +1 @@ +{"audioVideo":{"pageTurnDelay":3000,"format":"facebook","motion":false,"playerSettings":"","pageRange":[]},"epub":{"howToPublishImageDescriptions":0,"removeFontSizes":false,"mode":"fixed"},"bloomPUB":{"motion":true,"textLangs":{},"audioLangs":{},"signLangs":{},"imageSettings":{"maxWidth":600,"maxHeight":600}},"bloomLibrary":{"textLangs":{"en":"IncludeByDefault"},"audioLangs":{"en":"IncludeByDefault"},"signLangs":{}}} \ No newline at end of file diff --git a/collections/page-copy/Copy Source/Copy Source.htm b/collections/page-copy/Copy Source/Copy Source.htm new file mode 100644 index 0000000..42b6369 --- /dev/null +++ b/collections/page-copy/Copy Source/Copy Source.htm @@ -0,0 +1,112 @@ + + + + + + + + Copy Source + + + + + + + + +
+
0
+
en
+
False
+
English
+

Copy Source

+
Copy Source
+
+ +
+
+ Custom +
+
+ +
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+

The crow sings while the bird watches.

+
+

+
+
+
+
+
+
+
+
+
+ +
+
+ Just Text +
+
+ +
+
+
+
+
+
+

An ordinary page, so the page under test is not the only one.

+
+

+
+
+
+
+
+
+
+
+

Nothing on this page is copied by the test.

+
+

+
+
+
+
+
+
+ + + diff --git a/collections/page-copy/Copy Source/appearance.css b/collections/page-copy/Copy Source/appearance.css new file mode 100644 index 0000000..e1babc5 --- /dev/null +++ b/collections/page-copy/Copy Source/appearance.css @@ -0,0 +1,249 @@ +/* From appearance-theme-default.css */ +/* This is the default theme, not only in the sense that it is the one we use by default for new books, + * but also in the sense that it is copied to the start of each appearance.css file. Thus, the values + * set in this initial .bloom-page block are defaults for EVERY page in EVERY book, and this block is + * intended to provide a default for EVERY variable controlled by the appearance system. + * Some of these values are overridden for certain page sizes by other rules in this file. + * Intentionally, those rules are not more specific than this one, they just come later in the file + * and win for that reason. + * The rules for any other theme are copied later than the ones from this file in appearance.css, + * so anything in those files with the same (or of course greater) specificity can override these. + * For example, page-margin-right is set to 12mm in a .bloom-page block early in this file. + * For an A4Landscape page, a later rule in this file overrides the .bloom-page rule and makes it 15mm. + * If the book uses the large margins theme, a .bloom-page rule in that file overrides it again to 25mm. + * The rounded border theme overrides it to 2.5mm for Device page sizes, using a different selector again. + * These rules all have the same specificity even though they have different selectors, so the last one wins. + * I don't much like depending on the order of rules like this, or having rules left in the + * generated appearance.css file that we know will never apply to anything. But I don't see a better way + * to get the desired results: + * - a default for every property here that applies to every page in every book in every theme + * - a way to override default property values for certain page sizes + * - a way to override for certain themes (either for all page sizes or by page-size) + * Note: variables here set to zero representing a distance should have some unit, since they may + * be used in calc() expressions. For example, 0px, 0mm, 0in are all valid. 0 as a multiplier is fine. +*/ +.bloom-page { + --topLevel-text-padding: 1em; + + /* display: value in .numberedPage:after to display the page number */ + --pageNumber-show: doShow-css-will-ignore-this-and-use-default; /* default is number displaying (the value is a self-documenting trick) */ + + /* font-size: value in .numberedPage:after to display the page number */ + --pageNumber-font-size: 11pt; + /* Either --pageNumber-top or --pageNumber-bottom should be set to a value, but not both. */ + /* bottom: value in .numberedPage:after to display the page number */ + --pageNumber-bottom: 15px; /* Based on experiment with 5mm unprintable area for desktop printers (tested using boxes in Acrobat). + /* top: value in .numberedPage:after to display the page number */ + --pageNumber-top: unset; + /* used for both height: and width: values in .numberedPage:after to display the page number. + * Values like 20mm or 20vmin are valid. */ + --pageNumber-background-width: unset; /* for when we need to have a colored background, e.g. a circle */ + /* background-color: value in .numberedPage:after to display the page number */ + --pageNumber-background-color: transparent; + /* color: value in .numberedPage:after to display the page number */ + --pageNumber-color: black; + --pageNumber-outline-color: white; + /* border-radius: value in .numberedPage:after to display the page number */ + --pageNumber-border-radius: 0px; + /* left: value in .numberedPage.side-left:after to display the page number */ + --pageNumber-left-margin: auto; + --pageNumber-extra-height: 0mm; + + /* Themes should set to 0 if the marginBox is a different color than the page background. This affects the text padding. + Note that we could eventually figure this out in code, and probably need to once we provide a UI for + setting the marginBox border or page background color. */ + --page-and-marginBox-are-same-color-multiplicand: 1; + + /* right: value in .numberedPage.side-right:after to display the page number + * If this is used, --pageNumber-always-left-margin should be set to unset (a keyword). + * Note that if used, this should be set the same value as --page-margin-right, which is + * what this default value achieves. */ + --pageNumber-right-margin: var(--page-margin-right); + + /* left: value in .numberedPage.side-right:after to display the page number */ + /* This allows the page number to always be on the left, regardless of page side. + * If this is used, --pageNumber-right-margin must be set to unset (a keyword). + * Valid values would include auto (a keyword), 5px, or 8%. + * The unset keyword removes having any value associated with this variable. */ + --pageNumber-always-left-margin: unset; + + /* background-color: value in .bloom-page when a theme wants a decorative shell behind the page surface */ + /* DO WE NEED THIS? --page-frame-color: unset;*/ + + /* background-color: value in .bloom-page */ + --page-background-color: white; + + /* padding-left: value in .split-pane.vertical-percent + * .split-pane-component.position-right .split-pane-component-inner > div */ + --page-verticalSplit-width: 3px; /* 3px is matching Bloom 5.6's right margin for vertical split */ + /* padding-top: value in .split-pane.horizontal-percent + * .split-pane-component.position-bottom .split-pane-component-inner > div */ + --page-horizontalSplit-height: 0px; + /* gap: value for .bloom-translationGroup */ + /* When Bloom is configured to show each block of text in more than one language, this controls + the space between the different language sections of each block. */ + --multilingual-editable-vertical-gap: 1em; + /* border-radius: value in .bloom-canvas (picture added by user to front cover or content page) */ + --image-border-radius: 0px; /* 0px is the default, but we want to be explicit about square corners */ + /* Most Bloom books are too small to need a gutter. NB: THIS MUST HAVE UNITS even when 0, else calc() fails */ + --page-gutter: 0mm; + + --page-margin: 12mm; + + /* padding-top: value in .bloom-page.outsideFrontCover and .bloom-page.outsideBackCover */ + /* same default value as --page-margin-top, but used for outside cover pages */ + --cover-margin-top: var(--page-margin); + /* padding-bottom: value in .bloom-page.outsideFrontCover and .bloom-page.outsideBackCover */ + /* same default value as --page-margin-bottom, but used for outside cover pages */ + --cover-margin-bottom: var(--page-margin); + /* padding-left: and padding-right: value in .bloom-page.outsideFrontCover and .bloom-page.outsideBackCover */ + --cover-margin-side: var( + --page-margin + ); /* same default value as --page-margin-left and --page-margin-right, but used for outside cover pages */ + /* display: value in .coverBottomBookTopic */ + --cover-topic-show: doShow-css-will-ignore-this-and-use-default; /* default is topic displaying (the value is a self-documenting trick) */ + /* display: value in .coverBottomLangName */ + --cover-languageName-show: doShow-css-will-ignore-this-and-use-defaultblock; /* default is language name displaying (the value is a self-documenting trick) */ + /* display: value in .cover .creditsRow */ + --cover-creditsRow-show: doShow-css-will-ignore-this-and-use-default; /* default is credits row displaying (the value is a self-documenting trick) */ + + /* background-color: value in .numberedPage .marginBox */ + /* This is not just for text boxes, but for everything inside the page margins. + (For example, the space between text boxes or the background of partly transparent images.) + It defaults to the page surface color rather than transparent, because in edit mode we set + the parent translationGroup color to show padding and still need the editable content area + itself to paint like the page surface. */ + --marginBox-background-color: var(--page-background-color); + /* padding: value in .numberedPage .marginBox */ + --marginBox-padding: 0px; + /* border-radius: value in .numberedPage .marginBox */ + --marginBox-border-radius: 0px; + /* border-color: value in .numberedPage .marginBox */ + --marginBox-border-color: black; + /* border-style: value in .numberedPage .marginBox */ + --marginBox-border-style: none; /* default is no border, but we want to be explicit. 'none' is a keyword. */ + /* border-width: value in .numberedPage .marginBox */ + --marginBox-border-width: medium; /* must not be 0px/0mm/0in to have a border. 'medium' is a keyword. */ + + /* In some themes, at edit- + time, the format button lands under the page number. See BL-13206. The name is is intentionally vague about direction and what we do with it. + Must have a unit: this feeds a calc() with px, where a unitless 0 makes the whole expression invalid (BL-14901). */ + --formatButton-pageNumber-dodge: 0px; +} + +/* this rule might not always be what we need for every kind of interactive page, but it's a good default. + E.g., it allows the blue of the Simple Choice to come through. */ +.bloom-page.bloom-interactive-page { + --marginBox-background-color: transparent; +} + +/* Beware of making these rules more specific. We want them to be able to be overridden by .bloom-page rules + * that come from other themes (and hence later in the generated appearance.css file). + */ +.A3Landscape, +.A3Portrait, +.A4Landscape, +.A4Portrait, +.B5Portrait, +.LetterLandscape, +.LetterPortrait, +.LegalLandscape, +.LegalLandscape { + --page-margin: 15mm; + --page-gutter: 10mm; +} +.HalfLetterPortrait,/* SIL Mexico says use same as A5 */ +.HalfLetterLandscape, +.A5Landscape, +.A5Portrait, +.Size6x9Landscape, +.Size6x9Portrait, +.USComicPortrait { + --page-margin: 12mm; +} +.QuarterLetterPortrait, +.QuarterLetterLandscape, +.A6Portrait, +.A6Landscape { + --page-margin: 10mm; +} +.Cm13Landscape { + --page-margin: 5mm; +} +.bloom-page[class*="Ebook"], +.bloom-page[class*="Device"] { + --page-margin: 10px; +} + +.bloom-page[class*="Ebook"], +.bloom-page[class*="Device"], +.bloomPlayer-page .bloom-page { + /* Deliberately set both of these, which combines with a special device/bloom-player rule + * in basePage.less which sets both left and right margin to auto, and we get + * centered as the default for device/bloom-player pages. (To override this, you need to + * set the margin you don't want to something like "deliberately-invalid".)*/ + --pageNumber-right-margin: 0px; + --pageNumber-always-left-margin: 0px; +} + +.numberedPage[class*="Ebook"], +.numberedPage[class*="Device"] { + /* These page sizes have small margins, so we need extra height on numbered ones. + (Note that this disappears if page numbers are turned off, because --pageNumber-show-multiplicand is 0.) */ + --pageNumber-extra-height: 8mm !important; +} + +/* We need a small margin (above) for xmatter pages (e.g., Robots Mali credits page, + * especially in landscape, comment in BL-13002). + * But we need more on numbered pages, so we can fit the page number. + * This unfortunately breaks our rule about keeping the specificity at one class so that + * the settings dialog can override. But currently we don't expect to make page margins + * a book setting, so for now we're OK.*/ +/*.numberedPage.Device16x9Portrait, +.numberedPage.Device16x9Landscape { + --page-margin-bottom: 45px; /* need room for page number, so not as small as others +}*/ + +/* classes are doubled in this rule because it needs to beat the one above that sets the + * bottom margin for numbered pages in Device page sizes. This makes it equally specific + * and thus the last one wins. */ +.no-margin-page.no-margin-page, +.comic.comic { + --page-margin-top: 0px; + --page-margin-bottom: 0px; + --page-margin-right: 0px; + --page-margin-left: 0px; + --pageNumber-font-size: 0px; /* review will this work to hide it? */ + --pageNumber-show-multiplicand: 0; /* no extra space for suppressed page number */ + --pageNumber-extra-height: 0mm !important; +} + +/***************************************************************************** + * These variables / rules are for xmatter pages. + */ +.bloom-frontMatter, +.bloom-backMatter { + --MarginBetweenXMatterBlocks: 2em; + --MarginBetweenXMatterMinorItems: 5px; + --DefaultCoverTitle1FontSize: 25pt; + --DefaultCoverTitle2FontSize: 12pt; + /* Same as our ordinary default, but we have to set it explicitly because of a trick + that copies the DefaultCoverTitle1FontSize to the translationGroup. */ + --DefaultCoverTitle3FontSize: 10pt; +} + +/* From this book's appearance settings */ +.bloom-page { + --pageNumber-show-multiplicand: 1; + --cover-creditsRow-show: doShow-css-will-ignore-this-and-use-default; + --cover-title-L1-show: doShow-css-will-ignore-this-and-use-default; + --cover-title-L2-show: doShow-css-will-ignore-this-and-use-default; + --cover-title-L3-show: none; + --cover-topic-show: doShow-css-will-ignore-this-and-use-default; + --cover-languageName-show: doShow-css-will-ignore-this-and-use-default; + --pageNumber-show: doShow-css-will-ignore-this-and-use-default; + --pageNumber-left-margin-override: unset; + --pageNumber-right-margin-override: unset; + --cover-background-color: #c6c6c6; +} + diff --git a/collections/page-copy/Copy Source/appearance.json b/collections/page-copy/Copy Source/appearance.json new file mode 100644 index 0000000..d3fd107 --- /dev/null +++ b/collections/page-copy/Copy Source/appearance.json @@ -0,0 +1,15 @@ +{ + "cssThemeName": "default", + "fullBleed": false, + "pageNumber-position": "automatic", + "cover-creditsRow-show": true, + "cover-title-L1-show": true, + "cover-title-L2-show": true, + "cover-title-L3-show": false, + "cover-topic-show": true, + "cover-languageName-show": true, + "pageNumber-show": true, + "pageNumber-left-margin-override": "unset", + "pageNumber-right-margin-override": "unset", + "cover-background-color": "#c6c6c6" +} \ No newline at end of file diff --git a/collections/page-copy/Copy Source/audio/i77c18c83-0224-405f-bb97-70d32078855c.mp3 b/collections/page-copy/Copy Source/audio/i77c18c83-0224-405f-bb97-70d32078855c.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..eb16c01206fa46a586507b62f85829335d9eb10b GIT binary patch literal 17762 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 R-Bgq21_qWv=0=j70|3P*3pW4& literal 0 HcmV?d00001 diff --git a/collections/page-copy/Copy Source/bird.png b/collections/page-copy/Copy Source/bird.png new file mode 100644 index 0000000000000000000000000000000000000000..d84da683c87974a8c3a536cf45940772397bd096 GIT binary patch literal 6484 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 literal 0 HcmV?d00001 diff --git a/collections/page-copy/Copy Source/branding.css b/collections/page-copy/Copy Source/branding.css new file mode 100644 index 0000000..d1c94da --- /dev/null +++ b/collections/page-copy/Copy Source/branding.css @@ -0,0 +1,93 @@ +/*{ + label: "default branding"; + compatibleWithAppearanceVersion: 6.0; +}*/ +/***** +Note the following division of labor: +Rules that place branding on an xmatter page belong in bloom-xmatter-commons.less or the stylesheet of a particular xmatter. +Rules that format the branding go in branding-base.less, or in the branding.less of a particular branding. +****/ +[data-book*="branding"] { + display: flex; + flex-direction: column; +} +[data-book*="branding"] img { + margin-left: auto; + margin-right: auto; + width: auto; + max-width: 100%; + align-self: center; + object-fit: contain; +} +[data-book="outside-back-cover-branding-bottom-html"] { + width: 100%; +} +/* these rules allow different branding insertions depending on orientation */ +.portraitOnly, +.landscapeOnly { + display: none; +} +.Size6x9Portrait .portraitOnly, +.USComicPortrait .portraitOnly, +.Device16x9Portrait .portraitOnly, +.QuarterLetterPortrait .portraitOnly, +.HalfLetterPortrait .portraitOnly, +.LetterPortrait .portraitOnly, +.LegalPortrait .portraitOnly, +.A3Portrait .portraitOnly, +.A4Portrait .portraitOnly, +.A5Portrait .portraitOnly, +.B5Portrait .portraitOnly, +.A6Portrait .portraitOnly { + display: unset; +} +.Size6x9Landscape .landscapeOnly, +.Cm13Landscape .landscapeOnly, +.Device16x9Landscape .landscapeOnly, +.LetterLandscape .landscapeOnly, +.LegalLandscape .landscapeOnly, +.A3Landscape .landscapeOnly, +.A4Landscape .landscapeOnly, +.A5Landscape .landscapeOnly, +.A6Landscape .landscapeOnly { + display: unset; +} +.bloom-branding-wrapper { + border: 5px solid #d65649; + background-color: white; + border-radius: 8px; + width: fit-content; + max-width: 100%; + margin-left: auto; + margin-right: auto; +} +.bloom-branding-wrapper img.branding { + width: 4.7cm; + padding: 10px; + box-sizing: border-box; + vertical-align: top; +} +.bloom-branding-wrapper .bloom-qrcode { + width: 2.8cm; + padding: 10px; + box-sizing: border-box; +} +.bloom-branding-wrapper .bloom-lang-on-blorg { + font-size: 9pt; + line-height: 1.2; + width: 100%; + box-sizing: border-box; + margin-left: 12px; + margin-right: 10px; + margin-bottom: 10px; + max-width: 7cm; +} +.bloom-branding-wrapper .bloom-lang-on-blorg .bloom-blorg-url { + color: #d65649; + font-weight: bold; +} +.bloom-page.bloom-customLayout[data-custom-layout-id] .marginBox .bloom-translationGroup:not(.bloom-imageDescription) { + display: flex !important; +} +/*# sourceMappingURL=branding.css.map */ +/*# sourceMappingURL=branding.css.map */ \ No newline at end of file diff --git a/collections/page-copy/Copy Source/defaultLangStyles.css b/collections/page-copy/Copy Source/defaultLangStyles.css new file mode 100644 index 0000000..285d600 --- /dev/null +++ b/collections/page-copy/Copy Source/defaultLangStyles.css @@ -0,0 +1,29 @@ +@font-face { font-family: ABeeZee; src: url(./host/fonts/ABeeZee-Regular.woff2); } +@font-face { font-family: ABeeZee; font-style: italic; src: url(./host/fonts/ABeeZee-Italic.woff2); } +@font-face { font-family: Andika; src: url(./host/fonts/Andika-Regular.woff2); } +@font-face { font-family: Andika; font-weight: bold; src: url(./host/fonts/Andika-Bold.woff2); } +@font-face { font-family: Andika; font-style: italic; src: url(./host/fonts/Andika-Italic.woff2); } +@font-face { font-family: Andika; font-weight: bold; font-style: italic; src: url(./host/fonts/Andika-BoldItalic.woff2); } +@font-face { font-family: "Andika New Basic"; font-weight: normal; font-style: normal; src: url("./host/fonts/Andika New Basic"); } +@font-face { font-family: "Andika New Basic"; font-weight: bold; font-style: normal; src: url("./host/fonts/Andika New Basic Bold"); } +@font-face { font-family: "Andika New Basic"; font-weight: normal; font-style: italic; src: url("./host/fonts/Andika New Basic Italic"); } +@font-face { font-family: "Andika New Basic"; font-weight: bold; font-style: italic; src: url("./host/fonts/Andika New Basic Bold Italic") ; } +/* *** DO NOT EDIT! *** These styles are controlled by the Settings dialog box in Bloom. */ +/* They may be over-ridden by rules in customCollectionStyles.css, appearance.css or customBookStyles[2].css */ + +.numberedPage::after +{ + font-family: 'Andika'; + direction: ltr; +} + +[lang='en'] +{ + font-family: 'Andika'; + direction: ltr; +} + +.bloom-page:not(.bloom-frontMatter):not(.bloom-backMatter) [lang='*'] +{ + font-family: 'Andika'; +} diff --git a/collections/page-copy/Copy Source/meta.json b/collections/page-copy/Copy Source/meta.json new file mode 100644 index 0000000..ba7c7fc --- /dev/null +++ b/collections/page-copy/Copy Source/meta.json @@ -0,0 +1 @@ +{"a11y_NoEssentialInfoByColor": false, "a11y_NoTextIncludedInAnyImages": false, "bookInstanceId": "3f8c1a52-6d24-4b09-9e35-71c8a4d5e001", "suitableForMakingShells": false, "suitableForMakingTemplates": false, "suitableForVernacularLibrary": true, "bloomdVersion": 0, "experimental": false, "brandingProjectName": "Default", "nameLocked": false, "folio": false, "isRtl": false, "title": "Copy Source", "allTitles": "{\"en\": \"Copy Source\"}", "originalTitle": "Copy Source", "BaseUrl": null, "isbn": "", "bookLineage": "", "license": "cc-by", "formatVersion": "2.1", "licenseNotes": null, "copyright": null, "credits": "", "tags": [], "pageCount": 0, "languages": [], "languageDescriptors": null, "summary": null, "allowUploadingToBloomLibrary": true, "draft": false, "bookletMakingIsAppropriate": true, "country": "United States", "province": "", "district": "", "tools": [], "currentTool": null, "toolboxIsOpen": false, "author": null, "publisher": null, "originalPublisher": null, "subjects": null, "hazards": null, "a11yFeatures": null, "a11yLevel": null, "a11yCertifier": null, "readingLevelDescription": null, "typicalAgeRange": null, "features": [], "page-number-style": "Decimal", "language-display-names": {"en": "English"}, "internetLimits": null, "use-original-copyright": false, "imported-book-source-url": null, "phashOfFirstContentImage": null} \ No newline at end of file diff --git a/collections/page-copy/Copy Source/origami.css b/collections/page-copy/Copy Source/origami.css new file mode 100644 index 0000000..45b3b5f --- /dev/null +++ b/collections/page-copy/Copy Source/origami.css @@ -0,0 +1,341 @@ +/*! + +Split Pane v0.4.0 + +Copyright (c) 2014 Simon Hagström + +Released under the MIT license +https://raw.github.com/shagstrom/split-pane/master/LICENSE + +*/ +.split-pane { + position: relative; + height: 100%; + width: 100%; + overflow: hidden; +} + +.split-pane.fixed-top > .split-pane-component, +.split-pane.fixed-bottom > .split-pane-component, +.split-pane.horizontal-percent > .split-pane-component { + position: absolute; + left: 0; + width: 100%; + overflow: auto; + top: auto; + bottom: 0; + z-index: 1; +} + +/* nicescroll looks for position:absolute to find where to place its elements. + * For "Just Text" pages, the .split-pane > .split-pane-component element layers + * are omitted, so we need to add a rule to set position:absolute on the + * .split-pane-component-inner element. + * This prevents the strange behavior reported in BL-15093. + * Note that position:absolute causes padding of the parent to be ignored, so we + * have to set the top, left, right, and bottom to what would be the padding value + * in order to get the correct layout. We also really want to restrict this rule + * to only "Just Text" pages. The ":has()" pseudo-class does that since the "Just + * a Picture" page will not have an immediate child with a visible + * .bloom-translationGroup class. (BL-15611, BL-15720) + */ +.marginBox + > .split-pane-component-inner:has(> .bloom-translationGroup:not(.box-header-off)) { + position: absolute; + top: var(--marginBox-padding); + left: var(--marginBox-padding); + right: var(--marginBox-padding); + bottom: var(--marginBox-padding); + width: initial; + height: initial; +} + +.split-pane.fixed-top > .split-pane-component:first-child, +.split-pane.fixed-bottom > .split-pane-component:first-child, +.split-pane.horizontal-percent > .split-pane-component:first-child { + top: 0; + bottom: auto; +} + +.split-pane.fixed-top > .split-pane-divider, +.split-pane.fixed-bottom > .split-pane-divider, +.split-pane.horizontal-percent > .split-pane-divider { + position: absolute; + width: 100%; + left: 0; + cursor: ns-resize; + z-index: 2; + + /* JohnT mod: this extra padding makes it impossible to grab the crop control right above the split. + padding-bottom: 5px; /* this actually enlarges the target area for the user trying to find the splitter, without changing the layout of the page (because the position is absolute)*/ +} + +.split-pane.fixed-left > .split-pane-component, +.split-pane.fixed-right > .split-pane-component, +.split-pane.vertical-percent > .split-pane-component { + position: absolute; + top: 0; + height: 100%; + overflow: auto; + left: auto; + right: 0; + z-index: 1; +} + +.split-pane.fixed-left > .split-pane-component:first-child, +.split-pane.fixed-right > .split-pane-component:first-child, +.split-pane.vertical-percent > .split-pane-component:first-child { + left: 0; + right: auto; +} + +.split-pane.fixed-left > .split-pane-divider, +.split-pane.fixed-right > .split-pane-divider, +.split-pane.vertical-percent > .split-pane-divider { + position: absolute; + height: 100%; + top: 0; + cursor: ew-resize; + z-index: 2; +} + +.split-pane-resize-shim { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 10000; + display: none; +} + +.split-pane.fixed-left > .split-pane-resize-shim, +.split-pane.fixed-right > .split-pane-resize-shim, +.split-pane.vertical-percent > .split-pane-resize-shim { + cursor: ew-resize; +} + +.split-pane.fixed-top > .split-pane-resize-shim, +.split-pane.fixed-bottom > .split-pane-resize-shim, +.split-pane.horizontal-percent > .split-pane-resize-shim { + cursor: ns-resize; +} + +.split-pane > .split-pane-component { + overflow: hidden !important; +} +.split-pane.vertical-percent > .split-pane-component.position-left { + right: 50%; + margin-right: var(--side-by-side-gap); +} +.split-pane.vertical-percent > .split-pane-component.position-right { + width: 50%; +} +.split-pane.horizontal-percent > .split-pane-component.position-top { + bottom: 50%; + margin-bottom: var(--top-bottom-gap); +} +.split-pane.horizontal-percent > .split-pane-component.position-bottom { + height: 50%; +} +.split-pane-divider { + visibility: hidden; +} +.split-pane.vertical-percent > .vertical-divider { + right: 50%; + border-right: 3px dashed transparent; +} +.split-pane.horizontal-percent > .horizontal-divider { + bottom: 50%; + border-bottom: 3px dashed transparent; +} +.origami-controls { + position: absolute; + top: 0; + right: 0; + z-index: 20000; + height: 99%; + width: 99%; +} +.origami-controls .close { + font-weight: bold; +} +.origami-controls .button, +.origami-controls .origami-controls .button:visited { + display: inline-block; + text-decoration: none; + position: relative; + height: 20px; + width: 20px; + text-align: center; + color: #d2d2d2; + background-color: transparent; + line-height: 1em; + font-size: 18px; +} +.origami-controls .close-button-wrapper { + float: left; + padding: 5px; + position: absolute; + right: 0; + top: 0; +} +.origami-controls .vertical-adders { + left: 0; + position: absolute; + top: 10%; +} +.origami-controls .vertical-adders .button { + position: absolute; + left: 10px; +} +.origami-controls .vertical-adders .button.add-top { + top: 10px; +} +.origami-controls .vertical-adders .button.add-bottom { + bottom: 10px; +} +.origami-controls .vertical-adders .separator { + border-bottom: 3px #d2d2d2 dashed; + width: 100%; + position: absolute; + top: 50%; +} +.origami-controls .horizontal-adders { + bottom: 0; + right: 10%; + position: absolute; +} +.origami-controls .horizontal-adders .button { + position: absolute; + bottom: 10px; +} +.origami-controls .horizontal-adders .button.add-left { + left: 10px; +} +.origami-controls .horizontal-adders .button.add-right { + right: 10px; +} +.origami-controls .horizontal-adders .separator { + border-right: 3px #d2d2d2 dashed; + height: 100%; + position: absolute; + left: 50%; +} +.origami-controls .horizontal-adders > div { + float: left; +} +/* I wasn't convinced this was helpful... may return to it +.adders{ + transition-property: width, height; + transition-duration: 0.5s; +}*/ +.origami-controls .vertical-adders, +.origami-controls .horizontal-adders { + /* -background-color: lightgrey;rgba(0,0,0,.1) ;*/ +} +.split-pane-component-inner { + position: relative; + width: 100%; + height: 100%; + padding: 0px; + box-sizing: border-box; + transition-property: font-size; + transition-duration: 0.5s; + font-size: 12pt; +} +.container-selector-links { + display: none; +} +.container-textBox-id { + display: none; +} +.selector-links { + top: 45%; + text-align: center; +} +.selector-links a { + z-index: 50000; +} +.selector-links div { + display: inline; +} +.split-pane-component-inner { + container-type: size; + container-name: split-pane-component-inner; +} +.split-pane-component-inner .vertical-adders { + display: none; +} +.split-pane-component-inner .horizontal-adders { + display: none; +} +@container split-pane-component-inner (min-width: 60px) { + .horizontal-adders { + width: 70px; + height: 50px; + } +} +@container split-pane-component-inner (min-height: 60px) { + .vertical-adders { + width: 50px; + height: 70px; + } +} +@container split-pane-component-inner (min-width: 150px) and (min-height: 150px) { + .textBox-identifier { + transition-property: font-size; + transition-duration: 0.5s; + font-size: 24pt; + } +} +@container split-pane-component-inner (min-height: 250px) { + .vertical-adders { + height: 100px; + } + .horizontal-adders { + height: 100px; + } +} +@container split-pane-component-inner (min-width: 250px) { + .vertical-adders { + width: 100px; + } + .horizontal-adders { + width: 100px; + } +} +.origami-layout-mode { + /*the commented line below would also add it to an empty bloom-content1 for re-entry to layout mode*/ + /*but that would be problematic/confusing in a multilingual context*/ + /*.origami-layout-mode .split-pane-component-inner .bloom-editable.bloom-content1:empty:before,*/ + /* not setting z-index in the upper layer allows the adder buttons to be visible and active when the */ + /* cursor is over the "Text Box" text, but not when it is over the .formatButton gearbox icon. (BL-9176) */ +} +.origami-layout-mode .bloom-editable p { + color: #ececec !important; +} +.origami-layout-mode .bloom-editable p span { + background-color: unset !important; +} +.origami-layout-mode .origami-ui .adders { + display: none; +} +.origami-layout-mode .split-pane-component-inner .textBox-identifier { + /*content: "Text Box";*/ + color: #7e7e7e; + white-space: normal; + transition-property: font-size; + transition-duration: 0.5s; + text-align: center; + width: 100%; + position: absolute; + top: 45%; +} +.origami-layout-mode .split-pane-component-inner .textBox-identifier .formatButton { + z-index: 60000; + padding-left: 10px; + display: inline-flex; +} +/*# sourceMappingURL=origami.css.map */ +/*# sourceMappingURL=origami.css.map */ \ No newline at end of file diff --git a/collections/page-copy/Copy Source/publish-settings.json b/collections/page-copy/Copy Source/publish-settings.json new file mode 100644 index 0000000..363661c --- /dev/null +++ b/collections/page-copy/Copy Source/publish-settings.json @@ -0,0 +1 @@ +{"audioVideo":{"pageTurnDelay":3000,"format":"facebook","motion":false,"playerSettings":"","pageRange":[]},"epub":{"howToPublishImageDescriptions":0,"removeFontSizes":false,"mode":"fixed"},"bloomPUB":{"motion":true,"textLangs":{},"audioLangs":{},"signLangs":{},"imageSettings":{"maxWidth":600,"maxHeight":600}},"bloomLibrary":{"textLangs":{"en":"IncludeByDefault"},"audioLangs":{"en":"IncludeByDefault"},"signLangs":{}}} \ No newline at end of file diff --git a/collections/page-copy/Copy Source/video/pagecopy.mp4 b/collections/page-copy/Copy Source/video/pagecopy.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..6f906c19c2ba46c82acba0e90ae2f4e92d8385c1 GIT binary patch literal 5514 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 + + 5b1f6d4a-9c02-4f3e-8a71-2d6c0e9b4477 + English + false + en + Andika + false + 0 + false + 0 + English + false + en + Andika + false + 0 + false + 0 + + false + + Andika + false + 0 + false + 0 + + false + + 1 + Factory + Decimal + Default + + United States + + + True + Sentence + 40 + 200 + + True + True + #B0DEE4 + + + + #c6c6c6 #6d6d6d + \ No newline at end of file diff --git a/manifest.json b/manifest.json index a895617..0044d60 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,16 @@ "collections": { "basic": { "purpose": "Two minimal books (A5 Portrait, 16x9 Landscape) with reference screenshots, used for visual regression across brandings and themes.", - "usedBy": ["BloomDesktop src/BloomVisualRegressionTests"], + "usedBy": [ + "BloomDesktop src/BloomVisualRegressionTests" + ], + "automation": "automated" + }, + "page-copy": { + "purpose": "Two books for the copy-page e2e test: \"Copy Source\", whose first content page carries a custom style, an image, a Talking Book recording, a video and a custom origami layout, and \"Copy Destination\", an ordinary book the page is pasted into.", + "usedBy": [ + "BloomDesktop src/BloomE2E" + ], "automation": "automated" } }