mirror of
				https://github.com/mickael-kerjean/filestash.git
				synced 2025-10-31 10:07:15 +08:00 
			
		
		
		
	chore (canary): canary release for rewrite
This commit is contained in:
		| @ -392,7 +392,7 @@ function workerImplDirectory({ error, progress }) { | |||||||
| async function processFiles(filelist) { // TODO | async function processFiles(filelist) { // TODO | ||||||
|     const files = []; |     const files = []; | ||||||
|     const detectFiletype = (file) => { |     const detectFiletype = (file) => { | ||||||
|         // the 4096 is an heuristic I've observed and taken from: |         // the 4096 is an heuristic observed and taken from: | ||||||
|         // https://stackoverflow.com/questions/25016442 |         // https://stackoverflow.com/questions/25016442 | ||||||
|         // however the proposed answer is just wrong as it doesn't consider folder with |         // however the proposed answer is just wrong as it doesn't consider folder with | ||||||
|         // name such as: test.png and as Stackoverflow favor consanguinity with their |         // name such as: test.png and as Stackoverflow favor consanguinity with their | ||||||
| @ -413,10 +413,13 @@ async function processFiles(filelist) { // TODO | |||||||
|     for (const currentFile of filelist) { |     for (const currentFile of filelist) { | ||||||
|         const type = await detectFiletype(currentFile); |         const type = await detectFiletype(currentFile); | ||||||
|         const file = { type, date: currentFile.lastModified, name: currentFile.name, path: currentFile.name }; |         const file = { type, date: currentFile.lastModified, name: currentFile.name, path: currentFile.name }; | ||||||
|         if (type === "directory") file.path += "/"; |         if (type === "directory") { | ||||||
|         else if (type === "file") { |             file.path += "/"; | ||||||
|             fs.push({ type: "file", path, exec: workerImplFile, entry: currentFile }); |         } else if (type === "file") { | ||||||
|         } else assert.fail(`NOT_SUPPORTED type="${type}"`, type); |             file.entry = currentFile; | ||||||
|  |         } else { | ||||||
|  |             assert.fail(`NOT_SUPPORTED type="${type}"`, type); | ||||||
|  |         } | ||||||
|         file.exec = workerImplFile.bind(file); |         file.exec = workerImplFile.bind(file); | ||||||
|         files.push(file); |         files.push(file); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -64,7 +64,7 @@ export default async function(render) { | |||||||
|             rxjs.mergeMap((arr) => rxjs.from(loadMode(extname(getFilename()))).pipe( |             rxjs.mergeMap((arr) => rxjs.from(loadMode(extname(getFilename()))).pipe( | ||||||
|                 rxjs.map((mode) => arr.concat([mode])), |                 rxjs.map((mode) => arr.concat([mode])), | ||||||
|             )), |             )), | ||||||
|             rxjs.mergeMap((arr) => options(getCurrentPath()).pipe( |             rxjs.mergeMap((arr) => options().pipe( | ||||||
|                 rxjs.map((acl) => arr.concat([acl])), |                 rxjs.map((acl) => arr.concat([acl])), | ||||||
|             )), |             )), | ||||||
|         )), |         )), | ||||||
| @ -145,13 +145,11 @@ export default async function(render) { | |||||||
|             $fab.classList.remove("hidden"); |             $fab.classList.remove("hidden"); | ||||||
|             $fab.render($ICON.LOADING); |             $fab.render($ICON.LOADING); | ||||||
|             $fab.disabled = true; |             $fab.disabled = true; | ||||||
|             return rxjs.of(cm.getValue()).pipe( |             const content = cm.getValue(); | ||||||
|                 save(), |             return save(content).pipe(rxjs.tap(() => { | ||||||
|                 rxjs.tap((content) => { |                 $fab.removeAttribute("disabled"); | ||||||
|                     $fab.removeAttribute("disabled"); |                 content$.next(content); | ||||||
|                     content$.next(content); |             })); | ||||||
|                 }), |  | ||||||
|             ); |  | ||||||
|         }), |         }), | ||||||
|         rxjs.catchError(ctrlError()), |         rxjs.catchError(ctrlError()), | ||||||
|     )); |     )); | ||||||
| @ -175,7 +173,10 @@ export default async function(render) { | |||||||
|                 ); |                 ); | ||||||
|             }); |             }); | ||||||
|             if (userAction === MODAL_RIGHT_BUTTON) { |             if (userAction === MODAL_RIGHT_BUTTON) { | ||||||
|                 console.log("TODO: SAVE THE DATA"); |                 const $fab = $dom.fab(); | ||||||
|  |                 $fab.render($ICON.LOADING); | ||||||
|  |                 $fab.disabled = true; | ||||||
|  |                 await save(cm.getValue()).toPromise(); | ||||||
|             } |             } | ||||||
|             return false; |             return false; | ||||||
|         }), |         }), | ||||||
|  | |||||||
| @ -7,8 +7,9 @@ import { createForm } from "../../lib/form.js"; | |||||||
| import { formTmpl } from "../../components/form.js"; | import { formTmpl } from "../../components/form.js"; | ||||||
| import ctrlError from "../ctrl_error.js"; | import ctrlError from "../ctrl_error.js"; | ||||||
|  |  | ||||||
| import { transition, getFile$, saveFile$ } from "./common.js"; | import { transition } from "./common.js"; | ||||||
| import { $ICON } from "./common_fab.js"; | import { $ICON } from "./common_fab.js"; | ||||||
|  | import { cat, save } from "./model_files.js"; | ||||||
|  |  | ||||||
| import "../../components/icon.js"; | import "../../components/icon.js"; | ||||||
| import "../../components/menubar.js"; | import "../../components/menubar.js"; | ||||||
| @ -35,7 +36,7 @@ export default function(render) { | |||||||
|     const file$ = new rxjs.ReplaySubject(1); |     const file$ = new rxjs.ReplaySubject(1); | ||||||
|  |  | ||||||
|     // feature1: setup the dom |     // feature1: setup the dom | ||||||
|     effect(getFile$().pipe( |     effect(cat().pipe( | ||||||
|         rxjs.map((content) => JSON.parse(content)), |         rxjs.map((content) => JSON.parse(content)), | ||||||
|         rxjs.mergeMap((formSpec) => rxjs.from(createForm(formSpec, formTmpl({ |         rxjs.mergeMap((formSpec) => rxjs.from(createForm(formSpec, formTmpl({ | ||||||
|             renderLeaf: ({ label, format, description, required }) => createElement(` |             renderLeaf: ({ label, format, description, required }) => createElement(` | ||||||
| @ -100,8 +101,9 @@ export default function(render) { | |||||||
|             $fab.disabled = true; |             $fab.disabled = true; | ||||||
|         }), |         }), | ||||||
|         rxjs.mergeMap(($fab) => rxjs.of(JSON.stringify(formState())).pipe( |         rxjs.mergeMap(($fab) => rxjs.of(JSON.stringify(formState())).pipe( | ||||||
|             saveFile$(), |             rxjs.tap((a) => console.log(a)), | ||||||
|             rxjs.mergeMap(() => getFile$().pipe(rxjs.tap((formSpec) => file$.next(JSON.parse(formSpec))))), |             // rxjs.mergeMap((content) => save(content)), | ||||||
|  |             rxjs.mergeMap(() => cat().pipe(rxjs.tap((formSpec) => file$.next(JSON.parse(formSpec))))), | ||||||
|         )), |         )), | ||||||
|         rxjs.tap(() => { |         rxjs.tap(() => { | ||||||
|             $fab.render($ICON.SAVING); |             $fab.render($ICON.SAVING); | ||||||
|  | |||||||
| @ -1,9 +1,9 @@ | |||||||
| import rxjs from "../../lib/rx.js"; | import rxjs from "../../lib/rx.js"; | ||||||
| import ajax from "../../lib/ajax.js"; | import ajax from "../../lib/ajax.js"; | ||||||
| import { getDownloadUrl } from "./common.js"; | import { getDownloadUrl, getCurrentPath } from "./common.js"; | ||||||
|  |  | ||||||
| export const options = (path) => ajax({ | export const options = () => ajax({ | ||||||
|     url: `api/files/cat?path=${path}`, |     url: `api/files/cat?path=${encodeURIComponent(getCurrentPath())}`, | ||||||
|     method: "OPTIONS", |     method: "OPTIONS", | ||||||
| }).pipe(rxjs.map((res) => res.responseHeaders.allow.replace(/\r/, "").split(", "))); | }).pipe(rxjs.map((res) => res.responseHeaders.allow.replace(/\r/, "").split(", "))); | ||||||
|  |  | ||||||
| @ -11,9 +11,8 @@ export const cat = () => ajax(getDownloadUrl()).pipe( | |||||||
|     rxjs.map(({ response }) => response), |     rxjs.map(({ response }) => response), | ||||||
| ); | ); | ||||||
|  |  | ||||||
| export const save = () => { | export const save = (content) => ajax({ | ||||||
|     return rxjs.pipe( |     url: getDownloadUrl(), | ||||||
|         rxjs.delay(2000), |     method: "POST", | ||||||
|         rxjs.tap((content) => console.log("SAVED")), |     body: content, | ||||||
|     ); | }); | ||||||
| }; |  | ||||||
|  | |||||||
| @ -194,11 +194,6 @@ func ServeBackofficeHandler(ctx *App, res http.ResponseWriter, req *http.Request | |||||||
| } | } | ||||||
|  |  | ||||||
| func ServeFrontofficeHandler(ctx *App, res http.ResponseWriter, req *http.Request) { | func ServeFrontofficeHandler(ctx *App, res http.ResponseWriter, req *http.Request) { | ||||||
| 	url := req.URL.Path |  | ||||||
| 	if filepath.Ext(filepath.Base(url)) != "" { |  | ||||||
| 		ServeFile("/")(ctx, res, req) |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 	ua := req.Header.Get("User-Agent") | 	ua := req.Header.Get("User-Agent") | ||||||
| 	if strings.Contains(ua, "MSIE ") || strings.Contains(ua, "Trident/") || strings.Contains(ua, "Edge/") { | 	if strings.Contains(ua, "MSIE ") || strings.Contains(ua, "Trident/") || strings.Contains(ua, "Edge/") { | ||||||
| 		// Microsoft is behaving on many occasion differently than Firefox / Chrome. | 		// Microsoft is behaving on many occasion differently than Firefox / Chrome. | ||||||
| @ -214,7 +209,7 @@ func ServeFrontofficeHandler(ctx *App, res http.ResponseWriter, req *http.Reques | |||||||
| 		`))) | 		`))) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	url = TrimBase(req.URL.Path) | 	url := TrimBase(req.URL.Path) | ||||||
| 	if url != "/" && strings.HasPrefix(url, "/s/") == false && | 	if url != "/" && strings.HasPrefix(url, "/s/") == false && | ||||||
| 		strings.HasPrefix(url, "/view/") == false && strings.HasPrefix(url, "/files/") == false && | 		strings.HasPrefix(url, "/view/") == false && strings.HasPrefix(url, "/files/") == false && | ||||||
| 		url != "/login" && url != "/logout" && strings.HasPrefix(url, "/tags") == false { | 		url != "/login" && url != "/logout" && strings.HasPrefix(url, "/tags") == false { | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 MickaelK
					MickaelK