/* 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.
*/
package org.activiti.explorer.ui.login;
import org.activiti.explorer.ExplorerApp;
import org.activiti.explorer.I18nManager;
import org.activiti.explorer.Messages;
import org.activiti.explorer.ui.mainlayout.ExplorerLayout;
import org.springframework.web.util.HtmlUtils;
import com.vaadin.ui.LoginForm;
/**
* @author Joram Barrez
*/
public class ExplorerLoginForm extends LoginForm {
private static final long serialVersionUID = 1L;
protected String usernameCaption;
protected String passwordCaption;
protected String submitCaption;
protected static final String STYLE_LOGIN_FIELD = "login-field";
protected static final String STYLE_LOGIN_FIELD_CAPTION = "login-field-caption";
protected static final String STYLE_LOGIN_BUTTON = "login-button";
public ExplorerLoginForm() {
I18nManager i18nManager = ExplorerApp.get().getI18nManager();
usernameCaption = HtmlUtils.htmlEscape(i18nManager.getMessage(Messages.LOGIN_USERNAME));
passwordCaption = HtmlUtils.htmlEscape(i18nManager.getMessage(Messages.LOGIN_PASSWORD));
submitCaption = HtmlUtils.htmlEscape(i18nManager.getMessage(Messages.LOGIN_BUTTON));
}
// Hack-alert !! See explanation at http://vaadin.com/book/-/page/components.loginform.html
protected byte[] getLoginHTML() {
// Application URI needed for submitting form
String appUri = getApplication().getURL().toString()
+ getWindow().getName() + "/";
String x, h, b; // XML header, HTML head and body
x = "<!DOCTYPE html PUBLIC \"-//W3C//DTD "
+ "XHTML 1.0 Transitional//EN\" "
+ "\"http://www.w3.org/TR/xhtml1/"
+ "DTD/xhtml1-transitional.dtd\">\n";
h = "<head><script type='text/javascript'>"
+ "var setTarget = function() {"
+ " var uri = '" + appUri + "loginHandler';"
+ " var f = document.getElementById('loginf');"
+ " document.forms[0].action = uri;"
+ " document.forms[0].username.focus();"
+ "};"
+ ""
+ "var styles = window.parent.document.styleSheets;"
+ "for(var j = 0; j < styles.length; j++) {\n"
+ " if(styles[j].href) {"
+ " var stylesheet = document.createElement('link');\n"
+ " stylesheet.setAttribute('rel', 'stylesheet');\n"
+ " stylesheet.setAttribute('type', 'text/css');\n"
+ " stylesheet.setAttribute('href', styles[j].href);\n"
+ " document.getElementsByTagName('head')[0]"
+ " .appendChild(stylesheet);\n"
+ " }"
+ "}\n"
+ "function submitOnEnter(e) {"
+ " var keycode = e.keyCode || e.which;"
+ " if (keycode == 13) {document.forms[0].submit();}"
+ "}\n"
+ "</script>"
+ "</head>";
b = "<body onload='setTarget();'"
+ " class='" + ExplorerLayout.STYLE_LOGIN_PAGE + "'>"
+ "<div>"
+ "<iframe name='logintarget' style='width:0;height:0;"
+ "border:0;margin:0;padding:0;'></iframe>"
+ "<form id='loginf' target='logintarget'"
+ " onkeypress='submitOnEnter(event)'"
+ " method='post'>"
+ "<table width='100%'>"
+ "<tr><td class='" + STYLE_LOGIN_FIELD_CAPTION + "'>" + usernameCaption + "</td>"
+ "<td width='80%'><input class='" + STYLE_LOGIN_FIELD +"' type='text' name='username'></td></tr>"
+ "<tr><td class='" + STYLE_LOGIN_FIELD_CAPTION + "'>" + passwordCaption + "</td>"
+ " <td><input class='" + STYLE_LOGIN_FIELD + "'"
+ " type='password'"
+ " name='password'></td></tr>"
+ "</table>"
+ "<div>"
+ "<div onclick='document.forms[0].submit();'"
+ " tabindex='0' class='" + STYLE_LOGIN_BUTTON + "' role='button'>"
+ "<span>" + submitCaption + "</span>"
+ "</span></div></div></form></div></body>";
return (x + "<html>" + h + b + "</html>").getBytes();
}
}