changeset 193:f6ab8af58055 0.2.0

UI improvements to page editing: - Fixed problems with element sizing. - Fixed preview of meta properties. - Renamed `@color-footer` to `@color-gray`.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 06 Feb 2014 08:00:05 -0800
parents 80cf68b83d32
children 07528bfadd35
files wikked/assets/css/custom-variables.less wikked/assets/css/wikked.less wikked/assets/css/wikked/base.less wikked/assets/css/wikked/page.less wikked/assets/js/wikked/views.js wikked/assets/tpl/edit-page.html
diffstat 6 files changed, 66 insertions(+), 61 deletions(-) [+]
line wrap: on
line diff
--- a/wikked/assets/css/custom-variables.less	Thu Feb 06 07:59:12 2014 -0800
+++ b/wikked/assets/css/custom-variables.less	Thu Feb 06 08:00:05 2014 -0800
@@ -22,3 +22,5 @@
 
 @icon-font-path:          "../bootstrap/fonts/";
 
+@blockquote-border-color: @color-green;
+
--- a/wikked/assets/css/wikked.less	Thu Feb 06 07:59:12 2014 -0800
+++ b/wikked/assets/css/wikked.less	Thu Feb 06 08:00:05 2014 -0800
@@ -1,8 +1,10 @@
-// Start with Bootstrap.
+// Import basic variables and mixins.
+@import "wikked/base.less";
+
+// Then include Bootstrap.
 @import "../bootstrap/less/bootstrap.less";
 
 // Now import our styles.
-@import "wikked/base.less";
 @import "wikked/main.less";
 @import "wikked/page.less";
 @import "wikked/alerts.less";
--- a/wikked/assets/css/wikked/base.less	Thu Feb 06 07:59:12 2014 -0800
+++ b/wikked/assets/css/wikked/base.less	Thu Feb 06 08:00:05 2014 -0800
@@ -5,8 +5,8 @@
 @color-orange: #B03500;
 @color-green: #B6CC95;
 @color-green-dark: #496B15;
-@color-footer: rgb(220, 220, 220);
-@color-footer-dark: rgb(170, 170, 170);
+@color-gray: rgb(220, 220, 220);
+@color-gray-dark: rgb(170, 170, 170);
 @color-code: #523C37;
 
 
