<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="51008" data-post-id="51008">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tmbb" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tmbb
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Maybe I’m misunderstanding you, but are you using a VDOM both on the server and the client? Why not sending state through the network and allow the client to resolve the state into the UI using a VDOM?</p>
<p>This is the approach I intend to take: run VueJS on the client and sent state. The Elixir code doesn’t deal with the DOM at all.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="51008" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/drab-remote-controlled-frontend-framework-for-phoenix/3277/222">Post #221</a>
	                </div>
	            </div>
              <div id="likers-container-51008" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="51008"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #221"></div>
  </section>
</div>
    <div class="postbit" id="51033" data-post-id="51033">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="grych" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/grych/120/5610_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  grych
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Drab</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="grych" data-post="221" data-topic="3277">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/grych/48/5610_2.png" class="avatar"> grych:</div>
<blockquote>
<p>Looks like this answer convinced myself to safe-by-default idea <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
</blockquote>
</aside>
<p>By the other hand, we mostly use Drab to send htmls, not safe texts.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="51033" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/drab-remote-controlled-frontend-framework-for-phoenix/3277/223">Post #222</a>
	                </div>
	            </div>
              <div id="likers-container-51033" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="51033"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #222"></div>
  </section>
</div>
    <div class="postbit" id="51034" data-post-id="51034">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tmbb" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tmbb
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I think <code>insert_html</code> should be unsafe by default. You’re sending HTML, not text.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="51034" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/drab-remote-controlled-frontend-framework-for-phoenix/3277/224">Post #223</a>
	                </div>
	            </div>
              <div id="likers-container-51034" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="51034"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #223"></div>
  </section>
</div>
    <div class="postbit" id="51041" data-post-id="51041">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="vic" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/vic/120/11426_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  vic
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Asdf Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>My experiment was trying to remove as much JS from the client as possible, and just like Drab, try to send the entire view from the server to the client. So Bard is actually creating a stream of vdom AST that is sent to the server (the complete view at first and updates as they are produced over time), but since the View is just a function of the State, we could very easily send any portion of the state itself instead of the vdom produced by it.</p>
<p>Actually I have been thinking about something like what you mention for a few weeks but again havent had time to actually refactor Bard for it. This change would let you send as much as it makes sense for you from the server, and write as much JS on the client as you want. For example, you could send the complete vdom AST for react just to render (my original plan) or just send the props and use normal React components on the client, or send any bits of state for clients that can handle Observable streams, say polymer/angular/vue and let those libs mess with DOM updates.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="51041" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/drab-remote-controlled-frontend-framework-for-phoenix/3277/225">Post #224</a>
	                </div>
	            </div>
              <div id="likers-container-51041" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="51041"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #224"></div>
  </section>
</div>
    <div class="postbit" id="51045" data-post-id="51045">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tmbb" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tmbb
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>(this might be veering a little offtopic, but I’ll answer here anyway, because it’s related to Drab, and might provide some ideas for someone who wants to write a Drab client that interfaces with different Javascript libraries)</p>
<p>Ok, my experiment is the philosophical opposite of yours: trying to remove as much DOM from the server as possible <img src="https://forum.elixirforum.com/images/emoji/apple/smile.png?v=15" title=":smile:" class="emoji" alt=":smile:" loading="lazy" width="20" height="20"> Javascript is already very good at manipulating the DOM. This means something like React handles the DOM on the client and the server sends props.</p>
<p>Actually I’m using VueJS instead of React because:</p>
<ol>
<li>I’m more familiar with VueJS</li>
<li>By default, VueJS comes with a powerful template language which is natural to use and parse from Elixir (so that I can customize the templates a little with extra event listeners and other goods to make it work). Unlike React, writing VueJS templates doesn’t feel like writing Javascript. It feels a lot like writing EEx, which means that using it mixed with Elixir function calls doesn’t feel out of place.</li>
<li>I really like the way VueJS uses events with special syntax sugar for databinding, and how that makes it useful to effortlessly create complex input components which sync with your model (like datepickers, map location pickers, etc.)</li>
</ol>
<p>Until the Weex project is more well developed, VueJS is a big No for your use case, which require React Native, but if you’re developing for the web, it’s quite attractive.</p>
<p>This approach of sending pure values over the network might be useful too if you want to be renderer-agnostic. I could have a Qt-based client, for example (I have an unpublished React-like library for PyQt that would make a pretty good fit with this approach).</p>
<p>EDIT: I don’t think of these experiments as competitors in the capitalistic sense of trying to fight over user mindshare. I think that there is space for all these approaches, and they all can feed on each other for ideas or implementation details.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="51045" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/drab-remote-controlled-frontend-framework-for-phoenix/3277/226">Post #225</a>
	                </div>
	            </div>
              <div id="likers-container-51045" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="51045"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #225"></div>
  </section>
