mirror of
https://github.com/discourse/discourse.git
synced 2024-11-27 09:23:43 +08:00
Add plugin API for handling uploads with specific file extensions
This commit is contained in:
parent
a83f662492
commit
e7e8f4ef4c
|
@ -38,6 +38,14 @@ import {
|
|||
|
||||
const REBUILD_SCROLL_MAP_EVENTS = ["composer:resized", "composer:typed-reply"];
|
||||
|
||||
const uploadHandlers = [];
|
||||
export function addComposerUploadHandler(extensions, method) {
|
||||
uploadHandlers.push({
|
||||
extensions,
|
||||
method
|
||||
});
|
||||
}
|
||||
|
||||
export default Ember.Component.extend({
|
||||
classNameBindings: ["showToolbar:toolbar-visible", ":wmd-controls"],
|
||||
|
||||
|
@ -587,6 +595,19 @@ export default Ember.Component.extend({
|
|||
});
|
||||
|
||||
$element.on("fileuploadsubmit", (e, data) => {
|
||||
// Look for a matching file upload handler contributed from a plugin
|
||||
const matcher = handler => {
|
||||
const ext = handler.extensions.join("|");
|
||||
const regex = new RegExp(`\\.(${ext})$`, "i");
|
||||
return regex.test(data.files[0].name);
|
||||
};
|
||||
const matchingHandler = uploadHandlers.find(matcher);
|
||||
if (data.files.length === 1 && matchingHandler) {
|
||||
matchingHandler.method(data.files[0]);
|
||||
return false;
|
||||
}
|
||||
|
||||
// If no plugin, continue as normal
|
||||
const isPrivateMessage = this.get("composer.privateMessage");
|
||||
|
||||
data.formData = { type: "composer" };
|
||||
|
|
|
@ -35,9 +35,10 @@ import { registerCustomAvatarHelper } from "discourse/helpers/user-avatar";
|
|||
import { disableNameSuppression } from "discourse/widgets/poster-name";
|
||||
import { registerCustomPostMessageCallback as registerCustomPostMessageCallback1 } from "discourse/controllers/topic";
|
||||
import Sharing from "discourse/lib/sharing";
|
||||
import { addComposerUploadHandler } from "discourse/components/composer-editor";
|
||||
|
||||
// If you add any methods to the API ensure you bump up this number
|
||||
const PLUGIN_API_VERSION = "0.8.23";
|
||||
const PLUGIN_API_VERSION = "0.8.24";
|
||||
|
||||
class PluginApi {
|
||||
constructor(version, container) {
|
||||
|
@ -753,6 +754,22 @@ class PluginApi {
|
|||
Sharing.addSharingId(options.id);
|
||||
Sharing.addSource(options);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Registers a function to handle uploads for specified file types
|
||||
* The normal uploading functionality will be bypassed
|
||||
* This only for uploads of individual files
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* addComposerUploadHandler(["mp4", "mov"], (file) => {
|
||||
* console.log("Handling upload for", file.name);
|
||||
* })
|
||||
*/
|
||||
addComposerUploadHandler(extensions, method) {
|
||||
addComposerUploadHandler(extensions, method);
|
||||
}
|
||||
}
|
||||
|
||||
let _pluginv01;
|
||||
|
|
Loading…
Reference in New Issue
Block a user