jenkins-bot has submitted this change and it was merged.

Change subject: Remove preview related code
......................................................................


Remove preview related code

Preview related code is unused now that we are using VE to preview,
this patch removes all the unused code.

Change-Id: If19fc8ec1d50d94451154558eb80277d72814981
---
M Resources.php
M handlebars/compiled/flow_block_header.handlebars.php
M handlebars/compiled/flow_block_header_edit.handlebars.php
M handlebars/compiled/flow_block_header_undo_edit.handlebars.php
M handlebars/compiled/flow_block_topic.handlebars.php
M handlebars/compiled/flow_block_topic_lock.handlebars.php
M handlebars/compiled/flow_block_topic_moderate_post.handlebars.php
M handlebars/compiled/flow_block_topic_moderate_topic.handlebars.php
M handlebars/compiled/flow_block_topic_undo_edit.handlebars.php
M handlebars/compiled/flow_block_topiclist.handlebars.php
M handlebars/compiled/flow_block_topiclist_newtopic.handlebars.php
M handlebars/compiled/flow_block_topicsummary_edit.handlebars.php
M handlebars/compiled/flow_block_topicsummary_undo_edit.handlebars.php
M handlebars/compiled/flow_post.handlebars.php
M handlebars/flow_block_header_edit.handlebars
M handlebars/flow_block_header_undo_edit.handlebars
M handlebars/flow_block_topic_undo_edit.handlebars
M handlebars/flow_block_topicsummary_edit.handlebars
M handlebars/flow_block_topicsummary_undo_edit.handlebars
M handlebars/flow_edit_post.partial.handlebars
M handlebars/flow_header_detail.partial.handlebars
M handlebars/flow_newtopic_form.partial.handlebars
M handlebars/flow_post.partial.handlebars
M handlebars/flow_post_inner.partial.handlebars
M handlebars/flow_post_meta_actions.partial.handlebars
D handlebars/flow_preview.partial.handlebars
D handlebars/flow_preview_warning.partial.handlebars
M handlebars/flow_reply_form.partial.handlebars
M handlebars/flow_topic.partial.handlebars
M handlebars/flow_topic_titlebar.partial.handlebars
M handlebars/flow_topic_titlebar_lock.partial.handlebars
M i18n/en.json
M i18n/qqq.json
M modules/editor/editors/ext.flow.editors.AbstractEditor.js
M modules/editor/editors/visualeditor/ext.flow.editors.visualeditor.js
M modules/engine/components/board/base/flow-board-interactive-events.js
D modules/engine/components/board/base/flow-board-misc.js
D modules/engine/components/board/features/flow-board-preview.js
M modules/engine/components/common/flow-component-events.js
M modules/engine/misc/mw-ui.enhance.js
D modules/styles/board/content-preview.less
M modules/styles/board/form-actions.less
M modules/styles/board/topic/post.less
M modules/styles/js.less
M tests/browser/features/reply.feature
M tests/browser/features/step_definitions/reply_steps.rb
M tests/browser/features/support/pages/flow_page.rb
M tests/qunit/engine/components/board/test_flow-board.js
48 files changed, 88 insertions(+), 689 deletions(-)

Approvals:
  Matthias Mullie: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/Resources.php b/Resources.php
index 8564a3e..e10c111 100644
--- a/Resources.php
+++ b/Resources.php
@@ -72,7 +72,6 @@
                        
'handlebars/flow_post_moderation_state.partial.handlebars',
                        'handlebars/flow_post_replies.partial.handlebars',
                        'handlebars/flow_post.handlebars',
-                       'handlebars/flow_preview_warning.partial.handlebars',
                        'handlebars/flow_reply_form.partial.handlebars',
                        'handlebars/flow_subscribed.partial.handlebars',
                        'handlebars/flow_tooltip_subscribed.partial.handlebars',
@@ -111,8 +110,6 @@
                        'flow-post-action-unsuppress-post',
                        'flow-post-action-restore-post',
                        'flow-post-action-undo-moderation',
-                       "flow-preview-return-edit-post",
-                       'flow-preview',
                        'flow-recent-topics',
                        'flow-reply-submit',
                        'flow-reply-topic-title-placeholder',
@@ -161,9 +158,6 @@
                        'flow-delete-post-content',
                        'flow-suppress-title-content',
                        'flow-suppress-post-content',
-                       // Previews
-                       'flow-preview-warning',
-                       'flow-anonymous',
                        // Core messages needed
                        'blocklink',
                        'contribslink',
@@ -290,7 +284,6 @@
                        'styles/board/timestamps.less',
                        'styles/board/replycount.less',
                        'styles/js.less',
-                       'styles/board/content-preview.less',
                        'styles/board/form-actions.less',
                        'styles/board/terms-of-use.less',
                        'styles/board/editor-switcher.less',
@@ -334,8 +327,6 @@
 
                        // Component: FlowBoardComponent
                        'engine/components/board/flow-board.js',
-                       // Also needed for event log
-                       'engine/components/board/base/flow-board-misc.js',
                ),
                'dependencies' => array(
                        'oojs',
@@ -380,7 +371,6 @@
                'dependencies' => array(
                        'ext.flow.components',
                        'ext.flow.editor',
-                       'ext.flow.preview',
                        'jquery.throttle-debounce',
                        'mediawiki.jqueryMsg',
                        'ext.flow.jquery.conditionalScroll',
@@ -401,16 +391,6 @@
                        'vendor/Storer.js',
                ),
        ) + $mobile,
-       'ext.flow.preview' => $flowResourceTemplate + array(
-               'scripts' => array(
-                       
'engine/components/board/features/flow-board-preview.js',
-                       // wfBaseConvert ported to js
-                       'engine/misc/flow-baseconvert.js',
-               ),
-               'dependencies' => array(
-                       'ext.flow.components',
-               ),
-       ) + $mobile,
        'ext.flow.undo' => $flowResourceTemplate + array(
                'scripts' => array(
                        // this must be last (of everything loaded.  otherwise 
a components
@@ -421,7 +401,6 @@
                // minimal subset for the undo pages
                'dependencies' => array(
                        'ext.flow.components',
-                       'ext.flow.preview',
                ),
        ) + $mobile,
        'ext.flow.editor' => $flowResourceTemplate + array(
diff --git a/handlebars/compiled/flow_block_header.handlebars.php 
b/handlebars/compiled/flow_block_header.handlebars.php
index 72755a2..06e2bcf 100644
--- a/handlebars/compiled/flow_block_header.handlebars.php
+++ b/handlebars/compiled/flow_block_header.handlebars.php
@@ -28,17 +28,17 @@
 '.((LCRun3::ifvar($cx, ((isset($in['revision']['content']) && 
is_array($in['revision'])) ? $in['revision']['content'] : null))) ? '           
 '.LCRun3::ch($cx, 'escapeContent', 
array(array(((isset($in['revision']['content']['format']) && 
is_array($in['revision']['content'])) ? $in['revision']['content']['format'] : 
null),((isset($in['revision']['content']['content']) && 
is_array($in['revision']['content'])) ? $in['revision']['content']['content'] : 
null)),array()), 'encq').'
 ' : '').'       
 
-'.((!LCRun3::ifvar($cx, ((isset($in['isPreview']) && is_array($in)) ? 
$in['isPreview'] : null))) ? '           <div class="flow-board-header-nav">
-'.((LCRun3::ifvar($cx, ((isset($in['revision']['actions']['edit']) && 
is_array($in['revision']['actions'])) ? $in['revision']['actions']['edit'] : 
null))) ? '                         <a 
href="'.htmlentities((string)((isset($in['revision']['actions']['edit']['url']) 
&& is_array($in['revision']['actions']['edit'])) ? 
$in['revision']['actions']['edit']['url'] : null), ENT_QUOTES, 'UTF-8').'"
-                                       
data-flow-api-handler="activateEditHeader"
-                                       data-flow-api-target="< 
.flow-board-header"
-                                       
data-flow-interactive-handler="apiRequest"
-                                       class="mw-ui-button mw-ui-progressive  
mw-ui-quiet flow-board-header-icon flow-ui-tooltip-target"
-                                       
title="'.htmlentities((string)((isset($in['revision']['actions']['edit']['title'])
 && is_array($in['revision']['actions']['edit'])) ? 
$in['revision']['actions']['edit']['title'] : null), ENT_QUOTES, 'UTF-8').'">
-                                               <span class="wikiglyph 
wikiglyph-pencil"></span>
-                               </a>
-' : '').'              </div>
-' : '').'</div>
+       <div class="flow-board-header-nav">
+'.((LCRun3::ifvar($cx, ((isset($in['revision']['actions']['edit']) && 
is_array($in['revision']['actions'])) ? $in['revision']['actions']['edit'] : 
null))) ? '                 <a 
href="'.htmlentities((string)((isset($in['revision']['actions']['edit']['url']) 
&& is_array($in['revision']['actions']['edit'])) ? 
$in['revision']['actions']['edit']['url'] : null), ENT_QUOTES, 'UTF-8').'"
+                          data-flow-api-handler="activateEditHeader"
+                          data-flow-api-target="< .flow-board-header"
+                          data-flow-interactive-handler="apiRequest"
+                          class="mw-ui-button mw-ui-progressive  mw-ui-quiet 
flow-board-header-icon flow-ui-tooltip-target"
+                          
title="'.htmlentities((string)((isset($in['revision']['actions']['edit']['title'])
 && is_array($in['revision']['actions']['edit'])) ? 
$in['revision']['actions']['edit']['title'] : null), ENT_QUOTES, 'UTF-8').'">
+                                       <span class="wikiglyph 
wikiglyph-pencil"></span>
+                       </a>
+' : '').'      </div>
+</div>
 ';},),
         'scopes' => array($in),
         'sp_vars' => array('root' => $in),
diff --git a/handlebars/compiled/flow_block_header_edit.handlebars.php 
b/handlebars/compiled/flow_block_header_edit.handlebars.php
index ed7019e..3ff34c4 100644
--- a/handlebars/compiled/flow_block_header_edit.handlebars.php
+++ b/handlebars/compiled/flow_block_header_edit.handlebars.php
@@ -46,7 +46,6 @@
                        <div class="flow-editor">
                                <textarea name="header_content"
                                          class="mw-ui-input"
-                                         
data-flow-preview-template="flow_header_detail.partial"
                                          placeholder="'.LCRun3::ch($cx, 
'l10n', array(array('flow-edit-header-placeholder'),array()), 'encq').'"
                                          data-role="content"
                                >'.((LCRun3::ifvar($cx, 
((isset($in['submitted']['content']) && is_array($in['submitted'])) ? 
$in['submitted']['content'] : null))) ? 
''.htmlentities((string)((isset($in['submitted']['content']) && 
is_array($in['submitted'])) ? $in['submitted']['content'] : null), ENT_QUOTES, 
'UTF-8').'' : 
''.htmlentities((string)((isset($in['revision']['content']['content']) && 
is_array($in['revision']['content'])) ? $in['revision']['content']['content'] : 
null), ENT_QUOTES, 'UTF-8').'').'</textarea>
diff --git a/handlebars/compiled/flow_block_header_undo_edit.handlebars.php 
b/handlebars/compiled/flow_block_header_undo_edit.handlebars.php
index 26cebca..97596a9 100644
--- a/handlebars/compiled/flow_block_header_undo_edit.handlebars.php
+++ b/handlebars/compiled/flow_block_header_undo_edit.handlebars.php
@@ -50,12 +50,7 @@
                <input type="hidden" name="header_prev_revision" 
value="'.htmlentities((string)((isset($in['current']['revisionId']) && 
is_array($in['current'])) ? $in['current']['revisionId'] : null), ENT_QUOTES, 
'UTF-8').'" />
 
                <div class="flow-editor">
-                       <textarea name="topic_content"
-                                 class="mw-ui-input"
-                                 data-role="content"
-                                 
data-flow-preview-template="flow_header_detail.partial"
-                                 
data-flow-preview-title="'.htmlentities((string)((isset($in['articleTitle']) && 
is_array($in)) ? $in['articleTitle'] : null), ENT_QUOTES, 'UTF-8').'"
-                       >'.((LCRun3::ifvar($cx, 
((isset($in['submitted']['content']) && is_array($in['submitted'])) ? 
$in['submitted']['content'] : null))) ? 
''.htmlentities((string)((isset($in['submitted']['content']) && 
is_array($in['submitted'])) ? $in['submitted']['content'] : null), ENT_QUOTES, 
'UTF-8').'' : ''.((LCRun3::ifvar($cx, ((isset($in['undo']['possible']) && 
is_array($in['undo'])) ? $in['undo']['possible'] : null))) ? 
''.htmlentities((string)((isset($in['undo']['content']) && 
is_array($in['undo'])) ? $in['undo']['content'] : null), ENT_QUOTES, 
'UTF-8').'' : 
''.htmlentities((string)((isset($in['current']['content']['content']) && 
is_array($in['current']['content'])) ? $in['current']['content']['content'] : 
null), ENT_QUOTES, 'UTF-8').'').'').'</textarea>
+                       <textarea name="topic_content" class="mw-ui-input" 
data-role="content">'.((LCRun3::ifvar($cx, ((isset($in['submitted']['content']) 
&& is_array($in['submitted'])) ? $in['submitted']['content'] : null))) ? 
''.htmlentities((string)((isset($in['submitted']['content']) && 
is_array($in['submitted'])) ? $in['submitted']['content'] : null), ENT_QUOTES, 
'UTF-8').'' : ''.((LCRun3::ifvar($cx, ((isset($in['undo']['possible']) && 
is_array($in['undo'])) ? $in['undo']['possible'] : null))) ? 
''.htmlentities((string)((isset($in['undo']['content']) && 
is_array($in['undo'])) ? $in['undo']['content'] : null), ENT_QUOTES, 
'UTF-8').'' : 
''.htmlentities((string)((isset($in['current']['content']['content']) && 
is_array($in['current']['content'])) ? $in['current']['content']['content'] : 
null), ENT_QUOTES, 'UTF-8').'').'').'</textarea>
                </div>
 
                <div class="flow-form-actions flow-form-collapsible">
