# Overwrite methods in Discourse.Utilities

**URL:** https://meta.discourse.org/t/overwrite-methods-in-discourse-utilities/53408
**Category:** Development
**Created:** [November 27, 2016, 2:27am UTC](https://meta.discourse.org/t/overwrite-methods-in-discourse-utilities/53408 "2016-11-27T02:27:24Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![leo.proctor](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/leo.proctor/32/216158_2.png) [@leo.proctor](https://meta.discourse.org/u/leo.proctor)
#### Post date: [November 27, 2016, 2:27am UTC](https://meta.discourse.org/t/overwrite-methods-in-discourse-utilities/53408/1 "2016-11-27T02:27:24Z")

</div>

I’m struggling with EmberJS for a while now. I need to override Discourse.Utilities.getUploadMarkdown in a plugin, but i’m not getting anywhere. How do you override export methods in Discourse.Utilities. any help plz?

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [November 27, 2016, 3:34am UTC](https://meta.discourse.org/t/overwrite-methods-in-discourse-utilities/53408/2 "2016-11-27T03:34:25Z")

</div>

I did it in this plugin a while ago. [GitHub - scossar/m4a-audio-uploads: adds m4a to the Discourse audio file list · GitHub](https://github.com/scossar/m4a-audio-uploads)

---

<div class="post-metadata">

### Author: ![leo.proctor](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/leo.proctor/32/216158_2.png) [@leo.proctor](https://meta.discourse.org/u/leo.proctor)
#### Post date: [November 27, 2016, 10:05am UTC](https://meta.discourse.org/t/overwrite-methods-in-discourse-utilities/53408/3 "2016-11-27T10:05:56Z")

</div>

Hi Simon, thanks for your reply. This is exactly what I want. But upon following your javascript code, I get error that Discourse.Utilities is undefined.  
`Uncaught TypeError: Cannot set property 'getUploadMarkdown' of undefine`d  
and it stills calls the old getUploadMarkdown method.

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [November 27, 2016, 10:43am UTC](https://meta.discourse.org/t/overwrite-methods-in-discourse-utilities/53408/4 "2016-11-27T10:43:23Z")

</div>

Yes, it looks like `Discourse.Utilities` has been converted to javascript modules since I wrote that plugin, so it will have to be done differently.

---

<div class="post-metadata">

### Author: ![leo.proctor](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/leo.proctor/32/216158_2.png) [@leo.proctor](https://meta.discourse.org/u/leo.proctor)
#### Post date: [November 27, 2016, 5:12pm UTC](https://meta.discourse.org/t/overwrite-methods-in-discourse-utilities/53408/5 "2016-11-27T17:12:58Z")

</div>

Still no luck. I’m unable to find a workaround to overwrite `getUploadMarkdown`. It won’t let me overwrite it. `getUploadMarkdown is read-only`. Any help?

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [November 29, 2016, 8:36am UTC](https://meta.discourse.org/t/overwrite-methods-in-discourse-utilities/53408/6 "2016-11-29T08:36:54Z")

</div>

I spent some time trying to figure this out and didn’t find an obvious way to do it. What makes sense to me is reopening the composer-editor component and making the changes there. It would be possible to override the `_bindUploadTarget` function that calls `getUploadMarkdown`, but that seems like a bad idea.

If `getUploadMarkdown` was called inside of a function in `composer-editor.js.es6`, it would be possible to do something like this in a site customization - for testing this I removed `wav` files from the audio file list:

```js

// composer-editor.js.es6
...
_getUploadMarkdown(upload) {
    return getUploadMarkdown(upload);
},
...

<script>
    var ComposerEditor = require('discourse/components/composer-editor').default;
    var uploadLocation = require('discourse/lib/utilities').uploadLocation;
    
    ComposerEditor.reopen({
        _getUploadMarkdown: function(upload) {
            if (!Discourse.SiteSettings.prevent_anons_from_downloading_files && (/\.(wav)$/i).test(upload.original_filename)) {
                
                return uploadLocation(upload.url);
            }
            
            return this._super(upload);
        }
    }); 
</script>

```

Maybe there’s a way to do something similar by doing something directly with the `getUploadMarkdown` import.

---

<div class="post-metadata">

### Author: ![leo.proctor](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/leo.proctor/32/216158_2.png) [@leo.proctor](https://meta.discourse.org/u/leo.proctor)
#### Post date: [November 29, 2016, 5:52pm UTC](https://meta.discourse.org/t/overwrite-methods-in-discourse-utilities/53408/7 "2016-11-29T17:52:00Z")

</div>

Thanks for your efforts Simon. Yeah, I ended up overriding `_bindUploadTarget` and defined `getCustomUploadMarkdown`. And it works fine for now.

> ComposerEditor.reopen({  
> \_bindUploadTarget() {  
> …  
> const markdown = getCustomUploadMarkdown(upload);  
> …  
> }  
> )};
