提交 353bbfa5 编写于 作者: K Kohsuke Kawaguchi

adding one more example

上级 57777440
package jenkins.plugins.ui_samples;
import hudson.Extension;
import java.util.Arrays;
import java.util.List;
/**
* Define portions of view fragments in separate methods/classes to improve reuse.
*
* @author Kohsuke Kawaguchi
*/
@Extension
public class ModularizeViewScript extends UISample {
@Override
public String getDescription() {
return "Define portions of view fragments in separate methods/classes to improve reuse";
}
public List<SourceFile> getSourceFiles() {
// TODO: generate this from index
return Arrays.asList(new SourceFile("index.groovy"));
}
@Extension
public static final class DescriptorImpl extends UISampleDescriptor {
}
}
package jenkins.plugins.ui_samples.ModularizeViewScript
import org.kohsuke.stapler.jelly.groovy.JellyBuilder
import lib.FormTagLib
namespace("/lib/samples").sample(title:_("Define View Fragments Elsewhere")) {
// normally this is how you generate tags,
// but these are actually just a syntax sugar for method calls to the "delegate" object.
h2("One")
div (style:"border:1px solid blue") {
p("some pointless text")
}
// so all we need to do is to pass around this delegate object and then you can generate fragments
// from elsewhere
new SomeGenerator(builder).generateSomeFragment()
}
// I defined this class here just to make the sample concise.
// this class can be defined anywhere, and typically you'd do this somewhere in your src/main/groovy
static class SomeGenerator {
JellyBuilder builder;
FormTagLib f;
SomeGenerator(JellyBuilder builder) {
this.builder = builder
f = builder.namespace(FormTagLib.class)
}
// this wrapper makes it so that we don't have to explicitly call with "builder."
// the 'with' method in GDK doesn't work nicely because it does DELEGATE_FIRST resolution,
// and you can accidentally pick up variables defined in the ancestor JellyContexts.
def generate(Closure closure) {
closure = closure.clone();
closure.delegate = builder;
return closure.call();
}
def generateSomeFragment() {
generate {
h2("Two") // this call is a shorthand for builder.h2("Two")
div(style:"background-color:gray; padding:2em") {
// calling other methods
generateMoreFragment("Testing generation");
}
}
}
def generateMoreFragment(String msg) {
generate {
h2(msg);
f.textarea();
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册