Index: src/wp-admin/css/common.css
===================================================================
--- src/wp-admin/css/common.css	(revision 41752)
+++ src/wp-admin/css/common.css	(working copy)
@@ -3147,6 +3147,10 @@
 	line-height: 180%;
 }
 
+#file-editor-warning .file-editor-warning-content {
+	margin: 25px;
+}
+
 /* @todo: can we use a common class for these? */
 .nav-menus-php .item-edit:before,
 .widget-top .widget-action .toggle-indicator:before,
Index: src/wp-admin/js/theme-plugin-editor.js
===================================================================
--- src/wp-admin/js/theme-plugin-editor.js	(revision 41752)
+++ src/wp-admin/js/theme-plugin-editor.js	(working copy)
@@ -46,7 +46,14 @@
 		component.form.on( 'submit', component.submit );
 		component.textarea = component.form.find( '#newcontent' );
 		component.textarea.on( 'change', component.onChange );
+component.warning = $( '.file-editor-warning' );
 
+if ( component.warning.length > 0 ) {
+	$( 'body' ).addClass( 'modal-open' );
+	component.warning.on( 'click', '.notice-dismiss', component.dismissWarning );
+};
+
+
 		if ( false !== component.codeEditor ) {
 			/*
 			 * Defer adding notices until after DOM ready as workaround for WP Admin injecting
@@ -66,6 +73,15 @@
 		} );
 	};
 
+component.dismissWarning = function() {
+// update user meta
+// hide modal
+component.warning.remove();
+$( 'body' ).removeClass( 'modal-open' );
+
+// return focus
+}
+
 	/**
 	 * Callback for when a change happens.
 	 *
Index: src/wp-admin/plugin-editor.php
===================================================================
--- src/wp-admin/plugin-editor.php	(revision 41752)
+++ src/wp-admin/plugin-editor.php	(working copy)
@@ -280,5 +280,21 @@
 <br class="clear" />
 </div>
 <?php
+$hide_notice = get_user_meta( get_current_user_id(), 'hide_plugin_editor_notice', true ); 
+if ( empty( $hide_notice ) ) :
+?>
+<div id="file-editor-warning" class="notification-dialog-wrap file-editor-warning hide-if-no-js">
+	<div class="notification-dialog-background"></div>
+	<div class="notification-dialog" role="dialog" aria-labelledby="file-editor-warning-title" tabindex="0">
+		<div class="file-editor-warning-content">
+			<h1 id="file-editor-warning-title"><?php _e( 'Heads up!' ); ?></h1>
+			<p><?php _e( 'You appear to be making direct edits to your plugin in the WordPress dashboard. We recommend that you don&#8217;t! Editing plugins directly may introduce incompatibilities that break your site or even leave you staring at the dreaded &#8220;White Screen of Death&#8221;. Your changes may also be overwritten by future updates.' ); ?></p>
+			<p><?php _e( 'If you absolutely must edit a plugin this way, WordPress will attempt to prevent you from being locked out from the dashboard entirely, but cannot guarantee results. Once dismissed, this notice will not appear again.' ); ?></p>
+		</div>
+		<button type="button" class="notice-dismiss"><span class="screen-reader-text"><?php _e( 'Dismiss' ); ?></span></button>
+	</div>
+</div>
+<?php
+endif; // editor warning notice
 
 include(ABSPATH . "wp-admin/admin-footer.php");
Index: src/wp-admin/theme-editor.php
===================================================================
--- src/wp-admin/theme-editor.php	(revision 41752)
+++ src/wp-admin/theme-editor.php	(working copy)
@@ -309,5 +309,21 @@
 <br class="clear" />
 </div>
 <?php
+$hide_notice = get_user_meta( get_current_user_id(), 'hide_theme_editor_notice', true ); 
+if ( empty( $hide_notice ) ) :
+?>
+<div id="file-editor-warning" class="notification-dialog-wrap file-editor-warning hide-if-no-js">
+	<div class="notification-dialog-background"></div>
+	<div class="notification-dialog" role="dialog" aria-labelledby="file-editor-warning-title" tabindex="0">
+		<div class="file-editor-warning-content">
+			<h1 id="file-editor-warning-title"><?php _e( 'Heads up!' ); ?></h1>
+			<p><?php _e( 'You appear to be making direct edits to your plugin in the WordPress dashboard. We recommend that you don&#8217;t! Editing plugins directly may introduce incompatibilities that break your site or even leave you staring at the dreaded &#8220;White Screen of Death&#8221;. Your changes may also be overwritten by future updates.' ); ?></p>
+			<p><?php _e( 'If you absolutely must edit a plugin this way, WordPress will attempt to prevent you from being locked out from the dashboard entirely, but cannot guarantee results. Once dismissed, this notice will not appear again.' ); ?></p>
+		</div>
+		<button type="button" class="notice-dismiss"><span class="screen-reader-text"><?php _e( 'Dismiss' ); ?></span></button>
+	</div>
+</div>
+<?php
+endif; // editor warning notice
 
 include(ABSPATH . 'wp-admin/admin-footer.php' );
