diff --git a/frontend/src/pages/wiki2/css/view-structure.css b/frontend/src/pages/wiki2/css/view-structure.css
index 622e130f39..2ada2ae418 100644
--- a/frontend/src/pages/wiki2/css/view-structure.css
+++ b/frontend/src/pages/wiki2/css/view-structure.css
@@ -248,6 +248,15 @@
margin-top: 4px;
}
+.view-operation-dropdown-menu .sf3-font {
+ font-size: 10px;
+ margin-right: 10px;
+}
+
+.view-operation-dropdown-menu .divider {
+ margin: 0.2rem 0;
+}
+
/* folders dropdown */
.view-structure .more-view-operation .btn-move-to-folder {
display: flex;
@@ -264,7 +273,7 @@
.view-structure .more-view-operation .folders-dropdown-menu {
margin-top: -16px;
- margin-left: -12px;
+ margin-left: 10px;
}
.view-structure .folders-dropdown-menu .dropdown-item {
@@ -299,7 +308,7 @@
.view-structure .folders-dropdown .dropdown-menu {
max-width: 180px;
max-height: 300px;
- overflow-y: scroll;
+ overflow-y: auto;
}
.view-structure .folders-dropdown .dropdown-menu .folder-name {
diff --git a/frontend/src/pages/wiki2/utils/index.js b/frontend/src/pages/wiki2/utils/index.js
index 978e72b4d6..ba82723302 100644
--- a/frontend/src/pages/wiki2/utils/index.js
+++ b/frontend/src/pages/wiki2/utils/index.js
@@ -43,8 +43,21 @@ const getIconURL = (repoId, fileName) => {
return serviceURL + '/lib/' + repoId + '/file/_Internal/Wiki/Icon/' + fileName + '?raw=1';
};
-const getCurrentPageConfig = (pages,pageId) => {
+const getCurrentPageConfig = (pages, pageId) => {
return pages.filter(page => page.id === pageId)[0];
};
-export { generatorBase64Code, generateUniqueId, isObjectNotEmpty, getIconURL, getCurrentPageConfig };
+const getWikPageLink = (pageId) => {
+ const { origin, pathname } = window.location;
+
+ return `${origin}${pathname}?page_id=${pageId}`;
+};
+
+export {
+ generatorBase64Code,
+ generateUniqueId,
+ isObjectNotEmpty,
+ getIconURL,
+ getCurrentPageConfig,
+ getWikPageLink,
+};
diff --git a/frontend/src/pages/wiki2/view-structure/views/page-dropdownmenu.js b/frontend/src/pages/wiki2/view-structure/views/page-dropdownmenu.js
index b583a0b54d..30fa0c8790 100644
--- a/frontend/src/pages/wiki2/view-structure/views/page-dropdownmenu.js
+++ b/frontend/src/pages/wiki2/view-structure/views/page-dropdownmenu.js
@@ -4,6 +4,7 @@ import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap
import toaster from '../../../../components/toast';
import { gettext } from '../../../../utils/constants';
import Icon from '../../../../components/icon';
+import { getWikPageLink } from '../../utils';
export default class PageDropdownMenu extends Component {
@@ -103,11 +104,31 @@ export default class PageDropdownMenu extends Component {
this.setState({ isShowMenu: false });
};
+ handleCopyLink = () => {
+ const { view } = this.props;
+ const wikiLink = getWikPageLink(view.id);
+ const successText = gettext('Copied link to clipboard');
+ const failedText = gettext('Copy failed');
+
+ navigator.clipboard.writeText(wikiLink).then(() => {
+ toaster.success(successText);
+ }, () => {
+ toaster.error(failedText);
+ }).catch(void 0);
+ };
+
+ handleOpenInNewTab = () => {
+ const { view } = this.props;
+ const wikiLink = getWikPageLink(view.id);
+ window.open(wikiLink);
+ };
+
render() {
const {
folderId, canDelete, canDuplicate, renderFolderMenuItems, pagesLength, isOnlyOneView,
} = this.props;
const folderMenuItems = renderFolderMenuItems && renderFolderMenuItems({ currentFolderId: folderId, onMoveViewToFolder: this.onMoveViewToFolder });
+
return (
+
+
+ {gettext('Copy link')}
+
{gettext('Modify name')}
@@ -183,6 +208,11 @@ export default class PageDropdownMenu extends Component {
}
+ < hr className='divider' />
+
+
+ {gettext('Open in new tab')}
+
);
diff --git a/media/css/sf_font3/iconfont.css b/media/css/sf_font3/iconfont.css
index 1d3bbbda58..ff169b29de 100644
--- a/media/css/sf_font3/iconfont.css
+++ b/media/css/sf_font3/iconfont.css
@@ -1,11 +1,11 @@
@font-face {
font-family: "sf3-font"; /* Project id 1230969 */
- src: url('iconfont.eot?t=1717754578668'); /* IE9 */
- src: url('iconfont.eot?t=1717754578668#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url('iconfont.woff2?t=1717754578668') format('woff2'),
- url('iconfont.woff?t=1717754578668') format('woff'),
- url('iconfont.ttf?t=1717754578668') format('truetype'),
- url('iconfont.svg?t=1717754578668#sf3-font') format('svg');
+ src: url('iconfont.eot?t=1718430387468'); /* IE9 */
+ src: url('iconfont.eot?t=1718430387468#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('iconfont.woff2?t=1718430387468') format('woff2'),
+ url('iconfont.woff?t=1718430387468') format('woff'),
+ url('iconfont.ttf?t=1718430387468') format('truetype'),
+ url('iconfont.svg?t=1718430387468#sf3-font') format('svg');
}
.sf3-font {
@@ -16,6 +16,22 @@
-moz-osx-font-smoothing: grayscale;
}
+.sf3-font-open-in-new-tab:before {
+ content: "\e620";
+}
+
+.sf3-font-sdoc-link:before {
+ content: "\e61f";
+}
+
+.sf3-font-files2:before {
+ content: "\e828";
+}
+
+.sf3-font-file:before {
+ content: "\e829";
+}
+
.sf3-font-monitor:before {
content: "\e827";
}
diff --git a/media/css/sf_font3/iconfont.eot b/media/css/sf_font3/iconfont.eot
index 85eb6293f9..49a15c3a9b 100644
Binary files a/media/css/sf_font3/iconfont.eot and b/media/css/sf_font3/iconfont.eot differ
diff --git a/media/css/sf_font3/iconfont.js b/media/css/sf_font3/iconfont.js
index 9376c047ad..3cd9d1f757 100644
--- a/media/css/sf_font3/iconfont.js
+++ b/media/css/sf_font3/iconfont.js
@@ -1 +1 @@
-window._iconfont_svg_string_1230969='',function(h){var c=(c=document.getElementsByTagName("script"))[c.length-1],l=c.getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var s,o,t,v,i,m=function(c,l){l.parentNode.insertBefore(c,l)};if(l&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}s=function(){var c,l=document.createElement("div");l.innerHTML=h._iconfont_svg_string_1230969,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(c=document.body).firstChild?m(l,c.firstChild):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(s,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),s()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(t=s,v=h.document,i=!1,f(),v.onreadystatechange=function(){"complete"==v.readyState&&(v.onreadystatechange=null,z())})}function z(){i||(i=!0,t())}function f(){try{v.documentElement.doScroll("left")}catch(c){return void setTimeout(f,50)}z()}}(window);
\ No newline at end of file
+window._iconfont_svg_string_1230969='',function(h){var c=(c=document.getElementsByTagName("script"))[c.length-1],l=c.getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var s,o,t,v,i,m=function(c,l){l.parentNode.insertBefore(c,l)};if(l&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}s=function(){var c,l=document.createElement("div");l.innerHTML=h._iconfont_svg_string_1230969,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(c=document.body).firstChild?m(l,c.firstChild):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(s,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),s()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(t=s,v=h.document,i=!1,z(),v.onreadystatechange=function(){"complete"==v.readyState&&(v.onreadystatechange=null,f())})}function f(){i||(i=!0,t())}function z(){try{v.documentElement.doScroll("left")}catch(c){return void setTimeout(z,50)}f()}}(window);
\ No newline at end of file
diff --git a/media/css/sf_font3/iconfont.svg b/media/css/sf_font3/iconfont.svg
index 4ef9c7bfc5..00b0c1fffb 100644
--- a/media/css/sf_font3/iconfont.svg
+++ b/media/css/sf_font3/iconfont.svg
@@ -14,6 +14,14 @@
/>
+
+
+
+
+
+
+
+
diff --git a/media/css/sf_font3/iconfont.ttf b/media/css/sf_font3/iconfont.ttf
index 812341a495..c10cbbdad8 100644
Binary files a/media/css/sf_font3/iconfont.ttf and b/media/css/sf_font3/iconfont.ttf differ
diff --git a/media/css/sf_font3/iconfont.woff b/media/css/sf_font3/iconfont.woff
index 1e48b96037..3d98d79af6 100644
Binary files a/media/css/sf_font3/iconfont.woff and b/media/css/sf_font3/iconfont.woff differ
diff --git a/media/css/sf_font3/iconfont.woff2 b/media/css/sf_font3/iconfont.woff2
index 6a11774715..546b601677 100644
Binary files a/media/css/sf_font3/iconfont.woff2 and b/media/css/sf_font3/iconfont.woff2 differ