Permet de charger en local 1 ou plusieurs pages #4

Merged
Shikiryu merged 1 commits from ui/1 into main 2022-03-18 09:45:43 +01:00
10 changed files with 414 additions and 550 deletions

108
public/css/app.css vendored
View File

@ -11878,39 +11878,6 @@ select {
--tw-backdrop-saturate: ; --tw-backdrop-saturate: ;
--tw-backdrop-sepia: ; --tw-backdrop-sepia: ;
} }
.container {
width: 100%;
}
@media (min-width: 640px) {
.container {
max-width: 640px;
}
}
@media (min-width: 768px) {
.container {
max-width: 768px;
}
}
@media (min-width: 1024px) {
.container {
max-width: 1024px;
}
}
@media (min-width: 1280px) {
.container {
max-width: 1280px;
}
}
@media (min-width: 1536px) {
.container {
max-width: 1536px;
}
}
.fixed { .fixed {
position: fixed; position: fixed;
} }
@ -11935,9 +11902,6 @@ select {
.z-50 { .z-50 {
z-index: 50; z-index: 50;
} }
.m-0 {
margin: 0px;
}
.mx-auto { .mx-auto {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
@ -11990,12 +11954,6 @@ select {
.mt-3 { .mt-3 {
margin-top: 0.75rem; margin-top: 0.75rem;
} }
.mb-3 {
margin-bottom: 0.75rem;
}
.mb-0 {
margin-bottom: 0px;
}
.block { .block {
display: block; display: block;
} }
@ -12026,12 +11984,6 @@ select {
.h-10 { .h-10 {
height: 2.5rem; height: 2.5rem;
} }
.h-4 {
height: 1rem;
}
.h-6 {
height: 1.5rem;
}
.min-h-screen { .min-h-screen {
min-height: 100vh; min-height: 100vh;
} }
@ -12053,12 +12005,6 @@ select {
.w-20 { .w-20 {
width: 5rem; width: 5rem;
} }
.w-4 {
width: 1rem;
}
.w-6 {
width: 1.5rem;
}
.max-w-7xl { .max-w-7xl {
max-width: 80rem; max-width: 80rem;
} }
@ -12131,11 +12077,6 @@ select {
margin-right: calc(2rem * var(--tw-space-x-reverse)); margin-right: calc(2rem * var(--tw-space-x-reverse));
margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse))); margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));
} }
.space-y-1 > :not([hidden]) ~ :not([hidden]) {
--tw-space-y-reverse: 0;
margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));
}
.overflow-hidden { .overflow-hidden {
overflow: hidden; overflow: hidden;
} }
@ -12216,12 +12157,6 @@ select {
.p-6 { .p-6 {
padding: 1.5rem; padding: 1.5rem;
} }
.p-2 {
padding: 0.5rem;
}
.p-0 {
padding: 0px;
}
.px-4 { .px-4 {
padding-left: 1rem; padding-left: 1rem;
padding-right: 1rem; padding-right: 1rem;
@ -12264,18 +12199,6 @@ select {
.pt-6 { .pt-6 {
padding-top: 1.5rem; padding-top: 1.5rem;
} }
.pt-2 {
padding-top: 0.5rem;
}
.pb-3 {
padding-bottom: 0.75rem;
}
.pt-4 {
padding-top: 1rem;
}
.pb-1 {
padding-bottom: 0.25rem;
}
.pl-3 { .pl-3 {
padding-left: 0.75rem; padding-left: 0.75rem;
} }
@ -12288,9 +12211,6 @@ select {
.text-center { .text-center {
text-align: center; text-align: center;
} }
.align-baseline {
vertical-align: baseline;
}
.font-sans { .font-sans {
font-family: Nunito, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-family: Nunito, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
} }
@ -12493,14 +12413,14 @@ select {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(17 24 39 / var(--tw-text-opacity)); color: rgb(17 24 39 / var(--tw-text-opacity));
} }
.hover\:text-gray-700:hover {
--tw-text-opacity: 1;
color: rgb(55 65 81 / var(--tw-text-opacity));
}
.hover\:text-gray-800:hover { .hover\:text-gray-800:hover {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(31 41 55 / var(--tw-text-opacity)); color: rgb(31 41 55 / var(--tw-text-opacity));
} }
.hover\:text-gray-700:hover {
--tw-text-opacity: 1;
color: rgb(55 65 81 / var(--tw-text-opacity));
}
.focus\:z-10:focus { .focus\:z-10:focus {
z-index: 10; z-index: 10;
} }
@ -12516,14 +12436,14 @@ select {
--tw-border-opacity: 1; --tw-border-opacity: 1;
border-color: rgb(165 180 252 / var(--tw-border-opacity)); border-color: rgb(165 180 252 / var(--tw-border-opacity));
} }
.focus\:border-gray-300:focus {
--tw-border-opacity: 1;
border-color: rgb(209 213 219 / var(--tw-border-opacity));
}
.focus\:border-indigo-700:focus { .focus\:border-indigo-700:focus {
--tw-border-opacity: 1; --tw-border-opacity: 1;
border-color: rgb(67 56 202 / var(--tw-border-opacity)); border-color: rgb(67 56 202 / var(--tw-border-opacity));
} }
.focus\:border-gray-300:focus {
--tw-border-opacity: 1;
border-color: rgb(209 213 219 / var(--tw-border-opacity));
}
.focus\:bg-gray-100:focus { .focus\:bg-gray-100:focus {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(243 244 246 / var(--tw-bg-opacity)); background-color: rgb(243 244 246 / var(--tw-bg-opacity));
@ -12536,14 +12456,6 @@ select {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(249 250 251 / var(--tw-bg-opacity)); background-color: rgb(249 250 251 / var(--tw-bg-opacity));
} }
.focus\:text-gray-700:focus {
--tw-text-opacity: 1;
color: rgb(55 65 81 / var(--tw-text-opacity));
}
.focus\:text-gray-500:focus {
--tw-text-opacity: 1;
color: rgb(107 114 128 / var(--tw-text-opacity));
}
.focus\:text-indigo-800:focus { .focus\:text-indigo-800:focus {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(55 48 163 / var(--tw-text-opacity)); color: rgb(55 48 163 / var(--tw-text-opacity));
@ -12552,6 +12464,10 @@ select {
--tw-text-opacity: 1; --tw-text-opacity: 1;
color: rgb(31 41 55 / var(--tw-text-opacity)); color: rgb(31 41 55 / var(--tw-text-opacity));
} }
.focus\:text-gray-700:focus {
--tw-text-opacity: 1;
color: rgb(55 65 81 / var(--tw-text-opacity));
}
.focus\:outline-none:focus { .focus\:outline-none:focus {
outline: 2px solid transparent; outline: 2px solid transparent;
outline-offset: 2px; outline-offset: 2px;

607
public/js/app.js vendored
View File

@ -3985,34 +3985,6 @@ function isHostComponent(element) {
/***/ }), /***/ }),
/***/ "./node_modules/@mui/icons-material/ExpandMore.js":
/*!********************************************************!*\
!*** ./node_modules/@mui/icons-material/ExpandMore.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports["default"] = void 0;
var _createSvgIcon = _interopRequireDefault(__webpack_require__(/*! ./utils/createSvgIcon */ "./node_modules/@mui/icons-material/utils/createSvgIcon.js"));
var _jsxRuntime = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");
var _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
d: "M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z"
}), 'ExpandMore');
exports["default"] = _default;
/***/ }),
/***/ "./node_modules/@mui/icons-material/Mail.js": /***/ "./node_modules/@mui/icons-material/Mail.js":
/*!**************************************************!*\ /*!**************************************************!*\
!*** ./node_modules/@mui/icons-material/Mail.js ***! !*** ./node_modules/@mui/icons-material/Mail.js ***!
@ -4118,6 +4090,27 @@ __webpack_require__.r(__webpack_exports__);
/***/ }), /***/ }),
/***/ "./node_modules/@mui/icons-material/esm/Download.js":
/*!**********************************************************!*\
!*** ./node_modules/@mui/icons-material/esm/Download.js ***!
\**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/createSvgIcon */ "./node_modules/@mui/material/utils/createSvgIcon.js");
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_createSvgIcon__WEBPACK_IMPORTED_MODULE_1__["default"])( /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("path", {
d: "M5 20h14v-2H5v2zM19 9h-4V3H9v6H5l7 7 7-7z"
}), 'Download'));
/***/ }),
/***/ "./node_modules/@mui/icons-material/utils/createSvgIcon.js": /***/ "./node_modules/@mui/icons-material/utils/createSvgIcon.js":
/*!*****************************************************************!*\ /*!*****************************************************************!*\
!*** ./node_modules/@mui/icons-material/utils/createSvgIcon.js ***! !*** ./node_modules/@mui/icons-material/utils/createSvgIcon.js ***!
@ -6565,155 +6558,6 @@ const cardClasses = (0,_mui_base__WEBPACK_IMPORTED_MODULE_1__["default"])('MuiCa
/***/ }), /***/ }),
/***/ "./node_modules/@mui/material/CardActions/CardActions.js":
/*!***************************************************************!*\
!*** ./node_modules/@mui/material/CardActions/CardActions.js ***!
\***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ "./node_modules/clsx/dist/clsx.m.js");
/* harmony import */ var _mui_base__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/base */ "./node_modules/@mui/base/composeClasses/composeClasses.js");
/* harmony import */ var _styles_styled__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles/styled */ "./node_modules/@mui/material/styles/styled.js");
/* harmony import */ var _styles_useThemeProps__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/useThemeProps */ "./node_modules/@mui/material/styles/useThemeProps.js");
/* harmony import */ var _cardActionsClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./cardActionsClasses */ "./node_modules/@mui/material/CardActions/cardActionsClasses.js");
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js");
const _excluded = ["disableSpacing", "className"];
const useUtilityClasses = ownerState => {
const {
classes,
disableSpacing
} = ownerState;
const slots = {
root: ['root', !disableSpacing && 'spacing']
};
return (0,_mui_base__WEBPACK_IMPORTED_MODULE_5__["default"])(slots, _cardActionsClasses__WEBPACK_IMPORTED_MODULE_6__.getCardActionsUtilityClass, classes);
};
const CardActionsRoot = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_7__["default"])('div', {
name: 'MuiCardActions',
slot: 'Root',
overridesResolver: (props, styles) => {
const {
ownerState
} = props;
return [styles.root, !ownerState.disableSpacing && styles.spacing];
}
})(({
ownerState
}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
display: 'flex',
alignItems: 'center',
padding: 8
}, !ownerState.disableSpacing && {
'& > :not(:first-of-type)': {
marginLeft: 8
}
}));
const CardActions = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function CardActions(inProps, ref) {
const props = (0,_styles_useThemeProps__WEBPACK_IMPORTED_MODULE_8__["default"])({
props: inProps,
name: 'MuiCardActions'
});
const {
disableSpacing = false,
className
} = props,
other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(props, _excluded);
const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, props, {
disableSpacing
});
const classes = useUtilityClasses(ownerState);
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(CardActionsRoot, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({
className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.root, className),
ownerState: ownerState,
ref: ref
}, other));
});
true ? CardActions.propTypes
/* remove-proptypes */
= {
// ----------------------------- Warning --------------------------------
// | These PropTypes are generated from the TypeScript type definitions |
// | To update them edit the d.ts file and run "yarn proptypes" |
// ----------------------------------------------------------------------
/**
* The content of the component.
*/
children: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().node),
/**
* Override or extend the styles applied to the component.
*/
classes: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().object),
/**
* @ignore
*/
className: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string),
/**
* If `true`, the actions do not have additional margin.
* @default false
*/
disableSpacing: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().bool),
/**
* The system prop that allows defining system overrides as well as additional CSS styles.
*/
sx: prop_types__WEBPACK_IMPORTED_MODULE_9___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_9___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_9___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_9___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_9___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_9___default().bool)])), (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_9___default().object)])
} : 0;
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CardActions);
/***/ }),
/***/ "./node_modules/@mui/material/CardActions/cardActionsClasses.js":
/*!**********************************************************************!*\
!*** ./node_modules/@mui/material/CardActions/cardActionsClasses.js ***!
\**********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "getCardActionsUtilityClass": () => (/* binding */ getCardActionsUtilityClass),
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _mui_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/base */ "./node_modules/@mui/base/generateUtilityClass/generateUtilityClass.js");
/* harmony import */ var _mui_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/base */ "./node_modules/@mui/base/generateUtilityClasses/generateUtilityClasses.js");
function getCardActionsUtilityClass(slot) {
return (0,_mui_base__WEBPACK_IMPORTED_MODULE_0__["default"])('MuiCardActions', slot);
}
const cardActionsClasses = (0,_mui_base__WEBPACK_IMPORTED_MODULE_1__["default"])('MuiCardActions', ['root', 'spacing']);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cardActionsClasses);
/***/ }),
/***/ "./node_modules/@mui/material/CardContent/CardContent.js": /***/ "./node_modules/@mui/material/CardContent/CardContent.js":
/*!***************************************************************!*\ /*!***************************************************************!*\
!*** ./node_modules/@mui/material/CardContent/CardContent.js ***! !*** ./node_modules/@mui/material/CardContent/CardContent.js ***!
@ -36215,14 +36059,15 @@ __webpack_require__.r(__webpack_exports__);
/* harmony import */ var _List__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./List */ "./resources/js/components/pages/List.tsx"); /* harmony import */ var _List__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./List */ "./resources/js/components/pages/List.tsx");
/* harmony import */ var _Prompt__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Prompt */ "./resources/js/components/pages/Prompt.tsx"); /* harmony import */ var _Prompt__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Prompt */ "./resources/js/components/pages/Prompt.tsx");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Alert/Alert.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Alert/Alert.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/AlertTitle/AlertTitle.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/AlertTitle/AlertTitle.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Button/Button.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Button/Button.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Divider/Divider.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Divider/Divider.js");
/* harmony import */ var storage_encryption__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! storage-encryption */ "./node_modules/storage-encryption/build/index.js"); /* harmony import */ var storage_encryption__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! storage-encryption */ "./node_modules/storage-encryption/build/index.js");
/* harmony import */ var storage_encryption__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(storage_encryption__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var storage_encryption__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(storage_encryption__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router/esm/react-router.js"); /* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router/esm/react-router.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/esm/react-router-dom.js"); /* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/esm/react-router-dom.js");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils */ "./resources/js/utils.ts");
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@ -36255,6 +36100,7 @@ var __rest = undefined && undefined.__rest || function (s, e) {
var app = document.getElementById('app'); var app = document.getElementById('app');
var word = "shikiryu"; // FIXME should be in db and ≠ between users var word = "shikiryu"; // FIXME should be in db and ≠ between users
@ -36286,7 +36132,7 @@ function App() {
passphrase = _React$useState4[0], passphrase = _React$useState4[0],
setPassphrase = _React$useState4[1]; setPassphrase = _React$useState4[1];
var history = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_5__.useHistory)(); var history = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_6__.useHistory)();
var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_3__.useState(checkPassphrase()), var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_3__.useState(checkPassphrase()),
_React$useState6 = _slicedToArray(_React$useState5, 2), _React$useState6 = _slicedToArray(_React$useState5, 2),
@ -36298,6 +36144,15 @@ function App() {
error = _React$useState8[0], error = _React$useState8[0],
isError = _React$useState8[1]; isError = _React$useState8[1];
var _React$useState9 = react__WEBPACK_IMPORTED_MODULE_3__.useState((0,_utils__WEBPACK_IMPORTED_MODULE_5__.isAllLoadedLocally)(pages)),
_React$useState10 = _slicedToArray(_React$useState9, 2),
allLoaded = _React$useState10[0],
setAllLoaded = _React$useState10[1];
var loadPages = react__WEBPACK_IMPORTED_MODULE_3__.useRef(function () {
return;
});
var signin = function signin(cb) { var signin = function signin(cb) {
var isAuthenticated = checkPassphrase(); var isAuthenticated = checkPassphrase();
setUser(isAuthenticated); setUser(isAuthenticated);
@ -36337,17 +36192,30 @@ function App() {
var Error = function Error() { var Error = function Error() {
if (error) { if (error) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__["default"], {
severity: "error" severity: "error"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__["default"], null, "Erreur"), "La phrase de passe ne correspond pas."); }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], null, "Erreur"), "La phrase de passe ne correspond pas.");
} }
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("div", null); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("div", null);
}; };
var LoadButton = function LoadButton() {
return allLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react__WEBPACK_IMPORTED_MODULE_3__.Fragment, null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__["default"], {
variant: "outlined",
size: "small",
sx: {
align: "right"
},
onClick: function onClick() {
return loadPages.current();
}
}, "Charger les pages localement");
};
var AuthButton = function AuthButton() { var AuthButton = function AuthButton() {
var history = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_5__.useHistory)(); var history = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_6__.useHistory)();
return user ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("p", null, "Bienvenue !", " ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], { return user ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("p", null, "Bienvenue !", " ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__["default"], {
variant: "outlined", variant: "outlined",
size: "small", size: "small",
sx: { sx: {
@ -36358,7 +36226,7 @@ function App() {
return history.push("/diary/public"); return history.push("/diary/public");
}); });
} }
}, "Fermer mon carnet \xE0 clef")) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("p", null, "Votre carnet est ferm\xE9.", " ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_9__.Link, { }, "Fermer mon carnet \xE0 clef")) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("p", null, "Votre carnet est ferm\xE9.", " ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_10__.Link, {
to: "/diary/public/pages" to: "/diary/public/pages"
}, "Voir vos pages")); }, "Voir vos pages"));
}; };
@ -36383,10 +36251,10 @@ function App() {
var children = _a.children, var children = _a.children,
rest = __rest(_a, ["children"]); rest = __rest(_a, ["children"]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_5__.Route, Object.assign({}, rest, { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_6__.Route, Object.assign({}, rest, {
render: function render(_ref) { render: function render(_ref) {
var location = _ref.location; var location = _ref.location;
return user ? children : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_5__.Redirect, { return user ? children : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_6__.Redirect, {
to: { to: {
pathname: "/diary/public/pass", pathname: "/diary/public/pass",
state: { state: {
@ -36412,10 +36280,11 @@ function App() {
pages: listPages, pages: listPages,
url: getPageContentUrl, url: getPageContentUrl,
passphrase: passphrase, passphrase: passphrase,
setPassphrase: setPassphrase,
csrf: csrf, csrf: csrf,
removeUrl: removeUrl removeUrl: removeUrl,
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__["default"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_Form__WEBPACK_IMPORTED_MODULE_0__["default"], { loadPages: loadPages,
setAllLoaded: setAllLoaded
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_Form__WEBPACK_IMPORTED_MODULE_0__["default"], {
setListPages: setListPages, setListPages: setListPages,
csrf: csrf, csrf: csrf,
url: postUrl, url: postUrl,
@ -36423,20 +36292,20 @@ function App() {
})); }));
} }
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(AuthButton, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(Error, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__["default"], { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(AuthButton, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(LoadButton, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(Error, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__["default"], {
sx: { sx: {
height: "20px", height: "20px",
mb: "20px", mb: "20px",
mt: "10px" mt: "10px"
} }
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_5__.Switch, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_5__.Route, { }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_6__.Switch, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_6__.Route, {
path: "/diary/public/pass" path: "/diary/public/pass"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(PromptPage, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(PrivateRoute, { }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(PromptPage, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(PrivateRoute, {
path: "/diary/public/pages" path: "/diary/public/pages"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(ListPage, null)))); }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(ListPage, null))));
} }
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,react_router_dom__WEBPACK_IMPORTED_MODULE_5__.withRouter)(App)); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,react_router_dom__WEBPACK_IMPORTED_MODULE_6__.withRouter)(App));
/***/ }), /***/ }),
@ -36587,7 +36456,7 @@ function PageForm(_ref) {
var onSubmit = function onSubmit(event) { var onSubmit = function onSubmit(event) {
return __awaiter(_this, void 0, void 0, /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee() { return __awaiter(_this, void 0, void 0, /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee() {
var HTMLForm, decryptedFormData, encryptedFormData, _iterator, _step, _step$value, key, value, newEncryptedString, response, json, uuid, _iterator2, _step2, _key, _newEncryptedString; var HTMLForm, decryptedFormData, encryptedFormData, _iterator, _step, _step$value, key, value, newEncryptedString, response, json, uuid, _iterator2, _step2, _key, _newEncryptedString, savedDate, oSavedDate;
return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee$(_context) { return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee$(_context) {
while (1) { while (1) {
@ -36650,10 +36519,14 @@ function PageForm(_ref) {
if (json.success) { if (json.success) {
HTMLForm.reset(); HTMLForm.reset();
savedDate = json.date;
oSavedDate = new Date();
oSavedDate.setFullYear(savedDate.substring(0, 4), savedDate.substring(4, 6), savedDate.substring(6, 8));
oSavedDate.setHours(savedDate.substring(9, 11), savedDate.substring(11, 13), savedDate.substring(13, 15));
setListPages(function (previousList) { setListPages(function (previousList) {
return [{ return [{
id: uuid, id: uuid,
date: json.date, date: oSavedDate.toLocaleString(),
title: decryptedFormData.get("title"), title: decryptedFormData.get("title"),
content: decryptedFormData.get("text") content: decryptedFormData.get("text")
}].concat(_toConsumableArray(previousList)); }].concat(_toConsumableArray(previousList));
@ -36711,10 +36584,11 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ }); /* harmony export */ });
/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js");
/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Grid/Grid.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Grid/Grid.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Pagination/Pagination.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Pagination/Pagination.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var _Page__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Page */ "./resources/js/components/pages/Page.tsx"); /* harmony import */ var _Page__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Page */ "./resources/js/components/pages/Page.tsx");
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils */ "./resources/js/utils.ts");
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
@ -36764,6 +36638,7 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument
function Pages(_ref) { function Pages(_ref) {
var _this = this; var _this = this;
@ -36772,7 +36647,8 @@ function Pages(_ref) {
removeUrl = _ref.removeUrl, removeUrl = _ref.removeUrl,
csrf = _ref.csrf, csrf = _ref.csrf,
passphrase = _ref.passphrase, passphrase = _ref.passphrase,
setPassphrase = _ref.setPassphrase; loadPages = _ref.loadPages,
setAllLoaded = _ref.setAllLoaded;
var isPassphraseSet = passphrase !== null; var isPassphraseSet = passphrase !== null;
var perPage = 3; var perPage = 3;
var total = pages.length; var total = pages.length;
@ -36826,7 +36702,6 @@ function Pages(_ref) {
page: page, page: page,
url: url, url: url,
remove: removePage, remove: removePage,
setPassphrase: setPassphrase,
passphrase: passphrase, passphrase: passphrase,
key: page.id key: page.id
}); });
@ -36847,7 +36722,6 @@ function Pages(_ref) {
page: page, page: page,
url: url, url: url,
remove: removePage, remove: removePage,
setPassphrase: setPassphrase,
passphrase: passphrase, passphrase: passphrase,
key: page.id key: page.id
}); });
@ -36863,19 +36737,74 @@ function Pages(_ref) {
page: page, page: page,
url: url, url: url,
remove: removePage, remove: removePage,
setPassphrase: setPassphrase,
passphrase: passphrase, passphrase: passphrase,
key: page.id key: page.id
}); });
})); }));
}; };
var loadAllPages = function loadAllPages() {
listPages.map(function (page) {
loadPage(page).then(function (r) {
setAllLoaded((0,_utils__WEBPACK_IMPORTED_MODULE_3__.isAllLoadedLocally)(listPages));
});
});
};
function loadPage(page) {
return __awaiter(this, void 0, void 0, /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee2() {
var response, json;
return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!(localStorage.getItem(page.id + "text") === null)) {
_context2.next = 11;
break;
}
_context2.next = 3;
return fetch(url.replace("replace_me", page.id));
case 3:
response = _context2.sent;
_context2.next = 6;
return response.json();
case 6:
json = _context2.sent;
localStorage.setItem(page.id + "title", json.metadata.title);
localStorage.setItem(page.id + "text", json.content);
updateListPages([]);
updateListPages(listPages.slice((currentPage - 1) * perPage, (currentPage - 1) * perPage + perPage).map(function (page) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_Page__WEBPACK_IMPORTED_MODULE_2__["default"], {
page: page,
url: url,
remove: removePage,
passphrase: passphrase,
key: page.id
});
}));
case 11:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
}
react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () {
loadPages.current = loadAllPages;
}, []);
if (isPassphraseSet) { if (isPassphraseSet) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__["default"], { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], {
container: true, container: true,
rowSpacing: 1, rowSpacing: 1,
columnSpacing: 1 columnSpacing: 1
}, listPagesDisplayed), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], { }, listPagesDisplayed), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], {
count: numberOfPage, count: numberOfPage,
page: currentPage, page: currentPage,
onChange: handlePageChange, onChange: handlePageChange,
@ -36900,27 +36829,24 @@ function Pages(_ref) {
"use strict"; "use strict";
__webpack_require__.r(__webpack_exports__); __webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ Page) /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ }); /* harmony export */ });
/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js");
/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/IconButton/IconButton.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/IconButton/IconButton.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Alert/Alert.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Grid/Grid.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/AlertTitle/AlertTitle.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Card/Card.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Grid/Grid.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/CardHeader/CardHeader.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Card/Card.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Collapse/Collapse.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/CardHeader/CardHeader.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/CardContent/CardContent.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Collapse/Collapse.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Alert/Alert.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/CardActions/CardActions.js"); /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/AlertTitle/AlertTitle.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/CardContent/CardContent.js"); /* harmony import */ var _mui_icons_material_MoreVert__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/icons-material/MoreVert */ "./node_modules/@mui/icons-material/MoreVert.js");
/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ "./node_modules/@mui/material/Typography/Typography.js");
/* harmony import */ var _mui_icons_material_MoreVert__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/icons-material/MoreVert */ "./node_modules/@mui/icons-material/MoreVert.js");
/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material/styles */ "./node_modules/@mui/material/styles/styled.js");
/* harmony import */ var _mui_icons_material_ExpandMore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/icons-material/ExpandMore */ "./node_modules/@mui/icons-material/ExpandMore.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var storage_encryption__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! storage-encryption */ "./node_modules/storage-encryption/build/index.js"); /* harmony import */ var storage_encryption__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! storage-encryption */ "./node_modules/storage-encryption/build/index.js");
/* harmony import */ var storage_encryption__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(storage_encryption__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var storage_encryption__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(storage_encryption__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Delete.js"); /* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Download.js");
/* harmony import */ var _mui_icons_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/icons-material */ "./node_modules/@mui/icons-material/esm/Delete.js");
/* harmony import */ var _uiw_react_md_editor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @uiw/react-md-editor */ "./node_modules/@uiw/react-md-editor/esm/index.js"); /* harmony import */ var _uiw_react_md_editor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @uiw/react-md-editor */ "./node_modules/@uiw/react-md-editor/esm/index.js");
@ -36968,18 +36894,6 @@ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _argument
}); });
}; };
var __rest = undefined && undefined.__rest || function (s, e) {
var t = {};
for (var p in s) {
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
}
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
@ -36987,66 +36901,66 @@ var __rest = undefined && undefined.__rest || function (s, e) {
var Page = function Page(_ref) {
var ExpandMore = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_4__["default"])(function (props) {
var expand = props.expand,
other = __rest(props, ["expand"]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], Object.assign({}, other));
})(function (_ref) {
var theme = _ref.theme,
expand = _ref.expand;
return {
transform: !expand ? 'rotate(0deg)' : 'rotate(180deg)',
marginLeft: 'auto',
transition: theme.transitions.create('transform', {
duration: theme.transitions.duration.shortest
})
};
});
function Page(_ref2) {
var _this = this; var _this = this;
var page = _ref2.page, var page = _ref.page,
url = _ref2.url, url = _ref.url,
passphrase = _ref2.passphrase, passphrase = _ref.passphrase,
setPassphrase = _ref2.setPassphrase, remove = _ref.remove;
remove = _ref2.remove;
var _React$useState = react__WEBPACK_IMPORTED_MODULE_1__.useState(false), var _React$useState = react__WEBPACK_IMPORTED_MODULE_1__.useState(false),
_React$useState2 = _slicedToArray(_React$useState, 2), _React$useState2 = _slicedToArray(_React$useState, 2),
more = _React$useState2[0], more = _React$useState2[0],
setMore = _React$useState2[1]; setMore = _React$useState2[1];
var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_1__.useState(false),
_React$useState4 = _slicedToArray(_React$useState3, 2),
expanded = _React$useState4[0],
setExpanded = _React$useState4[1];
var handleMoreClick = function handleMoreClick() { var handleMoreClick = function handleMoreClick() {
setMore(!more); setMore(!more);
}; };
var handleExpandClick = function handleExpandClick() {
onLoad().then(function (r) {
return setExpanded(!expanded);
});
};
var encryptStorage = new storage_encryption__WEBPACK_IMPORTED_MODULE_2__.EncryptStorage(passphrase); var encryptStorage = new storage_encryption__WEBPACK_IMPORTED_MODULE_2__.EncryptStorage(passphrase);
var title,
content = ""; try {
var alert_popup = null; var _React$useState3 = react__WEBPACK_IMPORTED_MODULE_1__.useState(encryptStorage.decrypt(page.id + "title")),
var setTitle, _React$useState4 = _slicedToArray(_React$useState3, 2),
setContent = null; title = _React$useState4[0],
setTitle = _React$useState4[1];
var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_1__.useState(encryptStorage.decrypt(page.id + "text")),
_React$useState6 = _slicedToArray(_React$useState5, 2),
content = _React$useState6[0],
setContent = _React$useState6[1];
var onLoad = function onLoad() { var onLoad = function onLoad() {
return __awaiter(_this, void 0, void 0, /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee() { return __awaiter(_this, void 0, void 0, /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee() {
var response, json;
return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee$(_context) { return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee$(_context) {
while (1) { while (1) {
switch (_context.prev = _context.next) { switch (_context.prev = _context.next) {
case 0: case 0:
if (!(localStorage.getItem(page.id + "text") === null)) {
_context.next = 9;
break;
}
_context.next = 3;
return fetch(url.replace("replace_me", page.id));
case 3:
response = _context.sent;
_context.next = 6;
return response.json();
case 6:
json = _context.sent;
localStorage.setItem(page.id + "title", json.metadata.title);
localStorage.setItem(page.id + "text", json.content);
case 9:
setTitle(encryptStorage.decrypt(page.id + "title"));
setContent(encryptStorage.decrypt(page.id + "text"));
case 11:
case "end": case "end":
return _context.stop(); return _context.stop();
} }
@ -37055,106 +36969,60 @@ function Page(_ref2) {
})); }));
}; };
try { var icons;
var _React$useState5 = react__WEBPACK_IMPORTED_MODULE_1__.useState(encryptStorage.decrypt(page.id + "text"));
var _React$useState6 = _slicedToArray(_React$useState5, 2); if (content === null || content === "") {
icons = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], {
content = _React$useState6[0]; "aria-label": "load",
setContent = _React$useState6[1]; onClick: onLoad
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_5__["default"], null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], {
var _React$useState7 = react__WEBPACK_IMPORTED_MODULE_1__.useState(encryptStorage.decrypt(page.id + "title")); "aria-label": "settings",
onClick: handleMoreClick
var _React$useState8 = _slicedToArray(_React$useState7, 2); }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_icons_material_MoreVert__WEBPACK_IMPORTED_MODULE_6__["default"], null)));
} else {
title = _React$useState8[0]; icons = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], {
setTitle = _React$useState8[1]; "aria-label": "settings",
onClick: handleMoreClick
onLoad = function onLoad() { }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_icons_material_MoreVert__WEBPACK_IMPORTED_MODULE_6__["default"], null));
return __awaiter(_this, void 0, void 0, /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee2() {
var response, json;
return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!(localStorage.getItem(page.id + "text") === null)) {
_context2.next = 9;
break;
} }
_context2.next = 3; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__["default"], {
return fetch(url.replace("replace_me", page.id));
case 3:
response = _context2.sent;
_context2.next = 6;
return response.json();
case 6:
json = _context2.sent;
localStorage.setItem(page.id + "title", json.metadata.title);
localStorage.setItem(page.id + "text", json.content);
case 9:
setTitle(encryptStorage.decrypt(page.id + "title")); // @ts-ignore
setContent(encryptStorage.decrypt(page.id + "text"));
case 11:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
};
} catch (e) {
console.error(e);
setPassphrase(null);
alert_popup = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__["default"], {
severity: "error"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__["default"], null, "Erreur"), "Vos pages ne peuvent pas \xEAtre d\xE9cod\xE9es \u2014 ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("strong", null, "R\xE9indiquez votre clef!"));
}
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], {
item: true, item: true,
xs: 12, xs: 12,
sm: 12, sm: 12,
md: 12, md: 12,
id: page.id id: page.id
}, alert_popup, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__["default"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__["default"], { }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__["default"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__["default"], {
action: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { action: icons,
"aria-label": "settings",
onClick: handleMoreClick
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_icons_material_MoreVert__WEBPACK_IMPORTED_MODULE_11__["default"], null)),
title: title, title: title,
subheader: page.date subheader: page.date
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], { }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__["default"], {
"in": more, "in": more,
timeout: "auto", timeout: "auto",
unmountOnExit: true unmountOnExit: true
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__["default"], { }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__["default"], {
"aria-label": "remove", "aria-label": "remove",
onClick: function onClick() { onClick: function onClick() {
remove(page.id); remove(page.id);
} }
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_13__["default"], null))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__["default"], { }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_icons_material__WEBPACK_IMPORTED_MODULE_11__["default"], null)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_uiw_react_md_editor__WEBPACK_IMPORTED_MODULE_3__["default"].Markdown, {
disableSpacing: true
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(ExpandMore, {
expand: expanded,
onClick: handleExpandClick,
"aria-expanded": expanded,
"aria-label": "show more"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_icons_material_ExpandMore__WEBPACK_IMPORTED_MODULE_15__["default"], null))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__["default"], {
"in": expanded,
timeout: "auto",
unmountOnExit: true
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__["default"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__["default"], {
paragraph: true
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_uiw_react_md_editor__WEBPACK_IMPORTED_MODULE_3__["default"].Markdown, {
source: content source: content
})))))); }))));
} } catch (e) {
console.error(e);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__["default"], {
item: true,
xs: 12,
sm: 12,
md: 12,
id: page.id
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__["default"], {
severity: "error"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__["default"], null, "Erreur"), "Cette page ne peut pas \xEAtre d\xE9cod\xE9e \u2014 ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("strong", null, "R\xE9indiquez votre clef!")));
}
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(Page));
/***/ }), /***/ }),
@ -37556,6 +37424,33 @@ function MobileMenu(_ref) {
})))))); }))))));
} }
/***/ }),
/***/ "./resources/js/utils.ts":
/*!*******************************!*\
!*** ./resources/js/utils.ts ***!
\*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "isAllLoadedLocally": () => (/* binding */ isAllLoadedLocally)
/* harmony export */ });
var isAllLoadedLocally = function isAllLoadedLocally(pages) {
for (var i in pages) {
var page = pages[i];
if (localStorage.getItem(page.id + "title") === null) {
return false;
}
}
return true;
};
/***/ }), /***/ }),
/***/ "./resources/js/bootstrap.js": /***/ "./resources/js/bootstrap.js":

