Skip to content

Commit

Permalink
Introducing Screen API for convenient manipulation of the GUI Screen …
Browse files Browse the repository at this point in the history
…model.
  • Loading branch information
nmihajlovski committed Mar 6, 2016
1 parent d7440db commit e978f17
Show file tree
Hide file tree
Showing 15 changed files with 230 additions and 84 deletions.
34 changes: 33 additions & 1 deletion rapidoid-gui/src/main/java/org/rapidoid/gui/HtmlPage.java
Expand Up @@ -61,14 +61,20 @@ private static void initTemplates() {
}
}

private String title = "";
private Object brand;

private String title;

private Object content;

private PageMenu menu;

private boolean embedded;

private boolean search;

private boolean cdn = !Env.dev();

public HtmlPage(Object content) {
this.content = content;
}
Expand Down Expand Up @@ -113,8 +119,10 @@ private Map<String, Object> pageModel() {
model.put("result", multi((Object[]) content)); // FIXME rename result to content

model.put("home", "/");
model.put("brand", brand);
model.put("title", title);
model.put("menu", menu);
model.put("search", search);

model.put("embedded", embedded || req.attrs().get("_embedded") != null);

Expand All @@ -123,6 +131,15 @@ private Map<String, Object> pageModel() {
return model;
}

public Object brand() {
return brand;
}

public HtmlPage brand(Object brand) {
this.brand = brand;
return this;
}

public String title() {
return title;
}
Expand Down Expand Up @@ -159,4 +176,19 @@ public HtmlPage embedded(boolean embedded) {
return this;
}

public boolean search() {
return search;
}

public void search(boolean search) {
this.search = search;
}

public boolean cdn() {
return cdn;
}

public void cdn(boolean cdn) {
this.cdn = cdn;
}
}
21 changes: 8 additions & 13 deletions rapidoid-html/src/main/resources/rapidoid/partials/page-body.html
@@ -1,32 +1,27 @@
{{^error}}
<body class="rapidoid" ng-controller="Main" ng-app="app">

<div ng-if="!ajaxBodyContent">
{{^error}}{{>page-content}}{{/error}}
</div>
<div ng-if="!ajaxBodyContent">
{{>page-content}}
</div>

<div compile="ajaxBodyContent" ng-if="ajaxBodyContent"></div>
<div compile="ajaxBodyContent" ng-if="ajaxBodyContent"></div>

{{>page-modal}}

