Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RISDEV-4460 improve rendering of element structure #519

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
266 changes: 160 additions & 106 deletions frontend/src/components/RisModForm.vue
Original file line number Diff line number Diff line change
Expand Up @@ -342,8 +342,6 @@ const sentryTraceId = useSentryTraceId()
akn:article-aria-label="article"
akn:paragraph-aria-label="paragraph"
akn:list-aria-label="list"
akn:document-ref-aria-label="document ref"
akn:component-ref-aria-label="component ref"
akn:point-aria-label="point"
akn:wrap-up-aria-label="wrap up"
akn:foreign-aria-label="foreign"
Expand Down Expand Up @@ -376,8 +374,6 @@ const sentryTraceId = useSentryTraceId()
@click:akn:subtitle="handleAknElementClick"
@click:akn:article="handleAknElementClick"
@click:akn:paragraph="handleAknElementClick"
@click:akn:document-ref="handleAknElementClick"
@click:akn:component-ref="handleAknElementClick"
@click:akn:point="handleAknElementClick"
@click:akn:wrap-up="handleAknElementClick"
@click:akn:foreign="handleAknElementClick"
Expand Down Expand Up @@ -476,206 +472,264 @@ const sentryTraceId = useSentryTraceId()
</template>

<style scoped>
:deep([class^="akn-"]):before,
:deep([class^="akn-"]):after {
@apply border border-solid border-gray-500 bg-gray-300 px-2;
}
:deep(
:is(
.akn-article,
.akn-block,
.akn-blockContainer,
.akn-book,
.akn-chapter,
.akn-citations,
.akn-foreign,
.akn-heading,
.akn-list,
.akn-longTitle,
.akn-num,
.akn-ol,
.akn-p,
.akn-paragraph,
.akn-part,
.akn-point,
.akn-recital,
.akn-recitals,
.akn-section,
.akn-subchapter,
.akn-subsection,
.akn-subtitle,
.akn-table,
.akn-tblock,
.akn-td,
.akn-th,
.akn-title,
.akn-toc,
.akn-tocItem,
.akn-tr,
.akn-ul,
.akn-wrapUp
)
) {
@apply block min-w-min rounded border border-dashed border-highlight-elementSelect-default-border p-8;

:deep(&):before {
@apply ds-label-03-reg block px-2 pb-8 text-start font-[monospace] text-[#4E596A];
}

/**
* Special styling to place akn:num and the element following it in the same row.
* Sometimes the akn:num and a akn:heading are placed within a h1,h2,h3,...-tag. We also want to place them in the same row.
*
* The selector selects all elements that have a akn:num as first child.
*/
:deep(&:has(> :is(.akn-num))),
:deep(& > :is(h1, h2, h3, h4, h5):has(> :is(.akn-num))) {
@apply grid grid-cols-[min-content,1fr] gap-8;

/* before part of the element that includes the akn:num */
:deep(&):before {
@apply col-span-full;
}

/* the akn:num element */
:deep(& > :nth-child(1)) {
@apply col-span-1 col-start-1 h-full;
}

/* the part directly after the akn:num element, typically a akn:heading */
:deep(& > :nth-child(2)) {
@apply col-span-1 col-start-2 h-full;
}

/* all direct child elements */

:deep(& > *) {
@apply col-span-full;
}
}

:deep(&.selected) {
@apply border-2 border-solid border-highlight-elementSelect-selected-border bg-highlight-elementSelect-selected-background;

:deep(&):before {
@apply ds-label-03-bold text-black;
}
}

:deep([class^="akn-"]):before {
border-radius: 0.375rem 0 0 0.375rem;
border-right: none;
/* The most deeply nested element that is currently hovered and not selected */
:deep(&):hover:not(:has([class^="akn-"]:hover)):not(.selected) {
@apply border-2 border-highlight-elementSelect-hover-border bg-highlight-elementSelect-hover-background;
}

/* Add a small gap behind all elements that are not the last child element of their parent */

:deep(:is(&, & > :is(h1, h2, h3, h4, h5)):not(:is(:last-child))) {
@apply mb-8 mr-0;
}
}

:deep([class^="akn-"]):after {
border-radius: 0 0.375rem 0.375rem 0;
border-left: none;
:deep(
:is(
/* inline elements without akn:num */
.akn-a,
.akn-abbr,
.akn-affectedDocument,
.akn-authorialNote,
.akn-b,
.akn-br,
.akn-date,
.akn-documentRef,
.akn-componentRef,
.akn-eol,
.akn-eop,
.akn-i,
.akn-img,
.akn-inline,
.akn-location,
.akn-marker,
.akn-organization,
.akn-person,
.akn-quotedText,
.akn-ref,
.akn-relatedDocument,
.akn-role,
.akn-rref,
.akn-session,
.akn-shortTitle,
.akn-span,
.akn-sub,
.akn-sup,
.akn-u
)
) {
:deep(&):not(:empty) {
@apply inline border border-highlight-elementSelect-hover-border bg-highlight-elementSelect-hover-background;
}
}

:deep(.akn-longTitle):before,
:deep(.akn-longTitle):after {
:deep(.akn-longTitle):before {
content: "long title";
}

:deep(.akn-citations):before,
:deep(.akn-citations):after {
:deep(.akn-citations):before {
content: "citations";
}

:deep(.akn-recitals):before,
:deep(.akn-recitals):after {
:deep(.akn-recitals):before {
content: "recitals";
}

:deep(.akn-recital):before,
:deep(.akn-recital):after {
:deep(.akn-recital):before {
content: "recital";
}

:deep(.akn-blockContainer):before,
:deep(.akn-blockContainer):after {
:deep(.akn-blockContainer):before {
content: "block container";
}

:deep(.akn-book):before,
:deep(.akn-book):after {
:deep(.akn-book):before {
content: "book";
}

:deep(.akn-part):before,
:deep(.akn-part):after {
:deep(.akn-part):before {
content: "part";
}

:deep(.akn-chapter):before,
:deep(.akn-chapter):after {
:deep(.akn-chapter):before {
content: "chapter";
}

:deep(.akn-subchapter):before,
:deep(.akn-subchapter):after {
:deep(.akn-subchapter):before {
content: "subchapter";
}

:deep(.akn-section):before,
:deep(.akn-section):after {
:deep(.akn-section):before {
content: "section";
}

:deep(.akn-subsection):before,
:deep(.akn-subsection):after {
:deep(.akn-subsection):before {
content: "subsection";
}

:deep(.akn-title):before,
:deep(.akn-title):after {
:deep(.akn-title):before {
content: "title";
}

:deep(.akn-subtitle):before,
:deep(.akn-subtitle):after {
:deep(.akn-subtitle):before {
content: "subtitle";
}

:deep(.akn-article):before,
:deep(.akn-article):after {
:deep(.akn-article):before {
content: "article";
}

:deep(.akn-paragraph):before,
:deep(.akn-paragraph):after {
:deep(.akn-paragraph):before {
content: "paragraph";
}

:deep(.akn-list):before,
:deep(.akn-list):after {
:deep(.akn-list):before {
content: "list";
}

:deep(.akn-documentRef):before,
:deep(.akn-documentRef):after {
content: "document ref";
}

:deep(.akn-componentRef):before,
:deep(.akn-componentRef):after {
content: "component ref";
}

:deep(.akn-point):before,
:deep(.akn-point):after {
:deep(.akn-point):before {
content: "point";
}

:deep(.akn-wrapUp):before,
:deep(.akn-wrapUp):after {
:deep(.akn-wrapUp):before {
content: "wrap up";
}

:deep(.akn-foreign):before,
:deep(.akn-foreign):after {
:deep(.akn-foreign):before {
content: "foreign";
}

:deep(.akn-tblock):before,
:deep(.akn-tblock):after {
:deep(.akn-tblock):before {
content: "tblock";
}

:deep(.akn-toc):before,
:deep(.akn-toc):after {
:deep(.akn-toc):before {
content: "toc";
}

:deep(.akn-tocItem):before,
:deep(.akn-tocItem):after {
:deep(.akn-tocItem):before {
content: "toc item";
}

:deep(.akn-p):before,
:deep(.akn-p):after {
:deep(.akn-p):before {
content: "p";
}

:deep(.akn-block):before,
:deep(.akn-block):after {
:deep(.akn-block):before {
content: "block";
}

:deep(.akn-num):before,
:deep(.akn-num):after {
:deep(.akn-num):before {
content: "num";
}

:deep(.akn-heading):before,
:deep(.akn-heading):after {
:deep(.akn-heading):before {
content: "heading";
}

:deep(.akn-td):before,
:deep(.akn-td):after {
:deep(.akn-td):before {
content: "td";
}

:deep(.akn-th):before,
:deep(.akn-th):after {
:deep(.akn-th):before {
content: "th";
}

:deep(.akn-tr):before,
:deep(.akn-tr):after {
:deep(.akn-tr):before {
content: "tr";
}

:deep(.akn-ol):before,
:deep(.akn-ol):after {
:deep(.akn-ol):before {
content: "ol";
}

:deep(.akn-ul):before,
:deep(.akn-ul):after {
:deep(.akn-ul):before {
content: "ul";
}

:deep(.akn-table):before,
:deep(.akn-table):after {
:deep(.akn-table):before {
content: "table";
}

:deep([class^="akn-"]:hover):not(:has([class^="akn-"]:hover)) {
@apply border-highlight-quotedStructure-hover-border bg-highlight-quotedStructure-hover-background;
}

:deep([class^="akn-"]:hover):not(:has([class^="akn-"]:hover)):before,
:deep([class^="akn-"]:hover):not(:has([class^="akn-"]:hover)):after {
@apply border-highlight-quotedStructure-hover-innerHover-border bg-highlight-quotedStructure-hover-innerHover-background;
}

:deep([class^="akn-"].selected) {
@apply border-highlight-quotedStructure-hover-border bg-highlight-quotedStructure-selected-content;
}

:deep([class^="akn-"].selected):before,
:deep([class^="akn-"].selected):after {
@apply border-highlight-quotedStructure-selected-pseudo-border bg-highlight-quotedStructure-selected-pseudo-background;
}
</style>
Loading