# Plugin-outlet incorrectly handles multiple plugins at the same outlet

**URL:** https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206
**Category:** Bug
**Created:** [August 17, 2015, 4:03pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206 "2015-08-17T16:03:01Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![dmitry\_fedyuk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/dmitry_fedyuk/32/293153_2.png) [@dmitry\_fedyuk](https://meta.discourse.org/u/dmitry_fedyuk)
#### Post date: [August 17, 2015, 4:03pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/1 "2015-08-17T16:03:01Z")

</div>

Wrong code is:

> <https://github.com/discourse/discourse/blob/v1.4.0.beta9/app/assets/javascripts/discourse/helpers/plugin-outlet.js.es6#L158>

Must be `Ember.ContainerView.extend({tagName: ''})` instead of `Ember.ContainerView`.  
The current wrong code **breaks HTML markup** in cases where HTML syntax does not allow wrapper `DIV` tag.  
An example is `admin-menu` plugin outlet:

> <https://github.com/discourse/discourse/blob/v1.4.0.beta9/app/assets/javascripts/admin/templates/admin.hbs#L26>

If there are multiple `admin-menu` connectors then Discourse wrongly renders them as:

```plaintext
<ul>
	<!-- standard menu items: -->
	<li></li>
	<li></li>
	<!-- admin-menu connectors: -->
	<div>
		<li></li>
		<li></li>
	</div>
</ul>

```

---

<div class="post-metadata">

### Author: ![Mittineague](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mittineague/32/114259_2.png) [@Mittineague](https://meta.discourse.org/u/Mittineague)
#### Post date: [August 17, 2015, 4:14pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/2 "2015-08-17T16:14:49Z")

</div>

I noticed this last May with the hamburger menu’s (aka sitemap) plugin-outlet but never got around to digging into it.

[https://meta.discourse.org/t/auto-closing-divs/29159/19?u=mittineague](https://meta.discourse.org/t/auto-closing-divs/29159/19)

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [August 17, 2015, 8:50pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/3 "2015-08-17T20:50:14Z")

</div>

What you are asking for here is a container view without a container view… @eviltrout this is gonna be might tricky if we decide to support this.

---

<div class="post-metadata">

### Author: ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### Post date: [August 17, 2015, 9:24pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/4 "2015-08-17T21:24:15Z")

</div>

A container view can have a `tagName`, I just have to pass it through. Should not be too hard.

---

<div class="post-metadata">

### Author: ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### Post date: [August 18, 2015, 3:58pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/5 "2015-08-18T15:58:05Z")

</div>

Oops I see what you mean Sam. If I apply the tagname to the `ContainerView` it’s not what you want, because then you are expecting the children to have `li` too.

I’m gonna ask people about this. Maybe I can append to the `Morph`.

---

<div class="post-metadata">

### Author: ![dmitry\_fedyuk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/dmitry_fedyuk/32/293153_2.png) [@dmitry\_fedyuk](https://meta.discourse.org/u/dmitry_fedyuk)
#### Post date: [August 18, 2015, 4:18pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/6 "2015-08-18T16:18:07Z")

</div>

Replacing `Ember.ContainerView` to `Ember.ContainerView.extend({tagName: ''})` as I described in the first message **definitely works** , I have tested it for my multiple plugins at `admin-menu` outlet.

---

<div class="post-metadata">

### Author: ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### Post date: [August 18, 2015, 4:26pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/7 "2015-08-18T16:26:00Z")

</div>

It didn’t work when I tried it. If you pass the `tagName` to the `ContainerView` the container gets the `li` tag, but then the children get `div` tags. So adding two `<li`\> doesn’t work.

![](https://global.discourse-cdn.com/meta/original/3X/d/1/d18334ca9ca21d9a2f92ea0046cdd02e1bf74475.png)

---

<div class="post-metadata">

### Author: ![cpradio](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cpradio/32/4970_2.png) [@cpradio](https://meta.discourse.org/u/cpradio)
#### Post date: [August 18, 2015, 4:42pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/8 "2015-08-18T16:42:56Z")

</div>

Except, I think that is valid HTML now (as of HTML 5). I think li can contain block elements (such as div), so that is less of a problem than the li being wrapped in a div.

---

<div class="post-metadata">

### Author: ![dmitry\_fedyuk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/dmitry_fedyuk/32/293153_2.png) [@dmitry\_fedyuk](https://meta.discourse.org/u/dmitry_fedyuk)
#### Post date: [August 18, 2015, 4:44pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/9 "2015-08-18T16:44:50Z")

</div>

![](https://global.discourse-cdn.com/meta/original/3X/8/7/87bf42e57268aeefeb58e43a7571891f12927014.png) 

```plaintext
<li id="ember1719" class="ember-view">  		
	<a id="ember1993" class="ember-view" href="/admin/files">Files</a>
</li>
<li id="ember1724" class="ember-view">  		
	<a id="ember2020" class="ember-view" href="/admin/shop">Shop</a>
</li>

```

**plugins/df-restrict-files/assets/javascripts/connectors/admin-menu/df-files.js.es6**

```plaintext
import NavItem from 'discourse/components/nav-item';
export default NavItem.extend({
	_init: function() {
		this.set('route', 'adminFiles');
		this.set('label', 'df.files.title');
	}.on('init')
});

```

**plugins/df-restrict-files/assets/javascripts/connectors/admin-menu/df-files.hbs**

```plaintext
{{#if routeParam}}
	{{#link-to route routeParam}}{{i18n label}}{{/link-to}}
{{else}}
	{{#if route}}
		{{#link-to route}}{{i18n label}}{{/link-to}}
	{{else}}
		{{#if path}}
			<a href="{{unbound fullPath}}" data-auto-route="true">{{i18n label}}</a>
		{{else}}
			<a href="{{unbound href}}" data-auto-route="true">{{i18n label}}</a>
		{{/if}}
	{{/if}}
{{/if}}

```

---

<div class="post-metadata">

### Author: ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### Post date: [August 18, 2015, 6:18pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/10 "2015-08-18T18:18:14Z")

</div>

Can you show more of your HTML snippet? I want to see what the `<li>` tags are wrapped in. I am seeing different results.

---

<div class="post-metadata">

### Author: ![dmitry\_fedyuk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/dmitry_fedyuk/32/293153_2.png) [@dmitry\_fedyuk](https://meta.discourse.org/u/dmitry_fedyuk)
#### Post date: [August 18, 2015, 6:35pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/11 "2015-08-18T18:35:58Z")

</div>

Wrapped in UL, of course.

---

<div class="post-metadata">

### Author: ![nikdavis](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nikdavis/32/115361_2.png) [@nikdavis](https://meta.discourse.org/u/nikdavis)
#### Post date: [June 22, 2016, 3:11am UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/12 "2016-06-22T03:11:41Z")

</div>

Any progress on this? I’d be happy if I could get one plugin to render w/o a wrapping div.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [June 22, 2016, 3:17am UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/13 "2016-06-22T03:17:14Z")

</div>

I think the only way to do this would be to only allow widgets for these cases, @eviltrout would that be doable?

---

<div class="post-metadata">

### Author: ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### Post date: [June 22, 2016, 2:20pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/14 "2016-06-22T14:20:21Z")

</div>

Even widgets require a master container div. @nikdavis is your situation the same menu as above? Or elsewhere?

---

<div class="post-metadata">

### Author: ![nikdavis](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nikdavis/32/115361_2.png) [@nikdavis](https://meta.discourse.org/u/nikdavis)
#### Post date: [June 22, 2016, 4:48pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/15 "2016-06-22T16:48:15Z")

</div>

Different. I’m working on the user-activity-bottom plugin outlet. The `.nav-stacked` styling uses a child selector which breaks on the outlet.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [June 22, 2016, 9:44pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/16 "2016-06-22T21:44:19Z")

</div>

In theory with a widget container we could use metamorphs optionally for the extend a ul option

---

<div class="post-metadata">

### Author: ![eviltrout](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eviltrout/32/5275_2.png) [@eviltrout](https://meta.discourse.org/u/eviltrout)
#### Post date: [June 24, 2016, 2:26pm UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/17 "2016-06-24T14:26:44Z")

</div>

Sure a widget could be mounted with a metamorph or something similar - the problem is you always need a `{{mount-widget}}` to start hosting them and that needs a tag.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [November 28, 2016, 3:15am UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/18 "2016-11-28T03:15:05Z")

</div>

A post was split to a new topic: [Allow registrations of components as plugin outlets](https://meta.discourse.org/t/allow-registrations-of-components-as-plugin-outlets/53464)

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [November 28, 2016, 3:14am UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/19 "2016-11-28T03:14:20Z")

</div>

Also, important to note, the OP is resolved here as of latest, so I might as well close and split.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [November 28, 2016, 3:14am UTC](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206/20 "2016-11-28T03:14:26Z")

</div>



[Next page](https://meta.discourse.org/t/plugin-outlet-incorrectly-handles-multiple-plugins-at-the-same-outlet/32206.md?page=2)