</div>
    <div class="postbit" id="51054" data-post-id="51054">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="robobakery" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/robobakery/120/9739_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  robobakery
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h2><a name="p-51054-ive-got-noticed-that-author-is-making-an-effort-to-solve-problems-including-this-from-post216-i-just-choose-to-modifying-my-css-and-i-will-be-waiting-for-it-1" class="anchor" href="#p-51054-ive-got-noticed-that-author-is-making-an-effort-to-solve-problems-including-this-from-post216-i-just-choose-to-modifying-my-css-and-i-will-be-waiting-for-it-1" aria-label="Heading link" rel="nofollow"></a>I’ve got noticed that author is making an effort to solve problems including this. (from post#216)<br>
I just choose to modifying my css, and I will be waiting for it! <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></h2>
<p>Changing extension from .html.eex to .html.drab breaks some stylings<br>
by automatically adding <span></span> wrapper to each elements</p>
<p>Is there anyway to avoid this problem?</p>
<pre><code>&lt;ul class="tab tab-block"&gt;
    &lt;span drab-ampere="gi3dqnrrg4yti"&gt;
        &lt;li drab-ampere="he4tmmztha4ds" id="hero_slide_tab_0" class="tab-item active active-tab"&gt;
            &lt;a drab-ampere="giztiobrgq4q" onclick="onSelectHeroSlide(0)" style="cursor: pointer;"&gt;슬라이드-0&lt;/a&gt;
         &lt;/li&gt;
         ...
    &lt;/span&gt;
&lt;/ul&gt;
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="51054" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/drab-remote-controlled-frontend-framework-for-phoenix/3277/227">Post #226</a>
	                </div>
	            </div>
              <div id="likers-container-51054" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="51054"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #226"></div>
  </section>
</div>
    <div class="postbit" id="51058" data-post-id="51058">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="OvermindDL1" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/OvermindDL1/120/2677_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  OvermindDL1
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="tmbb" data-post="224" data-topic="3277" data-full="true">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/t/77aa72/48.png" class="avatar"> tmbb:</div>
<blockquote>
<p>I think insert_html should be unsafe by default. You’re sending HTML, not text.</p>
</blockquote>
</aside>
<p>I think it should be safe regardless, you may want to put user input into the html you are sending, and remembering to escape their input <em>will</em> be forgotten.  At least with it being safe by default you will immediately see it escaped and thus can then just put ~E in front of it or so.  ^.^</p>
<aside class="quote no-group" data-username="robobakery" data-post="227" data-topic="3277">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/robobakery/48/9739_2.png" class="avatar"> robobakery:</div>
<blockquote>
<p>Changing extension from .html.eex to .html.drab breaks some stylings<br>
by automatically adding  wrapper to each elements</p>
</blockquote>
</aside>
<p>The wrapper is gone in the version 6 and above.  <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="51058" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/drab-remote-controlled-frontend-framework-for-phoenix/3277/228">Post #227</a>
	                </div>
	            </div>
              <div id="likers-container-51058" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="51058"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #227"></div>
  </section>
</div>
    <div class="postbit" id="51797" data-post-id="51797">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="robobakery" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/robobakery/120/9739_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  robobakery
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Anybody knows how to deal with special charactors?</p>
<p>Using special characters in form, and input causes error.</p>
<p>for example,<br>
(1) % causes invalid www-form error (encoded form of ascii like %25 is okay)<br>
(2) &amp; makes my input params to be divided.</p>
<p>and because of (2), when handling wyswig editor’s innerHTML to be escaped also causes problems.</p>
<p>my form is like below</p>
<pre><code>&lt;form&gt;
  &lt;div class="form-group"&gt;
    &lt;label for="accordion_body" class="form-label"&gt;body&lt;/label&gt;
    &lt;textarea id="accordion_body" name="accordion_body"&gt;&lt;%= @accordion.body %&gt;&lt;/textarea&gt;
  &lt;/div&gt;
  &lt;input id="widget_name_of_accordions" name="widget_name" value="accordion" class="hidden"/&gt;
  &lt;button class="btn btn-primary hidden" drab-click="save_accordion"&gt;Save&lt;/button&gt;
&lt;/form&gt;
</code></pre>
<p>if i type input like this.<br>
<code>accordion_body: Default Text will be like&amp;lt ;THIS&amp;gt ;</code></p>
<p>and i inspect sender params,</p>
<pre><code>%{"accordion_body" =&gt; "Default Text will be like",
  "lt;THIS" =&gt; nil, "gt;" =&gt; nil,
  "widget_name" =&gt; "accordion"}
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="51797" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/drab-remote-controlled-frontend-framework-for-phoenix/3277/229">Post #228</a>
	                </div>
	            </div>
              <div id="likers-container-51797" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="51797"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #228"></div>
  </section>
</div>
    <div class="postbit" id="51808" data-post-id="51808">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="grych" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/grych/120/5610_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  grych
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Creator of Drab</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for sharing the problem, it is obviously a bug while parsing params and need to be fixed.<br>
Could you please create an issue on <a href="https://github.com/grych/drab" rel="noopener nofollow ugc">github</a> so it won’t be forgotten.</p>
<p>Thanks again!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="51808" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/drab-remote-controlled-frontend-framework-for-phoenix/3277/230">Post #229</a>
	                </div>
	            </div>
              <div id="likers-container-51808" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="51808"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #229"></div>
  </section>
</div>
    <div class="postbit" id="52183" data-post-id="52183">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="robobakery" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/robobakery/120/9739_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  robobakery
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Using multiple drab partials in one template is not binding assigns properly.</p>
<p>How can I handle this?</p>
<blockquote>
<p>[error] Process <a class="hashtag-cooked" href="/tag/pid/2279" data-type="tag" data-slug="pid" data-id="2279" data-style-type="icon" data-icon="tag" rel="nofollow"><span class="hashtag-icon-placeholder"><svg class="fa d-icon d-icon-square-full svg-icon svg-node"><use href="#square-full"></use></svg></span><span>pid</span></a>&lt;0.3488.0&gt; raised an exception<br>
** (ArgumentError) Assign <span class="mention">@services</span> not found in Drab EEx template</p>
</blockquote>
<blockquote>
<p>Please make sure all proper assigns have been set. If this<br>
is a child template, ensure assigns are given explicitly by<br>
the parent template as they are not automatically forwarded.</p>
</blockquote>
<blockquote>
<p>Available assigns:<br>
[:hero_slides, :page]</p>
</blockquote>
<p>I ensured to put <code>:hero_slides</code> and <code>:sections</code> to assigns.<br>
When I change the order of each partials, then I got</p>
<blockquote>
<p>Available assigns:<br>
[:services, :page]</p>
</blockquote>
<p>some of my codes are like below.</p>
<pre><code># edit.html.eex

&lt;%= for widget &lt;- @page.widgets do %&gt;
    &lt;%= if "hero_slides" == widget do %&gt;
        &lt;%= render "hero-slides-edit.html", assigns %&gt;
      &lt;/div&gt;
    &lt;% end %&gt;
    &lt;%= if "sections" == widget do %&gt;
        &lt;%= render "sections-edit.html", assigns %&gt;
      &lt;/div&gt;
    &lt;% end %&gt;
&lt;% end %&gt;
</code></pre>
<p>and</p>
<pre><code># hero_slides.html.drab

&lt;form id="hero_slides_edit"&gt;
    &lt;%= for {hero_slide, idx} &lt;- Enum.with_index(@hero_slides) do %&gt;
        ...
    &lt;% end %&gt;
    &lt;button class="btn btn-primary" drab-click="save_all_in_widget"&gt;Save&lt;/button&gt;
&lt;/form&gt;
</code></pre>
<p>and</p>
<pre><code># sections.html.drab

&lt;form id="sections_edit"&gt;
    &lt;%= for {section, idx} &lt;- Enum.with_index(@sections) do %&gt;
        ...
    &lt;% end %&gt;
    &lt;button class="btn btn-primary" drab-click="save_all_in_widget"&gt;Save&lt;/button&gt;
&lt;/form&gt;
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="52183" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/drab-remote-controlled-frontend-framework-for-phoenix/3277/231">Post #230</a>
	                </div>
	            </div>
              <div id="likers-container-52183" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="52183"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #230"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/3277/load_more?page=24">Load more posts (258 remaining)</a>
</div></template></turbo-stream>