3 Commits

7 changed files with 102 additions and 2 deletions

46
.github/workflows/publish-docker.yml vendored Normal file
View File

@@ -0,0 +1,46 @@
name: CI/CD Pipeline
on: [push]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
# - name: Setup Node.js environment
# uses: actions/setup-node@v4
# with:
# node-version: "18"
# - name: Install Dependencies
# run: yarn install
# - name: Build Project
# run: yarn build
- name: Docker login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build
uses: docker/build-push-action@v5
with:
context: .
file: Dockerfile.base
push: true
tags: |
yuuza/outline-base:${{ github.ref_name == 'main' && 'latest' || github.ref_name }}
cache-from: type=registry,ref=yuuza/outline-base:${{ github.ref_name == 'main' && 'latest' || github.ref_name }}
cache-to: type=inline
- run: docker tag yuuza/outline-base:${{ github.ref_name == 'main' && 'latest' || github.ref_name }} outlinewiki/outline-base:latest
- name: Build runner image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
yuuza/outline:${{ github.ref_name == 'main' && 'latest' || github.ref_name }}
cache-from: type=registry,ref=yuuza/outline:${{ github.ref_name == 'main' && 'latest' || github.ref_name }}
cache-to: type=inline

View File

@@ -81,6 +81,13 @@ function DocumentListItem(
title: document.titleWithDefault,
},
}}
onContextMenu={(e) => {
if (menuOpen) {
return;
}
e.preventDefault();
handleMenuOpen();
}}
{...rest}
>
<Content>
@@ -137,6 +144,7 @@ function DocumentListItem(
<DocumentMenu
document={document}
showPin={showPin}
visible={menuOpen}
onOpen={handleMenuOpen}
onClose={handleMenuClose}
modal={false}

View File

@@ -131,7 +131,16 @@ const CollectionLink: React.FC<Props> = ({
return (
<>
<Relative ref={drop}>
<Relative
ref={drop}
onContextMenu={(e) => {
if (menuOpen || isEditing) {
return;
}
e.preventDefault();
handleMenuOpen();
}}
>
<DropToImport collectionId={collection.id}>
<SidebarLink
to={{
@@ -178,6 +187,7 @@ const CollectionLink: React.FC<Props> = ({
onRename={() =>
editableTitleRef.current?.setIsEditing(true)
}
visible={menuOpen}
onOpen={handleMenuOpen}
onClose={handleMenuClose}
/>

View File

@@ -310,6 +310,13 @@ function InnerDocumentLink(
$isDragging={isDragging}
$isMoving={isMoving}
onKeyDown={handleKeyDown}
onContextMenu={(e) => {
if (menuOpen || isEditing) {
return;
}
e.preventDefault();
handleMenuOpen();
}}
>
<div ref={dropToReparent}>
<DropToImport documentId={node.id} activeClassName="activeDropZone">
@@ -372,6 +379,7 @@ function InnerDocumentLink(
onRename={() =>
editableTitleRef.current?.setIsEditing(true)
}
visible={menuOpen}
onOpen={handleMenuOpen}
onClose={handleMenuClose}
/>

View File

@@ -115,7 +115,18 @@ function StarredLink({ star }: Props) {
return (
<>
<Draggable key={star.id} ref={draggableRef} $isDragging={isDragging}>
<Draggable
key={star.id}
ref={draggableRef}
$isDragging={isDragging}
onContextMenu={(e) => {
if (menuOpen) {
return;
}
e.preventDefault();
handleMenuOpen();
}}
>
<SidebarLink
depth={0}
to={{
@@ -136,6 +147,7 @@ function StarredLink({ star }: Props) {
<Fade>
<DocumentMenu
document={document}
visible={menuOpen}
onOpen={handleMenuOpen}
onClose={handleMenuClose}
/>

View File

@@ -39,6 +39,7 @@ type Props = {
collection: Collection;
placement?: Placement;
modal?: boolean;
visible?: boolean;
label?: (props: MenuButtonHTMLProps) => React.ReactNode;
onRename?: () => void;
onOpen?: () => void;
@@ -49,6 +50,7 @@ function CollectionMenu({
collection,
label,
modal = true,
visible,
placement,
onRename,
onOpen,
@@ -64,6 +66,12 @@ function CollectionMenu({
const history = useHistory();
const file = React.useRef<HTMLInputElement>(null);
React.useEffect(() => {
if (visible !== undefined && menu.visible !== visible) {
menu.setVisible(visible);
}
}, [visible]);
const handleExport = React.useCallback(() => {
dialogs.openModal({
title: t("Export collection"),

View File

@@ -61,6 +61,7 @@ type Props = {
/** Pass true if the document is currently being displayed */
showDisplayOptions?: boolean;
modal?: boolean;
visible?: boolean;
showToggleEmbeds?: boolean;
showPin?: boolean;
label?: (props: MenuButtonHTMLProps) => React.ReactNode;
@@ -74,6 +75,7 @@ function DocumentMenu({
document,
className,
modal = true,
visible,
showToggleEmbeds,
showDisplayOptions,
label,
@@ -106,6 +108,12 @@ function DocumentMenu({
})
);
React.useEffect(() => {
if (visible !== undefined && menu.visible !== visible) {
menu.setVisible(visible);
}
}, [visible]);
const handleOpen = React.useCallback(async () => {
if (!data && !loading) {
await request();