--- a/wikked/assets/css/wikked/page.less	Thu Feb 06 07:59:12 2014 -0800
+++ b/wikked/assets/css/wikked/page.less	Thu Feb 06 08:00:05 2014 -0800
@@ -40,8 +40,8 @@
     padding: 0 @line-height-computed;
 }
 footer {
-    color: @color-footer-dark;
-    border-top: 1px solid @color-footer;
+    color: @color-gray-dark;
+    border-top: 1px solid @color-gray;
     padding: @line-height-computed 0;
     font-weight: 300;
     font-size: @font-size-small;
@@ -50,11 +50,11 @@
 
     a {
         text-decoration: none;
-        color: @color-footer-dark;
-        &:link { color: @color-footer-dark; }
-        &:visited { color: @color-footer-dark; }
+        color: @color-gray-dark;
+        &:link { color: @color-gray-dark; }
+        &:visited { color: @color-gray-dark; }
         &:hover { color: @color-green-dark; text-decoration: none; }
-        &:active { color: @color-footer-dark; }
+        &:active { color: @color-gray-dark; }
     }
     ul {
         list-type: none;
@@ -81,7 +81,7 @@
     font-weight: 200;
     font-size: 0.7em;
     letter-spacing: 0.1em;
-    color: @color-footer;
+    color: @color-gray;
     .rev_id {
         font-family: @font-family-monospace;
     }
@@ -94,10 +94,10 @@
 section.info {
     margin: @line-height-computed 0 0 0;
     padding: @line-height-computed 0;
-    border-top: 1px solid @color-footer;
+    border-top: 1px solid @color-gray;
 
     .info-categories {
-        color: @color-footer-dark;
+        color: @color-gray-dark;
         font-weight: 300;
         font-size: @font-size-small;
         font-family: @font-family-sans-serif;
@@ -170,8 +170,6 @@
 }
 
 // Page editing
-#wmd-button-bar { float: left; }
-#wmd-extra-bar { width: 100px; }
 #wmd-preview-button span {
     background: url(../img/markdown-32x20.png);
     width: 32px;
@@ -199,20 +197,17 @@
 #wmd-full-preview-button {
     display: inline-block;
 }
-//#wmd-preview-wrapper {
-//    border: 1px dashed @colorBlueDark;
-//
-//    h3 {
-//        margin: 0.5em 1em 0.5em 1em;
-//    }
-//    #wmd-preview {
-//        margin: 1em;
-//        background: none;
-//    }
-//}
-//#wmd-button-bar li {
-//    margin-left: 0;
-//}
+#wmd-preview-wrapper {
+    border: 1px solid @gray-light;
+
+    #wmd-preview {
+        margin: 1em;
+        background: none;
+    }
+}
+#wmd-preview {
+    overflow: scroll;
+}
 .preview>h3 {
     margin: 0;
     padding: 0;
@@ -223,11 +218,10 @@
         color: #fff;
         padding: 0.2em 0.4em 0.2em 0.6em;
         border-radius: 0.5em 0 0 0.5em;
-        font-variant: small-caps;
-        letter-spacing: 0.18em;
+        letter-spacing: 0.03em;
     }
     .meta-value {
-        background: @color-footer;
+        background: @color-gray;
         color: black;
         padding: 0.2em 0.6em 0.2em 0.4em;
         border-radius:  0 0.5em 0.5em 0;
--- a/wikked/assets/js/wikked/views.js	Thu Feb 06 07:59:12 2014 -0800
+++ b/wikked/assets/js/wikked/views.js	Thu Feb 06 08:00:05 2014 -0800
@@ -366,25 +366,33 @@
 
             // Cache some stuff.
             this._ctrlInput = $('#wmd-input');
+            this._ctrlInputWrapper = $('#wmd-input-wrapper');
             this._ctrlPreview = $('#wmd-preview');
+            this._ctrlPreviewWrapper = $('#wmd-preview-wrapper');
 
             // Create the Markdown editor.
-            var formatter = new Client.PageFormatter();
-            formatter.baseUrl = this.model.get('path').match(/.*\//);
-            var converter = PageDownConverter.getSanitizingConverter();
+            var m = this.model.get('path').match(/(.*)\/?/);
+            var baseUrl = m[1];
+            var lastSlash = baseUrl.lastIndexOf('/');
+            if (lastSlash >= 0)
+                baseUrl = baseUrl.substr(0, lastSlash);
+            else
+                baseUrl = '';
+            var formatter = new Client.PageFormatter(baseUrl);
+            var converter = new Markdown.Converter();
             converter.hooks.chain("preConversion", function(text) {
                 return formatter.formatText(text);
             });
             var $view = this;
             var editor = new PageDownConverter.Editor(converter); //TODO: pass options
             editor.hooks.chain("onPreviewRefresh", function() {
-                $view._updateUI(true);
+                $view._updateInputFromPreview();
             });
             editor.run();
 
             // Setup UI.
-            this._updateUI();
             $('.preview').hide();
+            this._isPreviewVisible = false;
 
             // Start validation on the form.
             $('#page-edit').validate({
@@ -407,12 +415,13 @@
         },
         _inputGripMouseDown: function(e) {
             // Input area resizing with the grip.
-            var last_pageY;
-            last_pageY = e.pageY;
+            var $view = this;
+            var last_pageY = e.pageY;
             $('body')
                 .on('mousemove.wikked.editor_resize', function(e) {
-                    var editor_control = $('#wmd-input');
+                    var editor_control = $view._ctrlInput;
                     editor_control.height(editor_control.height() + e.pageY - last_pageY);
+                    $view._ctrlPreview.height(editor_control.height());
                     last_pageY = e.pageY;
                 })
                 .on('mouseup.wikked.editor_resize mouseleave.wikked.editor_resize', function(e) {
@@ -422,11 +431,12 @@
         _togglePreview: function(e) {
             // Show/hide live preview.
             var w = $('body').width() - 40;
-            if (this._ctrlPreview.is(":visible")) {
+            if (this._isPreviewVisible) {
                 this._removePreview();
             } else {
                 this._addPreview();
             }
+            this._isPreviewVisible = !this._isPreviewVisible;
             e.preventDefault();
             return false;
         },
@@ -437,8 +447,6 @@
             $('.editing-wrapper').addClass('row');
             $('.editing-wrapper>.editing').addClass('col-md-6');
             $('.editing-wrapper>.preview').addClass('col-md-6').show();
-
-            this._updateUI(true);
         },
         _removePreview: function() {
             $('article').removeClass('container-fluid').removeClass('wide');
@@ -447,8 +455,6 @@
             $('.editing-wrapper').removeClass('row');
             $('.editing-wrapper>.editing').removeClass('col-md-6');
             $('.editing-wrapper>.preview').removeClass('col-md-6').hide();
-        
-            this._updateUI();
         },
         _toggleFullPreview: function(e) {
             var $view = this;
@@ -461,7 +467,7 @@
                     var previewEl = $('#wmd-preview');
                     previewEl.html(data.text);
                     processWikiLinks(previewEl);
-                    $view._updateUI(true);
+                    $view._updateInputFromPreview();
                 })
                 .error(function() {
                     $('#wmd-preview').html("Error running preview.");
@@ -469,16 +475,13 @@
             e.preventDefault();
             return false;
         },
-        _updateUI: function(setHeight) {
-            var inputWidth = $('#wmd-input-wrapper').innerWidth();
-            this._ctrlInput.outerWidth(inputWidth);
-
-            if (setHeight === true) {
-                var maxHeight = Math.max(
-                    this._ctrlPreview.height(),
-                    this._ctrlInput.height());
-                this._ctrlInput.height(maxHeight);
-            }
+        _updateInputFromPreview: function() {
+            if (this._isPreviewVisible)
+                this._ctrlInput.height(this._ctrlPreview.height());
+        },
+        _updatePreviewFromInput: function() {
+            if (this._isPreviewVisible)
+                this._ctrlPreview.height(this._ctrlInput.height());
         },
         _submitEditedPage: function(e) {
             // Make the model submit the form.
--- a/wikked/assets/tpl/edit-page.html	Thu Feb 06 07:59:12 2014 -0800
+++ b/wikked/assets/tpl/edit-page.html	Thu Feb 06 08:00:05 2014 -0800
@@ -8,7 +8,7 @@
                         <span class="input-group-addon">Title</span>
                         <input type="text" name="title" class="form-control input-xxlarge" placeholder="New Page" required="true"></input>
                     </div>
-                    <span class="help-block small">You can put this page in a folder by entering a title like <code>Folder/Page Title</code>.</span>
+                    <span class="help-block small" for="title">You can put this page in a folder by entering a title like <code>Folder/Page Title</code>.</span>
                 </div>
                 {{else}}
                 <h1>{{meta.title}} <span class="decorator">Editing</span></h1>
@@ -60,10 +60,14 @@
                 </section>
             </div>
             <div class="preview">
-                <h3>Preview
-                    <button id="wmd-full-preview-button" class="btn btn-xs">Full Preview</button>
-                </h3>
-                <div id="wmd-preview"></div>
+                <section id="wmd-preview-button-bar-wrapper">
+                    <div class="form-group">
+                        <button id="wmd-full-preview-button" class="btn btn-xs" title="Run a full preview on the text, with queries and includes">Full Preview</button>
+                    </div>
+                </section>
+                <section id="wmd-preview-wrapper">
+                    <div id="wmd-preview"></div>
+                </section>
             </div>
         </div>
     </form>