{"version":3,"sources":["components/context-menu/helpers.js","components/context-menu/globalEventListener.js","components/context-menu/context-menu.js","components/index-viewer.js","pages/wiki/side-panel.js","components/wiki-dir-list-view/wiki-dir-list-item.js","components/wiki-dir-list-view/wiki-dir-list-view.js","pages/wiki/main-panel.js","wiki.js","components/dropdown-menu/item-dropdown-menu.js","components/wiki-markdown-viewer.js","components/tree-view/tree-node-view.js","components/tree-view/tree-view.js","components/context-menu/actions.js"],"names":["callIfExists","func","args","hasOwnProp","obj","prop","Object","prototype","hasOwnProperty","call","uniqueId","Math","random","toString","substring","store","canUseDOM","Boolean","window","document","createElement","handleShowEvent","event","id","callbacks","show","handleHideEvent","hide","register","showCallback","hideCallback","unregister","this","addEventListener","MENU_SHOW","MENU_HIDE","ContextMenu","props","registerHandlers","handleOutsideClick","handleHide","handleKeyNavigation","unregisterHandlers","removeEventListener","handleShow","e","detail","position","x","y","currentObject","menuList","setState","isVisible","onShowMenu","state","onHideMenu","menu","contains","target","hideMenu","handleMouseLeave","preventDefault","hideOnLeave","handleContextMenu","keyCode","getMenuPosition","menuStyles","top","left","innerWidth","innerHeight","rect","getBoundingClientRect","height","width","getRTLMenuPosition","onMenuItemClick","stopPropagation","operation","Utils","getEventData","onContextMenu","listenId","listener","wrapper","requestAnimationFrame","setTimeout","rtl","style","opacity","pointerEvents","role","className","display","ref","map","menuItem","index","key","onClick","value","React","Component","TreeNode","name","href","parentNode","children","nodeList","forEach","node","setParent","IndexContentViewer","bindClickEvent","links","querySelectorAll","link","onLinkClick","removeClickEvent","currentPath","getAttribute","getLink","tagName","changeInlineNode","item","url","type","isPublicWiki","data","src","RegExp","serviceURL","repoID","test","indexOf","index2","imagePath","slug","isInternalMarkdownLink","path","getPathFromInternalMarkdownLink","isInternalDirLink","getPathFromInternalDirLink","getRootNode","deserialize","indexContent","changeMarkdownNodes","treeRoot","transSlateToTree","setNodePath","parentNodePath","length","child","slateNodes","parentTreeNode","treeNodes","slateNode","transParagraph","paragraphNode","treeNode","listNode","addChildren","linkNode","textNode","text","FolderItem","toggleExpanded","expanded","renderLink","title","Fragment","SidePanel","renderIndexView","marginTop","renderTreeView","treeData","isNodeMenuShow","onNodeClick","onNodeCollapse","onNodeExpanded","closeSideBar","onCloseSidePanel","onCloseSide","isTreeDataLoading","indexNode","username","permission","siteRoot","gettext","WikiDirListItem","onMouseEnter","highlight","onMouseLeave","onDirentClick","dirent","joinPath","iconUrl","getDirentIcon","isDesktop","alt","size","mtime_relative","WikiDirListView","direntList","MainPanel","onMenuClick","onEditClick","open","onMainNavBarClick","renderNavPath","paths","split","nodePath","onSearchedClick","searchPlaceholder","errMessage","isViewingFile","pathExist","isDataLoading","isViewFile","content","isPro","isPublic","placeholder","markdownContent","isFileLoading","lastModified","latestContributor","isWiki","moment","locale","lang","Wiki","loadSidePanel","initialPath","hasIndex","loadIndexNode","isDir","loadNodeAndParentsByPath","loadWikiData","pythonWrapper","getElementById","removePythonWrapper","fileUrl","encodePath","history","pushState","showDir","seafileAPI","listWikiDir","then","res","tree","addFirstResponseListToNode","dirent_list","root","getNodeByPath","indexPath","getWikiFileContent","catch","isLoadFailed","dirPath","loadDirentList","showFile","filePath","unix","last_modified","fromNow","latest_contributor","hash","location","replaceState","Dirent","filter","toLowerCase","sortDirents","loadTreeNodeByPath","clone","isLoaded","isExpanded","currentNode","addResponseListToNode","isMarkdownFile","getDirName","results","i","object","parent_dir","push","body","removeChild","onConentLinkClick","isWikiInternalMarkdownLink","getPathFromWikiInternalMarkdownLink","isWikiInternalDirLink","getPathFromWikiInternalDirLink","onpopstate","is_dir","slice","getPaths","treeHelper","expandNode","sharedToken","direntPath","w","collapseNode","list","buildTree","homePath","query","Modal","isOpen","toggle","contentClassName","ReactDom","render","ItemDropdownMenu","isItemMenuShow","unfreezeItem","onDropdownToggleKeyDown","onDropdownToggleClick","toggleOperationMenu","freezeItem","onMenuItemKeyDown","isHandleContextMenuEvent","listenerId","getMenuList","nextProps","toggleClass","onKeyDown","divider","tag","tabIndex","defaultProps","contentClass","WikiMarkdownViewer","getTitlesInfo","titlesInfo","titleDom","replace","updateTabTitle","headingList","offsetTop","onScrollHandler","activeTitleIndex","contentScrollTop","markdownContainer","current","scrollTop","titlesLength","originalPath","lastIndexOf","pathNormalize","isInternalFileLink","match","p1","p2","p3","modifyValueBeforeRender","renderMarkdown","isTOCShow","showTOC","scriptSource","mediaUrl","createRef","onScroll","bind","MarkdownViewer","TreeNodeView","isItemFreezed","isShowOperationMenu","isHighlight","onMouseOver","getUserPermission","isCustomPermission","customPermission","canPreview","preview","canModify","modify","onLoadToggle","onNodeDragStart","isIEBrower","canDrag","onNodeDragEnter","isNodeDropShow","onNodeDragMove","onNodeDragLeave","onNodeDrop","onItemMouseDown","button","onItemContextMenu","handleContextClick","getNodeTypeAndIcon","icon","suffix","calculateMenuList","NEW_FOLDER","TextTranslation","NEW_FILE","COPY","MOVE","RENAME","DELETE","OPEN_VIA_CLIENT","userPerm","canCreate","create","canDelete","delete","canCopy","copy","renderChildren","paddingLeft","hasChildren","hlClass","onMouseDown","draggable","onDragStart","onDragEnter","onDragLeave","onDragOver","onDrop","TreeView","onItemMove","repo","selectedPath","dragStartNodeData","nodeDirent","nodeParentPath","nodeRootPath","JSON","stringify","dataTransfer","effectAllowed","setData","canDrop","persist","isTreeViewDropTipShow","dropEffect","onContainerClick","files","getData","parse","dropNodeData","Array","isArray","onMoveItems","currentRepoInfo","onItemsMove","includes","destRepo","destDirentPath","direntPaths","some","clientX","touches","pageX","clientY","pageY","posX","posY","showMenuConfig","showMenu","dispatchGlobalEvent","eventName","opts","CustomEvent","createEvent","initCustomEvent","dispatchEvent","assign"],"mappings":"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","file":"static/js/wiki.chunk.js","sourcesContent":["export function callIfExists(func, ...args) {\n return (typeof func === 'function') && func(...args);\n}\n\nexport function hasOwnProp(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function uniqueId() {\n return Math.random().toString(36).substring(7);\n}\n\nexport const store = {};\n\nexport const canUseDOM = Boolean(\n typeof window !== 'undefined' && window.document && window.document.createElement\n);\n","import { MENU_SHOW, MENU_HIDE } from './actions';\nimport { uniqueId, hasOwnProp, canUseDOM } from './helpers';\n\nclass GlobalEventListener {\n\n constructor() {\n this.callbacks = {};\n\n if (canUseDOM) {\n window.addEventListener(MENU_SHOW, this.handleShowEvent);\n window.addEventListener(MENU_HIDE, this.handleHideEvent);\n }\n }\n\n handleShowEvent = (event) => {\n for (const id in this.callbacks) {\n if (hasOwnProp(this.callbacks, id)) this.callbacks[id].show(event);\n }\n }\n\n handleHideEvent = (event) => {\n for (const id in this.callbacks) {\n if (hasOwnProp(this.callbacks, id)) this.callbacks[id].hide(event);\n }\n }\n\n register = (showCallback, hideCallback) => {\n const id = uniqueId();\n\n this.callbacks[id] = {\n show: showCallback,\n hide: hideCallback\n };\n\n return id;\n }\n\n unregister = (id) => {\n if (id && this.callbacks[id]) {\n delete this.callbacks[id];\n }\n }\n}\n\nexport default new GlobalEventListener();\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport listener from './globalEventListener';\nimport { hideMenu } from './actions';\nimport { callIfExists } from './helpers';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n id: PropTypes.string.isRequired,\n rtl: PropTypes.bool,\n onMenuItemClick: PropTypes.func.isRequired,\n onShowMenu: PropTypes.func,\n onHideMenu: PropTypes.func,\n};\n\nclass ContextMenu extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n x: 0,\n y: 0,\n isVisible: false,\n currentObject: null,\n menuList: [],\n };\n }\n\n componentDidMount() {\n this.listenId = listener.register(this.handleShow, this.handleHide);\n }\n\n componentDidUpdate () {\n if (this.state.isVisible) {\n const wrapper = window.requestAnimationFrame || setTimeout;\n\n wrapper(() => {\n const { x, y } = this.state;\n const { top, left } = this.props.rtl ? this.getRTLMenuPosition(x, y) : this.getMenuPosition(x, y);\n\n wrapper(() => {\n if (!this.menu) return;\n this.menu.style.top = `${top}px`;\n this.menu.style.left = `${left}px`;\n this.menu.style.opacity = 1;\n this.menu.style.pointerEvents = 'auto';\n });\n });\n } else {\n if (!this.menu) return;\n this.menu.style.opacity = 0;\n this.menu.style.pointerEvents = 'none';\n }\n }\n\n componentWillUnmount() {\n if (this.listenId) {\n listener.unregister(this.listenId);\n }\n\n this.unregisterHandlers();\n }\n\n registerHandlers = () => {\n document.addEventListener('mousedown', this.handleOutsideClick);\n document.addEventListener('touchstart', this.handleOutsideClick);\n document.addEventListener('scroll', this.handleHide);\n document.addEventListener('contextmenu', this.handleHide);\n document.addEventListener('keydown', this.handleKeyNavigation);\n window.addEventListener('resize', this.handleHide);\n }\n\n unregisterHandlers = () => {\n document.removeEventListener('mousedown', this.handleOutsideClick);\n document.removeEventListener('touchstart', this.handleOutsideClick);\n document.removeEventListener('scroll', this.handleHide);\n document.removeEventListener('contextmenu', this.handleHide);\n document.removeEventListener('keydown', this.handleKeyNavigation);\n window.removeEventListener('resize', this.handleHide);\n }\n\n handleShow = (e) => {\n if (e.detail.id !== this.props.id) return;\n\n const { x, y } = e.detail.position;\n const { currentObject, menuList} = e.detail;\n\n this.setState({ isVisible: true, x, y, currentObject, menuList });\n this.registerHandlers();\n callIfExists(this.props.onShowMenu, e);\n }\n\n handleHide = (e) => {\n if (this.state.isVisible && (!e.detail || !e.detail.id || e.detail.id === this.props.id)) {\n this.unregisterHandlers();\n this.setState({ isVisible: false});\n callIfExists(this.props.onHideMenu, e);\n }\n }\n\n handleOutsideClick = (e) => {\n if (!this.menu.contains(e.target)) hideMenu();\n }\n\n handleMouseLeave = (event) => {\n event.preventDefault();\n\n if (this.props.hideOnLeave) hideMenu();\n }\n\n handleContextMenu = (e) => {\n this.handleHide(e);\n }\n\n handleKeyNavigation = (e) => {\n if (this.state.isVisible === false) {\n return;\n }\n e.preventDefault();\n this.hideMenu(e);\n }\n\n hideMenu = (e) => {\n if (e.keyCode === 27 || e.keyCode === 13) { // ECS or enter\n hideMenu();\n }\n }\n\n getMenuPosition = (x = 0, y = 0) => {\n let menuStyles = {\n top: y,\n left: x\n };\n\n if (!this.menu) return menuStyles;\n\n const { innerWidth, innerHeight } = window;\n const rect = this.menu.getBoundingClientRect();\n\n if (y + rect.height > innerHeight) {\n menuStyles.top -= rect.height;\n }\n\n if (x + rect.width > innerWidth) {\n menuStyles.left -= rect.width;\n }\n\n if (menuStyles.top < 0) {\n menuStyles.top = rect.height < innerHeight ? (innerHeight - rect.height) / 2 : 0;\n }\n\n if (menuStyles.left < 0) {\n menuStyles.left = rect.width < innerWidth ? (innerWidth - rect.width) / 2 : 0;\n }\n\n return menuStyles;\n }\n\n getRTLMenuPosition = (x = 0, y = 0) => {\n let menuStyles = {\n top: y,\n left: x\n };\n\n if (!this.menu) return menuStyles;\n\n const { innerWidth, innerHeight } = window;\n const rect = this.menu.getBoundingClientRect();\n\n // Try to position the menu on the left side of the cursor\n menuStyles.left = x - rect.width;\n\n if (y + rect.height > innerHeight) {\n menuStyles.top -= rect.height;\n }\n\n if (menuStyles.left < 0) {\n menuStyles.left += rect.width;\n }\n\n if (menuStyles.top < 0) {\n menuStyles.top = rect.height < innerHeight ? (innerHeight - rect.height) / 2 : 0;\n }\n\n if (menuStyles.left + rect.width > innerWidth) {\n menuStyles.left = rect.width < innerWidth ? (innerWidth - rect.width) / 2 : 0;\n }\n\n return menuStyles;\n }\n\n\n onMenuItemClick = (event) => {\n event.stopPropagation();\n let operation = Utils.getEventData(event, 'operation');\n let currentObject = this.state.currentObject;\n this.props.onMenuItemClick(operation, currentObject, event);\n }\n\n onContextMenu = (event) => {\n event.stopPropagation();\n }\n\n render() {\n const inlineStyle = { position: 'fixed', opacity: 0, pointerEvents: 'none', display: 'block' };\n return (\n
{ this.menu = menu; }}>\n {this.state.menuList.map((menuItem, index) => {\n if (menuItem === 'Divider') {\n return
;\n } else {\n return (\n \n {menuItem.value}\n \n );\n }\n })}\n
\n );\n }\n}\n\nContextMenu.propTypes = propTypes;\n\nexport default ContextMenu;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { repoID, slug, serviceURL, isPublicWiki } from '../utils/constants';\nimport { Utils } from '../utils/utils';\nimport { deserialize } from '@seafile/seafile-editor';\nimport'../css/index-viewer.css';\n\nconst viewerPropTypes = {\n indexContent: PropTypes.string.isRequired,\n onLinkClick: PropTypes.func.isRequired,\n};\n\nclass TreeNode {\n\n constructor({ name, href, parentNode }) {\n this.name = name;\n this.href = href;\n this.parentNode = parentNode || null;\n this.children = [];\n }\n\n setParent(parentNode) {\n this.parentNode = parentNode;\n }\n\n addChildren(nodeList) {\n nodeList.forEach((node) => {\n node.setParent(this);\n });\n this.children = nodeList;\n }\n}\n\nclass IndexContentViewer extends React.Component {\n\n constructor(props) {\n super(props);\n this.links = [];\n this.treeRoot = new TreeNode({ name: '', href: '' });\n this.state = {\n currentPath: '',\n };\n }\n\n componentWillMount() {\n this.getRootNode();\n }\n\n componentDidMount() {\n this.bindClickEvent();\n }\n\n componentWillReceiveProps() {\n this.removeClickEvent();\n }\n\n componentDidUpdate() {\n this.bindClickEvent();\n }\n\n componentWillUnmount() {\n this.removeClickEvent();\n }\n\n bindClickEvent = () => {\n const contentClass = 'wiki-nav-content';\n this.links = document.querySelectorAll(`.${contentClass} a`);\n this.links.forEach(link => {\n link.addEventListener('click', this.onLinkClick);\n });\n }\n\n removeClickEvent = () => {\n this.links.forEach(link => {\n link.removeEventListener('click', this.onLinkClick);\n });\n }\n\n onLinkClick = (event) => {\n event.preventDefault();\n const currentPath = event.target.getAttribute('data-path');\n if (currentPath === this.state.currentPath) {\n return;\n } else if (currentPath) {\n this.setState({ currentPath: currentPath });\n }\n const link = this.getLink(event.target);\n if (link) this.props.onLinkClick(link);\n }\n\n getLink = (node) => {\n const tagName = node.tagName;\n if (!tagName || tagName === 'HTML') return;\n if (tagName === 'A') {\n return node.href;\n } else {\n return this.getLink(node.parentNode);\n }\n }\n\n changeInlineNode = (item) => {\n if (item.type == 'link' || item.type === 'image') {\n let url;\n\n // change image url\n if (item.type == 'image' && isPublicWiki) {\n url = item.data.src;\n const re = new RegExp(serviceURL + '/lib/' + repoID +'/file.*raw=1');\n // different repo\n if (!re.test(url)) {\n return;\n }\n // get image path\n let index = url.indexOf('/file');\n let index2 = url.indexOf('?');\n const imagePath = url.substring(index + 5, index2);\n // replace url\n item.data.src = serviceURL + '/view-image-via-public-wiki/?slug=' + slug + '&path=' + imagePath;\n }\n\n else if (item.type == 'link') {\n url = item.data.href;\n /* eslint-disable */\n let expression = /((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[\\-;:&=\\+\\$,\\w]+@)?[A-Za-z0-9\\.\\-]+|(?:www\\.|[\\-;:&=\\+\\$,\\w]+@)[A-Za-z0-9\\.\\-]+)((?:\\/[\\+~%\\/\\.\\w\\-_]*)?\\??(?:[\\-\\+=&;%@\\.\\w_]*)#?(?:[\\.\\!\\/\\\\\\w]*))?)/\n /* eslint-enable */\n let re = new RegExp(expression);\n\n // Solving relative paths\n if (!re.test(url)) {\n item.data.href = serviceURL + '/published/' + slug + '/' + url;\n }\n // change file url\n else if (Utils.isInternalMarkdownLink(url, repoID)) {\n let path = Utils.getPathFromInternalMarkdownLink(url, repoID);\n // replace url\n item.data.href = serviceURL + '/published/' + slug + path;\n }\n // change dir url\n else if (Utils.isInternalDirLink(url, repoID)) {\n let path = Utils.getPathFromInternalDirLink(url, repoID);\n // replace url\n item.data.href = serviceURL + '/published/' + slug + path;\n }\n }\n }\n\n return item;\n }\n\n getRootNode = () => {\n let value = deserialize(this.props.indexContent);\n const newNodes = Utils.changeMarkdownNodes(value, this.changeInlineNode);\n newNodes.map((node) => {\n if (node.type === 'unordered_list' || node.type === 'ordered_list') {\n let treeRoot = this.transSlateToTree(node.children, this.treeRoot);\n this.setNodePath(treeRoot, '/');\n this.treeRoot = treeRoot;\n }\n });\n }\n\n setNodePath = (node, parentNodePath) => {\n let name = node.name;\n let path = parentNodePath === '/' ? parentNodePath + name : parentNodePath + '/' + name;\n node.path = path;\n if (node.children.length > 0) {\n node.children.map(child => {\n this.setNodePath(child, path);\n });\n }\n }\n\n // slateNodes is list items of an unordered list or ordered list, translate them to treeNode and add to parentTreeNode\n transSlateToTree = (slateNodes, parentTreeNode) => {\n let treeNodes = slateNodes.map((slateNode) => {\n // item has children(unordered list)\n if (slateNode.children.length === 2 && (slateNode.children[1].type === 'unordered_list' || slateNode.children[1].type === 'ordered_list')) {\n // slateNode.nodes[0] is paragraph, create TreeNode, set name and href\n const paragraphNode = slateNode.children[0];\n const treeNode = this.transParagraph(paragraphNode);\n // slateNode.nodes[1] is list, set it as TreeNode's children\n const listNode = slateNode.children[1];\n // Add sub list items to the tree node\n return this.transSlateToTree(listNode.children, treeNode);\n } else {\n // item doesn't have children list\n if (slateNode.children[0] && (slateNode.children[0].type === 'paragraph')) {\n return this.transParagraph(slateNode.children[0]);\n } else {\n // list item contain table/code_block/blockqupta\n return new TreeNode({ name: '', href: '' });\n }\n }\n });\n parentTreeNode.addChildren(treeNodes);\n return parentTreeNode;\n }\n\n // translate slate_paragraph_node to treeNode\n transParagraph = (paragraphNode) => {\n let treeNode;\n if (paragraphNode.children[1] && paragraphNode.children[1].type === 'link') {\n // paragraph node is a link node\n const linkNode = paragraphNode.children[1];\n const textNode = linkNode.children[0];\n let name = textNode ? textNode.text : '';\n treeNode = new TreeNode({ name: name, href: linkNode.data.href });\n } else if (paragraphNode.children[0]) {\n // paragraph first child node is a text node, then get node name\n const textNode = paragraphNode.children[0];\n let name = textNode.text ? textNode.text : '';\n treeNode = new TreeNode({ name: name, href: '' });\n } else {\n treeNode = new TreeNode({ name: '', href: '' });\n }\n return treeNode;\n }\n\n render() {\n return (\n
\n \n
\n );\n }\n}\n\nIndexContentViewer.propTypes = viewerPropTypes;\n\nconst FolderItemPropTypes = {\n node: PropTypes.object.isRequired,\n bindClickEvent: PropTypes.func.isRequired,\n currentPath: PropTypes.string,\n};\n\nclass FolderItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n expanded: false\n };\n }\n\n toggleExpanded = () => {\n this.setState({ expanded: !this.state.expanded }, () => {\n if (this.state.expanded) this.props.bindClickEvent();\n });\n }\n\n renderLink = ({ href, name, path }) => {\n const className = `wiki-nav-content ${path === this.props.currentPath ? 'wiki-nav-content-highlight' : ''}`;\n if (href && name) {\n return
{name}
;\n } else if (name) {\n return
{name}
;\n } else {\n return null;\n }\n }\n\n componentDidMount() {\n if (this.props.node && !this.props.node.parentNode) {\n this.setState({ expanded: true }, () => {\n this.props.bindClickEvent();\n });\n }\n }\n\n render() {\n const { node } = this.props;\n if (node.children.length > 0) {\n return (\n \n {node.parentNode &&\n \n \n {this.state.expanded ? : }\n \n {this.renderLink(node)}\n \n }\n {this.state.expanded && node.children.map((child, index) => {\n return (\n
\n \n
\n );\n })}\n
\n );\n } else {\n return this.renderLink(node);\n }\n }\n}\n\nFolderItem.propTypes = FolderItemPropTypes;\n\nexport default IndexContentViewer;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext, siteRoot, repoID, slug, username, permission } from '../../utils/constants';\nimport Logo from '../../components/logo';\nimport Loading from '../../components/loading';\nimport TreeView from '../../components/tree-view/tree-view';\nimport IndexContentViewer from '../../components/index-viewer';\n\nconst propTypes = {\n closeSideBar: PropTypes.bool.isRequired,\n isTreeDataLoading: PropTypes.bool.isRequired,\n treeData: PropTypes.object.isRequired,\n indexNode: PropTypes.object,\n indexContent: PropTypes.string.isRequired,\n currentPath: PropTypes.string.isRequired,\n onCloseSide: PropTypes.func.isRequired,\n onNodeClick: PropTypes.func.isRequired,\n onNodeCollapse: PropTypes.func.isRequired,\n onNodeExpanded: PropTypes.func.isRequired,\n onLinkClick: PropTypes.func.isRequired,\n};\n\nclass SidePanel extends Component {\n\n constructor(props) {\n super(props);\n this.isNodeMenuShow = false;\n }\n\n renderIndexView = () => {\n return (\n \n
\n
\n \n
\n
\n );\n }\n\n renderTreeView = () => {\n return (\n \n
\n {this.props.treeData && (\n \n )}\n
\n
\n );\n }\n\n render() {\n return (\n
\n
\n \n
\n
\n {this.props.isTreeDataLoading && }\n {!this.props.isTreeDataLoading && this.props.indexNode && this.renderIndexView() }\n {!this.props.isTreeDataLoading && !this.props.indexNode && this.renderTreeView() }\n {(username && permission) &&
{gettext('Go to Library')}
}\n
\n
\n );\n }\n}\n\nSidePanel.propTypes = propTypes;\n\nexport default SidePanel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { siteRoot } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n dirent: PropTypes.object.isRequired,\n onDirentClick: PropTypes.func.isRequired,\n};\n\nclass WikiDirListItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n highlight: false,\n };\n }\n\n onMouseEnter = () => {\n this.setState({highlight: true});\n }\n\n onMouseLeave = () => {\n this.setState({highlight: false});\n }\n\n onContextMenu = (event) => {\n event.preventDefault();\n event.stopPropagation();\n }\n\n onDirentClick = (e) => {\n e.preventDefault();\n this.props.onDirentClick(this.props.dirent);\n }\n\n render() {\n let { path, dirent } = this.props;\n let href = siteRoot + 'published' + Utils.joinPath(path, dirent.name);\n let iconUrl = Utils.getDirentIcon(dirent);\n\n const isDesktop = Utils.isDesktop();\n return isDesktop ? (\n \n \n \"\"\n \n \n {dirent.name}\n \n {dirent.size}\n {dirent.mtime_relative}\n \n ) : (\n \n \n \"\"\n \n \n {dirent.name}\n
\n {dirent.size}\n {dirent.mtime_relative}\n \n \n );\n }\n}\n\nWikiDirListItem.propTypes = propTypes;\n\nexport default WikiDirListItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport WikiDirListItem from './wiki-dir-list-item';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n direntList: PropTypes.array.isRequired,\n onDirentClick: PropTypes.func.isRequired,\n};\n\nclass WikiDirListView extends React.Component {\n\n render() {\n const isDesktop = Utils.isDesktop();\n return (\n \n \n {isDesktop ? (\n \n \n \n \n \n \n ) : (\n \n \n \n \n )}\n \n \n {this.props.direntList.length !== 0 && this.props.direntList.map((dirent, index) => {\n return (\n \n );\n })}\n \n
{gettext('Name')}{gettext('Size')}{gettext('Last Update')}
\n );\n }\n}\n\nWikiDirListView.propTypes = propTypes;\n\nexport default WikiDirListView;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext, repoID, slug, siteRoot, username, isPro } from '../../utils/constants';\nimport WikiMarkdownViewer from '../../components/wiki-markdown-viewer';\nimport WikiDirListView from '../../components/wiki-dir-list-view/wiki-dir-list-view';\nimport Loading from '../../components/loading';\nimport { Utils } from '../../utils/utils';\nimport Search from '../../components/search/search';\nimport Notification from '../../components/common/notification';\nimport Account from '../../components/common/account';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n pathExist: PropTypes.bool.isRequired,\n isViewFile: PropTypes.bool.isRequired,\n isDataLoading: PropTypes.bool.isRequired,\n content: PropTypes.string,\n permission: PropTypes.string,\n lastModified: PropTypes.string,\n latestContributor: PropTypes.string,\n direntList: PropTypes.array.isRequired,\n onMenuClick: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired,\n onMainNavBarClick: PropTypes.func.isRequired,\n onDirentClick: PropTypes.func.isRequired,\n onLinkClick: PropTypes.func.isRequired,\n};\n\nclass MainPanel extends Component {\n\n onMenuClick = () => {\n this.props.onMenuClick();\n }\n\n onEditClick = (e) => {\n e.preventDefault();\n let url = siteRoot + 'lib/' + repoID + '/file' + this.props.path + '?mode=edit';\n window.open(url);\n }\n\n onMainNavBarClick = (e) => {\n let path = Utils.getEventData(e, 'path');\n this.props.onMainNavBarClick(path);\n }\n\n renderNavPath = () => {\n let paths = this.props.path.split('/');\n let nodePath = '';\n let pathElem = paths.map((item, index) => {\n if (item === '') {\n return;\n }\n if (index === (paths.length - 1)) {\n return (\n \n /\n {item}\n \n );\n } else {\n nodePath += '/' + item;\n return (\n \n /\n \n {item}\n \n \n );\n }\n });\n return pathElem;\n }\n\n\n render() {\n let { onSearchedClick, permission } = this.props;\n let searchPlaceholder = gettext('Search files in this library');\n const errMessage = (
{gettext('Folder does not exist.')}
);\n\n const isViewingFile = this.props.pathExist && !this.props.isDataLoading && this.props.isViewFile;\n return (\n
\n
{this.props.content}
\n
\n {!username &&\n \n
\n \n
\n
\n {isPro && (\n \n )}\n
\n
\n }\n {username && (\n \n
\n \n {this.props.permission == 'rw' && (\n Utils.isDesktop() ?\n :\n \n )}\n
\n
\n {isPro && (\n \n )}\n \n \n
\n
\n )}\n
\n
\n
\n {!this.props.pathExist && errMessage}\n {this.props.pathExist && this.props.isDataLoading && }\n {isViewingFile && (\n \n )}\n {(!this.props.isDataLoading && !this.props.isViewFile) && (\n \n )}\n
\n
\n
\n );\n }\n}\n\nMainPanel.propTypes = propTypes;\n\nexport default MainPanel;\n","import React, { Component } from 'react';\nimport ReactDom from 'react-dom';\nimport moment from 'moment';\nimport MediaQuery from 'react-responsive';\nimport { Modal } from 'reactstrap';\nimport { slug, siteRoot, initialPath, isDir, sharedToken, hasIndex } from './utils/constants';\nimport { Utils } from './utils/utils';\nimport { seafileAPI } from './utils/seafile-api';\nimport Dirent from './models/dirent';\nimport TreeNode from './components/tree-view/tree-node';\nimport treeHelper from './components/tree-view/tree-helper';\nimport SidePanel from './pages/wiki/side-panel';\nimport MainPanel from './pages/wiki/main-panel';\nimport { lang } from './utils/constants';\n\nimport './css/layout.css';\nimport './css/side-panel.css';\nimport './css/wiki.css';\nimport './css/toolbar.css';\nimport './css/search.css';\n\nmoment.locale(lang);\n\nclass Wiki extends Component {\n constructor(props) {\n super(props);\n this.state = {\n path: '',\n pathExist: true,\n closeSideBar: false,\n isViewFile: true,\n isDataLoading: false,\n direntList: [],\n content: '',\n permission: '',\n lastModified: '',\n latestContributor: '',\n isTreeDataLoading: true,\n treeData: treeHelper.buildTree(),\n currentNode: null,\n indexNode: null,\n indexContent: '',\n };\n\n window.onpopstate = this.onpopstate;\n this.indexPath = '/index.md';\n this.homePath = '/home.md';\n this.pythonWrapper = null;\n }\n\n componentWillMount() {\n if (!Utils.isDesktop()) {\n this.setState({ closeSideBar: true });\n }\n }\n\n componentDidMount() {\n this.loadSidePanel(initialPath);\n this.loadWikiData(initialPath);\n\n this.links = document.querySelectorAll(`#wiki-file-content a`);\n this.links.forEach(link => link.addEventListener('click', this.onConentLinkClick));\n }\n\n componentWillUnmount() {\n this.links.forEach(link => link.removeEventListener('click', this.onConentLinkClick));\n }\n\n loadSidePanel = (initialPath) => {\n if (hasIndex) {\n this.loadIndexNode();\n return;\n }\n\n // load dir list\n initialPath = isDir === 'None' ? '/' : initialPath;\n this.loadNodeAndParentsByPath(initialPath);\n }\n\n loadWikiData = (initialPath) => {\n this.pythonWrapper = document.getElementById('wiki-file-content');\n if (isDir === 'False') {\n // this.showFile(initialPath);\n this.setState({path: initialPath});\n return;\n }\n\n // if it is a file list, remove the template content provided by python\n this.removePythonWrapper();\n\n if (isDir === 'True') {\n this.showDir(initialPath);\n return;\n }\n \n if (isDir === 'None' && initialPath === '/home.md') {\n this.showDir('/');\n return;\n }\n\n if (isDir === 'None') {\n this.setState({pathExist: false});\n let fileUrl = siteRoot + 'published/' + slug + Utils.encodePath(initialPath);\n window.history.pushState({url: fileUrl, path: initialPath}, initialPath, fileUrl);\n }\n }\n\n loadIndexNode = () => {\n seafileAPI.listWikiDir(slug, '/').then(res => {\n let tree = this.state.treeData;\n this.addFirstResponseListToNode(res.data.dirent_list, tree.root);\n let indexNode = tree.getNodeByPath(this.indexPath);\n seafileAPI.getWikiFileContent(slug, indexNode.path).then(res => {\n this.setState({\n treeData: tree,\n indexNode: indexNode,\n indexContent: res.data.content,\n isTreeDataLoading: false,\n });\n });\n }).catch(() => {\n this.setState({isLoadFailed: true});\n });\n }\n\n showDir = (dirPath) => {\n this.removePythonWrapper();\n this.loadDirentList(dirPath);\n\n // update location url\n let fileUrl = siteRoot + 'published/' + slug + Utils.encodePath(dirPath);\n window.history.pushState({url: fileUrl, path: dirPath}, dirPath, fileUrl);\n }\n\n showFile = (filePath) => {\n this.setState({\n isDataLoading: true,\n isViewFile: true,\n path: filePath,\n });\n \n this.removePythonWrapper();\n seafileAPI.getWikiFileContent(slug, filePath).then(res => {\n let data = res.data;\n this.setState({\n isDataLoading: false,\n content: data.content,\n permission: data.permission,\n lastModified: moment.unix(data.last_modified).fromNow(),\n latestContributor: data.latest_contributor,\n });\n });\n\n const hash = window.location.hash;\n let fileUrl = siteRoot + 'published/' + slug + Utils.encodePath(filePath) + hash;\n if (filePath === '/home.md') {\n window.history.replaceState({url: fileUrl, path: filePath}, filePath, fileUrl);\n } else {\n window.history.pushState({url: fileUrl, path: filePath}, filePath, fileUrl);\n }\n }\n\n loadDirentList = (dirPath) => {\n this.setState({isDataLoading: true});\n seafileAPI.listWikiDir(slug, dirPath).then(res => {\n let direntList = res.data.dirent_list.map(item => {\n let dirent = new Dirent(item);\n return dirent;\n });\n if (dirPath === '/') {\n direntList = direntList.filter(item => {\n if (item.type === 'dir') {\n let name = item.name.toLowerCase();\n return name !== 'drafts' && name !== 'images' && name !== 'downloads';\n }\n return true;\n });\n }\n direntList = Utils.sortDirents(direntList, 'name', 'asc');\n this.setState({\n path: dirPath,\n isViewFile: false,\n direntList: direntList,\n isDataLoading: false,\n });\n }).catch(() => {\n this.setState({isLoadFailed: true});\n });\n }\n\n loadTreeNodeByPath = (path) => {\n let tree = this.state.treeData.clone();\n let node = tree.getNodeByPath(path);\n if (!node.isLoaded) {\n seafileAPI.listWikiDir(slug, node.path).then(res => {\n this.addResponseListToNode(res.data.dirent_list, node);\n let parentNode = tree.getNodeByPath(node.parentNode.path);\n parentNode.isExpanded = true;\n this.setState({\n treeData: tree,\n currentNode: node\n });\n });\n } else {\n let parentNode = tree.getNodeByPath(node.parentNode.path);\n parentNode.isExpanded = true;\n this.setState({treeData: tree, currentNode: node}); //tree\n }\n }\n\n loadNodeAndParentsByPath = (path) => {\n let tree = this.state.treeData.clone();\n if (Utils.isMarkdownFile(path)) {\n path = Utils.getDirName(path);\n }\n seafileAPI.listWikiDir(slug, path, true).then(res => {\n let direntList = res.data.dirent_list;\n let results = {};\n for (let i = 0; i < direntList.length; i++) {\n let object = direntList[i];\n let key = object.parent_dir;\n if (!results[key]) {\n results[key] = [];\n }\n results[key].push(object);\n }\n for (let key in results) {\n let node = tree.getNodeByPath(key);\n if (!node.isLoaded && node.path === '/') {\n this.addFirstResponseListToNode(results[key], node);\n } else if (!node.isLoaded) {\n this.addResponseListToNode(results[key], node);\n }\n }\n this.setState({\n isTreeDataLoading: false,\n treeData: tree\n });\n }).catch(() => {\n this.setState({isLoadFailed: true});\n });\n }\n\n removePythonWrapper = () => {\n if (this.pythonWrapper) {\n document.body.removeChild(this.pythonWrapper);\n this.pythonWrapper = null;\n }\n }\n\n onConentLinkClick = (event) => {\n event.preventDefault();\n event.stopPropagation();\n let link = '';\n if (event.target.tagName !== 'A') {\n let target = event.target.parentNode;\n while (target.tagName !== 'A') {\n target = target.parentNode;\n }\n link = target.href;\n } else {\n link = event.target.href;\n }\n this.onLinkClick(link);\n }\n\n onLinkClick = (link) => {\n const url = link;\n if (Utils.isWikiInternalMarkdownLink(url, slug)) {\n let path = Utils.getPathFromWikiInternalMarkdownLink(url, slug);\n this.showFile(path);\n } else if (Utils.isWikiInternalDirLink(url, slug)) {\n let path = Utils.getPathFromWikiInternalDirLink(url, slug);\n this.showDir(path);\n } else {\n window.location.href = url;\n }\n if (!this.state.closeSideBar) {\n this.setState({ closeSideBar: true });\n }\n }\n\n onpopstate = (event) => {\n if (event.state && event.state.path) {\n let path = event.state.path;\n if (Utils.isMarkdownFile(path)) {\n this.showFile(path);\n } else {\n this.loadDirentList(path);\n this.setState({\n path: path,\n isViewFile: false\n });\n }\n }\n }\n\n onSearchedClick = (item) => {\n let path = item.is_dir ? item.path.slice(0, item.path.length - 1) : item.path;\n if (this.state.currentPath === path) {\n return;\n }\n\n // load sidePanel\n let index = -1;\n let paths = Utils.getPaths(path);\n for (let i = 0; i < paths.length; i++) {\n let node = this.state.treeData.getNodeByPath(node);\n if (!node) {\n index = i;\n break;\n }\n }\n if (index === -1) { // all the data has been loaded already.\n let tree = this.state.treeData.clone();\n let node = tree.getNodeByPath(item.path);\n treeHelper.expandNode(node);\n this.setState({treeData: tree});\n } else {\n this.loadNodeAndParentsByPath(path);\n }\n\n // load mainPanel\n if (item.is_dir) {\n this.showDir(path);\n } else {\n if (Utils.isMarkdownFile(path)) {\n this.showFile(path);\n } else {\n let url = siteRoot + 'd/' + sharedToken + '/files/?p=' + Utils.encodePath(path);\n let newWindow = window.open('about:blank');\n newWindow.location.href = url;\n }\n }\n }\n\n onMenuClick = () => {\n this.setState({closeSideBar: !this.state.closeSideBar});\n }\n\n onMainNavBarClick = (nodePath) => {\n let tree = this.state.treeData.clone();\n let node = tree.getNodeByPath(nodePath);\n tree.expandNode(node);\n this.setState({treeData: tree, currentNode: node});\n this.showDir(node.path);\n }\n\n onDirentClick = (dirent) => {\n let direntPath = Utils.joinPath(this.state.path, dirent.name);\n if (dirent.isDir()) { // is dir\n this.loadTreeNodeByPath(direntPath);\n this.showDir(direntPath);\n } else { // is file\n if (Utils.isMarkdownFile(direntPath)) {\n this.showFile(direntPath);\n } else {\n const w=window.open('about:blank');\n const url = siteRoot + 'd/' + sharedToken + '/files/?p=' + Utils.encodePath(direntPath);\n w.location.href = url;\n }\n }\n }\n\n onCloseSide = () => {\n this.setState({closeSideBar: !this.state.closeSideBar});\n }\n\n onNodeClick = (node) => {\n if (!this.state.pathExist) {\n this.setState({pathExist: true});\n }\n\n if (node.object.isDir()) {\n if (!node.isLoaded) {\n let tree = this.state.treeData.clone();\n node = tree.getNodeByPath(node.path);\n seafileAPI.listWikiDir(slug, node.path).then(res => {\n this.addResponseListToNode(res.data.dirent_list, node);\n tree.collapseNode(node);\n this.setState({treeData: tree});\n });\n }\n if (node.path === this.state.path) {\n if (node.isExpanded) {\n let tree = treeHelper.collapseNode(this.state.treeData, node);\n this.setState({treeData: tree});\n } else {\n let tree = this.state.treeData.clone();\n node = tree.getNodeByPath(node.path);\n tree.expandNode(node);\n this.setState({treeData: tree});\n }\n }\n }\n\n if (node.path === this.state.path ) {\n return;\n }\n\n if (node.object.isDir()) { // isDir\n this.showDir(node.path);\n } else {\n if (Utils.isMarkdownFile(node.path)) {\n if (node.path !== this.state.path) {\n this.showFile(node.path);\n }\n this.onCloseSide();\n } else {\n const w = window.open('about:blank');\n const url = siteRoot + 'd/' + sharedToken + '/files/?p=' + Utils.encodePath(node.path);\n w.location.href = url;\n }\n }\n }\n\n onNodeCollapse = (node) => {\n let tree = treeHelper.collapseNode(this.state.treeData, node);\n this.setState({treeData: tree});\n }\n\n onNodeExpanded = (node) => {\n let tree = this.state.treeData.clone();\n node = tree.getNodeByPath(node.path);\n if (!node.isLoaded) {\n seafileAPI.listWikiDir(slug, node.path).then(res => {\n this.addResponseListToNode(res.data.dirent_list, node);\n this.setState({treeData: tree});\n });\n } else {\n tree.expandNode(node);\n this.setState({treeData: tree});\n }\n }\n\n addFirstResponseListToNode = (list, node) => {\n node.isLoaded = true;\n node.isExpanded = true;\n let direntList = list.map(item => {\n return new Dirent(item);\n });\n direntList = direntList.filter(item => {\n if (item.type === 'dir') {\n let name = item.name.toLowerCase();\n return name !== 'drafts' && name !== 'images' && name !== 'downloads';\n }\n return true;\n });\n direntList = Utils.sortDirents(direntList, 'name', 'asc');\n\n let nodeList = direntList.map(object => {\n return new TreeNode({object});\n });\n node.addChildren(nodeList);\n }\n\n addResponseListToNode = (list, node) => {\n node.isLoaded = true;\n node.isExpanded = true;\n let direntList = list.map(item => {\n return new Dirent(item);\n });\n direntList = Utils.sortDirents(direntList, 'name', 'asc');\n\n let nodeList = direntList.map(object => {\n return new TreeNode({object});\n });\n node.addChildren(nodeList);\n }\n\n render() {\n return (\n
\n \n \n \n \n \n
\n );\n }\n}\n\nReactDom.render(, document.getElementById('wrapper'));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport listener from '../context-menu/globalEventListener';\nimport { Dropdown, ButtonDropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n tagName: PropTypes.string,\n item: PropTypes.object.isRequired,\n toggleClass: PropTypes.string,\n isHandleContextMenuEvent: PropTypes.bool,\n getMenuList: PropTypes.func.isRequired,\n onMenuItemClick: PropTypes.func.isRequired,\n freezeItem: PropTypes.func,\n unfreezeItem: PropTypes.func,\n};\n\nclass ItemDropdownMenu extends React.Component {\n\n static defaultProps = {\n isHandleContextMenuEvent: true,\n toggleClass: 'sf2-icon-caret-down'\n };\n\n constructor(props) {\n super(props);\n this.state = {\n menuList: [],\n isItemMenuShow: false,\n };\n }\n\n componentDidMount() {\n if (this.props.isHandleContextMenuEvent) {\n this.listenerId = listener.register(this.onShowMenu, this.onHideMenu);\n }\n let { item } = this.props;\n let menuList = this.props.getMenuList(item);\n this.setState({menuList: menuList});\n }\n\n componentWillReceiveProps(nextProps) { // for toolbar item operation\n let { item } = nextProps;\n if (item.name !== this.props.item.name) {\n let menuList = this.props.getMenuList(item);\n this.setState({menuList: menuList});\n }\n }\n\n componentWillUnmount() {\n if (this.props.isHandleContextMenuEvent && this.listenerId) {\n listener.unregister(this.listenerId);\n }\n }\n\n onShowMenu = () => {\n // nothing todo\n }\n\n onHideMenu = () => {\n if (this.state.isItemMenuShow) {\n this.setState({isItemMenuShow: false});\n if (typeof(this.props.unfreezeItem) === 'function') {\n this.props.unfreezeItem();\n }\n }\n }\n\n onDropdownToggleKeyDown = (e) => {\n if (e.key == 'Enter' || e.key == 'Space') {\n this.onDropdownToggleClick(e);\n }\n }\n\n onDropdownToggleClick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n this.toggleOperationMenu();\n }\n\n toggleOperationMenu = () => {\n this.setState(\n {isItemMenuShow: !this.state.isItemMenuShow},\n () => {\n if (this.state.isItemMenuShow && typeof(this.props.freezeItem) === 'function') {\n this.props.freezeItem();\n } else if (!this.state.isItemMenuShow && typeof(this.props.unfreezeItem) === 'function') {\n this.props.unfreezeItem();\n }\n }\n );\n }\n\n onMenuItemKeyDown = (e) => {\n if (e.key == 'Enter' || e.key == 'Space') {\n this.onMenuItemClick(e);\n }\n }\n\n onMenuItemClick = (event) => {\n let operation = Utils.getEventData(event, 'toggle');\n let item = this.props.item;\n this.props.onMenuItemClick(operation, event, item);\n }\n\n render() {\n let menuList = this.state.menuList;\n let { toggleClass, tagName } = this.props;\n toggleClass = 'sf-dropdown-toggle ' + toggleClass;\n\n if (!menuList.length) {\n return '';\n }\n\n if (tagName && tagName === 'button') {\n return (\n \n \n \n \n {menuList.map((menuItem, index) => {\n if (menuItem === 'Divider') {\n return ;\n } else {\n return (\n {menuItem.value}\n );\n }\n })}\n \n \n );\n }\n\n return (\n \n \n \n {menuList.map((menuItem, index) => {\n if (menuItem === 'Divider') {\n return ;\n } else {\n return (\n {menuItem.value}\n );\n }\n })}\n \n \n );\n }\n}\n\nItemDropdownMenu.propTypes = propTypes;\n\nexport default ItemDropdownMenu;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { MarkdownViewer } from '@seafile/seafile-editor';\nimport { gettext, repoID, slug, serviceURL, isPublicWiki, sharedToken, mediaUrl } from '../utils/constants';\nimport Loading from './loading';\nimport { Utils } from '../utils/utils';\n\nconst propTypes = {\n children: PropTypes.object,\n isFileLoading: PropTypes.bool.isRequired,\n markdownContent: PropTypes.string.isRequired,\n latestContributor: PropTypes.string.isRequired,\n lastModified: PropTypes.string.isRequired,\n onLinkClick: PropTypes.func.isRequired,\n isWiki: PropTypes.bool,\n isTOCShow: PropTypes.bool,\n // for dir-column-file component(import repoID is undefined)\n repoID: PropTypes.string,\n path: PropTypes.string,\n};\n\nconst contentClass = 'wiki-page-content';\n\nclass WikiMarkdownViewer extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n activeTitleIndex: 0,\n };\n this.markdownContainer = React.createRef();\n this.links = [];\n this.titlesInfo = [];\n }\n\n componentDidMount() {\n // Bind event when first loaded\n this.links = document.querySelectorAll(`.${contentClass} a`);\n this.links.forEach(link => {\n link.addEventListener('click', this.onLinkClick);\n });\n\n this.getTitlesInfo();\n }\n\n componentWillReceiveProps(nextProps) {\n if (this.props.markdownContent === nextProps.markdownContent) {\n return;\n }\n // Unbound event when updating\n this.links.forEach(link => {\n link.removeEventListener('click', this.onLinkClick);\n });\n }\n\n componentDidUpdate() {\n // Update completed, rebind event\n this.links = document.querySelectorAll(`.${contentClass} a`);\n this.links.forEach(link => {\n link.addEventListener('click', this.onLinkClick);\n });\n if (this.titlesInfo.length === 0) {\n this.getTitlesInfo();\n }\n }\n\n componentWillUnmount() {\n // Unbound events when the component is destroyed\n this.links.forEach(link => {\n link.removeEventListener('click', this.onLinkClick);\n });\n }\n\n getTitlesInfo = () => {\n let titlesInfo = [];\n const titleDom = document.querySelectorAll('h1[id^=\"user-content\"]')[0];\n if (titleDom) {\n const id = titleDom.getAttribute('id');\n let content = id && id.replace('user-content-', '');\n content = content ? `${content} - ${slug}` : slug;\n Utils.updateTabTitle(content);\n }\n let headingList = document.querySelectorAll('h2[id^=\"user-content\"], h3[id^=\"user-content\"]');\n for (let i = 0; i < headingList.length; i++) {\n titlesInfo.push(headingList[i].offsetTop);\n }\n this.titlesInfo = titlesInfo;\n }\n\n onLinkClick = (event) => {\n event.preventDefault();\n event.stopPropagation();\n let link = '';\n if (event.target.tagName !== 'A') {\n let target = event.target.parentNode;\n while (target.tagName !== 'A') {\n target = target.parentNode;\n }\n link = target.href;\n } else {\n link = event.target.href;\n }\n this.props.onLinkClick(link);\n }\n\n onScrollHandler = () => {\n const contentScrollTop = this.markdownContainer.current.scrollTop + 180;\n let titlesLength = this.titlesInfo.length;\n let activeTitleIndex;\n if (contentScrollTop <= this.titlesInfo[0]) {\n activeTitleIndex = 0;\n this.setState({activeTitleIndex: activeTitleIndex});\n return;\n }\n if (contentScrollTop > this.titlesInfo[titlesLength - 1]) {\n activeTitleIndex = this.titlesInfo.length - 1;\n this.setState({activeTitleIndex: activeTitleIndex});\n return;\n }\n for (let i = 0; i < titlesLength; i++) {\n if (contentScrollTop > this.titlesInfo[i]) {\n continue;\n } else {\n activeTitleIndex = i - 1;\n break;\n }\n }\n this.setState({activeTitleIndex: activeTitleIndex});\n }\n\n changeInlineNode = (item) => {\n let url, imagePath;\n\n if (item.type == 'image' && isPublicWiki) { // change image url\n url = item.data.src;\n const re = new RegExp(serviceURL + '/lib/' + repoID +'/file.*raw=1');\n // different repo\n if (re.test(url)) {\n // get image path\n let index = url.indexOf('/file');\n let index2 = url.indexOf('?');\n imagePath = url.substring(index + 5, index2);\n } else if (/^\\.\\.\\/*/.test(url) || /^\\.\\/*/.test(url)) {\n const path = this.props.path;\n const originalPath = path.slice(0, path.lastIndexOf('/')) + '/' + url;\n imagePath = Utils.pathNormalize(originalPath);\n } else {\n return;\n }\n item.data.src = serviceURL + '/view-image-via-public-wiki/?slug=' + slug + '&path=' + imagePath;\n } else if (item.type == 'link') { // change link url\n url = item.data.href;\n if (Utils.isInternalFileLink(url, repoID)) { // change file url\n if (Utils.isInternalMarkdownLink(url, repoID)) {\n let path = Utils.getPathFromInternalMarkdownLink(url, repoID);\n // replace url\n item.data.href = serviceURL + '/published/' + slug + path;\n } else {\n item.data.href = url.replace(/(.*)lib\\/([-0-9a-f]{36})\\/file(.*)/g, (match, p1, p2, p3) => {\n return `${p1}d/${sharedToken}/files/?p=${p3}&dl=1`;\n });\n }\n } else if (Utils.isInternalDirLink(url, repoID)) { // change dir url\n let path = Utils.getPathFromInternalDirLink(url, repoID);\n // replace url\n item.data.href = serviceURL + '/published/' + slug + path;\n }\n }\n\n return item;\n }\n\n modifyValueBeforeRender = (value) => {\n let newNodes = Utils.changeMarkdownNodes(value, this.changeInlineNode);\n return newNodes;\n }\n\n renderMarkdown = () => {\n let isTOCShow = true;\n if (this.props.isTOCShow === false) {\n isTOCShow = false;\n }\n if (this.props.isWiki) {\n return (\n \n );\n }\n\n return (\n \n );\n }\n\n render() {\n if (this.props.isFileLoading) {\n return ;\n }\n // In dir-column-file repoID is one of props, width is 100%; In wiki-viewer repoID is not props, width isn't 100%\n let contentClassName = `${this.props.repoID ? contentClass + ' w-100' : contentClass}`;\n return (\n
\n
\n {this.props.children}\n {this.renderMarkdown()}\n

{gettext('Last modified by')} {this.props.latestContributor}, {this.props.lastModified}

\n
\n
\n );\n }\n}\n\nconst defaultProps = {\n isWiki: false,\n};\n\nWikiMarkdownViewer.propTypes = propTypes;\nMarkdownViewer.defaultProps = defaultProps;\n\nexport default WikiMarkdownViewer;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { permission } from '../../utils/constants';\nimport TextTranslation from '../../utils/text-translation';\nimport ItemDropdownMenu from '../dropdown-menu/item-dropdown-menu';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n userPerm: PropTypes.string,\n node: PropTypes.object.isRequired,\n currentPath: PropTypes.string.isRequired,\n paddingLeft: PropTypes.number.isRequired,\n isNodeMenuShow: PropTypes.bool.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onNodeClick: PropTypes.func.isRequired,\n onNodeExpanded: PropTypes.func.isRequired,\n onNodeCollapse: PropTypes.func.isRequired,\n onNodeDragStart: PropTypes.func.isRequired,\n freezeItem: PropTypes.func.isRequired,\n unfreezeItem: PropTypes.func.isRequired,\n onMenuItemClick: PropTypes.func,\n onNodeDragMove: PropTypes.func,\n onNodeDrop: PropTypes.func,\n handleContextClick: PropTypes.func.isRequired,\n onNodeDragEnter: PropTypes.func.isRequired,\n onNodeDragLeave:PropTypes.func.isRequired,\n};\n\nclass TreeNodeView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isHighlight: false,\n isShowOperationMenu: false,\n isNodeDropShow: false,\n };\n const { userPerm } = props;\n this.canDrag = userPerm === 'rw';\n const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);\n if (isCustomPermission) {\n const { modify } = customPermission.permission;\n this.canDrag = modify;\n }\n }\n\n componentWillReceiveProps(nextProps) {\n if (!nextProps.isItemFreezed) {\n this.setState({\n isShowOperationMenu: false,\n isHighlight: false,\n });\n }\n }\n\n onMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isShowOperationMenu: true,\n isHighlight: true,\n });\n }\n }\n\n onMouseOver = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isShowOperationMenu: true,\n isHighlight: true,\n });\n }\n }\n\n onMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isShowOperationMenu: false,\n isHighlight: false,\n });\n }\n }\n\n onNodeClick = () => {\n const { node } = this.props;\n const { object } = node;\n if (object.isDir()) {\n this.props.onNodeClick(this.props.node);\n return;\n }\n const { isCustomPermission, customPermission } = Utils.getUserPermission(object.permission);\n if (isCustomPermission) {\n const { preview: canPreview, modify: canModify } = customPermission.permission;\n if (!canPreview && !canModify) return;\n } \n this.props.onNodeClick(this.props.node);\n }\n\n onLoadToggle = (e) => {\n e.stopPropagation();\n let { node } = this.props;\n if (node.isExpanded) {\n this.props.onNodeCollapse(node);\n } else {\n this.props.onNodeExpanded(node);\n }\n }\n\n onNodeDragStart = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n this.props.onNodeDragStart(e, this.props.node);\n }\n\n onNodeDragEnter = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n if (this.props.node.object.type === 'dir') {\n this.setState({isNodeDropShow: true});\n }\n this.props.onNodeDragEnter(e, this.props.node);\n }\n\n onNodeDragMove = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n this.props.onNodeDragMove(e);\n }\n\n onNodeDragLeave = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n this.setState({isNodeDropShow: false});\n this.props.onNodeDragLeave(e, this.props.node);\n }\n\n onNodeDrop = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n e.stopPropagation();\n this.setState({isNodeDropShow: false});\n this.props.onNodeDrop(e, this.props.node);\n }\n\n unfreezeItem = () => {\n this.setState({isShowOperationMenu: false});\n this.props.unfreezeItem();\n }\n\n onMenuItemClick = (operation, event, node) => {\n this.props.onMenuItemClick(operation, node);\n }\n\n onItemMouseDown = (event) => {\n event.stopPropagation();\n if (event.button === 2) {\n return;\n }\n }\n\n onItemContextMenu = (event) => {\n this.handleContextClick(event);\n }\n\n handleContextClick = (event) => {\n this.props.handleContextClick(event, this.props.node);\n this.setState({isShowOperationMenu: false});\n }\n\n getNodeTypeAndIcon = () => {\n let { node } = this.props;\n let icon = '';\n let type = '';\n if (node.object.type === 'dir') {\n icon = ;\n type = 'dir';\n } else {\n let index = node.object.name.lastIndexOf('.');\n if (index === -1) {\n icon = ;\n type = 'file';\n } else {\n let suffix = node.object.name.slice(index).toLowerCase();\n if (suffix === '.png' || suffix === '.jpg' || suffix === '.jpeg' || suffix === '.gif' || suffix === '.bmp') {\n icon = ;\n type = 'image';\n }\n else if (suffix === '.md' || suffix === '.markdown') {\n icon = ;\n type = 'file';\n }\n else {\n icon = ;\n type = 'file';\n }\n }\n }\n return {icon, type};\n }\n\n calculateMenuList = (node) => {\n let { NEW_FOLDER, NEW_FILE, COPY, MOVE, RENAME, DELETE, OPEN_VIA_CLIENT} = TextTranslation;\n\n let menuList = [RENAME, DELETE, COPY, MOVE, OPEN_VIA_CLIENT];\n if (node.object.type === 'dir') {\n menuList = [NEW_FOLDER, NEW_FILE, COPY, MOVE, RENAME, DELETE];\n }\n\n const { userPerm } = this.props;\n const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);\n if (!isCustomPermission) {\n return menuList;\n }\n\n menuList = [];\n const { create: canCreate, modify: canModify, delete: canDelete, copy: canCopy } = customPermission.permission;\n if (node.object.type === 'dir') {\n canCreate && menuList.push(NEW_FOLDER, NEW_FILE);\n }\n\n canCopy && menuList.push(COPY);\n canModify && menuList.push(MOVE, RENAME);\n canDelete && menuList.push(DELETE);\n\n if (node.object.type !== 'dir') { \n menuList.push(OPEN_VIA_CLIENT);\n }\n\n return menuList;\n }\n\n renderChildren = () => {\n let { node, paddingLeft } = this.props;\n if (!node.hasChildren()) {\n return '';\n }\n return (\n
\n {node.children.map(item => {\n return (\n \n );\n })}\n
\n );\n }\n\n render() {\n let { currentPath, node, isNodeMenuShow, userPerm } = this.props;\n let { type, icon } = this.getNodeTypeAndIcon();\n let hlClass = this.state.isHighlight ? 'tree-node-inner-hover ' : '';\n if (node.path === currentPath) {\n hlClass = 'tree-node-hight-light';\n }\n\n const { isCustomPermission } = Utils.getUserPermission(userPerm)\n return (\n
\n \n
{node.object.name}
\n
\n {type === 'dir' && (!node.isLoaded || (node.isLoaded && node.hasChildren())) && (\n e.stopPropagation()}\n onClick={this.onLoadToggle}\n >\n )}\n {icon}\n
\n {isNodeMenuShow && (\n
\n {((userPerm === 'rw' || permission || isCustomPermission) && this.state.isShowOperationMenu) && (\n \n )}\n
\n )}\n
\n {node.isExpanded && this.renderChildren()}\n \n );\n }\n}\n\nTreeNodeView.propTypes = propTypes;\n\nexport default TreeNodeView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport TextTranslation from '../../utils/text-translation';\nimport TreeNodeView from './tree-node-view';\nimport ContextMenu from '../context-menu/context-menu';\nimport { hideMenu, showMenu } from '../context-menu/actions';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n userPerm: PropTypes.string,\n isNodeMenuShow: PropTypes.bool.isRequired,\n treeData: PropTypes.object.isRequired,\n currentPath: PropTypes.string.isRequired,\n onMenuItemClick: PropTypes.func,\n onNodeClick: PropTypes.func.isRequired,\n onNodeExpanded: PropTypes.func.isRequired,\n onNodeCollapse: PropTypes.func.isRequired,\n onItemMove: PropTypes.func,\n currentRepoInfo: PropTypes.object,\n selectedDirentList: PropTypes.array,\n onItemsMove: PropTypes.func,\n};\n\nconst PADDING_LEFT = 20;\n\nclass TreeView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false,\n isTreeViewDropTipShow: false,\n };\n const { userPerm } = props;\n this.canDrop = userPerm === 'rw';\n const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);\n if (isCustomPermission) {\n const { modify } = customPermission.permission;\n this.canDrop = modify;\n }\n }\n\n onItemMove = (repo, dirent, selectedPath, currentPath) => {\n this.props.onItemMove(repo, dirent, selectedPath, currentPath);\n }\n\n onNodeDragStart = (e, node) => {\n if (Utils.isIEBrower()) {\n return false;\n }\n let dragStartNodeData = {nodeDirent: node.object, nodeParentPath: node.parentNode.path, nodeRootPath: node.path};\n dragStartNodeData = JSON.stringify(dragStartNodeData);\n\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('applicaiton/drag-item-info', dragStartNodeData);\n }\n\n onNodeDragEnter = (e, node) => {\n if (Utils.isIEBrower() || !this.canDrop) {\n return false;\n }\n e.persist();\n if (e.target.className === 'tree-view tree ') {\n this.setState({\n isTreeViewDropTipShow: true,\n });\n }\n }\n\n onNodeDragMove = (e) => {\n if (Utils.isIEBrower() || !this.canDrop) {\n return false;\n }\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n }\n\n onNodeDragLeave = (e, node) => {\n if (Utils.isIEBrower() || !this.canDrop) {\n return false;\n }\n if (e.target.className === 'tree-view tree tree-view-drop') {\n this.setState({\n isTreeViewDropTipShow: false,\n });\n }\n }\n\n onContainerClick = (event) => {\n hideMenu();\n }\n\n onNodeClick = (node) => {\n hideMenu();\n this.props.onNodeClick(node);\n }\n\n onNodeDrop = (e, node) => {\n if (Utils.isIEBrower() || !this.canDrop) {\n return false;\n }\n if (e.dataTransfer.files.length) { // uploaded files\n return;\n }\n let dragStartNodeData = e.dataTransfer.getData('applicaiton/drag-item-info');\n dragStartNodeData = JSON.parse(dragStartNodeData);\n\n let {nodeDirent, nodeParentPath, nodeRootPath} = dragStartNodeData;\n let dropNodeData = node;\n\n if (Array.isArray(dragStartNodeData)) { //move items\n if (!dropNodeData) { //move items to root\n if (dragStartNodeData[0].nodeParentPath === '/') {\n this.setState({isTreeViewDropTipShow: false});\n return;\n }\n this.props.onItemsMove(this.props.currentRepoInfo, '/');\n this.setState({isTreeViewDropTipShow: false});\n return;\n }\n this.onMoveItems(dragStartNodeData, dropNodeData, this.props.currentRepoInfo, dropNodeData.path);\n return;\n }\n\n if (!dropNodeData) {\n if (nodeParentPath === '/') {\n this.setState({isTreeViewDropTipShow: false});\n return;\n }\n this.onItemMove(this.props.currentRepoInfo, nodeDirent, '/', nodeParentPath);\n this.setState({isTreeViewDropTipShow: false});\n return;\n }\n\n if (dropNodeData.object.type !== 'dir') {\n return;\n }\n\n if (nodeParentPath === dropNodeData.path) {\n return;\n }\n\n // copy the dirent to itself. eg: A/B -> A/B\n if (nodeParentPath === dropNodeData.parentNode.path) {\n if (dropNodeData.object.name === nodeDirent.name) {\n return;\n }\n }\n\n // copy the dirent to it's child. eg: A/B -> A/B/C\n if (dropNodeData.object.type === 'dir' && nodeDirent.type === 'dir') {\n if (dropNodeData.parentNode.path !== nodeParentPath) {\n let paths = Utils.getPaths(dropNodeData.path);\n if (paths.includes(nodeRootPath)) {\n return;\n }\n }\n }\n\n this.onItemMove(this.props.currentRepoInfo, nodeDirent, dropNodeData.path, nodeParentPath);\n }\n\n onMoveItems = (dragStartNodeData, dropNodeData, destRepo, destDirentPath) => {\n let direntPaths = [];\n let paths = Utils.getPaths(destDirentPath);\n dragStartNodeData.forEach(dirent => {\n let path = dirent.nodeRootPath;\n direntPaths.push(path);\n });\n\n if (dropNodeData.object.type !== 'dir') {\n return;\n }\n\n // move dirents to one of them. eg: A/B, A/C -> A/B\n if (direntPaths.some(direntPath => { return direntPath === destDirentPath;})) {\n return;\n }\n\n // move dirents to current path\n if (dragStartNodeData[0].nodeParentPath && dragStartNodeData[0].nodeParentPath === dropNodeData.path ) {\n return;\n }\n\n // move dirents to one of their child. eg: A/B, A/D -> A/B/C\n let isChildPath = direntPaths.some(direntPath => {\n return paths.includes(direntPath);\n });\n if (isChildPath) {\n return;\n }\n\n this.props.onItemsMove(destRepo, destDirentPath);\n }\n\n freezeItem = () => {\n this.setState({isItemFreezed: true});\n }\n\n unfreezeItem = () => {\n this.setState({isItemFreezed: false});\n }\n\n onMenuItemClick = (operation, node) => {\n this.props.onMenuItemClick(operation, node);\n hideMenu();\n }\n\n onMouseDown = (event) => {\n event.stopPropagation();\n if (event.button === 2) {\n return;\n }\n }\n\n onContextMenu = (event) => {\n event.preventDefault();\n\n let currentRepoInfo = this.props.currentRepoInfo;\n if (currentRepoInfo.permission !== 'admin' && currentRepoInfo.permission !== 'rw') {\n return '';\n }\n this.handleContextClick(event);\n }\n\n handleContextClick = (event, node) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!this.props.isNodeMenuShow) {\n return;\n }\n\n let x = event.clientX || (event.touches && event.touches[0].pageX);\n let y = event.clientY || (event.touches && event.touches[0].pageY);\n\n if (this.props.posX) {\n x -= this.props.posX;\n }\n if (this.props.posY) {\n y -= this.props.posY;\n }\n\n hideMenu();\n\n let menuList = this.getMenuList(node);\n\n let showMenuConfig = {\n id: 'tree-node-contextmenu',\n position: { x, y },\n target: event.target,\n currentObject: node,\n menuList: menuList,\n };\n\n showMenu(showMenuConfig);\n }\n\n getMenuList = (node) => {\n let menuList = [];\n\n let { NEW_FOLDER, NEW_FILE, COPY, MOVE, RENAME, DELETE, OPEN_VIA_CLIENT } = TextTranslation;\n\n if (!node) {\n return [NEW_FOLDER, NEW_FILE];\n }\n\n if (node.object.type === 'dir') {\n menuList = [NEW_FOLDER, NEW_FILE, COPY, MOVE, RENAME, DELETE];\n } else {\n menuList = [RENAME, DELETE, COPY, MOVE, OPEN_VIA_CLIENT];\n }\n\n const { userPerm } = this.props;\n const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);\n if (!isCustomPermission) {\n return menuList;\n }\n\n menuList = [];\n\n const { create: canCreate, modify: canModify, delete: canDelete, copy: canCopy } = customPermission.permission;\n if (!node) {\n canCreate && menuList.push(NEW_FOLDER, NEW_FILE);\n return menuList;\n }\n\n if (node.object.type === 'dir') {\n canCreate && menuList.push(NEW_FOLDER, NEW_FILE);\n }\n\n canCopy && menuList.push(COPY);\n canModify && menuList.push(MOVE, RENAME);\n canDelete && menuList.push(DELETE);\n\n if (node.object.type !== 'dir') { \n menuList.push(OPEN_VIA_CLIENT);\n }\n\n return menuList;\n }\n\n onShowMenu = () => {\n this.freezeItem();\n }\n\n onHideMenu = () => {\n this.unfreezeItem();\n }\n\n render() {\n return (\n \n \n \n \n );\n }\n}\n\nTreeView.propTypes = propTypes;\n\nexport default TreeView;\n","import assign from 'object-assign';\n\nimport { store } from './helpers';\n\nexport const MENU_SHOW = 'REACT_CONTEXTMENU_SHOW';\nexport const MENU_HIDE = 'REACT_CONTEXTMENU_HIDE';\n\n\nexport function dispatchGlobalEvent(eventName, opts, target = window) {\n // Compatibale with IE\n // @see http://stackoverflow.com/questions/26596123/internet-explorer-9-10-11-event-constructor-doesnt-work\n let event;\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(eventName, { detail: opts });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, false, true, opts);\n }\n\n if (target) {\n target.dispatchEvent(event);\n assign(store, opts);\n }\n}\n\nexport function showMenu(opts = {}, target) {\n dispatchGlobalEvent(MENU_SHOW, assign({}, opts, { type: MENU_SHOW }), target);\n}\n\nexport function hideMenu(opts = {}, target) {\n dispatchGlobalEvent(MENU_HIDE, assign({}, opts, { type: MENU_HIDE }), target);\n}\n"],"sourceRoot":""}