diff --git a/handlebars/compiled/flow_block_topic.handlebars.php 
b/handlebars/compiled/flow_block_topic.handlebars.php
index 1362a66..75b0d5b 100644
--- a/handlebars/compiled/flow_block_topic.handlebars.php
+++ b/handlebars/compiled/flow_block_topic.handlebars.php
@@ -158,12 +158,12 @@
                                   
title="'.htmlentities((string)((isset($in['actions']['unlock']['title']) && 
is_array($in['actions']['unlock'])) ? $in['actions']['unlock']['title'] : 
null), ENT_QUOTES, 'UTF-8').'">'.((LCRun3::ifvar($cx, 
((isset($in['moderationIcons']) && is_array($in)) ? $in['moderationIcons'] : 
null))) ? '<span class="wikiglyph wikiglyph-unlock"></span> ' : 
'').''.LCRun3::ch($cx, 'l10n', array(array(LCRun3::ch($cx, 'concat', 
array(array('flow-',((isset($in['moderationType']) && is_array($in)) ? 
$in['moderationType'] : null),'-action-unlock-topic'),array()), 
'raw')),array()), 'encq').'</a>'.htmlentities((string)((isset($in['noop']) && 
is_array($in)) ? $in['noop'] : null), ENT_QUOTES, 'UTF-8').'</li>' : 
'').'';}).'</section>
 ';},'flow_topic_titlebar' => function ($cx, $in) {return '<div 
class="flow-topic-titlebar">
 '.LCRun3::p($cx, 'flow_topic_titlebar_content', array(array($in),array())).'
-'.((!LCRun3::ifvar($cx, ((isset($in['isPreview']) && is_array($in)) ? 
$in['isPreview'] : null))) ? ''.((LCRun3::ifvar($cx, ((isset($in['watchable']) 
&& is_array($in)) ? $in['watchable'] : null))) ? ''.LCRun3::p($cx, 
'flow_topic_titlebar_watch', array(array($in),array())).'' : '').'             
<div class="flow-menu flow-menu-hoverable">
-                       <div class="flow-menu-js-drop"><a 
href="javascript:void(0);"><span class="wikiglyph 
wikiglyph-ellipsis"></span></a></div>
-                       <ul class="mw-ui-button-container flow-list">
-'.LCRun3::p($cx, 'flow_moderation_actions_list', 
array(array($in),array('moderationType'=>'topic','moderationTarget'=>'title','moderationTemplate'=>'topic','moderationContainerClass'=>'flow-menu','moderationMwUiClass'=>'mw-ui-button','moderationIcons'=>true))).'
                 </ul>
-               </div>
-' : '').'</div>
+'.((LCRun3::ifvar($cx, ((isset($in['watchable']) && is_array($in)) ? 
$in['watchable'] : null))) ? ''.LCRun3::p($cx, 'flow_topic_titlebar_watch', 
array(array($in),array())).'' : '').' <div class="flow-menu 
flow-menu-hoverable">
+               <div class="flow-menu-js-drop"><a 
href="javascript:void(0);"><span class="wikiglyph 
wikiglyph-ellipsis"></span></a></div>
+               <ul class="mw-ui-button-container flow-list">
+'.LCRun3::p($cx, 'flow_moderation_actions_list', 
array(array($in),array('moderationType'=>'topic','moderationTarget'=>'title','moderationTemplate'=>'topic','moderationContainerClass'=>'flow-menu','moderationMwUiClass'=>'mw-ui-button','moderationIcons'=>true))).'
         </ul>
+       </div>
+</div>
 ';},'flow_anon_warning' => function ($cx, $in) {return '<div 
class="flow-anon-warning">
        <div class="flow-anon-warning-mobile">
 '.LCRun3::hbch($cx, 'tooltip', 
array(array(),array('positionClass'=>'down','contextClass'=>'progressive','extraClass'=>'flow-form-collapsible','isBlock'=>true)),
 $in, false, function($cx, $in) {return ''.LCRun3::ch($cx, 'l10nParse', 
array(array('flow-anon-warning',LCRun3::ch($cx, 'linkWithReturnTo', 
array(array('Special:UserLogin'),array()), 'raw'),LCRun3::ch($cx, 
'linkWithReturnTo', array(array('Special:UserLogin/signup'),array()), 
'raw')),array()), 'encq').'';}).' </div>
@@ -191,8 +191,6 @@
                        <textarea 
id="flow-post-'.htmlentities((string)((isset($in['postId']) && is_array($in)) ? 
$in['postId'] : null), ENT_QUOTES, 'UTF-8').'-form-content"
                                  name="topic_content"
                                  required
-                                 data-flow-preview-template="flow_post"
-                                 
data-flow-preview-title="'.htmlentities((string)((isset($in['articleTitle']) && 
is_array($in)) ? $in['articleTitle'] : null), ENT_QUOTES, 'UTF-8').'"
                                  data-flow-expandable="true"
                                  class="mw-ui-input flow-click-interactive"
                                  type="text"
@@ -228,11 +226,11 @@
 '.((LCRun3::ifvar($cx, ((isset($cx['sp_vars']['root']['posts']) && 
is_array($cx['sp_vars']['root'])) ? $cx['sp_vars']['root']['posts'] : null))) ? 
''.LCRun3::sec($cx, ((isset($in['replies']) && is_array($in)) ? $in['replies'] 
: null), $in, true, function($cx, $in) {return ''.LCRun3::hbch($cx, 'eachPost', 
array(array(((isset($cx['sp_vars']['root']) && is_array($cx['sp_vars'])) ? 
$cx['sp_vars']['root'] : null),$in),array()), $in, false, function($cx, $in) 
{return '                            <!-- eachPost topic -->
                                '.LCRun3::ch($cx, 'post', 
array(array(((isset($cx['sp_vars']['root']) && is_array($cx['sp_vars'])) ? 
$cx['sp_vars']['root'] : null),$in),array()), 'encq').'
 ';}).'';}).'' : '').'
-'.((!LCRun3::ifvar($cx, ((isset($in['isPreview']) && is_array($in)) ? 
$in['isPreview'] : null))) ? ''.((LCRun3::ifvar($cx, 
((isset($in['actions']['reply']) && is_array($in['actions'])) ? 
$in['actions']['reply'] : null))) ? ''.LCRun3::hbch($cx, 'ifCond', 
array(array(((isset($cx['sp_vars']['root']['submitted']['postId']) && 
is_array($cx['sp_vars']['root']['submitted'])) ? 
$cx['sp_vars']['root']['submitted']['postId'] : 
null),'===',((isset($in['postId']) && is_array($in)) ? $in['postId'] : 
null)),array()), $in, false, function($cx, $in) {return ''.LCRun3::p($cx, 
'flow_reply_form', array(array($in),array())).'';}, function($cx, $in) {return 
''.LCRun3::hbch($cx, 'progressiveEnhancement', 
array(array(),array('type'=>'replace','target'=>'~ a')), $in, false, 
function($cx, $in) {return ''.LCRun3::p($cx, 'flow_reply_form', 
array(array($in),array())).'';}).'                            <a 
href="'.htmlentities((string)((isset($in['actions']['reply']['url']) && 
is_array($in['actions']['reply'])) ? $in['actions']['reply']['url'] : null), 
ENT_QUOTES, 'UTF-8').'"
-                                  
title="'.htmlentities((string)((isset($in['actions']['reply']['title']) && 
is_array($in['actions']['reply'])) ? $in['actions']['reply']['title'] : null), 
ENT_QUOTES, 'UTF-8').'"
-                                  class="flow-ui-input-replacement-anchor 
mw-ui-input"
-                               >'.LCRun3::ch($cx, 'l10n', 
array(array('flow-reply-topic-title-placeholder',((isset($in['properties']['topic-of-post'])
 && is_array($in['properties'])) ? $in['properties']['topic-of-post'] : 
null)),array()), 'encq').'</a>
-';}).'' : '').'' : '').'</div>
+'.((LCRun3::ifvar($cx, ((isset($in['actions']['reply']) && 
is_array($in['actions'])) ? $in['actions']['reply'] : null))) ? 
''.LCRun3::hbch($cx, 'ifCond', 
array(array(((isset($cx['sp_vars']['root']['submitted']['postId']) && 
is_array($cx['sp_vars']['root']['submitted'])) ? 
$cx['sp_vars']['root']['submitted']['postId'] : 
null),'===',((isset($in['postId']) && is_array($in)) ? $in['postId'] : 
null)),array()), $in, false, function($cx, $in) {return ''.LCRun3::p($cx, 
'flow_reply_form', array(array($in),array())).'';}, function($cx, $in) {return 
''.LCRun3::hbch($cx, 'progressiveEnhancement', 
array(array(),array('type'=>'replace','target'=>'~ a')), $in, false, 
function($cx, $in) {return ''.LCRun3::p($cx, 'flow_reply_form', 
array(array($in),array())).'';}).'                        <a 
href="'.htmlentities((string)((isset($in['actions']['reply']['url']) && 
is_array($in['actions']['reply'])) ? $in['actions']['reply']['url'] : null), 
ENT_QUOTES, 'UTF-8').'"
+                          
title="'.htmlentities((string)((isset($in['actions']['reply']['title']) && 
is_array($in['actions']['reply'])) ? $in['actions']['reply']['title'] : null), 
ENT_QUOTES, 'UTF-8').'"
+                          class="flow-ui-input-replacement-anchor mw-ui-input"
+                       >'.LCRun3::ch($cx, 'l10n', 
array(array('flow-reply-topic-title-placeholder',((isset($in['properties']['topic-of-post'])
 && is_array($in['properties'])) ? $in['properties']['topic-of-post'] : 
null)),array()), 'encq').'</a>
+';}).'' : '').'</div>
 ';},'flow_topiclist_loop' => function ($cx, $in) {return ''.LCRun3::sec($cx, 
((isset($in['roots']) && is_array($in)) ? $in['roots'] : null), $in, true, 
function($cx, $in) {return ''.LCRun3::hbch($cx, 'eachPost', 
array(array(((isset($cx['sp_vars']['root']) && is_array($cx['sp_vars'])) ? 
$cx['sp_vars']['root'] : null),$in),array()), $in, false, function($cx, $in) 
{return ''.LCRun3::p($cx, 'flow_topic', 
array(array($in),array())).'';}).'';}).'';},),
         'scopes' => array($in),
         'sp_vars' => array('root' => $in),
diff --git a/handlebars/compiled/flow_block_topic_lock.handlebars.php 
b/handlebars/compiled/flow_block_topic_lock.handlebars.php
index 2a0dd0f..706a3f7 100644
--- a/handlebars/compiled/flow_block_topic_lock.handlebars.php
+++ b/handlebars/compiled/flow_block_topic_lock.handlebars.php
@@ -41,9 +41,6 @@
                                          class="mw-ui-input"
                                          type="text"
                                          required
-                                         
data-flow-preview-node="moderateReason"
-                                         
data-flow-preview-template="flow_topic_titlebar.partial"
-                                         
data-flow-preview-title="'.htmlentities((string)((isset($in['articleTitle']) && 
is_array($in)) ? $in['articleTitle'] : null), ENT_QUOTES, 'UTF-8').'"
                                >'.((LCRun3::ifvar($cx, 
((isset($cx['sp_vars']['root']['submitted']['reason']) && 
is_array($cx['sp_vars']['root']['submitted'])) ? 
$cx['sp_vars']['root']['submitted']['reason'] : null))) ? 
''.htmlentities((string)((isset($cx['sp_vars']['root']['submitted']['reason']) 
&& is_array($cx['sp_vars']['root']['submitted'])) ? 
$cx['sp_vars']['root']['submitted']['reason'] : null), ENT_QUOTES, 'UTF-8').'' 
: '').'</textarea>
                        </div>
                        <div class="flow-form-actions flow-form-collapsible">
diff --git a/handlebars/compiled/flow_block_topic_moderate_post.handlebars.php 
b/handlebars/compiled/flow_block_topic_moderate_post.handlebars.php
index ff8c4e4..c9aadcf 100644
--- a/handlebars/compiled/flow_block_topic_moderate_post.handlebars.php
+++ b/handlebars/compiled/flow_block_topic_moderate_post.handlebars.php
@@ -84,7 +84,6 @@
                           data-flow-eventlog-entrypoint="reply-post"
                           data-flow-eventlog-forward="
                                   < 
.flow-post:not([data-flow-post-max-depth=\'1\']) .flow-reply-form 
[data-role=\'cancel\'],
-                                  < 
.flow-post:not([data-flow-post-max-depth=\'1\']) .flow-reply-form 
[data-role=\'action\'][name=\'preview\'],
                                   < 
.flow-post:not([data-flow-post-max-depth=\'1\']) .flow-reply-form 
[data-role=\'submit\']
                           "
                        
>'.htmlentities((string)((isset($in['actions']['reply']['text']) && 
is_array($in['actions']['reply'])) ? $in['actions']['reply']['text'] : null), 
ENT_QUOTES, 'UTF-8').'</a>
@@ -208,7 +207,7 @@
                '.LCRun3::ch($cx, 'escapeContent', 
array(array(((isset($in['content']['format']) && is_array($in['content'])) ? 
$in['content']['format'] : null),((isset($in['content']['content']) && 
is_array($in['content'])) ? $in['content']['content'] : null)),array()), 
'encq').'
        </div>
 
-'.((!LCRun3::ifvar($cx, ((isset($in['isPreview']) && is_array($in)) ? 
$in['isPreview'] : null))) ? ''.LCRun3::p($cx, 'flow_post_meta_actions', 
array(array($in),array())).''.LCRun3::p($cx, 'flow_post_actions', 
array(array($in),array())).'' : '').'</div>
+'.LCRun3::p($cx, 'flow_post_meta_actions', 
array(array($in),array())).''.LCRun3::p($cx, 'flow_post_actions', 
array(array($in),array())).'</div>
 ';},'flow_anon_warning' => function ($cx, $in) {return '<div 
