diff --git a/changelog.html b/changelog.html index 1b8c3e0966709cb061ea1732f4b78d4eaffeee13..87b407b719397f4a7776e1044bc594cb284bd940 100644 --- a/changelog.html +++ b/changelog.html @@ -70,6 +70,9 @@ Upcoming changes
  • Managed windows slaves can be now run as a specific user account (pull #289) +
  • + Description field now has the preview button to test it inline. + (pull #243)
  • Maven mojo records can be now sorted diff --git a/core/src/main/java/hudson/markup/MarkupFormatter.java b/core/src/main/java/hudson/markup/MarkupFormatter.java index a1b3a594e57449611dc8a613e2cc08748b676ffc..4ed37c2297d1bd0be34d6ea713063f5ea6971d23 100644 --- a/core/src/main/java/hudson/markup/MarkupFormatter.java +++ b/core/src/main/java/hudson/markup/MarkupFormatter.java @@ -25,7 +25,14 @@ package hudson.markup; import hudson.ExtensionPoint; import hudson.model.AbstractDescribableImpl; +import hudson.util.HttpResponses; +import jenkins.model.Jenkins; +import org.kohsuke.stapler.HttpResponse; +import org.kohsuke.stapler.QueryParameter; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; +import javax.servlet.ServletException; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; @@ -91,4 +98,14 @@ public abstract class MarkupFormatter extends AbstractDescribableImpl + codemirror-mode="${app.markupFormatter.codeMirrorMode}" codemirror-config="${app.markupFormatter.codeMirrorConfig}" previewEndpoint="/markupFormatter/previewDescription"/>
    diff --git a/core/src/main/resources/hudson/model/AbstractModelObject/editDescription.jelly b/core/src/main/resources/hudson/model/AbstractModelObject/editDescription.jelly index a450bc6bc2e49e48e682b59e45efc3a0aee713a4..2e211b6221287f49c065d8e7d40d580dc588c55c 100644 --- a/core/src/main/resources/hudson/model/AbstractModelObject/editDescription.jelly +++ b/core/src/main/resources/hudson/model/AbstractModelObject/editDescription.jelly @@ -34,7 +34,7 @@ THE SOFTWARE. + codemirror-mode="${app.markupFormatter.codeMirrorMode}" codemirror-config="${app.markupFormatter.codeMirrorConfig}" previewEndpoint="/markupFormatter/previewDescription"/>
    diff --git a/core/src/main/resources/hudson/model/Job/configure.jelly b/core/src/main/resources/hudson/model/Job/configure.jelly index 3000b57320e2606b1635954efe3ad256ae540406..dcfc7ee5dde4f14b3b0f471536b0a2196a8d40ea 100644 --- a/core/src/main/resources/hudson/model/Job/configure.jelly +++ b/core/src/main/resources/hudson/model/Job/configure.jelly @@ -41,7 +41,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/model/Run/configure.jelly b/core/src/main/resources/hudson/model/Run/configure.jelly index c71262878db967182fbb52e2b4aebc1e5a718bfa..52c9ff41426a11e152887fb30002e1817296bc9a 100644 --- a/core/src/main/resources/hudson/model/Run/configure.jelly +++ b/core/src/main/resources/hudson/model/Run/configure.jelly @@ -33,7 +33,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/hudson/model/View/configure.jelly b/core/src/main/resources/hudson/model/View/configure.jelly index 5253f0272ac5c3e462a412e54400c267ba1f3645..e8817cc5452ce36664f2925e30feb83f8c187bb6 100644 --- a/core/src/main/resources/hudson/model/View/configure.jelly +++ b/core/src/main/resources/hudson/model/View/configure.jelly @@ -39,7 +39,7 @@ THE SOFTWARE. - + diff --git a/core/src/main/resources/jenkins/model/Jenkins/configure.jelly b/core/src/main/resources/jenkins/model/Jenkins/configure.jelly index c4ba3f6a358da952debb56698d7d6ebbce31cb2b..5bee9554029da4eefec341c99c4defdc7d645a05 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/configure.jelly +++ b/core/src/main/resources/jenkins/model/Jenkins/configure.jelly @@ -48,7 +48,7 @@ THE SOFTWARE. + codemirror-mode="${app.markupFormatter.codeMirrorMode}" codemirror-config="${app.markupFormatter.codeMirrorConfig}" previewEndpoint="/markupFormatter/previewDescription"/> diff --git a/core/src/main/resources/lib/form/textarea.jelly b/core/src/main/resources/lib/form/textarea.jelly index 0a940dfd542d4faf01294fcab5721e7dd93998f2..a75866117795735ea318f97e6fe43630f41af6df 100644 --- a/core/src/main/resources/lib/form/textarea.jelly +++ b/core/src/main/resources/lib/form/textarea.jelly @@ -60,6 +60,10 @@ THE SOFTWARE. Specifies additional key/value pairs in the JSON format (except the start and end bracket) to be passed as CodeMirror option object. + + If specified, this text area has preview feature. + The previewEndpoint is used to obtain formatted html. + @@ -80,4 +84,14 @@ THE SOFTWARE.
    + + + diff --git a/war/src/main/webapp/css/style.css b/war/src/main/webapp/css/style.css index eb88fdde1897aba8fe94a29f7d1cc12e4d36c02d..c8ab78010b1bd020433e5a20ee9075c243bb43b5 100644 --- a/war/src/main/webapp/css/style.css +++ b/war/src/main/webapp/css/style.css @@ -1003,3 +1003,13 @@ table.progress-bar.red td.progress-bar-done { .tag7 { font-size: 1.70em; } .tag8 { font-size: 1.80em; } .tag9 { font-size: 1.90em; } + +/* ========================= textarea.jelly ================== */ + +.textarea-preview-container { + text-align:left; +} +.textarea-preview { + background-color: #F0F0F0; + padding: 0.5em; +} diff --git a/war/src/main/webapp/scripts/hudson-behavior.js b/war/src/main/webapp/scripts/hudson-behavior.js index a71d00b9f2f81623ea49413e2b1b2248ca9859d8..bf2bc6d1becf5073b8dbc4a743095cc959a89eb4 100644 --- a/war/src/main/webapp/scripts/hudson-behavior.js +++ b/war/src/main/webapp/scripts/hudson-behavior.js @@ -1194,6 +1194,45 @@ var hudsonRules = { ".button-with-dropdown" : function (e) { new YAHOO.widget.Button(e, { type: "menu", menu: e.nextSibling }); + }, + + "DIV.textarea-preview-container" : function (e) { + var previewDiv = findElementsBySelector(e,".textarea-preview")[0]; + var showPreview = findElementsBySelector(e,".textarea-show-preview")[0]; + var hidePreview = findElementsBySelector(e,".textarea-hide-preview")[0]; + $(hidePreview).hide(); + $(previewDiv).hide(); + + showPreview.onclick = function() { + // Several TEXTAREAs may exist if CodeMirror is enabled. The first one has reference to the CodeMirror object. + var textarea = e.parentNode.getElementsByTagName("TEXTAREA")[0]; + var text = textarea.codemirrorObject ? textarea.codemirrorObject.getValue() : textarea.value; + var render = function(txt) { + $(hidePreview).show(); + $(previewDiv).show(); + previewDiv.innerHTML = txt; + }; + + new Ajax.Request(rootURL + showPreview.getAttribute("previewEndpoint"), { + method: "POST", + requestHeaders: "Content-Type: application/x-www-form-urlencoded", + parameters: { + text: text + }, + onSuccess: function(obj) { + render(obj.responseText) + }, + onFailure: function(obj) { + render(obj.status + " " + obj.statusText + "
    " + obj.responseText) + } + }); + return false; + } + + hidePreview.onclick = function() { + $(hidePreview).hide(); + $(previewDiv).hide(); + }; } }; @@ -2357,4 +2396,3 @@ function createComboBox(idOrField,valueFunction) { Ajax.Request.prototype.dispatchException = function(e) { throw e; } -