UNPKG

@jirkasa/code-box

Version:

Showcase code samples on the web with a container that lets users select and display different samples.

217 lines (216 loc) 8.63 kB
import CodeView from "../../code-view/CodeView"; import EventSourcePoint from "../../utils/EventSourcePoint"; import TreeNode from "../../utils/TreeNode"; import CodeViewButton from "../CodeViewButton"; import CodeViewFolderItem from "./CodeViewFolderItem"; import FileFolderItem from "./FileFolderItem"; import FolderInfo from "./FolderInfo"; import ProjectCodeBoxFile from "./ProjectCodeBoxFile"; /** Represents folder in project code box panel. */ declare class Folder { /** Folder button element. */ protected buttonElement: HTMLButtonElement; /** Folder button text element. */ private buttonTextElement; /** Container for folder items. */ private itemsContainer; /** Collapsible functionality. */ private collapsible; /** Name of folder. */ private name; /** Subfolders stored by name. */ private subfolders; /** Code view items stored by name. */ private codeViewItems; /** File items stored by name. */ private fileItems; /** Indicates whether all parent folders are opened. This value is changed when updateTabNavigation method is called. */ private lastAllParentOpened; /** * Creates new folder. * @param name Name of folder. * @param parentOpened Indicates whether all parent folders are opened. * @param openCloseAnimationSpeed Open/close animation speed in miliseconds. * @param openCloseAnimationEasingFunction CSS easing function for open/close animation. * @param svgSpritePath Path to SVG sprite for icons. * @param arrowIconName Name of arrow icon. * @param folderIconName Name of folder icon. * @param cssModifierClass CSS class to be added to folder button. * @param parentElement Element into which should be folder appended (null if it should not be appended). */ constructor(name: string, allParentsOpened: boolean, openCloseAnimationSpeed: number, openCloseAnimationEasingFunction: string, svgSpritePath?: string | null, arrowIconName?: string | null, folderIconName?: string | null, cssModifierClass?: string | null, parentElement?: HTMLElement | null); /** * Appends folder to element. * @param container Element to append folder to. */ appendTo(container: HTMLElement): void; /** * Detaches folder from its parent element. */ detach(): void; /** * Returns name of folder. * @returns Name of folder. */ getName(): string; /** * Sets name of folder. * @param name Name. */ setName(name: string): void; /** * Opens folder. * @param animate Determines whether animation should be used. */ open(animate?: boolean): void; /** * Closes folder. * @param animate Determines whether animation should be used. */ close(animate?: boolean): void; /** * Checkes whether folder is opened. * @returns Indicates whether folder is opened. */ isOpened(): boolean; /** * Updates tab navigation. * @param allParentOpened Indicates whether all parent folders are opened. */ updateTabNavigation(allParentOpened: boolean): void; /** * Adds folder as subfolder. * @param name Name of folder. * @param folder Folder. */ addFolder(name: string, folder: Folder): void; /** * Returns subfolder by name. * @param folderName Folder name. * @returns Subfolder or null if subfolder wasn't found. */ getFolder(folderName: string): Folder | null; /** * Returns subfolders of folder. * @returns Subfolders. */ getFolders(): Folder[]; /** * Removes subfolder. * @param folderName Name of folder to be removed. * @returns Indicates whether subfolder was successfully found and removed. */ removeFolder(folderName: string): boolean; /** * Renames subfolder. * @param folderName Name of folder to be renamed. * @param newFolderName New folder name. * @returns Indicates whether subfolder was successfully found and removed. */ renameFolder(folderName: string, newFolderName: string): boolean; /** * Returns number of subfolders (direct subfolders). * @returns Number of subfolders. */ getFoldersCount(): number; /** * Adds code view to folder. * @param name Name of code view. * @param codeView Code view. * @param showCodeViewEventSource Event source to be used to fire event when code view button is clicked. * @param svgSpritePath Path to SVG sprite with icons. * @param buttonIconName Icon name for code view button. * @returns Created code view item or null if code view could not be added to folder (when there is already code view with same name). */ addCodeView(name: string, codeView: CodeView, showCodeViewEventSource: EventSourcePoint<CodeViewButton, CodeView>, svgSpritePath?: string | null, buttonIconName?: string | null): CodeViewFolderItem | null; /** * Returns code view item by name. * @param name Name of code view. * @returns Code view item or null if code view item wasn't found. */ getCodeView(name: string): CodeViewFolderItem | null; /** * Returns code view items in folder. * @param traverseSubfolders Determines whether code view items in subfolders should also be included. * @returns Code view items. */ getCodeViews(traverseSubfolders?: boolean): CodeViewFolderItem[]; /** * Returns names of code view items in folder (not including code view items in subfolders). * @returns Code view names. */ getCodeViewNames(): string[]; /** * Removes code view item. * @param name Name of code view. * @returns Indicates whether code view item was successfully found and removed. */ removeCodeView(name: string): boolean; /** * Returns number of code view items (code view items in subfolders are not included). * @returns Number of code view items. */ getCodeViewsCount(): number; /** * Adds file to folder. * @param name Name of file. * @param codeBoxFile Code box file. * @param svgSpritePath Path to SVG sprite with icons. * @param buttonIconName Icon name for file button. * @param buttonDownloadIconName Download icon name for file button. * @returns Created file item or null if file could not be added to folder (when there is already file with the same name). */ addFile(name: string, codeBoxFile: ProjectCodeBoxFile, svgSpritePath?: string | null, buttonIconName?: string | null, buttonDownloadIconName?: string | null): FileFolderItem | null; /** * Returns file item by name. * @param name Name of file. * @returns File item or null if file item wasn't found. */ getFile(name: string): FileFolderItem | null; /** * Returns file items in folder. * @param traverseSubfolders Determines whether file items in subfolders should also be included. * @returns File items. */ getFiles(traverseSubfolders?: boolean): FileFolderItem[]; /** * Returns names of file items in folder (not including file items in subfolders). * @returns File names. */ getFileNames(): string[]; /** * Removes file item. * @param name Name of file. * @returns Indicates whether file item was successfully found and removed. */ removeFile(name: string): boolean; /** * Returns number of file items (file items in subfolders are not included). * @returns Number of file items. */ getFilesCount(): number; /** * Returns names of code view items in folder and subfolders. If code view item is located in subfolder, the final name can be for example "subfolder/filename.js" or "subfolder/anothersubfolder/filename.js". * @returns Code view names. */ getCodeViewNamesInFolderAndSubfolders(): string[]; /** * Returns names of file items in folder and subfolders. If file item is located in subfolder, the final name can be for example "subfolder/filename.png" or "subfolder/anothersubfolder/filename.png". * @returns File names. */ getFileNamesInFolderAndSubfolders(): string[]; /** * Returns folder structure of folder. * @returns Folder structure. */ getFolderStructure(): TreeNode<FolderInfo>; /** * Called by collapsible when it is toggled. */ private onCollapsibleToggled; /** * Sorts folder items alphabetically (first folders, then code view and file items). */ private sortItems; } export default Folder;