class="flow-anon-warning">
        <div class="flow-anon-warning-mobile">
 '.LCRun3::hbch($cx, 'tooltip', 
array(array(),array('positionClass'=>'down','contextClass'=>'progressive','extraClass'=>'flow-form-collapsible','isBlock'=>true)),
 $in, false, function($cx, $in) {return ''.LCRun3::ch($cx, 'l10nParse', 
array(array('flow-anon-warning',LCRun3::ch($cx, 'linkWithReturnTo', 
array(array('Special:UserLogin'),array()), 'raw'),LCRun3::ch($cx, 
'linkWithReturnTo', array(array('Special:UserLogin/signup'),array()), 
'raw')),array()), 'encq').'';}).' </div>
@@ -230,12 +229,7 @@
        <input type="hidden" name="topic_prev_revision" 
value="'.htmlentities((string)((isset($in['revisionId']) && is_array($in)) ? 
$in['revisionId'] : null), ENT_QUOTES, 'UTF-8').'" />
 '.LCRun3::hbch($cx, 'ifAnonymous', array(array(),array()), $in, false, 
function($cx, $in) {return ''.LCRun3::p($cx, 'flow_anon_warning', 
array(array($in),array())).'';}).'
        <div class="flow-editor">
-               <textarea name="topic_content" class="mw-ui-input 
flow-form-collapsible"
-                         data-flow-preview-template="flow_post"
-                         
data-flow-preview-title="'.htmlentities((string)((isset($in['articleTitle']) && 
is_array($in)) ? $in['articleTitle'] : null), ENT_QUOTES, 'UTF-8').'"
-                         
data-flow-creator="'.htmlentities((string)((isset($in['creator']['name']) && 
is_array($in['creator'])) ? $in['creator']['name'] : null), ENT_QUOTES, 
'UTF-8').'"
-                         data-role="content"
-               >'.((LCRun3::ifvar($cx, 
((isset($cx['sp_vars']['root']['rootBlock']['submitted']['content']) && 
is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['content'] : null))) ? 
''.htmlentities((string)((isset($cx['sp_vars']['root']['rootBlock']['submitted']['content'])
 && is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['content'] : null), 
ENT_QUOTES, 'UTF-8').'' : 
''.htmlentities((string)((isset($in['content']['content']) && 
is_array($in['content'])) ? $in['content']['content'] : null), ENT_QUOTES, 
'UTF-8').'').'</textarea>
+               <textarea name="topic_content" class="mw-ui-input 
flow-form-collapsible" data-role="content">'.((LCRun3::ifvar($cx, 
((isset($cx['sp_vars']['root']['rootBlock']['submitted']['content']) && 
is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['content'] : null))) ? 
''.htmlentities((string)((isset($cx['sp_vars']['root']['rootBlock']['submitted']['content'])
 && is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['content'] : null), 
ENT_QUOTES, 'UTF-8').'' : 
''.htmlentities((string)((isset($in['content']['content']) && 
is_array($in['content'])) ? $in['content']['content'] : null), ENT_QUOTES, 
'UTF-8').'').'</textarea>
        </div>
 
        <div class="flow-form-actions flow-form-collapsible">
@@ -258,8 +252,6 @@
                        <textarea 
id="flow-post-'.htmlentities((string)((isset($in['postId']) && is_array($in)) ? 
$in['postId'] : null), ENT_QUOTES, 'UTF-8').'-form-content"
                                  name="topic_content"
                                  required
-                                 data-flow-preview-template="flow_post"
-                                 
data-flow-preview-title="'.htmlentities((string)((isset($in['articleTitle']) && 
is_array($in)) ? $in['articleTitle'] : null), ENT_QUOTES, 'UTF-8').'"
                                  data-flow-expandable="true"
                                  class="mw-ui-input flow-click-interactive"
                                  type="text"
@@ -294,7 +286,7 @@
 '.LCRun3::p($cx, 'flow_post_moderation_state', array(array($in),array())).'    
                                </span>
                                </div>
 ';}).'' : ''.LCRun3::hbch($cx, 'ifCond', 
array(array(((isset($cx['sp_vars']['root']['rootBlock']['submitted']['action']) 
&& is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['action'] : 
null),'===','edit-post'),array()), $in, false, function($cx, $in) {return 
''.LCRun3::hbch($cx, 'ifCond', 
array(array(((isset($cx['sp_vars']['root']['rootBlock']['submitted']['postId']) 
&& is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['postId'] : 
null),'===',((isset($in['postId']) && is_array($in)) ? $in['postId'] : 
null)),array()), $in, false, function($cx, $in) {return ''.LCRun3::p($cx, 
'flow_edit_post', array(array($in),array())).'';}, function($cx, $in) {return 
''.LCRun3::p($cx, 'flow_post_inner', array(array($in),array())).'';}).'';}, 
function($cx, $in) {return ''.LCRun3::p($cx, 'flow_post_inner', 
array(array($in),array())).'';}).'').'
-'.((!LCRun3::ifvar($cx, ((isset($in['isPreview']) && is_array($in)) ? 
$in['isPreview'] : null))) ? ''.LCRun3::p($cx, 'flow_post_replies', 
array(array($in),array())).'' : '').'        </div>
+'.LCRun3::p($cx, 'flow_post_replies', array(array($in),array())).'     </div>
 ';}).'';},),
         'scopes' => array($in),
         'sp_vars' => array('root' => $in),
diff --git a/handlebars/compiled/flow_block_topic_moderate_topic.handlebars.php 
b/handlebars/compiled/flow_block_topic_moderate_topic.handlebars.php
index b3cdc2f..0edf5d1 100644
--- a/handlebars/compiled/flow_block_topic_moderate_topic.handlebars.php
+++ b/handlebars/compiled/flow_block_topic_moderate_topic.handlebars.php
@@ -84,7 +84,6 @@
                           data-flow-eventlog-entrypoint="reply-post"
                           data-flow-eventlog-forward="
                                   < 
.flow-post:not([data-flow-post-max-depth=\'1\']) .flow-reply-form 
[data-role=\'cancel\'],
-                                  < 
.flow-post:not([data-flow-post-max-depth=\'1\']) .flow-reply-form 
[data-role=\'action\'][name=\'preview\'],
                                   < 
.flow-post:not([data-flow-post-max-depth=\'1\']) .flow-reply-form 
[data-role=\'submit\']
                           "
                        
>'.htmlentities((string)((isset($in['actions']['reply']['text']) && 
is_array($in['actions']['reply'])) ? $in['actions']['reply']['text'] : null), 
ENT_QUOTES, 'UTF-8').'</a>
@@ -208,7 +207,7 @@
                '.LCRun3::ch($cx, 'escapeContent', 
array(array(((isset($in['content']['format']) && is_array($in['content'])) ? 
$in['content']['format'] : null),((isset($in['content']['content']) && 
is_array($in['content'])) ? $in['content']['content'] : null)),array()), 
'encq').'
        </div>
 
-'.((!LCRun3::ifvar($cx, ((isset($in['isPreview']) && is_array($in)) ? 
$in['isPreview'] : null))) ? ''.LCRun3::p($cx, 'flow_post_meta_actions', 
array(array($in),array())).''.LCRun3::p($cx, 'flow_post_actions', 
array(array($in),array())).'' : '').'</div>
+'.LCRun3::p($cx, 'flow_post_meta_actions', 
array(array($in),array())).''.LCRun3::p($cx, 'flow_post_actions', 
array(array($in),array())).'</div>
 ';},'flow_anon_warning' => function ($cx, $in) {return '<div 
class="flow-anon-warning">
        <div class="flow-anon-warning-mobile">
 '.LCRun3::hbch($cx, 'tooltip', 
array(array(),array('positionClass'=>'down','contextClass'=>'progressive','extraClass'=>'flow-form-collapsible','isBlock'=>true)),
 $in, false, function($cx, $in) {return ''.LCRun3::ch($cx, 'l10nParse', 
array(array('flow-anon-warning',LCRun3::ch($cx, 'linkWithReturnTo', 
array(array('Special:UserLogin'),array()), 'raw'),LCRun3::ch($cx, 
'linkWithReturnTo', array(array('Special:UserLogin/signup'),array()), 
'raw')),array()), 'encq').'';}).' </div>
@@ -230,12 +229,7 @@
        <input type="hidden" name="topic_prev_revision" 
value="'.htmlentities((string)((isset($in['revisionId']) && is_array($in)) ? 
$in['revisionId'] : null), ENT_QUOTES, 'UTF-8').'" />
 '.LCRun3::hbch($cx, 'ifAnonymous', array(array(),array()), $in, false, 
function($cx, $in) {return ''.LCRun3::p($cx, 'flow_anon_warning', 
array(array($in),array())).'';}).'
        <div class="flow-editor">
-               <textarea name="topic_content" class="mw-ui-input 
flow-form-collapsible"
-                         data-flow-preview-template="flow_post"
-                         
data-flow-preview-title="'.htmlentities((string)((isset($in['articleTitle']) && 
is_array($in)) ? $in['articleTitle'] : null), ENT_QUOTES, 'UTF-8').'"
-                         
data-flow-creator="'.htmlentities((string)((isset($in['creator']['name']) && 
is_array($in['creator'])) ? $in['creator']['name'] : null), ENT_QUOTES, 
'UTF-8').'"
-                         data-role="content"
-               >'.((LCRun3::ifvar($cx, 
((isset($cx['sp_vars']['root']['rootBlock']['submitted']['content']) && 
is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['content'] : null))) ? 
''.htmlentities((string)((isset($cx['sp_vars']['root']['rootBlock']['submitted']['content'])
 && is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['content'] : null), 
ENT_QUOTES, 'UTF-8').'' : 
''.htmlentities((string)((isset($in['content']['content']) && 
is_array($in['content'])) ? $in['content']['content'] : null), ENT_QUOTES, 
'UTF-8').'').'</textarea>
+               <textarea name="topic_content" class="mw-ui-input 
flow-form-collapsible" data-role="content">'.((LCRun3::ifvar($cx, 
((isset($cx['sp_vars']['root']['rootBlock']['submitted']['content']) && 
is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['content'] : null))) ? 
''.htmlentities((string)((isset($cx['sp_vars']['root']['rootBlock']['submitted']['content'])
 && is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['content'] : null), 
ENT_QUOTES, 'UTF-8').'' : 
''.htmlentities((string)((isset($in['content']['content']) && 
is_array($in['content'])) ? $in['content']['content'] : null), ENT_QUOTES, 
'UTF-8').'').'</textarea>
        </div>
 
        <div class="flow-form-actions flow-form-collapsible">
@@ -258,8 +252,6 @@
                        <textarea 
id="flow-post-'.htmlentities((string)((isset($in['postId']) && is_array($in)) ? 
$in['postId'] : null), ENT_QUOTES, 'UTF-8').'-form-content"
                                  name="topic_content"
                                  required
-                                 data-flow-preview-template="flow_post"
-                                 
data-flow-preview-title="'.htmlentities((string)((isset($in['articleTitle']) && 
is_array($in)) ? $in['articleTitle'] : null), ENT_QUOTES, 'UTF-8').'"
                                  data-flow-expandable="true"
                                  class="mw-ui-input flow-click-interactive"
                                  type="text"
@@ -294,7 +286,7 @@
 '.LCRun3::p($cx, 'flow_post_moderation_state', array(array($in),array())).'    
                                </span>
                                </div>
 ';}).'' : ''.LCRun3::hbch($cx, 'ifCond', 
array(array(((isset($cx['sp_vars']['root']['rootBlock']['submitted']['action']) 
&& is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['action'] : 
null),'===','edit-post'),array()), $in, false, function($cx, $in) {return 
''.LCRun3::hbch($cx, 'ifCond', 
array(array(((isset($cx['sp_vars']['root']['rootBlock']['submitted']['postId']) 
&& is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['postId'] : 
null),'===',((isset($in['postId']) && is_array($in)) ? $in['postId'] : 
null)),array()), $in, false, function($cx, $in) {return ''.LCRun3::p($cx, 
'flow_edit_post', array(array($in),array())).'';}, function($cx, $in) {return 
''.LCRun3::p($cx, 'flow_post_inner', array(array($in),array())).'';}).'';}, 
function($cx, $in) {return ''.LCRun3::p($cx, 'flow_post_inner', 
array(array($in),array())).'';}).'').'
-'.((!LCRun3::ifvar($cx, ((isset($in['isPreview']) && is_array($in)) ? 
$in['isPreview'] : null))) ? ''.LCRun3::p($cx, 'flow_post_replies', 
array(array($in),array())).'' : '').'        </div>
+'.LCRun3::p($cx, 'flow_post_replies', array(array($in),array())).'     </div>
 ';}).'';},),
         'scopes' => array($in),
         'sp_vars' => array('root' => $in),
diff --git a/handlebars/compiled/flow_block_topic_undo_edit.handlebars.php 
b/handlebars/compiled/flow_block_topic_undo_edit.handlebars.php
index 180c143..a4c6a16 100644
--- a/handlebars/compiled/flow_block_topic_undo_edit.handlebars.php
+++ b/handlebars/compiled/flow_block_topic_undo_edit.handlebars.php
@@ -51,13 +51,7 @@
                <input type="hidden" name="topic_postId" 
value="'.htmlentities((string)((isset($in['current']['postId']) && 
is_array($in['current'])) ? $in['current']['postId'] : null), ENT_QUOTES, 
'UTF-8').'" />
 
                <div class="flow-editor">
-                       <textarea name="topic_content"
-                                 class="mw-ui-input"
-                                 data-role="content"
-                                 data-flow-preview-template="flow_post"
-                                 
data-flow-preview-title="'.htmlentities((string)((isset($in['articleTitle']) && 
is_array($in)) ? $in['articleTitle'] : null), ENT_QUOTES, 'UTF-8').'"
-                                 
data-flow-username="'.htmlentities((string)((isset($in['current']['creator']['name'])
 && is_array($in['current']['creator'])) ? $in['current']['creator']['name'] : 
