From 44c5009e6b82ab7474fda03e18a8f7add1297f34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martynas=20Jusevi=C4=8Dius?= Date: Mon, 27 Jul 2026 02:14:06 +0300 Subject: [PATCH 1/6] Replace WYMEditor with the RDFa editor for XMLLiteral editing - vendor the RDFa editor XSLT modules under xsl/rdfa-editor/ (synced from the RDFa-Editor repo) and import them from client.xsl - render XMLLiteral form controls as editable div.rdfa-editor-content regions with hidden ol/lt inputs (imports/default.xsl) - create the editor state container in the client main template; full chrome bring-up on the first region, per-region init afterwards via the upstream local:init-editor/local:init-region seams (form.xsl) - serialize canonicalized editor content into the ol input in ldh:FormPreSubmit - run the ldh:FormPreSubmit pass before ldh:parse-rdf-post in the block POST and generic row-form submit handlers (previously the param defaults parsed the inputs before the pass could sync them, dropping the empty ol and tripping the ldh:XHTML MissingValue constraint) and canonicalize XMLLiterals in the request body (block.xsl, form.xsl) - chain body onmousemove to the editor's sweep-selection tracker which it shadowed by import precedence (navigation.xsl) - host the singleton toolbar in a per-document editor-bar below the action bar (document.xsl slot + local:toolbar-host override); sticky, matching action-bar chrome, hidden while no editable region is open along with the editor breadcrumb footer (bootstrap.css) - drop the WYMEditor assets from layout.xsl; load rdfa-editor.css under the same conditions instead Co-Authored-By: Claude Fable 5 --- .../atomgraph/linkeddatahub/css/bootstrap.css | 5 +- .../linkeddatahub/css/rdfa-editor.css | 981 +++++++ .../xsl/bootstrap/2.3.2/client/block.xsl | 8 +- .../xsl/bootstrap/2.3.2/client/form.xsl | 73 +- .../xsl/bootstrap/2.3.2/client/navigation.xsl | 3 + .../xsl/bootstrap/2.3.2/document.xsl | 5 + .../xsl/bootstrap/2.3.2/imports/default.xsl | 16 +- .../xsl/bootstrap/2.3.2/layout.xsl | 10 +- .../atomgraph/linkeddatahub/xsl/client.xsl | 6 +- .../xsl/rdfa-editor/RDFa2RDFXML-v3.xsl | 355 +++ .../xsl/rdfa-editor/annotate.xsl | 359 +++ .../linkeddatahub/xsl/rdfa-editor/blocks.xsl | 132 + .../xsl/rdfa-editor/canonical-xhtml.xsl | 411 +++ .../xsl/rdfa-editor/content-model.xsl | 192 ++ .../linkeddatahub/xsl/rdfa-editor/edit.xsl | 2579 +++++++++++++++++ .../xsl/rdfa-editor/group-sort-triples.xsl | 57 + .../linkeddatahub/xsl/rdfa-editor/index.xsl | 93 + .../linkeddatahub/xsl/rdfa-editor/input.xsl | 434 +++ .../xsl/rdfa-editor/lint-rdfa.xsl | 121 + .../xsl/rdfa-editor/lint-xhtml.xsl | 60 + .../xsl/rdfa-editor/navigate.xsl | 711 +++++ .../linkeddatahub/xsl/rdfa-editor/overlay.xsl | 345 +++ .../linkeddatahub/xsl/rdfa-editor/select.xsl | 777 +++++ .../linkeddatahub/xsl/rdfa-editor/tables.xsl | 488 ++++ .../xsl/rdfa-editor/typeahead.xsl | 382 +++ .../linkeddatahub/xsl/rdfa-editor/undo.xsl | 278 ++ .../linkeddatahub/xsl/rdfa-editor/vocab.xsl | 78 + 27 files changed, 8915 insertions(+), 44 deletions(-) create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/css/rdfa-editor.css create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/RDFa2RDFXML-v3.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/annotate.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/blocks.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/canonical-xhtml.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/content-model.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/edit.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/group-sort-triples.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/index.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/input.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/lint-rdfa.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/lint-xhtml.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/navigate.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/overlay.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/select.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/tables.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/typeahead.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/undo.xsl create mode 100644 src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/vocab.xsl diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/css/bootstrap.css b/src/main/webapp/static/com/atomgraph/linkeddatahub/css/bootstrap.css index 0e19e5ebd..e1b9592d6 100644 --- a/src/main/webapp/static/com/atomgraph/linkeddatahub/css/bootstrap.css +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/css/bootstrap.css @@ -210,4 +210,7 @@ object { display: block; margin: auto; max-height: 400px; overflow: hidden; widt .ol-overlay-container { width: 60%; max-height: 75%; background-color: white; overflow: auto; } .ol-overlay-container img { max-width: 100%; } /* SVG graph specific */ -circle { cursor: move; } \ No newline at end of file +circle { cursor: move; } +/* RDFa editor specific */ +.editor-bar { position: sticky; top: calc(var(--action-bar-top, 51px) + 50px); z-index: 998; background: #dfdfdf; padding: 0; box-shadow: none; border-top: 1px solid #aaa; } +.editor-bar:not(:has(#edit-toolbar)), body:not(:has(.rdfa-editor-content)) .editor-bar, body:not(:has(.rdfa-editor-content)) #rdfa-editor-breadcrumb { display: none; } diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/css/rdfa-editor.css b/src/main/webapp/static/com/atomgraph/linkeddatahub/css/rdfa-editor.css new file mode 100644 index 000000000..60aa7c40e --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/css/rdfa-editor.css @@ -0,0 +1,981 @@ +/* + * rdfa-editor.css - the RDFa editor's UI contract: annotation overlay, edit + * dialogs, toolbar, block chrome and drag-and-drop marks, ToC drawer, + * breadcrumb bar, lint markers, RDFa highlighting and the output modal. + * + * Host page requirements: include this stylesheet and give the editable + * container (.rdfa-editor-content) enough left padding (>= 2.5em) for the block drag + * handles, which render in the gutter outside each block's box. + */ + +/* RDFa Visual Styling - Subtle dashed borders */ + .rdfa-editor-content *[property] { + border: 1px dashed #4caf50; + padding: 1px 2px; + cursor: pointer; + transition: background-color 0.2s, border-color 0.2s; + } + +.rdfa-editor-content *[property]:hover { + background-color: rgba(76, 175, 80, 0.1); + border-color: #2e7d32; + } + +.rdfa-editor-content *[typeof] { + border: 1px dashed #9c27b0; + padding: 1px 2px; + cursor: pointer; + transition: background-color 0.2s, border-color 0.2s; + } + +.rdfa-editor-content *[typeof]:hover { + background-color: rgba(156, 39, 176, 0.1); + border-color: #7b1fa2; + } + +.rdfa-editor-content *[about] { + border: 1px dashed #2196f3; + padding: 1px 2px; + cursor: pointer; + transition: background-color 0.2s, border-color 0.2s; + } + +.rdfa-editor-content *[about]:hover { + background-color: rgba(33, 150, 243, 0.1); + border-color: #1976d2; + } + +.rdfa-editor-content *[resource] { + border: 1px dashed #ff9800; + padding: 1px 2px; + cursor: pointer; + transition: background-color 0.2s, border-color 0.2s; + } + +.rdfa-editor-content *[resource]:hover { + background-color: rgba(255, 152, 0, 0.1); + border-color: #f57c00; + } + +/* Invalid selection flash animation */ + @keyframes selection-flash { + 0% { background-color: transparent; } + 25% { background-color: rgba(244, 67, 54, 0.4); } + 50% { background-color: rgba(244, 67, 54, 0.6); } + 75% { background-color: rgba(244, 67, 54, 0.4); } + 100% { background-color: transparent; } + } + +.invalid-selection-flash { + animation: selection-flash 0.6s ease-in-out 2; + } + +.rdfa-editor-content > * { + position: relative; + } + +/* nested draggable blocks position their own handle (chrome is their first + child); handles stack per nesting level, each at its block's own indent */ + .rdfa-editor-content *:has(> [data-role="chrome"]) { + position: relative; + } + +/* invisible gutter strip: keeps the block hovered while the pointer + travels to the drag handle, which sits outside the block box */ + .rdfa-editor-content > *::before { + content: ''; + position: absolute; + left: -2.25em; + top: 0; + bottom: 0; + width: 2.25em; + } + +/* nested blocks get a narrower gutter, inside the parent's indentation */ + .rdfa-editor-content > * *:has(> [data-role="chrome"])::before { + content: ''; + position: absolute; + left: -1.5em; + top: 0; + bottom: 0; + width: 1.5em; + } + +/* a blockquote has no intrinsic child indentation, so its handle and its first + block's handle would coincide; the editing view indents quote content to give + each nesting level its own gutter column (lists and cells indent natively). + The quote bar (Markdown/Bootstrap convention) makes the container visible - + a normalized blockquote > p would otherwise read as a plain paragraph */ + .rdfa-editor-content blockquote { + padding-left: 2em; + border-left: 4px solid #e0e0e0; + color: #616161; + } + +/* the editing-DOM run wrapper (mixed flow content, e.g.
  • text
      ...) renders + like the bare inline run it stands for; unwrapped again at canonicalization */ + .rdfa-editor-content p.rdfa-editor-run { + margin: 0; + } + +.rdfa-editor-content figure { + margin: 16px 0; + } + +.rdfa-editor-content figure img { + display: block; + max-width: 400px; + } + +/* Table blocks: cell borders make empty cells clickable while editing. + Class-free, so canonical output (stored content) keeps host-page styling */ + .rdfa-editor-content table { + border-collapse: collapse; + margin: 16px 0; + } + +.rdfa-editor-content th, + .rdfa-editor-content td { + border: 1px solid #e0e0e0; + padding: 4px 8px; + min-width: 2em; + vertical-align: top; + } + +.rdfa-editor-content th { + background: #fafafa; + } + +.rdfa-editor-content caption { + caption-side: top; + text-align: left; + padding: 4px 0; + color: #757575; + } + +#edit-toolbar button:disabled { + opacity: 0.4; + cursor: default; + } + +.rdfa-editor-content [contenteditable="true"]:focus { + outline: 2px solid rgba(33, 150, 243, 0.35); + outline-offset: 2px; + } + +/* A block image can't hold a caret; when focused it is the selected navigation + target, so it gets a stronger outline than the (caret-bearing) editable hosts */ + .rdfa-editor-content img:focus { + outline: 2px solid rgba(33, 150, 243, 0.7); + outline-offset: 2px; + } + +/* Object blocks (RDF-defined islands): the placeholder div renders as a card; + its RDFa definition spans are invisible - only the injected rendering shows. + Focused = selected navigation target, mirroring the image island */ + .rdfa-editor-content .rdfa-editor-island { + border: 1px solid #e0e0e0; + border-radius: 4px; + background: #fafafa; + padding: 8px 12px; + margin: 16px 0; + } + +.rdfa-editor-content .rdfa-editor-island > span[property] { + display: none; + } + +.rdfa-editor-content .rdfa-editor-island:focus { + outline: 2px solid rgba(33, 150, 243, 0.7); + outline-offset: 2px; + } + +.rdfa-editor-content .rdfa-editor-island.rdfa-editor-loading { + opacity: 0.5; + } + +.rdfa-editor-content .rdfa-editor-island [data-role="rendering"] table { + margin: 8px 0; + } + +/* Block chrome (drag handle) - ephemeral, data-role stripped on serialization */ + [data-role="chrome"] { + visibility: hidden; + position: absolute; + top: 2px; + left: -1.5em; + color: #9e9e9e; + font-size: 14px; + cursor: grab; + user-select: none; + border: none; + } + +.rdfa-editor-content *:hover > [data-role="chrome"] { + visibility: visible; + } + +/* Drag-and-drop feedback (v6 conventions) - any nesting depth */ + .rdfa-editor-content .dragging { + opacity: 0.4; + } + +.rdfa-editor-content .drop-before { + box-shadow: 0 -3px 0 0 #2196f3; + } + +.rdfa-editor-content .drop-after { + box-shadow: 0 3px 0 0 #2196f3; + } + +/* dropping INTO a cell highlights the cell itself, not an edge */ + .rdfa-editor-content .drop-into { + box-shadow: inset 0 0 0 2px #2196f3; + } + +/* Editor toolbar (injected into the navbar) */ + #edit-toolbar { + order: -1; + margin-right: auto; + display: flex; + gap: 6px; + align-items: center; + } + +#edit-toolbar select, + #edit-toolbar button { + padding: 6px 10px; + border: 1px solid #e0e0e0; + border-radius: 4px; + background: white; + font-size: 13px; + font-family: "Roboto", sans-serif; + cursor: pointer; + } + +#edit-toolbar button:hover { + background: #f5f5f5; + } + +/* Caret-contextual toggle state (aria-pressed toggle buttons) */ + #edit-toolbar button[aria-pressed="true"] { + background: #e3f0ff; + border-color: #6aa3e0; + color: #1a5fb4; + } + +/* Functional groups: thin dividers between clusters, no labels */ + #edit-toolbar .tb-group { + display: flex; + gap: 6px; + align-items: center; + } + +#edit-toolbar .tb-group + .tb-group { + border-left: 1px solid #e0e0e0; + padding-left: 6px; + } + +/* Table-ops cluster switches on when the caret is in a table */ + #edit-toolbar .tb-group.table-ops.active { + background: #e3f0ff; + border-radius: 4px; + } + +/* Link / figure dialogs */ + .edit-dialog { + background: white; + border: 2px solid #2196f3; + border-radius: 8px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2); + padding: 16px; + min-width: 320px; + z-index: 10000; + } + +.edit-dialog label { + display: block; + font-size: 13px; + font-weight: 500; + color: #424242; + margin: 8px 0 4px 0; + } + +.edit-dialog input[type="text"] { + width: 100%; + padding: 8px 10px; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 14px; + box-sizing: border-box; + } + +.edit-dialog .rdfa-editor-ui .action-buttons { + margin-top: 14px; + } + +/* Slash menu (/ to insert a block) */ + #slash-menu { + background: white; + border: 1px solid #e0e0e0; + border-radius: 8px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2); + padding: 6px; + min-width: 220px; + max-height: 320px; + overflow-y: auto; + z-index: 10000; + } + +.rdfa-editor-ui .slash-filter { + width: 100%; + padding: 7px 9px; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 14px; + box-sizing: border-box; + margin-bottom: 6px; + } + +.rdfa-editor-ui .slash-items { + list-style: none; + margin: 0; + padding: 0; + } + +.rdfa-editor-ui .slash-item { + padding: 7px 10px; + border-radius: 4px; + font-size: 14px; + color: #212121; + cursor: pointer; + } + +.rdfa-editor-ui .slash-item:hover, + .rdfa-editor-ui .slash-item[aria-selected="true"] { + background: #e3f2fd; + color: #0d47a1; + } + +/* ToC jumps land below the fixed navbar */ + .rdfa-editor-content > * { + scroll-margin-top: 76px; + scroll-margin-bottom: 48px; + } + +/* ToC drawer (Fonto-style outline view) */ + #toc-drawer { + position: fixed; + top: 64px; + left: 0; + bottom: 44px; + width: 260px; + overflow-y: auto; + background: white; + border-right: 1px solid #e0e0e0; + box-shadow: 2px 0 4px rgba(0, 0, 0, 0.05); + padding: 12px 16px; + z-index: 900; + } + +#toc-drawer h2 { + font-size: 14px; + color: #555; + margin: 0 0 8px 0; + padding-right: 20px; + } + +#toc-drawer .toc-close { + position: absolute; + right: 8px; + top: 6px; + background: none; + border: none; + padding: 0 4px; + font-size: 22px; + line-height: 1; + color: #999; + cursor: pointer; + } + +#toc-drawer .toc-close:hover { + color: #333; + } + +#toc-drawer ul { + list-style: none; + padding-left: 0; + margin: 4px 0; + } + +#toc-drawer ul ul { + padding-left: 14px; + } + +.rdfa-editor-ui .toc-item { + padding: 2px 0; + } + +.rdfa-editor-ui .toc-label { + cursor: pointer; + display: block; + padding: 2px 6px; + border-radius: 4px; + font-size: 13px; + } + +.rdfa-editor-ui .toc-label:hover { + background: #e3f2fd; + } + +#toc-drawer .drop-before { + box-shadow: 0 -3px 0 0 #2196f3; + } + +#toc-drawer .drop-after { + box-shadow: 0 3px 0 0 #2196f3; + } + +#toc-drawer .dragging { + opacity: 0.4; + } + +/* Subject inspector drawer (read-only RDFa property sheet) */ + #inspector-drawer { + position: fixed; + top: 64px; + right: 0; + bottom: 44px; + width: 300px; + overflow-y: auto; + background: white; + border-left: 1px solid #e0e0e0; + box-shadow: -2px 0 4px rgba(0, 0, 0, 0.05); + padding: 12px 16px; + z-index: 900; + } + +#inspector-drawer h2 { + font-size: 14px; + color: #555; + margin: 0 0 8px 0; + padding-right: 20px; + } + +#inspector-drawer .inspector-close { + position: absolute; + right: 8px; + top: 6px; + background: none; + border: none; + padding: 0 4px; + font-size: 22px; + line-height: 1; + color: #999; + cursor: pointer; + } + +#inspector-drawer .inspector-close:hover { + color: #333; + } + +#inspector-subject { + margin-bottom: 12px; + padding-bottom: 8px; + border-bottom: 1px solid #e0e0e0; + } + +.rdfa-editor-ui .inspector-subject-iri { + display: block; + font-family: 'Courier New', monospace; + font-size: 13px; + color: #1565c0; + word-break: break-all; + margin-bottom: 6px; + } + +.rdfa-editor-ui .inspector-type { + display: inline-block; + background: #f3e5f5; + color: #7b1fa2; + border-radius: 10px; + padding: 1px 8px; + font-size: 11px; + margin-right: 4px; + } + +.rdfa-editor-ui .inspector-row { + padding: 5px 0; + border-bottom: 1px solid #f0f0f0; + font-size: 13px; + } + +.rdfa-editor-ui .inspector-pred { + display: block; + font-family: 'Courier New', monospace; + color: #2e7d32; + } + +.rdfa-editor-ui .inspector-obj { + display: block; + color: #333; + margin-top: 2px; + word-break: break-word; + } + +.rdfa-editor-ui .inspector-obj-iri { + font-family: 'Courier New', monospace; + color: #1976d2; + } + +.rdfa-editor-ui .inspector-obj-dt, + .rdfa-editor-ui .inspector-obj-lang { + color: #9e9e9e; + font-size: 11px; + margin-left: 6px; + } + +/* Breadcrumb bar (Fonto-style element path + RDFa subject) */ + #rdfa-editor-breadcrumb { + position: fixed; + left: 0; + right: 0; + bottom: 0; + background: white; + border-top: 1px solid #e0e0e0; + padding: 8px 20px; + display: flex; + justify-content: space-between; + align-items: center; + font-size: 13px; + z-index: 1000; + } + +.rdfa-editor-ui .crumb { + cursor: pointer; + color: #1976d2; + } + +.rdfa-editor-ui .crumb:hover { + text-decoration: underline; + } + +.rdfa-editor-ui .crumb-sep { + color: #9e9e9e; + margin: 0 4px; + } + +#rdfa-editor-breadcrumb-subject { + font-family: 'Courier New', monospace; + font-size: 12px; + color: #1565c0; + } + +.lint-badge { + border: none; + font-family: "Roboto", sans-serif; + background: #f44336; + color: white; + border-radius: 10px; + padding: 2px 10px; + font-size: 12px; + cursor: pointer; + margin-left: 12px; + } + +/* RDFa validation markers (class only - stripped by canonicalization) */ + .rdfa-editor-content .rdfa-invalid { + text-decoration: underline wavy #f44336; + text-decoration-skip-ink: none; + } + +.edit-dialog .rdfa-editor-ui .checkbox-label { + display: inline-flex; + gap: 6px; + align-items: center; + font-weight: 400; + margin-top: 8px; + } + +/* Modern Overlay Styling */ + #overlay { + background: linear-gradient(to bottom, #f8f9fa, #ffffff); + border: 2px solid #2196f3; + border-radius: 8px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2); + font-family: "Roboto", sans-serif; + min-width: 450px; + max-width: 500px; + z-index: 10000; + } + +.rdfa-editor-ui .overlay-header { + background: linear-gradient(135deg, #2196f3, #1976d2); + color: white; + padding: 16px 20px; + border-radius: 6px 6px 0 0; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + } + +.rdfa-editor-ui .overlay-header h3 { + margin: 0 0 8px 0; + font-size: 18px; + font-weight: 500; + } + +#overlay form { + padding: 20px; + } + +/* Statement (S / P / O) framing */ + .rdfa-editor-ui .statement { + display: grid; + grid-template-columns: 26px 1fr; + gap: 10px 12px; + align-items: center; + background: #e3f2fd; + border-radius: 6px; + padding: 14px 16px; + margin-bottom: 16px; + } + +.rdfa-editor-ui .stmt-role { + font-family: 'Courier New', monospace; + font-weight: bold; + font-size: 12px; + color: white; + background: #2196f3; + border-radius: 50%; + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + } + +#stmt-subject { + font-family: 'Courier New', monospace; + font-size: 12px; + color: #1565c0; + word-break: break-all; + } + +/* Advanced fields disclosure */ + #overlay details { + border: 1px solid #e0e0e0; + border-radius: 6px; + padding: 8px 16px; + margin-bottom: 16px; + background: white; + } + +#overlay summary { + cursor: pointer; + font-size: 13px; + font-weight: 500; + color: #757575; + padding: 4px 0; + } + +#overlay details fieldset { + margin-top: 12px; + } + +/* Fieldsets */ + #overlay fieldset { + border: 1px solid #e0e0e0; + border-radius: 6px; + padding: 12px 16px; + margin-bottom: 16px; + background: white; + } + +#overlay label { + display: block; + font-weight: 500; + color: #424242; + margin-bottom: 8px; + font-size: 14px; + } + +#overlay input[type="text"], + #overlay select { + width: 100%; + padding: 10px 12px; + border: 1px solid #ccc; + border-radius: 4px; + font-size: 14px; + font-family: "Roboto", sans-serif; + transition: border-color 0.2s; + box-sizing: border-box; + } + +#overlay input[type="text"]:focus, + #overlay select:focus { + outline: none; + border-color: #2196f3; + box-shadow: 0 0 0 3px rgba(33, 150, 243, 0.1); + } + +#overlay input[type="text"]:disabled { + background-color: #f5f5f5; + color: #999; + } + +.rdfa-editor-ui .helper-text { + display: block; + font-size: 12px; + color: #757575; + margin-top: 6px; + font-style: italic; + } + +/* Action Buttons */ + .rdfa-editor-ui .action-buttons { + display: flex; + gap: 12px; + margin-top: 20px; + justify-content: flex-end; + } + +.rdfa-editor-ui .btn-primary, + .rdfa-editor-ui .btn-secondary, + .rdfa-editor-ui .btn-danger { + padding: 10px 24px; + border: none; + border-radius: 4px; + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s; + font-family: "Roboto", sans-serif; + } + +.rdfa-editor-ui .btn-primary { + background: #4caf50; + color: white; + } + +.rdfa-editor-ui .btn-primary:hover { + background: #45a049; + box-shadow: 0 2px 8px rgba(76, 175, 80, 0.3); + } + +.rdfa-editor-ui .btn-secondary { + background: #f5f5f5; + color: #424242; + border: 1px solid #e0e0e0; + } + +.rdfa-editor-ui .btn-secondary:hover { + background: #e0e0e0; + } + +.rdfa-editor-ui .btn-danger { + background: #f44336; + color: white; + margin-right: auto; + } + +.rdfa-editor-ui .btn-danger:hover { + background: #d32f2f; + box-shadow: 0 2px 8px rgba(244, 67, 54, 0.3); + } + +#overlay input[name="custom-datatype"] { + margin-top: 8px; + } + +/* Typeahead lookups (property / type) */ + .rdfa-editor-ui .typeahead-field { + position: relative; + display: block; + } + +.rdfa-editor-ui .typeahead-menu { + position: absolute; + top: 100%; + left: 0; + right: 0; + z-index: 10002; + margin: 2px 0 0 0; + padding: 4px; + list-style: none; + background: white; + border: 1px solid #e0e0e0; + border-radius: 6px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2); + max-height: 260px; + overflow-y: auto; + } + +.rdfa-editor-ui .typeahead-option { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 10px; + padding: 7px 10px; + border-radius: 4px; + font-size: 14px; + color: #212121; + cursor: pointer; + } + +/* children never intercept the mousedown, so the
    • is always the event target */ + .rdfa-editor-ui .typeahead-option * { + pointer-events: none; + } + +.rdfa-editor-ui .typeahead-option:hover, + .rdfa-editor-ui .typeahead-option[aria-selected="true"] { + background: #e3f2fd; + color: #0d47a1; + } + +.rdfa-editor-ui .typeahead-option-label strong { + font-weight: 700; + } + +.rdfa-editor-ui .typeahead-option-uri { + flex: 0 1 auto; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 11px; + color: #9e9e9e; + } + +.rdfa-editor-ui .typeahead-value { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + padding: 10px 12px; + border: 1px solid #ccc; + border-radius: 4px; + background: white; + font-size: 14px; + font-family: "Roboto", sans-serif; + text-align: left; + cursor: pointer; + } + +.rdfa-editor-ui .typeahead-value:hover { + border-color: #2196f3; + } + +.rdfa-editor-ui .typeahead-label { + flex: 1 1 auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + +.rdfa-editor-ui .typeahead-clear { + flex: 0 0 auto; + color: #9e9e9e; + font-size: 16px; + line-height: 1; + padding: 0 2px; + } + +.rdfa-editor-ui .typeahead-clear:hover { + color: #f44336; + } + +/* Modal Dialog */ +#output-modal { + position: fixed; + z-index: 10001; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + } + +.rdfa-editor-ui .modal-content { + background-color: white; + padding: 30px; + border-radius: 8px; + width: 90%; + max-width: 900px; + max-height: 80vh; + overflow-y: auto; + position: relative; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); + } + +.rdfa-editor-ui .modal-close { + position: absolute; + right: 20px; + top: 15px; + font-size: 32px; + font-weight: bold; + color: #999; + cursor: pointer; + line-height: 1; + transition: color 0.2s; + } + +.rdfa-editor-ui .modal-close:hover { + color: #333; + } + +.rdfa-editor-ui #output-download { + position: absolute; + right: 60px; + top: 22px; + padding: 5px 14px; + border: 1px solid #2196f3; + border-radius: 4px; + background: white; + color: #2196f3; + font-size: 13px; + font-weight: 500; + font-family: inherit; + cursor: pointer; + transition: background-color 0.2s, color 0.2s; + } + +.rdfa-editor-ui #output-download:hover { + background: #2196f3; + color: white; + } + +.rdfa-editor-ui .modal-content h3 { + margin-top: 0; + color: #333; + padding-right: 40px; + } + +.rdfa-editor-ui .modal-content pre { + margin: 15px 0 0 0; + padding: 15px; + background-color: #f5f5f5; + border: 1px solid #e0e0e0; + border-radius: 4px; + font-family: 'Courier New', monospace; + font-size: 12px; + white-space: pre-wrap; + word-wrap: break-word; + overflow-x: auto; + } + +/* links are editable text: a plain click places the caret (I-beam, not a pointer that + would falsely promise navigation); Ctrl/Cmd+Click opens the href */ +.rdfa-editor-content a[href] { + cursor: text; +} + +/* the annotated selection stays visible while the overlay form has focus */ +.rdfa-editor-selection-hint { + position: absolute; + background: rgba(11, 87, 208, 0.22); + pointer-events: none; + z-index: 999; +} diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/block.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/block.xsl index 96fa08abf..8c037fac1 100644 --- a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/block.xsl +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/block.xsl @@ -325,8 +325,14 @@ exclude-result-prefixes="#all" - + + + + + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/form.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/form.xsl index 70324486f..f6429148b 100644 --- a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/form.xsl +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/form.xsl @@ -47,6 +47,7 @@ xmlns:sh="&sh;" xmlns:sioc="&sioc;" xmlns:spin="&spin;" xmlns:bs2="http://graphity.org/xsl/bootstrap/2.3.2" +xmlns:local="urn:rdfa-editor:functions" extension-element-prefixes="ixsl" exclude-result-prefixes="#all" > @@ -141,22 +142,25 @@ WHERE - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -181,6 +185,17 @@ WHERE + + + + + + + + + + + @@ -702,15 +717,7 @@ WHERE - - - - - - - - - + @@ -720,16 +727,28 @@ WHERE + + + + + + + + + + + + + + - - - diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/navigation.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/navigation.xsl index f401f975e..dac62a605 100644 --- a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/navigation.xsl +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/navigation.xsl @@ -306,6 +306,9 @@ ORDER BY DESC(?created) + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/document.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/document.xsl index e79f8a0b4..27fa88922 100644 --- a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/document.xsl +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/document.xsl @@ -511,6 +511,11 @@ extension-element-prefixes="ixsl" + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/imports/default.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/imports/default.xsl index b0a90db79..2739db5a2 100644 --- a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/imports/default.xsl +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/imports/default.xsl @@ -1234,19 +1234,21 @@ exclude-result-prefixes="#all" - + - +
      + +
      + + + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/layout.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/layout.xsl index e6ce4ed4f..748b1880e 100644 --- a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/layout.xsl +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/layout.xsl @@ -332,15 +332,15 @@ exclude-result-prefixes="#all"> - + - - + + @@ -352,7 +352,6 @@ exclude-result-prefixes="#all"> - @@ -381,9 +380,6 @@ exclude-result-prefixes="#all"> //]]> - - - diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/client.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/client.xsl index 62c043dec..d0595ff75 100644 --- a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/client.xsl +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/client.xsl @@ -68,6 +68,7 @@ xmlns:schema1="&schema1;" xmlns:schema2="&schema2;" xmlns:dbpo="&dbpo;" xmlns:bs2="http://graphity.org/xsl/bootstrap/2.3.2" +xmlns:local="urn:rdfa-editor:functions" exclude-result-prefixes="#all" extension-element-prefixes="ixsl" > @@ -106,7 +107,8 @@ extension-element-prefixes="ixsl" - + + @@ -259,6 +261,8 @@ WHERE + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/RDFa2RDFXML-v3.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/RDFa2RDFXML-v3.xsl new file mode 100644 index 000000000..2cc9af4a8 --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/RDFa2RDFXML-v3.xsl @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/annotate.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/annotate.xsl new file mode 100644 index 000000000..3c72614bd --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/annotate.xsl @@ -0,0 +1,359 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/blocks.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/blocks.xsl new file mode 100644 index 000000000..556733f1f --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/blocks.xsl @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + + +
      +
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/canonical-xhtml.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/canonical-xhtml.xsl new file mode 100644 index 000000000..50cb11395 --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/canonical-xhtml.xsl @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      + +

      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/content-model.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/content-model.xsl new file mode 100644 index 000000000..6f8b3ae3f --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/content-model.xsl @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/edit.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/edit.xsl new file mode 100644 index 000000000..9ad298734 --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/edit.xsl @@ -0,0 +1,2579 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/group-sort-triples.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/group-sort-triples.xsl new file mode 100644 index 000000000..8a170a61b --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/group-sort-triples.xsl @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/index.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/index.xsl new file mode 100644 index 000000000..29fd27863 --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/index.xsl @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/input.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/input.xsl new file mode 100644 index 000000000..eff247a0f --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/input.xsl @@ -0,0 +1,434 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/lint-rdfa.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/lint-rdfa.xsl new file mode 100644 index 000000000..741f37227 --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/lint-rdfa.xsl @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @ term '' resolves to no IRI (no in-scope vocab or prefix) + + + + + + link has an empty @href + + + + + @content and @resource + on the same @property element: @content wins, the resource is orphaned + + + + + @property '' extracts an empty literal + + + + + event-handler attribute + @ will be stripped from the canonical document + + + + + @ + uses an unsafe URL scheme and will be stripped from the canonical document + + + + + @about '' is a relative reference - likely a typo for '#...' or an absolute IRI + + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/lint-xhtml.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/lint-xhtml.xsl new file mode 100644 index 000000000..d80c3af38 --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/lint-xhtml.xsl @@ -0,0 +1,60 @@ + + + + + + + + + + + + element '' is outside the XHTML content model - preserved, but its nesting is unvalidated + + + + + '' is not allowed inside '' + + + + + '' allows no text content - stray text will be wrapped by canonicalization + + + + + '' must not appear inside '' (XHTML 1.0 Appendix B) + + + + diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/navigate.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/navigate.xsl new file mode 100644 index 000000000..a655c8b2f --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/navigate.xsl @@ -0,0 +1,711 @@ + + + + + + + + + + +
      +
      +
      + +
      +
      + +
      +
      + + +
      + + + + + + + + + + + + + + + + + + + + + + + + +

      No headings yet.

      +
      +
      +
      +
      +
      + + + + + + + +
        + +
      • + + + + + + + + + + +
      • +
        +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + content + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + + + + + + + + + + + _: + + + + + + + + @ + + + + +
      +
      +
      + +

      No properties on this subject.

      +
      +
      +
      +
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      diff --git a/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/overlay.xsl b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/overlay.xsl new file mode 100644 index 000000000..ec4226c7c --- /dev/null +++ b/src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/rdfa-editor/overlay.xsl @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + +