@akemona-org/strapi-plugin-content-manager 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +27 -0
- package/admin/src/InjectedComponents/ContentTypeBuilder/ConfigureViewButton/index.js +78 -0
- package/admin/src/assets/images/background_input.svg +1 -0
- package/admin/src/assets/images/icon-cross-blue.svg +1 -0
- package/admin/src/assets/images/icon_remove.svg +19 -0
- package/admin/src/assets/images/logo.svg +1 -0
- package/admin/src/components/AddDropdown/components.js +113 -0
- package/admin/src/components/AddDropdown/index.js +76 -0
- package/admin/src/components/Block/components.js +28 -0
- package/admin/src/components/Block/index.js +45 -0
- package/admin/src/components/ComponentInitializer/P.js +9 -0
- package/admin/src/components/ComponentInitializer/index.js +43 -0
- package/admin/src/components/Container/index.js +7 -0
- package/admin/src/components/CustomInputCheckbox/components.js +77 -0
- package/admin/src/components/CustomInputCheckbox/index.js +53 -0
- package/admin/src/components/CustomTable/ActionCollapse/Delete.js +14 -0
- package/admin/src/components/CustomTable/ActionCollapse/DeleteAll.js +18 -0
- package/admin/src/components/CustomTable/ActionCollapse/Wrapper.js +20 -0
- package/admin/src/components/CustomTable/ActionCollapse/index.js +38 -0
- package/admin/src/components/CustomTable/Headers/Header.js +59 -0
- package/admin/src/components/CustomTable/Headers/Thead.js +35 -0
- package/admin/src/components/CustomTable/Headers/index.js +46 -0
- package/admin/src/components/CustomTable/Row/ActionContainer.js +19 -0
- package/admin/src/components/CustomTable/Row/Cell.js +55 -0
- package/admin/src/components/CustomTable/Row/index.js +112 -0
- package/admin/src/components/CustomTable/index.js +162 -0
- package/admin/src/components/CustomTable/styledComponents.js +85 -0
- package/admin/src/components/DragLayer/index.js +102 -0
- package/admin/src/components/DraggedField/Close/index.js +10 -0
- package/admin/src/components/DraggedField/GrabWrapper.js +38 -0
- package/admin/src/components/DraggedField/Link.js +17 -0
- package/admin/src/components/DraggedField/NameWrapper.js +29 -0
- package/admin/src/components/DraggedField/RemoveWrapper.js +32 -0
- package/admin/src/components/DraggedField/SubWrapper.js +36 -0
- package/admin/src/components/DraggedField/Wrapper.js +134 -0
- package/admin/src/components/DraggedField/index.js +196 -0
- package/admin/src/components/DraggedField/utils/getColor.js +12 -0
- package/admin/src/components/DraggedField/utils/getHeight.js +3 -0
- package/admin/src/components/DraggedFieldWithPreview/Carret.js +24 -0
- package/admin/src/components/DraggedFieldWithPreview/DynamicComponent.js +70 -0
- package/admin/src/components/DraggedFieldWithPreview/DynamicZoneWrapper.js +10 -0
- package/admin/src/components/DraggedFieldWithPreview/Tooltip.js +19 -0
- package/admin/src/components/DraggedFieldWithPreview/Wrapper.js +24 -0
- package/admin/src/components/DraggedFieldWithPreview/index.js +194 -0
- package/admin/src/components/DynamicComponentCard/Wrapper.js +63 -0
- package/admin/src/components/DynamicComponentCard/index.js +49 -0
- package/admin/src/components/DynamicZone/BaselineAlignement.js +11 -0
- package/admin/src/components/DynamicZone/Button.js +31 -0
- package/admin/src/components/DynamicZone/Component/RoundCTA.js +45 -0
- package/admin/src/components/DynamicZone/Component/index.js +79 -0
- package/admin/src/components/DynamicZone/ComponentWrapper.js +44 -0
- package/admin/src/components/DynamicZone/DynamicZoneWrapper.js +12 -0
- package/admin/src/components/DynamicZone/Label.js +42 -0
- package/admin/src/components/DynamicZone/Picker/Category/Banner/Wrapper.js +78 -0
- package/admin/src/components/DynamicZone/Picker/Category/Banner/index.js +33 -0
- package/admin/src/components/DynamicZone/Picker/Category/index.js +53 -0
- package/admin/src/components/DynamicZone/Picker/Wrapper.js +32 -0
- package/admin/src/components/DynamicZone/Picker/index.js +88 -0
- package/admin/src/components/DynamicZone/Wrapper.js +34 -0
- package/admin/src/components/DynamicZone/index.js +238 -0
- package/admin/src/components/DynamicZone/utils/connect.js +12 -0
- package/admin/src/components/DynamicZone/utils/select.js +49 -0
- package/admin/src/components/FieldComponent/ComponentIcon.js +44 -0
- package/admin/src/components/FieldComponent/EmptyComponent.js +19 -0
- package/admin/src/components/FieldComponent/Label.js +10 -0
- package/admin/src/components/FieldComponent/ResetComponent.js +41 -0
- package/admin/src/components/FieldComponent/Wrapper.js +18 -0
- package/admin/src/components/FieldComponent/index.js +171 -0
- package/admin/src/components/FieldComponent/utils/connect.js +12 -0
- package/admin/src/components/FieldComponent/utils/select.js +123 -0
- package/admin/src/components/FieldsReorder/Item.js +249 -0
- package/admin/src/components/FieldsReorder/components.js +8 -0
- package/admin/src/components/FieldsReorder/index.js +102 -0
- package/admin/src/components/FilterOptionsCTA/index.js +14 -0
- package/admin/src/components/FilterPicker/components.js +56 -0
- package/admin/src/components/FilterPicker/index.js +258 -0
- package/admin/src/components/FilterPicker/init.js +25 -0
- package/admin/src/components/FilterPicker/reducer.js +58 -0
- package/admin/src/components/FilterPickerOption/Input.js +58 -0
- package/admin/src/components/FilterPickerOption/Option.js +18 -0
- package/admin/src/components/FilterPickerOption/components.js +60 -0
- package/admin/src/components/FilterPickerOption/index.js +101 -0
- package/admin/src/components/FormTitle/index.js +26 -0
- package/admin/src/components/FormWrapper/index.js +20 -0
- package/admin/src/components/InputJSON/components.js +30 -0
- package/admin/src/components/InputJSON/index.js +184 -0
- package/admin/src/components/InputJSON/jsonlint.js +424 -0
- package/admin/src/components/InputJSONWithErrors/Wrapper.js +32 -0
- package/admin/src/components/InputJSONWithErrors/index.js +168 -0
- package/admin/src/components/InputUID/InputUID.js +26 -0
- package/admin/src/components/InputUID/Options/Option.js +22 -0
- package/admin/src/components/InputUID/Options/OptionsTitle.js +12 -0
- package/admin/src/components/InputUID/Options/RightOptionLabel.js +10 -0
- package/admin/src/components/InputUID/Options/index.js +34 -0
- package/admin/src/components/InputUID/Options/wrapper.js +13 -0
- package/admin/src/components/InputUID/RegenerateButton.js +18 -0
- package/admin/src/components/InputUID/RightContent.js +14 -0
- package/admin/src/components/InputUID/RightContentLabel.js +10 -0
- package/admin/src/components/InputUID/RightLabel.js +42 -0
- package/admin/src/components/InputUID/SubLabel.js +9 -0
- package/admin/src/components/InputUID/Wrapper.js +8 -0
- package/admin/src/components/InputUID/index.js +325 -0
- package/admin/src/components/InputUID/regex.js +3 -0
- package/admin/src/components/Inputs/index.js +283 -0
- package/admin/src/components/Inputs/utils/VALIDATIONS_TO_OMIT.js +12 -0
- package/admin/src/components/Inputs/utils/connect.js +12 -0
- package/admin/src/components/Inputs/utils/generateOptions.js +19 -0
- package/admin/src/components/Inputs/utils/getInputType.js +44 -0
- package/admin/src/components/Inputs/utils/getStep.js +15 -0
- package/admin/src/components/Inputs/utils/index.js +6 -0
- package/admin/src/components/Inputs/utils/select.js +38 -0
- package/admin/src/components/LayoutTitle/index.js +19 -0
- package/admin/src/components/MediaPreviewList/StyledMediaPreviewList.js +171 -0
- package/admin/src/components/MediaPreviewList/index.js +110 -0
- package/admin/src/components/NonRepeatableComponent/index.js +73 -0
- package/admin/src/components/NonRepeatableWrapper/index.js +73 -0
- package/admin/src/components/PlusButton/index.js +52 -0
- package/admin/src/components/PopupForm/index.js +93 -0
- package/admin/src/components/PreviewCarret/components.js +27 -0
- package/admin/src/components/PreviewCarret/index.js +22 -0
- package/admin/src/components/PreviewWysiwyg/Wrapper.js +133 -0
- package/admin/src/components/PreviewWysiwyg/index.js +34 -0
- package/admin/src/components/PreviewWysiwyg/utils/mdRenderer.js +72 -0
- package/admin/src/components/PreviewWysiwyg/utils/satinizeHtml.js +16 -0
- package/admin/src/components/RelationPreviewList/CountWrapper.js +7 -0
- package/admin/src/components/RelationPreviewList/RelationPreviewTooltip.js +117 -0
- package/admin/src/components/RelationPreviewList/index.js +111 -0
- package/admin/src/components/RepeatableComponent/AddFieldButton.js +64 -0
- package/admin/src/components/RepeatableComponent/Banner.js +112 -0
- package/admin/src/components/RepeatableComponent/BannerWrapper.js +194 -0
- package/admin/src/components/RepeatableComponent/CarretTop.js +14 -0
- package/admin/src/components/RepeatableComponent/DraggedItem/index.js +245 -0
- package/admin/src/components/RepeatableComponent/DraggedItem/utils/connect.js +11 -0
- package/admin/src/components/RepeatableComponent/DraggedItem/utils/index.js +2 -0
- package/admin/src/components/RepeatableComponent/DraggedItem/utils/select.js +30 -0
- package/admin/src/components/RepeatableComponent/EmptyComponent.js +27 -0
- package/admin/src/components/RepeatableComponent/FormWrapper.js +27 -0
- package/admin/src/components/RepeatableComponent/index.js +187 -0
- package/admin/src/components/RepeatableComponent/reducer.js +73 -0
- package/admin/src/components/RepeatableComponent/utils/connect.js +11 -0
- package/admin/src/components/RepeatableComponent/utils/select.js +12 -0
- package/admin/src/components/Search/index.js +88 -0
- package/admin/src/components/SectionTitle/Title.js +11 -0
- package/admin/src/components/SectionTitle/index.js +29 -0
- package/admin/src/components/SelectMany/ListItem.js +107 -0
- package/admin/src/components/SelectMany/Relation.js +106 -0
- package/admin/src/components/SelectMany/components.js +153 -0
- package/admin/src/components/SelectMany/index.js +159 -0
- package/admin/src/components/SelectOne/SingleValue.js +58 -0
- package/admin/src/components/SelectOne/index.js +71 -0
- package/admin/src/components/SelectWrapper/ClearIndicator.js +15 -0
- package/admin/src/components/SelectWrapper/IndicatorSeparator.js +3 -0
- package/admin/src/components/SelectWrapper/Option.js +76 -0
- package/admin/src/components/SelectWrapper/components.js +14 -0
- package/admin/src/components/SelectWrapper/index.js +393 -0
- package/admin/src/components/SelectWrapper/utils/connect.js +12 -0
- package/admin/src/components/SelectWrapper/utils/index.js +3 -0
- package/admin/src/components/SelectWrapper/utils/select.js +45 -0
- package/admin/src/components/SelectWrapper/utils/styles.js +105 -0
- package/admin/src/components/Separator/index.js +9 -0
- package/admin/src/components/SettingFormWrapper/index.js +9 -0
- package/admin/src/components/SettingsViewWrapper/index.js +283 -0
- package/admin/src/components/SortWrapper/index.js +9 -0
- package/admin/src/components/SortableList/Item.js +126 -0
- package/admin/src/components/SortableList/index.js +60 -0
- package/admin/src/components/State/Wrapper.js +30 -0
- package/admin/src/components/State/index.js +26 -0
- package/admin/src/components/Truncate/index.js +5 -0
- package/admin/src/components/Truncated/index.js +10 -0
- package/admin/src/components/Wysiwyg/EditorWrapper.js +122 -0
- package/admin/src/components/Wysiwyg/MediaLib.js +71 -0
- package/admin/src/components/Wysiwyg/PreviewControlWrapper.js +30 -0
- package/admin/src/components/Wysiwyg/SelectWrapper.js +24 -0
- package/admin/src/components/Wysiwyg/ToggleModeWrapper.js +30 -0
- package/admin/src/components/Wysiwyg/constants.js +98 -0
- package/admin/src/components/Wysiwyg/customSelect.js +39 -0
- package/admin/src/components/Wysiwyg/helpers.js +116 -0
- package/admin/src/components/Wysiwyg/index.js +819 -0
- package/admin/src/components/Wysiwyg/previewControl.js +29 -0
- package/admin/src/components/Wysiwyg/toggleMode.js +44 -0
- package/admin/src/components/Wysiwyg/utils.js +70 -0
- package/admin/src/components/WysiwygBottomControls/components.js +44 -0
- package/admin/src/components/WysiwygBottomControls/index.js +33 -0
- package/admin/src/components/WysiwygDropUpload/Label.js +16 -0
- package/admin/src/components/WysiwygDropUpload/index.js +18 -0
- package/admin/src/components/WysiwygEditor/index.js +26 -0
- package/admin/src/components/WysiwygInlineControls/Button.js +77 -0
- package/admin/src/components/WysiwygInlineControls/StyledButton.js +54 -0
- package/admin/src/components/WysiwygInlineControls/Wrapper.js +25 -0
- package/admin/src/components/WysiwygInlineControls/index.js +66 -0
- package/admin/src/components/WysiwygWithErrors/Wrapper.js +38 -0
- package/admin/src/components/WysiwygWithErrors/index.js +158 -0
- package/admin/src/containers/CollectionTypeFormWrapper/index.js +376 -0
- package/admin/src/containers/CollectionTypeFormWrapper/utils/getRequestUrl.js +5 -0
- package/admin/src/containers/CollectionTypeFormWrapper/utils/index.js +2 -0
- package/admin/src/containers/CollectionTypeRecursivePath/index.js +125 -0
- package/admin/src/containers/ComponentSetttingsView/index.js +55 -0
- package/admin/src/containers/EditSettingsView/index.js +408 -0
- package/admin/src/containers/EditSettingsView/init.js +18 -0
- package/admin/src/containers/EditSettingsView/reducer.js +126 -0
- package/admin/src/containers/EditSettingsView/utils/createPossibleMainFieldsForModelsAndComponents.js +26 -0
- package/admin/src/containers/EditSettingsView/utils/getInputProps.js +30 -0
- package/admin/src/containers/EditSettingsView/utils/index.js +2 -0
- package/admin/src/containers/EditSettingsView/utils/layout.js +98 -0
- package/admin/src/containers/EditView/DeleteLink/index.js +94 -0
- package/admin/src/containers/EditView/DeleteLink/utils/connect.js +12 -0
- package/admin/src/containers/EditView/DeleteLink/utils/index.js +2 -0
- package/admin/src/containers/EditView/DeleteLink/utils/select.js +21 -0
- package/admin/src/containers/EditView/Header/index.js +258 -0
- package/admin/src/containers/EditView/Header/utils/connect.js +12 -0
- package/admin/src/containers/EditView/Header/utils/getDraftRelations.js +62 -0
- package/admin/src/containers/EditView/Header/utils/index.js +3 -0
- package/admin/src/containers/EditView/Header/utils/select.js +31 -0
- package/admin/src/containers/EditView/InformationCard.js +100 -0
- package/admin/src/containers/EditView/components.js +74 -0
- package/admin/src/containers/EditView/index.js +297 -0
- package/admin/src/containers/EditView/utils/createAttributesLayout.js +39 -0
- package/admin/src/containers/EditView/utils/getFieldsActionMatchingPermissions.js +23 -0
- package/admin/src/containers/EditView/utils/index.js +3 -0
- package/admin/src/containers/EditViewDataManagerProvider/index.js +519 -0
- package/admin/src/containers/EditViewDataManagerProvider/reducer.js +218 -0
- package/admin/src/containers/EditViewDataManagerProvider/utils/cleanData.js +88 -0
- package/admin/src/containers/EditViewDataManagerProvider/utils/getYupInnerErrors.js +17 -0
- package/admin/src/containers/EditViewDataManagerProvider/utils/index.js +3 -0
- package/admin/src/containers/EditViewDataManagerProvider/utils/schema.js +368 -0
- package/admin/src/containers/EditViewLayoutManager/Permissions.js +30 -0
- package/admin/src/containers/EditViewLayoutManager/actions.js +9 -0
- package/admin/src/containers/EditViewLayoutManager/constants.js +2 -0
- package/admin/src/containers/EditViewLayoutManager/index.js +44 -0
- package/admin/src/containers/EditViewLayoutManager/reducer.js +30 -0
- package/admin/src/containers/EditViewLayoutManager/selectors.js +5 -0
- package/admin/src/containers/LayoutDndProvider/index.js +75 -0
- package/admin/src/containers/ListSettingsView/DragWrapper.js +21 -0
- package/admin/src/containers/ListSettingsView/DropdownButton.js +8 -0
- package/admin/src/containers/ListSettingsView/Label.js +91 -0
- package/admin/src/containers/ListSettingsView/MenuDropdown.js +41 -0
- package/admin/src/containers/ListSettingsView/Toggle.js +51 -0
- package/admin/src/containers/ListSettingsView/forms.json +64 -0
- package/admin/src/containers/ListSettingsView/index.js +298 -0
- package/admin/src/containers/ListSettingsView/init.js +11 -0
- package/admin/src/containers/ListSettingsView/reducer.js +77 -0
- package/admin/src/containers/ListView/FieldPicker/ConfigureLink/StyledLink.js +28 -0
- package/admin/src/containers/ListView/FieldPicker/ConfigureLink/Wrapper.js +8 -0
- package/admin/src/containers/ListView/FieldPicker/ConfigureLink/index.js +29 -0
- package/admin/src/containers/ListView/FieldPicker/Field/Wrapper.js +15 -0
- package/admin/src/containers/ListView/FieldPicker/Field/index.js +24 -0
- package/admin/src/containers/ListView/FieldPicker/Fields/Wrapper.js +18 -0
- package/admin/src/containers/ListView/FieldPicker/Fields/index.js +27 -0
- package/admin/src/containers/ListView/FieldPicker/Header/Reset.js +8 -0
- package/admin/src/containers/ListView/FieldPicker/Header/index.js +42 -0
- package/admin/src/containers/ListView/FieldPicker/Wrapper.js +9 -0
- package/admin/src/containers/ListView/FieldPicker/index.js +46 -0
- package/admin/src/containers/ListView/Filter.js +83 -0
- package/admin/src/containers/ListView/Footer.js +60 -0
- package/admin/src/containers/ListView/actions.js +91 -0
- package/admin/src/containers/ListView/components.js +138 -0
- package/admin/src/containers/ListView/constants.js +16 -0
- package/admin/src/containers/ListView/index.js +573 -0
- package/admin/src/containers/ListView/reducer.js +182 -0
- package/admin/src/containers/ListView/selectors.js +24 -0
- package/admin/src/containers/ListView/utils/buildQueryString.js +26 -0
- package/admin/src/containers/ListView/utils/createPluginsFilter.js +13 -0
- package/admin/src/containers/ListView/utils/getAllAllowedHeaders.js +17 -0
- package/admin/src/containers/ListView/utils/getFirstSortableHeader.js +14 -0
- package/admin/src/containers/ListView/utils/index.js +3 -0
- package/admin/src/containers/ListViewLayoutManager/Permissions.js +29 -0
- package/admin/src/containers/ListViewLayoutManager/index.js +60 -0
- package/admin/src/containers/ListViewProvider/index.js +16 -0
- package/admin/src/containers/Main/actions.js +13 -0
- package/admin/src/containers/Main/constants.js +3 -0
- package/admin/src/containers/Main/index.js +100 -0
- package/admin/src/containers/Main/reducer.js +37 -0
- package/admin/src/containers/Main/selectors.js +20 -0
- package/admin/src/containers/RBACManager/actions.js +14 -0
- package/admin/src/containers/RBACManager/constants.js +2 -0
- package/admin/src/containers/RBACManager/reducer.js +32 -0
- package/admin/src/containers/RBACManager/useSyncRbac.js +28 -0
- package/admin/src/containers/SingleTypeFormWrapper/index.js +317 -0
- package/admin/src/containers/SingleTypeFormWrapper/utils/getRequestUrl.js +5 -0
- package/admin/src/containers/SingleTypeFormWrapper/utils/index.js +2 -0
- package/admin/src/containers/SingleTypeRecursivePath/index.js +84 -0
- package/admin/src/containers/WysiwygProvider/index.js +16 -0
- package/admin/src/contexts/ContentTypeLayout.js +5 -0
- package/admin/src/contexts/LayoutDnd.js +5 -0
- package/admin/src/contexts/ListView.js +5 -0
- package/admin/src/contexts/Wysiwyg.js +5 -0
- package/admin/src/contexts/index.js +4 -0
- package/admin/src/hooks/index.js +6 -0
- package/admin/src/hooks/useContentTypeLayout/index.js +19 -0
- package/admin/src/hooks/useFetchContentTypeLayout/index.js +83 -0
- package/admin/src/hooks/useFetchContentTypeLayout/reducer.js +56 -0
- package/admin/src/hooks/useFetchContentTypeLayout/utils/formatLayouts.js +235 -0
- package/admin/src/hooks/useFindRedirectionLink/index.js +14 -0
- package/admin/src/hooks/useFindRedirectionLink/selectors.js +7 -0
- package/admin/src/hooks/useFindRedirectionLink/utils/getRedirectionLink.js +45 -0
- package/admin/src/hooks/useLayoutDnd.js +6 -0
- package/admin/src/hooks/useListView.js +6 -0
- package/admin/src/hooks/useWysiwyg.js +6 -0
- package/admin/src/icons/Bold/index.js +22 -0
- package/admin/src/icons/Code/index.js +13 -0
- package/admin/src/icons/Cross/index.js +33 -0
- package/admin/src/icons/Italic/index.js +23 -0
- package/admin/src/icons/Link/index.js +21 -0
- package/admin/src/icons/Media/index.js +14 -0
- package/admin/src/icons/Na/index.js +58 -0
- package/admin/src/icons/Ol/index.js +13 -0
- package/admin/src/icons/Quote/index.js +13 -0
- package/admin/src/icons/Striked/index.js +24 -0
- package/admin/src/icons/Ul/index.js +15 -0
- package/admin/src/icons/Underline/index.js +22 -0
- package/admin/src/index.js +52 -0
- package/admin/src/lifecycles.js +19 -0
- package/admin/src/permissions.js +27 -0
- package/admin/src/pluginId.js +5 -0
- package/admin/src/reducers.js +16 -0
- package/admin/src/selectors.js +6 -0
- package/admin/src/sharedReducers/crudReducer/actions.js +44 -0
- package/admin/src/sharedReducers/crudReducer/constants.js +7 -0
- package/admin/src/sharedReducers/crudReducer/reducer.js +75 -0
- package/admin/src/sharedReducers/crudReducer/selectors.js +5 -0
- package/admin/src/testUtils/data.js +305 -0
- package/admin/src/testUtils/index.js +4 -0
- package/admin/src/translations/ar.json +94 -0
- package/admin/src/translations/cs.json +130 -0
- package/admin/src/translations/de.json +177 -0
- package/admin/src/translations/dk.json +180 -0
- package/admin/src/translations/en.json +177 -0
- package/admin/src/translations/es.json +177 -0
- package/admin/src/translations/fr.json +162 -0
- package/admin/src/translations/id.json +175 -0
- package/admin/src/translations/index.js +53 -0
- package/admin/src/translations/it.json +177 -0
- package/admin/src/translations/ja.json +94 -0
- package/admin/src/translations/ko.json +110 -0
- package/admin/src/translations/ms.json +148 -0
- package/admin/src/translations/nl.json +94 -0
- package/admin/src/translations/pl.json +142 -0
- package/admin/src/translations/pt-BR.json +94 -0
- package/admin/src/translations/pt.json +94 -0
- package/admin/src/translations/ru.json +177 -0
- package/admin/src/translations/sk.json +172 -0
- package/admin/src/translations/th.json +155 -0
- package/admin/src/translations/tr.json +177 -0
- package/admin/src/translations/uk.json +148 -0
- package/admin/src/translations/vi.json +110 -0
- package/admin/src/translations/zh-Hans.json +177 -0
- package/admin/src/translations/zh.json +94 -0
- package/admin/src/utils/ItemTypes.js +7 -0
- package/admin/src/utils/checkIfAttributeIsDisplayable.js +13 -0
- package/admin/src/utils/createDefaultForm.js +50 -0
- package/admin/src/utils/dateFormats.js +18 -0
- package/admin/src/utils/formatFiltersFromQuery.js +55 -0
- package/admin/src/utils/formatFiltersToQuery.js +27 -0
- package/admin/src/utils/formatLayoutToApi.js +44 -0
- package/admin/src/utils/generatePermissionsObject.js +20 -0
- package/admin/src/utils/getComponents.js +50 -0
- package/admin/src/utils/getDisplayedValue.js +61 -0
- package/admin/src/utils/getFieldName.js +6 -0
- package/admin/src/utils/getMaxTempKey.js +12 -0
- package/admin/src/utils/getRequestUrl.js +5 -0
- package/admin/src/utils/getTrad.js +5 -0
- package/admin/src/utils/index.js +17 -0
- package/admin/src/utils/mergeMetasWithSchema.js +20 -0
- package/admin/src/utils/removeKeyInObject.js +45 -0
- package/admin/src/utils/removePasswordFieldsFromData.js +54 -0
- package/config/admin.json +5 -0
- package/config/functions/bootstrap.js +9 -0
- package/config/policies/has-draft-and-publish.js +19 -0
- package/config/policies/hasPermissions.js +34 -0
- package/config/policies/routing.js +27 -0
- package/config/routes.json +275 -0
- package/controllers/collection-types.js +282 -0
- package/controllers/components.js +66 -0
- package/controllers/content-types.js +112 -0
- package/controllers/relations.js +63 -0
- package/controllers/single-types.js +170 -0
- package/controllers/uid.js +41 -0
- package/controllers/validation/index.js +104 -0
- package/controllers/validation/model-configuration.js +114 -0
- package/oas.yml +757 -0
- package/package.json +77 -0
- package/services/components.js +92 -0
- package/services/configuration.js +79 -0
- package/services/content-types.js +73 -0
- package/services/data-mapper.js +98 -0
- package/services/entity-manager.js +140 -0
- package/services/metrics.js +34 -0
- package/services/permission-checker.js +69 -0
- package/services/permission.js +95 -0
- package/services/uid.js +63 -0
- package/services/utils/configuration/attributes.js +175 -0
- package/services/utils/configuration/index.js +43 -0
- package/services/utils/configuration/layouts.js +185 -0
- package/services/utils/configuration/metadatas.js +142 -0
- package/services/utils/configuration/settings.js +52 -0
- package/services/utils/store.js +93 -0
- package/utils/index.js +16 -0
- package/utils/pick-writable-attributes.js +6 -0
- package/utils/wrap-bad-request.js +15 -0
- package/validation/policies/hasPermissions.js +17 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { get, isArray, includes, isEmpty } from 'lodash';
|
|
4
|
+
import { getFileExtension, prefixFileUrlWithBackendUrl } from 'strapi-helper-plugin';
|
|
5
|
+
import DefaultIcon from '../../icons/Na';
|
|
6
|
+
import {
|
|
7
|
+
StyledMediaPreviewList,
|
|
8
|
+
MediaPreviewFile,
|
|
9
|
+
MediaPreviewImage,
|
|
10
|
+
MediaPreviewItem,
|
|
11
|
+
MediaPreviewText,
|
|
12
|
+
} from './StyledMediaPreviewList';
|
|
13
|
+
|
|
14
|
+
const IMAGE_PREVIEW_COUNT = 3;
|
|
15
|
+
|
|
16
|
+
function MediaPreviewList({ hoverable, files }) {
|
|
17
|
+
const renderImage = image => {
|
|
18
|
+
const { name, size, url } = image;
|
|
19
|
+
const thumbnail = get(image, ['formats', 'thumbnail', 'url'], null);
|
|
20
|
+
const fileUrl = thumbnail || url;
|
|
21
|
+
|
|
22
|
+
if (!thumbnail && size > 20000) {
|
|
23
|
+
return renderFile(image);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<MediaPreviewImage className={hoverable ? 'hoverable' : ''}>
|
|
28
|
+
<div>
|
|
29
|
+
<img src={prefixFileUrlWithBackendUrl(fileUrl)} alt={`${name}`} />
|
|
30
|
+
</div>
|
|
31
|
+
<img src={prefixFileUrlWithBackendUrl(fileUrl)} alt={`${name}`} />
|
|
32
|
+
</MediaPreviewImage>
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const renderFile = file => {
|
|
37
|
+
const { ext, name } = file;
|
|
38
|
+
const fileExtension = getFileExtension(ext);
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<MediaPreviewFile className={hoverable ? 'hoverable' : ''}>
|
|
42
|
+
{fileExtension ? (
|
|
43
|
+
<div>
|
|
44
|
+
<span>{fileExtension}</span>
|
|
45
|
+
</div>
|
|
46
|
+
) : (
|
|
47
|
+
<MediaPreviewItem>
|
|
48
|
+
<DefaultIcon />
|
|
49
|
+
</MediaPreviewItem>
|
|
50
|
+
)}
|
|
51
|
+
|
|
52
|
+
<span>{name}</span>
|
|
53
|
+
</MediaPreviewFile>
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const renderItem = file => {
|
|
58
|
+
const { mime } = file;
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<React.Fragment key={JSON.stringify(file)}>
|
|
62
|
+
{includes(mime, 'image') ? renderImage(file) : renderFile(file)}
|
|
63
|
+
</React.Fragment>
|
|
64
|
+
);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const renderText = count => {
|
|
68
|
+
return (
|
|
69
|
+
<MediaPreviewText>
|
|
70
|
+
<div>
|
|
71
|
+
<span>+{count}</span>
|
|
72
|
+
</div>
|
|
73
|
+
</MediaPreviewText>
|
|
74
|
+
);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const renderMultipleItems = files => {
|
|
78
|
+
return files.map((file, index) => {
|
|
79
|
+
return (
|
|
80
|
+
<React.Fragment key={JSON.stringify(file)}>
|
|
81
|
+
{index === IMAGE_PREVIEW_COUNT && files.length > IMAGE_PREVIEW_COUNT + 1
|
|
82
|
+
? renderText(files.length - IMAGE_PREVIEW_COUNT)
|
|
83
|
+
: renderItem(file)}
|
|
84
|
+
</React.Fragment>
|
|
85
|
+
);
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
return !!files && !isEmpty(files) ? (
|
|
90
|
+
<StyledMediaPreviewList>
|
|
91
|
+
{!isArray(files) ? renderItem(files) : renderMultipleItems(files)}
|
|
92
|
+
</StyledMediaPreviewList>
|
|
93
|
+
) : (
|
|
94
|
+
<MediaPreviewItem>
|
|
95
|
+
<DefaultIcon />
|
|
96
|
+
</MediaPreviewItem>
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
MediaPreviewList.defaultProps = {
|
|
101
|
+
hoverable: true,
|
|
102
|
+
files: null,
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
MediaPreviewList.propTypes = {
|
|
106
|
+
hoverable: PropTypes.bool,
|
|
107
|
+
files: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export default MediaPreviewList;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* eslint-disable react/no-array-index-key */
|
|
2
|
+
/* eslint-disable import/no-cycle */
|
|
3
|
+
|
|
4
|
+
import React, { useMemo } from 'react';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
6
|
+
import { useContentTypeLayout } from '../../hooks';
|
|
7
|
+
import NonRepeatableWrapper from '../NonRepeatableWrapper';
|
|
8
|
+
import Inputs from '../Inputs';
|
|
9
|
+
import FieldComponent from '../FieldComponent';
|
|
10
|
+
|
|
11
|
+
const NonRepeatableComponent = ({ componentUid, isFromDynamicZone, name }) => {
|
|
12
|
+
const { getComponentLayout } = useContentTypeLayout();
|
|
13
|
+
const componentLayoutData = useMemo(() => getComponentLayout(componentUid), [
|
|
14
|
+
componentUid,
|
|
15
|
+
getComponentLayout,
|
|
16
|
+
]);
|
|
17
|
+
const fields = componentLayoutData.layouts.edit;
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<NonRepeatableWrapper isFromDynamicZone={isFromDynamicZone}>
|
|
21
|
+
{fields.map((fieldRow, key) => {
|
|
22
|
+
return (
|
|
23
|
+
<div className="row" key={key}>
|
|
24
|
+
{fieldRow.map(({ name: fieldName, size, metadatas, fieldSchema, queryInfos }) => {
|
|
25
|
+
const isComponent = fieldSchema.type === 'component';
|
|
26
|
+
const keys = `${name}.${fieldName}`;
|
|
27
|
+
|
|
28
|
+
if (isComponent) {
|
|
29
|
+
const compoUid = fieldSchema.component;
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<FieldComponent
|
|
33
|
+
key={fieldName}
|
|
34
|
+
componentUid={compoUid}
|
|
35
|
+
isRepeatable={fieldSchema.repeatable}
|
|
36
|
+
label={metadatas.label}
|
|
37
|
+
max={fieldSchema.max}
|
|
38
|
+
min={fieldSchema.min}
|
|
39
|
+
name={keys}
|
|
40
|
+
/>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div key={fieldName} className={`col-${size}`}>
|
|
46
|
+
<Inputs
|
|
47
|
+
keys={keys}
|
|
48
|
+
fieldSchema={fieldSchema}
|
|
49
|
+
metadatas={metadatas}
|
|
50
|
+
componentUid={componentUid}
|
|
51
|
+
queryInfos={queryInfos}
|
|
52
|
+
/>
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
})}
|
|
56
|
+
</div>
|
|
57
|
+
);
|
|
58
|
+
})}
|
|
59
|
+
</NonRepeatableWrapper>
|
|
60
|
+
);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
NonRepeatableComponent.defaultProps = {
|
|
64
|
+
isFromDynamicZone: false,
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
NonRepeatableComponent.propTypes = {
|
|
68
|
+
componentUid: PropTypes.string.isRequired,
|
|
69
|
+
isFromDynamicZone: PropTypes.bool,
|
|
70
|
+
name: PropTypes.string.isRequired,
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export default NonRepeatableComponent;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
|
|
3
|
+
const hoverStyle = `
|
|
4
|
+
border: 1px solid #aed4fb;
|
|
5
|
+
background-color: #e6f0fb;
|
|
6
|
+
> button {
|
|
7
|
+
:before,
|
|
8
|
+
:after {
|
|
9
|
+
background-color: #007eff;
|
|
10
|
+
}
|
|
11
|
+
background-color: #aed4fb;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
> p {
|
|
15
|
+
color: #007eff;
|
|
16
|
+
}
|
|
17
|
+
`;
|
|
18
|
+
|
|
19
|
+
/* eslint-disable indent */
|
|
20
|
+
const NonRepeatableWrapper = styled.div`
|
|
21
|
+
margin: 0 !important;
|
|
22
|
+
padding: 0 20px !important;
|
|
23
|
+
|
|
24
|
+
${({ isEmpty, isFromDynamicZone, isReadOnly }) => {
|
|
25
|
+
if (isEmpty) {
|
|
26
|
+
return `
|
|
27
|
+
position: relative;
|
|
28
|
+
height: 108px;
|
|
29
|
+
margin-bottom: 25px !important;
|
|
30
|
+
background-color: #fafafb;
|
|
31
|
+
text-align: center;
|
|
32
|
+
cursor: ${isReadOnly ? 'not-allowed' : 'pointer'};
|
|
33
|
+
border-radius: 2px;
|
|
34
|
+
|
|
35
|
+
> button {
|
|
36
|
+
position: absolute;
|
|
37
|
+
top: 30px;
|
|
38
|
+
left: calc(50% - 18px);
|
|
39
|
+
height: 36px;
|
|
40
|
+
width: 36px;
|
|
41
|
+
line-height: 38px;
|
|
42
|
+
border-radius: 50%;
|
|
43
|
+
background-color: #f3f4f4;
|
|
44
|
+
cursor: ${isReadOnly ? 'not-allowed !important' : 'pointer'};
|
|
45
|
+
}
|
|
46
|
+
border: 1px solid transparent;
|
|
47
|
+
|
|
48
|
+
&:hover {
|
|
49
|
+
${isReadOnly ? '' : hoverStyle};
|
|
50
|
+
}
|
|
51
|
+
`;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (isFromDynamicZone) {
|
|
55
|
+
return `
|
|
56
|
+
background-color: #fff;
|
|
57
|
+
padding: 0 10px !important;
|
|
58
|
+
`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return `
|
|
62
|
+
padding-top: 25px !important;
|
|
63
|
+
background-color: #f7f8f8;
|
|
64
|
+
margin-bottom: 18px !important;
|
|
65
|
+
`;
|
|
66
|
+
}}
|
|
67
|
+
`;
|
|
68
|
+
|
|
69
|
+
NonRepeatableWrapper.defaultProps = {
|
|
70
|
+
isReadOnly: false,
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export default NonRepeatableWrapper;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
|
|
3
|
+
const beforeStyle = `
|
|
4
|
+
content: ' ';
|
|
5
|
+
position: absolute;
|
|
6
|
+
display: block;
|
|
7
|
+
width: 14px;
|
|
8
|
+
height: 2px;
|
|
9
|
+
left: 11px;
|
|
10
|
+
top: 17px;
|
|
11
|
+
bottom: 10px;
|
|
12
|
+
z-index: 9;
|
|
13
|
+
`;
|
|
14
|
+
|
|
15
|
+
const afterStyle = `
|
|
16
|
+
content: ' ';
|
|
17
|
+
position: absolute;
|
|
18
|
+
display: block;
|
|
19
|
+
height: 14px;
|
|
20
|
+
width: 2px;
|
|
21
|
+
left: 17px;
|
|
22
|
+
top: 11px;
|
|
23
|
+
right: 10px;
|
|
24
|
+
z-index: 9;
|
|
25
|
+
`;
|
|
26
|
+
|
|
27
|
+
const Button = styled.button`
|
|
28
|
+
position: relative;
|
|
29
|
+
height: 36px;
|
|
30
|
+
width: 36px;
|
|
31
|
+
background-color: #f3f4f4;
|
|
32
|
+
border-radius: 50%;
|
|
33
|
+
text-align: center;
|
|
34
|
+
|
|
35
|
+
:focus {
|
|
36
|
+
outline: 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
:before {
|
|
40
|
+
${beforeStyle}
|
|
41
|
+
}
|
|
42
|
+
:after {
|
|
43
|
+
${afterStyle}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
:before,
|
|
47
|
+
:after {
|
|
48
|
+
background-color: #b4b6ba;
|
|
49
|
+
}
|
|
50
|
+
`;
|
|
51
|
+
|
|
52
|
+
export default Button;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import {
|
|
4
|
+
HeaderModal,
|
|
5
|
+
HeaderModalTitle,
|
|
6
|
+
Modal,
|
|
7
|
+
ModalBody,
|
|
8
|
+
ModalFooter,
|
|
9
|
+
ModalForm,
|
|
10
|
+
} from 'strapi-helper-plugin';
|
|
11
|
+
import { FormattedMessage } from 'react-intl';
|
|
12
|
+
import { upperFirst } from 'lodash';
|
|
13
|
+
import { AttributeIcon, Button } from '@buffetjs/core';
|
|
14
|
+
|
|
15
|
+
const PopupForm = ({
|
|
16
|
+
headerId,
|
|
17
|
+
isOpen,
|
|
18
|
+
onClosed,
|
|
19
|
+
onSubmit,
|
|
20
|
+
onToggle,
|
|
21
|
+
renderForm,
|
|
22
|
+
subHeaderContent,
|
|
23
|
+
type,
|
|
24
|
+
}) => {
|
|
25
|
+
const getAttrType = () => {
|
|
26
|
+
if (type === 'timestamp') {
|
|
27
|
+
return 'date';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (['decimal', 'float', 'integer', 'biginter'].includes(type)) {
|
|
31
|
+
return 'number';
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return type;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<Modal isOpen={isOpen} onClosed={onClosed} onToggle={onToggle}>
|
|
39
|
+
<HeaderModal>
|
|
40
|
+
<section>
|
|
41
|
+
<HeaderModalTitle style={{ textTransform: 'none' }}>
|
|
42
|
+
<AttributeIcon type={getAttrType()} style={{ margin: 'auto 20px auto 0' }} />
|
|
43
|
+
<FormattedMessage id={headerId} />
|
|
44
|
+
</HeaderModalTitle>
|
|
45
|
+
</section>
|
|
46
|
+
<section>
|
|
47
|
+
<HeaderModalTitle>
|
|
48
|
+
<span>{upperFirst(subHeaderContent)}</span>
|
|
49
|
+
<hr />
|
|
50
|
+
</HeaderModalTitle>
|
|
51
|
+
</section>
|
|
52
|
+
</HeaderModal>
|
|
53
|
+
<form onSubmit={onSubmit}>
|
|
54
|
+
<ModalForm>
|
|
55
|
+
<ModalBody>{renderForm()}</ModalBody>
|
|
56
|
+
</ModalForm>
|
|
57
|
+
<ModalFooter>
|
|
58
|
+
<section>
|
|
59
|
+
<Button onClick={onToggle} color="cancel">
|
|
60
|
+
<FormattedMessage id="app.components.Button.cancel" />
|
|
61
|
+
</Button>
|
|
62
|
+
<Button type="submit" color="success">
|
|
63
|
+
<FormattedMessage id="form.button.done" />
|
|
64
|
+
</Button>
|
|
65
|
+
</section>
|
|
66
|
+
</ModalFooter>
|
|
67
|
+
</form>
|
|
68
|
+
</Modal>
|
|
69
|
+
);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
PopupForm.defaultProps = {
|
|
73
|
+
isOpen: false,
|
|
74
|
+
onClosed: () => {},
|
|
75
|
+
onSubmit: () => {},
|
|
76
|
+
onToggle: () => {},
|
|
77
|
+
renderForm: () => {},
|
|
78
|
+
subHeaderContent: '',
|
|
79
|
+
type: '',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
PopupForm.propTypes = {
|
|
83
|
+
headerId: PropTypes.string.isRequired,
|
|
84
|
+
isOpen: PropTypes.bool,
|
|
85
|
+
onClosed: PropTypes.func,
|
|
86
|
+
onSubmit: PropTypes.func,
|
|
87
|
+
onToggle: PropTypes.func,
|
|
88
|
+
renderForm: PropTypes.func,
|
|
89
|
+
subHeaderContent: PropTypes.string,
|
|
90
|
+
type: PropTypes.string,
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export default PopupForm;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
|
|
3
|
+
/* eslint-disable indent */
|
|
4
|
+
const Wrapper = styled.div`
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
justify-content: space-around;
|
|
8
|
+
height: 30px;
|
|
9
|
+
width: 100%;
|
|
10
|
+
padding: 0 5px;
|
|
11
|
+
|
|
12
|
+
${({ isComponent }) =>
|
|
13
|
+
isComponent &&
|
|
14
|
+
`
|
|
15
|
+
height: 34px;
|
|
16
|
+
padding: 0;
|
|
17
|
+
`}
|
|
18
|
+
|
|
19
|
+
border-radius: 2px;
|
|
20
|
+
> div {
|
|
21
|
+
width: 100%;
|
|
22
|
+
height: 2px;
|
|
23
|
+
background: #007eff;
|
|
24
|
+
}
|
|
25
|
+
`;
|
|
26
|
+
|
|
27
|
+
export default Wrapper;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React, { memo } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
|
|
4
|
+
import Wrapper from './components';
|
|
5
|
+
|
|
6
|
+
const PreviewCarret = ({ isComponent, style }) => (
|
|
7
|
+
<Wrapper isComponent={isComponent} style={style}>
|
|
8
|
+
<div />
|
|
9
|
+
</Wrapper>
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
PreviewCarret.defaultProps = {
|
|
13
|
+
isComponent: false,
|
|
14
|
+
style: {},
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
PreviewCarret.propTypes = {
|
|
18
|
+
isComponent: PropTypes.bool,
|
|
19
|
+
style: PropTypes.object,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default memo(PreviewCarret);
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
|
|
3
|
+
/* eslint-disable */
|
|
4
|
+
|
|
5
|
+
const Wrapper = styled.div`
|
|
6
|
+
max-height: 555px;
|
|
7
|
+
min-height: 294px;
|
|
8
|
+
overflow: auto;
|
|
9
|
+
padding: 20px 20px 0 20px;
|
|
10
|
+
font-size: 16px;
|
|
11
|
+
background-color: #fff;
|
|
12
|
+
line-height: 24px !important;
|
|
13
|
+
font-family: 'Lato';
|
|
14
|
+
cursor: text;
|
|
15
|
+
|
|
16
|
+
h1,
|
|
17
|
+
h2,
|
|
18
|
+
h3,
|
|
19
|
+
h4,
|
|
20
|
+
h5,
|
|
21
|
+
h6 {
|
|
22
|
+
margin-block-start: 10px;
|
|
23
|
+
margin-block-end: 10px;
|
|
24
|
+
font-family: 'Lato';
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
h1 {
|
|
28
|
+
font-size: 36px;
|
|
29
|
+
font-weight: 600;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
h2 {
|
|
33
|
+
font-size: 30px;
|
|
34
|
+
font-weight: 500;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
h3 {
|
|
38
|
+
font-size: 24px;
|
|
39
|
+
font-weight: 500;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
h4 {
|
|
43
|
+
font-size: 20px;
|
|
44
|
+
font-weight: 500;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
blockquote {
|
|
48
|
+
margin-top: 41px;
|
|
49
|
+
margin-bottom: 34px;
|
|
50
|
+
font-size: 16px;
|
|
51
|
+
font-weight: 400;
|
|
52
|
+
border-left: 5px solid #eee;
|
|
53
|
+
font-style: italic;
|
|
54
|
+
padding: 10px 20px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
img {
|
|
58
|
+
max-width: 100%;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
table {
|
|
62
|
+
font-size: 13px;
|
|
63
|
+
thead {
|
|
64
|
+
background: rgb(243, 243, 243);
|
|
65
|
+
tr {
|
|
66
|
+
height: 43px;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
tr {
|
|
70
|
+
border: 1px solid #c6cbd1;
|
|
71
|
+
}
|
|
72
|
+
th,
|
|
73
|
+
td {
|
|
74
|
+
padding: 0 25px;
|
|
75
|
+
border: 1px solid #c6cbd1;
|
|
76
|
+
border-bottom: 0;
|
|
77
|
+
border-top: 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
tbody {
|
|
81
|
+
tr {
|
|
82
|
+
height: 54px;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
pre,
|
|
88
|
+
code {
|
|
89
|
+
font-size: 13px;
|
|
90
|
+
font-family: 'Lato';
|
|
91
|
+
border-radius: 3px;
|
|
92
|
+
background-color: #002b36;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Inline code */
|
|
96
|
+
p,
|
|
97
|
+
pre,
|
|
98
|
+
td {
|
|
99
|
+
> code {
|
|
100
|
+
color: #839496;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.warning {
|
|
105
|
+
background-color: #faa684;
|
|
106
|
+
padding: 30px;
|
|
107
|
+
border-radius: 3px;
|
|
108
|
+
}
|
|
109
|
+
.tip {
|
|
110
|
+
background-color: ${props => props.theme.main.colors.darkBlue};
|
|
111
|
+
padding: 30px;
|
|
112
|
+
border-radius: 3px;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.footnote-ref,
|
|
116
|
+
.footnote-backref {
|
|
117
|
+
color: #007bff;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
${({ isFullscreen }) => {
|
|
121
|
+
if (isFullscreen) {
|
|
122
|
+
return `
|
|
123
|
+
max-height: calc(100% - 70px) !important;
|
|
124
|
+
margin-bottom: 0;
|
|
125
|
+
margin-top: 9px;
|
|
126
|
+
padding: 10px 20px;
|
|
127
|
+
overflow: auto;
|
|
128
|
+
`;
|
|
129
|
+
}
|
|
130
|
+
}}
|
|
131
|
+
`;
|
|
132
|
+
|
|
133
|
+
export default Wrapper;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/* eslint-disable react/no-danger */
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* PreviewWysiwyg
|
|
5
|
+
*
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React, { memo, useMemo } from 'react';
|
|
9
|
+
import PropTypes from 'prop-types';
|
|
10
|
+
import useWysiwyg from '../../hooks/useWysiwyg';
|
|
11
|
+
import md from './utils/mdRenderer';
|
|
12
|
+
import sanitizeHtml from './utils/satinizeHtml';
|
|
13
|
+
import Wrapper from './Wrapper';
|
|
14
|
+
|
|
15
|
+
const PreviewWysiwyg = ({ data }) => {
|
|
16
|
+
const { isFullscreen } = useWysiwyg();
|
|
17
|
+
const html = useMemo(() => sanitizeHtml(md.render(data || '')), [data]);
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<Wrapper isFullscreen={isFullscreen}>
|
|
21
|
+
<div dangerouslySetInnerHTML={{ __html: html }} />
|
|
22
|
+
</Wrapper>
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
PreviewWysiwyg.defaultProps = {
|
|
27
|
+
data: '',
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
PreviewWysiwyg.propTypes = {
|
|
31
|
+
data: PropTypes.string,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export default memo(PreviewWysiwyg);
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/* eslint-disable prefer-template */
|
|
2
|
+
import Markdown from 'markdown-it';
|
|
3
|
+
import 'highlight.js/styles/solarized-dark.css';
|
|
4
|
+
import hljs from 'highlight.js';
|
|
5
|
+
import abbr from 'markdown-it-abbr';
|
|
6
|
+
import container from 'markdown-it-container';
|
|
7
|
+
import deflist from 'markdown-it-deflist';
|
|
8
|
+
import emoji from 'markdown-it-emoji';
|
|
9
|
+
import footnote from 'markdown-it-footnote';
|
|
10
|
+
import ins from 'markdown-it-ins';
|
|
11
|
+
import mark from 'markdown-it-mark';
|
|
12
|
+
import sub from 'markdown-it-sub';
|
|
13
|
+
import sup from 'markdown-it-sup';
|
|
14
|
+
|
|
15
|
+
const md = new Markdown({
|
|
16
|
+
html: true, // Enable HTML tags in source
|
|
17
|
+
xhtmlOut: false,
|
|
18
|
+
breaks: false,
|
|
19
|
+
langPrefix: 'language-',
|
|
20
|
+
linkify: true,
|
|
21
|
+
typographer: true,
|
|
22
|
+
// Code from: https://github.com/markdown-it/markdown-it/blob/master/support/demo_template/index.js#L83
|
|
23
|
+
highlight: (str, lang) => {
|
|
24
|
+
if (lang && lang !== 'auto' && hljs.getLanguage(lang)) {
|
|
25
|
+
return (
|
|
26
|
+
'<pre class="hljs language-' +
|
|
27
|
+
md.utils.escapeHtml(lang.toLowerCase()) +
|
|
28
|
+
'"><code>' +
|
|
29
|
+
hljs.highlight(lang, str, true).value +
|
|
30
|
+
'</code></pre>'
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (lang === 'auto') {
|
|
35
|
+
const result = hljs.highlightAuto(str);
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
'<pre class="hljs language-' +
|
|
39
|
+
md.utils.escapeHtml(result.language) +
|
|
40
|
+
'"><code>' +
|
|
41
|
+
result.value +
|
|
42
|
+
'</code></pre>'
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return '<pre class="hljs"><code>' + md.utils.escapeHtml(str) + '</code></pre>';
|
|
47
|
+
},
|
|
48
|
+
})
|
|
49
|
+
.use(abbr)
|
|
50
|
+
.use(container, 'warning')
|
|
51
|
+
.use(container, 'tip')
|
|
52
|
+
.use(deflist)
|
|
53
|
+
.use(emoji)
|
|
54
|
+
.use(footnote)
|
|
55
|
+
.use(ins)
|
|
56
|
+
.use(mark)
|
|
57
|
+
.use(sub)
|
|
58
|
+
.use(sup);
|
|
59
|
+
|
|
60
|
+
// Code from: https://github.com/markdown-it/markdown-it-footnote/blob/master/index.js#L29
|
|
61
|
+
md.renderer.rules.footnote_ref = (tokens, idx, options, env, slf) => {
|
|
62
|
+
const caption = slf.rules.footnote_caption(tokens, idx, options, env, slf);
|
|
63
|
+
|
|
64
|
+
return '<sup class="footnote-ref"><span>' + caption + '</span></sup>';
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
md.renderer.rules.footnote_anchor = () => {
|
|
68
|
+
/* ↩ with escape code to prevent display as Apple Emoji on iOS */
|
|
69
|
+
return ' <span class="footnote-backref">\u21a9\uFE0E</span>';
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export default md;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import sanitizeHtml from 'sanitize-html';
|
|
2
|
+
|
|
3
|
+
// Options for the lib can be found here https://www.npmjs.com/package/sanitize-html
|
|
4
|
+
const options = {
|
|
5
|
+
...sanitizeHtml.defaults,
|
|
6
|
+
allowedTags: false,
|
|
7
|
+
allowedAttributes: {
|
|
8
|
+
'*': ['href', 'align', 'alt', 'center', 'width', 'height', 'type', 'controls', 'target'],
|
|
9
|
+
img: ['src', 'alt'],
|
|
10
|
+
source: ['src', 'type'],
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const clean = dirty => sanitizeHtml(dirty, options);
|
|
15
|
+
|
|
16
|
+
export default clean;
|