null), ENT_QUOTES, 'UTF-8').'"
-                       >'.((LCRun3::ifvar($cx, 
((isset($in['submitted']['content']) && is_array($in['submitted'])) ? 
$in['submitted']['content'] : null))) ? 
''.htmlentities((string)((isset($in['submitted']['content']) && 
is_array($in['submitted'])) ? $in['submitted']['content'] : null), ENT_QUOTES, 
'UTF-8').'' : ''.((LCRun3::ifvar($cx, ((isset($in['undo']['possible']) && 
is_array($in['undo'])) ? $in['undo']['possible'] : null))) ? 
''.htmlentities((string)((isset($in['undo']['content']) && 
is_array($in['undo'])) ? $in['undo']['content'] : null), ENT_QUOTES, 
'UTF-8').'' : 
''.htmlentities((string)((isset($in['current']['content']['content']) && 
is_array($in['current']['content'])) ? $in['current']['content']['content'] : 
null), ENT_QUOTES, 'UTF-8').'').'').'</textarea>
+                       <textarea name="topic_content" class="mw-ui-input" 
data-role="content">'.((LCRun3::ifvar($cx, ((isset($in['submitted']['content']) 
&& is_array($in['submitted'])) ? $in['submitted']['content'] : null))) ? 
''.htmlentities((string)((isset($in['submitted']['content']) && 
is_array($in['submitted'])) ? $in['submitted']['content'] : null), ENT_QUOTES, 
'UTF-8').'' : ''.((LCRun3::ifvar($cx, ((isset($in['undo']['possible']) && 
is_array($in['undo'])) ? $in['undo']['possible'] : null))) ? 
''.htmlentities((string)((isset($in['undo']['content']) && 
is_array($in['undo'])) ? $in['undo']['content'] : null), ENT_QUOTES, 
'UTF-8').'' : 
''.htmlentities((string)((isset($in['current']['content']['content']) && 
is_array($in['current']['content'])) ? $in['current']['content']['content'] : 
null), ENT_QUOTES, 'UTF-8').'').'').'</textarea>
                </div>
 
                <div class="flow-form-actions flow-form-collapsible">
diff --git a/handlebars/compiled/flow_block_topiclist.handlebars.php 
b/handlebars/compiled/flow_block_topiclist.handlebars.php
index 7b36003..69b0d2c 100644
--- a/handlebars/compiled/flow_block_topiclist.handlebars.php
+++ b/handlebars/compiled/flow_block_topiclist.handlebars.php
@@ -120,8 +120,6 @@
                />
                <div class="flow-editor">
                        <textarea name="topiclist_content"
-                                 
data-flow-preview-template="flow_topic.partial"
-                                 data-flow-preview-title-generator="newTopic"
                                  class="mw-ui-input flow-form-collapsible 
mw-ui-input-large"
                                  '.((LCRun3::ifvar($cx, 
((isset($in['isOnFlowBoard']) && is_array($in)) ? $in['isOnFlowBoard'] : 
null))) ? 'style="display:none;"' : '').'
                                  placeholder="'.LCRun3::ch($cx, 'l10n', 
array(array('flow-newtopic-content-placeholder',((isset($cx['sp_vars']['root']['title'])
 && is_array($cx['sp_vars']['root'])) ? $cx['sp_vars']['root']['title'] : 
null)),array()), 'encq').'"
@@ -261,12 +259,12 @@
                                   
title="'.htmlentities((string)((isset($in['actions']['unlock']['title']) && 
is_array($in['actions']['unlock'])) ? $in['actions']['unlock']['title'] : 
null), ENT_QUOTES, 'UTF-8').'">'.((LCRun3::ifvar($cx, 
((isset($in['moderationIcons']) && is_array($in)) ? $in['moderationIcons'] : 
null))) ? '<span class="wikiglyph wikiglyph-unlock"></span> ' : 
'').''.LCRun3::ch($cx, 'l10n', array(array(LCRun3::ch($cx, 'concat', 
array(array('flow-',((isset($in['moderationType']) && is_array($in)) ? 
$in['moderationType'] : null),'-action-unlock-topic'),array()), 
'raw')),array()), 'encq').'</a>'.htmlentities((string)((isset($in['noop']) && 
is_array($in)) ? $in['noop'] : null), ENT_QUOTES, 'UTF-8').'</li>' : 
'').'';}).'</section>
 ';},'flow_topic_titlebar' => function ($cx, $in) {return '<div 
class="flow-topic-titlebar">
 '.LCRun3::p($cx, 'flow_topic_titlebar_content', array(array($in),array())).'
-'.((!LCRun3::ifvar($cx, ((isset($in['isPreview']) && is_array($in)) ? 
$in['isPreview'] : null))) ? ''.((LCRun3::ifvar($cx, ((isset($in['watchable']) 
&& is_array($in)) ? $in['watchable'] : null))) ? ''.LCRun3::p($cx, 
'flow_topic_titlebar_watch', array(array($in),array())).'' : '').'             
<div class="flow-menu flow-menu-hoverable">
-                       <div class="flow-menu-js-drop"><a 
href="javascript:void(0);"><span class="wikiglyph 
wikiglyph-ellipsis"></span></a></div>
-                       <ul class="mw-ui-button-container flow-list">
-'.LCRun3::p($cx, 'flow_moderation_actions_list', 
array(array($in),array('moderationType'=>'topic','moderationTarget'=>'title','moderationTemplate'=>'topic','moderationContainerClass'=>'flow-menu','moderationMwUiClass'=>'mw-ui-button','moderationIcons'=>true))).'
                 </ul>
-               </div>
-' : '').'</div>
+'.((LCRun3::ifvar($cx, ((isset($in['watchable']) && is_array($in)) ? 
$in['watchable'] : null))) ? ''.LCRun3::p($cx, 'flow_topic_titlebar_watch', 
array(array($in),array())).'' : '').' <div class="flow-menu 
flow-menu-hoverable">
+               <div class="flow-menu-js-drop"><a 
href="javascript:void(0);"><span class="wikiglyph 
wikiglyph-ellipsis"></span></a></div>
+               <ul class="mw-ui-button-container flow-list">
+'.LCRun3::p($cx, 'flow_moderation_actions_list', 
array(array($in),array('moderationType'=>'topic','moderationTarget'=>'title','moderationTemplate'=>'topic','moderationContainerClass'=>'flow-menu','moderationMwUiClass'=>'mw-ui-button','moderationIcons'=>true))).'
         </ul>
+       </div>
+</div>
 ';},'flow_reply_form' => function ($cx, $in) {return ''.((LCRun3::ifvar($cx, 
((isset($in['actions']['reply']) && is_array($in['actions'])) ? 
$in['actions']['reply'] : null))) ? '     <form class="flow-post 
flow-reply-form"
              method="POST"
              
action="'.htmlentities((string)((isset($in['actions']['reply']['url']) && 
is_array($in['actions']['reply'])) ? $in['actions']['reply']['url'] : null), 
ENT_QUOTES, 'UTF-8').'"
@@ -281,8 +279,6 @@
                        <textarea 
id="flow-post-'.htmlentities((string)((isset($in['postId']) && is_array($in)) ? 
$in['postId'] : null), ENT_QUOTES, 'UTF-8').'-form-content"
                                  name="topic_content"
                                  required
-                                 data-flow-preview-template="flow_post"
-                                 
data-flow-preview-title="'.htmlentities((string)((isset($in['articleTitle']) && 
is_array($in)) ? $in['articleTitle'] : null), ENT_QUOTES, 'UTF-8').'"
                                  data-flow-expandable="true"
                                  class="mw-ui-input flow-click-interactive"
                                  type="text"
@@ -318,11 +314,11 @@
 '.((LCRun3::ifvar($cx, ((isset($cx['sp_vars']['root']['posts']) && 
is_array($cx['sp_vars']['root'])) ? $cx['sp_vars']['root']['posts'] : null))) ? 
''.LCRun3::sec($cx, ((isset($in['replies']) && is_array($in)) ? $in['replies'] 
: null), $in, true, function($cx, $in) {return ''.LCRun3::hbch($cx, 'eachPost', 
array(array(((isset($cx['sp_vars']['root']) && is_array($cx['sp_vars'])) ? 
$cx['sp_vars']['root'] : null),$in),array()), $in, false, function($cx, $in) 
{return '                            <!-- eachPost topic -->
                                '.LCRun3::ch($cx, 'post', 
array(array(((isset($cx['sp_vars']['root']) && is_array($cx['sp_vars'])) ? 
$cx['sp_vars']['root'] : null),$in),array()), 'encq').'
 ';}).'';}).'' : '').'
-'.((!LCRun3::ifvar($cx, ((isset($in['isPreview']) && is_array($in)) ? 
$in['isPreview'] : null))) ? ''.((LCRun3::ifvar($cx, 
((isset($in['actions']['reply']) && is_array($in['actions'])) ? 
$in['actions']['reply'] : null))) ? ''.LCRun3::hbch($cx, 'ifCond', 
array(array(((isset($cx['sp_vars']['root']['submitted']['postId']) && 
is_array($cx['sp_vars']['root']['submitted'])) ? 
$cx['sp_vars']['root']['submitted']['postId'] : 
null),'===',((isset($in['postId']) && is_array($in)) ? $in['postId'] : 
null)),array()), $in, false, function($cx, $in) {return ''.LCRun3::p($cx, 
'flow_reply_form', array(array($in),array())).'';}, function($cx, $in) {return 
''.LCRun3::hbch($cx, 'progressiveEnhancement', 
array(array(),array('type'=>'replace','target'=>'~ a')), $in, false, 
function($cx, $in) {return ''.LCRun3::p($cx, 'flow_reply_form', 
array(array($in),array())).'';}).'                            <a 
href="'.htmlentities((string)((isset($in['actions']['reply']['url']) && 
is_array($in['actions']['reply'])) ? $in['actions']['reply']['url'] : null), 
ENT_QUOTES, 'UTF-8').'"
-                                  
title="'.htmlentities((string)((isset($in['actions']['reply']['title']) && 
is_array($in['actions']['reply'])) ? $in['actions']['reply']['title'] : null), 
ENT_QUOTES, 'UTF-8').'"
-                                  class="flow-ui-input-replacement-anchor 
mw-ui-input"
-                               >'.LCRun3::ch($cx, 'l10n', 
array(array('flow-reply-topic-title-placeholder',((isset($in['properties']['topic-of-post'])
 && is_array($in['properties'])) ? $in['properties']['topic-of-post'] : 
null)),array()), 'encq').'</a>
-';}).'' : '').'' : '').'</div>
+'.((LCRun3::ifvar($cx, ((isset($in['actions']['reply']) && 
is_array($in['actions'])) ? $in['actions']['reply'] : null))) ? 
''.LCRun3::hbch($cx, 'ifCond', 
array(array(((isset($cx['sp_vars']['root']['submitted']['postId']) && 
is_array($cx['sp_vars']['root']['submitted'])) ? 
$cx['sp_vars']['root']['submitted']['postId'] : 
null),'===',((isset($in['postId']) && is_array($in)) ? $in['postId'] : 
null)),array()), $in, false, function($cx, $in) {return ''.LCRun3::p($cx, 
'flow_reply_form', array(array($in),array())).'';}, function($cx, $in) {return 
''.LCRun3::hbch($cx, 'progressiveEnhancement', 
array(array(),array('type'=>'replace','target'=>'~ a')), $in, false, 
function($cx, $in) {return ''.LCRun3::p($cx, 'flow_reply_form', 
array(array($in),array())).'';}).'                        <a 
href="'.htmlentities((string)((isset($in['actions']['reply']['url']) && 
is_array($in['actions']['reply'])) ? $in['actions']['reply']['url'] : null), 
ENT_QUOTES, 'UTF-8').'"
+                          
title="'.htmlentities((string)((isset($in['actions']['reply']['title']) && 
is_array($in['actions']['reply'])) ? $in['actions']['reply']['title'] : null), 
ENT_QUOTES, 'UTF-8').'"
+                          class="flow-ui-input-replacement-anchor mw-ui-input"
+                       >'.LCRun3::ch($cx, 'l10n', 
array(array('flow-reply-topic-title-placeholder',((isset($in['properties']['topic-of-post'])
 && is_array($in['properties'])) ? $in['properties']['topic-of-post'] : 
null)),array()), 'encq').'</a>
+';}).'' : '').'</div>
 ';},'flow_topiclist_loop' => function ($cx, $in) {return ''.LCRun3::sec($cx, 
((isset($in['roots']) && is_array($in)) ? $in['roots'] : null), $in, true, 
function($cx, $in) {return ''.LCRun3::hbch($cx, 'eachPost', 
array(array(((isset($cx['sp_vars']['root']) && is_array($cx['sp_vars'])) ? 
$cx['sp_vars']['root'] : null),$in),array()), $in, false, function($cx, $in) 
{return ''.LCRun3::p($cx, 'flow_topic', 
array(array($in),array())).'';}).'';}).'';},'flow_load_more' => function ($cx, 
$in) {return ''.((LCRun3::ifvar($cx, ((isset($in['loadMoreObject']) && 
is_array($in)) ? $in['loadMoreObject'] : null))) ? ' <div 
class="flow-load-more">
                <div class="flow-error-container">
                </div>
diff --git a/handlebars/compiled/flow_block_topiclist_newtopic.handlebars.php 
b/handlebars/compiled/flow_block_topiclist_newtopic.handlebars.php
index ca86f2f..48db767 100644
--- a/handlebars/compiled/flow_block_topiclist_newtopic.handlebars.php
+++ b/handlebars/compiled/flow_block_topiclist_newtopic.handlebars.php
@@ -58,8 +58,6 @@
                />
                <div class="flow-editor">
                        <textarea name="topiclist_content"
-                                 
data-flow-preview-template="flow_topic.partial"
-                                 data-flow-preview-title-generator="newTopic"
                                  class="mw-ui-input flow-form-collapsible 
mw-ui-input-large"
                                  '.((LCRun3::ifvar($cx, 
((isset($in['isOnFlowBoard']) && is_array($in)) ? $in['isOnFlowBoard'] : 
null))) ? 'style="display:none;"' : '').'
                                  placeholder="'.LCRun3::ch($cx, 'l10n', 
