“version”:3,“sources”:[“utils/metadata.js”,“assets/images/logo-black-red.png”,“constants/api.js”,“ducks/notifications.js”,“utils/apiErrors.js”,“translations/en.js”,“translations/index.js”,“utils/fetch.js”,“utils/validation.js”,“ducks/utils.js”,“utils/helpers.js”,“ducks/config.js”,“constants/keyboardShortcuts.js”,“components/Splitter.js”,“components/Icon.js”,“components/Accordion.js”,“ducks/collections.js”,“containers/Sidebar.js”,“constants/index.js”,“containers/Header.js”,“containers/Notifications.js”,“containers/App.js”,“components/metadata/statics/StaticMetaSimple.js”,“components/metadata/statics/StaticMetaObjectItem.js”,“components/metadata/statics/StaticMetaObject.js”,“components/metadata/statics/StaticMetaArrayItem.js”,“components/metadata/statics/StaticMetaArray.js”,“components/metadata/StaticMetaButton.js”,“components/metadata/statics/StaticMetaField.js”,“components/FilePreview.js”,“components/Breadcrumbs.js”,“components/form/InputSearch.js”,“ducks/staticfiles.js”,“containers/views/StaticIndex.js”,“components/FilePicker.js”,“components/metadata/MetaTags.js”,“components/metadata/MetaSimple.js”,“components/metadata/MetaButtons.js”,“components/metadata/MetaObjectItem.js”,“components/metadata/MetaObject.js”,“components/metadata/MetaArrayItem.js”,“components/metadata/MetaArray.js”,“components/metadata/MetaField.js”,“ducks/metadata.js”,“ducks/siteMeta.js”,“containers/MetaFields.js”,“components/DataGUI.js”,“components/Editor.js”,“components/Errors.js”,“components/Button.js”,“containers/views/Configuration.js”,“components/Explorer.js”,“ducks/pages.js”,“containers/views/Pages.js”,“components/form/InputPath.js”,“components/form/InputTitle.js”,“utils/highlighter.js”,“components/MarkdownEditor.js”,“components/MarkdownPageBody.js”,“containers/views/PageEdit.js”,“components/CreateMarkdownPage.js”,“containers/views/PageNew.js”,“containers/views/Documents.js”,“containers/views/DocumentEdit.js”,“containers/views/DocumentNew.js”,“ducks/datafiles.js”,“containers/views/DataFiles.js”,“containers/views/DataFileEdit.js”,“containers/views/DataFileNew.js”,“ducks/drafts.js”,“containers/views/Drafts.js”,“containers/views/DraftEdit.js”,“containers/views/DraftNew.js”,“components/Dropzone.js”,“containers/views/StaticFiles.js”,“containers/views/NotFound.js”,“routes.js”,“ducks/index.js”,“store.js”,“index.js”],“names”:[“addFieldToMetadata”,“state”,“namePrefix”,“tmpState”,“cloneDeep”,“field”,“eval”,“undefined”,“_”,“isArray”,“push”,“new_field_count”,“metadata”,“removeFieldFromMetadata”,“key”,“length”,“splice”,“has”,“updateMetadataFieldKey”,“fieldKey”,“newKey”,“Object”,“keys”,“reduce”,“result”,“current”,“updateMetadataFieldValue”,“nameAttr”,“value”,“convertMetadataField”,“convertType”,“moveMetadataArrayItem”,“srcInd”,“targetInd”,“arr”,“injectDefaultFields”,“config”,“path”,“type”,“defaults”,“front_matter”,“content”,“e”,“metafields”,“each”,“scope”,“extend”,“values”,“computeFieldType”,“specialKeys”,“includes”,“isObject”,“module”,“exports”,“API”,“putConfigurationUrl”,“pagesAPIUrl”,“directory”,“pageAPIUrl”,“filename”,“draftsAPIUrl”,“draftAPIUrl”,“collectionAPIUrl”,“collection_name”,“documentAPIUrl”,“datafilesAPIUrl”,“datafileAPIUrl”,“staticfilesAPIUrl”,“staticfileAPIUrl”,“addNotification”,“title”,“message”,“level”,“notification”,“BadInputError”,“name”,“stack”,“Error”,“getDeleteMessage”,“getLeaveMessage”,“getNotFoundMessage”,“getOverrideMessage”,“getParserErrorMessage”,“getSuccessMessage”,“getErrorMessage”,“getUploadSuccessMessage”,“getUploadErrorMessage”,“getFetchErrorMessage”,“getUpdateErrorMessage”,“getDeleteErrorMessage”,“getPublishDraftMessage”,“draftPath”,“postPath”,“getTitleRequiredMessage”,“getFilenameRequiredMessage”,“getContentRequiredMessage”,“getFilenameNotValidMessage”,“sidebar”,“pages”,“posts”,“drafts”,“datafiles”,“collections”,“staticfiles”,“configuration”,“labels”,“save”,“label”,“triggeredLabel”,“create”,“delete”,“publish”,“view”,“upload”,“viewToggle”,“translations”,“en”,“get”,“url”,“action_success”,“action_failure”,“dispatch”,“fetch”,“credentials”,“then”,“res”,“json”,“data”,“catch”,“error”,“put”,“body”,“method”,“error_message”,“del”,“id”,“DATE_FILENAME_MATCHER”,“FILENAME_MATCHER”,“validatePage”,“validator”,“validations”,“messages”,“errorMessages”,“validationStr”,“list”,“validationArr”,“split”,“single”,“test”,“validated”,“filterBySearchInput”,“input”,“filter”,“p”,“toLowerCase”,“filterDeleted”,“item”,“relative_path”,“search”,“clearErrors”,“validationError”,“errors”,“toYAML”,“obj”,“isEmpty”,“yaml”,“safeDump”,“indent”,“capitalize”,“string”,“charAt”,“toUpperCase”,“substring”,“toTitleCase”,“replace”,“txt”,“substr”,“slugify”,“a”,“RegExp”,“join”,“toString”,“c”,“indexOf”,“getFilenameFromPath”,“lastIndexOf”,“getExtensionFromPath”,“index”,“preventDefault”,“event”,“trimObject”,“object”,“acc”,“trim”,“JSON”,“parse”,“Array”,“getDocumentTitle”,“splat”,“prefix”,“Boolean”,“computeRelativePath”,“sanitizeFrontMatter”,“omit”,“preparePayload”,“stringify”,“fetchConfig”,“putConfig”,“source”,“getState”,“payload”,“raw_content”,“validateConfig”,“onEditorChange”,“Splitter”,“className”,“Icon”,“aria-hidden”,“Accordion”,“collapsed”,“handleClick”,“setState”,“this”,“props”,“counter”,“count”,“icon”,“minHeight”,“children”,“accordionClasses”,“classnames”,“panelHeight”,“style”,“maxHeight”,“onClick”,“renderIndicator”,“Component”,“defaultProps”,“fetchCollections”,“fetchCollection”,“collection”,“fetchDocument”,“createDocument”,“date”,“validateDocument”,“generateFilenameFromTitle”,“putDocument”,“deleteDocument”,“slugifiedTitle”,“docDate”,“moment”,“format”,“SidebarTranslations”,“Sidebar”,“hiddens”,“collectionItems”,“map”,“col”,“i”,“activeClassName”,“to”,“sidebar_label”,“itemsCount”,“hiddenLinks”,“link”,“translation”,“splitterBefore”,“defaultLinks”,“jekyll_admin”,“hidden_links”,“visibleLinks”,“difference”,“links”,“collectionsPanel”,“renderCollections”,“postsPanel”,“draftsPanel”,“show_drafts”,“connect”,“bindActionCreators”,“Header”,“target”,“process”,“Notifications”,“elementStyles”,“Containers”,“DefaultStyle”,“padding”,“width”,“textAlign”,“Title”,“fontSize”,“color”,“NotificationItem”,“margin”,“borderRadius”,“transition”,“success”,“backgroundColor”,“warning”,“info”,“Dismiss”,“top”,“right”,“height”,“border”,“opacity”,“notificationSystem”,“refs”,“nextProps”,“position”,“autoDismiss”,“ref”,“notifications”,“App”,“updated”,“prevProps”,“isFetching”,“homepage”,“router”,“currentPathname”,“getCurrentLocation”,“pathname”,“concat”,“keyMap”,“keyboardShortcuts”,“StaticMetaSimple”,“fieldValue”,“disabled”,“FieldTypes”,“array”,“StaticMetaArray”,“StaticMetaObject”,“simple”,“StaticMetaObjectItem”,“CurrentComponent”,“items”,“StaticMetaArrayItem”,“StaticMetaButton”,“dropdown”,“toggleDropdownState”,“onEnableField”,“dropdownClasses”,“tabIndex”,“onBlur”,“onMouseDown”,“StaticMetaField”,“enableField”,“FilePreview”,“onClickDelete”,“window”,“confirm”,“file”,“from_theme”,“handleClickDelete”,“node”,“isImageFile”,“src”,“http_url”,“alt”,“nodeLink”,“href”,“rel”,“renderFileOverlay”,“extname”,“Breadcrumbs”,“base”,“nodes”,“paths”,“before”,“slice”,“InputSearch”,“handleKeyPress”,“searchBy”,“onKeyPress”,“placeholder”,“fetchStaticFiles”,“uploadStaticFiles”,“files”,“reader”,“FileReader”,“readAsDataURL”,“onloadend”,“encoded_content”,“deleteStaticFile”,“filterByFilename”,“f”,“StaticIndex”,“onClickStaticFile”,“modalView”,“renderDirectoryListingBtn”,“renderPreviewNode”,“utils”,“FilePicker”,“showModal”,“customStyles”,“overlay”,“zIndex”,“paddingTop”,“paddingRight”,“paddingLeft”,“openModal”,“shutModal”,“onPickItem”,“onPick”,“isOpen”,“contentLabel”,“onRequestClose”,“MetaTags”,“creators”,“handleKeyUp”,“pageTags”,“createTag”,“deleteTag”,“handleOnChange”,“tagInput”,“showSuggestions”,“autoSuggest”,“closeSuggestions”,“rectifyTag”,“tag”,“rectified”,“updateFieldValue”,“clone”,“tagName”,“pop”,“taginput”,“focus”,“suggestions”,“entry”,“startsWith”,“tags”,“suggests”,“suggestionClasses”,“visible”,“onChange”,“onFocus”,“onKeyUp”,“hidden”,“momentLocalizer”,“MetaSimple”,“handleEditableChange”,“handleDatepickerChange”,“dateStr”,“handleEditableBlur”,“imagepicker”,“handleLayoutChange”,“dateValue”,“Date”,“siteMeta”,“renderEditable”,“layouts”,“defaultValue”,“renderDatepicker”,“renderStaticFilePicker”,“renderTagsInput”,“renderLayoutPicker”,“MetaButtons”,“fieldTypes”,“fieldTypeKeys”,“onConvertClick”,“parentKey”,“ftype”,“currentType”,“parentType”,“onRemoveClick”,“isDefaultField”,“sortableHandle”,“renderDropdownItems”,“MetaObjectItem”,“convertField”,“updateFieldKey”,“currentValue”,“findDOMNode”,“field_key”,“removeField”,“addField”,“key_prefix”,“moveArrayItem”,“MetaArray”,“MetaObject”,“handleKeyBlur”,“handleConvertClick”,“handleRemoveClick”,“MetaArrayItem”,“data-id”,“component”,“options”,“draggable”,“group”,“pull”,“handle”,“animation”,“onEnd”,“getAttribute”,“newIndex”,“Sortable”,“sortableGroupDecorator”,“bind”,“MetaField”,“select”,“isInDefaultState”,“storeContentFields”,“updateTitle”,“updateBody”,“updatePath”,“fetchSiteMeta”,“MetaFields”,“fields”,“dataview”,“isEqual”,“site”,“staticFields”,“visibleKeys”,“metafieldsClass”,“datafields”,“defaultFieldsNotOverwritten”,“hasOwnProperty”,“newWrapper”,“meta”,“DataGUI”,“handleChange”,“slug”,“ext”,“restricted”,“renderPathFields”,“Editor”,“editorChanged”,“nextState”,“ace”,“editor”,“getValue”,“mode”,“theme”,“showGutter”,“showPrintMargin”,“highlightActiveLine”,“scrollMargin”,“Errors”,“iconMap”,“Button”,“active”,“triggered”,“block”,“thin”,“btnClass”,“iconName”,“iconNode”,“Configuration”,“guiView”,“routerWillLeave”,“nextLocation”,“fieldChanged”,“toggleView”,“handleClickSave”,“route”,“setRouteLeaveHook”,“keyboardHandlers”,“handlers”,“renderContentBody”,“withRouter”,“Explorer”,“deleteItem”,“params”,“dir”,“browserHistory”,“renderTitleCell”,“renderDirectoryRow”,“renderFileRow”,“newBtnLabel”,“typeLabel”,“renderRows”,“fetchPages”,“fetchPage”,“createPage”,“putPage”,“deletePage”,“Pages”,“InputFilename”,“tooltip”,“InputTitle”,“hljs”,“registerLanguage”,“require”,“classNames”,“MarkdownEditor”,“_replaceSelectedText”,“cm”,“headNTail”,“startPoint”,“getCursor”,“endPoint”,“text”,“getSelection”,“head”,“tail”,“replaceSelection”,“ch”,“setSelection”,“handleFilePick”,“codemirror”,“insertTexts”,“image”,“initialValue”,“destroy”,“onSave”,“opts”,“codeSyntaxHighlighting”,“toolbarIcons”,“action”,“filepicker”,“trigger”,“click”,“SimpleMDE”,“on”,“elementToRemove”,“container”,“querySelector”,“remove”,“display”,“MarkdownPageBody”,“staticmetafields”,“PageEdit”,“new_path”,“page”,“front_matter_defaults”,“document_title”,“CreateMarkdownPage”,“onClickSave”,“metaType”,“defaultFields”,“PageNew”,“Documents”,“doc”,“modified_time”,“documents”,“renderTable”,“entries”,“DocumentEdit”,“currentDocument”,“DocumentNew”,“fetchDataFiles”,“fetchDataFile”,“putDataFile”,“validateDatafile”,“deleteDataFile”,“onDataFileChanged”,“DataFiles”,“DataFileEdit”,“datafileChanged”,“datafile”,“data_dir”,“gui”,“filepath”,“inputpath”,“data_path”,“guiSupport”,“renderAside”,“currentFile”,“DataFileNew”,“fetchDrafts”,“fetchDraft”,“createDraft”,“putDraft”,“deleteDraft”,“publishDraft”,“Drafts”,“DraftEdit”,“draft”,“today”,“datedfilename”,“goTo”,“handleClickPublish”,“DraftNew”,“Dropzone”,“ReactDropzone”,“open”,“onDrop”,“onClickItem”,“multiple”,“disableClick”,“StaticFiles”,“openDropzone”,“dropzone”,“uploadedFiles”,“existingFiles”,“currentFiles”,“currentFilenames”,“cf”,“chain”,“existingUploadedFilenames”,“static_files”,“dirs”,“entity”,“renderFilePreviewRow”,“NotFound”,“combineReducers”,“routing”,“routerReducer”,“Math”,“random”,“uploading”,“configureStore”,“createLogger”,“initialState”,“middlewares”,“thunk”,“createStore”,“rootReducer”,“compose”,“applyMiddleware”,“store”,“history”,“syncHistoryWithStore”,“render”,“routes”,“from”,“document”,“getElementById”],“mappings”:“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”,“file”:“static/js/main.2ce220f0.chunk.js”,“sourcesContent”:[“import _ from ‘underscore’;nimport cloneDeep from ‘lodash/cloneDeep’;nn/**n * Returns the metadata of the state with the new empty field. If the field doesn * not exist, returns the original metadata. Does not mutate the given state.n * @param {Object} staten * @param {String} namePrefixn * @return {Object} metadatan */nexport const addFieldToMetadata = (state, namePrefix) => {n let tmpState = cloneDeep(state);n let field = eval(`tmpState.${namePrefix}`);n if (field === undefined) return tmpState.metadata;n if (_.isArray(field)) field.push(”);n else field[`New field ${state.new_field_count}`] = ”;n return tmpState.metadata;n};nn/**n * Returns the metadata of the state with the removed key. If the field does notn * exist, returns the original metadata. Does not mutate the given state.n * @param {Object} staten * @param {String} namePrefixn * @param {String} keyn * @return {Object} metadatan */nexport const removeFieldFromMetadata = (state, namePrefix, key) => {n let tmpState = cloneDeep(state);n let field = eval(`tmpState.${namePrefix}`);n if (field === undefined) return tmpState.metadata;n if (_.isArray(field)) {n if (key >= field.length) {n return tmpState.metadata;n }n field.splice(key, 1);n } else {n if (!_.has(field, key)) {n return tmpState.metadata;n }n delete field[key];n }n return tmpState.metadata;n};nn/**n * Returns the metadata of the state with the updated key. If the field does notn * exist or the key already exists, returns the original metadata. Does notn * mutate the given state.n * @param {Object} staten * @param {String} namePrefixn * @param {String} fieldKeyn * @param {String} newKeyn * @return {Object} metadatan */nexport const updateMetadataFieldKey = (state, namePrefix, fieldKey, newKey) => {n let tmpState = cloneDeep(state);n let field = eval(`tmpState.${namePrefix}`);n if (field === undefined) return tmpState.metadata;n if (_.has(field, newKey)) return tmpState.metadata;n field = Object.keys(field).reduce((result, current) => {n if (current === fieldKey) result[newKey] = field[current];n else result[current] = field[current];n return result;n }, {});n eval(`tmpState.${namePrefix} = field`);n return tmpState.metadata;n};nn/**n * Returns the metadata of the state with the updated value of given path(nameAttr).n * If the field does not exist, creates a new field. Does not mutate the given state.n * @param {Object} staten * @param {String} nameAttrn * @param {String} valuen * @return {Object} metadatan */nexport const updateMetadataFieldValue = (state, nameAttr, value) => {n let tmpState = cloneDeep(state);n eval(`tmpState.${nameAttr} = value`);n return tmpState.metadata;n};nn/**n * Returns the metadata of the state with the converted type of given path(nameAttr).n * If the field does not exist, returns the original metadata.n * Does not mutate the given state.n * @param {Object} staten * @param {String} nameAttrn * @param {String} convertTypen * @return {Object} metadatan */nexport const convertMetadataField = (state, nameAttr, convertType) => {n let tmpState = cloneDeep(state);n let field = eval(`tmpState.${nameAttr}`);n if (field === undefined) return tmpState.metadata;n if (convertType === ‘array’) field = [”];n else if (convertType === ‘object’) {n let key = `New field ${state.new_field_count}`;n field = { [key]: ” };n } else field = ”;n eval(`tmpState.${nameAttr} = field`);n return tmpState.metadata;n};nn/**n * Returns the metadata of the state with the sorted array. Moves the array item ton * target index, shifts the rest of them. If the given path is not an array,n * returns the original metadata. Does not mutate the given state.n * @param {Object} staten * @param {String} namePrefixn * @param {Number} srcIndn * @param {Number} targetIndn * @return {Object} metadatan */nexport const moveMetadataArrayItem = (state, namePrefix, srcInd, targetInd) => {n let tmpState = cloneDeep(state);n let arr = eval(`tmpState.${namePrefix}`);n if (!_.isArray(arr)) return tmpState.metadata;n arr.splice(targetInd, 0, arr.splice(srcInd, 1)[0]);n return tmpState.metadata;n};nn/**n * Injects the relevant default front matter fields read from the config file inton * the provided front matter objectn * @param {Object} confign * @param {String} pathn * @param {String} typen * @param {Object} front_mattern * @return {Object} metadatan */nexport const injectDefaultFields = (config, path, type, front_matter = {}) => {n let defaults;n try {n defaults = config.content.defaults;n } catch (e) {n return {};n }n let metafields = {};n _.each(defaults, field => {n const scope = field.scope;n if (n (!scope.type || scope.type === type) &&n (!scope.path || scope.path === path)n ) {n _.extend(metafields, field.values);n }n });n return _.extend(metafields, front_matter);n};nn/**n * Given a field-value and corresponding key, this utility returnsn * metadata type for the pair.n * @param {*} valuen * @param {String} keyn * @return {String} typen */nexport const computeFieldType = (value, key = null) => {n let type = ‘simple’;n const specialKeys = [‘tags’, ‘categories’];n if (specialKeys.includes(key) && _.isArray(value)) return type;nn if (_.isObject(value)) type = ‘object’;n if (_.isArray(value)) type = ‘array’;n return type;n};n”,“module.exports = "data:image/png;base64,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"”,“export const API =n process.env.NODE_ENV === ‘production’n ? ‘/_api’n : ‘http://localhost:4000/_api’;nnexport const getSiteMetaUrl = () => `${API}/site_meta`;nnexport const getConfigurationUrl = () => `${API}/configuration`;nexport const putConfigurationUrl = () => `${API}/configuration`;nnexport const pagesAPIUrl = (directory = ”) => `${API}/pages/${directory}`;nexport const pageAPIUrl = (directory, filename) =>n directoryn ? `${API}/pages/${directory}/${filename}`n : `${API}/pages/${filename}`;nnexport const draftsAPIUrl = (directory = ”) => `${API}/drafts/${directory}`;nexport const draftAPIUrl = (directory, filename) =>n directoryn ? `${API}/drafts/${directory}/${filename}`n : `${API}/drafts/${filename}`;nnexport const collectionsAPIUrl = () => `${API}/collections`;nexport const collectionAPIUrl = (collection_name, directory) =>n directoryn ? `${API}/collections/${collection_name}/entries/${directory}`n : `${API}/collections/${collection_name}/entries`;nexport const documentAPIUrl = (collection_name, directory, filename) =>n directoryn ? `${API}/collections/${collection_name}/${directory}/${filename}`n : `${API}/collections/${collection_name}/${filename}`;nnexport const datafilesAPIUrl = (directory = ”) => `${API}/data/${directory}`;nexport const datafileAPIUrl = (directory, filename) =>n directoryn ? `${API}/data/${directory}/${filename}`n : `${API}/data/${filename}`;nnexport const staticfilesAPIUrl = (directory = ”) =>n `${API}/static_files/${directory}`;nexport const staticfileAPIUrl = (directory, filename) =>n directoryn ? `${API}/static_files/${directory}/${filename}`n : `${API}/static_files/${filename}`;n”,“// Action Typesnexport const ADD_NOTIFICATION = ‘ADD_NOTIFICATION’;nn// Actionsnexport const addNotification = (title, message, level) => ({n type: ADD_NOTIFICATION,n notification: {n title,n message,n level,n },n});nn// Reducernexport default function notifications(n state = {n notification: {},n },n actionn) {n switch (action.type) {n case ADD_NOTIFICATION:n return {n …state,n notification: action.notification,n };n default:n return state;n }n}n”,“export class BadInputError extends Error {n constructor(message) {n super();n this.name = ‘BadInputError’;n this.message = message || ‘Bad input’;n this.stack = new Error().stack;n }n}n”,“// inline messagesnexport const getDeleteMessage = filename =>n `Are you sure that you want to delete "${filename}" ?`;nnexport const getLeaveMessage = () =>n ‘You have unsaved changes on this page. Are you sure you want to leave?’;nnexport const getNotFoundMessage = type => `No ${type} found.`;nnexport const getOverrideMessage = filename =>n `${filename} will be overwritten. Continue anyway?`;nn// notification messagesnexport const getParserErrorMessage = () => ‘Parse Error’;nnexport const getSuccessMessage = () => ‘Success’;nnexport const getErrorMessage = () => ‘Error’;nnexport const getUploadSuccessMessage = filename =>n `${filename} uploaded successfully`;nnexport const getUploadErrorMessage = () => `Error occurred uploading the file.`;nnexport const getFetchErrorMessage = filename =>n `Could not fetch the ${filename}`;nnexport const getUpdateErrorMessage = filename =>n `Could not update the ${filename}`;nnexport const getDeleteErrorMessage = filename =>n `Could not delete the ${filename}`;nnexport const getPublishDraftMessage = (draftPath, postPath) =>n `‘${draftPath}’ will be converted to ‘${postPath}’`;nn// validation messagesnexport const getTitleRequiredMessage = () => ‘The title is required.’;nnexport const getFilenameRequiredMessage = () => ‘The filename is required.’;nnexport const getContentRequiredMessage = () => ‘The content is required.’;nnexport const getFilenameNotValidMessage = () => ‘The filename is not valid.’;nn// sidebar titlesnexport const sidebar = {n pages: ‘Pages’,n posts: ‘Posts’,n drafts: ‘Drafts’,n datafiles: ‘Data Files’,n collections: ‘Collections’,n staticfiles: ‘Static Files’,n configuration: ‘Configuration’,n};nn// button labelsnexport const labels = {n save: {n label: ‘Save’,n triggeredLabel: ‘Saved’,n },n create: {n label: ‘Create’,n triggeredLabel: ‘Created’,n },n delete: {n label: ‘Delete’,n },n publish: {n label: ‘Publish’,n },n view: {n label: ‘View’,n },n upload: {n label: ‘Upload files’,n },n viewToggle: {n label: ‘Switch View to GUI Editor’,n triggeredLabel: ‘Switch View to Raw Editor’,n },n};n”,“// TODO:n// ——————————-n// import * as da from ‘./da’;n// import * as es from ‘./es’;n// import * as fr from ‘./fr’;n// import * as ptBr from ‘./ptBr’;n// import * as sv from ‘./sv’;nnimport * as en from ‘./en’;nnconst translations = en; // TODO: select languagenexport default translations;n”,“import fetch from ‘isomorphic-fetch’;nimport { addNotification } from ‘../ducks/notifications’;nimport { BadInputError } from ‘./apiErrors’;nnimport translations from ‘../translations’;nconst {n getErrorMessage,n getFetchErrorMessage,n getUpdateErrorMessage,n getDeleteErrorMessage,n} = translations;nn/**n * Fetch wrapper for GET request that dispatches actions according to then * request statusn * @param {String} urln * @param {Object} action_successn * @param {Object} action_failuren * @return {Function} dispatchn */nexport const get = (url, action_success, action_failure, dispatch) => {n return fetch(url, { credentials: ‘same-origin’ })n .then(res => res.json())n .then(data =>n dispatch({n type: action_success.type,n [action_success.name]: data,n })n )n .catch(error => {n dispatch({n type: action_failure.type,n [action_failure.name]: error,n });n dispatch(n addNotification(n getErrorMessage(),n getFetchErrorMessage(action_success.name),n ‘error’n )n );n });n};nn/**n * Fetch wrapper for PUT request that dispatches actions according to then * request statusn * @param {String} urln * @param {Object} bodyn * @param {Object} action_successn * @param {Object} action_failuren * @return {Function} dispatchn */nexport const put = (url, body, action_success, action_failure, dispatch) => {n return fetch(url, {n method: ‘PUT’,n credentials: ‘same-origin’,n body,n })n .then(res => res.json())n .then(data => {n if (data.error_message) {n throw new BadInputError(data.error_message);n }n dispatch({n type: action_success.type,n [action_success.name]: data,n });n })n .catch(error => {n dispatch({n type: action_failure.type,n [action_failure.name]: error,n });n let error_message =n error.name === ‘BadInputError’n ? error.messagen : getUpdateErrorMessage(action_success.name);n dispatch(addNotification(getErrorMessage(), error_message, ‘error’));n });n};nn/**n * Fetch wrapper for DELETE request that dispatches actions according to then * request statusn * @param {String} urln * @param {Object} action_successn * @param {Object} action_failuren * @return {Function} dispatchn */nexport const del = (url, action_success, action_failure, dispatch) => {n return fetch(url, {n method: ‘DELETE’,n credentials: ‘same-origin’,n })n .then(data =>n dispatch({n type: action_success.type,n id: action_success.id,n })n )n .catch(error => {n dispatch({n type: action_failure.type,n [action_failure.name]: error,n });n dispatch(n addNotification(n getErrorMessage(),n getDeleteErrorMessage(action_success.name),n ‘error’n )n );n });n};n”,“import _ from ‘underscore’;nnimport translations from ‘../translations’;nconst { getTitleRequiredMessage, getFilenameNotValidMessage } = translations;nnconst DATE_FILENAME_MATCHER = /^(?:.+\/)*(\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]))-(.*)(\.[^.]+)$/;nconst FILENAME_MATCHER = /^(.*)(\.[^.]+)$/;nnconst validated = (field, single) => {n switch (single) {n case ‘required’:n return !!field;n case ‘date’:n return DATE_FILENAME_MATCHER.test(field);n case ‘filename’:n return FILENAME_MATCHER.test(field);n default:n return false;n }n};nnexport const validatePage = metadata => {n return validator(n metadata,n { path: ‘required|filename’ },n {n ‘path.required’: getTitleRequiredMessage(),n ‘path.filename’: getFilenameNotValidMessage(),n }n );n};nn/**n * Returns error messages if the given values does not pass the provided validations.n * @param {Object} valuesn * @param {Object} validationsn * @param {Object} messagesn * @return {Array} errorMessagesn */nexport const validator = (values, validations, messages) => {n let errorMessages = [];n _.each(validations, (validationStr, field, list) => {n const validationArr = validationStr.split(‘|’);n _.each(validationArr, single => {n if (!validated(values[field], single)) {n errorMessages.push(messages[`${field}.${single}`]);n }n });n });n return errorMessages;n};n”,“// Selectorsnexport const filterBySearchInput = (list, input) => {n if (!input) {n return list;n }n return list.filter(p => p.name.toLowerCase().includes(input.toLowerCase()));n};nnexport const filterDeleted = (list, id) => {n return list.filter(item => item.relative_path !== id);n};nn// Action Typesnexport const SEARCH_CONTENT = ‘SEARCH_CONTENT’;nexport const CLEAR_ERRORS = ‘CLEAR_ERRORS’;nexport const VALIDATION_ERROR = ‘VALIDATION_ERROR’;nn// Actionsnexport const search = input => ({n type: SEARCH_CONTENT,n input,n});nnexport const clearErrors = () => ({n type: CLEAR_ERRORS,n});nnexport const validationError = errors => ({n type: VALIDATION_ERROR,n errors,n});nn// Reducernexport default function utils(n state = {n input: ”,n errors: [],n },n actionn) {n switch (action.type) {n case SEARCH_CONTENT:n return {n …state,n input: action.input,n };n case CLEAR_ERRORS:n return {n …state,n errors: [],n };n case VALIDATION_ERROR:n return {n …state,n errors: action.errors,n };n default:n return {n …state,n input: ”,n };n }n}n”,“import yaml from ‘js-yaml’;nimport _ from ‘underscore’;nn/**n * Converts the object into YAML string.n * @param {Object} objectn * @return {String} yamln */nexport const toYAML = obj =>n !_.isEmpty(obj) ? yaml.safeDump(obj, { indent: 2 }) : ”;nn/**n * Converts the YAML string into JS object.n * @param {String} stringn * @return {Object} objn */nexport const toJSON = yamlString => (yamlString ? yaml.load(yamlString) : {});nn/**n * Capitalize the given string.n * @param {String} stringn * @return {String} stringn */nexport const capitalize = string => {n if (!string) return ”;n return string.charAt(0).toUpperCase() + string.substring(1).toLowerCase();n};nn/**n * Convert the given string into title case format.n * @param {String} stringn * @return {String} stringn */nexport const toTitleCase = string => {n if (!string) return ”;n return string.replace(/\w\S*/g, txt => {n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();n });n};nn/**n * Slugify the given stringn * @param {String} stringn * @return {String} stringn */nexport const slugify = string => {n if (!string) return ”;n const a = ‘àáäâèéëêìíïîıòóöôùúüûñçşßÿœæŕśńṕẃǵğǹḿǘẍźḧ·/_,:;’;n const b = ‘aaaaeeeeiiiiioooouuuuncssyoarsnpwggnmuxzh——’;n const p = new RegExp(a.split(”).join(‘|’), ‘g’);nn return stringn .toString()n .toLowerCase()n .replace(/\s+/g, ‘-’) // Replace spaces with -n .replace(p, c => b.charAt(a.indexOf©)) // Replace special charsn .replace(/&/g, ‘-’) // Replace & with ‘and’n .replace(/[^\w-]+/g, ”) // Remove all non-word charsn .replace(/-+/g, ‘-’) // Replace multiple - with single -n .replace(/^-+/, ”) // Trim - from start of textn .replace(/-+$/, ”); // Trim - from end of textn};nn/**n * Returns filename from the given pathn * @param {String} pathn * @return {String} filenamen */nexport const getFilenameFromPath = path => {n if (!path) return ”;n return path.substring(path.lastIndexOf(‘/’) + 1);n};nn/**n * Returns extension from the given path or filenamen * @param {String} path or filenamen * @return {String} extension or niln */nexport const getExtensionFromPath = path => {n if (!path) return ”;n const filename = getFilenameFromPath(path);n const index = filename.lastIndexOf(‘.’);nn if (index > 0) {n return filename.substring(index + 1);n } else {n return ”;n }n};nn/**n * returns the uploaded static files that are being overwrittenn * @param {Array} uploadedFilesn * @param {Array} currentFilesn * @return {Array} filenamesn */nexport const existingUploadedFilenames = (uploadedFiles, currentFiles) => {n if (n (uploadedFiles && !uploadedFiles.length) ||n (currentFiles && !currentFiles.length)n ) {n return [];n }n const currentFilenames = _.map(currentFiles, cf =>n getFilenameFromPath(cf.path)n );n return _.chain(uploadedFiles)n .filter(file => currentFilenames.includes(file.name))n .map(file => file.name)n .value();n};nn/**n * Given an Event object, prevents the default eventn * from bubbling, if possible.n * @param {Event} eventn */nexport const preventDefault = event => {n if (event && event.preventDefault) {n event.preventDefault();n }n};nn/**n * Given an object, trims every keys and values recursively.n * @param {Object} objectn * @return {Object} trimmedObjectn */nexport const trimObject = object => {n if (!_.isObject(object)) return object;n return _.keys(object).reduce((acc, key) => {n if (typeof object[key] === ‘string’) {n try {n acc[key.trim()] = JSON.parse(object[key].trim());n } catch (e) {n acc[key.trim()] = object[key].trim();n }n } else {n acc[key.trim()] = trimObject(object[key]);n }n return acc;n }, Array.isArray(object) ? [] : {});n};nn/**n * Given a resource type and splat, returns a formatted title string.n * Falsy values are discarded.n * @param {String} type - Resource type.n * @param {String} splat - Directory splat for current resource.n * @param {String} [prefix=”] - Optional string text to be placed in front.n * @return {String} Empty string or formatted title.n */nexport const getDocumentTitle = (type, splat, prefix = ”) => {n if (!type) return ”;n const label = toTitleCase(type.toString());n return [prefix, splat, label].filter(Boolean).join(‘ | ’);n};nn/**n * @param {String} directory - Directory splat for current resource.n * @param {String} filename - Basename of current resource.n * @return {String} Filename or directory splat joined to the filename.n */nexport const computeRelativePath = (directory, filename) => {n return directory ? `${directory}/${filename}` : `${filename}`;n};nn// omit raw_content, path and empty-value keys in metadata state from front_matternexport const sanitizeFrontMatter = metadata => {n return _.omit(metadata, (value, key, object) => {n return key === ‘raw_content’ || key === ‘path’ || value === ”;n });n};nnexport const preparePayload = obj => JSON.stringify(trimObject(obj));nexport const getFilenameFromTitle = title => `${slugify(title)}.md`;n”,“import { getConfigurationUrl, putConfigurationUrl } from ‘../constants/api’;nimport { get, put } from ‘../utils/fetch’;nimport { validator } from ‘../utils/validation’;nimport { clearErrors, validationError } from ‘./utils’;nimport { toYAML } from ‘../utils/helpers’;nnimport translations from ‘../translations’;nconst { getContentRequiredMessage } = translations;nn// Action Typesnexport const FETCH_CONFIG_REQUEST = ‘FETCH_CONFIG_REQUEST’;nexport const FETCH_CONFIG_SUCCESS = ‘FETCH_CONFIG_SUCCESS’;nexport const FETCH_CONFIG_FAILURE = ‘FETCH_CONFIG_FAILURE’;nexport const PUT_CONFIG_REQUEST = ‘PUT_CONFIG_REQUEST’;nexport const PUT_CONFIG_SUCCESS = ‘PUT_CONFIG_SUCCESS’;nexport const PUT_CONFIG_FAILURE = ‘PUT_CONFIG_FAILURE’;nexport const CONFIG_EDITOR_CHANGED = ‘CONFIG_EDITOR_CHANGED’;nn// Actionsnexport const fetchConfig = () => dispatch => {n dispatch({ type: FETCH_CONFIG_REQUEST });n return get(n getConfigurationUrl(),n { type: FETCH_CONFIG_SUCCESS, name: ‘config’ },n { type: FETCH_CONFIG_FAILURE, name: ‘error’ },n dispatchn );n};nnexport const putConfig = (config, source = ‘editor’) => (n dispatch,n getStaten) => {n let payload;nn if (source === ‘gui’) {n config = getState().metadata.metadata;n payload = { raw_content: toYAML(config) };n } else {n payload = { raw_content: config };n }nn // handle errorsn const errors = validateConfig(config);n if (errors.length) {n return dispatch(validationError(errors));n }n dispatch(clearErrors());nn return put(n putConfigurationUrl(),n JSON.stringify(payload),n { type: PUT_CONFIG_SUCCESS, name: ‘config’ },n { type: PUT_CONFIG_FAILURE, name: ‘error’ },n dispatchn );n};nnconst validateConfig = config =>n validator(n { config },n { config: ‘required’ },n {n ‘config.required’: getContentRequiredMessage(),n }n );nnexport const onEditorChange = () => ({n type: CONFIG_EDITOR_CHANGED,n});nn// Reducernexport default function config(n state = {n config: {},n updated: false,n editorChanged: false,n fieldChanged: false,n isFetching: false,n },n actionn) {n switch (action.type) {n case FETCH_CONFIG_REQUEST:n return {n …state,n isFetching: true,n };n case FETCH_CONFIG_SUCCESS:n return {n …state,n config: action.config,n isFetching: false,n };n case FETCH_CONFIG_FAILURE:n return {n …state,n isFetching: false,n };n case PUT_CONFIG_SUCCESS:n return {n …state,n config: action.config,n editorChanged: false,n updated: true,n };n case PUT_CONFIG_FAILURE:n return {n …state,n editorChanged: false,n };n case CONFIG_EDITOR_CHANGED:n return {n …state,n editorChanged: true,n updated: false,n };n default:n return {n …state,n updated: false,n editorChanged: false,n };n }n}n”,“export default {n save: ‘mod+s’,n};n”,“import React from ‘react’;nnconst Splitter = () =>

;nnexport default Splitter;n”,“import React from ‘react’;nimport PropTypes from ‘prop-types’;nnexport default function Icon({ name }) {n return ;n}nnIcon.propTypes = {n name: PropTypes.string.isRequired,n};n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport classnames from ‘classnames’;nimport Icon from ‘./Icon’;nnclass Accordion extends Component {n state = { collapsed: true };nn handleClick = () => {n this.setState(state => {n return {n collapsed: !state.collapsed,n };n });n };nn renderIndicator() {n const { counter, count } = this.props;n const { collapsed } = this.state;nn if (collapsed && counter && count) {n return
{count}
;n }n return (n
n n
n );n }nn render() {n const { icon, label, minHeight, count, children } = this.props;n const { collapsed } = this.state;n const accordionClasses = classnames(‘accordion’, { collapsed });nn let panelHeight = minHeight;n if (!collapsed) {n panelHeight = minHeight && count ? (count + 1) * minHeight : ‘none’;n }nn return (n n
n {icon && }n {label}n
{this.renderIndicator()}
n
n {children}n
n );n }n}nnAccordion.defaultProps = {n minHeight: 50,n};nnAccordion.propTypes = {n children: PropTypes.element.isRequired,n label: PropTypes.string.isRequired,n minHeight: PropTypes.number,n count: PropTypes.number,n counter: PropTypes.bool,n icon: PropTypes.string,n};nnexport default Accordion;n”,“import moment from ‘moment’;nimport { clearErrors, validationError, filterDeleted } from ‘./utils’;nimport { get, put, del } from ‘../utils/fetch’;nimport { validator } from ‘../utils/validation’;nimport {n slugify,n preparePayload,n sanitizeFrontMatter,n computeRelativePath,n} from ‘../utils/helpers’;nimport {n collectionsAPIUrl,n collectionAPIUrl,n documentAPIUrl,n} from ‘../constants/api’;nnimport translations from ‘../translations’;nconst {n getTitleRequiredMessage,n getFilenameRequiredMessage,n getFilenameNotValidMessage,n} = translations;nn// Action Typesnexport const FETCH_COLLECTIONS_REQUEST = ‘FETCH_COLLECTIONS_REQUEST’;nexport const FETCH_COLLECTIONS_SUCCESS = ‘FETCH_COLLECTIONS_SUCCESS’;nexport const FETCH_COLLECTIONS_FAILURE = ‘FETCH_COLLECTIONS_FAILURE’;nexport const FETCH_COLLECTION_REQUEST = ‘FETCH_COLLECTION_REQUEST’;nexport const FETCH_COLLECTION_SUCCESS = ‘FETCH_COLLECTION_SUCCESS’;nexport const FETCH_COLLECTION_FAILURE = ‘FETCH_COLLECTION_FAILURE’;nexport const FETCH_DOCUMENT_REQUEST = ‘FETCH_DOCUMENT_REQUEST’;nexport const FETCH_DOCUMENT_SUCCESS = ‘FETCH_DOCUMENT_SUCCESS’;nexport const FETCH_DOCUMENT_FAILURE = ‘FETCH_DOCUMENT_FAILURE’;nexport const PUT_DOCUMENT_REQUEST = ‘PUT_DOCUMENT_REQUEST’;nexport const PUT_DOCUMENT_SUCCESS = ‘PUT_DOCUMENT_SUCCESS’;nexport const PUT_DOCUMENT_FAILURE = ‘PUT_DOCUMENT_FAILURE’;nexport const DELETE_DOCUMENT_REQUEST = ‘DELETE_DOCUMENT_REQUEST’;nexport const DELETE_DOCUMENT_SUCCESS = ‘DELETE_DOCUMENT_SUCCESS’;nexport const DELETE_DOCUMENT_FAILURE = ‘DELETE_DOCUMENT_FAILURE’;nn// Actionsnexport const fetchCollections = () => dispatch => {n dispatch({ type: FETCH_COLLECTIONS_REQUEST });n return get(n collectionsAPIUrl(),n { type: FETCH_COLLECTIONS_SUCCESS, name: ‘collections’ },n { type: FETCH_COLLECTIONS_FAILURE, name: ‘error’ },n dispatchn );n};nnexport const fetchCollection = (collection, directory = ”) => dispatch => {n dispatch({ type: FETCH_COLLECTION_REQUEST });n return get(n collectionAPIUrl(collection, directory),n { type: FETCH_COLLECTION_SUCCESS, name: ‘entries’ },n { type: FETCH_COLLECTION_FAILURE, name: ‘error’ },n dispatchn );n};nnexport const fetchDocument = (collection, directory, filename) => dispatch => {n dispatch({ type: FETCH_DOCUMENT_REQUEST });n return get(n documentAPIUrl(collection, directory, filename),n { type: FETCH_DOCUMENT_SUCCESS, name: ‘doc’ },n { type: FETCH_DOCUMENT_FAILURE, name: ‘error’ },n dispatchn );n};nnexport const createDocument = (collection, directory) => (n dispatch,n getStaten) => {n // get edited fields from metadata staten const metadata = getState().metadata.metadata;n let { path, raw_content, title, date } = metadata;n // if `path` is a falsy value or if appending a slash to it equals ton // `directory`, generate filename from `title`.n if ((!path || `${path}/` === directory) && title) {n path = generateFilenameFromTitle(title, collection, date);n } else {n // validate otherwisen const errors = validateDocument(metadata, collection);n if (errors.length) {n return dispatch(validationError(errors));n }n }n // clear errorsn dispatch(clearErrors());nn const front_matter = sanitizeFrontMatter(metadata);nn // send the put requestn return put(n documentAPIUrl(collection, directory, path),n preparePayload({ raw_content, front_matter }),n { type: PUT_DOCUMENT_SUCCESS, name: ‘doc’ },n { type: PUT_DOCUMENT_FAILURE, name: ‘error’ },n dispatchn );n};nnexport const putDocument = (collection, directory, filename) => (n dispatch,n getStaten) => {n // get edited fields from metadata staten const metadata = getState().metadata.metadata;n let { path, raw_content, title, date } = metadata;n // if `path` is a falsy value or if appending a slash to it equals ton // `directory`, generate filename from `title`.n if ((!path || `${path}/` === directory) && title) {n path = generateFilenameFromTitle(title, collection, date);n } else {n // validate otherwisen const errors = validateDocument(metadata, collection);n if (errors.length) {n return dispatch(validationError(errors));n }n }n // clear errorsn dispatch(clearErrors());nn const front_matter = sanitizeFrontMatter(metadata);nn // add collection type prefix to relative pathn const relative_path = directoryn ? `_${collection}/${directory}/${path}`n : `_${collection}/${path}`;nn // send the put requestn return put(n documentAPIUrl(collection, directory, filename),n preparePayload({ path: relative_path, raw_content, front_matter }),n { type: PUT_DOCUMENT_SUCCESS, name: ‘doc’ },n { type: PUT_DOCUMENT_FAILURE, name: ‘error’ },n dispatchn );n};nnexport const deleteDocument = (collection, directory, filename) => dispatch => {n const relative_path = computeRelativePath(directory, filename);n return del(n documentAPIUrl(collection, directory, filename),n { type: DELETE_DOCUMENT_SUCCESS, name: ‘doc’, id: relative_path },n { type: DELETE_DOCUMENT_FAILURE, name: ‘error’ },n dispatchn );n};nnconst generateFilenameFromTitle = (title, collection, date) => {n const slugifiedTitle = slugify(title);n if (collection === ‘posts’) {n // if date is provided, use it, otherwise generate it with today’s daten const docDate = date ? date.split(‘ ’)[0] : moment().format(‘YYYY-MM-DD’);n return `${docDate}-${slugifiedTitle}.md`;n }n return `${slugifiedTitle}.md`;n};nnconst validateDocument = (metadata, collection) => {n let validations = { title: ‘required’ }; // base validationsn // base messagesn let messages = {n ‘title.required’: getTitleRequiredMessage(),n ‘path.required’: getFilenameRequiredMessage(),n };nn if (collection === ‘posts’) {n validations[‘path’] = ‘required|date’;n messages[‘path.date’] = getFilenameNotValidMessage();n } else {n validations[‘path’] = ‘required|filename’;n messages[‘path.filename’] = getFilenameNotValidMessage();n }n return validator(metadata, validations, messages);n};nn// Reducernexport default function collections(n state = {n collections: [],n entries: [],n currentDocument: {},n isFetching: false,n updated: false,n },n actionn) {n switch (action.type) {n case FETCH_COLLECTIONS_REQUEST:n case FETCH_COLLECTION_REQUEST:n case FETCH_DOCUMENT_REQUEST:n return {n …state,n isFetching: true,n };n case FETCH_COLLECTIONS_SUCCESS:n return {n …state,n collections: action.collections,n isFetching: false,n };n case FETCH_COLLECTION_SUCCESS:n return {n …state,n entries: action.entries,n isFetching: false,n };n case FETCH_DOCUMENT_SUCCESS:n return {n …state,n currentDocument: action.doc,n isFetching: false,n };n case FETCH_COLLECTIONS_FAILURE:n return {n …state,n collections: [],n isFetching: false,n };n case FETCH_COLLECTION_FAILURE:n return {n …state,n entries: [],n isFetching: false,n };n case FETCH_DOCUMENT_FAILURE:n return {n …state,n currentDocument: {},n isFetching: false,n };n case PUT_DOCUMENT_SUCCESS:n return {n …state,n currentDocument: action.doc,n updated: true,n };n case DELETE_DOCUMENT_SUCCESS:n return {n …state,n entries: filterDeleted(state.entries, action.id),n };n default:n return {n …state,n updated: false,n };n }n}nn// Selectorsnexport const filterBySearchInput = (list, input) => {n if (!input) {n return list;n }n return list.filter(f =>n (f.title || f.name).toLowerCase().includes(input.toLowerCase())n );n};n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport { connect } from ‘react-redux’;nimport { bindActionCreators } from ‘redux’;nimport { Link } from ‘react-router’;nimport { ADMIN_PREFIX } from ‘../constants’;nimport Splitter from ‘../components/Splitter’;nimport Icon from ‘../components/Icon’;nimport Accordion from ‘../components/Accordion’;nimport { fetchCollections } from ‘../ducks/collections’;nimport { capitalize } from ‘../utils/helpers’;nimport _ from ‘underscore’;nnimport translations from ‘../translations’;nconst SidebarTranslations = translations.sidebar;nnexport class Sidebar extends Component {n componentDidMount() {n const { fetchCollections } = this.props;n fetchCollections();n }nn renderCollections(hiddens = []) {n const { collections } = this.props;nn if (!collections.length) {n return null;n }nn const collectionItems = _.map(collections, (col, i) => {n if (col.label !== ‘posts’ && !hiddens.includes(col.label)) {n return (n
  • n n n {col.sidebar_label || capitalize(col.label)}n n
  • n );n }n }).filter(Boolean);nn const itemsCount = collectionItems.length;n if (!itemsCount) {n return null;n }nn return (n n
      {collectionItems}
    n n );n }nn render() {n const { config } = this.props;nn const defaults = {n pages: {n icon: ‘file-text’,n link: ‘pages’,n translation: ‘pages’,n },n datafiles: {n icon: ‘database’,n link: ‘datafiles’,n translation: ‘datafiles’,n splitterBefore: true,n },n staticfiles: {n icon: ‘file’,n link: ‘staticfiles’,n translation: ‘staticfiles’,n },n configuration: {n icon: ‘cog’,n link: ‘configuration’,n translation: ‘configuration’,n splitterBefore: true,n },n };nn const defaultLinks = _.keys(defaults);n let hiddenLinks;nn try {n hiddenLinks = config.jekyll_admin.hidden_links || [];n } catch (e) {n hiddenLinks = [];n }nn const visibleLinks = _.difference(defaultLinks, hiddenLinks);nn const links = [];n _.each(visibleLinks, (link, index, list) => {n const current = defaults[link];n if (current.splitterBefore) {n links.push();n }n links.push(n
  • n n n {SidebarTranslations[current.translation]}n n
  • n );n });nn const collectionsPanel = this.renderCollections(hiddenLinks);n const postsPanel = !hiddenLinks.includes(‘posts’);n const draftsPanel = config && config.show_drafts;nn return (n
    n n
      n {collectionsPanel}n {postsPanel && (n
    • n n n {SidebarTranslations.posts}n n
    • n )}n {draftsPanel && (n
    • n n n {SidebarTranslations.drafts}n n
    • n )}n {(collectionsPanel || postsPanel || draftsPanel) && }n {links}n
    n
    n );n }n}nnSidebar.propTypes = {n collections: PropTypes.array.isRequired,n fetchCollections: PropTypes.func.isRequired,n config: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n collections: state.collections.collections,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n fetchCollections,n },n dispatchn );nnexport default connect(mapStateToProps, mapDispatchToProps)(Sidebar);n”,“export const ADMIN_PREFIX = ‘/admin’;n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport { Link } from ‘react-router’;nimport Icon from ‘../components/Icon’;nnexport class Header extends Component {n render() {n const { config } = this.props;n return (n
    n

    n n n {config.title || ‘You have no title!’}n n

    n v{process.env.REACT_APP_VERSION}n
    n );n }n}nnHeader.propTypes = {n config: PropTypes.object.isRequired,n};nnexport default Header;n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport { connect } from ‘react-redux’;nimport NotificationSystem from ‘react-notification-system’;nnexport class Notifications extends Component {n componentDidMount() {n this.notificationSystem = this.refs.notificationSystem;n }nn componentWillReceiveProps(nextProps) {n const { notification } = nextProps;n this.notificationSystem.addNotification({n title: notification.title,n message: notification.message,n level: notification.level,n position: ‘br’,n autoDismiss: 10,n });n }nn elementStyles = {n Containers: {n DefaultStyle: {n padding: 15,n width: 360,n textAlign: ‘center’,n },n },n Title: {n DefaultStyle: {n fontSize: 21,n color: ‘#fff’,n },n },n NotificationItem: {n DefaultStyle: {n margin: 0,n padding: ‘9px 15px 15px’,n fontSize: 15,n borderRadius: 0,n transition: ‘0.5s ease-in-out’,n },n success: {n color: ‘#fff’,n backgroundColor: ‘#088217’,n },n error: {n color: ‘#fff’,n backgroundColor: ‘#e21414’,n },n warning: {n color: ‘#fff’,n backgroundColor: ‘#ebad1a’,n },n info: {n color: ‘#fff’,n backgroundColor: ‘#369cc7’,n },n },n Dismiss: {n DefaultStyle: {n top: 7,n right: 9,n width: 25,n height: 25,n padding: 4,n backgroundColor: ‘transparent’,n border: ‘2px solid’,n opacity: ‘0.84’,n },n },n };nn render() {n return (n n );n }n}nnNotifications.propTypes = {n notification: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n notification: state.notifications.notification,n});nnexport default connect(mapStateToProps)(Notifications);n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport { connect } from ‘react-redux’;nimport { bindActionCreators } from ‘redux’;nimport { HotKeys } from ‘react-hotkeys’;nimport DocumentTitle from ‘react-document-title’;nnimport { fetchConfig } from ‘../ducks/config’;nimport keyboardShortcuts from ‘../constants/keyboardShortcuts’;nimport { ADMIN_PREFIX } from ‘../constants’;nn// Componentsnimport Sidebar from ‘./Sidebar’;nimport Header from ‘./Header’;nimport Notifications from ‘./Notifications’;nnclass App extends Component {n componentDidMount() {n const { fetchConfig } = this.props;n fetchConfig();n }nn componentWillReceiveProps(nextProps) {n if (this.props.updated !== nextProps.updated) {n const { fetchConfig } = this.props;n fetchConfig();n }n }nn componentDidUpdate(prevProps) {n if (prevProps.isFetching && !this.props.isFetching) {n const {n config: {n content: {n jekyll_admin: { homepage },n collections,n },n },n router,n } = this.props;nn const currentPathname = router.getCurrentLocation().pathname;nn if (homepage && currentPathname === ADMIN_PREFIX) {n let url = `${ADMIN_PREFIX}/pages`;nn const collectionNames = Object.keys(collections).concat(‘posts’);n if (collectionNames.includes(homepage)) {n url = `${ADMIN_PREFIX}/collections/${homepage}`;n }nn if (n [‘drafts’, ‘datafiles’, ‘staticfiles’, ‘configuration’].includes(n homepagen )n ) {n url = `${ADMIN_PREFIX}/${homepage}`;n }nn router.replace(url);n }n }n }nn render() {n const { config, isFetching } = this.props;nn if (isFetching) {n return null;n }nn return (n n n {config.content && (n
    n n
    n
    n
    {this.props.children}
    n
    n n
    n )}n
    n
    n );n }n}nnApp.propTypes = {n children: PropTypes.element,n fetchConfig: PropTypes.func.isRequired,n config: PropTypes.object.isRequired,n isFetching: PropTypes.bool.isRequired,n updated: PropTypes.bool,n};nnconst mapStateToProps = state => ({n config: state.config.config,n updated: state.config.updated,n isFetching: state.config.isFetching,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators({ fetchConfig }, dispatch);nnexport default connect(mapStateToProps, mapDispatchToProps)(App);n”,“import React from ‘react’;nimport PropTypes from ‘prop-types’;nimport TextareaAutosize from ‘react-textarea-autosize’;nnexport default function StaticMetaSimple({ fieldValue }) {n return (n
    n n
    n );n}nnStaticMetaSimple.propTypes = {n fieldValue: PropTypes.any.isRequired,n};n”,“import React from ‘react’;nimport PropTypes from ‘prop-types’;nimport StaticMetaArray from ‘./StaticMetaArray’;nimport StaticMetaObject from ‘./StaticMetaObject’;nimport StaticMetaSimple from ‘./StaticMetaSimple’;nnconst FieldTypes = {n array: StaticMetaArray,n object: StaticMetaObject,n simple: StaticMetaSimple,n};nnexport default function StaticMetaObjectItem({ type, fieldKey, fieldValue }) {n const CurrentComponent = FieldTypes[type];nn return (n
    n
    n n
    n
    n n
    n
    n );n}nnStaticMetaObjectItem.propTypes = {n type: PropTypes.string.isRequired,n fieldKey: PropTypes.string.isRequired,n fieldValue: PropTypes.any.isRequired,n};n”,“import React from ‘react’;nimport PropTypes from ‘prop-types’;nimport _ from ‘underscore’;nimport StaticMetaObjectItem from ‘./StaticMetaObjectItem’;nimport { computeFieldType } from ‘../../../utils/metadata’;nnexport default function StaticMetaObject({ fieldValue }) {n const items = _.map(fieldValue, (value, key) => {n const type = computeFieldType(value);n return (n n );n });nn return
    {items}
    ;n}nnStaticMetaObject.propTypes = {n fieldValue: PropTypes.any.isRequired,n};n”,“import React from ‘react’;nimport PropTypes from ‘prop-types’;nimport StaticMetaArray from ‘./StaticMetaArray’;nimport StaticMetaObject from ‘./StaticMetaObject’;nimport StaticMetaSimple from ‘./StaticMetaSimple’;nnconst FieldTypes = {n array: StaticMetaArray,n object: StaticMetaObject,n simple: StaticMetaSimple,n};nnexport default function StaticMetaArrayItem({ type, fieldValue, index }) {n const CurrentComponent = FieldTypes[type];nn return (n
    n
    n
    n {index + 1}.n
    n n
    n
    n );n}nnStaticMetaArrayItem.propTypes = {n type: PropTypes.string.isRequired,n index: PropTypes.number.isRequired,n fieldValue: PropTypes.any.isRequired,n};n”,“import React from ‘react’;nimport PropTypes from ‘prop-types’;nimport StaticMetaArrayItem from ‘./StaticMetaArrayItem’;nimport { computeFieldType } from ‘../../../utils/metadata’;nnexport default function StaticMetaArray({ fieldValue }) {n const items = fieldValue.map((item, i) => {n const type = computeFieldType(item);n return (n n );n });n return
    {items}
    ;n}nnStaticMetaArray.propTypes = {n fieldValue: PropTypes.any.isRequired,n};n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport Icon from ‘../Icon’;nimport classnames from ‘classnames’;nnexport default class StaticMetaButton extends Component {n state = {n dropdown: false,n };nn toggleDropdownState = () => {n this.setState(state => ({ dropdown: !state.dropdown }));n };nn render() {n const { onEnableField } = this.props;nn const dropdownClasses = classnames(‘dropdown’, {n ‘showing-dropdown’: this.state.dropdown,n });nn return (n
    n );n }n}nnStaticMetaButton.propTypes = {n onEnableField: PropTypes.func.isRequired,n};n”,“import React from ‘react’;nimport PropTypes from ‘prop-types’;nimport StaticMetaArray from ‘./StaticMetaArray’;nimport StaticMetaObject from ‘./StaticMetaObject’;nimport StaticMetaSimple from ‘./StaticMetaSimple’;nimport StaticMetaButton from ‘../StaticMetaButton’;nnconst FieldTypes = {n array: StaticMetaArray,n object: StaticMetaObject,n simple: StaticMetaSimple,n};nnexport default function StaticMetaField({n type,n fieldKey,n fieldValue,n enableField,n}) {n const CurrentComponent = FieldTypes[type];nn return (n
    n
    n n {n enableField(`metadata[‘${fieldKey}’]`, fieldValue);n }}n />n
    n n
    n );n}nnStaticMetaField.propTypes = {n type: PropTypes.string.isRequired,n fieldKey: PropTypes.string.isRequired,n fieldValue: PropTypes.any.isRequired,n enableField: PropTypes.func.isRequired,n};n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport { getFilenameFromPath } from ‘../utils/helpers’;nimport Icon from ‘./Icon’;nnimport translations from ‘../translations’;nconst { getDeleteMessage } = translations;nnexport default class FilePreview extends Component {n handleClickDelete(path) {n const { splat, onClickDelete } = this.props;n const filename = getFilenameFromPath(path);n const confirm = window.confirm(getDeleteMessage(path));n confirm && onClickDelete(splat, filename);n }nn renderFileOverlay(file, splat) {n if (file.from_theme) {n return (n n n n );n } else if (splat !== ‘index’) {n return (n this.handleClickDelete(file.relative_path)}n className="delete"n title="Delete file"n >n xn n );n }n }nn get isImageFile() {n const {n file: { type, extname },n } = this.props;n if (type === ‘directory’) {n return false;n }nn return /png|jpg|gif|jpeg|svg|ico/i.test(extname.substring(1));n }nn render() {n const { onClick, file, splat } = this.props;n const node = this.isImageFile ? (n {file.relative_path}n ) : (n
    n n
    n );nn const nodeLink = onClick ? (n onClick(file.relative_path)}>{node}n ) : (n n {node}n n );nn const filename = splat === ‘index’ ? file.relative_path : file.name;nn return (n
    n {this.renderFileOverlay(file, splat)}n {nodeLink}n {filename}n
    n );n }n}nnFilePreview.propTypes = {n file: PropTypes.object.isRequired,n splat: PropTypes.string.isRequired,n onClickDelete: PropTypes.func,n onClick: PropTypes.func,n};n”,“import React from ‘react’;nimport PropTypes from ‘prop-types’;nimport { Link } from ‘react-router’;nimport { toTitleCase } from ‘../utils/helpers’;nimport { ADMIN_PREFIX } from ‘../constants’;nnexport default function Breadcrumbs({ type, splat = ” }) {n const nonCollectionTypes = [‘pages’, ‘datafiles’, ‘drafts’, ‘staticfiles’];n const base = nonCollectionTypes.includes(type)n ? `${ADMIN_PREFIX}/${type}`n : `${ADMIN_PREFIX}/collections/${type}`;nn let label = type;n if (type === ‘datafiles’) {n label = ‘data files’;n } else if (type === ‘staticfiles’) {n label = ‘static files’;n }nn let nodes = [];n if (splat) {n const paths = splat.split(‘/’);n nodes = paths.map((path, i) => {n const before = i === 0 ? ” : paths.slice(0, i).join(‘/’) + ‘/’;n return (n
  • n {path}n
  • n );n });n }nn return (n
      n
    • n {toTitleCase(label)}n
    • n {nodes}n
    n );n}nnBreadcrumbs.propTypes = {n type: PropTypes.string.isRequired,n splat: PropTypes.string,n};n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nnexport default class InputSearch extends Component {n handleKeyPress = event => {n const { search } = this.props;n search(event.target.value);n };nn render() {n const { searchBy } = this.props;n return (n n );n }n}nnInputSearch.propTypes = {n search: PropTypes.func.isRequired,n searchBy: PropTypes.string.isRequired,n};n”,“import _ from ‘underscore’;nimport { filterDeleted } from ‘./utils’;nimport { get, del } from ‘../utils/fetch’;nimport { computeRelativePath } from ‘../utils/helpers’;nimport { addNotification } from ‘./notifications’;nimport { staticfilesAPIUrl, staticfileAPIUrl } from ‘../constants/api’;nnimport translations from ‘../translations’;nconst {n getSuccessMessage,n getErrorMessage,n getUploadSuccessMessage,n getUploadErrorMessage,n} = translations;nn// Action Typesnexport const FETCH_STATICFILES_REQUEST = ‘FETCH_STATICFILES_REQUEST’;nexport const FETCH_STATICFILES_SUCCESS = ‘FETCH_STATICFILES_SUCCESS’;nexport const FETCH_STATICFILES_FAILURE = ‘FETCH_STATICFILES_FAILURE’;nexport const FETCH_STATICFILE_REQUEST = ‘FETCH_STATICFILE_REQUEST’;nexport const FETCH_STATICFILE_SUCCESS = ‘FETCH_STATICFILE_SUCCESS’;nexport const FETCH_STATICFILE_FAILURE = ‘FETCH_STATICFILE_FAILURE’;nexport const PUT_STATICFILE_REQUEST = ‘PUT_STATICFILE_REQUEST’;nexport const PUT_STATICFILE_SUCCESS = ‘PUT_STATICFILE_SUCCESS’;nexport const PUT_STATICFILE_FAILURE = ‘PUT_STATICFILE_FAILURE’;nexport const DELETE_STATICFILE_REQUEST = ‘DELETE_STATICFILE_REQUEST’;nexport const DELETE_STATICFILE_SUCCESS = ‘DELETE_STATICFILE_SUCCESS’;nexport const DELETE_STATICFILE_FAILURE = ‘DELETE_STATICFILE_FAILURE’;nn// Actionsnexport const fetchStaticFiles = (directory = ”) => dispatch => {n dispatch({ type: FETCH_STATICFILES_REQUEST });n return get(n staticfilesAPIUrl(directory),n { type: FETCH_STATICFILES_SUCCESS, name: ‘files’ },n { type: FETCH_STATICFILES_FAILURE, name: ‘error’ },n dispatchn );n};nnexport const uploadStaticFiles = (directory, files) => dispatch => {n _.each(files, file => {n const reader = new FileReader();n reader.readAsDataURL(file);n reader.onloadend = () => {n const payload = JSON.stringify({n encoded_content: reader.result.split(‘base64,’)[1],n });n // send the put requestn return fetch(staticfileAPIUrl(directory, file.name), {n method: ‘PUT’,n body: payload,n credentials: ‘same-origin’,n })n .then(data => {n dispatch({ type: PUT_STATICFILE_SUCCESS });n dispatch(fetchStaticFiles(directory));n dispatch(n addNotification(n getSuccessMessage(),n getUploadSuccessMessage(file.name),n ‘success’n )n );n })n .catch(error => {n dispatch({ type: PUT_STATICFILE_FAILURE, error });n dispatch(n addNotification(getErrorMessage(), getUploadErrorMessage(), ‘error’)n );n });n };n });n};nnexport const deleteStaticFile = (directory, filename) => dispatch => {n const relative_path = computeRelativePath(directory, filename);n return del(n staticfileAPIUrl(directory, filename),n { type: DELETE_STATICFILE_SUCCESS, name: ‘file’, id: relative_path },n { type: DELETE_STATICFILE_FAILURE, name: ‘error’ },n dispatchn );n};nn// Reducernexport default function staticfiles(n state = {n files: [],n isFetching: false,n uploading: false, // TODO show loading gifn },n actionn) {n switch (action.type) {n case FETCH_STATICFILES_REQUEST:n return {n …state,n isFetching: true,n };n case FETCH_STATICFILES_SUCCESS:n return {n …state,n files: action.files,n isFetching: false,n };n case FETCH_STATICFILES_FAILURE:n return {n …state,n isFetching: false,n };n case PUT_STATICFILE_REQUEST:n return {n …state,n uploading: true,n };n case PUT_STATICFILE_SUCCESS:n return {n …state,n uploading: false,n };n case PUT_STATICFILE_FAILURE:n return {n …state,n uploading: false,n };n case DELETE_STATICFILE_SUCCESS:n return {n …state,n files: filterDeleted(state.files, action.id),n };n default:n return state;n }n}nn// Selectorsnexport const filterByFilename = (files, input) => {n if (!input) {n return files;n }n return files.filter(f => f.path.toLowerCase().includes(input.toLowerCase()));n};n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport { Link } from ‘react-router’;nimport { connect } from ‘react-redux’;nimport { bindActionCreators } from ‘redux’;nimport DocumentTitle from ‘react-document-title’;nimport Icon from ‘../../components/Icon’;nimport FilePreview from ‘../../components/FilePreview’;nimport Breadcrumbs from ‘../../components/Breadcrumbs’;nimport InputSearch from ‘../../components/form/InputSearch’;nimport { search } from ‘../../ducks/utils’;nimport { fetchStaticFiles, filterByFilename } from ‘../../ducks/staticfiles’;nimport { ADMIN_PREFIX } from ‘../../constants’;nnexport class StaticIndex extends Component {n componentDidMount() {n const { fetchStaticFiles } = this.props;n fetchStaticFiles(‘index’);n }nn renderDirectoryListingBtn() {n const to = `${ADMIN_PREFIX}/staticfiles`;nn return (n
    n n Directory Listingn n
    n );n }nn renderPreviewNode() {n const { files, onClickStaticFile } = this.props;nn if (files.length) {n return (n
    n {files.map((file, i) => {n return (n n );n })}n
    n );n } else {n return (n
    n n

    No files found!

    n

    n Upload files at ‘Directory Listing’ to have them displayed here.n

    n
    n );n }n }nn render() {n const { isFetching, search, modalView } = this.props;nn if (isFetching) {n return null;n }nn return (n n
    n
    n n {!modalView && this.renderDirectoryListingBtn()}n
    n n
    n
    n
    {this.renderPreviewNode()}
    n
    n
    n );n }n}nnStaticIndex.propTypes = {n files: PropTypes.array.isRequired,n isFetching: PropTypes.bool.isRequired,n fetchStaticFiles: PropTypes.func.isRequired,n search: PropTypes.func.isRequired,n onClickStaticFile: PropTypes.func,n modalView: PropTypes.bool,n};nnconst mapStateToProps = state => ({n files: filterByFilename(state.staticfiles.files, state.utils.input),n isFetching: state.staticfiles.isFetching,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n fetchStaticFiles,n search,n },n dispatchn );nnexport default connect(mapStateToProps, mapDispatchToProps)(StaticIndex);n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport Modal from ‘react-modal’;nimport StaticIndex from ‘../containers/views/StaticIndex’;nimport Icon from ‘./Icon’;nnexport default class FilePicker extends Component {n state = {n showModal: false,n };nn customStyles = {n overlay: {n backgroundColor: ‘rgba(0,0,0,0.6)’,n zIndex: 10,n },n content: {n margin: 20,n paddingTop: 0,n paddingRight: 10,n paddingLeft: 15,n },n };nn openModal = () => this.setState({ showModal: true });n shutModal = () => this.setState({ showModal: false });nn onPickItem = path => {n this.props.onPick(path);n this.shutModal();n };nn render() {n return (n n n n
    n n
    n n
    n );n }n}nnFilePicker.propTypes = {n onPick: PropTypes.func.isRequired,n};n”,“import React, { Component, PropTypes } from ‘react’;nimport TextareaAutosize from ‘react-textarea-autosize’;nimport classnames from ‘classnames’;nnimport translations from ‘../../translations’;nconst { getDeleteMessage } = translations;nnexport default class MetaTags extends Component {n constructor(props) {n super(props);nn this.state = {n tagInput: ”,n pageTags: props.fieldValue || [],n autoSuggest: false,n };n }nn componentWillReceiveProps(nextProps) {n const { fieldValue } = nextProps;n this.setState({ pageTags: fieldValue || [] });n }nn componentDidUpdate() {n const { nameAttr, updateFieldValue } = this.props;n updateFieldValue(nameAttr, this.state.pageTags);n }nn createTag(value) {n const { pageTags } = this.state;n const clone = […pageTags];nn // create tags only if they do not exist alreadyn if (!clone.includes(value)) {n clone.push(value);nn this.setState(state => {n return {n pageTags: clone,n tagInput: ”,n autoSuggest: false,n };n });n }n }nn deleteTag(index) {n const { pageTags } = this.state;n const clone = […pageTags];nn const tagName = index === -1 ? clone.slice(-1).pop() : clone[index];n const confirm = window.confirm(getDeleteMessage(`tag: ${tagName}`));nn if (confirm) {n clone.splice(index, 1);n this.setState({ pageTags: clone });n this.refs.taginput.focus();n }n }nn // keys that when pressed and released creates a new tag from the input value.n creators = [‘,’, ‘ ’, ‘Enter’];nn handleKeyUp = e => {n const { pageTags } = this.state;n const input = e.target.value;nn if (input.length && this.creators.includes(e.key)) {n this.createTag(input);n } else if (pageTags.length && input.length === 0 && e.key === ‘Backspace’) {n this.deleteTag(-1);n }n };nn handleOnChange = e => {n const value = e.target.value;n this.setState(state => {n return { tagInput: value };n });n };nn showSuggestions = () => {n this.setState(state => {n return { autoSuggest: true };n });n };nn closeSuggestions = () => {n this.setState(state => {n return { autoSuggest: false };n });n };nn rectifyTag = tag => {n const rectified = tag.toString().split(‘ ’);n this.setState(state => {n return { pageTags: rectified };n });n };nn render() {n const { pageTags } = this.state;n const tagInput = `${this.state.tagInput}`;nn const suggestions = this.props.suggestions.filter(entry => {n return entry.startsWith(tagInput);n });nn if (!(pageTags instanceof Array)) {n return (n n Expected an array of items. Found: {pageTags}n
    n this.rectifyTag(pageTags)}>Click heren to correct.n
    n );n }nn const tagPool = pageTags.filter(Boolean); // filter out nil or empty elementsn const tags = tagPool.map((tag, i) => {n return (n n {tag}n this.deleteTag(i)} />n n );n });nn const suggests = suggestions.map((item, i) => {n if (!pageTags.includes(item)) {n return (n
  • this.createTag(item)}>n {item}n
  • n );n }n return null;n }).filter(Boolean);nn const suggestionClasses = classnames(‘tag-suggestions’, {n visible: this.state.autoSuggest,n });nn return (n
    n {tags.length > 0 &&
    {tags}
    }nn
    n nn n
    n {suggests.length > 0 && (n
    n
      {suggests}
    n
    n Close suggestionsn
    n
    n )}n
    n );n }n}nnMetaTags.defaultProps = {n fieldValue: [],n suggestions: [],n};nnMetaTags.propTypes = {n updateFieldValue: PropTypes.func.isRequired,n nameAttr: PropTypes.any.isRequired,n suggestions: PropTypes.array,n fieldValue: PropTypes.any,n};n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport TextareaAutosize from ‘react-textarea-autosize’;nimport DateTimePicker from ‘react-widgets/lib/DateTimePicker’;nimport DropdownList from ‘react-widgets/lib/DropdownList’;nimport moment from ‘moment’;nimport momentLocalizer from ‘react-widgets-moment’;nimport FilePicker from ‘../FilePicker’;nimport MetaTags from ‘./MetaTags’;nimport ‘react-widgets/dist/css/react-widgets.css’;nnmomentLocalizer(moment);nnexport class MetaSimple extends Component {n handleEditableChange = e => {n const { nameAttr, updateFieldValue } = this.props;n updateFieldValue(nameAttr, e.target.value);n };nn handleDatepickerChange = (date, dateStr) => {n const { nameAttr, updateFieldValue } = this.props;n let formatted = moment(date).format(‘YYYY-MM-DD HH:mm:ss’);n updateFieldValue(nameAttr, formatted);n };nn handleEditableBlur = e => {n const { nameAttr, updateFieldValue } = this.props;n updateFieldValue(nameAttr, e.target.value.trim());n };nn renderEditable() {n const { fieldValue } = this.props;n return (n n );n }nn renderDatepicker() {n const { fieldValue } = this.props;n let dateValue = new Date(fieldValue);n if (`${dateValue}` === ‘Invalid Date’) dateValue = null;n return (n n );n }nn onPickItem = path => {n const { nameAttr, updateFieldValue } = this.props;n this.refs.imagepicker.value = path;n updateFieldValue(nameAttr, path);n };nn renderStaticFilePicker() {n const { fieldValue } = this.props;n return (n
    n n n
    n );n }nn handleLayoutChange = value => {n const { nameAttr, updateFieldValue } = this.props;n updateFieldValue(nameAttr, value);n };nn renderLayoutPicker() {n const { fieldValue, siteMeta } = this.props;nn if (!siteMeta) return this.renderEditable();n const layouts = siteMeta.layouts || [];nn return (n n );n }nn renderTagsInput(key) {n const { fieldValue, nameAttr, updateFieldValue, siteMeta } = this.props;n const suggestions = (siteMeta && siteMeta[key]) || [];nn return (n n );n }nn render() {n const { fieldKey, nameAttr } = this.props;nn let node;n switch (fieldKey) {n case ‘date’:n node = this.renderDatepicker();n break;n case ‘image’:n case ‘file’:n node = this.renderStaticFilePicker();n break;n case ‘tags’:n case ‘categories’:n node = this.renderTagsInput(fieldKey);n break;n default:n node = this.renderEditable();n }nn if (nameAttr === "metadata[‘layout’]") {n node = this.renderLayoutPicker();n }nn return
    {node}
    ;n }n}nnMetaSimple.propTypes = {n parentType: PropTypes.string.isRequired,n fieldKey: PropTypes.string.isRequired,n fieldValue: PropTypes.any,n updateFieldValue: PropTypes.func.isRequired,n nameAttr: PropTypes.any.isRequired,n siteMeta: PropTypes.object,n};nnexport default MetaSimple;n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport classnames from ‘classnames’;nimport Icon from ‘../Icon’;nnexport default class MetaButtons extends Component {n state = {n dropdown: false,n };nn fieldTypes = {n simple: {n icon: ‘pencil’,n label: ‘Simple’,n },n array: {n icon: ‘list-ol’,n label: ‘List’,n },n object: {n icon: ‘th-large’,n label: ‘Object’,n },n };nn fieldTypeKeys = Object.keys(this.fieldTypes);nn toggleDropdownState = () => {n this.setState(state => {n return { dropdown: !state.dropdown };n });n };nn renderDropdownItems(type) {n const { onConvertClick, parentKey } = this.props;nn if (parentKey === ‘tags’) return null;nn return this.fieldTypeKeysn .map((ftype, i) => {n if (type !== ftype) {n const { icon, label } = this.fieldTypes[ftype];n return (n onConvertClick(ftype)}>n n Convert to {label}n n );n }nn return null;n })n .filter(Boolean);n }nn render() {n const {n currentType,n parentType,n onRemoveClick,n isDefaultField,n } = this.props;n const sortableHandle = (n n n n );nn const dropdownClasses = classnames(‘dropdown’, {n ‘showing-dropdown’: this.state.dropdown,n });nn return (n
    n {parentType === ‘array’ && sortableHandle}n n this.setState({ dropdown: false })}n >n n n
    n {this.renderDropdownItems(currentType)}n onRemoveClick()} className="remove-field">n n {isDefaultField ? ‘Revert to default’ : ‘Remove field’}n n
    n
    n
    n );n }n}nnMetaButtons.propTypes = {n currentType: PropTypes.string.isRequired,n parentType: PropTypes.string.isRequired,n onConvertClick: PropTypes.func.isRequired,n onRemoveClick: PropTypes.func.isRequired,n parentKey: PropTypes.string,n isDefaultField: PropTypes.bool,n};n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport { findDOMNode } from ‘react-dom’;nimport MetaArray from ‘./MetaArray’;nimport MetaObject from ‘./MetaObject’;nimport MetaSimple from ‘./MetaSimple’;nimport MetaButtons from ‘./MetaButtons’;nnexport class MetaObjectItem extends Component {n handleConvertClick(type) {n const { convertField, nameAttr } = this.props;n convertField(nameAttr, type);n }nn handleKeyBlur() {n const { namePrefix, fieldKey, updateFieldKey } = this.props;n let currentValue = findDOMNode(this.refs.field_key).value;n if (fieldKey !== currentValue && currentValue !== ”) {n updateFieldKey(namePrefix, fieldKey, currentValue);n }n }nn handleRemoveClick() {n const { removeField, namePrefix, fieldKey } = this.props;n removeField(namePrefix, fieldKey);n }nn render() {n const {n type,n fieldKey,n fieldValue,n nameAttr,n addField,n removeField,n updateFieldKey,n updateFieldValue,n convertField,n key_prefix,n moveArrayItem,n } = this.props;n const FieldTypes = {n array: MetaArray,n object: MetaObject,n simple: MetaSimple,n };n const CurrentComponent = FieldTypes[type];n return (n
    n
    n this.handleKeyBlur(e)}n defaultValue={fieldKey}n className="field key-field"n type="text"n placeholder="Key"n />n this.handleConvertClick(type)}n onRemoveClick={() => this.handleRemoveClick()}n />n
    n
    n n
    n
    n );n }n}nnMetaObjectItem.propTypes = {n type: PropTypes.string.isRequired,n fieldKey: PropTypes.string.isRequired,n fieldValue: PropTypes.any.isRequired,n nameAttr: PropTypes.string.isRequired,n namePrefix: PropTypes.string.isRequired,n addField: PropTypes.func.isRequired,n removeField: PropTypes.func.isRequired,n convertField: PropTypes.func.isRequired,n updateFieldKey: PropTypes.func.isRequired,n updateFieldValue: PropTypes.func.isRequired,n moveArrayItem: PropTypes.func.isRequired,n key_prefix: PropTypes.string.isRequired,n};nexport default MetaObjectItem;n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport _ from ‘underscore’;nimport MetaObjectItem from ‘./MetaObjectItem’;nimport { computeFieldType } from ‘../../utils/metadata’;nnexport class MetaObject extends Component {n render() {n const {n fieldKey,n fieldValue,n namePrefix,n addField,n removeField,n updateFieldKey,n updateFieldValue,n convertField,n key_prefix,n moveArrayItem,n } = this.props;n const items = _.map(fieldValue, (value, key) => {n const type = computeFieldType(value, key);n return (n `}n namePrefix=namePrefix}n />n );n });n return (n n );n }n}nnMetaObject.propTypes = {n fieldKey: PropTypes.string.isRequired,n fieldValue: PropTypes.any.isRequired,n nameAttr: PropTypes.string.isRequired,n namePrefix: PropTypes.string.isRequired,n addField: PropTypes.func.isRequired,n removeField: PropTypes.func.isRequired,n convertField: PropTypes.func.isRequired,n updateFieldKey: PropTypes.func.isRequired,n updateFieldValue: PropTypes.func.isRequired,n moveArrayItem: PropTypes.func.isRequired,n key_prefix: PropTypes.string.isRequired,n};nnexport default MetaObject;n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport MetaArray from ‘./MetaArray’;nimport MetaObject from ‘./MetaObject’;nimport MetaSimple from ‘./MetaSimple’;nimport MetaButtons from ‘./MetaButtons’;nnexport class MetaArrayItem extends Component {n handleConvertClick(type) {n const { convertField, nameAttr } = this.props;n convertField(nameAttr, type);n }nn handleRemoveClick() {n const { removeField, namePrefix, index } = this.props;n removeField(namePrefix, index);n }nn render() {n const {n type,n fieldKey,n fieldValue,n index,n nameAttr,n addField,n removeField,n updateFieldKey,n updateFieldValue,n moveArrayItem,n convertField,n key_prefix,n } = this.props;n const FieldTypes = {n array: MetaArray,n object: MetaObject,n simple: MetaSimple,n };n const CurrentComponent = FieldTypes[type];n return (n
    n
    n
    n {index + 1}.n this.handleConvertClick(type)}n onRemoveClick={() => this.handleRemoveClick()}n />n
    n n
    n
    n );n }n}nnMetaArrayItem.propTypes = {n type: PropTypes.string.isRequired,n index: PropTypes.number.isRequired,n fieldKey: PropTypes.string.isRequired,n fieldValue: PropTypes.any.isRequired,n addField: PropTypes.func.isRequired,n removeField: PropTypes.func.isRequired,n updateFieldKey: PropTypes.func.isRequired,n updateFieldValue: PropTypes.func.isRequired,n moveArrayItem: PropTypes.func.isRequired,n convertField: PropTypes.func.isRequired,n nameAttr: PropTypes.string.isRequired,n namePrefix: PropTypes.string.isRequired,n key_prefix: PropTypes.string.isRequired,n};nnexport default MetaArrayItem;n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport Sortable from ‘sortablejs’;nimport Icon from ‘../Icon’;nimport MetaArrayItem from ‘./MetaArrayItem’;nimport { computeFieldType } from ‘../../utils/metadata’;nnexport class MetaArray extends Component {n sortableGroupDecorator(component) {n const { moveArrayItem, namePrefix } = this.props;n if (component) {n const options = {n draggable: ‘.array-item-wrap’,n group: { name: ‘meta-array-items’, pull: false, put: false },n handle: ‘.move’,n animation: 0,n onEnd: e => {n let srcInd = e.item.getAttribute(‘data-id’);n moveArrayItem(namePrefix, srcInd, e.newIndex);n },n };n Sortable.create(component, options);n }n }nn render() {n const {n fieldKey,n fieldValue,n namePrefix,n addField,n removeField,n updateFieldKey,n updateFieldValue,n moveArrayItem,n convertField,n key_prefix,n } = this.props;n const items = fieldValue.map((item, i) => {n const type = computeFieldType(item);n return (n `}n namePrefix=namePrefix}n />n );n });n return (n n {items}n addField(namePrefix)}n className="add-field-array"n title="Add new list item"n >n n n n );n }n}nnMetaArray.propTypes = {n fieldKey: PropTypes.string.isRequired,n fieldValue: PropTypes.any.isRequired,n nameAttr: PropTypes.string.isRequired,n namePrefix: PropTypes.string.isRequired,n addField: PropTypes.func.isRequired,n removeField: PropTypes.func.isRequired,n updateFieldKey: PropTypes.func.isRequired,n updateFieldValue: PropTypes.func.isRequired,n convertField: PropTypes.func.isRequired,n moveArrayItem: PropTypes.func.isRequired,n key_prefix: PropTypes.string.isRequired,n};nnexport default MetaArray;n”,“import React, { Component } from ‘react’;nimport PropTypes from ‘prop-types’;nimport { findDOMNode } from ‘react-dom’;nimport MetaArray from ‘./MetaArray’;nimport MetaObject from ‘./MetaObject’;nimport MetaSimple from ‘./MetaSimple’;nimport MetaButtons from ‘./MetaButtons’;nnexport class MetaField extends Component {n componentDidMount() {n const isNewField = /New field/.test(this.props.fieldKey);n isNewField && this.refs.field_key.select();n }nn handleConvertClick(type) {n const { convertField, nameAttr } = this.props;n convertField(nameAttr, type);n }nn handleKeyBlur() {n const { namePrefix, fieldKey, updateFieldKey } = this.props;n let currentValue = findDOMNode(this.refs.field_key).value;n if (fieldKey !== currentValue && currentValue !== ”) {n updateFieldKey(namePrefix, fieldKey, currentValue);n }n }nn handleRemoveClick() {n const { removeField, namePrefix, fieldKey } = this.props;n removeField(namePrefix, fieldKey);n }nn render() {n const {n type,n parentType,n fieldKey,n fieldValue,n namePrefix,n addField,n removeField,n updateFieldKey,n updateFieldValue,n moveArrayItem,n convertField,n key_prefix,n siteMeta,n isInDefaultState,n isDefaultField,n } = this.props;nn const FieldTypes = {n array: MetaArray,n object: MetaObject,n simple: MetaSimple,n };n const CurrentComponent = FieldTypes[type];n return (n
    n
    n this.handleKeyBlur()}n defaultValue={fieldKey}n className="field key-field"n type="text"n placeholder="Key"n disabled={isInDefaultState}n />n this.handleConvertClick(type)}n onRemoveClick={() => this.handleRemoveClick()}n />n
    n `}n namePrefix=`${namePrefix`}n siteMeta={siteMeta}n isInDefaultState={isInDefaultState}n />n </div>n );n }n}nnMetaField.propTypes = {n type: PropTypes.string.isRequired,n parentType: PropTypes.string.isRequired,n addField: PropTypes.func.isRequired,n removeField: PropTypes.func.isRequired,n updateFieldKey: PropTypes.func.isRequired,n updateFieldValue: PropTypes.func.isRequired,n moveArrayItem: PropTypes.func.isRequired,n convertField: PropTypes.func.isRequired,n fieldKey: PropTypes.string.isRequired,n fieldValue: PropTypes.any,n nameAttr: PropTypes.string.isRequired,n namePrefix: PropTypes.string.isRequired,n key_prefix: PropTypes.string.isRequired,n siteMeta: PropTypes.object,n isInDefaultState: PropTypes.bool,n isDefaultField: PropTypes.bool,n};nnexport default MetaField;n”,“import {n addFieldToMetadata,n removeFieldFromMetadata,n updateMetadataFieldKey,n updateMetadataFieldValue,n moveMetadataArrayItem,n convertMetadataField,n} from '../utils/metadata';nn// Action Typesnexport const UPDATE_TITLE = 'UPDATE_TITLE';nexport const UPDATE_BODY = 'UPDATE_BODY';nexport const UPDATE_PATH = 'UPDATE_PATH';nexport const STORE_CONTENT_FIELDS = 'STORE_CONTENT_FIELDS';nexport const ADD_METAFIELD = 'ADD_METAFIELD';nexport const REMOVE_METAFIELD = 'REMOVE_METAFIELD';nexport const UPDATE_FIELD_KEY = 'UPDATE_FIELD_KEY';nexport const UPDATE_FIELD_VALUE = 'UPDATE_FIELD_VALUE';nexport const MOVE_ARRAY_ITEM = 'MOVE_ARRAY_ITEM';nexport const CONVERT_FIELD = 'CONVERT_FIELD';nexport const ENABLE_FIELD = 'ENABLE_FIELD';nn// Actionsnexport const storeContentFields = content => ({n type: STORE_CONTENT_FIELDS,n content,n});nnexport const addField = namePrefix => ({n type: ADD_METAFIELD,n namePrefix,n});nnexport const removeField = (namePrefix, key) => ({n type: REMOVE_METAFIELD,n namePrefix,n key,n});nnexport const enableField = (nameAttr, value) => ({n type: ENABLE_FIELD,n nameAttr,n value,n});nnexport const updateFieldKey = (namePrefix, fieldKey, newKey) => ({n type: UPDATE_FIELD_KEY,n namePrefix,n fieldKey,n newKey,n});nnexport const updateFieldValue = (nameAttr, value) => ({n type: UPDATE_FIELD_VALUE,n nameAttr,n value,n});nnexport const moveArrayItem = (namePrefix, srcInd, targetInd) => ({n type: MOVE_ARRAY_ITEM,n namePrefix,n srcInd,n targetInd,n});nnexport const convertField = (nameAttr, convertType) => ({n type: CONVERT_FIELD,n nameAttr,n convertType,n});nnexport const updateTitle = title => ({n type: UPDATE_TITLE,n title,n});nnexport const updateBody = body => ({n type: UPDATE_BODY,n body,n});nnexport const updatePath = path => ({n type: UPDATE_PATH,n path,n});nn// Reducernexport default function metadata( // TODO normalize the metadatan state = {n metadata: {},n new_field_count: 1,n key_prefix: '', // force children to be rerendered on sortn fieldChanged: false,n },n actionn) {n switch (action.type) {n case UPDATE_TITLE:n return {n …state,n metadata: {n …state.metadata,n title: action.title,n },n fieldChanged: true,n };n case UPDATE_BODY:n return {n …state,n metadata: {n …state.metadata,n raw_content: action.body,n },n fieldChanged: true,n };n case UPDATE_PATH:n return {n …state,n metadata: {n …state.metadata,n path: action.path,n },n fieldChanged: true,n };n case STORE_CONTENT_FIELDS:n return {n …state,n metadata: action.content,n };n case ADD_METAFIELD:n return {n …state,n metadata: addFieldToMetadata(state, action.namePrefix),n new_field_count: state.new_field_count + 1,n };n case REMOVE_METAFIELD:n return {n …state,n metadata: removeFieldFromMetadata(state, action.namePrefix, action.key),n fieldChanged: true,n key_prefix: `${Math.random() * 100}`,n };n case UPDATE_FIELD_KEY:n return {n …state,n metadata: updateMetadataFieldKey(n state,n action.namePrefix,n action.fieldKey,n action.newKey.trim()n ),n fieldChanged: true,n };n case UPDATE_FIELD_VALUE:n return {n …state,n metadata: updateMetadataFieldValue(n state,n action.nameAttr,n action.valuen ),n fieldChanged: true,n };n case MOVE_ARRAY_ITEM:n return {n …state,n metadata: moveMetadataArrayItem(n state,n action.namePrefix,n action.srcInd,n action.targetIndn ),n key_prefix: `${Math.random() * 100}`,n fieldChanged: true,n };n case CONVERT_FIELD:n return {n …state,n metadata: convertMetadataField(n state,n action.nameAttr,n action.convertTypen ),n new_field_count: state.new_field_count + 1,n fieldChanged: true,n };n case ENABLE_FIELD:n return {n …state,n metadata: updateMetadataFieldValue(n state,n action.nameAttr,n action.valuen ),n fieldChanged: true,n };n default:n return {n …state,n fieldChanged: false,n };n }n}n”,“import { getSiteMetaUrl } from '../constants/api';nimport { get } from '../utils/fetch';nn// Action Typesnexport const FETCH_SITE_META_REQUEST = 'FETCH_SITE_META_REQUEST';nexport const FETCH_SITE_META_SUCCESS = 'FETCH_SITE_META_SUCCESS';nexport const FETCH_SITE_META_FAILURE = 'FETCH_SITE_META_FAILURE';nn// Actionsnexport const fetchSiteMeta = () => dispatch => {n dispatch({ type: FETCH_SITE_META_REQUEST });n return get(n getSiteMetaUrl(),n { type: FETCH_SITE_META_SUCCESS, name: 'site' },n { type: FETCH_SITE_META_FAILURE, name: 'error' },n dispatchn );n};nn// Reducernexport default function siteMeta(n state = {n site: {},n isFetching: false,n },n actionn) {n switch (action.type) {n case FETCH_SITE_META_REQUEST:n return {n …state,n isFetching: true,n };n case FETCH_SITE_META_SUCCESS:n return {n …state,n site: action.site,n isFetching: false,n };n case FETCH_SITE_META_FAILURE:n return {n …state,n isFetching: false,n };n default:n return state;n }n}n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport classnames from 'classnames';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport _ from 'underscore';nimport StaticMetaField from '../components/metadata/statics/StaticMetaField';nimport MetaField from '../components/metadata/MetaField';nimport Icon from '../components/Icon';nimport {n storeContentFields,n addField,n removeField,n updateFieldKey,n updateFieldValue,n moveArrayItem,n convertField,n enableField,n} from '../ducks/metadata';nimport { fetchSiteMeta } from '../ducks/siteMeta';nimport { computeFieldType } from '../utils/metadata';nnexport class MetaFields extends Component {n componentDidMount() {n const { storeContentFields, fields, fetchSiteMeta, dataview } = this.props;n if (!dataview) fetchSiteMeta();n storeContentFields(fields);n }nn shouldComponentUpdate(nextProps) {n return !_.isEqual(nextProps.metadata, this.props.metadata);n }nn render() {n const {n metadata,n addField,n enableField,n removeField,n updateFieldKey,n updateFieldValue,n moveArrayItem,n convertField,n key_prefix,n dataview,n site,n staticFields,n } = this.props;nn let visibleKeys = { …staticFields, …metadata };nn if (!dataview) {n visibleKeys = _.omit(visibleKeys, ['title', 'path', 'raw_content']);n }nn const metafieldsClass = classnames({n datafields: dataview,n metafields: !dataview,n });nn const defaultFieldsNotOverwritten = _.omit(n staticFields,n Object.keys(metadata)n );nn const metafields = _.map(visibleKeys, (field, key) => {n const type = computeFieldType(field, key);n if (defaultFieldsNotOverwritten.hasOwnProperty(key)) {n return (n <StaticMetaFieldn key={key}n type={type}n fieldKey={key}n fieldValue={field}n enableField={enableField}n />n );n }nn return (n <MetaFieldn key={key}n key_prefix={key_prefix}n type={type}n parentType="top"n fieldKey={key}n fieldValue={field}n addField={addField}n removeField={removeField}n updateFieldKey={updateFieldKey}n updateFieldValue={updateFieldValue}n moveArrayItem={moveArrayItem}n convertField={convertField}n nameAttr={`metadata`}n namePrefix={`metadata`}n siteMeta={dataview ? null : site}n isInDefaultState={defaultFieldsNotOverwritten.hasOwnProperty(key)}n isDefaultField={staticFields && staticFields.hasOwnProperty(key)}n />n );n });nn const newWrapper = dataview ? (n <div className="data-new">n <a onClick={() => addField('metadata')}>n <Icon name="plus-circle" /> New data fieldn </a>n </div>n ) : (n <div className="meta-new">n <a onClick={() => addField('metadata')} className="tooltip">n <Icon name="plus-circle" /> New metadata fieldn <span className="tooltip-text">n Metadata will be stored as the YAML front matter within then document.n </span>n </a>n <small className="tooltip pull-right">n <Icon name="info-circle" />n Special Keysn <span className="tooltip-text">n You can use special keys like date, file, imagen , layout or tags for user-friendly functionalities.n </span>n </small>n </div>n );nn return (n <div className={metafieldsClass}>n {metafields}n {newWrapper}n </div>n );n }n}nnMetaFields.propTypes = {n fields: PropTypes.object.isRequired,n metadata: PropTypes.object.isRequired,n key_prefix: PropTypes.string.isRequired,n storeContentFields: PropTypes.func.isRequired,n addField: PropTypes.func.isRequired,n removeField: PropTypes.func.isRequired,n updateFieldKey: PropTypes.func.isRequired,n updateFieldValue: PropTypes.func.isRequired,n moveArrayItem: PropTypes.func.isRequired,n convertField: PropTypes.func.isRequired,n fetchSiteMeta: PropTypes.func.isRequired,n dataview: PropTypes.bool,n site: PropTypes.object,n staticFields: PropTypes.object.isRequired,n enableField: PropTypes.func.isRequired,n};nnconst mapStateToProps = state => ({n metadata: state.metadata.metadata,n key_prefix: state.metadata.key_prefix,n site: state.meta.site,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n storeContentFields,n fetchSiteMeta,n addField,n enableField,n removeField,n updateFieldKey,n updateFieldValue,n moveArrayItem,n convertField,n },n dispatchn );nnexport default connect(mapStateToProps, mapDispatchToProps)(MetaFields);n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport MetaFields from '../containers/MetaFields';nnclass DataGUI extends Component {n handleChange = e => this.props.onChange(e.target.value);nn renderPathFields(slug, ext) {n return (n <form className="datafile-path">n <fieldset className="filename">n <legend>Path (without extension)</legend>n <inputn type="text"n id="path"n defaultValue={slug}n placeholder="filename"n onChange={this.handleChange}n ref="filepath"n />n </fieldset>n <fieldset className="file-type">n <legend>File Type</legend>n <selectn id="extn"n defaultValue={ext}n onChange={this.handleChange}n ref="extname"n >n <option value=".yml">YAML</option>n <option value=".json">JSON</option>n </select>n </fieldset>n </form>n );n }nn render() {n const { fields, slug, ext, restricted } = this.props;n return (n <div>n <div className="warning">n CAUTION! Any existing comments will be lost when editing via thisn view. Switch to the <strong>Raw Editor</strong> to preserve them.n </div>n {!restricted && this.renderPathFields(slug, ext)}n <MetaFields fields={fields} dataview />n </div>n );n }n}nnDataGUI.defaultProps = {n fields: {},n slug: '',n ext: '',n restricted: false,n};nnDataGUI.propTypes = {n onChange: PropTypes.func.isRequired,n fields: PropTypes.object,n slug: PropTypes.string,n ext: PropTypes.string,n restricted: PropTypes.bool,n};nnexport default DataGUI;n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport AceEditor from 'react-ace';nimport 'brace/mode/json';nimport 'brace/mode/yaml';nimport 'brace/theme/monokai';nnclass Editor extends Component {n shouldComponentUpdate(nextProps, nextState) {n return nextProps.content !== this.props.content;n }nn handleChange = () => {n const { onEditorChange, editorChanged } = this.props;n !editorChanged && onEditorChange();n };nn getValue() {n return this.refs.ace.editor.getValue();n }nn render() {n const { content, type } = this.props;n const mode = /json/i.test(type) ? 'json' : 'yaml';n return (n <div>n <AceEditorn value={content}n mode={mode}n theme="monokai"n width="100%"n height="400px"n showGutter={false}n showPrintMargin={false}n highlightActiveLine={false}n className="config-editor"n fontSize={14}n scrollMargin={[15, 15, 15, 15]}n ref="ace"n onChange={this.handleChange}n />n <div className="statusbar">mode: {mode.toUpperCase()}</div>n </div>n );n }n}nnEditor.propTypes = {n content: PropTypes.any.isRequired,n onEditorChange: PropTypes.func.isRequired,n editorChanged: PropTypes.bool.isRequired,n type: PropTypes.string,n};nnexport default Editor;n”,“import React from 'react';nimport PropTypes from 'prop-types';nimport _ from 'underscore';nnconst Errors = ({ errors }) => (n <div className="error-messages">n {_.map(errors, (error, i) => <div key={i}>{error}</div>)}n </div>n);nnErrors.propTypes = {n errors: PropTypes.array.isRequired,n};nnexport default Errors;n”,“import React from 'react';nimport PropTypes from 'prop-types';nimport classnames from 'classnames';nimport Icon from './Icon';nnimport translations from '../translations';nconst { labels } = translations;nnconst iconMap = {n create: 'plus-square',n delete: 'trash',n publish: 'send-o',n save: 'save',n upload: 'upload',n view: 'eye',n};nnexport default function Button({n type,n active,n triggered,n onClick,n block,n thin,n icon,n to,n}) {n const btnClass = classnames('btn', {n 'btn-active': active,n 'btn-success': active && (type === 'save' || type === 'create'),n 'btn-delete': type === 'delete',n 'btn-view': type === 'view' || type === 'publish',n 'btn-inactive': !active,n 'btn-fat': block,n 'btn-thin': thin,n });nn let label, triggeredLabel;n switch (type) {n case 'save':n case 'create':n label = labels.label;n triggeredLabel = labels.triggeredLabel;n break;n case 'view-toggle':n label = labels.viewToggle.label;n triggeredLabel = labels.viewToggle.triggeredLabel;n break;n case 'view':n case 'delete':n case 'upload':n case 'publish':n label = labels.label;n break;n default:n label = '<LABEL>';n triggeredLabel = '<NEXT LABEL>';n }nn const iconName = icon || iconMap;n const iconNode = iconName && <Icon name={iconName} />;nn if (to) {n return (n <a href={to} target="_blank" rel="noopener noreferrer" className={btnClass}>n {iconNode}n {label}n </a>n );n } else if (onClick) {n return (n <button onClick={onClick} className={btnClass}>n {iconNode}n {triggered ? triggeredLabel : label}n </button>n );n }nn return null;n}nnButton.propTypes = {n type: PropTypes.string.isRequired,n active: PropTypes.bool.isRequired,n onClick: PropTypes.func,n triggered: PropTypes.bool,n block: PropTypes.bool,n thin: PropTypes.bool,n icon: PropTypes.string,n to: PropTypes.string,n};n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport { withRouter } from 'react-router';nimport { HotKeys } from 'react-hotkeys';nimport DocumentTitle from 'react-document-title';nimport DataGUI from '../../components/DataGUI';nimport Editor from '../../components/Editor';nimport Errors from '../../components/Errors';nimport Button from '../../components/Button';nimport { putConfig, onEditorChange } from '../../ducks/config';nimport { clearErrors } from '../../ducks/utils';nimport { preventDefault } from '../../utils/helpers';nnimport translations from '../../translations';nconst { getLeaveMessage } = translations;nnexport class Configuration extends Component {n state = {n guiView: false,n };nn componentDidMount() {n const { router, route } = this.props;n router.setRouteLeaveHook(route, this.routerWillLeave);n }nn componentWillUnmount() {n const { clearErrors, errors } = this.props;n errors.length && clearErrors();n }nn routerWillLeave = nextLocation => {n const { editorChanged, fieldChanged } = this.props;n if (editorChanged || fieldChanged) {n return getLeaveMessage();n }n };nn toggleView = () => {n this.setState(state => {n return { guiView: !state.guiView };n });n };nn handleClickSave = e => {n preventDefault(e);n const { editorChanged, fieldChanged, putConfig } = this.props;n if (editorChanged) {n const value = this.refs.editor.getValue();n putConfig(value);n } else if (fieldChanged) {n putConfig(null, 'gui');n }n };nn renderContentBody() {n const { config, editorChanged, onEditorChange } = this.props;n const { raw_content, content } = config;nn if (this.state.guiView && content) {n return <DataGUI fields={content} onChange={onEditorChange} restricted />;n }nn return (n <Editorn editorChanged={editorChanged}n onEditorChange={onEditorChange}n content={raw_content}n ref="editor"n />n );n }nn render() {n const { editorChanged, fieldChanged, updated, errors } = this.props;nn const keyboardHandlers = {n save: this.handleClickSave,n };nn return (n <DocumentTitle title="Configuration">n <HotKeys handlers={keyboardHandlers} className="single">n {errors && errors.length > 0 && <Errors errors={errors} />}n <div className="content-header">n <h1>Configuration</h1>n <div className="page-buttons multiple">n <Buttonn onClick={this.toggleView}n type="view-toggle"n triggered={this.state.guiView}n activen blockn />n <Buttonn onClick={this.handleClickSave}n type="save"n active={editorChanged || fieldChanged}n triggered={updated}n blockn />n </div>n </div>n <div className="content-body">{this.renderContentBody()}</div>n </HotKeys>n </DocumentTitle>n );n }n}nnConfiguration.propTypes = {n config: PropTypes.object.isRequired,n onEditorChange: PropTypes.func.isRequired,n putConfig: PropTypes.func.isRequired,n updated: PropTypes.bool.isRequired,n editorChanged: PropTypes.bool.isRequired,n fieldChanged: PropTypes.bool.isRequired,n errors: PropTypes.array.isRequired,n clearErrors: PropTypes.func.isRequired,n router: PropTypes.object.isRequired,n route: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n config: state.config.config,n updated: state.config.updated,n editorChanged: state.config.editorChanged,n fieldChanged: state.metadata.fieldChanged,n errors: state.utils.errors,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators({ putConfig, onEditorChange, clearErrors }, dispatch);nnexport default withRouter(n connect(mapStateToProps, mapDispatchToProps)(Configuration)n);n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { browserHistory, Link } from 'react-router';nimport Breadcrumbs from './Breadcrumbs';nimport Button from './Button';nimport Icon from './Icon';nimport InputSearch from './form/InputSearch';nimport { ADMIN_PREFIX } from '../constants';nnimport translations from '../translations';nconst { getDeleteMessage, getNotFoundMessage } = translations;nnexport default class Explorer extends Component {n handleClickDelete(filename) {n const { deleteItem, params, type } = this.props;n const confirm = window.confirm(getDeleteMessage(filename));n const dir = params.splat ? `/${params.splat}` : '';n if (confirm) {n deleteItem(params.splat, filename);n browserHistory.push(`${ADMIN_PREFIX}/${type}${dir}`);n }n }nn renderTitleCell(name, icon, type, path) {n return (n <td className="row-title">n <strong>n <Link to={`${ADMIN_PREFIX}/${type}/${path}`}>n <Icon name={icon} />n {name}n </Link>n </strong>n </td>n );n }nn renderDirectoryRow(directory, type, index) {n const { name, relative_path } = directory;n return (n <tr key={index}>n {this.renderTitleCell(name, 'folder', type, relative_path)}n <td />n </tr>n );n }nn renderFileRow(file, type, index) {n const { name, relative_path, http_url } = file;n return (n <tr key={index}>n {this.renderTitleCell(name, 'file-text-o', type, relative_path)}n <td>n <div className="row-actions">n <Buttonn onClick={() => this.handleClickDelete(name)}n type="delete"n activen thinn />n {http_url && <Button to={http_url} type="view" active thin />}n </div>n </td>n </tr>n );n }nn renderRows() {n const { items, type } = this.props;n return items.map((entry, index) =>n entry.type === 'directory'n ? this.renderDirectoryRow(entry, type, index)n : this.renderFileRow(entry, type, index)n );n }nn render() {n const { items, type, newBtnLabel, search, params } = this.props;n const typeLabel = type === 'datafiles' ? 'data files' : type;nn const to = params.splatn ? `${ADMIN_PREFIX}/${type}/${params.splat}/new`n : `${ADMIN_PREFIX}/${type}/new`;nn const content = items.length ? (n <div className="content-table">n <table>n <thead>n <tr>n <th>Filename</th>n <th className="th-actions">Actions</th>n </tr>n </thead>n <tbody>{this.renderRows()}</tbody>n </table>n </div>n ) : (n <h1>{getNotFoundMessage(typeLabel)}</h1>n );nn return (n <div>n <div className="content-header">n <Breadcrumbs type={type} splat={params.splat} />n <div className="page-buttons">n <Link className="btn btn-active" to={to}>n {newBtnLabel}n </Link>n </div>n <div className="pull-right">n <InputSearch searchBy="filename" search={search} />n </div>n </div>n {content}n </div>n );n }n}nnExplorer.propTypes = {n type: PropTypes.string.isRequired,n items: PropTypes.array.isRequired,n params: PropTypes.object.isRequired,n newBtnLabel: PropTypes.string.isRequired,n deleteItem: PropTypes.func.isRequired,n search: PropTypes.func.isRequired,n};n”,“import { clearErrors, validationError, filterDeleted } from './utils';nimport { get, put, del } from '../utils/fetch';nimport { validatePage } from '../utils/validation';nimport {n slugify,n preparePayload,n sanitizeFrontMatter,n computeRelativePath,n} from '../utils/helpers';nimport { pagesAPIUrl, pageAPIUrl } from '../constants/api';nn// Action Typesnexport const FETCH_PAGES_REQUEST = 'FETCH_PAGES_REQUEST';nexport const FETCH_PAGES_SUCCESS = 'FETCH_PAGES_SUCCESS';nexport const FETCH_PAGES_FAILURE = 'FETCH_PAGES_FAILURE';nexport const FETCH_PAGE_REQUEST = 'FETCH_PAGE_REQUEST';nexport const FETCH_PAGE_SUCCESS = 'FETCH_PAGE_SUCCESS';nexport const FETCH_PAGE_FAILURE = 'FETCH_PAGE_FAILURE';nexport const PUT_PAGE_REQUEST = 'PUT_PAGE_REQUEST';nexport const PUT_PAGE_SUCCESS = 'PUT_PAGE_SUCCESS';nexport const PUT_PAGE_FAILURE = 'PUT_PAGE_FAILURE';nexport const DELETE_PAGE_REQUEST = 'DELETE_PAGE_REQUEST';nexport const DELETE_PAGE_SUCCESS = 'DELETE_PAGE_SUCCESS';nexport const DELETE_PAGE_FAILURE = 'DELETE_PAGE_FAILURE';nn// Actionsnexport const fetchPages = (directory = '') => dispatch => {n dispatch({ type: FETCH_PAGES_REQUEST });n return get(n pagesAPIUrl(directory),n { type: FETCH_PAGES_SUCCESS, name: 'pages' },n { type: FETCH_PAGES_FAILURE, name: 'error' },n dispatchn );n};nnexport const fetchPage = (directory, filename) => dispatch => {n dispatch({ type: FETCH_PAGE_REQUEST });n return get(n pageAPIUrl(directory, filename),n { type: FETCH_PAGE_SUCCESS, name: 'page' },n { type: FETCH_PAGE_FAILURE, name: 'error' },n dispatchn );n};nnexport const createPage = directory => (dispatch, getState) => {n // get edited fields from metadata staten const metadata = getState().metadata.metadata;n let { path, raw_content, title } = metadata;n // if `path` is a falsy value or if appending a slash to it equals ton // `directory`, generate filename from `title`.n if ((!path || `${path}/` === directory) && title) {n path = `${slugify(title)}.md`;n } else {n const errors = validatePage(metadata);n if (errors.length) {n return dispatch(validationError(errors));n }n }n // clear errorsn dispatch(clearErrors());nn const front_matter = sanitizeFrontMatter(metadata);nn // send the put requestn return put(n pageAPIUrl(directory, path),n preparePayload({ front_matter, raw_content }),n { type: PUT_PAGE_SUCCESS, name: 'page' },n { type: PUT_PAGE_FAILURE, name: 'error' },n dispatchn );n};nnexport const putPage = (directory, filename) => (dispatch, getState) => {n // get edited fields from metadata staten const metadata = getState().metadata.metadata;n let { path, raw_content, title } = metadata;n // if `path` is a falsy value or if appending a slash to it equals ton // `directory`, generate filename from `title`.n if ((!path || `${path}/` === directory) && title) {n path = `${slugify(title)}.md`;n } else {n const errors = validatePage(metadata);n if (errors.length) {n return dispatch(validationError(errors));n }n }n // clear errorsn dispatch(clearErrors());nn const front_matter = sanitizeFrontMatter(metadata);n const relative_path = directory ? `${directory}/${path}` : path;nn // send the put requestn return put(n pageAPIUrl(directory, filename),n preparePayload({ path: relative_path, front_matter, raw_content }),n { type: PUT_PAGE_SUCCESS, name: 'page' },n { type: PUT_PAGE_FAILURE, name: 'error' },n dispatchn );n};nnexport const deletePage = (directory, filename) => dispatch => {n const relative_path = computeRelativePath(directory, filename);n return del(n pageAPIUrl(directory, filename),n { type: DELETE_PAGE_SUCCESS, name: 'page', id: relative_path },n { type: DELETE_PAGE_FAILURE, name: 'error' },n dispatchn );n};nn// Reducernexport default function pages(n state = {n pages: [],n page: {},n isFetching: false,n updated: false,n },n actionn) {n switch (action.type) {n case FETCH_PAGES_REQUEST:n case FETCH_PAGE_REQUEST:n return {n …state,n isFetching: true,n };n case FETCH_PAGES_SUCCESS:n return {n …state,n pages: action.pages,n isFetching: false,n page: {},n };n case FETCH_PAGES_FAILURE:n return {n …state,n isFetching: false,n pages: [],n };n case FETCH_PAGE_SUCCESS:n return {n …state,n page: action.page,n isFetching: false,n };n case FETCH_PAGE_FAILURE:n return {n …state,n page: {},n isFetching: false,n };n case PUT_PAGE_SUCCESS:n return {n …state,n page: action.page,n updated: true,n };n case DELETE_PAGE_SUCCESS:n return {n …state,n pages: filterDeleted(state.pages, action.id),n };n default:n return {n …state,n updated: false,n };n }n}n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport DocumentTitle from 'react-document-title';nimport Explorer from '../../components/Explorer';nimport { search, filterBySearchInput } from '../../ducks/utils';nimport { fetchPages, deletePage } from '../../ducks/pages';nimport { getDocumentTitle } from '../../utils/helpers';nnexport class Pages extends Component {n componentDidMount() {n const { fetchPages, params } = this.props;n fetchPages(params.splat);n }nn componentWillReceiveProps(nextProps) {n const { fetchPages } = nextProps;n if (this.props.params.splat !== nextProps.params.splat) {n fetchPages(nextProps.params.splat);n }n }nn render() {n const { isFetching, pages, search, params, deletePage } = this.props;nn if (isFetching) {n return null;n }nn const title = getDocumentTitle('pages', params.splat);nn return (n <DocumentTitle title={title}>n <Explorern type="pages"n items={pages}n params={params}n newBtnLabel="New page"n search={search}n deleteItem={deletePage}n />n </DocumentTitle>n );n }n}nnPages.propTypes = {n pages: PropTypes.array.isRequired,n fetchPages: PropTypes.func.isRequired,n deletePage: PropTypes.func.isRequired,n isFetching: PropTypes.bool.isRequired,n search: PropTypes.func.isRequired,n params: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n pages: filterBySearchInput(state.pages.pages, state.utils.input),n isFetching: state.pages.isFetching,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n fetchPages,n deletePage,n search,n },n dispatchn );nnexport default connect(mapStateToProps, mapDispatchToProps)(Pages);n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport TextareaAutosize from 'react-textarea-autosize';nimport moment from 'moment';nimport Icon from '../Icon';nnexport default class InputFilename extends Component {n handleChange = e => {n const { onChange } = this.props;nn // The `TextareaAutosize` has a `value` attributen // which is supposed to be set to its inner `TextArea`'s valuen // but is always undefinedn // So this is a workaroundn this.refs.input.value = e.target.value;nn onChange(e.target.value);n };nn render() {n const { path, type } = this.props;nn let placeholder = 'example.md';n if (type === 'posts') {n const date = moment().format('YYYY-MM-DD');n placeholder = `${date}-your-title.md`;n } else if (type === 'data files') {n placeholder = 'your-filename.yml';n }nn let tooltip = null;n if (type !== 'data files') {n tooltip = (n <span className="tooltip">n <Icon name="info-circle" />n <span className="tooltip-text">n If you leave path blank, it will be autogenerated from title.n </span>n </span>n );n }n return (n <div className="input-path">n <label>Path {tooltip}</label>n <TextareaAutosizen key={path}n onChange={this.handleChange}n placeholder={placeholder}n defaultValue={path}n ref="input"n />n </div>n );n }n}nnInputFilename.propTypes = {n path: PropTypes.string.isRequired,n type: PropTypes.string.isRequired,n onChange: PropTypes.func.isRequired,n};n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport TextareaAutosize from 'react-textarea-autosize';nnexport default class InputTitle extends Component {n shouldComponentUpdate(nextProps) {n return nextProps.title !== this.props.title;n }nn handleChange = e => {n const { onChange } = this.props;n onChange(e.target.value);n };nn render() {n const { title } = this.props;n return (n <div className="input-title">n <label>Title</label>n <TextareaAutosizen onChange={this.handleChange}n placeholder="Title"n defaultValue={title}n ref="input"n />n </div>n );n }n}nnInputTitle.propTypes = {n title: PropTypes.string.isRequired,n onChange: PropTypes.func.isRequired,n};n”,“/* eslint-disable */nnimport hljs from 'highlight.js/lib/highlight';nn// —n// Languages supported as of highlight.js v9.17.1.n//n// We can't have a dynamic require statement below because webpack doesn'tn// evaluate statements and will therefore include all languages in the finaln// bundle unless webpack is additionally configured to not include the languagesn// we don't intend to include.n// —nnhljs.registerLanguage('actionscript', require('highlight.js/lib/languages/actionscript'));nhljs.registerLanguage('apache', require('highlight.js/lib/languages/apache'));nhljs.registerLanguage('applescript', require('highlight.js/lib/languages/applescript'));nhljs.registerLanguage('asciidoc', require('highlight.js/lib/languages/asciidoc'));nhljs.registerLanguage('bash', require('highlight.js/lib/languages/bash'));nhljs.registerLanguage('basic', require('highlight.js/lib/languages/basic'));nhljs.registerLanguage('clojure', require('highlight.js/lib/languages/clojure'));nhljs.registerLanguage('clojure-repl', require('highlight.js/lib/languages/clojure-repl'));nhljs.registerLanguage('cmake', require('highlight.js/lib/languages/cmake'));nhljs.registerLanguage('coffeescript', require('highlight.js/lib/languages/coffeescript'));nhljs.registerLanguage('cpp', require('highlight.js/lib/languages/cpp'));nhljs.registerLanguage('crystal', require('highlight.js/lib/languages/crystal'));nhljs.registerLanguage('css', require('highlight.js/lib/languages/css'));nhljs.registerLanguage('dart', require('highlight.js/lib/languages/dart'));nhljs.registerLanguage('diff', require('highlight.js/lib/languages/diff'));nhljs.registerLanguage('django', require('highlight.js/lib/languages/django'));nhljs.registerLanguage('dns', require('highlight.js/lib/languages/dns'));nhljs.registerLanguage('dockerfile', require('highlight.js/lib/languages/dockerfile'));nhljs.registerLanguage('dos', require('highlight.js/lib/languages/dos'));nhljs.registerLanguage('dsconfig', require('highlight.js/lib/languages/dsconfig'));nhljs.registerLanguage('elixir', require('highlight.js/lib/languages/elixir'));nhljs.registerLanguage('elm', require('highlight.js/lib/languages/elm'));nhljs.registerLanguage('erb', require('highlight.js/lib/languages/erb'));nhljs.registerLanguage('erlang-repl', require('highlight.js/lib/languages/erlang-repl'));nhljs.registerLanguage('erlang', require('highlight.js/lib/languages/erlang'));nhljs.registerLanguage('excel', require('highlight.js/lib/languages/excel'));nhljs.registerLanguage('fortran', require('highlight.js/lib/languages/fortran'));nhljs.registerLanguage('fsharp', require('highlight.js/lib/languages/fsharp'));nhljs.registerLanguage('gherkin', require('highlight.js/lib/languages/gherkin'));nhljs.registerLanguage('go', require('highlight.js/lib/languages/go'));nhljs.registerLanguage('gradle', require('highlight.js/lib/languages/gradle'));nhljs.registerLanguage('groovy', require('highlight.js/lib/languages/groovy'));nhljs.registerLanguage('haml', require('highlight.js/lib/languages/haml'));nhljs.registerLanguage('handlebars', require('highlight.js/lib/languages/handlebars'));nhljs.registerLanguage('haskell', require('highlight.js/lib/languages/haskell'));nhljs.registerLanguage('htmlbars', require('highlight.js/lib/languages/htmlbars'));nhljs.registerLanguage('http', require('highlight.js/lib/languages/http'));nhljs.registerLanguage('ini', require('highlight.js/lib/languages/ini'));nhljs.registerLanguage('java', require('highlight.js/lib/languages/java'));nhljs.registerLanguage('javascript', require('highlight.js/lib/languages/javascript'));nhljs.registerLanguage('json', require('highlight.js/lib/languages/json'));nhljs.registerLanguage('julia', require('highlight.js/lib/languages/julia'));nhljs.registerLanguage('julia-repl', require('highlight.js/lib/languages/julia-repl'));nhljs.registerLanguage('kotlin', require('highlight.js/lib/languages/kotlin'));nhljs.registerLanguage('ldif', require('highlight.js/lib/languages/ldif'));nhljs.registerLanguage('less', require('highlight.js/lib/languages/less'));nhljs.registerLanguage('lisp', require('highlight.js/lib/languages/lisp'));nhljs.registerLanguage('livescript', require('highlight.js/lib/languages/livescript'));nhljs.registerLanguage('lua', require('highlight.js/lib/languages/lua'));nhljs.registerLanguage('makefile', require('highlight.js/lib/languages/makefile'));nhljs.registerLanguage('markdown', require('highlight.js/lib/languages/markdown'));nhljs.registerLanguage('mathematica', require('highlight.js/lib/languages/mathematica'));nhljs.registerLanguage('matlab', require('highlight.js/lib/languages/matlab'));nhljs.registerLanguage('perl', require('highlight.js/lib/languages/perl'));nhljs.registerLanguage('nginx', require('highlight.js/lib/languages/nginx'));nhljs.registerLanguage('nix', require('highlight.js/lib/languages/nix'));nhljs.registerLanguage('objectivec', require('highlight.js/lib/languages/objectivec'));nhljs.registerLanguage('ocaml', require('highlight.js/lib/languages/ocaml'));nhljs.registerLanguage('pgsql', require('highlight.js/lib/languages/pgsql'));nhljs.registerLanguage('php', require('highlight.js/lib/languages/php'));nhljs.registerLanguage('plaintext', require('highlight.js/lib/languages/plaintext'));nhljs.registerLanguage('powershell', require('highlight.js/lib/languages/powershell'));nhljs.registerLanguage('prolog', require('highlight.js/lib/languages/prolog'));nhljs.registerLanguage('python', require('highlight.js/lib/languages/python'));nhljs.registerLanguage('r', require('highlight.js/lib/languages/r'));nhljs.registerLanguage('reasonml', require('highlight.js/lib/languages/reasonml'));nhljs.registerLanguage('ruby', require('highlight.js/lib/languages/ruby'));nhljs.registerLanguage('rust', require('highlight.js/lib/languages/rust'));nhljs.registerLanguage('scala', require('highlight.js/lib/languages/scala'));nhljs.registerLanguage('scss', require('highlight.js/lib/languages/scss'));nhljs.registerLanguage('shell', require('highlight.js/lib/languages/shell'));nhljs.registerLanguage('smalltalk', require('highlight.js/lib/languages/smalltalk'));nhljs.registerLanguage('sql', require('highlight.js/lib/languages/sql'));nhljs.registerLanguage('swift', require('highlight.js/lib/languages/swift'));nhljs.registerLanguage('typescript', require('highlight.js/lib/languages/typescript'));nhljs.registerLanguage('vbnet', require('highlight.js/lib/languages/vbnet'));nhljs.registerLanguage('vbscript', require('highlight.js/lib/languages/vbscript'));nhljs.registerLanguage('vim', require('highlight.js/lib/languages/vim'));nhljs.registerLanguage('yaml', require('highlight.js/lib/languages/yaml'));nhljs.registerLanguage('xml', require('highlight.js/lib/languages/xml'));nn// —n// Uncomment below to include that language in the final buildn// —nn// hljs.registerLanguage('1c', require('highlight.js/lib/languages/1c'));n// hljs.registerLanguage('abnf', require('highlight.js/lib/languages/abnf'));n// hljs.registerLanguage('accesslog', require('highlight.js/lib/languages/accesslog'));n// hljs.registerLanguage('ada', require('highlight.js/lib/languages/ada'));n// hljs.registerLanguage('angelscript', require('highlight.js/lib/languages/angelscript'));n// hljs.registerLanguage('arcade', require('highlight.js/lib/languages/arcade'));n// hljs.registerLanguage('arduino', require('highlight.js/lib/languages/arduino'));n// hljs.registerLanguage('armasm', require('highlight.js/lib/languages/armasm'));n// hljs.registerLanguage('aspectj', require('highlight.js/lib/languages/aspectj'));n// hljs.registerLanguage('autohotkey', require('highlight.js/lib/languages/autohotkey'));n// hljs.registerLanguage('autoit', require('highlight.js/lib/languages/autoit'));n// hljs.registerLanguage('avrasm', require('highlight.js/lib/languages/avrasm'));n// hljs.registerLanguage('awk', require('highlight.js/lib/languages/awk'));n// hljs.registerLanguage('axapta', require('highlight.js/lib/languages/axapta'));n// hljs.registerLanguage('bnf', require('highlight.js/lib/languages/bnf'));n// hljs.registerLanguage('brainfuck', require('highlight.js/lib/languages/brainfuck'));n// hljs.registerLanguage('cal', require('highlight.js/lib/languages/cal'));n// hljs.registerLanguage('capnproto', require('highlight.js/lib/languages/capnproto'));n// hljs.registerLanguage('ceylon', require('highlight.js/lib/languages/ceylon'));n// hljs.registerLanguage('clean', require('highlight.js/lib/languages/clean'));n// hljs.registerLanguage('coq', require('highlight.js/lib/languages/coq'));n// hljs.registerLanguage('cos', require('highlight.js/lib/languages/cos'));n// hljs.registerLanguage('crmsh', require('highlight.js/lib/languages/crmsh'));n// hljs.registerLanguage('cs', require('highlight.js/lib/languages/cs'));n// hljs.registerLanguage('csp', require('highlight.js/lib/languages/csp'));n// hljs.registerLanguage('d', require('highlight.js/lib/languages/d'));n// hljs.registerLanguage('delphi', require('highlight.js/lib/languages/delphi'));n// hljs.registerLanguage('dts', require('highlight.js/lib/languages/dts'));n// hljs.registerLanguage('dust', require('highlight.js/lib/languages/dust'));n// hljs.registerLanguage('ebnf', require('highlight.js/lib/languages/ebnf'));n// hljs.registerLanguage('fix', require('highlight.js/lib/languages/fix'));n// hljs.registerLanguage('flix', require('highlight.js/lib/languages/flix'));n// hljs.registerLanguage('gams', require('highlight.js/lib/languages/gams'));n// hljs.registerLanguage('gauss', require('highlight.js/lib/languages/gauss'));n// hljs.registerLanguage('gcode', require('highlight.js/lib/languages/gcode'));n// hljs.registerLanguage('glsl', require('highlight.js/lib/languages/glsl'));n// hljs.registerLanguage('gml', require('highlight.js/lib/languages/gml'));n// hljs.registerLanguage('golo', require('highlight.js/lib/languages/golo'));n// hljs.registerLanguage('haxe', require('highlight.js/lib/languages/haxe'));n// hljs.registerLanguage('hsp', require('highlight.js/lib/languages/hsp'));n// hljs.registerLanguage('hy', require('highlight.js/lib/languages/hy'));n// hljs.registerLanguage('inform7', require('highlight.js/lib/languages/inform7'));n// hljs.registerLanguage('irpf90', require('highlight.js/lib/languages/irpf90'));n// hljs.registerLanguage('isbl', require('highlight.js/lib/languages/isbl'));n// hljs.registerLanguage('jboss-cli', require('highlight.js/lib/languages/jboss-cli'));n// hljs.registerLanguage('lasso', require('highlight.js/lib/languages/lasso'));n// hljs.registerLanguage('leaf', require('highlight.js/lib/languages/leaf'));n// hljs.registerLanguage('livecodeserver', require('highlight.js/lib/languages/livecodeserver'));n// hljs.registerLanguage('llvm', require('highlight.js/lib/languages/llvm'));n// hljs.registerLanguage('lsl', require('highlight.js/lib/languages/lsl'));n// hljs.registerLanguage('maxima', require('highlight.js/lib/languages/maxima'));n// hljs.registerLanguage('mel', require('highlight.js/lib/languages/mel'));n// hljs.registerLanguage('mercury', require('highlight.js/lib/languages/mercury'));n// hljs.registerLanguage('mipsasm', require('highlight.js/lib/languages/mipsasm'));n// hljs.registerLanguage('mizar', require('highlight.js/lib/languages/mizar'));n// hljs.registerLanguage('mojolicious', require('highlight.js/lib/languages/mojolicious'));n// hljs.registerLanguage('monkey', require('highlight.js/lib/languages/monkey'));n// hljs.registerLanguage('moonscript', require('highlight.js/lib/languages/moonscript'));n// hljs.registerLanguage('n1ql', require('highlight.js/lib/languages/n1ql'));n// hljs.registerLanguage('nimrod', require('highlight.js/lib/languages/nimrod'));n// hljs.registerLanguage('nsis', require('highlight.js/lib/languages/nsis'));n// hljs.registerLanguage('openscad', require('highlight.js/lib/languages/openscad'));n// hljs.registerLanguage('oxygene', require('highlight.js/lib/languages/oxygene'));n// hljs.registerLanguage('parser3', require('highlight.js/lib/languages/parser3'));n// hljs.registerLanguage('pf', require('highlight.js/lib/languages/pf'));n// hljs.registerLanguage('pony', require('highlight.js/lib/languages/pony'));n// hljs.registerLanguage('processing', require('highlight.js/lib/languages/processing'));n// hljs.registerLanguage('profile', require('highlight.js/lib/languages/profile'));n// hljs.registerLanguage('properties', require('highlight.js/lib/languages/properties'));n// hljs.registerLanguage('protobuf', require('highlight.js/lib/languages/protobuf'));n// hljs.registerLanguage('puppet', require('highlight.js/lib/languages/puppet'));n// hljs.registerLanguage('purebasic', require('highlight.js/lib/languages/purebasic'));n// hljs.registerLanguage('q', require('highlight.js/lib/languages/q'));n// hljs.registerLanguage('qml', require('highlight.js/lib/languages/qml'));n// hljs.registerLanguage('rib', require('highlight.js/lib/languages/rib'));n// hljs.registerLanguage('roboconf', require('highlight.js/lib/languages/roboconf'));n// hljs.registerLanguage('routeros', require('highlight.js/lib/languages/routeros'));n// hljs.registerLanguage('rsl', require('highlight.js/lib/languages/rsl'));n// hljs.registerLanguage('ruleslanguage', require('highlight.js/lib/languages/ruleslanguage'));n// hljs.registerLanguage('sas', require('highlight.js/lib/languages/sas'));n// hljs.registerLanguage('scheme', require('highlight.js/lib/languages/scheme'));n// hljs.registerLanguage('scilab', require('highlight.js/lib/languages/scilab'));n// hljs.registerLanguage('smali', require('highlight.js/lib/languages/smali'));n// hljs.registerLanguage('sml', require('highlight.js/lib/languages/sml'));n// hljs.registerLanguage('sqf', require('highlight.js/lib/languages/sqf'));n// hljs.registerLanguage('stan', require('highlight.js/lib/languages/stan'));n// hljs.registerLanguage('stata', require('highlight.js/lib/languages/stata'));n// hljs.registerLanguage('step21', require('highlight.js/lib/languages/step21'));n// hljs.registerLanguage('stylus', require('highlight.js/lib/languages/stylus'));n// hljs.registerLanguage('subunit', require('highlight.js/lib/languages/subunit'));n// hljs.registerLanguage('taggerscript', require('highlight.js/lib/languages/taggerscript'));n// hljs.registerLanguage('tap', require('highlight.js/lib/languages/tap'));n// hljs.registerLanguage('tcl', require('highlight.js/lib/languages/tcl'));n// hljs.registerLanguage('tex', require('highlight.js/lib/languages/tex'));n// hljs.registerLanguage('thrift', require('highlight.js/lib/languages/thrift'));n// hljs.registerLanguage('tp', require('highlight.js/lib/languages/tp'));n// hljs.registerLanguage('twig', require('highlight.js/lib/languages/twig'));n// hljs.registerLanguage('vala', require('highlight.js/lib/languages/vala'));n// hljs.registerLanguage('vbscript-html', require('highlight.js/lib/languages/vbscript-html'));n// hljs.registerLanguage('verilog', require('highlight.js/lib/languages/verilog'));n// hljs.registerLanguage('vhdl', require('highlight.js/lib/languages/vhdl'));n// hljs.registerLanguage('x86asm', require('highlight.js/lib/languages/x86asm'));n// hljs.registerLanguage('xl', require('highlight.js/lib/languages/xl'));n// hljs.registerLanguage('xquery', require('highlight.js/lib/languages/xquery'));n// hljs.registerLanguage('zephir', require('highlight.js/lib/languages/zephir'));nnexport default hljs;n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport SimpleMDE from 'simplemde';nimport hljs from '../utils/highlighter';nimport FilePicker from './FilePicker';nimport { getExtensionFromPath } from '../utils/helpers';nnconst classNames = [n 'editor-toolbar',n 'CodeMirror',n 'editor-preview-side',n 'editor-statusbar',n];nnclass MarkdownEditor extends Component {n componentDidMount() {n this.create();n window.hljs = hljs; // TODO: fix this after the next release of SimpleMDEn }nn shouldComponentUpdate(nextProps) {n return nextProps.initialValue !== this.props.initialValue;n }nn componentDidUpdate() {n this.destroy();n this.create();n }nn componentWillUnmount() {n this.destroy();n }nn create() {n const { onChange, onSave } = this.props;n let opts = Object.create(this.props);n opts = this.refs.text;n opts = false;n opts = false;n opts = {n codeSyntaxHighlighting: true,n };n opts = {n image: ['![', '](url#)'],n };n let toolbarIcons = [n 'bold',n 'italic',n 'heading',n '|',n 'code',n 'quote',n 'unordered-list',n 'ordered-list',n '|',n 'link',n 'image',n 'table',n {n name: 'filepicker',n action: () => this.refs.filepicker.refs.trigger.click(),n className: 'fa fa-paperclip',n title: 'Insert Static File',n },n '|',n 'preview',n 'side-by-side',n 'fullscreen',n '|',n ];n if (onSave) {n toolbarIcons.push({n name: 'save',n action: onSave,n className: 'fa fa-floppy-o',n title: 'Save',n });n }n opts = toolbarIcons;n const editor = new SimpleMDE(opts);n if (editor.codemirror) {n editor.codemirror.on('change', () => {n onChange(editor.value());n });n }n this.editor = editor;n }nn destroy() {n for (let i in classNames) {n let elementToRemove = this.refs.container.querySelector(n '.' + classNamesn );n elementToRemove && elementToRemove.remove();n }n }nn // Adapted from an internal helper function within SimpleMDE package.n _replaceSelectedText = (cm, headNTail, url) => {n const startPoint = cm.getCursor('start');n const endPoint = cm.getCursor('end');n const text = cm.getSelection();nn let [head, tail] = headNTail;n if (url) {n tail = tail.replace('#url#', url);n }nn cm.replaceSelection(`${head}${text}${tail}`);n startPoint.ch += head.length;nn if (startPoint !== endPoint) {n endPoint.ch += head.length;n }nn cm.setSelection(startPoint, endPoint);n cm.focus();n };nn handleFilePick = path => {n const { codemirror, options } = this.editor;n const { image, link } = options.insertTexts;n const url = `{{ '${path}' | relative_url }}`;n const ext = getExtensionFromPath(path);nn const type = /png|jpg|gif|jpeg|svg|ico/i.test(ext) ? image : link;n this._replaceSelectedText(codemirror, type, url);n };nn render() {n return (n <div>n <div style={{ display: 'none' }}>n <FilePicker ref="filepicker" onPick={this.handleFilePick} />n </div>n <div ref="container">n <textarea ref="text" />n </div>n </div>n );n }n}nnMarkdownEditor.propTypes = {n initialValue: PropTypes.string.isRequired,n onChange: PropTypes.func.isRequired,n onSave: PropTypes.func.isRequired,n};nnexport default MarkdownEditor;n”,“import React from 'react';nimport PropTypes from 'prop-types';nimport Splitter from './Splitter';nimport InputPath from './form/InputPath';nimport InputTitle from './form/InputTitle';nimport MarkdownEditor from './MarkdownEditor';nimport Metadata from '../containers/MetaFields';nnexport default function MarkdownPageBody({n type,n path,n body,n title,n onSave,n updateTitle,n updatePath,n updateBody,n metafields,n staticmetafields,n}) {n return (n <div className="content-body">n <InputPath onChange={updatePath} type={type} path={path} />n <InputTitle onChange={updateTitle} title={title} />n <MarkdownEditorn onChange={updateBody}n onSave={onSave}n placeholder="Body"n initialValue={body}n />n <Splitter />n <Metadata fields={metafields} staticFields={staticmetafields} />n </div>n );n}nnMarkdownPageBody.defaultProps = {n path: '',n body: '',n title: '',n metafields: {},n staticmetafields: {},n};nnMarkdownPageBody.propTypes = {n updateBody: PropTypes.func.isRequired,n updatePath: PropTypes.func.isRequired,n updateTitle: PropTypes.func.isRequired,n onSave: PropTypes.func.isRequired,n type: PropTypes.string.isRequired,n path: PropTypes.string,n body: PropTypes.string,n title: PropTypes.string,n metafields: PropTypes.object,n staticmetafields: PropTypes.object,n};n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport { browserHistory, withRouter } from 'react-router';nimport { HotKeys } from 'react-hotkeys';nimport _ from 'underscore';nimport DocumentTitle from 'react-document-title';nimport Button from '../../components/Button';nimport Errors from '../../components/Errors';nimport Splitter from '../../components/Splitter';nimport Breadcrumbs from '../../components/Breadcrumbs';nimport MarkdownPageBody from '../../components/MarkdownPageBody';nimport { fetchPage, deletePage, putPage } from '../../ducks/pages';nimport { updateTitle, updateBody, updatePath } from '../../ducks/metadata';nimport { clearErrors } from '../../ducks/utils';nimport { preventDefault, getDocumentTitle } from '../../utils/helpers';nimport { ADMIN_PREFIX } from '../../constants';nnimport translations from '../../translations';nconst { getLeaveMessage, getDeleteMessage } = translations;nnexport class PageEdit extends Component {n componentDidMount() {n const { fetchPage, params, router, route } = this.props;n const [directory, …rest] = params.splat;n const filename = rest.join('.');n fetchPage(directory, filename);nn router.setRouteLeaveHook(route, this.routerWillLeave);n }nn componentWillReceiveProps(nextProps) {n if (this.props.updated !== nextProps.updated) {n const new_path = nextProps.page.path;n const path = this.props.page.path;n // redirect if the path is changedn if (new_path !== path) {n browserHistory.push(`${ADMIN_PREFIX}/pages/${new_path}`);n }n }n }nn componentWillUnmount() {n const { clearErrors, errors } = this.props;n errors.length && clearErrors();n }nn routerWillLeave = nextLocation => {n if (this.props.fieldChanged) {n return getLeaveMessage();n }n };nn handleClickSave = e => {n preventDefault(e);n const { putPage, fieldChanged, params } = this.props;n if (fieldChanged) {n const [directory, …rest] = params.splat;n const filename = rest.join('.');n putPage(directory, filename);n }n };nn handleClickDelete(name) {n const { deletePage, params } = this.props;n const confirm = window.confirm(getDeleteMessage(name));n if (confirm) {n const [directory, …rest] = params.splat;n const filename = rest.join('.');n deletePage(directory, filename);n browserHistory.push(`${ADMIN_PREFIX}/pages/${directory || ''}`);n }n }nn render() {n const {n isFetching,n page,n errors,n updateTitle,n updateBody,n updatePath,n updated,n fieldChanged,n params,n } = this.props;nn if (isFetching) {n return null;n }nn if (_.isEmpty(page)) {n return <h1>{`Could not find the page.`}</h1>;n }nn const keyboardHandlers = {n save: this.handleClickSave,n };nn const {n name,n raw_content,n http_url,n front_matter,n front_matter_defaults,n } = page;n const directory = params.splat;nn const title = front_matter && front_matter.title ? front_matter.title : '';n const document_title = getDocumentTitle('pages', directory, title || name);nn return (n <DocumentTitle title={document_title}>n <HotKeys handlers={keyboardHandlers} className="single">n {errors.length > 0 && <Errors errors={errors} />}nn <div className="content-header">n <Breadcrumbs type="pages" splat={directory} />n </div>nn <div className="content-wrapper">n <MarkdownPageBodyn type="pages"n updateTitle={updateTitle}n updatePath={updatePath}n updateBody={updateBody}n onSave={this.handleClickSave}n path={name}n title={title}n body={raw_content}n metafields={{ title, raw_content, path: name, …front_matter }}n staticmetafields={front_matter_defaults}n />n <div className="content-side">n <Buttonn onClick={this.handleClickSave}n type="save"n active={fieldChanged}n triggered={updated}n blockn />n <Button to={http_url} type="view" active block />n <Splitter />n <Buttonn onClick={() => this.handleClickDelete(name)}n type="delete"n activen blockn />n </div>n </div>n </HotKeys>n </DocumentTitle>n );n }n}nnPageEdit.propTypes = {n page: PropTypes.object.isRequired,n fetchPage: PropTypes.func.isRequired,n deletePage: PropTypes.func.isRequired,n putPage: PropTypes.func.isRequired,n updateTitle: PropTypes.func.isRequired,n updateBody: PropTypes.func.isRequired,n updatePath: PropTypes.func.isRequired,n clearErrors: PropTypes.func.isRequired,n isFetching: PropTypes.bool.isRequired,n errors: PropTypes.array.isRequired,n fieldChanged: PropTypes.bool.isRequired,n updated: PropTypes.bool.isRequired,n params: PropTypes.object.isRequired,n router: PropTypes.object.isRequired,n route: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n page: state.pages.page,n isFetching: state.pages.isFetching,n fieldChanged: state.metadata.fieldChanged,n updated: state.pages.updated,n errors: state.utils.errors,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n fetchPage,n deletePage,n putPage,n updateTitle,n updateBody,n updatePath,n clearErrors,n },n dispatchn );nnexport default withRouter(n connect(mapStateToProps, mapDispatchToProps)(PageEdit)n);n”,“import React from 'react';nimport PropTypes from 'prop-types';nimport { HotKeys } from 'react-hotkeys';nimport Button from './Button';nimport Errors from './Errors';nimport Breadcrumbs from './Breadcrumbs';nimport MarkdownPageBody from './MarkdownPageBody';nimport { injectDefaultFields as defaultFields } from '../utils/metadata';nnexport default function CreateMarkdownPage({n type,n config,n errors,n updated,n updateBody,n updatePath,n updateTitle,n fieldChanged,n onClickSave,n params: { splat },n}) {n const metaType = type === 'drafts' ? 'posts' : type;nn return (n <HotKeys handlers={{ save: onClickSave }}>n {errors.length > 0 && <Errors errors={errors} />}nn <div className="content-header">n <Breadcrumbs type={type} splat={splat} />n </div>nn <div className="content-wrapper">n <MarkdownPageBodyn type={type}n updatePath={updatePath}n updateTitle={updateTitle}n updateBody={updateBody}n onSave={onClickSave}n staticmetafields={defaultFields(config, splat, metaType)}n />n <div className="content-side">n <Buttonn onClick={onClickSave}n type="create"n active={fieldChanged}n triggered={updated}n blockn />n </div>n </div>n </HotKeys>n );n}nnCreateMarkdownPage.propTypes = {n type: PropTypes.string.isRequired,n config: PropTypes.object.isRequired,n params: PropTypes.object.isRequired,n errors: PropTypes.array.isRequired,n updated: PropTypes.bool.isRequired,n fieldChanged: PropTypes.bool.isRequired,n updateBody: PropTypes.func.isRequired,n updatePath: PropTypes.func.isRequired,n updateTitle: PropTypes.func.isRequired,n onClickSave: PropTypes.func.isRequired,n};n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport { browserHistory, withRouter } from 'react-router';nimport DocumentTitle from 'react-document-title';nimport CreateMarkdownPage from '../../components/CreateMarkdownPage';nimport { updateTitle, updateBody, updatePath } from '../../ducks/metadata';nimport { createPage } from '../../ducks/pages';nimport { clearErrors } from '../../ducks/utils';nimport { preventDefault, getDocumentTitle } from '../../utils/helpers';nimport { ADMIN_PREFIX } from '../../constants';nnimport translations from '../../translations';nconst { getLeaveMessage } = translations;nnexport class PageNew extends Component {n componentDidMount() {n const { router, route } = this.props;n router.setRouteLeaveHook(route, this.routerWillLeave);n }nn componentWillReceiveProps(nextProps) {n if (this.props.updated !== nextProps.updated) {n browserHistory.push(`${ADMIN_PREFIX}/pages/${nextProps.page.path}`);n }n }nn componentWillUnmount() {n const { clearErrors, errors } = this.props;n errors.length && clearErrors();n }nn routerWillLeave = nextLocation => {n if (this.props.fieldChanged) {n return getLeaveMessage();n }n };nn handleClickSave = e => {n preventDefault(e);n const { fieldChanged, createPage, params } = this.props;n fieldChanged && createPage(params.splat);n };nn render() {n const {n params,n config,n errors,n updated,n updateBody,n updatePath,n updateTitle,n fieldChanged,n } = this.props;nn const title = getDocumentTitle('pages', params.splat, 'New page');nn return (n <DocumentTitle title={title}>n <CreateMarkdownPagen type="pages"n params={params}n config={config}n errors={errors}n updated={updated}n updateBody={updateBody}n updatePath={updatePath}n updateTitle={updateTitle}n fieldChanged={fieldChanged}n onClickSave={this.handleClickSave}n />n </DocumentTitle>n );n }n}nnPageNew.propTypes = {n createPage: PropTypes.func.isRequired,n updateTitle: PropTypes.func.isRequired,n updateBody: PropTypes.func.isRequired,n updatePath: PropTypes.func.isRequired,n clearErrors: PropTypes.func.isRequired,n errors: PropTypes.array.isRequired,n fieldChanged: PropTypes.bool.isRequired,n updated: PropTypes.bool.isRequired,n router: PropTypes.object.isRequired,n route: PropTypes.object.isRequired,n params: PropTypes.object.isRequired,n config: PropTypes.object.isRequired,n page: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n page: state.pages.page,n fieldChanged: state.metadata.fieldChanged,n errors: state.utils.errors,n updated: state.pages.updated,n config: state.config.config,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n updateTitle,n updateBody,n updatePath,n createPage,n clearErrors,n },n dispatchn );nnexport default withRouter(n connect(mapStateToProps, mapDispatchToProps)(PageNew)n);n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { Link } from 'react-router';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport _ from 'underscore';nimport moment from 'moment';nimport DocumentTitle from 'react-document-title';nimport InputSearch from '../../components/form/InputSearch';nimport Breadcrumbs from '../../components/Breadcrumbs';nimport Button from '../../components/Button';nimport Icon from '../../components/Icon';nimport {n fetchCollection,n deleteDocument,n filterBySearchInput,n} from '../../ducks/collections';nimport { search } from '../../ducks/utils';nimport { getDocumentTitle } from '../../utils/helpers';nimport { ADMIN_PREFIX } from '../../constants';nnimport translations from '../../translations';nconst { getDeleteMessage, getNotFoundMessage } = translations;nnexport class Documents extends Component {n componentDidMount() {n const { fetchCollection, params } = this.props;n fetchCollection(params.collection_name, params.splat);n }nn componentWillReceiveProps(nextProps) {n const { fetchCollection, params } = nextProps;n // refetch the collection when navigating between collections or when splat is changedn if (n params.splat !== this.props.params.splat ||n params.collection_name !== this.props.params.collection_namen ) {n fetchCollection(params.collection_name, params.splat);n }n }nn handleClickDelete(filename) {n const { deleteDocument, params } = this.props;n const confirm = window.confirm(getDeleteMessage(filename));n confirm && deleteDocument(params.collection_name, params.splat, filename);n }nn renderTable() {n return (n <div className="content-table">n <table>n <thead>n <tr>n <th>Name</th>n <th>Date</th>n <th className="th-actions">Actions</th>n </tr>n </thead>n <tbody>{this.renderRows()}</tbody>n </table>n </div>n );n }nn renderFileRow(doc) {n const { id, name, title, http_url, collection, relative_path } = doc;n const to = `${ADMIN_PREFIX}/collections/${collection}/${relative_path}`;n // date w/o timezonen let date = doc.date.substring(0, doc.date.lastIndexOf(' '));n date =n moment(date).format('hh:mm:ss') === '12:00:00'n ? moment(date).format('ll')n : moment(date).format('lll');nn return (n <tr key={id}>n <td className="row-title">n <strong>n <Link to={to}>n <Icon name="file-text-o" />n {title || name}n </Link>n </strong>n </td>n <td>{date}</td>n <td>n <div className="row-actions">n <Buttonn onClick={() => this.handleClickDelete(name)}n type="delete"n activen thinn />n {http_url && <Button to={http_url} type="view" active thin />}n </div>n </td>n </tr>n );n }nn renderDirectoryRow(directory) {n const { params: { collection_name } } = this.props;n const { name, relative_path, modified_time } = directory;n const to = `${ADMIN_PREFIX}/collections/${collection_name}/${relative_path}`;n // date w/o timezonen let date = modified_time.substring(0, modified_time.lastIndexOf(' '));n date = moment(date).format('ll');n return (n <tr key={name}>n <td className="row-title">n <strong>n <Link to={to}>n <Icon name="folder" />n {name}n </Link>n </strong>n </td>n <td>{date}</td>n <td />n </tr>n );n }nn renderRows() {n const { documents } = this.props;n return _.map(documents, entry => {n if (entry.type && entry.type === 'directory') {n return this.renderDirectoryRow(entry);n } else {n return this.renderFileRow(entry);n }n });n }nn render() {n const { isFetching, documents, search, params } = this.props;n const { collection_name } = params;nn if (isFetching) {n return null;n }nn const splat = params.splat || '';n const to = params.splatn ? `${ADMIN_PREFIX}/collections/${collection_name}/${splat}/new`n : `${ADMIN_PREFIX}/collections/${collection_name}/new`;nn const document_title = getDocumentTitle(collection_name, params.splat);nn return (n <DocumentTitle title={document_title}>n <div>n <div className="content-header">n <Breadcrumbs type={collection_name} splat={splat} />n <div className="page-buttons">n <Link className="btn btn-active" to={to}>n {collection_name === 'posts' ? 'New post' : 'New document'}n </Link>n </div>n <div className="pull-right">n <InputSearch searchBy="title" search={search} />n </div>n </div>n {documents.length > 0 && this.renderTable()}n {!documents.length && <h1>{getNotFoundMessage('documents')}</h1>}n </div>n </DocumentTitle>n );n }n}nnDocuments.propTypes = {n isFetching: PropTypes.bool.isRequired,n documents: PropTypes.array.isRequired,n fetchCollection: PropTypes.func.isRequired,n deleteDocument: PropTypes.func.isRequired,n search: PropTypes.func.isRequired,n params: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n documents: filterBySearchInput(state.collections.entries, state.utils.input),n isFetching: state.collections.isFetching,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n fetchCollection,n deleteDocument,n search,n },n dispatchn );nnexport default connect(mapStateToProps, mapDispatchToProps)(Documents);n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport { browserHistory, withRouter } from 'react-router';nimport { HotKeys } from 'react-hotkeys';nimport _ from 'underscore';nimport DocumentTitle from 'react-document-title';nimport Button from '../../components/Button';nimport Errors from '../../components/Errors';nimport Splitter from '../../components/Splitter';nimport Breadcrumbs from '../../components/Breadcrumbs';nimport MarkdownPageBody from '../../components/MarkdownPageBody';nimport {n fetchDocument,n deleteDocument,n putDocument,n} from '../../ducks/collections';nimport { updateTitle, updateBody, updatePath } from '../../ducks/metadata';nimport { clearErrors } from '../../ducks/utils';nimport { preventDefault, getDocumentTitle } from '../../utils/helpers';nimport { ADMIN_PREFIX } from '../../constants';nnimport translations from '../../translations';nconst { getLeaveMessage, getDeleteMessage, getNotFoundMessage } = translations;nnexport class DocumentEdit extends Component {n componentDidMount() {n const { fetchDocument, params, router, route } = this.props;n const [directory, …rest] = params.splat;n const filename = rest.join('.');n fetchDocument(params.collection_name, directory, filename);n router.setRouteLeaveHook(route, this.routerWillLeave);n }nn componentWillReceiveProps(nextProps) {n const { currentDocument } = this.props;n if (this.props.updated !== nextProps.updated) {n const new_path = nextProps.currentDocument.path;n const path = currentDocument.path;n // redirect if the path is changedn if (new_path !== path) {n browserHistory.push(n `${ADMIN_PREFIX}/collections/${new_path.substring(1)}` // remove `_`n );n }n }n }nn componentWillUnmount() {n const { clearErrors, errors } = this.props;n errors.length && clearErrors();n }nn routerWillLeave = nextLocation => {n if (this.props.fieldChanged) {n return getLeaveMessage();n }n };nn handleClickSave = e => {n preventDefault(e);n const { putDocument, fieldChanged, params } = this.props;n if (fieldChanged) {n const collection = params.collection_name;n const [directory, …rest] = params.splat;n const filename = rest.join('.');n putDocument(collection, directory, filename);n }n };nn handleClickDelete = () => {n const { deleteDocument, params } = this.props;n const [directory, …rest] = params.splat;n const filename = rest.join('.');n const confirm = window.confirm(getDeleteMessage(filename));n if (confirm) {n const collection = params.collection_name;n deleteDocument(collection, directory, filename);n browserHistory.push(n `${ADMIN_PREFIX}/collections/${collection}/${directory || ''}`n );n }n };nn render() {n const {n isFetching,n currentDocument,n errors,n updateTitle,n updateBody,n updatePath,n updated,n fieldChanged,n params,n } = this.props;nn if (isFetching) {n return null;n }nn if (_.isEmpty(currentDocument)) {n return <h1>{getNotFoundMessage('document')}</h1>;n }nn const {n title,n raw_content,n http_url,n collection,n front_matter,n front_matter_defaults,n name,n } = currentDocument;n const directory = params.splat;nn const keyboardHandlers = {n save: this.handleClickSave,n };nn const document_title = getDocumentTitle(collection, directory, title);nn return (n <DocumentTitle title={document_title}>n <HotKeys handlers={keyboardHandlers} className="single">n {errors.length > 0 && <Errors errors={errors} />}nn <div className="content-header">n <Breadcrumbs type={collection} splat={directory} />n </div>nn <div className="content-wrapper">n <MarkdownPageBodyn type={collection}n path={name}n title={title}n body={raw_content}n updatePath={updatePath}n updateTitle={updateTitle}n updateBody={updateBody}n onSave={this.handleClickSave}n metafields={{ title, path: name, raw_content, …front_matter }}n staticmetafields={front_matter_defaults}n />n <div className="content-side">n <Buttonn onClick={this.handleClickSave}n type="save"n active={fieldChanged}n triggered={updated}n blockn />n <Button to={http_url} type="view" active block />n <Splitter />n <Buttonn onClick={this.handleClickDelete}n type="delete"n activen blockn />n </div>n </div>n </HotKeys>n </DocumentTitle>n );n }n}nnDocumentEdit.propTypes = {n currentDocument: PropTypes.object.isRequired,n fetchDocument: PropTypes.func.isRequired,n deleteDocument: PropTypes.func.isRequired,n putDocument: PropTypes.func.isRequired,n updateTitle: PropTypes.func.isRequired,n updateBody: PropTypes.func.isRequired,n updatePath: PropTypes.func.isRequired,n clearErrors: PropTypes.func.isRequired,n isFetching: PropTypes.bool.isRequired,n errors: PropTypes.array.isRequired,n updated: PropTypes.bool.isRequired,n fieldChanged: PropTypes.bool.isRequired,n params: PropTypes.object.isRequired,n router: PropTypes.object.isRequired,n route: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n currentDocument: state.collections.currentDocument,n isFetching: state.collections.isFetching,n fieldChanged: state.metadata.fieldChanged,n updated: state.collections.updated,n errors: state.utils.errors,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n fetchDocument,n deleteDocument,n putDocument,n updateTitle,n updateBody,n updatePath,n clearErrors,n },n dispatchn );nnexport default withRouter(n connect(mapStateToProps, mapDispatchToProps)(DocumentEdit)n);n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport { browserHistory, withRouter } from 'react-router';nimport DocumentTitle from 'react-document-title';nimport CreateMarkdownPage from '../../components/CreateMarkdownPage';nimport { updateTitle, updateBody, updatePath } from '../../ducks/metadata';nimport { createDocument } from '../../ducks/collections';nimport { clearErrors } from '../../ducks/utils';nimport { preventDefault, getDocumentTitle } from '../../utils/helpers';nimport { ADMIN_PREFIX } from '../../constants';nnimport translations from '../../translations';nconst { getLeaveMessage } = translations;nnexport class DocumentNew extends Component {n componentDidMount() {n const { router, route } = this.props;n router.setRouteLeaveHook(route, this.routerWillLeave);n }nn componentWillReceiveProps(nextProps) {n if (this.props.updated !== nextProps.updated) {n const path = nextProps.currentDocument.path;n const splat = path.substr(path.indexOf('/') + 1, path.length);n browserHistory.push(n `${ADMIN_PREFIX}/collections/${nextProps.currentDocument.collection}/${splat}`n );n }n }nn componentWillUnmount() {n const { clearErrors, errors } = this.props;n errors.length && clearErrors();n }nn routerWillLeave = nextLocation => {n if (this.props.fieldChanged) {n return getLeaveMessage();n }n };nn handleClickSave = e => {n preventDefault(e);n const { fieldChanged, createDocument, params } = this.props;n fieldChanged && createDocument(params.collection_name, params.splat);n };nn render() {n const {n params,n config,n errors,n updated,n updateBody,n updatePath,n updateTitle,n fieldChanged,n } = this.props;nn const collection = params.collection_name;n const title = getDocumentTitle(collection, params.splat, 'New document');nn return (n <DocumentTitle title={title}>n <CreateMarkdownPagen type={collection}n params={params}n config={config}n errors={errors}n updated={updated}n updateBody={updateBody}n updatePath={updatePath}n updateTitle={updateTitle}n fieldChanged={fieldChanged}n onClickSave={this.handleClickSave}n />n </DocumentTitle>n );n }n}nnDocumentNew.propTypes = {n createDocument: PropTypes.func.isRequired,n updateTitle: PropTypes.func.isRequired,n updateBody: PropTypes.func.isRequired,n updatePath: PropTypes.func.isRequired,n clearErrors: PropTypes.func.isRequired,n errors: PropTypes.array.isRequired,n fieldChanged: PropTypes.bool.isRequired,n updated: PropTypes.bool.isRequired,n params: PropTypes.object.isRequired,n router: PropTypes.object.isRequired,n route: PropTypes.object.isRequired,n config: PropTypes.object.isRequired,n currentDocument: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n currentDocument: state.collections.currentDocument,n fieldChanged: state.metadata.fieldChanged,n errors: state.utils.errors,n updated: state.collections.updated,n config: state.config.config,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n updateTitle,n updateBody,n updatePath,n createDocument,n clearErrors,n },n dispatchn );nnexport default withRouter(n connect(mapStateToProps, mapDispatchToProps)(DocumentNew)n);n”,“import { clearErrors, validationError, filterDeleted } from './utils';nimport { get, put, del } from '../utils/fetch';nimport { datafilesAPIUrl, datafileAPIUrl } from '../constants/api';nimport {n toYAML,n trimObject,n computeRelativePath,n getExtensionFromPath,n} from '../utils/helpers';nimport { validator } from '../utils/validation';nnimport translations from '../translations';nconst { getContentRequiredMessage, getFilenameRequiredMessage } = translations;nn// Action Typesnexport const FETCH_DATAFILES_REQUEST = 'FETCH_DATAFILES_REQUEST';nexport const FETCH_DATAFILES_SUCCESS = 'FETCH_DATAFILES_SUCCESS';nexport const FETCH_DATAFILES_FAILURE = 'FETCH_DATAFILES_FAILURE';nexport const FETCH_DATAFILE_REQUEST = 'FETCH_DATAFILE_REQUEST';nexport const FETCH_DATAFILE_SUCCESS = 'FETCH_DATAFILE_SUCCESS';nexport const FETCH_DATAFILE_FAILURE = 'FETCH_DATAFILE_FAILURE';nexport const PUT_DATAFILE_REQUEST = 'PUT_DATAFILE_REQUEST';nexport const PUT_DATAFILE_SUCCESS = 'PUT_DATAFILE_SUCCESS';nexport const PUT_DATAFILE_FAILURE = 'PUT_DATAFILE_FAILURE';nexport const DELETE_DATAFILE_REQUEST = 'DELETE_DATAFILE_REQUEST';nexport const DELETE_DATAFILE_SUCCESS = 'DELETE_DATAFILE_SUCCESS';nexport const DELETE_DATAFILE_FAILURE = 'DELETE_DATAFILE_FAILURE';nexport const DATAFILE_CHANGED = 'DATAFILE_CHANGED';nn// Actionsnexport const fetchDataFiles = (directory = '') => dispatch => {n dispatch({ type: FETCH_DATAFILES_REQUEST });n return get(n datafilesAPIUrl(directory),n { type: FETCH_DATAFILES_SUCCESS, name: 'files' },n { type: FETCH_DATAFILES_FAILURE, name: 'error' },n dispatchn );n};nnexport const fetchDataFile = (directory, filename) => dispatch => {n dispatch({ type: FETCH_DATAFILE_REQUEST });n return get(n datafileAPIUrl(directory, filename),n { type: FETCH_DATAFILE_SUCCESS, name: 'file' },n { type: FETCH_DATAFILE_FAILURE, name: 'error' },n dispatchn );n};nn/**n * Creates and updates a data file.n * @param {String} directory : Dirname of data filen * @param {String} filename : The data filen * @param {Object} data : Content to be written to data filen * @param {String} new_path : File path relative to confign * @param {String} source : Point of origin of file-content data.n * Either the default `#brace-editor`, or `<DataGUI/>`n */nexport const putDataFile = (n directory,n filename,n data,n new_path = '',n source = 'editor'n) => (dispatch, getState) => {n const ext = getExtensionFromPath(new_path || filename);nn if (source === 'gui') {n const json = /json/i.test(ext);n let metadata = getState().metadata.metadata;n metadata = trimObject(metadata);n data = json ? JSON.stringify(metadata, null, 2) : toYAML(metadata);n }nn const payload = new_pathn ? { path: new_path, raw_content: data }n : { raw_content: data };nn // handle errorsn const errors = validateDatafile(filename, data);n if (errors.length) {n return dispatch(validationError(errors));n }n dispatch(clearErrors());nn return put(n datafileAPIUrl(directory, filename),n JSON.stringify(payload),n { type: PUT_DATAFILE_SUCCESS, name: 'file' },n { type: PUT_DATAFILE_FAILURE, name: 'error' },n dispatchn );n};nnexport const deleteDataFile = (directory, filename) => dispatch => {n const relative_path = computeRelativePath(directory, filename);n return del(n datafileAPIUrl(directory, filename),n { type: DELETE_DATAFILE_SUCCESS, name: 'file', id: relative_path },n { type: DELETE_DATAFILE_FAILURE, name: 'error' },n dispatchn );n};nnexport const onDataFileChanged = () => ({n type: DATAFILE_CHANGED,n});nnconst validateDatafile = (filename, data) =>n validator(n { filename, data },n { filename: 'required', data: 'required' },n {n 'filename.required': getFilenameRequiredMessage(),n 'data.required': getContentRequiredMessage(),n }n );nn// Reducernexport default function datafiles(n state = {n files: [],n currentFile: {},n isFetching: false,n updated: false,n datafileChanged: false,n fieldChanged: false,n },n actionn) {n switch (action.type) {n case FETCH_DATAFILES_REQUEST:n case FETCH_DATAFILE_REQUEST:n return {n …state,n isFetching: true,n };n case FETCH_DATAFILES_SUCCESS:n return {n …state,n files: action.files,n isFetching: false,n currentFile: {},n };n case FETCH_DATAFILES_FAILURE:n return {n …state,n isFetching: false,n currentFile: {},n };n case FETCH_DATAFILE_SUCCESS:n return {n …state,n currentFile: action.file,n isFetching: false,n };n case FETCH_DATAFILE_FAILURE:n return {n …state,n currentFile: {},n isFetching: false,n };n case PUT_DATAFILE_SUCCESS:n return {n …state,n currentFile: action.file,n updated: true,n datafileChanged: false,n };n case PUT_DATAFILE_FAILURE:n return {n …state,n datafileChanged: false,n };n case DELETE_DATAFILE_SUCCESS:n return {n …state,n files: filterDeleted(state.files, action.id),n };n case DATAFILE_CHANGED:n return {n …state,n datafileChanged: true,n updated: false,n };n default:n return {n …state,n updated: false,n datafileChanged: false,n };n }n}n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport DocumentTitle from 'react-document-title';nimport Explorer from '../../components/Explorer';nimport { search, filterBySearchInput } from '../../ducks/utils';nimport { fetchDataFiles, deleteDataFile } from '../../ducks/datafiles';nimport { getDocumentTitle } from '../../utils/helpers';nnexport class DataFiles extends Component {n componentDidMount() {n const { fetchDataFiles, params } = this.props;n fetchDataFiles(params.splat);n }nn componentWillReceiveProps(nextProps) {n const { fetchDataFiles } = nextProps;n if (this.props.params.splat !== nextProps.params.splat) {n fetchDataFiles(nextProps.params.splat);n }n }nn render() {n const { isFetching, files, search, params, deleteDataFile } = this.props;nn if (isFetching) {n return null;n }nn const title = getDocumentTitle('data files', params.splat);nn return (n <DocumentTitle title={title}>n <Explorern type="datafiles"n items={files}n params={params}n newBtnLabel="New data file"n search={search}n deleteItem={deleteDataFile}n />n </DocumentTitle>n );n }n}nnDataFiles.propTypes = {n files: PropTypes.array.isRequired,n fetchDataFiles: PropTypes.func.isRequired,n deleteDataFile: PropTypes.func.isRequired,n isFetching: PropTypes.bool.isRequired,n search: PropTypes.func.isRequired,n params: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n files: filterBySearchInput(state.datafiles.files, state.utils.input),n isFetching: state.datafiles.isFetching,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n fetchDataFiles,n deleteDataFile,n search,n },n dispatchn );nnexport default connect(mapStateToProps, mapDispatchToProps)(DataFiles);n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport { browserHistory, withRouter } from 'react-router';nimport _ from 'underscore';nimport { HotKeys } from 'react-hotkeys';nimport DocumentTitle from 'react-document-title';nimport DataGUI from '../../components/DataGUI';nimport Breadcrumbs from '../../components/Breadcrumbs';nimport InputPath from '../../components/form/InputPath';nimport Splitter from '../../components/Splitter';nimport Errors from '../../components/Errors';nimport Editor from '../../components/Editor';nimport Button from '../../components/Button';nimport { clearErrors } from '../../ducks/utils';nimport {n getFilenameFromPath,n getExtensionFromPath,n preventDefault,n getDocumentTitle,n} from '../../utils/helpers';nimport {n fetchDataFile,n putDataFile,n deleteDataFile,n onDataFileChanged,n} from '../../ducks/datafiles';nimport { ADMIN_PREFIX } from '../../constants';nnimport translations from '../../translations';nconst { getLeaveMessage, getDeleteMessage, getNotFoundMessage } = translations;nnexport class DataFileEdit extends Component {n state = {n guiView: false,n };nn componentDidMount() {n const { fetchDataFile, params, router, route } = this.props;n const [directory, …rest] = params.splat;n const filename = rest.join('.');n router.setRouteLeaveHook(route, this.routerWillLeave);n fetchDataFile(directory, filename);n }nn componentWillReceiveProps(nextProps) {n if (this.props.updated !== nextProps.updated) {n const new_path = nextProps.datafile.path;n const path = this.props.datafile.path;nn // redirect if the path is changedn if (new_path !== path) {n browserHistory.push(n `${ADMIN_PREFIX}/datafiles/${nextProps.datafile.relative_path}`n );n }n }n }nn componentWillUnmount() {n const { clearErrors, errors } = this.props;n errors.length && clearErrors();n }nn routerWillLeave = nextLocation => {n const { datafileChanged, fieldChanged } = this.props;n if (datafileChanged || fieldChanged) {n return getLeaveMessage();n }n };nn toggleView = () => {n this.setState(state => {n return { guiView: !state.guiView };n });n };nn handleClickSave = e => {n preventDefault(e);n const {n datafile,n datafileChanged,n fieldChanged,n putDataFile,n params,n } = this.props;n const { path, relative_path } = datafile;n const data_dir = path.replace(relative_path, '');nn let name, data, mode;n const [directory, …rest] = params.splat;n const filename = rest.join('.');n if (datafileChanged || fieldChanged) {n if (this.state.guiView) {n const { filepath, extname } = this.refs.gui.refs;n name = filepath.value + extname.value;n data = null;n mode = 'gui';n } else {n const { input } = this.refs.inputpath.refs;n name = input.value || input.props.defaultValue;n data = this.refs.editor.getValue();n mode = 'editor';n }nn const data_path = directoryn ? data_dir + `${directory}/` + namen : data_dir + name;nn const new_path = data_path !== path ? data_path : '';n putDataFile(directory, filename, data, new_path, mode);n }n };nn handleClickDelete(path) {n const { deleteDataFile, params } = this.props;n const confirm = window.confirm(getDeleteMessage(path));nn if (confirm) {n const directory = params.splat;n const filename = getFilenameFromPath(path);n deleteDataFile(directory, filename);n const dir = directory ? `/${directory}` : '';n browserHistory.push(`${ADMIN_PREFIX}/datafiles${dir}`);n }n }nn renderAside() {n const { datafile, datafileChanged, fieldChanged, updated } = this.props;n const { path } = datafile;n const filename = getFilenameFromPath(path);n const ext = getExtensionFromPath(path);n const guiSupport = /ya?ml|json/i.test(ext);nn return (n <div className="content-side">n <Buttonn onClick={this.handleClickSave}n type="save"n active={datafileChanged || fieldChanged}n triggered={updated}n blockn />n {guiSupport && (n <Buttonn onClick={this.toggleView}n type="view-toggle"n triggered={this.state.guiView}n activen blockn />n )}n <Splitter />n <Buttonn onClick={() => this.handleClickDelete(filename)}n type="delete"n activen blockn />n </div>n );n }nn renderContentBody(filename) {n const { datafile, datafileChanged, onDataFileChanged } = this.props;n const { raw_content, content, slug, ext } = datafile;n const { guiView } = this.state;nn if (guiView && content) {n return (n <div className="content-body">n <DataGUIn fields={content}n slug={slug}n ext={ext}n onChange={onDataFileChanged}n ref="gui"n />n </div>n );n } else if (!guiView && raw_content) {n return (n <div className="content-body">n <InputPathn onChange={onDataFileChanged}n type="data files"n path={filename}n ref="inputpath"n />n <Editorn editorChanged={datafileChanged}n onEditorChange={onDataFileChanged}n content={raw_content}n type={ext}n ref="editor"n />n </div>n );n }n }nn render() {n const { datafile, isFetching, params, errors } = this.props;nn if (isFetching) {n return null;n }nn if (_.isEmpty(datafile.content)) {n return <h1>{getNotFoundMessage('content')}</h1>;n }nn const directory = params.splat;n const filename = getFilenameFromPath(datafile.path);nn const keyboardHandlers = {n save: this.handleClickSave,n };nn const document_title = getDocumentTitle('data files', directory, filename);nn return (n <DocumentTitle title={document_title}>n <HotKeys handlers={keyboardHandlers} className="single">n {errors.length > 0 && <Errors errors={errors} />}nn <div className="content-header">n <Breadcrumbs type="datafiles" splat={directory} />n </div>nn <div className="content-wrapper">n {this.renderContentBody(filename)}n {this.renderAside()}n </div>n </HotKeys>n </DocumentTitle>n );n }n}nnDataFileEdit.propTypes = {n fetchDataFile: PropTypes.func.isRequired,n putDataFile: PropTypes.func.isRequired,n deleteDataFile: PropTypes.func.isRequired,n clearErrors: PropTypes.func.isRequired,n datafile: PropTypes.object.isRequired,n onDataFileChanged: PropTypes.func.isRequired,n isFetching: PropTypes.bool.isRequired,n updated: PropTypes.bool.isRequired,n datafileChanged: PropTypes.bool.isRequired,n fieldChanged: PropTypes.bool.isRequired,n errors: PropTypes.array.isRequired,n params: PropTypes.object.isRequired,n router: PropTypes.object.isRequired,n route: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n datafile: state.datafiles.currentFile,n isFetching: state.datafiles.isFetching,n updated: state.datafiles.updated,n datafileChanged: state.datafiles.datafileChanged,n fieldChanged: state.metadata.fieldChanged,n errors: state.utils.errors,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n fetchDataFile,n putDataFile,n deleteDataFile,n onDataFileChanged,n clearErrors,n },n dispatchn );nnexport default withRouter(n connect(mapStateToProps, mapDispatchToProps)(DataFileEdit)n);n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport { browserHistory, withRouter } from 'react-router';nimport { HotKeys } from 'react-hotkeys';nimport DocumentTitle from 'react-document-title';nimport DataGUI from '../../components/DataGUI';nimport Errors from '../../components/Errors';nimport Editor from '../../components/Editor';nimport Button from '../../components/Button';nimport Breadcrumbs from '../../components/Breadcrumbs';nimport InputPath from '../../components/form/InputPath';nimport { clearErrors } from '../../ducks/utils';nimport { putDataFile, onDataFileChanged } from '../../ducks/datafiles';nimport { preventDefault, getDocumentTitle } from '../../utils/helpers';nimport { ADMIN_PREFIX } from '../../constants';nnimport translations from '../../translations';nconst { getLeaveMessage } = translations;nnexport class DataFileNew extends Component {n state = {n guiView: false,n };nn componentDidMount() {n const { router, route } = this.props;n router.setRouteLeaveHook(route, this.routerWillLeave);n }nn componentWillReceiveProps(nextProps) {n if (this.props.updated !== nextProps.updated) {n browserHistory.push(n `${ADMIN_PREFIX}/datafiles/${nextProps.datafile.relative_path}`n );n }n }nn componentWillUnmount() {n const { clearErrors, errors } = this.props;n errors.length && clearErrors();n }nn routerWillLeave = nextLocation => {n if (!this.state.guiView && this.props.datafileChanged) {n return getLeaveMessage();n }n };nn toggleView = () => {n this.setState(state => {n return { guiView: !state.guiView };n });n };nn handleClickSave = e => {n preventDefault(e);n const { datafileChanged, fieldChanged, putDataFile, params } = this.props;n let filename;nn if (datafileChanged || fieldChanged) {n if (this.state.guiView) {n const { filepath, extname } = this.refs.gui.refs;n filename = filepath.value + extname.value;n putDataFile(params.splat, filename, null, null, 'gui');n } else {n filename = this.refs.inputpath.refs.input.value;n putDataFile(params.splat, filename, this.refs.editor.getValue());n }n }n };nn renderAside() {n const { datafileChanged, fieldChanged, updated } = this.props;nn return (n <div className="content-side">n <Buttonn onClick={this.handleClickSave}n type="create"n active={datafileChanged || fieldChanged}n triggered={updated}n blockn />n <Buttonn onClick={this.toggleView}n type="view-toggle"n triggered={this.state.guiView}n activen blockn />n </div>n );n }nn renderContentBody() {n const { datafileChanged, onDataFileChanged } = this.props;nn if (this.state.guiView) {n return (n <div className="content-body">n <DataGUI onChange={onDataFileChanged} ref="gui" />n </div>n );n }nn return (n <div className="content-body">n <InputPathn onChange={onDataFileChanged}n type="data files"n path=""n ref="inputpath"n />n <Editorn editorChanged={datafileChanged}n onEditorChange={onDataFileChanged}n content=""n ref="editor"n />n </div>n );n }nn render() {n const { errors, params } = this.props;nn const keyboardHandlers = {n save: this.handleClickSave,n };nn const title = getDocumentTitle('data files', params.splat, 'New data file');nn return (n <DocumentTitle title={title}>n <HotKeys handlers={keyboardHandlers}>n {errors.length > 0 && <Errors errors={errors} />}nn <div className="content-header">n <Breadcrumbs type="datafiles" splat={params.splat} />n </div>nn <div className="content-wrapper">n {this.renderContentBody()}n {this.renderAside()}n </div>n </HotKeys>n </DocumentTitle>n );n }n}nnDataFileNew.propTypes = {n putDataFile: PropTypes.func.isRequired,n datafile: PropTypes.object.isRequired,n onDataFileChanged: PropTypes.func.isRequired,n clearErrors: PropTypes.func.isRequired,n errors: PropTypes.array.isRequired,n updated: PropTypes.bool.isRequired,n datafileChanged: PropTypes.bool.isRequired,n router: PropTypes.object.isRequired,n route: PropTypes.object.isRequired,n params: PropTypes.object.isRequired,n fieldChanged: PropTypes.bool,n};nnconst mapStateToProps = state => ({n datafile: state.datafiles.currentFile,n updated: state.datafiles.updated,n datafileChanged: state.datafiles.datafileChanged,n fieldChanged: state.metadata.fieldChanged,n errors: state.utils.errors,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n putDataFile,n onDataFileChanged,n clearErrors,n },n dispatchn );nnexport default withRouter(n connect(mapStateToProps, mapDispatchToProps)(DataFileNew)n);n”,“import { clearErrors, validationError, filterDeleted } from './utils';nimport { PUT_DOCUMENT_SUCCESS, PUT_DOCUMENT_FAILURE } from './collections';nimport { get, put, del } from '../utils/fetch';nimport { validatePage } from '../utils/validation';nimport {n slugify,n preparePayload,n sanitizeFrontMatter,n computeRelativePath,n} from '../utils/helpers';nimport { draftsAPIUrl, draftAPIUrl, documentAPIUrl } from '../constants/api';nn// Action Typesnexport const FETCH_DRAFTS_REQUEST = 'FETCH_DRAFTS_REQUEST';nexport const FETCH_DRAFTS_SUCCESS = 'FETCH_DRAFTS_SUCCESS';nexport const FETCH_DRAFTS_FAILURE = 'FETCH_DRAFTS_FAILURE';nexport const FETCH_DRAFT_REQUEST = 'FETCH_DRAFT_REQUEST';nexport const FETCH_DRAFT_SUCCESS = 'FETCH_DRAFT_SUCCESS';nexport const FETCH_DRAFT_FAILURE = 'FETCH_DRAFT_FAILURE';nexport const PUT_DRAFT_REQUEST = 'PUT_DRAFT_REQUEST';nexport const PUT_DRAFT_SUCCESS = 'PUT_DRAFT_SUCCESS';nexport const PUT_DRAFT_FAILURE = 'PUT_DRAFT_FAILURE';nexport const DELETE_DRAFT_REQUEST = 'DELETE_DRAFT_REQUEST';nexport const DELETE_DRAFT_SUCCESS = 'DELETE_DRAFT_SUCCESS';nexport const DELETE_DRAFT_FAILURE = 'DELETE_DRAFT_FAILURE';nn// Actionsnexport const fetchDrafts = (directory = '') => dispatch => {n dispatch({ type: FETCH_DRAFTS_REQUEST });n return get(n draftsAPIUrl(directory),n { type: FETCH_DRAFTS_SUCCESS, name: 'drafts' },n { type: FETCH_DRAFTS_FAILURE, name: 'error' },n dispatchn );n};nnexport const fetchDraft = (directory, filename) => dispatch => {n dispatch({ type: FETCH_DRAFT_REQUEST });n return get(n draftAPIUrl(directory, filename),n { type: FETCH_DRAFT_SUCCESS, name: 'draft' },n { type: FETCH_DRAFT_FAILURE, name: 'error' },n dispatchn );n};nnexport const createDraft = directory => (dispatch, getState) => {n // get edited fields from metadata staten const metadata = getState().metadata.metadata;n let { path, raw_content, title } = metadata;n // if `path` is a falsy value or if appending a slash to it equals ton // `directory`, generate filename from `title`.n if ((!path || `${path}/` === directory) && title) {n path = `${slugify(title)}.md`;n } else {n const errors = validatePage(metadata);n if (errors.length) {n return dispatch(validationError(errors));n }n }n // clear errorsn dispatch(clearErrors());nn const front_matter = sanitizeFrontMatter(metadata);nn // strip '_drafts/' from path when providedn const filename = path.replace('_drafts/', '');nn // send the put requestn return put(n draftAPIUrl(directory, filename),n preparePayload({ front_matter, raw_content }),n { type: PUT_DRAFT_SUCCESS, name: 'draft' },n { type: PUT_DRAFT_FAILURE, name: 'error' },n dispatchn );n};nnexport const putDraft = (directory, filename) => (dispatch, getState) => {n // get edited fields from metadata staten const metadata = getState().metadata.metadata;n let { path, raw_content, title } = metadata;n // if `path` is a falsy value or if appending a slash to it equals ton // `directory`, generate filename from `title`.n if ((!path || `${path}/` === directory) && title) {n path = `${slugify(title)}.md`;n } else {n const errors = validatePage(metadata);n if (errors.length) {n return dispatch(validationError(errors));n }n }n // clear errorsn dispatch(clearErrors());nn const front_matter = sanitizeFrontMatter(metadata);n const relative_path = directoryn ? `_drafts/${directory}/${path}`n : `_drafts/${path}`;nn // send the put requestn return put(n draftAPIUrl(directory, filename),n preparePayload({ path: relative_path, front_matter, raw_content }),n { type: PUT_DRAFT_SUCCESS, name: 'draft' },n { type: PUT_DRAFT_FAILURE, name: 'error' },n dispatchn );n};nnexport const deleteDraft = (directory, filename) => dispatch => {n const relative_path = computeRelativePath(directory, filename);n return del(n draftAPIUrl(directory, filename),n { type: DELETE_DRAFT_SUCCESS, name: 'draft', id: relative_path },n { type: DELETE_DRAFT_FAILURE, name: 'error' },n dispatchn );n};nnexport const publishDraft = (directory, filename) => (dispatch, getState) => {n const metadata = getState().metadata.metadata;n let { path, raw_content, title } = metadata;n // if path is not given or equals to directory, generate filename from the titlen if (!path && title) {n path = `${slugify(title)}.md`;n } else {n const errors = validatePage(metadata);n if (errors.length) {n return dispatch(validationError(errors));n }n }n // clear errorsn dispatch(clearErrors());nn const front_matter = sanitizeFrontMatter(metadata);nn return put(n documentAPIUrl('posts', directory, filename),n preparePayload({ raw_content, front_matter }),n { type: PUT_DOCUMENT_SUCCESS, name: 'doc' },n { type: PUT_DOCUMENT_FAILURE, name: 'error' },n dispatchn );n};nn// Reducernexport default function drafts(n state = {n drafts: [],n draft: {},n isFetching: false,n updated: false,n },n actionn) {n switch (action.type) {n case FETCH_DRAFTS_REQUEST:n case FETCH_DRAFT_REQUEST:n return {n …state,n isFetching: true,n };n case FETCH_DRAFTS_SUCCESS:n return {n …state,n drafts: action.drafts,n isFetching: false,n draft: {},n };n case FETCH_DRAFTS_FAILURE:n return {n …state,n isFetching: false,n drafts: [],n };n case FETCH_DRAFT_SUCCESS:n return {n …state,n draft: action.draft,n isFetching: false,n };n case FETCH_DRAFT_FAILURE:n return {n …state,n draft: {},n isFetching: false,n };n case PUT_DRAFT_SUCCESS:n return {n …state,n draft: action.draft,n updated: true,n };n case DELETE_DRAFT_SUCCESS:n return {n …state,n drafts: filterDeleted(state.drafts, action.id),n };n default:n return {n …state,n updated: false,n };n }n}n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport DocumentTitle from 'react-document-title';nimport Explorer from '../../components/Explorer';nimport { search, filterBySearchInput } from '../../ducks/utils';nimport { fetchDrafts, deleteDraft } from '../../ducks/drafts';nimport { getDocumentTitle } from '../../utils/helpers';nnexport class Drafts extends Component {n componentDidMount() {n const { fetchDrafts, params } = this.props;n fetchDrafts(params.splat);n }nn componentWillReceiveProps(nextProps) {n const { fetchDrafts } = nextProps;n if (this.props.params.splat !== nextProps.params.splat) {n fetchDrafts(nextProps.params.splat);n }n }nn render() {n const { isFetching, drafts, search, params, deleteDraft } = this.props;nn if (isFetching) {n return null;n }nn const title = getDocumentTitle('drafts', params.splat);nn return (n <DocumentTitle title={title}>n <Explorern type="drafts"n items={drafts}n params={params}n newBtnLabel="New draft"n search={search}n deleteItem={deleteDraft}n />n </DocumentTitle>n );n }n}nnDrafts.propTypes = {n drafts: PropTypes.array.isRequired,n fetchDrafts: PropTypes.func.isRequired,n deleteDraft: PropTypes.func.isRequired,n isFetching: PropTypes.bool.isRequired,n search: PropTypes.func.isRequired,n params: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n drafts: filterBySearchInput(state.drafts.drafts, state.utils.input),n isFetching: state.drafts.isFetching,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n fetchDrafts,n deleteDraft,n search,n },n dispatchn );nnexport default connect(mapStateToProps, mapDispatchToProps)(Drafts);n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport { browserHistory, withRouter } from 'react-router';nimport { HotKeys } from 'react-hotkeys';nimport _ from 'underscore';nimport moment from 'moment';nimport DocumentTitle from 'react-document-title';nimport Button from '../../components/Button';nimport Errors from '../../components/Errors';nimport Splitter from '../../components/Splitter';nimport Breadcrumbs from '../../components/Breadcrumbs';nimport MarkdownPageBody from '../../components/MarkdownPageBody';nimport {n fetchDraft,n deleteDraft,n putDraft,n publishDraft,n} from '../../ducks/drafts';nimport { updateTitle, updateBody, updatePath } from '../../ducks/metadata';nimport { clearErrors } from '../../ducks/utils';nimport { preventDefault, getDocumentTitle } from '../../utils/helpers';nimport { ADMIN_PREFIX } from '../../constants';nnimport translations from '../../translations';nconst {n getLeaveMessage,n getDeleteMessage,n getPublishDraftMessage,n} = translations;nnexport class DraftEdit extends Component {n componentDidMount() {n const { fetchDraft, params, router, route } = this.props;n const [directory, …rest] = params.splat;n const filename = rest.join('.');n fetchDraft(directory, filename);nn router.setRouteLeaveHook(route, this.routerWillLeave);n }nn componentWillReceiveProps(nextProps) {n if (this.props.updated !== nextProps.updated) {n const new_path = nextProps.draft.path;n const path = this.props.draft.path;n // redirect if the path is changedn if (new_path !== path) {n browserHistory.push(n `${ADMIN_PREFIX}/drafts/${nextProps.draft.relative_path}`n );n }n }n }nn componentWillUnmount() {n const { clearErrors, errors } = this.props;n errors.length && clearErrors();n }nn routerWillLeave = nextLocation => {n if (this.props.fieldChanged) {n return getLeaveMessage();n }n };nn handleClickSave = e => {n preventDefault(e);n const { putDraft, fieldChanged, params } = this.props;n if (fieldChanged) {n const [directory, …rest] = params.splat;n const filename = rest.join('.');n putDraft(directory, filename);n }n };nn handleClickPublish(path) {n const { deleteDraft, publishDraft, params } = this.props;nn const [directory, …rest] = params.splat;n const filename = rest.join('.');n const today = moment().format('YYYY-MM-DD');n const datedfilename = `${today}-${filename}`;n const postPath = directoryn ? `_posts/${directory}/${datedfilename}`n : `_posts/${datedfilename}`;nn const confirm = window.confirm(getPublishDraftMessage(path, postPath));n if (confirm) {n const goTo = directory ? `/${directory}` : '';n deleteDraft(directory, filename);n publishDraft(directory, datedfilename);n browserHistory.push(`${ADMIN_PREFIX}/drafts${goTo}`);n }n }nn handleClickDelete(name) {n const { deleteDraft, params } = this.props;n const confirm = window.confirm(getDeleteMessage(name));n if (confirm) {n const [directory, …rest] = params.splat;n const filename = rest.join('.');n const goTo = directory ? `/${directory}` : '';n deleteDraft(directory, filename);n browserHistory.push(`${ADMIN_PREFIX}/drafts${goTo}`);n }n }nn render() {n const {n isFetching,n draft,n errors,n updateTitle,n updateBody,n updatePath,n updated,n fieldChanged,n params,n } = this.props;nn if (isFetching) {n return null;n } else if (_.isEmpty(draft)) {n return <h1>Could not find the draft.</h1>;n }nn const keyboardHandlers = {n save: this.handleClickSave,n };nn const {n name,n path,n raw_content,n http_url,n front_matter,n front_matter_defaults,n } = draft;n const directory = params.splat;n const title = front_matter && front_matter.title ? front_matter.title : '';n const document_title = getDocumentTitle('drafts', directory, title || name);nn return (n <DocumentTitle title={document_title}>n <HotKeys handlers={keyboardHandlers} className="single">n {errors.length > 0 && <Errors errors={errors} />}n <div className="content-header">n <Breadcrumbs type="drafts" splat={directory} />n </div>nn <div className="content-wrapper">n <MarkdownPageBodyn type="drafts"n path={name}n title={title}n body={raw_content}n updatePath={updatePath}n updateBody={updateBody}n updateTitle={updateTitle}n onSave={this.handleClickSave}n metafields={{ title, raw_content, path: name, …front_matter }}n staticmetafields={front_matter_defaults}n />n <div className="content-side">n <Buttonn onClick={this.handleClickSave}n type="save"n active={fieldChanged}n triggered={updated}n blockn />n <Button to={http_url} type="view" active block />n <Splitter />n <Buttonn onClick={() => this.handleClickPublish(path)}n type="publish"n activen blockn />n <Buttonn onClick={() => this.handleClickDelete(name)}n type="delete"n activen blockn />n </div>n </div>n </HotKeys>n </DocumentTitle>n );n }n}nnDraftEdit.propTypes = {n draft: PropTypes.object.isRequired,n fetchDraft: PropTypes.func.isRequired,n deleteDraft: PropTypes.func.isRequired,n putDraft: PropTypes.func.isRequired,n updateTitle: PropTypes.func.isRequired,n updateBody: PropTypes.func.isRequired,n updatePath: PropTypes.func.isRequired,n clearErrors: PropTypes.func.isRequired,n publishDraft: PropTypes.func.isRequired,n isFetching: PropTypes.bool.isRequired,n errors: PropTypes.array.isRequired,n fieldChanged: PropTypes.bool.isRequired,n updated: PropTypes.bool.isRequired,n params: PropTypes.object.isRequired,n router: PropTypes.object.isRequired,n route: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n draft: state.drafts.draft,n isFetching: state.drafts.isFetching,n fieldChanged: state.metadata.fieldChanged,n updated: state.drafts.updated,n errors: state.utils.errors,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n fetchDraft,n deleteDraft,n putDraft,n publishDraft,n updateTitle,n updateBody,n updatePath,n clearErrors,n },n dispatchn );nnexport default withRouter(n connect(mapStateToProps, mapDispatchToProps)(DraftEdit)n);n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport { browserHistory, withRouter } from 'react-router';nimport DocumentTitle from 'react-document-title';nimport CreateMarkdownPage from '../../components/CreateMarkdownPage';nimport { updateTitle, updateBody, updatePath } from '../../ducks/metadata';nimport { createDraft } from '../../ducks/drafts';nimport { clearErrors } from '../../ducks/utils';nimport { preventDefault, getDocumentTitle } from '../../utils/helpers';nimport { ADMIN_PREFIX } from '../../constants';nnimport translations from '../../translations';nconst { getLeaveMessage } = translations;nnexport class DraftNew extends Component {n componentDidMount() {n const { router, route } = this.props;n router.setRouteLeaveHook(route, this.routerWillLeave);n }nn componentWillReceiveProps(nextProps) {n if (this.props.updated !== nextProps.updated) {n browserHistory.push(n `${ADMIN_PREFIX}/drafts/${nextProps.draft.relative_path}`n );n }n }nn componentWillUnmount() {n const { clearErrors, errors } = this.props;n errors.length && clearErrors();n }nn routerWillLeave = nextLocation => {n if (this.props.fieldChanged) {n return getLeaveMessage();n }n };nn handleClickSave = e => {n preventDefault(e);n const { fieldChanged, createDraft, params } = this.props;n fieldChanged && createDraft(params.splat);n };nn render() {n const {n params,n config,n errors,n updated,n updateBody,n updatePath,n updateTitle,n fieldChanged,n } = this.props;nn const title = getDocumentTitle('drafts', params.splat, 'New draft');nn return (n <DocumentTitle title={title}>n <CreateMarkdownPagen type="drafts"n params={params}n config={config}n errors={errors}n updated={updated}n updateBody={updateBody}n updatePath={updatePath}n updateTitle={updateTitle}n fieldChanged={fieldChanged}n onClickSave={this.handleClickSave}n />n </DocumentTitle>n );n }n}nnDraftNew.propTypes = {n createDraft: PropTypes.func.isRequired,n updateTitle: PropTypes.func.isRequired,n updateBody: PropTypes.func.isRequired,n updatePath: PropTypes.func.isRequired,n clearErrors: PropTypes.func.isRequired,n errors: PropTypes.array.isRequired,n fieldChanged: PropTypes.bool.isRequired,n updated: PropTypes.bool.isRequired,n router: PropTypes.object.isRequired,n route: PropTypes.object.isRequired,n params: PropTypes.object.isRequired,n config: PropTypes.object.isRequired,n draft: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n draft: state.drafts.draft,n fieldChanged: state.metadata.fieldChanged,n errors: state.utils.errors,n updated: state.drafts.updated,n config: state.config.config,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n updateTitle,n updateBody,n updatePath,n createDraft,n clearErrors,n },n dispatchn );nnexport default withRouter(n connect(mapStateToProps, mapDispatchToProps)(DraftNew)n);n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport _ from 'underscore';nimport ReactDropzone from 'react-dropzone';nimport FilePreview from './FilePreview';nimport Splitter from './Splitter';nimport Icon from './Icon';nnexport class Dropzone extends Component {n openDropzone() {n this.refs.ReactDropzone.open();n }nn render() {n const { files, splat, onDrop, onClickDelete, onClickItem } = this.props;n return (n <ReactDropzonen onDrop={onDrop}n ref="ReactDropzone"n className="dropzone"n activeClassName="dropzone-active"n multiplen disableClickn >n {files.length ? (n <div className="preview-container">n {_.map(files, (file, i) => (n <FilePreviewn key={i}n onClick={onClickItem}n onClickDelete={onClickDelete}n splat={splat}n file={file}n />n ))}n <Splitter />n <div className="preview-tip">n <div>Drag and drop file(s) here to upload</div>n </div>n </div>n ) : (n <div className="preview-info">n <Icon name="upload" />n <p>Drag and drop file(s) here to upload</p>n </div>n )}n </ReactDropzone>n );n }n}nnDropzone.propTypes = {n files: PropTypes.array.isRequired,n splat: PropTypes.string.isRequired,n onDrop: PropTypes.func.isRequired,n onClickDelete: PropTypes.func.isRequired,n onClickItem: PropTypes.func,n};nnexport default Dropzone;n”,“import React, { Component } from 'react';nimport PropTypes from 'prop-types';nimport { Link } from 'react-router';nimport { connect } from 'react-redux';nimport { bindActionCreators } from 'redux';nimport DocumentTitle from 'react-document-title';nimport Dropzone from '../../components/Dropzone';nimport Button from '../../components/Button';nimport Icon from '../../components/Icon';nimport Breadcrumbs from '../../components/Breadcrumbs';nimport InputSearch from '../../components/form/InputSearch';nimport { search } from '../../ducks/utils';nimport {n existingUploadedFilenames,n getDocumentTitle,n} from '../../utils/helpers';nimport {n fetchStaticFiles,n uploadStaticFiles,n deleteStaticFile,n filterByFilename,n} from '../../ducks/staticfiles';nimport { ADMIN_PREFIX } from '../../constants';nnimport translations from '../../translations';nconst { getOverrideMessage } = translations;nnexport class StaticFiles extends Component {n componentDidMount() {n const { fetchStaticFiles, params } = this.props;n fetchStaticFiles(params.splat);n }nn componentWillReceiveProps(nextProps) {n const { fetchStaticFiles } = nextProps;n if (this.props.params.splat !== nextProps.params.splat) {n fetchStaticFiles(nextProps.params.splat);n }n }nn onDrop(uploadedFiles) {n const { uploadStaticFiles, files, params } = this.props;n const existingFiles = existingUploadedFilenames(uploadedFiles, files);n if (existingFiles.length > 0) {n const confirm = window.confirm(n getOverrideMessage(existingFiles.join(', '))n );n if (!confirm) {n return false;n }n }n uploadStaticFiles(params.splat, uploadedFiles);n }nn openDropzone = () => {n this.refs.dropzone.openDropzone();n };nn renderFilePreviewRow(static_files, key) {n const { params, onClickStaticFile, deleteStaticFile } = this.props;n return (n <tr key={key}>n <td>n <Dropzonen ref="dropzone"n splat={params.splat || ''}n files={static_files}n onClickItem={onClickStaticFile}n onClickDelete={deleteStaticFile}n onDrop={static_files => this.onDrop(static_files)}n />n </td>n </tr>n );n }nn renderDirectoryRow(directory, index) {n const { name, path } = directory;n const to = `${ADMIN_PREFIX}/staticfiles/${path}`;n return (n <tr key={index}>n <td className="row-title">n <strong>n <Link to={to}>n <Icon name="folder" />n {name}n </Link>n </strong>n </td>n </tr>n );n }nn renderRows() {n const { files } = this.props;n const dirs = files.filter(entity => entity.type === 'directory');n const static_files = files.filter(entity => !entity.type);nn return dirsn .map((entry, index) => this.renderDirectoryRow(entry, index))n .concat(this.renderFilePreviewRow(static_files, dirs.length + 1));n }nn renderTable() {n return (n <div className="content-table">n <table>n <thead>n <tr>n <th>Directory Contents</th>n </tr>n </thead>n <tbody>{this.renderRows()}</tbody>n </table>n </div>n );n }nn render() {n const { isFetching, params, search } = this.props;nn if (isFetching) {n return null;n }nn const to = `${ADMIN_PREFIX}/staticfiles/index`;n const title = getDocumentTitle('static files', params.splat);nn return (n <DocumentTitle title={title}>n <div>n <div className="content-header">n <Breadcrumbs type="staticfiles" splat={params.splat} />n <div className="page-buttons multiple">n <Link className="btn btn-view" to={to}>n Index Listingn </Link>n <Buttonn onClick={() => this.openDropzone()}n type="upload"n activen />n </div>n <div className="pull-right">n <InputSearch searchBy="filename" search={search} />n </div>n </div>n {this.renderTable()}n </div>n </DocumentTitle>n );n }n}nnStaticFiles.propTypes = {n files: PropTypes.array.isRequired,n isFetching: PropTypes.bool.isRequired,n fetchStaticFiles: PropTypes.func.isRequired,n uploadStaticFiles: PropTypes.func.isRequired,n deleteStaticFile: PropTypes.func.isRequired,n onClickStaticFile: PropTypes.func,n search: PropTypes.func.isRequired,n params: PropTypes.object.isRequired,n};nnconst mapStateToProps = state => ({n files: filterByFilename(state.staticfiles.files, state.utils.input),n isFetching: state.staticfiles.isFetching,n});nnconst mapDispatchToProps = dispatch =>n bindActionCreators(n {n fetchStaticFiles,n uploadStaticFiles,n deleteStaticFile,n search,n },n dispatchn );nnexport default connect(mapStateToProps, mapDispatchToProps)(StaticFiles);n”,“import React from 'react';nnconst NotFound = () => (n <div className="notfound">n <img src={require('../../assets/images/logo-black-red.png')} alt="Jekyll Admin" />n <h1>Huh. It seems that page is Hyde-ing…</h1>n <h2>The resource you requested was not found.</h2>n </div>n);nnexport default NotFound;n”,“import React from 'react';nimport { Route, IndexRoute } from 'react-router';nimport { ADMIN_PREFIX } from './constants';nnimport App from './containers/App';nimport Configuration from './containers/views/Configuration';nimport Pages from './containers/views/Pages';nimport PageEdit from './containers/views/PageEdit';nimport PageNew from './containers/views/PageNew';nimport Documents from './containers/views/Documents';nimport DocumentEdit from './containers/views/DocumentEdit';nimport DocumentNew from './containers/views/DocumentNew';nimport DataFiles from './containers/views/DataFiles';nimport DataFileEdit from './containers/views/DataFileEdit';nimport DataFileNew from './containers/views/DataFileNew';nimport Drafts from './containers/views/Drafts';nimport DraftEdit from './containers/views/DraftEdit';nimport DraftNew from './containers/views/DraftNew';nimport StaticFiles from './containers/views/StaticFiles';nimport StaticIndex from './containers/views/StaticIndex';nimport NotFound from './containers/views/NotFound';nnexport default (n <Route path={`${ADMIN_PREFIX}`} component={App}>n <IndexRoute component={Pages} />n <Route path="configuration" component={Configuration} />n <Route path="pages">n <IndexRoute component={Pages} />n <Route path="(**/)new" component={PageNew} />n <Route path="(*/).*" component={PageEdit} />n <Route path="**" component={Pages} />n </Route>n <Route path="collections">n <Route path=":collection_name">n <IndexRoute component={Documents} />n <Route path="(**/)new" component={DocumentNew} />n <Route path="(*/).*" component={DocumentEdit} />n <Route path="**" component={Documents} />n </Route>n </Route>n <Route path="drafts">n <IndexRoute component={Drafts} />n <Route path="(**/)new" component={DraftNew} />n <Route path="(*/).*" component={DraftEdit} />n <Route path="**" component={Drafts} />n </Route>n <Route path="datafiles">n <IndexRoute component={DataFiles} />n <Route path="(**/)new" component={DataFileNew} />n <Route path="(*/).*" component={DataFileEdit} />n <Route path="**" component={DataFiles} />n </Route>n <Route path="staticfiles">n <IndexRoute component={StaticFiles} />n <Route path="index" component={StaticIndex} />n <Route path="**" component={StaticFiles} />n </Route>n <Route path={`${ADMIN_PREFIX}/*`} component={NotFound} />n </Route>n);n”,“import { combineReducers } from 'redux';nimport { routerReducer } from 'react-router-redux';nnimport config from './config';nimport pages from './pages';nimport collections from './collections';nimport metadata from './metadata';nimport drafts from './drafts';nimport datafiles from './datafiles';nimport staticfiles from './staticfiles';nimport utils from './utils';nimport siteMeta from './siteMeta';nimport notifications from './notifications';nnexport default combineReducers({n routing: routerReducer,n meta: siteMeta,n config,n pages,n collections,n metadata,n drafts,n datafiles,n staticfiles,n utils,n notifications,n});n”,“import { createStore, compose, applyMiddleware } from 'redux';nimport reduxImmutableStateInvariant from 'redux-immutable-state-invariant';nimport thunk from 'redux-thunk';nimport createLogger from 'redux-logger';nimport rootReducer from './ducks';nnconst logger = createLogger();nnconst configureStoreProd = initialState => {n const middlewares = [thunk];nn return createStore(n rootReducer,n initialState,n compose(applyMiddleware(…middlewares))n );n};nnconst configureStoreDev = initialState => {n const middlewares = [reduxImmutableStateInvariant(), thunk, logger];nn const composeEnhancers =n window.REDUX_DEVTOOLS_EXTENSION_COMPOSE || compose;n const store = createStore(n rootReducer,n initialState,n composeEnhancers(applyMiddleware(…middlewares))n );nn if (module.hot) {n module.hot.accept('./ducks', () => {n const nextReducer = require('./ducks').default;n store.replaceReducer(nextReducer);n });n }nn return store;n};nnconst configureStore =n process.env.NODE_ENV === 'production'n ? configureStoreProdn : configureStoreDev;nnexport default configureStore;n”,“/* eslint-disable import/default */nimport React from 'react';nimport { syncHistoryWithStore } from 'react-router-redux';nimport { render } from 'react-dom';nimport { Provider } from 'react-redux';nimport { Router, browserHistory, Redirect } from 'react-router';nimport routes from './routes';nimport configureStore from './store';nimport { ADMIN_PREFIX } from './constants';nimport './styles/main.scss';nnconst store = configureStore();nconst history = syncHistoryWithStore(browserHistory, store);nnrender(n <Provider store={store}>n <Router history={history} routes={routes}>n <Redirect from={`${ADMIN_PREFIX}/`} to={`${ADMIN_PREFIX}/pages/`} />n </Router>n </Provider>,n document.getElementById('root')n);n”],“sourceRoot”:“”}

    n n this.setState({ dropdown: false })}n >n n n
    n onEnableField()}>n Override defaultn n
    n n