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