array(array('flow-newtopic-content-placeholder',((isset($cx['sp_vars']['root']['title'])
 && is_array($cx['sp_vars']['root'])) ? $cx['sp_vars']['root']['title'] : 
null)),array()), 'encq').'"
diff --git a/handlebars/compiled/flow_block_topicsummary_edit.handlebars.php 
b/handlebars/compiled/flow_block_topicsummary_edit.handlebars.php
index 420e6bc..2a306b0 100644
--- a/handlebars/compiled/flow_block_topicsummary_edit.handlebars.php
+++ b/handlebars/compiled/flow_block_topicsummary_edit.handlebars.php
@@ -48,8 +48,6 @@
                                <textarea class="mw-ui-input"
                                          required
                                          
name="'.htmlentities((string)((isset($in['type']) && is_array($in)) ? 
$in['type'] : null), ENT_QUOTES, 'UTF-8').'_summary"
-                                         
data-flow-preview-template="flow_topic_titlebar_summary.partial"
-                                         
data-flow-preview-title="'.htmlentities((string)((isset($in['revision']['articleTitle'])
 && is_array($in['revision'])) ? $in['revision']['articleTitle'] : null), 
ENT_QUOTES, 'UTF-8').'"
                                          type="text"
                                          data-role="content"
                                >'.((LCRun3::ifvar($cx, 
((isset($in['submitted']['summary']) && is_array($in['submitted'])) ? 
$in['submitted']['summary'] : null))) ? 
''.htmlentities((string)((isset($in['submitted']['summary']) && 
is_array($in['submitted'])) ? $in['submitted']['summary'] : null), ENT_QUOTES, 
'UTF-8').'' : ''.((LCRun3::ifvar($cx, ((isset($in['revision']['revisionId']) && 
is_array($in['revision'])) ? $in['revision']['revisionId'] : null))) ? 
''.htmlentities((string)((isset($in['revision']['content']['content']) && 
is_array($in['revision']['content'])) ? $in['revision']['content']['content'] : 
null), ENT_QUOTES, 'UTF-8').'' : '').'').'</textarea>
diff --git 
a/handlebars/compiled/flow_block_topicsummary_undo_edit.handlebars.php 
b/handlebars/compiled/flow_block_topicsummary_undo_edit.handlebars.php
index e5d39fb..f1a0dff 100644
--- a/handlebars/compiled/flow_block_topicsummary_undo_edit.handlebars.php
+++ b/handlebars/compiled/flow_block_topicsummary_undo_edit.handlebars.php
@@ -53,9 +53,6 @@
                        <textarea name="topicsummary_summary"
                                  class="mw-ui-input"
                                  data-role="content"
-                                 data-flow-preview-node="summary"
-                                 
data-flow-preview-template="flow_topic_titlebar_summary.partial"
-                                 
data-flow-preview-title="'.htmlentities((string)((isset($in['articleTitle']) && 
is_array($in)) ? $in['articleTitle'] : null), ENT_QUOTES, 'UTF-8').'"
                        >'.((LCRun3::ifvar($cx, 
((isset($in['submitted']['content']) && is_array($in['submitted'])) ? 
$in['submitted']['content'] : null))) ? 
''.htmlentities((string)((isset($in['submitted']['content']) && 
is_array($in['submitted'])) ? $in['submitted']['content'] : null), ENT_QUOTES, 
'UTF-8').'' : ''.((LCRun3::ifvar($cx, ((isset($in['undo']['possible']) && 
is_array($in['undo'])) ? $in['undo']['possible'] : null))) ? 
''.htmlentities((string)((isset($in['undo']['content']) && 
is_array($in['undo'])) ? $in['undo']['content'] : null), ENT_QUOTES, 
'UTF-8').'' : 
''.htmlentities((string)((isset($in['current']['content']['content']) && 
is_array($in['current']['content'])) ? $in['current']['content']['content'] : 
null), ENT_QUOTES, 'UTF-8').'').'').'</textarea>
                </div>
 
diff --git a/handlebars/compiled/flow_post.handlebars.php 
b/handlebars/compiled/flow_post.handlebars.php
index 28078b4..86ba759 100644
--- a/handlebars/compiled/flow_post.handlebars.php
+++ b/handlebars/compiled/flow_post.handlebars.php
@@ -60,7 +60,6 @@
                           data-flow-eventlog-entrypoint="reply-post"
                           data-flow-eventlog-forward="
                                   < 
.flow-post:not([data-flow-post-max-depth=\'1\']) .flow-reply-form 
[data-role=\'cancel\'],
-                                  < 
.flow-post:not([data-flow-post-max-depth=\'1\']) .flow-reply-form 
[data-role=\'action\'][name=\'preview\'],
                                   < 
.flow-post:not([data-flow-post-max-depth=\'1\']) .flow-reply-form 
[data-role=\'submit\']
                           "
                        
>'.htmlentities((string)((isset($in['actions']['reply']['text']) && 
is_array($in['actions']['reply'])) ? $in['actions']['reply']['text'] : null), 
ENT_QUOTES, 'UTF-8').'</a>
@@ -184,7 +183,7 @@
                '.LCRun3::ch($cx, 'escapeContent', 
array(array(((isset($in['content']['format']) && is_array($in['content'])) ? 
$in['content']['format'] : null),((isset($in['content']['content']) && 
is_array($in['content'])) ? $in['content']['content'] : null)),array()), 
'encq').'
        </div>
 
-'.((!LCRun3::ifvar($cx, ((isset($in['isPreview']) && is_array($in)) ? 
$in['isPreview'] : null))) ? ''.LCRun3::p($cx, 'flow_post_meta_actions', 
array(array($in),array())).''.LCRun3::p($cx, 'flow_post_actions', 
array(array($in),array())).'' : '').'</div>
+'.LCRun3::p($cx, 'flow_post_meta_actions', 
array(array($in),array())).''.LCRun3::p($cx, 'flow_post_actions', 
array(array($in),array())).'</div>
 ';},'flow_anon_warning' => function ($cx, $in) {return '<div 
class="flow-anon-warning">
        <div class="flow-anon-warning-mobile">
 '.LCRun3::hbch($cx, 'tooltip', 
array(array(),array('positionClass'=>'down','contextClass'=>'progressive','extraClass'=>'flow-form-collapsible','isBlock'=>true)),
 $in, false, function($cx, $in) {return ''.LCRun3::ch($cx, 'l10nParse', 
array(array('flow-anon-warning',LCRun3::ch($cx, 'linkWithReturnTo', 
array(array('Special:UserLogin'),array()), 'raw'),LCRun3::ch($cx, 
'linkWithReturnTo', array(array('Special:UserLogin/signup'),array()), 
'raw')),array()), 'encq').'';}).' </div>
@@ -206,12 +205,7 @@
        <input type="hidden" name="topic_prev_revision" 
value="'.htmlentities((string)((isset($in['revisionId']) && is_array($in)) ? 
$in['revisionId'] : null), ENT_QUOTES, 'UTF-8').'" />
 '.LCRun3::hbch($cx, 'ifAnonymous', array(array(),array()), $in, false, 
function($cx, $in) {return ''.LCRun3::p($cx, 'flow_anon_warning', 
array(array($in),array())).'';}).'
        <div class="flow-editor">
-               <textarea name="topic_content" class="mw-ui-input 
flow-form-collapsible"
-                         data-flow-preview-template="flow_post"
-                         
data-flow-preview-title="'.htmlentities((string)((isset($in['articleTitle']) && 
is_array($in)) ? $in['articleTitle'] : null), ENT_QUOTES, 'UTF-8').'"
-                         
data-flow-creator="'.htmlentities((string)((isset($in['creator']['name']) && 
is_array($in['creator'])) ? $in['creator']['name'] : null), ENT_QUOTES, 
'UTF-8').'"
-                         data-role="content"
-               >'.((LCRun3::ifvar($cx, 
((isset($cx['sp_vars']['root']['rootBlock']['submitted']['content']) && 
is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['content'] : null))) ? 
''.htmlentities((string)((isset($cx['sp_vars']['root']['rootBlock']['submitted']['content'])
 && is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['content'] : null), 
ENT_QUOTES, 'UTF-8').'' : 
''.htmlentities((string)((isset($in['content']['content']) && 
is_array($in['content'])) ? $in['content']['content'] : null), ENT_QUOTES, 
'UTF-8').'').'</textarea>
+               <textarea name="topic_content" class="mw-ui-input 
flow-form-collapsible" data-role="content">'.((LCRun3::ifvar($cx, 
((isset($cx['sp_vars']['root']['rootBlock']['submitted']['content']) && 
is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['content'] : null))) ? 
''.htmlentities((string)((isset($cx['sp_vars']['root']['rootBlock']['submitted']['content'])
 && is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['content'] : null), 
ENT_QUOTES, 'UTF-8').'' : 
''.htmlentities((string)((isset($in['content']['content']) && 
is_array($in['content'])) ? $in['content']['content'] : null), ENT_QUOTES, 
'UTF-8').'').'</textarea>
        </div>
 
        <div class="flow-form-actions flow-form-collapsible">
@@ -234,8 +228,6 @@
                        <textarea 
id="flow-post-'.htmlentities((string)((isset($in['postId']) && is_array($in)) ? 
$in['postId'] : null), ENT_QUOTES, 'UTF-8').'-form-content"
                                  name="topic_content"
                                  required
-                                 data-flow-preview-template="flow_post"
-                                 
data-flow-preview-title="'.htmlentities((string)((isset($in['articleTitle']) && 
is_array($in)) ? $in['articleTitle'] : null), ENT_QUOTES, 'UTF-8').'"
                                  data-flow-expandable="true"
                                  class="mw-ui-input flow-click-interactive"
                                  type="text"
@@ -276,7 +268,7 @@
 '.LCRun3::p($cx, 'flow_post_moderation_state', array(array($in),array())).'    
                                </span>
                                </div>
 ';}).'' : ''.LCRun3::hbch($cx, 'ifCond', 
array(array(((isset($cx['sp_vars']['root']['rootBlock']['submitted']['action']) 
&& is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['action'] : 
null),'===','edit-post'),array()), $in, false, function($cx, $in) {return 
''.LCRun3::hbch($cx, 'ifCond', 
array(array(((isset($cx['sp_vars']['root']['rootBlock']['submitted']['postId']) 
&& is_array($cx['sp_vars']['root']['rootBlock']['submitted'])) ? 
$cx['sp_vars']['root']['rootBlock']['submitted']['postId'] : 
null),'===',((isset($in['postId']) && is_array($in)) ? $in['postId'] : 
null)),array()), $in, false, function($cx, $in) {return ''.LCRun3::p($cx, 
'flow_edit_post', array(array($in),array())).'';}, function($cx, $in) {return 
''.LCRun3::p($cx, 'flow_post_inner', array(array($in),array())).'';}).'';}, 
function($cx, $in) {return ''.LCRun3::p($cx, 'flow_post_inner', 
array(array($in),array())).'';}).'').'
-'.((!LCRun3::ifvar($cx, ((isset($in['isPreview']) && is_array($in)) ? 
$in['isPreview'] : null))) ? ''.LCRun3::p($cx, 'flow_post_replies', 
array(array($in),array())).'' : '').'        </div>
+'.LCRun3::p($cx, 'flow_post_replies', array(array($in),array())).'     </div>
 ';}).'';
 }
 ?>
\ No newline at end of file
diff --git a/handlebars/flow_block_header_edit.handlebars 
b/handlebars/flow_block_header_edit.handlebars
index 1e70f16..55ced50 100644
--- a/handlebars/flow_block_header_edit.handlebars
+++ b/handlebars/flow_block_header_edit.handlebars
@@ -10,7 +10,6 @@
                        <div class="flow-editor">
                                <textarea name="header_content"
                                          class="mw-ui-input"
-                                         
data-flow-preview-template="flow_header_detail.partial"
                                          placeholder="{{l10n 
"flow-edit-header-placeholder"}}"
                                          data-role="content"
                                >
diff --git a/handlebars/flow_block_header_undo_edit.handlebars 
b/handlebars/flow_block_header_undo_edit.handlebars
index 8d6358a..5826844 100644
--- a/handlebars/flow_block_header_undo_edit.handlebars
+++ b/handlebars/flow_block_header_undo_edit.handlebars
@@ -16,12 +16,7 @@
                <input type="hidden" name="header_prev_revision" 
value="{{current.revisionId}}" />
 
                <div class="flow-editor">