View File

@ -12,17 +12,14 @@ import {
withRouter, withRouter,
useHistory useHistory
} from "react-router-dom"; } from "react-router-dom";
import {IList} from "../../interfaces/IList";
interface List { import {isAllLoadedLocally} from "../../utils";
id: string;
date: string;
}
const app = document.getElementById('app'); const app = document.getElementById('app');
const word = "shikiryu"; // FIXME should be in db and ≠ between users const word = "shikiryu"; // FIXME should be in db and ≠ between users
const sessionPassphrase = sessionStorage.getItem("key"); const sessionPassphrase = sessionStorage.getItem("key") as string;
let pages: List[] = []; let pages: IList[] = [];
let getPageContentUrl, let getPageContentUrl,
postUrl, postUrl,
removeUrl, removeUrl,
@ -31,7 +28,7 @@ let getPageContentUrl,
if (app) { if (app) {
getPageContentUrl = "" + app.getAttribute('data-url'); getPageContentUrl = "" + app.getAttribute('data-url');
pages = JSON.parse("" + app.getAttribute('data-list')); pages = JSON.parse("" + app.getAttribute('data-list')) as IList[];
postUrl = "" + app.getAttribute('data-post'); postUrl = "" + app.getAttribute('data-post');
removeUrl = "" + app.getAttribute('data-remove'); removeUrl = "" + app.getAttribute('data-remove');
csrf = "" + app.getAttribute('data-csrf'); csrf = "" + app.getAttribute('data-csrf');
@ -39,11 +36,14 @@ if (app) {
} }
function App() { function App() {
const [listPages, setListPages] = React.useState(pages); const [listPages, setListPages] = React.useState<IList[]>(pages);
const [passphrase, setPassphrase] = React.useState(sessionPassphrase); const [passphrase, setPassphrase] = React.useState<string>(sessionPassphrase);
const history = useHistory(); const history = useHistory();
const [user, setUser] = React.useState(checkPassphrase()); const [user, setUser] = React.useState(checkPassphrase());
const [error, isError] = React.useState(!checkPassphrase()); const [error, isError] = React.useState(!checkPassphrase());
const [allLoaded, setAllLoaded] = React.useState<boolean>(isAllLoadedLocally(pages));
const loadPages = React.useRef(() => {return ;});
const signin = cb => { const signin = cb => {
const isAuthenticated = checkPassphrase(); const isAuthenticated = checkPassphrase();
@ -92,6 +92,14 @@ function App() {
return (<div></div>); return (<div></div>);
} }
const LoadButton = function() {
return allLoaded ? (<></>) : (
<Button variant="outlined" size="small" sx={{align: "right"}} onClick={() => loadPages.current()}>
Charger les pages localement
</Button>
);
}
const AuthButton = function() { const AuthButton = function() {
const history = useHistory(); const history = useHistory();
@ -156,9 +164,11 @@ function App() {
pages={listPages} pages={listPages}
url={getPageContentUrl} url={getPageContentUrl}
passphrase={passphrase} passphrase={passphrase}
setPassphrase={setPassphrase}
csrf={csrf} csrf={csrf}
removeUrl={removeUrl}/> removeUrl={removeUrl}
loadPages={loadPages}
setAllLoaded={setAllLoaded}
/>
<Divider/> <Divider/>
<PageForm setListPages={setListPages} csrf={csrf} url={postUrl} passphrase={passphrase}/> <PageForm setListPages={setListPages} csrf={csrf} url={postUrl} passphrase={passphrase}/>
</div> </div>
@ -168,6 +178,7 @@ function App() {
return ( return (
<div> <div>
<AuthButton /> <AuthButton />
<LoadButton />
<Error/> <Error/>
<Divider sx={{height: "20px", mb: "20px", mt:"10px"}}/> <Divider sx={{height: "20px", mb: "20px", mt:"10px"}}/>
<Switch> <Switch>

View File

@ -1,13 +1,11 @@
import {Grid, Pagination} from '@mui/material'; import {Grid, Pagination} from '@mui/material';
import * as React from 'react'; import * as React from 'react';
import Page from "./Page"; import Page from "./Page";
import {IPages} from "../../interfaces/IPages";
import {IList} from "../../interfaces/IList";
import {isAllLoadedLocally} from "../../utils";
interface List { export default function Pages({pages, url, removeUrl, csrf, passphrase, loadPages, setAllLoaded}: IPages) {
id: string;
date: string;
}
export default function Pages({pages, url, removeUrl, csrf, passphrase, setPassphrase}) {
const isPassphraseSet = passphrase !== null; const isPassphraseSet = passphrase !== null;
const perPage = 3; const perPage = 3;
const total = pages.length; const total = pages.length;
@ -35,20 +33,42 @@ export default function Pages({pages, url, removeUrl, csrf, passphrase, setPassp
console.log(newListPages.length); console.log(newListPages.length);
console.log(listPages.length); console.log(listPages.length);
updateListPages(newListPages.slice((currentPage - 1) * perPage, ((currentPage - 1) * perPage) + perPage).map(page => updateListPages(newListPages.slice((currentPage - 1) * perPage, ((currentPage - 1) * perPage) + perPage).map(page =>
<Page page={page} url={url} remove={removePage} setPassphrase={setPassphrase} passphrase={passphrase} <Page page={page} url={url} remove={removePage} passphrase={passphrase} key={page.id}/>));
key={page.id}/>));
} }
} }
const [listPagesDisplayed, updateListPages] = React.useState(listPages.slice((currentPage-1) * perPage, ((currentPage-1) * perPage) + perPage ).map(page => const [listPagesDisplayed, updateListPages] = React.useState(listPages.slice((currentPage-1) * perPage, ((currentPage-1) * perPage) + perPage ).map(page =>
<Page page={page} url={url} remove={removePage} setPassphrase={setPassphrase} passphrase={passphrase} key={page.id}/>)); <Page page={page} url={url} remove={removePage} passphrase={passphrase} key={page.id} />));
const handlePageChange = (event: React.ChangeEvent<unknown>, value: number) => { const handlePageChange = (event: React.ChangeEvent<unknown>, value: number) => {
setPage(value); setPage(value);
updateListPages(listPages.slice((value-1) * perPage, ((value-1) * perPage) + perPage).map(page => updateListPages(listPages.slice((value-1) * perPage, ((value-1) * perPage) + perPage).map(page =>
<Page page={page} url={url} remove={removePage} setPassphrase={setPassphrase} passphrase={passphrase} key={page.id}/>)); <Page page={page} url={url} remove={removePage} passphrase={passphrase} key={page.id}/>));
}; };
const loadAllPages = function() {
listPages.map(function(page) {
loadPage(page).then(r => {setAllLoaded(isAllLoadedLocally(listPages));});
});
}
async function loadPage(page: IList) {
if (localStorage.getItem(page.id + "text") === null) {
const response = await fetch(url.replace("replace_me", page.id));
const json = await response.json();
localStorage.setItem(page.id + "title", json.metadata.title);
localStorage.setItem(page.id + "text", json.content);
updateListPages([]);
updateListPages(listPages.slice((currentPage-1) * perPage, ((currentPage-1) * perPage) + perPage).map(page =>
<Page page={page} url={url} remove={removePage} passphrase={passphrase} key={page.id}/>));
}
}
React.useEffect(() => {
loadPages.current = loadAllPages;
}, [])
if (isPassphraseSet) { if (isPassphraseSet) {
return ( return (
<div> <div>

View File

@ -1,56 +1,26 @@
import { import {
Alert, Alert,
AlertTitle, AlertTitle,
Card, CardActions, Card, CardContent,
CardContent,
CardHeader, Collapse, CardHeader, Collapse,
Grid, IconButton, IconButtonProps, Grid, IconButton
Typography
} from '@mui/material'; } from '@mui/material';
import MoreVertIcon from '@mui/icons-material/MoreVert'; import MoreVertIcon from '@mui/icons-material/MoreVert';
import { styled } from '@mui/material/styles';
import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
import * as React from 'react'; import * as React from 'react';
import {EncryptStorage} from 'storage-encryption'; import {EncryptStorage} from 'storage-encryption';
import {Delete} from "@mui/icons-material"; import {Delete, Download} from "@mui/icons-material";
import MDEditor from "@uiw/react-md-editor"; import MDEditor from "@uiw/react-md-editor";
import {PropPage} from "../../interfaces/PropPage";
interface Page { const Page = function({page, url, passphrase, remove}: PropPage) {
date: string; const [more, setMore] = React.useState<boolean>(false);
title: string;
content: string;
}
interface ExpandMoreProps extends IconButtonProps {
expand: boolean;
}
const ExpandMore = styled((props: ExpandMoreProps) => {
const { expand, ...other } = props;
return <IconButton {...other} />;
})(({ theme, expand }) => ({
transform: !expand ? 'rotate(0deg)' : 'rotate(180deg)',
marginLeft: 'auto',
transition: theme.transitions.create('transform', {
duration: theme.transitions.duration.shortest,
}),
}));
export default function Page({page, url, passphrase, setPassphrase, remove}) {
const [more, setMore] = React.useState(false);
const [expanded, setExpanded] = React.useState(false);
const handleMoreClick = () => { setMore(!more); }; const handleMoreClick = () => { setMore(!more); };
const handleExpandClick = () => { onLoad().then(r => setExpanded(!expanded)); };
const encryptStorage = new EncryptStorage(passphrase); const encryptStorage = new EncryptStorage(passphrase);
let title, content = "";
let alert_popup:JSX.Element|null = null;
let setTitle, setContent: React.Dispatch<any>|null = null;
let onLoad = async () => {};
try { try {
[content, setContent] = React.useState(encryptStorage.decrypt(page.id + "text")); const [title, setTitle] = React.useState<string>(encryptStorage.decrypt(page.id + "title"));
[title, setTitle] = React.useState(encryptStorage.decrypt(page.id + "title")); const [content, setContent] = React.useState<string>(encryptStorage.decrypt(page.id + "text"));
onLoad = async () => { const onLoad = async () => {
if (localStorage.getItem(page.id + "text") === null) { if (localStorage.getItem(page.id + "text") === null) {
const response = await fetch(url.replace("replace_me", page.id)); const response = await fetch(url.replace("replace_me", page.id));
@ -59,54 +29,59 @@ export default function Page({page, url, passphrase, setPassphrase, remove}) {
localStorage.setItem(page.id + "text", json.content); localStorage.setItem(page.id + "text", json.content);
} }
setTitle(encryptStorage.decrypt(page.id + "title")); setTitle(encryptStorage.decrypt(page.id + "title"));
// @ts-ignore
setContent(encryptStorage.decrypt(page.id + "text")); setContent(encryptStorage.decrypt(page.id + "text"));
} }
} catch (e) { let icons;
console.error(e); if (content === null || content === "") {
setPassphrase(null); icons = (<div>
alert_popup = <Alert severity="error"> <IconButton aria-label="load" onClick={onLoad} >
<AlertTitle>Erreur</AlertTitle> <Download />
Vos pages ne peuvent pas être décodées <strong>Réindiquez votre clef!</strong> </IconButton>
</Alert> <IconButton aria-label="settings" onClick={handleMoreClick}>
<MoreVertIcon />
</IconButton>
</div>);
} else {
icons = (
<IconButton aria-label="settings" onClick={handleMoreClick}>
<MoreVertIcon />
</IconButton>
);
} }
return ( return (
<Grid item xs={12} sm={12} md={12} id={page.id}> <Grid item xs={12} sm={12} md={12} id={page.id}>
{alert_popup}
<Card> <Card>
<CardHeader <CardHeader
action={ action={
<IconButton aria-label="settings" onClick={handleMoreClick}> icons
<MoreVertIcon />
</IconButton>
} }
title={title} title={title}
subheader={page.date} subheader={page.date}
/> >
<Collapse in={more} timeout="auto" unmountOnExit> <Collapse in={more} timeout="auto" unmountOnExit>
<IconButton aria-label="remove" onClick={() => {remove(page.id)}} > <IconButton aria-label="remove" onClick={() => {remove(page.id)}} >
<Delete /> <Delete />
</IconButton> </IconButton>
</Collapse> </Collapse>
<CardActions disableSpacing> </CardHeader>
<ExpandMore
expand={expanded}
onClick={handleExpandClick}
aria-expanded={expanded}
aria-label="show more"
>
<ExpandMoreIcon />
</ExpandMore>
</CardActions>
<Collapse in={expanded} timeout="auto" unmountOnExit>
<CardContent> <CardContent>
<Typography paragraph>
<MDEditor.Markdown source={content} /> <MDEditor.Markdown source={content} />
</Typography>
</CardContent> </CardContent>
</Collapse>
</Card> </Card>
</Grid> </Grid>
); );
} catch (e) {
console.error(e);
return (
<Grid item xs={12} sm={12} md={12} id={page.id}>
<Alert severity="error">
<AlertTitle>Erreur</AlertTitle>
Cette page ne peut pas être décodée <strong>Réindiquez votre clef!</strong>
</Alert>
</Grid>
);
}
} }
export default React.forwardRef(Page);

View File

@ -0,0 +1,5 @@
export interface IList {
id: string;
date: string;
isLoaded: boolean;
}

View File

@ -0,0 +1,6 @@
export interface IPage {
id: string;
date: string;
title: string;
content: string;
}

View File

@ -0,0 +1,12 @@
import {IList} from "./IList";
import * as React from "react";
export interface IPages {
pages: IList[];
url: string;
removeUrl: string;
csrf: string;
passphrase: string;
loadPages: React.MutableRefObject<() => void>;
setAllLoaded: React.Dispatch<React.SetStateAction<boolean>>;
}

View File

@ -0,0 +1,10 @@
import { Ref } from "react";
import {IList} from "./IList";
export interface PropPage {
page: IList;
url: string;
passphrase: string;
remove: (id) => void;
ref: Ref<IList>;
}

14
resources/js/utils.ts Normal file
View File

@ -0,0 +1,14 @@
import {IList} from "./interfaces/IList";
const isAllLoadedLocally = function(pages: IList[]) {
for (const i in pages) {
const page = pages[i];
if (localStorage.getItem(page.id + "title") === null) {
return false;
}
}
return true;
}
export { isAllLoadedLocally };