{{#dev}}
{{^cdn}}
<script src="/jquery-2.1.4.min.js"></script>
<script src="/bootstrap/js/bootstrap-3.3.5.min.js"></script>
<script src="/angular-1.4.3.min.js"></script>
<script src="/rapidoid.min.js"></script>
{{/dev}}
{{^dev}}
{{/cdn}}
{{#cdn}}
<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
<script src="//cdn.jsdelivr.net/rapidoid/{{version}}/rapidoid.min.js"></script>
{{/dev}}
{{/cdn}}

<script src="/app.js"></script>
{{#_js}}<script src="/{{req.name}}.js"></script>{{/_js}}

{{>page-tail}}

</body>
{{/error}}
{{#error}}{{>page-error}}{{/error}}
@@ -1 +1 @@
<a class="navbar-brand" href="{{home}}">{{title}}</a>
<a class="navbar-brand" href="{{home}}">{{{brand}}}</a>
@@ -1 +1 @@
{{^error}}{{>page-navbar}}{{{content}}}{{/error}}{{#error}}{{>page-error}}{{/error}}
{{>page-navbar}}{{{content}}}
20 changes: 0 additions & 20 deletions rapidoid-html/src/main/resources/rapidoid/partials/page-error.html

This file was deleted.

14 changes: 0 additions & 14 deletions rapidoid-html/src/main/resources/rapidoid/partials/page-modal.html

This file was deleted.

@@ -1,2 +1 @@
{{^error}}{{>page-content}}{{/error}}
{{#error}}{{>page-error}}{{/error}}
{{>page-content}}
10 changes: 4 additions & 6 deletions rapidoid-html/src/main/resources/rapidoid/templates/page.html
Expand Up @@ -18,16 +18,16 @@
<script src="http://maps.google.com/maps/api/js?sensor=true"></script>
{{/maps}}

{{#dev}}
{{^cdn}}
<link href="/bootstrap/css/bootstrap-3.3.5.min.css" rel="stylesheet">
<link href="/font-awesome/css/font-awesome-4.4.0.min.css" rel="stylesheet">
<link href="/rapidoid.min.css" rel="stylesheet">
{{/dev}}
{{^dev}}
{{/cdn}}
{{#cdn}}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet">
<link href="//cdn.jsdelivr.net/rapidoid/4.1.0/rapidoid.min.css" rel="stylesheet">
{{/dev}}
{{/cdn}}

<link href="/app.css" rel="stylesheet">
{{#_css}}<link href="/{{req.name}}.css" rel="stylesheet">{{/_css}}
Expand All @@ -36,12 +36,10 @@

{{>page-head}}

{{^error}}
<script>
{{#req.renderState}}window.__state = {{{req.renderState}}};{{/req.renderState}}
{{#viewState}}window.__state = {{{req.renderState}}};{{/viewState}}
</script>
{{/error}}

</head>

Expand Down
5 changes: 5 additions & 0 deletions rapidoid-http-fast/src/main/java/org/rapidoid/http/Resp.java
Expand Up @@ -222,4 +222,9 @@ public interface Resp {
*/
void logout();

/**
* Provides a convenient access to some common GUI screen attributes of the underlying MVC model: <code>Resp#model()</code>.
*/
Screen screen();

}
62 changes: 61 additions & 1 deletion rapidoid-http-fast/src/main/java/org/rapidoid/http/RespImpl.java
Expand Up @@ -43,7 +43,7 @@

@Authors("Nikolche Mihajlovski")
@Since("5.0.x")
public class RespImpl implements Resp {
public class RespImpl implements Resp, Screen {

private final ReqImpl req;

Expand Down Expand Up @@ -294,6 +294,11 @@ public void logout() {
request().cookiepack().remove(HttpUtils._USER);
}

@Override
public Screen screen() {
return this;
}

@Override
public OutputStream out() {
U.must(content() == null, "The response content has already been set, so cannot write the response through OutputStream, too!");
Expand Down Expand Up @@ -375,4 +380,59 @@ private byte[] render() {
}
}

@Override
public Screen title(String title) {
model().put("title", title);
return this;
}

@Override
public String title() {
return (String) model().get("title");
}

@Override
public Screen brand(Object brand) {
model().put("brand", brand);
return this;
}

@Override
public Object brand() {
return model().get("brand");
}

@Override
public Screen menu(Object menu) {
model().put("menu", menu);
return this;
}

@Override
public Object menu() {
return model().get("menu");
}

@Override
public Screen search(boolean search) {
model().put("search", search);
return this;
}

@Override
public Boolean search() {
return (Boolean) model().get("search");
}

@Override
public Screen cdn(boolean cdn) {
model().put("cdn", cdn);
return this;
}

@Override
public Boolean cdn() {
return (Boolean) model().get("cdn");
}

}
92 changes: 92 additions & 0 deletions rapidoid-http-fast/src/main/java/org/rapidoid/http/Screen.java
@@ -0,0 +1,92 @@
package org.rapidoid.http;

/*
* #%L
* rapidoid-http-fast
* %%
* Copyright (C) 2014 - 2016 Nikolche Mihajlovski and contributors
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/

import org.rapidoid.annotation.Since;

/**
* Response GUI Screen API.<br>
* Provides a convenient access to some common GUI screen attributes of the underlying MVC model: <code>Resp#model()</code>.
*/
@Since("5.1.0")
public interface Screen {

/**
* Sets the "<b>title</b>" attribute in the MVC model of the response, used for GUI screen rendering.<br>
* Equivalent to <code>model().put("title", title)</code>.
*/
Screen title(String title);

/**
* Gets the "<b>title</b>" attribute from the MVC model of the response, used for GUI screen rendering.<br>
* Equivalent to <code>model().get("title")</code>.
*/
String title();

/**
* Sets the "<b>brand</b>" attribute in the MVC model of the response, used for GUI screen rendering.<br>
* Equivalent to <code>model().put("brand", brand)</code>.
*/
Screen brand(Object brand);

/**
* Gets the "<b>brand</b>" attribute from the MVC model of the response, used for GUI screen rendering.<br>
* Equivalent to <code>model().get("brand")</code>.
*/
Object brand();

/**
* Sets the "<b>menu</b>" attribute in the MVC model of the response, used for GUI screen rendering.<br>
* Equivalent to <code>model().put("menu", menu)</code>.
*/
Screen menu(Object menu);

/**
* Gets the "<b>menu</b>" attribute from the MVC model of the response, used for GUI screen rendering.<br>
* Equivalent to <code>model().get("menu")</code>.
*/
Object menu();

/**
* Sets the "<b>search</b>" attribute in the MVC model of the response, used for GUI screen rendering.<br>
* Equivalent to <code>model().put("search", search)</code>.
*/
Screen search(boolean search);

/**
* Gets the "<b>search</b>" attribute from the MVC model of the response, used for GUI screen rendering.<br>
* Equivalent to <code>model().get("search")</code>.
*/
Boolean search();

/**
* Sets the "<b>cdn</b>" attribute in the MVC model of the response, used for GUI screen rendering.<br>
* Equivalent to <code>model().put("cdn", cdn)</code>.
*/
Screen cdn(boolean cdn);

/**
* Gets the "<b>cdn</b>" attribute from the MVC model of the response, used for GUI screen rendering.<br>
* Equivalent to <code>model().get("cdn")</code>.
*/
Boolean cdn();

}
Expand Up @@ -103,7 +103,7 @@ private TransactionMode before(final Req req, String username, Set<String> roles
req.response().view(options.view).contentType(options.contentType).mvc(options.mvc);

if (options.title != null) {
req.response().model().put("title", options.title);
req.response().screen().title(options.title);
}

TransactionMode txMode = options.tx; // null means no TX
Expand Down

0 comments on commit e978f17

Please sign in to comment.