-                       <textarea name="topic_content"
-                                 class="mw-ui-input"
-                                 data-role="content"
-                                 
data-flow-preview-template="flow_header_detail.partial"
-                                 data-flow-preview-title="{{articleTitle}}"
-                       >
+                       <textarea name="topic_content" class="mw-ui-input" 
data-role="content">
                                {{~#if submitted.content~}}
                                        {{~submitted.content~}}
                                {{~else~}}
diff --git a/handlebars/flow_block_topic_undo_edit.handlebars 
b/handlebars/flow_block_topic_undo_edit.handlebars
index 4eb91f9..44fc241 100644
--- a/handlebars/flow_block_topic_undo_edit.handlebars
+++ b/handlebars/flow_block_topic_undo_edit.handlebars
@@ -17,13 +17,7 @@
                <input type="hidden" name="topic_postId" 
value="{{current.postId}}" />
 
                <div class="flow-editor">
-                       <textarea name="topic_content"
-                                 class="mw-ui-input"
-                                 data-role="content"
-                                 data-flow-preview-template="flow_post"
-                                 data-flow-preview-title="{{articleTitle}}"
-                                 data-flow-username="{{current.creator.name}}"
-                       >
+                       <textarea name="topic_content" class="mw-ui-input" 
data-role="content">
                                {{~#if submitted.content~}}
                                        {{~submitted.content~}}
                                {{~else~}}
diff --git a/handlebars/flow_block_topicsummary_edit.handlebars 
b/handlebars/flow_block_topicsummary_edit.handlebars
index 56cf6e4..9735a14 100644
--- a/handlebars/flow_block_topicsummary_edit.handlebars
+++ b/handlebars/flow_block_topicsummary_edit.handlebars
@@ -12,8 +12,6 @@
                                <textarea class="mw-ui-input"
                                          required
                                          name="{{type}}_summary"
-                                         
data-flow-preview-template="flow_topic_titlebar_summary.partial"
-                                         
data-flow-preview-title="{{revision.articleTitle}}"
                                          type="text"
                                          data-role="content"
                                >
diff --git a/handlebars/flow_block_topicsummary_undo_edit.handlebars 
b/handlebars/flow_block_topicsummary_undo_edit.handlebars
index ecaf4b2..164a8ad 100644
--- a/handlebars/flow_block_topicsummary_undo_edit.handlebars
+++ b/handlebars/flow_block_topicsummary_undo_edit.handlebars
@@ -19,9 +19,6 @@
                        <textarea name="topicsummary_summary"
                                  class="mw-ui-input"
                                  data-role="content"
-                                 data-flow-preview-node="summary"
-                                 
data-flow-preview-template="flow_topic_titlebar_summary.partial"
-                                 data-flow-preview-title="{{articleTitle}}"
                        >
                                {{~#if submitted.content~}}
                                        {{~submitted.content~}}
diff --git a/handlebars/flow_edit_post.partial.handlebars 
b/handlebars/flow_edit_post.partial.handlebars
index 7b6b882..cd7e70f 100644
--- a/handlebars/flow_edit_post.partial.handlebars
+++ b/handlebars/flow_edit_post.partial.handlebars
@@ -10,12 +10,7 @@
        {{/ifAnonymous}}
 
        <div class="flow-editor">
-               <textarea name="topic_content" class="mw-ui-input 
flow-form-collapsible"
-                         data-flow-preview-template="flow_post"
-                         data-flow-preview-title="{{articleTitle}}"
-                         data-flow-creator="{{creator.name}}"
-                         data-role="content"
-               >
+               <textarea name="topic_content" class="mw-ui-input 
flow-form-collapsible" data-role="content">
                        {{~#if @root.rootBlock.submitted.content~}}
                                {{[email protected]~}}
                        {{~else~}}
diff --git a/handlebars/flow_header_detail.partial.handlebars 
b/handlebars/flow_header_detail.partial.handlebars
index e898438..2962066 100644
--- a/handlebars/flow_header_detail.partial.handlebars
+++ b/handlebars/flow_header_detail.partial.handlebars
@@ -4,18 +4,16 @@
        {{/if}}
        &nbsp;
 
-       {{#unless isPreview}}
-               <div class="flow-board-header-nav">
-                       {{#if revision.actions.edit}}
-                               <a href="{{revision.actions.edit.url}}"
-                                       
data-flow-api-handler="activateEditHeader"
-                                       data-flow-api-target="< 
.flow-board-header"
-                                       
data-flow-interactive-handler="apiRequest"
-                                       class="mw-ui-button mw-ui-progressive  
mw-ui-quiet flow-board-header-icon flow-ui-tooltip-target"
-                                       title="{{revision.actions.edit.title}}">
-                                               <span class="wikiglyph 
wikiglyph-pencil"></span>
-                               </a>
-                       {{/if}}
-               </div>
-       {{/unless}}
+       <div class="flow-board-header-nav">
+               {{#if revision.actions.edit}}
+                       <a href="{{revision.actions.edit.url}}"
+                          data-flow-api-handler="activateEditHeader"
+                          data-flow-api-target="< .flow-board-header"
+                          data-flow-interactive-handler="apiRequest"
+                          class="mw-ui-button mw-ui-progressive  mw-ui-quiet 
flow-board-header-icon flow-ui-tooltip-target"
+                          title="{{revision.actions.edit.title}}">
+                                       <span class="wikiglyph 
wikiglyph-pencil"></span>
+                       </a>
+               {{/if}}
+       </div>
 </div>
diff --git a/handlebars/flow_newtopic_form.partial.handlebars 
b/handlebars/flow_newtopic_form.partial.handlebars
index 8d50625..8fdb44e 100644
--- a/handlebars/flow_newtopic_form.partial.handlebars
+++ b/handlebars/flow_newtopic_form.partial.handlebars
@@ -25,8 +25,6 @@
                />
                <div class="flow-editor">
                        <textarea name="topiclist_content"
-                                 
data-flow-preview-template="flow_topic.partial"
-                                 data-flow-preview-title-generator="newTopic"
                                  class="mw-ui-input flow-form-collapsible 
mw-ui-input-large"
                                  {{#if 
isOnFlowBoard}}style="display:none;"{{/if}}
                                  placeholder="{{l10n 
"flow-newtopic-content-placeholder" @root.title}}"
diff --git a/handlebars/flow_post.partial.handlebars 
b/handlebars/flow_post.partial.handlebars
index dc00a42..088a7fe 100644
--- a/handlebars/flow_post.partial.handlebars
+++ b/handlebars/flow_post.partial.handlebars
@@ -25,9 +25,6 @@
                        {{/ifCond}}
                {{/if}}
 
-               {{!-- This stuff is also not needed in preview mode --}}
-               {{#unless isPreview}}
-                       {{> flow_post_replies}}
-               {{/unless}}
+               {{> flow_post_replies}}
        </div>
 {{/with}}
diff --git a/handlebars/flow_post_inner.partial.handlebars 
b/handlebars/flow_post_inner.partial.handlebars
index dc21e64..e8fe72f 100644
--- a/handlebars/flow_post_inner.partial.handlebars
+++ b/handlebars/flow_post_inner.partial.handlebars
@@ -23,9 +23,6 @@
                {{escapeContent content.format content.content}}
        </div>
 
-       {{!-- This stuff is not needed in preview mode --}}
-       {{#unless isPreview}}
-               {{> flow_post_meta_actions}}
-               {{> flow_post_actions}}
-       {{/unless}}
+       {{> flow_post_meta_actions}}
+       {{> flow_post_actions}}
 </div>
diff --git a/handlebars/flow_post_meta_actions.partial.handlebars 
b/handlebars/flow_post_meta_actions.partial.handlebars
index b5d605b..5027181 100644
--- a/handlebars/flow_post_meta_actions.partial.handlebars
+++ b/handlebars/flow_post_meta_actions.partial.handlebars
@@ -25,7 +25,6 @@
                           data-flow-eventlog-entrypoint="reply-post"
                           data-flow-eventlog-forward="
                                   < 
.flow-post:not([data-flow-post-max-depth='1']) .flow-reply-form 
[data-role='cancel'],
-                                  < 
.flow-post:not([data-flow-post-max-depth='1']) .flow-reply-form 
[data-role='action'][name='preview'],
                                   < 
.flow-post:not([data-flow-post-max-depth='1']) .flow-reply-form 
[data-role='submit']
                           "
                        >
diff --git a/handlebars/flow_preview.partial.handlebars 
b/handlebars/flow_preview.partial.handlebars
deleted file mode 100644
index fbf9ed3..0000000
--- a/handlebars/flow_preview.partial.handlebars
+++ /dev/null
@@ -1,12 +0,0 @@
-<div class="flow-content-preview">
-       {{#if title}}
-               <div class="flow-preview-sub-container flow-topic-title">
-                       {{title}}
-               </div>
-       {{/if}}
-       {{#if content}}
-               <div class="flow-preview-sub-container">
-                       {{escapeContent content.format content.content}}
-               </div>
-       {{/if}}
-</div>
diff --git a/handlebars/flow_preview_warning.partial.handlebars 
b/handlebars/flow_preview_warning.partial.handlebars
deleted file mode 100644
index a6cae95..0000000
--- a/handlebars/flow_preview_warning.partial.handlebars
+++ /dev/null
@@ -1,6 +0,0 @@
-<div class="flow-preview-warning">
-       {{~l10n "flow-preview-warning"~}}
-</div>
-{{#ifAnonymous}}
-       {{> flow_anon_warning}}
-{{/ifAnonymous}}
diff --git a/handlebars/flow_reply_form.partial.handlebars 
b/handlebars/flow_reply_form.partial.handlebars
index 862bbae..2594a78 100644
--- a/handlebars/flow_reply_form.partial.handlebars
+++ b/handlebars/flow_reply_form.partial.handlebars
@@ -17,8 +17,6 @@
                        <textarea id="flow-post-{{postId}}-form-content"
                                  name="topic_content"
                                  required
-                                 data-flow-preview-template="flow_post"
-                                 data-flow-preview-title="{{articleTitle}}"
                                  data-flow-expandable="true"
                                  class="mw-ui-input flow-click-interactive"
                                  type="text"
diff --git a/handlebars/flow_topic.partial.handlebars 
b/handlebars/flow_topic.partial.handlebars
index 3872f11..064fb4e 100644
--- a/handlebars/flow_topic.partial.handlebars
+++ b/handlebars/flow_topic.partial.handlebars
@@ -19,21 +19,19 @@
                {{/each}}
        {{/if}}
 
-       {{#unless isPreview}}
-               {{#if actions.reply}}
-                       {{#ifCond @root.submitted.postId "===" postId}}
+       {{#if actions.reply}}
+               {{#ifCond @root.submitted.postId "===" postId}}
+                       {{> flow_reply_form}}
+               {{else}}
+                       {{#progressiveEnhancement type="replace" target="~ a"}}
                                {{> flow_reply_form}}
-                       {{else}}
-                               {{#progressiveEnhancement type="replace" 
target="~ a"}}
-                                       {{> flow_reply_form}}
-                               {{/progressiveEnhancement}}
-                               <a href="{{actions.reply.url}}"
-                                  title="{{actions.reply.title}}"
-                                  class="flow-ui-input-replacement-anchor 
mw-ui-input"
-                               >
-                                       {{~l10n 
"flow-reply-topic-title-placeholder" properties.topic-of-post~}}
-                               </a>
-                       {{/ifCond}}
-               {{/if}}
-       {{/unless}}
+                       {{/progressiveEnhancement}}
+                       <a href="{{actions.reply.url}}"
+                          title="{{actions.reply.title}}"
+                          class="flow-ui-input-replacement-anchor mw-ui-input"
+                       >
+                               {{~l10n "flow-reply-topic-title-placeholder" 
properties.topic-of-post~}}
+                       </a>
+               {{/ifCond}}
+       {{/if}}
 </div>
diff --git a/handlebars/flow_topic_titlebar.partial.handlebars 
b/handlebars/flow_topic_titlebar.partial.handlebars
index 20ca436..b8317bb 100644
--- a/handlebars/flow_topic_titlebar.partial.handlebars
+++ b/handlebars/flow_topic_titlebar.partial.handlebars
@@ -1,16 +1,14 @@
 <div class="flow-topic-titlebar">
        {{> flow_topic_titlebar_content}}
 
-       {{#unless isPreview}}
-               {{#if watchable}}
-                       {{> flow_topic_titlebar_watch}}
-               {{/if}}
-               <div class="flow-menu flow-menu-hoverable">
-                       <div class="flow-menu-js-drop"><a 
href="javascript:void(0);"><span class="wikiglyph 
wikiglyph-ellipsis"></span></a></div>
-                       <ul class="mw-ui-button-container flow-list">
-                               {{!-- Inserts each common 
flow-menu-moderation-action --}}
-                               {{> flow_moderation_actions_list this 
moderationType="topic" moderationTarget="title" moderationTemplate="topic" 
moderationContainerClass="flow-menu" moderationMwUiClass="mw-ui-button" 
moderationIcons=true}}
-                       </ul>
-               </div>
-       {{/unless}}
+       {{#if watchable}}
+               {{> flow_topic_titlebar_watch}}
+       {{/if}}
+       <div class="flow-menu flow-menu-hoverable">
+               <div class="flow-menu-js-drop"><a 
href="javascript:void(0);"><span class="wikiglyph 
wikiglyph-ellipsis"></span></a></div>
+               <ul class="mw-ui-button-container flow-list">
+                       {{!-- Inserts each common flow-menu-moderation-action 
--}}
+                       {{> flow_moderation_actions_list this 
moderationType="topic" moderationTarget="title" moderationTemplate="topic" 
moderationContainerClass="flow-menu" moderationMwUiClass="mw-ui-button" 
moderationIcons=true}}
+               </ul>
+       </div>
 </div>
diff --git a/handlebars/flow_topic_titlebar_lock.partial.handlebars 
b/handlebars/flow_topic_titlebar_lock.partial.handlebars
index 3cd280f..3f10a91 100644
--- a/handlebars/flow_topic_titlebar_lock.partial.handlebars
+++ b/handlebars/flow_topic_titlebar_lock.partial.handlebars
@@ -14,9 +14,6 @@
                                          class="mw-ui-input"
                                          type="text"
                                          required
-                                         
data-flow-preview-node="moderateReason"
-                                         
data-flow-preview-template="flow_topic_titlebar.partial"
-                                         
data-flow-preview-title="{{articleTitle}}"
                                >
                                        {{~#if @root.submitted.reason~}}
                                                {{[email protected]~}}
diff --git a/i18n/en.json b/i18n/en.json
index 3a4d82a..42f1057 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -53,7 +53,6 @@
        "flow-post-actions": "Actions",
        "flow-topic-actions": "Actions",
        "flow-cancel": "Cancel",
-       "flow-preview": "Preview",
        "flow-show-change": "Show changes",
        "flow-last-modified-by": "Last {{GENDER:$1|modified}} by $1",
        "flow-system-usertext": "{{SITENAME}}",
@@ -396,9 +395,6 @@
        "flow-special-enableflow-page-already-exists": "There is already a 
non-Flow page at [[$1]]. If you still want to locate a Flow board there, please 
move the existing page to an archive, delete the redirect, then use 
Special:EnableFlow again. Include the archive name in the header.",
        "flow-special-enableflow-confirmation": "You have successfully created 
a Flow board at [[$1]].",
        "flow-spam-confirmedit-form": "Please confirm you are a human by 
solving the below captcha: $1",
-       "flow-preview-warning": "You are seeing a preview. Click 
\"{{int:flow-newtopic-save}}\" to post, or click 
\"{{int:flow-preview-return-edit-post}}\" to continue writing.",
-       "flow-preview-return-edit-post": "Keep editing",
-       "flow-anonymous": "Anonymous",
        "flow-embedding-unsupported": "Discussions cannot be embedded yet.",
        "mw-ui-unsubmitted-confirm": "You have unsubmitted changes on this 
page. Are you sure you want to navigate away and lose your work?",
        "flow-post-undo-hide": "undo hide",
diff --git a/i18n/qqq.json b/i18n/qqq.json
index 28b1efe..701c63f 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -58,7 +58,6 @@
        "flow-post-actions": "Used as link text.\n{{Identical|Action}}",
        "flow-topic-actions": "Used as link text.\n{{Identical|Action}}",
        "flow-cancel": "Used as action link text.\n{{Identical|Cancel}}",
-       "flow-preview": "Used as action link text.\n{{Identical|Preview}}",
        "flow-show-change": "Used as action link text.\n\nChanges refers to 
diff between revisions.\n{{Identical|Show change}}",
        "flow-last-modified-by": "Used as text to show who made the last 
content modification. Parameters:\n* $1 - username of the user who last made 
the content modification, can be used for GENDER support",
        "flow-system-usertext": "Stub username to be displayed when a post's 
information could not be loaded due to technical issues.",
@@ -401,9 +400,6 @@
        "flow-special-enableflow-page-already-exists": "Error given on 
Special:EnableFlow if a non-Flow page already exists at requested page name.  
Parameters:\n$1 - Page name where user requested to put Flow board",
        "flow-special-enableflow-confirmation": "Confirmation message on 
Special:EnableFlow saying that you have successfully created a board  
Parameters:\n$1 - Page name of new Flow board",
        "flow-spam-confirmedit-form": "Error message when ConfirmEdit flagged 
the submitted content (because an anonymous user submitted external links, 
possibly spam). A captcha will be displayed after this error message. 
Parameters:\n* $1 - the HTML for the captcha form.",
-       "flow-preview-warning": "Refers to {{msg-mw|flow-newtopic-save}} (Add 
topic) and {{msg-mw|Flow-preview-return-edit-post}} (Keep editing).",
-       "flow-preview-return-edit-post": "Used as text for a button that hides 
previewed text and returns to the editing view",
-       "flow-anonymous": "{{Identical|Anonymous}}",
        "flow-embedding-unsupported": "Error message displayed if a user tries 
to transclude a Flow page.",
        "mw-ui-unsubmitted-confirm": "You have unsubmitted changes on this 
page. Are you sure you want to navigate away and lose your work?",
        "flow-post-undo-hide": "Automatic moderation summary when undoing a 
post hide that was just performed.",
diff --git a/modules/editor/editors/ext.flow.editors.AbstractEditor.js 
b/modules/editor/editors/ext.flow.editors.AbstractEditor.js
index 838bff0..c2a8c9a 100644
--- a/modules/editor/editors/ext.flow.editors.AbstractEditor.js
+++ b/modules/editor/editors/ext.flow.editors.AbstractEditor.js
@@ -21,15 +21,6 @@
        // Static methods
 
        /**
-        * Returns whether this editor uses a preview mode
-        *
-        * @return {boolean}
-        */
-       mw.flow.editors.AbstractEditor.static.usesPreview = function () {
-               return true;
-       };
-
-       /**
         * Determines if this editor is supported for the current user and
         * environment (browser, etc.)
         *
diff --git 
a/modules/editor/editors/visualeditor/ext.flow.editors.visualeditor.js 
b/modules/editor/editors/visualeditor/ext.flow.editors.visualeditor.js
index b575f3f..968fa04 100644
--- a/modules/editor/editors/visualeditor/ext.flow.editors.visualeditor.js
+++ b/modules/editor/editors/visualeditor/ext.flow.editors.visualeditor.js
@@ -200,7 +200,4 @@
                );
        };
 
-       mw.flow.editors.visualeditor.static.usesPreview = function () {
-               return false;
-       };
 } ( jQuery, mediaWiki, OO, ve ) );
diff --git 
a/modules/engine/components/board/base/flow-board-interactive-events.js 
b/modules/engine/components/board/base/flow-board-interactive-events.js
index 6e10caa..9b56e32 100644
--- a/modules/engine/components/board/base/flow-board-interactive-events.js
+++ b/modules/engine/components/board/base/flow-board-interactive-events.js
@@ -77,7 +77,6 @@
                        // nodes to forward funnel to
                        $( this ).findWithParent(
                                '< .flow-reply-form [data-role="cancel"],' +
-                               '< .flow-reply-form 
[data-role="action"][name="preview"],' +
                                '< .flow-reply-form [data-role="submit"]'
                        )
                );
@@ -111,7 +110,6 @@
                        // nodes to forward funnel to
                        $( this ).findWithParent(
                                '< .flow-newtopic-form [data-role="cancel"],' +
-                               '< .flow-newtopic-form 
[data-role="action"][name="preview"],' +
                                '< .flow-newtopic-form [data-role="submit"]'
                        )
                );
diff --git a/modules/engine/components/board/base/flow-board-misc.js 
b/modules/engine/components/board/base/flow-board-misc.js
deleted file mode 100644
index c938651..0000000
--- a/modules/engine/components/board/base/flow-board-misc.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*!
- * Contains miscellaneous functionality needed for FlowBoardComponents.
- * @todo Find a better place for this code.
- */
-
-( function ( $, mw ) {
-       /**
-        *
-        * @param {jQuery} $container
-        * @extends FlowComponent
-        * @constructor
-        */
-       function FlowBoardComponentMiscMixin( $container ) {
-       }
-       OO.initClass( FlowBoardComponentMiscMixin );
-
-       //
-       // Methods
-       //
-
-       /**
-        * Removes the preview and unhides the form fields.
-        * @param {jQuery} $cancelButton
-        * @return {bool} true if success
-        * @todo genericize into FlowComponent
-        */
-       function flowBoardComponentResetPreview( $cancelButton ) {
-               var $form = $cancelButton.closest( 'form' ),
-                       $button = $form.find( '[name=preview]' ),
-                       oldData = $button.data( 'flow-return-to-edit' );
-
-               if ( oldData ) {
-                       // We're in preview mode. Revert it back.
-                       $button.text( oldData.text );
-
-                       // Show the inputs again
-                       $form.find( '.flow-preview-target-hidden' 
).removeClass( 'flow-preview-target-hidden' ).focus();
-
-                       // Remove the preview
-                       oldData.$nodes.remove();
-
-                       // Remove this reset info
-                       $button.removeData( 'flow-return-to-edit' );
-
-                       return true;
-               }
-               return false;
-       }
-       FlowBoardComponentMiscMixin.prototype.resetPreview = 
flowBoardComponentResetPreview;
-
-       // Mixin to FlowBoardComponent
-       mw.flow.mixinComponent( 'board', FlowBoardComponentMiscMixin );
-}( jQuery, mediaWiki ) );
diff --git a/modules/engine/components/board/features/flow-board-preview.js 
b/modules/engine/components/board/features/flow-board-preview.js
deleted file mode 100644
index c706acf..0000000
--- a/modules/engine/components/board/features/flow-board-preview.js
+++ /dev/null
@@ -1,237 +0,0 @@
-/*!
- * @todo break this down into mixins for each callback section (eg. post 
actions, read topics)
- */
-
-( function ( $, mw ) {
-       /**
-        * Binds API events to FlowBoardComponent
-        * @param {jQuery} $container
-        * @extends FlowComponent
-        * @constructor
-        */
-       function FlowBoardComponentPreviewMixin( $container ) {
-               // Bind event callbacks
-               this.bindNodeHandlers( FlowBoardComponentPreviewMixin.UI.events 
);
-       }
-       OO.initClass( FlowBoardComponentPreviewMixin );
-
-       /** Event handlers are stored here, but are registered in the 
constructor */
-       FlowBoardComponentPreviewMixin.UI = {
-               events: {
-                       apiPreHandlers: {},
-                       apiHandlers: {}
-               }
-       };
-
-       //
-       // pre-api callback handlers, to do things before the API call
-       //
-
-       /**
-        * First, resets the previous preview (if any).
-        * Then, using the form fields, finds the content element to be sent to 
Parsoid by looking
-        * for one ending in "content", or, failing that, with 
data-role=content.
-        * @param  {Event} event The event being handled
-        * @return {Function} Callback to modify the API request
-        * @todo genericize into FlowComponent
-        */
-       FlowBoardComponentPreviewMixin.UI.events.apiPreHandlers.preview = 
function ( event ) {
-               var callback,
-                       $this = $( this ),
-                       $target = $this.findWithParent( $this.data( 
'flow-api-target' ) ),
-                       previewTitleGenerator = $target.data( 
'flow-preview-title-generator' ),
-                       previewTitle = $target.data( 'flow-preview-title' ),
-                       flowBoard = mw.flow.getPrototypeMethod( 'board', 
'getInstanceByElement' )( $this ),
-                       schemaName = $this.data( 'flow-eventlog-schema' ),
-                       funnelId = $this.data( 'flow-eventlog-funnel-id' ),
-                       logAction = $this.data( 'flow-return-to-edit' ) ? 
'keep-editing' : 'preview',
-                       generators = {
-                               newTopic: function() {
-                                       // Convert current timestamp to base-2
-                                       var namespace = mw.config.get( 
'wgFormattedNamespaces' )[2600],
-                                               timestamp = 
mw.flow.baseConvert( Date.now(), 10, 2 );
-                                       // Pad base-2 out to 88 bits (@todo why 
84?)
-                                       timestamp += [ 84 - timestamp.length 
].join( '0' );
-                                       // convert base-2 to base-36
-                                       return namespace + ':' + 
mw.flow.baseConvert( timestamp, 2, 36 );
-                               },
-                               wgPageName: function() {
-                                       return mw.config.get( 'wgPageName' );
-                               }
-                       };
-
-               if ( !previewTitleGenerator || !generators.hasOwnProperty( 
previewTitleGenerator ) ) {
-                       previewTitleGenerator = 'wgPageName';
-               }
-
-               flowBoard.logEvent( schemaName, { action: logAction, funnelId: 
funnelId } );
-
-               callback = function ( queryMap ) {
-                       var content = null;
-
-                       // XXX: Find the content parameter
-                       $.each( queryMap, function( key, value ) {
-                               var piece = key.slice( -7 );
-                               if ( piece === 'content' || piece === 'summary' 
) {
-                                       content = value;
-                                       return false;
-                               }
-                       } );
-
-                       // If we fail to find a content param, look for a field 
that is the "content" role and use that
-                       if ( content === null ) {
-                               content = $this.closest( 'form' ).find( 'input, 
textarea' ).filter( '[data-role="content"]' ).val();
-                       }
-
-                       queryMap = {
-                               'action':  'flow-parsoid-utils',
-                               'from':    'wikitext',
-                               'to':      'html',
-                               'content': content
-                       };
-
-                       if ( previewTitle ) {
-                               queryMap.title = previewTitle;
-                       } else {
-                               queryMap.title = 
generators[previewTitleGenerator]();
-                       }
-
-                       return queryMap;
-               };
-
-               // Reset the preview state if already in it
-               if ( flowBoard.resetPreview( $this ) ) {
-                       // Special way of cancelling a request, other than 
returning false outright
-                       callback._abort = true;
-               }
-
-               return callback;
-       };
-
-       /**
-        * Triggers a preview of the given content.
-        * @param {Object} info (status:done|fail, $target: jQuery)
-        * @param {Object} data
-        * @param {jqXHR} jqxhr
-        * @returns {$.Promise}
-        */
-       FlowBoardComponentPreviewMixin.UI.events.apiHandlers.preview = 
function( info, data, jqxhr ) {
-               var revision, creator,
-                       $previewContainer,
-                       templateParams,
-                       $button = $( this ),
-                       $form = $button.closest( 'form' ),
-                       $cancelButton = 
$form.find('.mw-ui-button[data-role="cancel"]'),
-                       flowBoard = mw.flow.getPrototypeMethod( 'board', 
'getInstanceByElement' )( $form ),
-                       $titleField = $form.find( 'input' ).filter( 
'[data-role=title]' ),
-                       $target = info.$target,
-                       username = $target.data( 'flow-creator' ) || 
mw.user.getName(),
-                       id = Math.random(),
-                       previewTemplate = $target.data( 'flow-preview-template' 
),
-                       contentNode = $target.data( 'flow-preview-node' ) || 
'content';
-
-               if ( info.status !== 'done' ) {
-                       // Error will be displayed by default, nothing else to 
wrap up
-                       return $.Deferred().reject().promise();
-               }
-
-               creator = {
-                       links: {
-                               userpage: {
-                                       url: mw.util.getUrl( 'User:' + username 
),
-                                       // FIXME: Assume, as we don't know at 
this point...
-                                       exists: true
-                               },
-                               talk: {
-                                       url: mw.util.getUrl( 'User talk:' + 
username ),
-                                       // FIXME: Assume, as we don't know at 
this point...
-                                       exists: true
-                               },
-                               contribs: {
-                                       url: mw.util.getUrl( 
'Special:Contributions/' + username ),
-                                       exists: true,
-                                       title: username
-                               }
-                       },
-                       name: username || 
flowBoard.constructor.static.TemplateEngine.l10n( 'flow-anonymous' )
-               };
-
-               revision = {
-                       postId: id,
-                       creator: creator,
-                       replies: [ id ],
-                       isPreview: true
-               };
-               templateParams = {};
-
-               // This is for most previews which expect a "revision" key
-               revision[contentNode] = {
-                       content: data['flow-parsoid-utils'].content,
-                       format: data['flow-parsoid-utils'].format
-               };
-               // This fixes summarize which expects a key "summary"
-               templateParams[contentNode] = revision[contentNode];
-
-               $.extend( templateParams, {
-                       // This fixes titlebar which expects a key "content" 
for title
-                       content: {
-                               content: $titleField.val() || '',
-                               format: 'content'
-                       },
-                       creator: creator,
-                       posts: {},
-                       // @todo don't do these. it's a catch-all for the 
templates which expect a revision key, and those that don't.
-                       revision: revision,
-                       reply_count: 1,
-                       last_updated: +new Date(),
-                       replies: [ id ],
-                       revisions: {}
-               } );
-               templateParams.posts[id] = { 0: id };
-               templateParams.revisions[id] = revision;
-
-               // Render the preview warning
-               $previewContainer = $( 
flowBoard.constructor.static.TemplateEngine.processTemplateGetFragment(
-                       'flow_preview_warning.partial'
-               ) ).children();
-
-               // @todo Perhaps this should be done in each template, and not 
here?
-               $previewContainer.addClass( 'flow-preview' );
-
-               // Render this template with the preview data
-               $previewContainer = $previewContainer.add(
-                       $( 
flowBoard.constructor.static.TemplateEngine.processTemplateGetFragment(
-                               previewTemplate,
-                               templateParams
-                       ) ).children()
-               );
-
-               // Hide any input fields and anon warning
-               $form.find( 'input, textarea, .flow-anon-warning' )
-                       .addClass( 'flow-preview-target-hidden' );
-
-               // Insert the new preview before the form
-               $target
-                       .parent( 'form' )
-                       .before( $previewContainer );
-
-               // Hide cancel button on preview screen
-               $cancelButton.hide();
-
-               // Assign the reset-preview information for later use
-               $button
-                       .data( 'flow-return-to-edit', {
-                               text: $button.text(),
-                               $nodes: $previewContainer
-                       } )
-                       .text( 
flowBoard.constructor.static.TemplateEngine.l10n( 
'flow-preview-return-edit-post' ) )
-                       .one( 'click', function() {
-                               $cancelButton.show();
-                       } );
-
-               return $.Deferred().resolve().promise();
-       };
-
-       // Mixin to FlowBoardComponent
-       mw.flow.mixinComponent( 'component', FlowBoardComponentPreviewMixin );
-}( jQuery, mediaWiki ) );
diff --git a/modules/engine/components/common/flow-component-events.js 
b/modules/engine/components/common/flow-component-events.js
index 99d14df..21ffb69 100644
--- a/modules/engine/components/common/flow-component-events.js
+++ b/modules/engine/components/common/flow-component-events.js
@@ -652,15 +652,6 @@
                // Store state
                $form.data( 'flow-state', 'hidden' );
 
-               // If any preview is visible cancel it
-               // Must be done before compressing text areas because
-               // the preview may have manipulated them.
-               if ( $form.parent().find( '.flow-preview-warning' ).length ) {
-                       component.resetPreview(
-                               $form.find( 'button[data-role="cancel"]' )
-                       );
-               }
-
                $form.find( 'textarea' ).each( function () {
                        var $editor = $( this );
 
@@ -775,9 +766,7 @@
                                var $editor = $( this );
 
                                $form = $editor.closest( 'form' );
-                               mw.flow.editor.load( $editor, $editor.val() 
).done( function () {
-                                       $form.toggleClass( 
'flow-editor-supports-preview', mw.flow.editor.editor.static.usesPreview() );
-                               } );
+                               mw.flow.editor.load( $editor, $editor.val() );
 
                                // Kill editor instance when the form it's in 
is cancelled
                                flowComponent.emitWithReturn( 
'addFormCancelCallback', $form, function() {
@@ -821,7 +810,6 @@
                        $node = $node.$container;
                }
 
-               _flowFindUpward( $node, '.flow-content-preview' ).hide();
                _flowFindUpward( $node, '.flow-error-container' ).filter( 
':first' ).replaceWith( fragment );
        }
        FlowComponentEventsMixin.eventHandlers.showError = 
flowEventsMixinShowError;
diff --git a/modules/engine/misc/mw-ui.enhance.js 
b/modules/engine/misc/mw-ui.enhance.js
index 43fdec3..dab50d1 100644
--- a/modules/engine/misc/mw-ui.enhance.js
+++ b/modules/engine/misc/mw-ui.enhance.js
@@ -111,7 +111,7 @@
                        .prop( 'disabled', !ready );
        }
        /*
-        * Disable / enable preview and submit buttons without/with text in 
field.
+        * Disable / enable submit buttons without/with text in field.
         * Usage: field needs required attribute
         */
        $( document ).ready( function () {
diff --git a/modules/styles/board/content-preview.less 
b/modules/styles/board/content-preview.less
deleted file mode 100644
index 30a518d..0000000
--- a/modules/styles/board/content-preview.less
+++ /dev/null
@@ -1,24 +0,0 @@
-@import 'mediawiki.mixins';
-@import 'flow.colors';
-@import 'flow.helpers';
-@import 'flow.variables';
-
-// Preview
-.flow-content-preview {
-       word-wrap: break-word;
-       word-break: break-word;
-
-       background-color: #FDFFE7;
-       border: 1px solid #FCEB92;
-       padding: 5px;
-       margin-top: 5px;
-       margin-bottom: 15px;
-       white-space: normal;
-       overflow: auto;
-
-       display: none; // Hide initially
-
-       .flow-preview-sub-container {
-               margin-top: 5px;
-       }
-}
diff --git a/modules/styles/board/form-actions.less 
b/modules/styles/board/form-actions.less
index 2901e96..2f27583 100644
--- a/modules/styles/board/form-actions.less
+++ b/modules/styles/board/form-actions.less
@@ -30,20 +30,6 @@
        width: 15em;
 }
 
-.client-js {
-       // We determine in JS whether their editor has a preview mode.
-       // We assume all no-JS compatible editors do.
-       // The extra specificity is to override the normal .flow-js behavior
-
-       .flow-js.flow-form-action-preview {
-               display: none;
-       }
-
-       .flow-editor-supports-preview .flow-js.flow-form-action-preview {
-               display: block;
-       }
-}
-
 @media all and (min-width: @wgFlowDeviceWidthTablet) {
        .flow-anon-warning-mobile {
                display: none;
diff --git a/modules/styles/board/topic/post.less 
b/modules/styles/board/topic/post.less
index 5080b3b..aba5c5b 100644
--- a/modules/styles/board/topic/post.less
+++ b/modules/styles/board/topic/post.less
@@ -28,18 +28,6 @@
                margin-left: @topicIndent;
                padding-left: 0.5em;
                border-left: 1px dotted @colorGrayLighter;
-
-               // Remove tangent preview nesting (no IE6 support, but 
acceptable degradation)
-               &.flow-preview {
-                       margin-left: 0;
-                       padding-left: 0;
-                       border-left-width: 0;
-
-                       .flow-post-main {
-                               padding-left: 0;
-                               border-left-width: 0;
-                       }
-               }
        }
 
        &.flow-post-max-depth .flow-replies {
diff --git a/modules/styles/js.less b/modules/styles/js.less
index 9da4167..6f97ecd 100644
--- a/modules/styles/js.less
+++ b/modules/styles/js.less
@@ -19,17 +19,6 @@
                height: 0;
        }
 
-       // A preview version of a given block
-       .flow-preview {
-               cursor: help;
-               margin-top: .5em;
-               color: @colorRegressive;
-       }
-
-       div#content div#bodyContent .flow-preview-target-hidden {
-               display: none;
-       }
-
        // With JS, hide .flow-nojs & display .flow-js elements
        .flow-nojs {
                display: none;
diff --git a/tests/browser/features/reply.feature 
b/tests/browser/features/reply.feature
index a9bc50e..9160791 100644
--- a/tests/browser/features/reply.feature
+++ b/tests/browser/features/reply.feature
@@ -17,14 +17,3 @@
       And I am not watching my new Flow topic
     When I reply with comment "I want to watch this title"
     Then I should see an unwatch link on the topic
-
-# TODO maybe should test simple Cancelling reply as well.
-
-  Scenario: Previewing reply, continue editing, then cancel leaves usable form
-    Given I have created a Flow topic with title "Reply preview test"
-    When I start a reply with comment "my form lies over the ocean"
-      And I click the Preview button
-      And I click the Keep editing button
-      And I click the Cancel button and confirm the dialog
-      And I start a reply with comment "bring back my form to me"
-     Then I should see the topic reply form
diff --git a/tests/browser/features/step_definitions/reply_steps.rb 
b/tests/browser/features/step_definitions/reply_steps.rb
index 857b687..f480463 100644
--- a/tests/browser/features/step_definitions/reply_steps.rb
+++ b/tests/browser/features/step_definitions/reply_steps.rb
@@ -13,21 +13,6 @@
   end
 end
 
-When(/^I click the Keep editing button$/) do
-  on(FlowPage) do |page|
-    page.keep_editing_element.when_present.click
-    # Keep editing returns to the Preview button.
-    page.wait_until { page.new_reply_preview_element.visible? }
-  end
-end
-
-When(/^I click the Preview button$/) do
-  on(FlowPage) do |page|
-    page.new_reply_preview_element.when_present.click
-    page.wait_until { page.preview_warning_element.visible? }
-  end
-end
-
 When(/^I reply with comment "(.*?)"$/) do |content|
   on(FlowPage) do |page|
     page.new_reply_save_element.when_not_present
diff --git a/tests/browser/features/support/pages/flow_page.rb 
b/tests/browser/features/support/pages/flow_page.rb
index 4a05224..95d859d 100644
--- a/tests/browser/features/support/pages/flow_page.rb
+++ b/tests/browser/features/support/pages/flow_page.rb
@@ -182,7 +182,6 @@
   text_field(:new_topic_title, name: "topiclist_topic")
   textarea(:new_topic_body, name: "topiclist_content")
   button(:new_topic_cancel, css: ".flow-newtopic-form .mw-ui-destructive")
-  button(:new_topic_preview, css: ".flow-newtopic-form .mw-ui-progressive")
   # FIXME: Remove flow-ui-constructive reference when cache has cleared
   button(:new_topic_save, css: ".flow-newtopic-form .mw-ui-constructive, 
.flow-newtopic-form .flow-ui-constructive")
 
@@ -193,16 +192,13 @@
   # Is an input when not focused, textarea when focused
   textarea(:new_reply_input, css: ".flow-reply-form .mw-ui-input")
   button(:new_reply_cancel, css: ".flow-reply-form .mw-ui-destructive")
-  button(:new_reply_preview, css: ".flow-reply-form .mw-ui-progressive")
   button(:new_reply_save, css: ".flow-reply-form .mw-ui-constructive")
   button(:keep_editing, text: "Keep editing")
-  div(:preview_warning, css: ".flow-preview-warning")
 
   # Editing post workflow
   text_area(:post_edit, css: ".flow-edit-post-form textarea")
   button(:change_post_save, css: ".flow-edit-post-form .mw-ui-constructive")
 
-  button(:preview_button, class: "mw-ui-button flow-preview-submit")
   div(:small_spinner, class: "mw-spinner mw-spinner-small mw-spinner-inline")
 
   button(:edit_header_save, text: "Save header")
diff --git a/tests/qunit/engine/components/board/test_flow-board.js 
b/tests/qunit/engine/components/board/test_flow-board.js
index 4dc064e..189eb71 100644
--- a/tests/qunit/engine/components/board/test_flow-board.js
+++ b/tests/qunit/engine/components/board/test_flow-board.js
@@ -128,57 +128,4 @@
        } );
 } );
 
-QUnit.test( 'FlowBoardComponent.UI.events.apiHandlers.preview', 3, function( 
assert ) {
-       var $container = this.$el,
-               $form = $( '<form>' ).appendTo( $container ),
-               $input = $( '<input value="HEADING">' ).appendTo( $form ),
-               $textarea = $( '<textarea 
data-flow-preview-template="flow_post">text</textarea>' ).appendTo( $form ),
-               $btn = $( '<button name="preview">' ).
-                       appendTo( $form ),
-               info = {
-                       $target: $textarea,
-                       status: 'done'
-               },
-               data = {
-                       'flow-parsoid-utils': {
-                               format: 'html',
-                               content: 'hello'
-                       }
-               };
-
-       this.triggerEvent( 'apiHandlers', 'preview', $btn, info, data );
-
-       // check all is well.
-       assert.strictEqual( $container.find( '.flow-preview-warning' ).length, 
1, 'There is a preview warning.' );
-       assert.strictEqual( $textarea.hasClass( 'flow-preview-target-hidden' ), 
true, 'Textarea is hidden.' );
-       assert.strictEqual( $input.hasClass( 'flow-preview-target-hidden' ), 
true, 'Input is hidden.' );
-} );
-
-QUnit.test( 'FlowBoardComponent.UI.events.apiHandlers.preview (summary)', 3, 
function( assert ) {
-       var $container = this.$el,
-               $form = $( '<form>' ).appendTo( $container ),
-               $textarea = $( '<textarea 
data-flow-preview-template="flow_topic_titlebar_summary.partial">text</textarea>'
 ).appendTo( $form ),
-               $btn = $( '<button name="preview">' ).
-                       appendTo( $form ),
-               info = {
-                       $target: $textarea,
-                       status: 'done'
-               },
-               data = {
-                       'flow-parsoid-utils': {
-                               format: 'html',
-                               content: 'hello'
-                       }
-               };
-
-       this.triggerEvent( 'apiHandlers', 'preview', $btn, info, data );
-
-       // check all is well.
-       assert.strictEqual( $container.find( '.flow-preview-warning' ).length, 
1,
-               'There is a preview warning.' );
-       assert.strictEqual( $container.find( '.flow-topic-summary' ).length, 1, 
'Summary visible.' );
-       assert.strictEqual( $.trim( $container.find( '.flow-topic-summary' 
).text() ),
-               'hello', 'Check content of summary.' );
-} );
-
 } ( jQuery ) );

-- 
To view, visit https://gerrit.wikimedia.org/r/199541
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: If19fc8ec1d50d94451154558eb80277d72814981
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/extensions/Flow
Gerrit-Branch: master
Gerrit-Owner: EBernhardson <[email protected]>
Gerrit-Reviewer: Mattflaschen <[email protected]>
Gerrit-Reviewer: Matthias Mullie <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to