commit a69045842070ae46cf11b052305db1fd2f7ce34e Author: Alessandro Pieve Date: Tue Sep 27 12:50:15 2016 +0000 git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/admin/auth-portlet-manager@131840 82a268e6-3cf1-43bd-a215-b396298e98cf diff --git a/._.DS_Store b/._.DS_Store new file mode 100644 index 0000000..8ac37fc Binary files /dev/null and b/._.DS_Store differ diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..d2f9efc --- /dev/null +++ b/.classpath @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..17f0cc4 --- /dev/null +++ b/.project @@ -0,0 +1,53 @@ + + + auth-portlet-manager + auth-portlet-manager. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse. + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + com.google.gdt.eclipse.core.webAppProjectValidator + + + + + com.google.gwt.eclipse.core.gwtProjectValidator + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.m2e.core.maven2Nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.common.modulecore.ModuleCoreNature + com.google.gwt.eclipse.core.gwtNature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 0000000..3a28de0 --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.settings/com.google.appengine.eclipse.core.prefs b/.settings/com.google.appengine.eclipse.core.prefs new file mode 100644 index 0000000..5260f5f --- /dev/null +++ b/.settings/com.google.appengine.eclipse.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +filesCopiedToWebInfLib= +googleCloudSqlEnabled=false +localDevMySqlEnabled=true diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs new file mode 100644 index 0000000..cbce045 --- /dev/null +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +jarsExcludedFromWebInfLib= +lastWarOutDir=/home/pieve/workspace/auth-portlet-manager/src/main/webapp +warSrcDir=src/main/webapp +warSrcDirIsOutput=false diff --git a/.settings/com.google.gwt.eclipse.core.prefs b/.settings/com.google.gwt.eclipse.core.prefs new file mode 100644 index 0000000..f23a752 --- /dev/null +++ b/.settings/com.google.gwt.eclipse.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +entryPointModules= diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..443e085 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component new file mode 100755 index 0000000..646a43d --- /dev/null +++ b/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..c6144e8 --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..05bd71b --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..04cad8c --- /dev/null +++ b/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/distro/LICENSE b/distro/LICENSE new file mode 100644 index 0000000..2d9616a --- /dev/null +++ b/distro/LICENSE @@ -0,0 +1 @@ +${gcube.license} \ No newline at end of file diff --git a/distro/README b/distro/README new file mode 100644 index 0000000..174496d --- /dev/null +++ b/distro/README @@ -0,0 +1,68 @@ +The gCube System - ${name} +-------------------------------------------------- + +${description} + + +${gcube.description} + +${gcube.funding} + + +Version +-------------------------------------------------- + +${version} (${buildDate}) + +Please see the file named "changelog.xml" in this directory for the release notes. + + +Authors +-------------------------------------------------- + +* Giancarlo Panichi (giancarlo.panichi-AT-isti.cnr.it), + Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" CNR, Pisa IT + + +Maintainers +----------- + +* Giancarlo Panichi (giancarlo.panichi-AT-isti.cnr.it), + Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" CNR, Pisa IT + + +Download information +-------------------------------------------------- + +Source code is available from SVN: + ${scm.url} + +Binaries can be downloaded from the gCube website: + ${gcube.website} + + +Installation +-------------------------------------------------- + +Installation documentation is available on-line in the gCube Wiki: + https://gcube.wiki.gcube-system.org/gcube/Accounting_Manager + + +Documentation +-------------------------------------------------- + +Documentation is available on-line in the gCube Wiki: + https://gcube.wiki.gcube-system.org/gcube/Accounting_Manager + + +Support +-------------------------------------------------- + +Bugs and support requests can be reported in the gCube issue tracking tool: + ${gcube.issueTracking} + + +Licensing +-------------------------------------------------- + +This software is licensed under the terms you may find in the file named "LICENSE" in this directory. diff --git a/distro/changelog.xml b/distro/changelog.xml new file mode 100644 index 0000000..863b76b --- /dev/null +++ b/distro/changelog.xml @@ -0,0 +1,5 @@ + + + First Release + + \ No newline at end of file diff --git a/distro/descriptor.xml b/distro/descriptor.xml new file mode 100644 index 0000000..b468e51 --- /dev/null +++ b/distro/descriptor.xml @@ -0,0 +1,32 @@ + + servicearchive + + tar.gz + + / + + + ${distroDirectory} + / + true + + README + LICENSE + changelog.xml + profile.xml + + 755 + true + + + + + target/${build.finalName}.${project.packaging} + /${artifactId} + + + + \ No newline at end of file diff --git a/distro/profile.xml b/distro/profile.xml new file mode 100644 index 0000000..c52b2b3 --- /dev/null +++ b/distro/profile.xml @@ -0,0 +1,29 @@ + + + + Service + + ${project.description} + PortletsAdmin + ${project.name} + 1.0.0 + + + ${project.description} + ${project.name} + ${version} + + ${project.groupId} + ${project.artifactId} + ${project.version} + + webapplication + + ${project.build.finalName}.${project.packaging} + + + + + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..f981680 --- /dev/null +++ b/pom.xml @@ -0,0 +1,356 @@ + + + + + maven-parent + org.gcube.tools + 1.0.0 + + + + + 4.0.0 + org.gcube.portlets.admin + auth-portlet-manager + 1.0.0-SNAPSHOT + war + + + auth-portlet-manager + auth-portlet-manager + + + https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/admin/auth-portlet-manager + + + + + + Alessandro Pieve + alessandro.pieve@isti.cnr.it + CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" + + architect + developer + + + + + + + + ${project.build.directory}/${project.build.finalName} + distro + config + + + 2.7.0 + + + + ${env.KEYS} + + UTF-8 + UTF-8 + + + + + localRun + + + org.slf4j + slf4j-api + compile + + + org.slf4j + slf4j-log4j12 + runtime + + + + + + + + + + + org.gcube.resources.discovery + ic-client + + + + + + com.google.gwt + gwt-user + ${gwtVersion} + + + + com.google.gwt + gwt-servlet + ${gwtVersion} + + + + + com.github.gwtbootstrap + gwt-bootstrap + + + + + + + org.gcube.portlets.widgets + callout-tour + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + + + com.google.gwt + gwt-dev + + + + + + + + + javax.portlet + portlet-api + provided + + + + + + + org.gcube.core + common-scope-maps + + compile + + + + + + + + + + + + org.gcube.portal + custom-portal-handler + + + + org.gcube.applicationsupportlayer + aslcore + + + + org.gcube.applicationsupportlayer + accesslogger + + + + + + org.gcube.portlets.user + gcube-widgets + compile + + + + + org.gcube.portlets.widgets + session-checker + [0.2.0-SNAPSHOT,1.0.0-SNAPSHOT) + + + + + + + + + + + org.slf4j + slf4j-api + provided + + + org.slf4j + slf4j-log4j12 + provided + + + + + + + + + org.gcube.dvos + usermanagement-core + + + + + + + + + + junit + junit + 4.8.1 + test + + + + + org.gcube.common + common-authorization + compile + + + org.gcube.common + authorization-client + compile + + + + + + + + + + ${webappDirectory}/WEB-INF/classes + + + src/main/resources + + **/*.* + + + + + + + + org.codehaus.mojo + gwt-maven-plugin + ${gwtVersion} + + + + -Xmx1024M -Xss1024k -Dgwt.compiler.localWorkers=1 + + false + + + + compile + test + + + + + AuthPortletManager.html + ${webappDirectory} + org.gcube.portlets.admin.authportletmanager.authman + + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1.1 + + + compile + + + + + ${webappDirectory} + ${project.build.finalName} + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.16 + + false + + + + org.apache.maven.surefire + surefire-junit47 + 2.16 + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + + ${distroDirectory}/descriptor.xml + + + + + servicearchive + install + + single + + + + + + + + + + + + + org.gcube.distribution + maven-portal-bom + LATEST + pom + import + + + + + + + + diff --git a/src/._.DS_Store b/src/._.DS_Store new file mode 100644 index 0000000..8ac37fc Binary files /dev/null and b/src/._.DS_Store differ diff --git a/src/main/._.DS_Store b/src/main/._.DS_Store new file mode 100644 index 0000000..8ac37fc Binary files /dev/null and b/src/main/._.DS_Store differ diff --git a/src/main/java/._.DS_Store b/src/main/java/._.DS_Store new file mode 100644 index 0000000..8ac37fc Binary files /dev/null and b/src/main/java/._.DS_Store differ diff --git a/src/main/java/org/._.DS_Store b/src/main/java/org/._.DS_Store new file mode 100644 index 0000000..8ac37fc Binary files /dev/null and b/src/main/java/org/._.DS_Store differ diff --git a/src/main/java/org/gcube/._.DS_Store b/src/main/java/org/gcube/._.DS_Store new file mode 100644 index 0000000..8ac37fc Binary files /dev/null and b/src/main/java/org/gcube/._.DS_Store differ diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/authman.gwt.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/authman.gwt.xml new file mode 100644 index 0000000..bf9ff55 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/authman.gwt.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/AuthManager.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/AuthManager.java new file mode 100644 index 0000000..de41559 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/AuthManager.java @@ -0,0 +1,59 @@ +package org.gcube.portlets.admin.authportletmanager.client; +import org.gcube.portlets.user.gcubewidgets.client.ClientScopeHelper; + +import com.google.gwt.core.client.EntryPoint; +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.user.client.Window.Location; +import com.google.gwt.user.client.rpc.AsyncCallback; + +/** + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class AuthManager implements EntryPoint { + @SuppressWarnings("unused") + private AuthManagerController rootPanel; + + /** + * {@inheritDoc} + */ + public void onModuleLoad() { + + GWT.log("AuthManager - Start Portlet"); + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + public void execute() { + loadScope(); + } + }); + + } + private void loadScope() { + ClientScopeHelper.getService().setScope(Location.getHref(), + new AsyncCallback() { + @Override + public void onSuccess(Boolean result) { + GWT.log("AuthManager - Scope Location set!"); + if (result) { + loadController(); + } else { + GWT.log("AuthManager - Attention ClientScopeHelper has returned a false value!"); + } + } + @Override + public void onFailure(Throwable caught) { + GWT.log("AuthManager - Error setting scope: " + + caught.getLocalizedMessage()); + caught.printStackTrace(); + } + }); + } + + protected void loadController() { + rootPanel = new AuthManagerController(); + } +} + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController.java new file mode 100644 index 0000000..51855b7 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController.java @@ -0,0 +1,766 @@ +package org.gcube.portlets.admin.authportletmanager.client; + + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.gcube.portlets.admin.authportletmanager.client.event.AddPoliciesEvent; +import org.gcube.portlets.admin.authportletmanager.client.event.AddQuoteEvent; +import org.gcube.portlets.admin.authportletmanager.client.event.ListPolicyEvent; +import org.gcube.portlets.admin.authportletmanager.client.event.ListQuoteEvent; +import org.gcube.portlets.admin.authportletmanager.client.event.RemovePoliciesEvent; +import org.gcube.portlets.admin.authportletmanager.client.event.RemoveQuoteEvent; +import org.gcube.portlets.admin.authportletmanager.client.event.UpdatePolicyEvent; +import org.gcube.portlets.admin.authportletmanager.client.event.UpdateQuoteEvent; +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.DialogError; +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.DialogLoader; +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.PolicyAddDialog; +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.PolicyDataGrid; +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.PolicyDataProvider; +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.PolicyDeleteDialog; +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.PolicyFilter; +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.QuotaFilter; +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.QuoteAddDialog; +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.QuoteDataGrid; +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.QuoteDataProvider; +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.QuoteDeleteDialog; +import org.gcube.portlets.admin.authportletmanager.client.resource.AuthResources; +import org.gcube.portlets.admin.authportletmanager.client.rpc.AuthManagerServiceAsync; +import org.gcube.portlets.admin.authportletmanager.shared.Caller; +import org.gcube.portlets.admin.authportletmanager.shared.ConstantsSharing; +import org.gcube.portlets.admin.authportletmanager.shared.PolicyAuth; +import org.gcube.portlets.admin.authportletmanager.shared.Quote; +import org.gcube.portlets.admin.authportletmanager.shared.exceptions.ExpiredSessionServiceException; +import org.gcube.portlets.widgets.sessionchecker.client.CheckSession; + +import com.github.gwtbootstrap.client.ui.Container; +import com.github.gwtbootstrap.client.ui.Tab; +import com.github.gwtbootstrap.client.ui.TabPanel; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.shared.EventBus; +import com.google.gwt.event.shared.SimpleEventBus; +import com.google.gwt.user.client.Cookies; +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.DockPanel; +import com.google.gwt.user.client.ui.RootPanel; +import com.google.gwt.user.client.ui.Widget; +/** + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class AuthManagerController { + + public static SimpleEventBus eventBus; + + private static final String JSP_TAG_ID = "AuthPortletManager"; + + /** The MainPanell pg mng. */ + private Container mainPanelLayout; + + /*Start Component for Tab Policy */ + + /** The SearchPolicy pg mng. */ + private PolicyFilter policyfilter =new PolicyFilter(); + /** The policyDataGrid pg mng. */ + private PolicyDataGrid policydatagrid =new PolicyDataGrid(); + + + /*Start Component for Tab Quota */ + /** The SearchQuota pg mng. */ + private QuotaFilter quotafilter =new QuotaFilter(); + /** The quoteDataGrid pg mng. */ + private QuoteDataGrid quotedatagrid =new QuoteDataGrid(); + + + + /** Dialog Box for Loading*/ + private DialogLoader dialogLoader = new DialogLoader(); + /** Dialog Box for Error*/ + private DialogError dialogError = new DialogError(); + + private Integer countLoader=0; + + // public String result_test; + + public AuthManagerController() { + eventBus = new SimpleEventBus(); + init(); + } + + private void init() { + + loadMainPanel(); + loadEnviromentPolicy(); + //loadEnviromentQuote(); + bindToEvents(); + } + + @SuppressWarnings("unused") + private void checkSession() { + // if you do not need to something when the session expire + CheckSession.getInstance().startPolling(); + } + + private void sessionExpiredShow() { + CheckSession.showLogoutDialog(); + } + + /** + * @return the eventBus + */ + public EventBus getEventBus() { + return eventBus; + } + + private void loadMainPanel(){ + GWT.log("AuthManager - LoadMainPanel"); + + GWT.log("AuthManager -Init Start with -DEBUG_MODE:"+ConstantsSharing.DEBUG_MODE+" DEBUG_TOKEN:"+ConstantsSharing.DEBUG_TOKEN+" MOCKUP:"+ConstantsSharing.MOCK_UP); + + AuthResources.INSTANCE.authCSS().ensureInjected(); + + mainPanelLayout = new Container(); + mainPanelLayout.setId("mainPanelLayout_AuthPortlet"); + + mainPanelLayout.setWidth("98%"); + //Panel Policy + DockPanel dockPolicy = new DockPanel(); + dockPolicy.setStyleName("Management-Panel"); + dockPolicy.setWidth("100%"); + dockPolicy.add(policyfilter, DockPanel.NORTH); + dockPolicy.add(policydatagrid, DockPanel.SOUTH); + Tab tab_policy =new Tab(); + tab_policy.add(dockPolicy); + tab_policy.setHeading("POLICY"); + + //Panel Quota + DockPanel dockQuota = new DockPanel(); + dockQuota.setStyleName("Management-Panel-Quota"); + dockQuota.setWidth("100%"); + dockQuota.add(quotafilter, DockPanel.NORTH); + dockQuota.add(quotedatagrid, DockPanel.SOUTH); + /* + Tab tab_quota =new Tab(); + tab_quota.add(dockQuota); + tab_quota.setHeading("QUOTA"); + */ + + TabPanel tabPanel = new TabPanel(); + tabPanel.add(tab_policy); + //tabPanel.add(tab_quota); + + tab_policy.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + GWT.log("AuthManager - Tab Policy"); + loadEnviromentPolicy(); + } + }); + /* + tab_quota.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + GWT.log("AuthManager - Tab Quota"); + loadEnviromentQuote(); + } + }); + */ + //select first tab + tabPanel.selectTab(0); + + mainPanelLayout.add(tabPanel); + bind(mainPanelLayout); + } + + + protected void bind(Widget mainWidget) { + try { + RootPanel root = RootPanel.get(JSP_TAG_ID); + //Log.info("Root Panel: " + root); + GWT.log("AuthManager - Root Panel: " + root, null); + if (root == null) { + GWT.log("AuthManager - Div with id " + JSP_TAG_ID + " not found, starting in dev mode"); + RootPanel.get().add(mainWidget); + } else { + GWT.log("AuthManager - Div with id " + JSP_TAG_ID + " found, starting in portal mode"); + root.add(mainWidget); + } + } catch (Exception e) { + e.printStackTrace(); + GWT.log("AuthManager - Error in attach viewport:" + e.getLocalizedMessage(), null); + } + } + + private void loadEnviromentPolicy() { + countLoader=0; + dialogLoader.startLoader(); + loadPolicy(4); + loadCaller(4); + loadServicePolicy(4); + loadAccessPolicy(4); + } + + + private void loadEnviromentQuote() { + countLoader=0; + dialogLoader.startLoader(); + loadCaller(2); + loadQuote(2); + } + + + + private void loadPolicy(final int numberLoad){ + //reset provider + PolicyDataProvider.get().resetPolicyProvider(); + AuthManagerServiceAsync.INSTANCE + .loadListPolicy(new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + + if (caught instanceof ExpiredSessionServiceException) { + GWT.log("AuthManager - Alert Expired Session"); + sessionExpiredShowDelayed(); + } else { + dialogLoader.stopLoader(); + dialogError.showError(caught.getLocalizedMessage()); + GWT.log("AuthManager - Failed to load a list policy:"+caught.getLocalizedMessage()); + caught.printStackTrace(); + } + } + @Override + public void onSuccess(ArrayList result) { + PolicyDataProvider.get().loadPolicyProvider(result); + GWT.log("AuthManager - Load Policy complete"); + checkLoader(numberLoad,0); + + } + }); + } + + /** + * Load a caller from AsyncCallBack from server + */ + private void loadCaller(final int numberLoad){ + + AuthManagerServiceAsync.INSTANCE + .loadListCaller(new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + + if (caught instanceof ExpiredSessionServiceException) { + GWT.log("AuthManager - Alert Expired Session"); + sessionExpiredShowDelayed(); + } else { + + dialogLoader.stopLoader(); + dialogError.showError(caught.getLocalizedMessage()); + GWT.log("AuthManager - Failed to load a caller:"+caught.getLocalizedMessage()); + caught.printStackTrace(); + } + + } + @Override + public void onSuccess(ArrayList callerList) { + Entities.getInstance(); + Entities.setCallers(callerList); + GWT.log("AuthManager - Load Caller complete"); + checkLoader(numberLoad,0); + + } + }); + } + + + + public void loadServicePolicy(final int numberLoad){ + + AuthManagerServiceAsync.INSTANCE + .loadListService(new AsyncCallback>>() { + + @Override + public void onFailure(Throwable caught) { + if (caught instanceof ExpiredSessionServiceException) { + GWT.log("AuthManager - Alert Expired Session"); + sessionExpiredShowDelayed(); + } else { + + dialogLoader.stopLoader(); + dialogError.showError(caught.getLocalizedMessage()); + GWT.log("AuthManager - Failed to load a service:"+caught.getLocalizedMessage()); + caught.printStackTrace(); + } + } + @Override + public void onSuccess(Map> result) { + Entities.setServicesMap(result); + GWT.log("AuthManager - Load Service complete"); + checkLoader(numberLoad,0); + + } + }); + } + + /*** + * Load a list access + */ + public void loadAccessPolicy(final int numberLoad){ + + AuthManagerServiceAsync.INSTANCE + .loadListAccess(new AsyncCallback >() { + @Override + public void onFailure(Throwable caught) { + if (caught instanceof ExpiredSessionServiceException) { + GWT.log("AuthManager - Alert Expired Session"); + sessionExpiredShowDelayed(); + } else { + dialogLoader.stopLoader(); + dialogError.showError(caught.getLocalizedMessage()); + GWT.log("AuthManager - Failes to load an Access:"+caught.getLocalizedMessage()); + caught.printStackTrace(); + } + } + @Override + public void onSuccess(ArrayList result) { + Entities.setAccess(result); + GWT.log("AuthManager - Load Access complete"); + checkLoader(numberLoad,0); + + + } + }); + } + + + + + + + + + public void loadQuote(final int numberLoad){ + //reset provider + QuoteDataProvider.get().resetQuoteProvider(); + AuthManagerServiceAsync.INSTANCE + .loadListQuota(new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + if (caught instanceof ExpiredSessionServiceException) { + GWT.log("AuthManager - Alert Expired Session"); + sessionExpiredShowDelayed(); + } else { + dialogLoader.stopLoader(); + dialogError.showError(caught.getLocalizedMessage()); + GWT.log("AuthManager - Failed to load a list quote:"+caught.getLocalizedMessage()); + caught.printStackTrace(); + } + } + @Override + public void onSuccess(ArrayList result) { + QuoteDataProvider.get().loadQuoteProvider(result); + GWT.log("AuthManager - Load Quote complete"); + checkLoader(numberLoad,1); + + } + }); + } + + + + /** + * Checkloader for stop dialogbox with loader when finished + * + * @param + * @return + * @see + */ + private void checkLoader(Integer operation,Integer typeGuide){ + countLoader++; + if (countLoader.equals(operation)){ + GWT.log("AuthManager - Load Complete "); + dialogLoader.stopLoader(); + + + } + } + + + private void sessionExpiredShowDelayed() { + Timer timeoutTimer = new Timer() { + public void run() { + sessionExpiredShow(); + + } + }; + int TIMEOUT = 3; // 3 second timeout + + timeoutTimer.schedule(TIMEOUT * 1000); // timeout is in milliseconds + + } + + /* + private void checkLocale() { + String[] locales = LocaleInfo.getAvailableLocaleNames(); + + for (String locale : locales) { + //Log.debug("Locale avaible:" + locale); + } + + String currentLocaleCookie = Cookies.getCookie(LocaleInfo + .getLocaleCookieName()); + //Log.debug(Constants.AM_LANG_COOKIE + ":" + currentLocaleCookie); + + LocaleInfo currentLocaleInfo = LocaleInfo.getCurrentLocale(); + //Log.debug("Current Locale:" + currentLocaleInfo.getLocaleName()); + + } + */ + protected void changeLanguage(String localeName) { + Date now = new Date(); + long nowLong = now.getTime(); + nowLong = nowLong + (1000 * 60 * 60 * 24 * 21); + now.setTime(nowLong); + String cookieLang = Cookies.getCookie(ConstantsSharing.AM_LANG_COOKIE); + if (cookieLang != null) { + Cookies.removeCookie(ConstantsSharing.AM_LANG_COOKIE); + } + Cookies.setCookie(ConstantsSharing.AM_LANG_COOKIE, localeName, now); + com.google.gwt.user.client.Window.Location.reload(); + } + + // + public void restoreUISession() { + //checkLocale(); + //showDefault(); + } + + // Bind Controller to events on bus + private void bindToEvents() { + + + //event bus for add multiple policy + eventBus.addHandler(AddPoliciesEvent.TYPE, + new AddPoliciesEvent.AddPoliciesEventHandler() { + + @Override + public void onAdd(AddPoliciesEvent event) { + addPolicies(event); + } + }); + + //event bus for update policy + eventBus.addHandler(UpdatePolicyEvent.TYPE, + new UpdatePolicyEvent.UpdatePolicyEventHandler() { + + @Override + public void onAdd(UpdatePolicyEvent event) { + updatePolicy(event); + } + }); + + //event bus for refresh list policy + eventBus.addHandler(ListPolicyEvent.TYPE, + new ListPolicyEvent.ListPolicyEventHandler(){ + @Override + public void onAdd(ListPolicyEvent event) { + loadEnviromentPolicy(); + } + }); + + //event bus for delete multiple policy + eventBus.addHandler(RemovePoliciesEvent.TYPE, + new RemovePoliciesEvent.RemovePoliciesEventHandler(){ + + @Override + public void onAdd(RemovePoliciesEvent event) { + removePolicies(event); + } + + }); + + + + + /*** + * SECTION QUOTE + */ + //event bus for add multiple quote + eventBus.addHandler(AddQuoteEvent.TYPE, + new AddQuoteEvent.AddQuoteEventHandler() { + + @Override + public void onAdd(AddQuoteEvent event) { + addQuote(event); + } + }); + //event bus for update quote + eventBus.addHandler(UpdateQuoteEvent.TYPE, + new UpdateQuoteEvent.UpdateQuoteEventHandler() { + + @Override + public void onAdd(UpdateQuoteEvent event) { + updateQuote(event); + } + }); + //event bus for refresh quote + eventBus.addHandler(ListQuoteEvent.TYPE, + new ListQuoteEvent.ListQuoteEventHandler(){ + @Override + public void onAdd(ListQuoteEvent event) { + loadEnviromentQuote(); + } + }); + //event bus for delete multiple quote + eventBus.addHandler(RemoveQuoteEvent.TYPE, + new RemoveQuoteEvent.RemoveQuoteEventHandler(){ + + @Override + public void onAdd(RemoveQuoteEvent event) { + removeQuote(event); + } + + }); + + + + + + } + + + + + protected void addPolicies(AddPoliciesEvent event) { + final List policies = event.getPolicies(); + final PolicyAddDialog policyAddDialog =event.getDialog(); + dialogLoader.startLoader(); + AuthManagerServiceAsync.INSTANCE. + addPolicies(policies,new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + if (caught instanceof ExpiredSessionServiceException) { + GWT.log("AuthManager - Alert Expired Session"); + sessionExpiredShowDelayed(); + } else { + dialogLoader.stopLoader(); + dialogError.showError(caught.getLocalizedMessage()); + GWT.log("AuthManager - Error add policy failed:"+caught.getLocalizedMessage()); + caught.printStackTrace(); + } + } + public void onSuccess(Void result) { + policyAddDialog.StopAppLoadingView(); + dialogLoader.stopLoader(); + loadPolicy(4); + } + + }); + } + + protected void addQuote(AddQuoteEvent event) { + final List quote = event.getQuote(); + + GWT.log("AuthManager - Demo"); + final QuoteAddDialog quotaAddDialog =event.getDialog(); + dialogLoader.startLoader(); + AuthManagerServiceAsync.INSTANCE. + addQuote(quote,new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + if (caught instanceof ExpiredSessionServiceException) { + GWT.log("AuthManager - Alert Expired Session"); + sessionExpiredShowDelayed(); + } else { + dialogLoader.stopLoader(); + dialogError.showError(caught.getLocalizedMessage()); + GWT.log("AuthManager - Error add policy failed:"+caught.getLocalizedMessage()); + caught.printStackTrace(); + } + } + @Override + public void onSuccess(List quote) { + for (Quote quota: quote){ + GWT.log("AuthManager - Inserted a new quota:"+quota.getCallerAsString()+ + " identifier:"+quota.getIdQuote()+ + " Time Interval:"+quota.getTimeInterval()+ + " Type:"+quota.getManager()+ + " Data Insert:"+quota.getDataInsert() + ); + //update list for a new caller + QuoteDataProvider.get().addQuoteProvider(quota); + + } + quotaAddDialog.StopAppLoadingView(); + dialogLoader.stopLoader(); + }; + }); + } + + + protected void updatePolicy(UpdatePolicyEvent event) { + final PolicyAuth policies = event.getPolicies(); + final PolicyAddDialog policyUpdateDialog =event.getDialog(); + + dialogLoader.startLoader(); + + AuthManagerServiceAsync.INSTANCE.updatePolicy(policies,new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + if (caught instanceof ExpiredSessionServiceException) { + GWT.log("AuthManager - Alert Expired Session"); + sessionExpiredShowDelayed(); + } else { + + dialogLoader.stopLoader(); + dialogError.showError(caught.getLocalizedMessage()); + GWT.log("Error update policy failed:"+caught.getLocalizedMessage()); + caught.printStackTrace(); + } + + } + + @Override + public void onSuccess(Void result) { + // TODO Auto-generated method stub + GWT.log("AuthManager - Update complete"); + /* + PolicyDataProvider.get().removePolicyProvider(policy.getIdpolicy()); + PolicyDataProvider.get().addPolicyProvider(policy); + */ + policyUpdateDialog.StopAppLoadingView(); + dialogLoader.stopLoader(); + loadPolicy(4); + }; + }); + } + + + protected void updateQuote(UpdateQuoteEvent event) { + final Quote quote = event.getQuote(); + final QuoteAddDialog quoteUpdateDialog =event.getDialog(); + + dialogLoader.startLoader(); + + AuthManagerServiceAsync.INSTANCE.updateQuote(quote,new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + if (caught instanceof ExpiredSessionServiceException) { + GWT.log("AuthManager - Alert Expired Session"); + sessionExpiredShowDelayed(); + } else { + dialogLoader.stopLoader(); + dialogError.showError(caught.getLocalizedMessage()); + GWT.log("Error update quote failed:"+caught.getLocalizedMessage()); + caught.printStackTrace(); + } + } + @Override + public void onSuccess(Quote quote) { + // TODO Auto-generated method stub + GWT.log("AuthManager - Update complete"); + QuoteDataProvider.get().removeQuoteProvider(quote.getIdQuote()); + //GWT.log("quote update"+quote.getDataUpdate().toString()); + QuoteDataProvider.get().addQuoteProvider(quote); + quoteUpdateDialog.StopAppLoadingView(); + dialogLoader.stopLoader(); + }; + }); + } + + + protected void removePolicies(RemovePoliciesEvent event) { + // TODO Auto-generated method stub + final List identifier = event.getIdentifier(); + final PolicyDeleteDialog dialog =event.getDialog(); + dialogLoader.startLoader(); + AuthManagerServiceAsync.INSTANCE.deletePolicies(identifier,new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + if (caught instanceof ExpiredSessionServiceException) { + GWT.log("AuthManager - Alert Expired Session"); + sessionExpiredShowDelayed(); + } else { + dialogLoader.stopLoader(); + dialogError.showError(caught.getLocalizedMessage()); + GWT.log("AuthManager - Error delete policy failed:"+caught.getLocalizedMessage()); + //dialog.StopAppLoadingView(); + caught.printStackTrace(); + } + } + @Override + public void onSuccess(List listRemovePolicies) { + for (Long identifier:listRemovePolicies){ + PolicyDataProvider.get().removePolicyProvider(identifier); + GWT.log("AuthManager - Delete complete:"+identifier); + } + dialog.StopAppLoadingView(); + dialogLoader.stopLoader(); + } + }); + } + + protected void removeQuote(RemoveQuoteEvent event) { + // TODO Auto-generated method stub + final List identifier = event.getIdentifier(); + final QuoteDeleteDialog dialog =event.getDialog(); + dialogLoader.startLoader(); + AuthManagerServiceAsync.INSTANCE.deleteQuote(identifier,new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + if (caught instanceof ExpiredSessionServiceException) { + GWT.log("AuthManager - Alert Expired Session"); + sessionExpiredShowDelayed(); + } else { + dialogLoader.stopLoader(); + dialogError.showError(caught.getLocalizedMessage()); + GWT.log("AuthManager - Error delete quote failed:"+caught.getLocalizedMessage()); + //dialog.StopAppLoadingView(); + caught.printStackTrace(); + } + } + @Override + public void onSuccess(List listRemoveQuote) { + for (Long identifier:listRemoveQuote){ + QuoteDataProvider.get().removeQuoteProvider(identifier); + GWT.log("AuthManager - Delete quote complete:"+identifier); + } + dialog.StopAppLoadingView(); + dialogLoader.stopLoader(); + } + }); + + } + + + + + + + + + @SuppressWarnings("unused") + private void asyncCodeLoadingFailed(Throwable reason) { + //Log.error("Async code loading failed", reason); + /* + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + */ + } + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/Entities.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/Entities.java new file mode 100644 index 0000000..6490f82 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/Entities.java @@ -0,0 +1,95 @@ +package org.gcube.portlets.admin.authportletmanager.client; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Map; + +import org.gcube.portlets.admin.authportletmanager.shared.Caller; + +/** + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ + +public class Entities { + + private static Entities istanza; + + private static ArrayList callers; + private static Map> servicesMap; + private static ArrayList access; + + + private Entities(){ + + } + public static Entities getInstance() + { + if (istanza == null) + { + istanza = new Entities(); + } + + return istanza; + } + /** + * getCallers + * @return + */ + public static ArrayList getCallers(){ + //order by type caller + Collections.sort(callers,new Comparator() { + public int compare(Caller o1, Caller o2) { + + int c; + c =o1.getTypecaller().compareTo(o2.getTypecaller()); + if (c == 0) + c = o1.getCallerName().compareTo(o2.getCallerName()); + return c; + } + }); + return callers; + } + /** + * callerList + * @param callersList + */ + public static void setCallers(ArrayList callersList) { + callers = callersList; + } + + public static Caller getCallerByName(String callerName){ + for (Caller caller: callers){ + + if (caller.getCallerName().equals(callerName)){ + return caller; + } + + } + return null; + + } + + + public static Map> getServicesMap() { + return servicesMap; + } + public static void setServicesMap(Map> servicesMapList) { + servicesMap = servicesMapList; + } + + + public static ArrayList getAccess() { + return access; + } + public static void setAccess(ArrayList access) { + Entities.access = access; + } + + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/AddPoliciesEvent.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/AddPoliciesEvent.java new file mode 100644 index 0000000..ef54881 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/AddPoliciesEvent.java @@ -0,0 +1,75 @@ +package org.gcube.portlets.admin.authportletmanager.client.event; + + +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.PolicyAddDialog; +import org.gcube.portlets.admin.authportletmanager.shared.PolicyAuth; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +public class AddPoliciesEvent extends +GwtEvent { + + + public static Type TYPE = new Type(); + + public static Type getType() { + return TYPE; + } + + private List policies; + private PolicyAddDialog dialog; + + public interface AddPoliciesEventHandler extends EventHandler { + void onAdd(AddPoliciesEvent event); + } + + public interface HasAddPoliciesEventHandler extends HasHandlers { + public HandlerRegistration addAddPoliciesEventHandler( + AddPoliciesEventHandler handler); + } + public AddPoliciesEvent(List policies,PolicyAddDialog dialog){ + super(); + this.policies=policies; + this.dialog=dialog; + } + @Override + protected void dispatch(AddPoliciesEventHandler handler) { + // TODO Auto-generated method stub + handler.onAdd(this); + } + + + @Override + public Type getAssociatedType() { + return TYPE; + } + + + public static void fire(HasHandlers source, + AddPoliciesEvent event) { + source.fireEvent(event); + } + public List getPolicies() { + return policies; + } + + public PolicyAddDialog getDialog() { + return dialog; + } + @Override + public String toString() { + return "AddPoliciesEvent [policies=" + policies + ", dialog=" + dialog + + "]"; + } + +} + + + + + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/AddPolicyEventOld.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/AddPolicyEventOld.java new file mode 100644 index 0000000..3f0cf3a --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/AddPolicyEventOld.java @@ -0,0 +1,110 @@ +package org.gcube.portlets.admin.authportletmanager.client.event; + +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.PolicyAddDialog; + + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +public class AddPolicyEventOld extends +GwtEvent { + + + public static Type TYPE = new Type(); + + public static Type getType() { + return TYPE; + } + + private String caller; + private String typeCaller; + private String serviceClass; + private String serviceName; + private String serviceId; + private String access; + private PolicyAddDialog dialog; + + public interface AddPolicyEventHandler extends EventHandler { + void onAdd(AddPolicyEventOld event); + } + + public interface HasAddPolicyEventHandler extends HasHandlers { + public HandlerRegistration addAddPolicyEventHandler( + AddPolicyEventHandler handler); + } + + public AddPolicyEventOld + (String caller,String typeCaller,String serviceClass,String serviceName,String serviceId,String access,PolicyAddDialog dialog) { + super(); + this.caller = caller; + this.typeCaller=typeCaller; + this.serviceClass = serviceClass; + this.serviceName=serviceName; + this.serviceId=serviceId; + this.access = access; + this.dialog=dialog; + } + + @Override + protected void dispatch(AddPolicyEventHandler handler) { + // TODO Auto-generated method stub + handler.onAdd(this); + } + + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static void fire(HasHandlers source, + AddPolicyEventOld event) { + source.fireEvent(event); + } + + + + public String getCaller() { + return caller; + } + + public String getTypeCaller() { + return typeCaller; + } + + public String getServiceClass() { + return serviceClass; + } + + public String getServiceName() { + return serviceName; + } + + public String getServiceId() { + return serviceId; + } + + public String getAccess() { + return access; + } + + public PolicyAddDialog getModal() { + return dialog; + } + + @Override + public String toString() { + return "AddPolicyEvent [caller=" + caller + ", typeCaller=" + + typeCaller + ", serviceClass=" + serviceClass + + ", serviceName=" + serviceName + ", serviceId=" + serviceId + + ", access=" + access + ", dialog=" + dialog + "]"; + } + + +} + + + + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/AddQuoteEvent.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/AddQuoteEvent.java new file mode 100644 index 0000000..14cd433 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/AddQuoteEvent.java @@ -0,0 +1,75 @@ +package org.gcube.portlets.admin.authportletmanager.client.event; + + +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.QuoteAddDialog; +import org.gcube.portlets.admin.authportletmanager.shared.Quote; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +public class AddQuoteEvent extends +GwtEvent { + + + public static Type TYPE = new Type(); + + public static Type getType() { + return TYPE; + } + + private List quote; + private QuoteAddDialog dialog; + + public interface AddQuoteEventHandler extends EventHandler { + void onAdd(AddQuoteEvent event); + } + + public interface HasAddQuoteEventHandler extends HasHandlers { + public HandlerRegistration addAddPoliciesEventHandler( + AddQuoteEventHandler handler); + } + public AddQuoteEvent(List quote,QuoteAddDialog dialog){ + super(); + this.quote=quote; + this.dialog=dialog; + } + @Override + protected void dispatch(AddQuoteEventHandler handler) { + // TODO Auto-generated method stub + handler.onAdd(this); + } + + + @Override + public Type getAssociatedType() { + return TYPE; + } + + + public static void fire(HasHandlers source, + AddQuoteEvent event) { + source.fireEvent(event); + } + public List getQuote() { + return quote; + } + + public QuoteAddDialog getDialog() { + return dialog; + } + @Override + public String toString() { + return "AddQuoteEvent [quote=" + quote + ", dialog=" + dialog + + "]"; + } + +} + + + + + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/ListPolicyEvent.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/ListPolicyEvent.java new file mode 100644 index 0000000..91e5536 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/ListPolicyEvent.java @@ -0,0 +1,56 @@ +package org.gcube.portlets.admin.authportletmanager.client.event; + + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +public class ListPolicyEvent extends GwtEvent { + + + + public static Type TYPE = new Type(); + + public static Type getType() { + return TYPE; + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public interface ListPolicyEventHandler extends EventHandler { + void onAdd(ListPolicyEvent event); + } + + public interface HasListPolicyEventHandler extends HasHandlers { + public HandlerRegistration addListPolicyEventHandler( + ListPolicyEventHandler handler); + } + + public static void fire(HasHandlers source, + ListPolicyEvent event) { + source.fireEvent(event); + } + + public ListPolicyEvent() { + super(); + } + + @Override + protected void dispatch(ListPolicyEventHandler handler) { + // TODO Auto-generated method stub + handler.onAdd(this); + } + + + + + +} + + + + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/ListQuoteEvent.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/ListQuoteEvent.java new file mode 100644 index 0000000..2a5bb70 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/ListQuoteEvent.java @@ -0,0 +1,57 @@ +package org.gcube.portlets.admin.authportletmanager.client.event; + + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +public class ListQuoteEvent extends GwtEvent { + + + + public static Type TYPE = new Type(); + + public static Type getType() { + return TYPE; + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public interface ListQuoteEventHandler extends EventHandler { + void onAdd(ListQuoteEvent event); + } + + public interface HasListQuoteEventHandler extends HasHandlers { + public HandlerRegistration addListQuoteEventHandler( + ListQuoteEventHandler handler); + } + + public static void fire(HasHandlers source, + ListQuoteEvent event) { + source.fireEvent(event); + } + + public ListQuoteEvent() { + super(); + } + + @Override + protected void dispatch(ListQuoteEventHandler handler) { + // TODO Auto-generated method stub + handler.onAdd(this); + } + + + + + + +} + + + + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/RemovePoliciesEvent.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/RemovePoliciesEvent.java new file mode 100644 index 0000000..cb76b58 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/RemovePoliciesEvent.java @@ -0,0 +1,76 @@ +package org.gcube.portlets.admin.authportletmanager.client.event; + +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.PolicyDeleteDialog; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +public class RemovePoliciesEvent extends +GwtEvent { + + public static Type TYPE = new Type(); + + public static Type getType() { + return TYPE; + } + + private List identifier; + + private PolicyDeleteDialog dialog; + + public interface RemovePoliciesEventHandler extends EventHandler { + void onAdd(RemovePoliciesEvent event); + } + + public interface HasRemovePoliciesEventHandler extends HasHandlers { + public HandlerRegistration addRemovePoliciesEventHandler( + RemovePoliciesEventHandler handler); + } + + public RemovePoliciesEvent(List identifier, PolicyDeleteDialog modal) { + super(); + this.identifier = identifier; + this.dialog=modal; + + } + @Override + protected void dispatch(RemovePoliciesEventHandler handler) { + // TODO Auto-generated method stub + handler.onAdd(this); + } + + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static void fire(HasHandlers source, + RemovePoliciesEvent event) { + source.fireEvent(event); + } + public List getIdentifier() { + return identifier; + } + public PolicyDeleteDialog getDialog() { + return dialog; + } + @Override + public String toString() { + return "RemovePoliciesEvent [identifier=" + identifier + ", dialog=" + + dialog + "]"; + } + +} + + + + + + + + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/RemovePolicyEventOLDKO.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/RemovePolicyEventOLDKO.java new file mode 100644 index 0000000..c75509f --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/RemovePolicyEventOLDKO.java @@ -0,0 +1,90 @@ +package org.gcube.portlets.admin.authportletmanager.client.event; + + + + +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.PolicyDeleteDialog; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +public class RemovePolicyEventOLDKO extends +GwtEvent { + + + public static Type TYPE = new Type(); + + public static Type getType() { + return TYPE; + } + + private Long identifier; + private PolicyDeleteDialog dialog; + + public interface RemovePolicyEventHandler extends EventHandler { + void onAdd(RemovePolicyEventOLDKO event); + } + + public interface HasRemovePolicyEventHandler extends HasHandlers { + public HandlerRegistration addRemovePolicyEventHandler( + RemovePolicyEventHandler handler); + } + + public RemovePolicyEventOLDKO(Long identifier, PolicyDeleteDialog modal) { + super(); + this.identifier = identifier; + this.dialog=modal; + + } + + @Override + protected void dispatch(RemovePolicyEventHandler handler) { + // TODO Auto-generated method stub + handler.onAdd(this); + } + + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static void fire(HasHandlers source, + RemovePolicyEventOLDKO event) { + source.fireEvent(event); + } + + + public Long getIdentifier() { + return identifier; + } + + public PolicyDeleteDialog getDialog() { + return dialog; + } + + @Override + public String toString() { + return "RemovePolicyEvent [identifier=" + identifier + ", dialog=" + dialog + "]"; + } + + + + + + + + + + + + + + + +} + + + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/RemoveQuoteEvent.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/RemoveQuoteEvent.java new file mode 100644 index 0000000..11fe5aa --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/RemoveQuoteEvent.java @@ -0,0 +1,76 @@ +package org.gcube.portlets.admin.authportletmanager.client.event; + +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.QuoteDeleteDialog; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +public class RemoveQuoteEvent extends +GwtEvent { + + public static Type TYPE = new Type(); + + public static Type getType() { + return TYPE; + } + + private List identifier; + + private QuoteDeleteDialog dialog; + + public interface RemoveQuoteEventHandler extends EventHandler { + void onAdd(RemoveQuoteEvent event); + } + + public interface HasRemoveQuoteEventHandler extends HasHandlers { + public HandlerRegistration addRemoveQuoteEventHandler( + RemoveQuoteEventHandler handler); + } + + public RemoveQuoteEvent(List identifier,QuoteDeleteDialog modal) { + super(); + this.identifier = identifier; + this.dialog=modal; + + } + @Override + protected void dispatch(RemoveQuoteEventHandler handler) { + // TODO Auto-generated method stub + handler.onAdd(this); + } + + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static void fire(HasHandlers source, + RemoveQuoteEvent event) { + source.fireEvent(event); + } + public List getIdentifier() { + return identifier; + } + public QuoteDeleteDialog getDialog() { + return dialog; + } + @Override + public String toString() { + return "RemoveQuoteEvent [identifier=" + identifier + ", dialog=" + + dialog + "]"; + } + +} + + + + + + + + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/UpdatePolicyEvent.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/UpdatePolicyEvent.java new file mode 100644 index 0000000..527936d --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/UpdatePolicyEvent.java @@ -0,0 +1,77 @@ +package org.gcube.portlets.admin.authportletmanager.client.event; + +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.PolicyAddDialog; +import org.gcube.portlets.admin.authportletmanager.shared.PolicyAuth; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +public class UpdatePolicyEvent extends GwtEvent { + + + + public static Type TYPE = new Type(); + + public static Type getType() { + return TYPE; + } + + private PolicyAuth policies; + private PolicyAddDialog dialog; + + + public interface UpdatePolicyEventHandler extends EventHandler { + void onAdd(UpdatePolicyEvent event); + } + + public interface HasUpdatePolicyEventHandler extends HasHandlers { + public HandlerRegistration addUpdatePolicyEventHandler( + UpdatePolicyEventHandler handler); + } + + public UpdatePolicyEvent(PolicyAuth policies,PolicyAddDialog dialog){ + super(); + this.policies=policies; + this.dialog=dialog; + } + + @Override + protected void dispatch(UpdatePolicyEventHandler handler) { + // TODO Auto-generated method stub + handler.onAdd(this); + } + + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static void fire(HasHandlers source, + UpdatePolicyEvent event) { + source.fireEvent(event); + } + + public PolicyAuth getPolicies() { + return policies; + } + + public PolicyAddDialog getDialog() { + return dialog; + } + + @Override + public String toString() { + return "UpdatePolicyEvent [policies=" + policies + ", dialog=" + dialog + + "]"; + } + + + + + + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/UpdateQuoteEvent.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/UpdateQuoteEvent.java new file mode 100644 index 0000000..bd4b7f6 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/event/UpdateQuoteEvent.java @@ -0,0 +1,76 @@ +package org.gcube.portlets.admin.authportletmanager.client.event; + +import org.gcube.portlets.admin.authportletmanager.client.pagelayout.QuoteAddDialog; +import org.gcube.portlets.admin.authportletmanager.shared.Quote; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +public class UpdateQuoteEvent extends GwtEvent { + + + + public static Type TYPE = new Type(); + + public static Type getType() { + return TYPE; + } + + private Quote quote; + private QuoteAddDialog dialog; + + public interface UpdateQuoteEventHandler extends EventHandler { + void onAdd(UpdateQuoteEvent event); + } + + public interface HasUpdateQuoteEventHandler extends HasHandlers { + public HandlerRegistration addUpdateQuoteEventHandler( + UpdateQuoteEventHandler handler); + } + + public UpdateQuoteEvent(Quote quote,QuoteAddDialog dialog){ + super(); + this.quote=quote; + this.dialog=dialog; + } + + @Override + protected void dispatch(UpdateQuoteEventHandler handler) { + // TODO Auto-generated method stub + handler.onAdd(this); + } + + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static void fire(HasHandlers source, + UpdateQuoteEvent event) { + source.fireEvent(event); + } + + public Quote getQuote() { + return quote; + } + + public QuoteAddDialog getDialog() { + return dialog; + } + + @Override + public String toString() { + return "UpdateQuoteEvent [quote=" + quote + ", dialog=" + dialog + + "]"; + } + + + + + + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/CheckCellHead.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/CheckCellHead.java new file mode 100644 index 0000000..6d79ab2 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/CheckCellHead.java @@ -0,0 +1,42 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; + +/** + * + * @author SISTEMAS + */ +public class CheckCellHead extends AbstractCell { + + private Boolean isSelected = false; + private static final SafeHtml INPUT_CHECKED = +SafeHtmlUtils.fromSafeConstant(""); + private static final SafeHtml INPUT_UNCHECKED = +SafeHtmlUtils.fromSafeConstant(""); + + public CheckCellHead() { + super("click"); + } + + @Override + public void render(Context context, Boolean value, SafeHtmlBuilder sb) { + if (isSelected) { + sb.append(INPUT_CHECKED); + } else { + sb.append(INPUT_UNCHECKED); + } + } + + public Boolean isIsSelected() { + return isSelected; + } + + public void setIsSelected(Boolean isSelected) { + this.isSelected = isSelected; + } + + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService.java new file mode 100644 index 0000000..8060d57 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService.java @@ -0,0 +1,275 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.SortedMap; +import java.util.TreeMap; + +import org.gcube.portlets.admin.authportletmanager.client.Entities; +import org.gcube.portlets.admin.authportletmanager.client.widget.WindowBox; +import org.gcube.portlets.admin.authportletmanager.shared.Caller; +import org.gcube.portlets.admin.authportletmanager.shared.Caller.TypeCaller; +import org.gcube.portlets.admin.authportletmanager.shared.ConstantsSharing; + +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.ListBox; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ChangeEvent; +import com.google.gwt.event.dom.client.ChangeHandler; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; + +/** + * Dialog Box for add multiple caller for one policy or quota + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ + +public class DialogAddMultipleCallerService extends WindowBox { + + private static final Binder binder = GWT.create(Binder.class); + interface Binder extends UiBinder { + } + + @UiField + Button b_exit_dialog_caller; + + @UiField + Button b_add_caller; + + @UiField + ListBox l_service_class_policy; + @UiField + ListBox l_service_name_policy; + @UiField + ListBox l_service_id_policy; + + + public ListBox rightList= new ListBox(true); + @UiField + VerticalPanel leftPanel; + @UiField + VerticalPanel rightPanel; + @UiField + VerticalPanel buttonPanel; + + @UiField + Button toRightButton; + @UiField + Button allToLeftButton; + @UiField + Button toLeftButton; + + + public PolicyAddDialog dialogPolicy; + + public QuoteAddDialog dialogQuota; + + public int typeMaster =0; + + public DialogAddMultipleCallerService(List callerSelected,PolicyAddDialog policyAddDialog) { + this.setWidget(binder.createAndBindUi(this)); + //this.setAutoHideEnabled(true); + this.setGlassEnabled(true); + + this.setWidth("450px"); + this.setText("Add/Remove Service"); + this.setAnimationEnabled(isVisible()); + this.center(); + + rightList.setVisibleItemCount(10); + rightList.setSize(12); + rightList.setStyleName("width_select"); + rightPanel.add(rightList); + + //set padding between cells to make the component look better + this.getElement().setAttribute("cellpadding", "1"); + leftPanel.getElement().setAttribute("cellpadding", "1"); + buttonPanel.getElement().setAttribute("cellpadding", "2"); + rightPanel.getElement().setAttribute("cellpadding", "1"); + l_service_class_policy.addChangeHandler(new ChangeHandler() { + @SuppressWarnings("rawtypes") + public void onChange(ChangeEvent event) { + //String newValue = l_service_class_policy.getSelectedValue(); + int index = l_service_class_policy.getSelectedIndex(); + String newValue =l_service_class_policy.getValue(index); + l_service_name_policy.clear(); + if (newValue.equals(ConstantsSharing.Star)){ + l_service_name_policy.setEnabled(false); + l_service_name_policy.addItem(ConstantsSharing.Star); + l_service_id_policy.setEnabled(false); + } + else{ + l_service_name_policy.setEnabled(true); + l_service_id_policy.setEnabled(true); + //order by service name + @SuppressWarnings("unchecked") + List sortedServiceName=new ArrayList(Entities.getServicesMap().get(newValue)); + Collections.sort(sortedServiceName); + for (String serviceName :sortedServiceName ) + { + l_service_name_policy.addItem(serviceName); + } + } + } + }); + initList(callerSelected,policyAddDialog); + loadListService(); + } + /** + * Click close dialog + * @param e + */ + @UiHandler("b_exit_dialog_caller") + void onClickDialogExitCaller(ClickEvent e) { + this.hide(); + this.clear(); + } + + /** + * Click for add a multiple caller service + * @param e + */ + @UiHandler("b_add_caller") + void onClickDialogAddCaller(ClickEvent e) { + //resume list + List selectedCallerService =new ArrayList(); + for(int itemIndex=0; itemIndex= 1) { // !>= 1! is preferred instead of !== 1! to handle multiple selections + toLeftButton.setEnabled(true); + } + SortedMap toTempList=new TreeMap(); + for(int itemIndex=0; itemIndex mapFrom = sortByValues(toTempList); + for (Entry entry : mapFrom.entrySet()) + { + //rightList.insertItem(item, index); + rightList.addItem(entry.getKey(),entry.getValue()); + GWT.log("Key"+entry.getKey()+"Value"+entry.getValue()); + } + } + + @UiHandler("allToLeftButton") + public void allToLeftButtonClicked(ClickEvent event) { + rightList.clear(); + } + @UiHandler("toRightButton") + public void toRightButtonClicked(ClickEvent event) { + //select the selected value and insert into list + int indexC = l_service_class_policy.getSelectedIndex(); + String serviceClass =l_service_class_policy.getValue(indexC); + + int indexN = l_service_name_policy.getSelectedIndex(); + String serviceName =l_service_name_policy.getValue(indexN); + + int indexI = l_service_id_policy.getSelectedIndex(); + String serviceId =l_service_id_policy.getValue(indexI); + + String serviceSelected=serviceClass+":"+serviceName+":"+serviceId; + + SortedMap toTempList=new TreeMap(); + for(int itemIndex=0; itemIndex sortedServiceClass=new ArrayList(Entities.getServicesMap().keySet()); + Collections.sort(sortedServiceClass); + for (String serviceClass :sortedServiceClass ) + { + l_service_class_policy.addItem(serviceClass); + } + l_service_id_policy.addItem(ConstantsSharing.Star); + } + + protected void initList(List callerSelected,PolicyAddDialog dialog) { + //configure master for policy + typeMaster=1; + this.dialogPolicy=dialog; + + for (Caller caller :callerSelected){ + if (caller.getTypecaller().equals(TypeCaller.service)) + rightList.addItem(caller.getCallerName(), caller.getTypecaller().toString()); + } + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private static HashMap sortByValues(SortedMap tempList) { + List list = new LinkedList(tempList.entrySet()); + // Defined Custom Comparator here + Collections.sort(list, new Comparator() { + public int compare(Object o1, Object o2) { + return ((Comparable) ((Map.Entry) (o1)).getValue()) + .compareTo(((Map.Entry) (o2)).getValue()); + } + }); + HashMap sortedHashMap = new LinkedHashMap(); + for (Iterator it = list.iterator(); it.hasNext();) { + Map.Entry entry = (Map.Entry) it.next(); + sortedHashMap.put(entry.getKey(), entry.getValue()); + } + return sortedHashMap; + } +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService.ui.xml new file mode 100644 index 0000000..378d255 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService.ui.xml @@ -0,0 +1,105 @@ + + + + .panel { + background-color: #d9e2e8; + padding: 10px; + border-left: 2px solid #888; + border-right: 2px solid #888; + border-bottom: 2px solid #888; + } + + .panel_text { + background-color: #F3F7FB; + border-radius: 4px; + border: 1px solid #ccc; + padding: 10px; + } + + .panel_center { + margin-left: 10px; + margin-right: 10px; + } + + .panel_right { + margin-top: 20px; + height: 200px; + } + + .r_loader_space { + margin-top: 10px; + text-align: center; + height: 30px; + width: auto; + } + + .footer_dialog { + text-align: right; + margin-top: 20px; + } + + .button_dialog { + margin-left: 10px; + } + + .row_element { + margin-top: 10px; + } + + + + + + + + + + + Service Class + + + + + Service Name + + + + + Service Id + + + + + + + + + + + + + + + + + + + + + + + + + Add + Close + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole.java new file mode 100644 index 0000000..9bd71e6 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole.java @@ -0,0 +1,168 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.client.Entities; +import org.gcube.portlets.admin.authportletmanager.client.widget.PickList; +import org.gcube.portlets.admin.authportletmanager.client.widget.WindowBox; +import org.gcube.portlets.admin.authportletmanager.shared.Caller; +import org.gcube.portlets.admin.authportletmanager.shared.Caller.TypeCaller; + +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.ListBox; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ChangeEvent; +import com.google.gwt.event.dom.client.ChangeHandler; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.Widget; + +/** + * Dialog Box for add multiple caller for one policy or quota + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ + +public class DialogAddMultipleCallerUserRole extends WindowBox { + + private static final Binder binder = GWT.create(Binder.class); + interface Binder extends UiBinder { + } + + @UiField + Button b_exit_dialog_caller; + + @UiField + Button b_add_caller; + + @UiField + PickList pickList; + + @UiField + ListBox l_select_type_caller; + + public PolicyAddDialog dialogPolicy; + + public QuoteAddDialog dialogQuota; + + public int typeMaster =0; + + public DialogAddMultipleCallerUserRole() { + this.setWidget(binder.createAndBindUi(this)); + this.setGlassEnabled(true); + this.setWidth("450px"); + this.setText("Add/Remove User or Role"); + this.setAnimationEnabled(isVisible()); + this.center(); + //load Handler for service class + l_select_type_caller.addChangeHandler(new ChangeHandler() { + public void onChange(ChangeEvent event) { + int indexC = l_select_type_caller.getSelectedIndex(); + String typeCaller =l_select_type_caller.getValue(indexC); + GWT.log("AuthManager - Add filter select:"+typeCaller); + if (typeCaller.equals("All")){ + pickList.clearLeftList(); + ArrayList listCaller=new ArrayList(); + for (Caller caller :Entities.getCallers()){ + if (!caller.getTypecaller().equals(TypeCaller.service)) + listCaller.add(caller); + } + pickList.setLeftListElements(listCaller); + } + else{ + + List filterCaller=new ArrayList(); + for (Caller caller:Entities.getCallers()){ + if (caller.getTypecaller().toString().toLowerCase().equals(typeCaller.toLowerCase())) + filterCaller.add(caller); + } + pickList.clearLeftList(); + pickList.setLeftListElements(filterCaller); + + } + + } + }); + } + /** + * Click close dialog + * @param e + */ + @UiHandler("b_exit_dialog_caller") + void onClickDialogExitCaller(ClickEvent e) { + this.hide(); + this.clear(); + } + /** + * Click for add a multiple caller + * @param e + */ + @UiHandler("b_add_caller") + void onClickDialogAddCaller(ClickEvent e) { + //resume list + if (typeMaster==1) + dialogPolicy.setListCallerUserRole(pickList.getRightListElements()); + if (typeMaster==2) + dialogQuota.setListCaller(pickList.getRightListElements()); + this.hide(); + this.clear(); + } + + /** + * Init for load a multiple caller with default caller selected + * @param callerSelected + * @param dialog + */ + public void initList(List callerSelected, PolicyAddDialog dialog) { + this.dialogPolicy=dialog; + //configure master for policy + typeMaster=1; + ArrayList filterList=new ArrayList(); + for (Caller caller :Entities.getCallers()){ + if (!caller.getTypecaller().equals(TypeCaller.service)){ + if (!callerSelected.contains(caller)) + filterList.add(caller); + } + } + pickList.setLeftListElements(filterList); + + ArrayList filterListSelected=new ArrayList(); + for (Caller caller :callerSelected){ + if (!caller.getTypecaller().equals(TypeCaller.service)) + filterListSelected.add(caller); + } + pickList.setRightListElements(filterListSelected); + + } + + + /** + * Init for load a multiple caller with default caller selected + * @param callerSelected + * @param dialog + */ + public void initList(List callerSelected, QuoteAddDialog dialog) { + this.dialogQuota=dialog; + //configure master for quota + typeMaster=2; + ArrayList filterList=new ArrayList(); + for (Caller caller :Entities.getCallers()){ + if (!caller.getTypecaller().equals(TypeCaller.service)){ + if (!callerSelected.contains(caller)) + filterList.add(caller); + } + } + pickList.setLeftListElements(filterList); + ArrayList filterListSelected=new ArrayList(); + for (Caller caller :callerSelected){ + if (!caller.getTypecaller().equals(TypeCaller.service)) + filterListSelected.add(caller); + } + pickList.setRightListElements(callerSelected); + } +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole.ui.xml new file mode 100644 index 0000000..5fa0ca6 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole.ui.xml @@ -0,0 +1,75 @@ + + + + .panel { + background-color: #d9e2e8; + padding: 10px; + border-left: 2px solid #888; + border-right: 2px solid #888; + border-bottom: 2px solid #888; + /* + border-radius: 4px; + border: 2px solid #888; + width: 80%; + margin-left: 10%; + */ + } + .panel_text { + background-color: #F3F7FB; + border-radius: 4px; + border: 1px solid #ccc; + padding: 10px; + } + + .r_loader_space { + margin-top: 10px; + text-align: center; + height: 30px; + width: auto; + } + + .footer_dialog { + text-align: right; + margin-top: 20px; + } + + .button_dialog { + margin-left: 10px; + } + + + + + + Type Caller + + All + Role + User + + + + + + + + + + + + + + + + + Add + Close + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogError.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogError.java new file mode 100644 index 0000000..5507c4a --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogError.java @@ -0,0 +1,75 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import org.gcube.portlets.admin.authportletmanager.client.widget.WindowBox; +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.Icon; +import com.github.gwtbootstrap.client.ui.Label; +import com.github.gwtbootstrap.client.ui.constants.ButtonType; +import com.github.gwtbootstrap.client.ui.constants.IconType; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.ui.HasHorizontalAlignment; +import com.google.gwt.user.client.ui.VerticalPanel; + +/** + * Dialog Box for show an error or warning + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class DialogError extends WindowBox{ + + public DialogError() { + //super(false, true); + super(true, false); + } + + public void showError(String textError){ + + /* + this.setWidth(ConstantsSharing.WIDTH_DIALOG_LOADER + "px"); + this.setHeight(ConstantsSharing.HEIGHT_DIALOG_LOADER + "px"); + this.setPopupPosition(((Window.getClientWidth() - ConstantsSharing.WIDTH_DIALOG_LOADER) / 2), + ((Window.getClientHeight()-ConstantsSharing.HEIGHT_DIALOG_LOADER)/2) ); + this.setGlassEnabled(true); + this.setAnimationEnabled(true); + */ + this.setStyleName("modal_error"); + this.setWidth("800px"); + this.setAnimationEnabled(true); + this.setGlassEnabled(true); + this.center(); + + Icon icon=new Icon(); + icon.setIcon(IconType.EXCLAMATION_SIGN); + icon.addStyleName("icon_error"); + Label labelError =new Label(); + labelError.setText("Error"); + labelError.setStyleName("label_error"); + + Label labelTextError =new Label(); + labelTextError.setText(textError); + labelTextError.setStyleName("label_text_error"); + + Button buttonErrorExit= new Button(); + buttonErrorExit.setType(ButtonType.DANGER); + buttonErrorExit.setText("Exit"); + buttonErrorExit.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent event) { + // handle the click event + hide(); + clear(); + } + }); + VerticalPanel dialogContents = new VerticalPanel(); + dialogContents.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); + dialogContents.setWidth("100%"); + dialogContents.addStyleName("content_error"); + dialogContents.add(icon); + dialogContents.add(labelTextError); + dialogContents.add(buttonErrorExit); + this.add(dialogContents); + this.show(); + } +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogLoader.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogLoader.java new file mode 100644 index 0000000..44dc892 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogLoader.java @@ -0,0 +1,63 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import org.gcube.portlets.admin.authportletmanager.shared.ConstantsSharing; + +import com.github.gwtbootstrap.client.ui.Label; +import com.github.gwtbootstrap.client.ui.ProgressBar; +import com.github.gwtbootstrap.client.ui.base.ProgressBarBase.Style; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.DialogBox; +import com.google.gwt.user.client.ui.VerticalPanel; +/** + * Dialog Box for show a loader status + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class DialogLoader extends DialogBox{ + private ProgressBar progressLoader =new ProgressBar(); + + + public DialogLoader() { + super(false, true); + } + + public void startLoader(){ + + this.setWidth(ConstantsSharing.WIDTH_DIALOG_LOADER + "px"); + this.setHeight(ConstantsSharing.HEIGHT_DIALOG_LOADER + "px"); + this.setPopupPosition(((Window.getClientWidth() - ConstantsSharing.WIDTH_DIALOG_LOADER) / 2), + ((Window.getClientHeight()-ConstantsSharing.HEIGHT_DIALOG_LOADER)/2) ); + + this.setAnimationEnabled(true); + this.setGlassEnabled(true); + this.setAnimationEnabled(true); + this.setStyleName("modal_loader"); + + Label labelLoader =new Label(); + labelLoader.setText("Loading..."); + labelLoader.setStyleName("label_loader"); + + + progressLoader.setActive(true); + progressLoader.setPercent(100); + progressLoader.setType(Style.ANIMATED); + + VerticalPanel dialogContents = new VerticalPanel(); + + dialogContents.setWidth("100%"); + dialogContents.addStyleName("content_loader"); + dialogContents.add(labelLoader); + dialogContents.add(progressLoader); + + this.add(dialogContents); + this.show(); + + } + public void stopLoader(){ + this.hide(); + this.clear(); + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout.java new file mode 100644 index 0000000..62fafbd --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout.java @@ -0,0 +1,23 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; + +public class HeaderLayout extends Composite { + + private static HeaderLayoutUiBinder uiBinder = GWT + .create(HeaderLayoutUiBinder.class); + + interface HeaderLayoutUiBinder extends UiBinder { + } + + public HeaderLayout() { + initWidget(uiBinder.createAndBindUi(this)); + } + + + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout.ui.xml new file mode 100644 index 0000000..e09a3bd --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout.ui.xml @@ -0,0 +1,11 @@ + + + + + + Management + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.java new file mode 100644 index 0000000..f7f0716 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.java @@ -0,0 +1,557 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.client.AuthManagerController; +import org.gcube.portlets.admin.authportletmanager.client.Entities; +import org.gcube.portlets.admin.authportletmanager.client.event.AddPoliciesEvent; +import org.gcube.portlets.admin.authportletmanager.client.event.UpdatePolicyEvent; +import org.gcube.portlets.admin.authportletmanager.client.resource.AuthResources; +import org.gcube.portlets.admin.authportletmanager.client.widget.InputListWidget; +import org.gcube.portlets.admin.authportletmanager.client.widget.WindowBox; +import org.gcube.portlets.admin.authportletmanager.shared.Access; +import org.gcube.portlets.admin.authportletmanager.shared.Caller; +import org.gcube.portlets.admin.authportletmanager.shared.Caller.TypeCaller; +import org.gcube.portlets.admin.authportletmanager.shared.ConstantsSharing; +import org.gcube.portlets.admin.authportletmanager.shared.PolicyAuth; +import org.gcube.portlets.admin.authportletmanager.shared.Service; +import org.gcube.portlets.widgets.widgettour.client.extendedclasses.GCubeTour; + +import com.ait.toolkit.hopscotch.client.Placement; +import com.ait.toolkit.hopscotch.client.TourStep; +import com.github.gwtbootstrap.client.ui.Alert; +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.ButtonGroup; +import com.github.gwtbootstrap.client.ui.Image; +import com.github.gwtbootstrap.client.ui.ListBox; +import com.github.gwtbootstrap.client.ui.Row; +import com.github.gwtbootstrap.client.ui.base.AlertBase; +import com.github.gwtbootstrap.client.ui.event.ClosedEvent; +import com.github.gwtbootstrap.client.ui.event.ClosedHandler; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ChangeEvent; +import com.google.gwt.event.dom.client.ChangeHandler; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Widget; +/** + * Dialog Box for add a policy + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ + +public class PolicyAddDialog extends WindowBox { + + private static final Binder binder = GWT.create(Binder.class); + interface Binder extends UiBinder { + } + + private Boolean error_display=false; + + private ArrayListlistModifyPolicy; + + private Boolean modifyPolicy=false; + + private ArrayListlistAddPolicy; + + public InputListWidget ListWidget; + + @UiField + FlowPanel text_caller_policy; + @UiField + ListBox l_service_class_policy; + @UiField + ListBox l_service_name_policy; + @UiField + ListBox l_service_id_policy; + @UiField + ListBox l_access_policy; + @UiField + ButtonGroup b_caller_checkbox; + @UiField + Button b_caller_all_user; + @UiField + Button b_caller_all_role; + @UiField + Button b_caller_except; + @UiField + Button b_add_multiple_user_role; + @UiField + Button b_add_multiple_service; + @UiField + Button b_exit_dialog_policy; + @UiField + Button b_save_policy; + @UiField + Row r_loader_space; + + @UiField + FlowPanel idAddCallerPolicy; + @UiField + FlowPanel idAddServicePolicy; + @UiField + FlowPanel idAddAccessPolicy; + + public PolicyAddDialog() { + + super(true, false); + this.setWidget(binder.createAndBindUi(this)); + //this.setGlassEnabled(true); + this.setWidth("800px"); + this.setAnimationEnabled(true); + this.setGlassEnabled(true); + this.center(); + this.setText("Add/Update Policy"); + + idAddCallerPolicy.getElement().setId("idAddCallerPolicy"); + idAddServicePolicy.getElement().setId("idAddServicePolicy"); + idAddAccessPolicy.getElement().setId("idAddAccessPolicy"); + + + //istance a new list policy for modify + listModifyPolicy=new ArrayList(); + + //Initialize a suggest for caller + text_caller_policy.setStyleName("auto_suggest"); + ListWidget=new InputListWidget(); + text_caller_policy.add(ListWidget); + //disable except + b_caller_except.setEnabled(false); + //load Handler for service class + l_service_class_policy.addChangeHandler(new ChangeHandler() { + @SuppressWarnings("rawtypes") + public void onChange(ChangeEvent event) { + int indexC = l_service_class_policy.getSelectedIndex(); + String newValue =l_service_class_policy.getValue(indexC); + l_service_name_policy.clear(); + if (newValue.equals(ConstantsSharing.Star)){ + + l_service_name_policy.setEnabled(false); + l_service_name_policy.addItem(ConstantsSharing.StarLabel,ConstantsSharing.Star); + l_service_id_policy.setEnabled(false); + } + else{ + l_service_name_policy.setEnabled(true); + l_service_id_policy.setEnabled(true); + //order by service name + @SuppressWarnings("unchecked") + List sortedServiceName=new ArrayList(Entities.getServicesMap().get(newValue)); + Collections.sort(sortedServiceName); + //filter distinct service + List distinctServiceName = new ArrayList(); + for (String serviceName :sortedServiceName ) + { + if (!distinctServiceName.contains(serviceName)){ + l_service_name_policy.addItem(serviceName); + distinctServiceName.add(serviceName); + } + } + } + } + }); + loadListService(); + loadListAccessPolicy(); + r_loader_space.clear(); + GCubeTour tourAddDialogPolicy = new GCubeTour("tour-auth add dialog", "auth-portlet-manager", 1, "Would you like to see again this tour next time ?", "Tour Policy use"); + tourAddDialogPolicy.setShowPrevButton(true); + if (!this.modifyPolicy){ + TourStep firstStep = new TourStep(Placement.RIGHT, "idAddCallerPolicy"); + firstStep.setContent("Here you can add a single or multiple caller that denies an access on a selected service:" + + "
If insert an user digit @,
If insert a role digit #,
If you want insert a service digit $."); + firstStep.setTitle("Add Caller"); + firstStep.centerXOffset(); + firstStep.centerArrowOffset(); + tourAddDialogPolicy.addStep(firstStep); + } + TourStep secondStep = new TourStep(Placement.TOP, "idAddServicePolicy"); + secondStep.setTitle("Select Service"); + secondStep.setContent("Specify a service class and service name "); + secondStep.centerXOffset(); + secondStep.centerArrowOffset(); + + TourStep thirdStep = new TourStep(Placement.TOP, "idAddAccessPolicy"); + thirdStep.setTitle("Select Access"); + thirdStep.setContent("Specify an acces type"); + thirdStep.centerXOffset(); + thirdStep.centerArrowOffset(); + + tourAddDialogPolicy.addStep(secondStep); + tourAddDialogPolicy.addStep(thirdStep); + tourAddDialogPolicy.startTour(); + + } + + /** + * Click all user + * @param e ClickEvent + */ + @UiHandler("b_caller_all_user") + void onClickAddAllUser(ClickEvent e) { + if (!b_caller_all_user.isToggled()){ + //selected checkbox all user + b_caller_all_user.setFocus(false); + b_caller_all_role.setFocus(false); + b_caller_all_role.setActive(false); + + b_add_multiple_user_role.setEnabled(false); + b_add_multiple_service.setEnabled(false); + b_caller_except.setEnabled(true); + b_caller_except.setActive(false); + + //Caller allCallerUser= new Caller("user","ALL"); + Caller allCallerUser= new Caller(TypeCaller.user,"ALL"); + ListWidget.clearList(); + ListWidget.addCaller(allCallerUser); + } + else{ + //not selected checkbox all user + b_caller_all_role.setEnabled(true); + b_add_multiple_user_role.setEnabled(true); + b_add_multiple_service.setEnabled(true); + b_caller_except.setEnabled(false); + ListWidget.clearList(); + } + } + + /** + * Click all role + * @param e ClickEvent + */ + @UiHandler("b_caller_all_role") + void onClickAddAllRole(ClickEvent e) { + if (!b_caller_all_role.isToggled()){ + //selected checkbox all role + b_caller_all_role.setFocus(false); + b_caller_all_user.setFocus(false); + b_caller_all_user.setActive(false); + + b_add_multiple_user_role.setEnabled(false); + b_add_multiple_service.setEnabled(false); + b_caller_except.setEnabled(true); + b_caller_except.setActive(false); + + Caller allCallerRole= new Caller(TypeCaller.role,"ALL"); + ListWidget.clearList(); + ListWidget.addCaller(allCallerRole); + } + else{ + //not selected checkbox all role + b_caller_all_user.setEnabled(true); + b_add_multiple_user_role.setEnabled(true); + b_add_multiple_service.setEnabled(true); + b_caller_except.setEnabled(false); + ListWidget.clearList(); + } + } + + /** + * Click except + * @param e ClickEvent + */ + @UiHandler("b_caller_except") + void onClickExcept(ClickEvent e) { + //selected except + if (!b_caller_except.isToggled()) + ListWidget.enabledList(); + else{ + ListWidget.clearList(); + if (!b_caller_all_role.isToggled()){ + Caller allCallerUser= new Caller(TypeCaller.user,"ALL"); + ListWidget.addCaller(allCallerUser); + } + else if (!b_caller_all_user.isToggled()){ + Caller allCallerRole= new Caller(TypeCaller.role,"ALL"); + ListWidget.addCaller(allCallerRole); + } + } + } + /** + * Click open dialog for multiple caller user or role + * @param e + */ + @UiHandler("b_add_multiple_user_role") + void onClickAddCaller(ClickEvent e) { + DialogAddMultipleCallerUserRole popup = new DialogAddMultipleCallerUserRole(); + popup.initList(ListWidget.callerSelected,this); + popup.show(); + } + /** + * Click open dialog for multiple caller service + * @param e + */ + @UiHandler("b_add_multiple_service") + void onClickAddCallerService(ClickEvent e) { + DialogAddMultipleCallerService popup = new DialogAddMultipleCallerService(ListWidget.callerSelected,this); + //popup.initList(); + popup.show(); + } + /** + * Click close dialog + * @param e + */ + @UiHandler("b_exit_dialog_policy") + void onClickExitDialogPolicy(ClickEvent e) { + this.hide(); + this.clear(); + } + /** + * Click add policy + * @param e + */ + @UiHandler("b_save_policy") + void onClickSavePolicy(ClickEvent e) { + //verify if a modify any + if (this.modifyPolicy){ + //verifico se ho cambiato qualcosa + for (PolicyAuth verifyPolicy:listModifyPolicy){ + String serviceClass =l_service_class_policy.getValue(l_service_class_policy.getSelectedIndex()); + String serviceName =l_service_name_policy.getValue(l_service_name_policy.getSelectedIndex()); + String serviceId =l_service_id_policy.getValue(l_service_id_policy.getSelectedIndex()); + Service service=new Service(serviceClass,serviceName,serviceId); + Access access =Access.valueOf(l_access_policy.getValue(l_access_policy.getSelectedIndex())); + if ((verifyPolicy.getService().equals(service) )&& (verifyPolicy.getAccess().equals(access))){ + if (!error_display) + ErrorText("Not changed"); + error_display=true; + return ; + } + } + } + + if (ListWidget.callerSelected.isEmpty()){ + if (!error_display) + ErrorText("Insert Caller"); + error_display=true; + } + else{ + error_display=false; + String serviceClass =l_service_class_policy.getValue(l_service_class_policy.getSelectedIndex()); + String serviceName =l_service_name_policy.getValue(l_service_name_policy.getSelectedIndex()); + String serviceId =l_service_id_policy.getValue(l_service_id_policy.getSelectedIndex()); + Service service=new Service(serviceClass,serviceName,serviceId); + //Access access = Access.valueOf(l_access_policy.getSelectedValue()); + int indexA = l_access_policy.getSelectedIndex(); + Access access =Access.valueOf(l_access_policy.getValue(indexA)); + if (listModifyPolicy.isEmpty()){ + //policy to be added + //verify if a insert simple or exception + if (b_caller_except.isToggled()){ + GWT.log("AuthManager - Insert new policy with execption and service:"+service.getServiceClass()); + PolicyAuth policy= new PolicyAuth(); + List callerList=new ArrayList(); + //order a list caller + if (ListWidget.callerSelected.size() > 0) { + Collections.sort(ListWidget.callerSelected, new Comparator() { + @Override + public int compare(final Caller o1, final Caller o2) { + return o1.getCallerName().compareTo(o2.getCallerName()); + } + } ); + } + for (Caller caller:ListWidget.callerSelected){ + GWT.log("add"+caller.getCallerName()); + callerList.add(caller); + } + policy.setCaller(callerList); + policy.setService(service); + policy.setAccess(access); + policy.setExcludesCaller(true); + listAddPolicy=new ArrayList(); + listAddPolicy.add(policy); + AuthManagerController.eventBus.fireEvent(new AddPoliciesEvent(listAddPolicy, this)); + } + else{ + listAddPolicy=new ArrayList(); + for (Caller caller:ListWidget.callerSelected){ + GWT.log("AuthManager - Insert new policy:"+caller.getCallerName()+" with type:"+caller.getTypecaller().toString()+"and service:"+service.getServiceClass()+" and access:"+access.toString()); + PolicyAuth policy= new PolicyAuth(); + List callerList=new ArrayList(); + callerList.add(caller); + policy.setCaller(callerList); + policy.setService(service); + policy.setAccess(access); + listAddPolicy.add(policy); + } + AuthManagerController.eventBus.fireEvent(new AddPoliciesEvent(listAddPolicy, this)); + } + } + else{ + for (PolicyAuth modifyPolicy:listModifyPolicy){ + Long idPolicy=modifyPolicy.getIdpolicy(); + GWT.log("AuthManager - Update policy:"+idPolicy); + modifyPolicy.setService(service); + modifyPolicy.setAccess(access); + AuthManagerController.eventBus.fireEvent(new UpdatePolicyEvent(modifyPolicy,this)); + } + } + } + } + + /** + * Array list for policy modified + * @param listPolicy + */ + public void setModifyPolicy(ArrayList listPolicy) { + + String serviceClass = null; + String serviceName = null; + String serviceId = null; + Access access = null; + this.listModifyPolicy = listPolicy; + this.modifyPolicy=true; + for (PolicyAuth result :listPolicy){ + List callerList= result.getCaller(); + Service service = result.getService(); + serviceClass=service.getServiceClass(); + serviceName=service.getServiceName(); + serviceId=service.getServiceId(); + access=result.getAccess(); + + if (result.getExcludesCaller()){ + TypeCaller typeCaller=result.getCallerType(); + callerList.add(new Caller(typeCaller,"ALL")); + } + ListWidget.addListCaller(callerList, false); + GWT.log("AuthManager - Modify existing Policy identifier:"+result.getIdpolicy()+" from caller:"+result.getCallerAsString()+ "with access:"+access); + } + //DISABLE ADD ANOTHER CALLER + b_caller_all_user.setEnabled(false); + b_caller_all_role.setEnabled(false); + b_add_multiple_user_role.setEnabled(false); + b_add_multiple_service.setEnabled(false); + //RETRIVE A SERVICE SELECT + l_service_name_policy.addItem("ALL"); + GWT.log("access:"+serviceClass); + if (!serviceClass.equals("ALL")){ + List distinctServiceName = new ArrayList(); + for (String serviceNameList : Entities.getServicesMap().get(serviceClass)){ + if (!distinctServiceName.contains(serviceNameList)){ + l_service_name_policy.addItem(serviceNameList); + distinctServiceName.add(serviceNameList); + } + } + //selected the values ​​of policy + l_service_class_policy.setSelectedValue(serviceClass); + l_service_name_policy.setSelectedValue(serviceName); + l_service_id_policy.setSelectedValue(serviceId); + } + l_access_policy.setSelectedValue(access.toString()); + } + /** + * Retrieve information from dialog multiple caller + * @param listCaller + */ + public void setListCallerUserRole(List listCaller){ + + List selectedCaller= new ArrayList(); + for (Caller caller: ListWidget.callerSelected){ + if (caller.getTypecaller().equals(TypeCaller.service)){ + selectedCaller.add(caller); + } + } + selectedCaller.addAll(listCaller); + ListWidget.replaceListCaller(selectedCaller); + } + /** + * + * @param listCaller + */ + public void setListCallerService(List listCaller) { + List selectedCaller= new ArrayList(); + for (Caller caller: ListWidget.callerSelected){ + if ((caller.getTypecaller().equals(TypeCaller.user))||(caller.getTypecaller().equals(TypeCaller.role))){ + selectedCaller.add(caller); + } + } + selectedCaller.addAll(listCaller); + ListWidget.replaceListCaller(selectedCaller); + } + + + /** + * Load a service into select service class + */ + public void loadListService(){ + l_service_class_policy.addItem(ConstantsSharing.StarLabel,ConstantsSharing.Star); + + l_service_name_policy.setEnabled(false); + l_service_name_policy.addItem(ConstantsSharing.StarLabel,ConstantsSharing.Star); + l_service_id_policy.setEnabled(false); + + //order by serviceClass + @SuppressWarnings({ "unchecked", "rawtypes" }) + List sortedServiceClass=new ArrayList(Entities.getServicesMap().keySet()); + Collections.sort(sortedServiceClass); + for (String serviceClass :sortedServiceClass ) + { + l_service_class_policy.addItem(serviceClass); + } + l_service_id_policy.addItem(ConstantsSharing.StarLabel,ConstantsSharing.Star); + } + + /** + * Load a list access into select access + */ + public void loadListAccessPolicy(){ + l_access_policy.ensureDebugId("l_access_policy"); + l_access_policy.setHeight("30px"); + l_access_policy.setVisibleItemCount(1); + //order by Access + /* + @SuppressWarnings({ "rawtypes", "unchecked" }) + List sortedAccess=new ArrayList(Entities.getAccess()); + Collections.sort(sortedAccess); + */ + for( Access access : Access.values() ) { + l_access_policy.addItem(access.toString()); + + } + } + + /** + * Alert for msg error + * @param stringMsg + */ + public void ErrorText(String stringMsg) { + Alert msg = new Alert(); + msg.setAnimation(true); + msg.setText(stringMsg); + msg.addClosedHandler(new ClosedHandler() { + @Override + public void onClosed(ClosedEvent event) { + error_display=false; + } + }); + r_loader_space.add(msg); + } + + /** + * Start Animation loading + */ + public void AppLoadingView() { + + b_exit_dialog_policy.setEnabled(false); + b_save_policy.setEnabled(false); + Image imgLoading = new Image(AuthResources.INSTANCE.loaderIcon()); + r_loader_space.clear(); + r_loader_space.add(imgLoading); + } + + /** + * Stop animation loading + */ + public void StopAppLoadingView() { + b_exit_dialog_policy.setEnabled(true); + b_save_policy.setEnabled(true); + clear(); + hide(); + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.ui.xml new file mode 100644 index 0000000..f01bc4a --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.ui.xml @@ -0,0 +1,110 @@ + + + + .panel { + background-color: #d9e2e8; + padding: 10px; + border-left: 2px solid #888; + border-right: 2px solid #888; + border-bottom: 2px solid #888; + } + .panel_text { + background-color: #F3F7FB; + border-radius: 4px; + border: 2px solid #ccc; + padding: 10px; + } + .r_loader_space { + /*margin-top:10px;*/ + text-align: center; + height: 30px; + margin-bottom: 10px; + margin-right: 20px; + } + .row_element { + margin-top: 10px; + } + .footer_dialog { + padding-right: 20px; + text-align: right; + } + .button_dialog { + margin-left: 10px; + } + .margin_left{ + margin-left: 10px; + } + + + + + + + Caller + + + + All Users + + + All Role + + + Except + + + + + + + + + Add + User/Role + + + Add + Service + + + + + + Service Class + + + + + Service Name + + + + + Service Id + + + + + + + Access + + + + + + + + + + + + Save + Close + + + + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid.java new file mode 100644 index 0000000..8ce4a8e --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid.java @@ -0,0 +1,331 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.client.widget.ActionCellClass; +import org.gcube.portlets.admin.authportletmanager.shared.PolicyAuth; + +import com.github.gwtbootstrap.client.ui.Label; +import com.google.gwt.cell.client.ActionCell.Delegate; +import com.google.gwt.cell.client.Cell; +import com.google.gwt.cell.client.Cell.Context; +import com.google.gwt.cell.client.CheckboxCell; +import com.google.gwt.cell.client.CompositeCell; +import com.google.gwt.cell.client.DateCell; +import com.google.gwt.cell.client.FieldUpdater; +import com.google.gwt.cell.client.HasCell; +import com.google.gwt.cell.client.TextCell; +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.i18n.client.DateTimeFormat; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.cellview.client.Column; +import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler; +import com.google.gwt.user.cellview.client.DataGrid; +import com.google.gwt.user.cellview.client.SimplePager; +import com.google.gwt.user.cellview.client.SimplePager.TextLocation; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.view.client.DefaultSelectionEventManager; +import com.google.gwt.view.client.MultiSelectionModel; +import com.google.gwt.view.client.SelectionModel; + +/** + * Table for list policy (data grid) + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class PolicyDataGrid extends Composite { + + private static PolicyDataGridUiBinder uiBinder = GWT + .create(PolicyDataGridUiBinder.class); + + interface PolicyDataGridUiBinder extends UiBinder { + } + /** + * The main DataGrid. + */ + @UiField(provided = true) + DataGrid dataGrid; + + @UiField(provided = true) + SimplePager pager; + + public PolicyDataGrid() { + onInitialize(); + initWidget(uiBinder.createAndBindUi(this)); + + } + + private Column callerColumn; + private Column callerType; + private Column serviceClassColumn; + private Column accessColumn; + private Column dataInsertColumn; + private Column dataUpdateColumn; + public static SelectionModel selectionModel; + public static ArrayListselectedPolicy= new ArrayList(); + + public void onInitialize() { + dataGrid = new DataGrid(); + dataGrid.setWidth("100%"); + dataGrid.setHeight("400px"); + dataGrid.setAutoHeaderRefreshDisabled(true); + dataGrid.setAutoHeaderRefreshDisabled(true); + dataGrid.addStyleName("table_policy"); + dataGrid.getElement().setId("idGridPolicy"); + //Set the message to display when the table is empty. + dataGrid.setEmptyTableWidget(new Label("No Policy Entry")); + dataGrid.setSkipRowHoverStyleUpdate(false); + // Create a Pager to control the table. + SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class); + pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true); + pager.setDisplay(dataGrid); + // Attach a column sort handler to the ListDataProvider to sort the list. + ListHandler sortHandler = + new ListHandler(PolicyDataProvider.get().getDataProvider().getList()); + dataGrid.addColumnSortHandler(sortHandler); + //Add a selection model so we can select cells. + selectionModel = new MultiSelectionModel(); + dataGrid.setSelectionModel(selectionModel, DefaultSelectionEventManager + . createCheckboxManager()); + //Init Table Columns + initTableColumns(selectionModel, sortHandler); + PolicyDataProvider.get().addDataDisplay(dataGrid); + dataGrid.setVisible(true); + } + + /** + * Init the columns to the table. + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + private void initTableColumns(final SelectionModel selectionModel, + ListHandler sortHandler) { + + // Checkbox column. This table will uses a checkbox column for selection. + Column checkColumn = + new Column(new CheckboxCell(true, false)) { + @Override + public Boolean getValue(PolicyAuth object) { + // Get the value from the selection model. + if (selectionModel.isSelected(object)){ + //if already exist no add + if (!selectedPolicy.contains(object)) + selectedPolicy.add(object); + } + else + selectedPolicy.remove(object); + return selectionModel.isSelected(object); + } + }; + dataGrid.addColumn(checkColumn, SafeHtmlUtils.fromSafeConstant("
")); + dataGrid.setColumnWidth(checkColumn, 5, Unit.PCT); + // CallerColumn column this is caller for the service + callerColumn = new Column(new TextCell()) { + @Override + public String getValue(PolicyAuth object) { + boolean excludeCaller =object.getExcludesCaller(); + String caller=object.getCallerAsString(); + if (excludeCaller) + caller="All execpt: "+caller; + return caller; + } + /** for override style on clik */ + @Override + public String getCellStyleNames(Context context, PolicyAuth object) { + + if (selectionModel.isSelected(object)) { + return "boldStyle"; + } + else + return null; + } + }; + callerColumn.setSortable(true); + sortHandler.setComparator(callerColumn, new Comparator() { + @Override + public int compare(PolicyAuth o1, PolicyAuth o2) { + return o1.getCallerAsString().compareTo(o2.getCallerAsString()); + } + }); + dataGrid.setColumnWidth(callerColumn, 20, Unit.PCT); + dataGrid.addColumn(callerColumn, new ResizableHeader("Caller", dataGrid, callerColumn)); + // CallerType column this is caller for the service + callerType = new Column(new TextCell()) { + @Override + public String getValue(PolicyAuth object) { + String caller=object.getCallerTypeAsDataGrid().toUpperCase(); + return caller; + } + /** for override style on clik */ + @Override + public String getCellStyleNames(Context context, PolicyAuth object) { + + if (selectionModel.isSelected(object)) { + return "boldStyle"; + } + else + return null; + } + }; + callerType.setSortable(true); + sortHandler.setComparator(callerType, new Comparator() { + @Override + public int compare(PolicyAuth o1, PolicyAuth o2) { + return o1.getCallerTypeAsString().compareTo(o2.getCallerTypeAsString()); + } + }); + dataGrid.setColumnWidth(callerType, 20, Unit.PCT); + dataGrid.addColumn(callerType, new ResizableHeader("Type", dataGrid, callerType)); + + // Service Class this a service class column for the caller. + serviceClassColumn = new Column(new TextCell()) { + @Override + public String getValue(PolicyAuth object) { + + String service=object.getServiceAsString(); + return service; + } + }; + serviceClassColumn.setSortable(true); + sortHandler.setComparator(serviceClassColumn, new Comparator() { + @Override + public int compare(PolicyAuth o1, PolicyAuth o2) { + + return o1.getServiceAsString().compareTo(o2.getServiceAsString()); + } + }); + dataGrid.setColumnWidth(serviceClassColumn, 30, Unit.PCT); + dataGrid.addColumn(serviceClassColumn, new ResizableHeader("Service", dataGrid, serviceClassColumn)); + + // accessColumn. + accessColumn = new Column(new TextCell()) { + @Override + public String getValue(PolicyAuth object) { + return object.getAccessString(); + } + }; + accessColumn.setSortable(true); + sortHandler.setComparator(accessColumn, new Comparator() { + @Override + public int compare(PolicyAuth o1, PolicyAuth o2) { + return o1.getAccess().compareTo(o2.getAccess()); + } + }); + dataGrid.setColumnWidth(accessColumn, 10, Unit.PCT); + dataGrid.addColumn(accessColumn, new ResizableHeader("Access", dataGrid, accessColumn)); + + dataInsertColumn = new Column(new DateCell(DateTimeFormat.getFormat("EEE, d MMM yyyy HH:mm:ss"))) { + @Override + public Date getValue(PolicyAuth object) { + return object.getDataInsert(); + } + }; + dataInsertColumn.setSortable(true); + sortHandler.setComparator(dataInsertColumn, new Comparator() { + @Override + public int compare(PolicyAuth o1, PolicyAuth o2) { + if (o1 == o2) { + return 0; + } + if (o1.getDataInsert() != null) { + Date date1 =o1.getDataInsert(); + Date date2 =o2.getDataInsert(); + + return (o2.getDataInsert() != null) ? date1.compareTo(date2) : 1; + } + return -1; + } + }); + dataGrid.setColumnWidth(dataInsertColumn, 10, Unit.PCT); + + dataGrid.addColumn(dataInsertColumn, new ResizableHeader("Insert", dataGrid, dataInsertColumn)); + + dataUpdateColumn = new Column(new DateCell(DateTimeFormat.getFormat("EEE, d MMM yyyy HH:mm:ss "))) { + @Override + public Date getValue(PolicyAuth object) { + return object.getDataUpdate(); + } + }; + dataUpdateColumn.setSortable(true); + sortHandler.setComparator(dataUpdateColumn, new Comparator() { + @Override + public int compare(PolicyAuth o1, PolicyAuth o2) { + if (o1 == o2) { + return 0; + } + if (o1.getDataUpdate() != null) { + Date date1 =o1.getDataUpdate(); + Date date2 =o2.getDataUpdate(); + return (o2.getDataUpdate() != null) ? date1.compareTo(date2) : 1; + } + return -1; + } }); + dataGrid.setColumnWidth(dataUpdateColumn, 10, Unit.PCT); + dataGrid.addColumn(dataUpdateColumn, new ResizableHeader("Last Update", dataGrid, dataUpdateColumn)); + + //add Columns Actions whit button Edit + List> cells = new LinkedList>(); + cells.add(new ActionHasCell("Edit", new Delegate() { + @Override + public void execute(PolicyAuth policy) { + // EDIT CODE + PolicyAddDialog dialogedit = new PolicyAddDialog(); + ArrayList listModifiedPolicy= new ArrayList(); + listModifiedPolicy.add(policy); + dialogedit.setModifyPolicy(listModifiedPolicy); + dialogedit.show(); + } + })); + cells.add(new ActionHasCell("Delete", new Delegate() { + @Override + public void execute(PolicyAuth policy) { + // DELETE CODE + ArrayList listDeletePolicy =new ArrayList(); + listDeletePolicy.add(policy); + PolicyDeleteDialog confirmDeleteDialog = new PolicyDeleteDialog(listDeletePolicy); + confirmDeleteDialog.show(); + } + })); + CompositeCell cell = new CompositeCell(cells); + Column actionColumn =new Column(cell) { + @Override + public PolicyAuth getValue(PolicyAuth object) { + return object; + } + }; + dataGrid.setColumnWidth(actionColumn, 15, Unit.PCT); + dataGrid.addColumn(actionColumn, "Actions"); + + } + + private class ActionHasCell implements HasCell { + private ActionCellClass cell; + public ActionHasCell(String text, Delegate delegate) { + cell = new ActionCellClass(text, delegate); + } + + @Override + public Cell getCell() { + return cell; + } + + @Override + public FieldUpdater getFieldUpdater() { + return null; + } + + @Override + public PolicyAuth getValue(PolicyAuth object) { + return object; + } + } +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid.ui.xml new file mode 100644 index 0000000..f2dc353 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid.ui.xml @@ -0,0 +1,34 @@ + + + + + .cellTable { + border-bottom: 1px solid #ccc; + text-align: left; + margin-bottom: 4px; + } + + + + + + + + + +
+ +
+ +
+ + + + + + +
+ +
\ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataProvider.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataProvider.java new file mode 100644 index 0000000..0aac7cb --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataProvider.java @@ -0,0 +1,250 @@ +/* + * Copyright 2010 Google Inc. + * + * 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.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.shared.ConstantsSharing; +import org.gcube.portlets.admin.authportletmanager.shared.PolicyAuth; + +import com.google.gwt.core.shared.GWT; +import com.google.gwt.view.client.HasData; +import com.google.gwt.view.client.ListDataProvider; + +/** + * The data source for contact information used in the sample. + */ +public class PolicyDataProvider { + + /** + * The singleton instance of the database. + */ + private static PolicyDataProvider instance; + + /** + * Get the singleton instance of the contact database. + * + * @return the singleton instance + */ + public static PolicyDataProvider get() { + if (instance == null) { + instance = new PolicyDataProvider(); + } + return instance; + } + + /** + * The provider that holds the list of contacts in the database. + */ + private ListDataProvider dataProvider = new ListDataProvider(); + + + /** + * The list string used for search + */ + private List initialSearch= new ArrayList();; + + + /** + * The list policy used for datagrid + */ + private List initialPolicies; + + /** + * Construct a new PolicyDataProvider + */ + private PolicyDataProvider() { + + } + + /** + * Add a display to the database. The current range of interest of the display + * will be populated with data. + * + * @param display a {@Link HasData}. + */ + public void addDataDisplay(HasData display) { + dataProvider.addDataDisplay(display); + } + + public ListDataProvider getDataProvider() { + return dataProvider; + } + + /** + * Load list policy provider + * @param listResultPolicy + */ + public void loadPolicyProvider(List listResultPolicy) { + initialPolicies = listResultPolicy; + //load list policy from servlet + List policies = dataProvider.getList(); + policies.removeAll(policies); + for (PolicyAuth policy : listResultPolicy){ + policies.add(policy); + } + } + + /*** + * Reset a provider + */ + public void resetPolicyProvider(){ + List policies = dataProvider.getList(); + policies.clear(); + } + + /** + * Refresh all displays. + */ + public void refreshDisplays() { + dataProvider.refresh(); + } + + /** + * Method for remove policy from provider + * @param idpolicy + */ + public void removePolicyProvider(Long idpolicy) { + // TODO Auto-generated method stub + List policies = dataProvider.getList(); + for (int i=0; i policies = dataProvider.getList(); + policies.add(policy); + initialPolicies.add(policy); + dataProvider.setList(policies); + + } + /** + * Used for research a string filter + * @return + */ + public List getInitialSearch() { + return initialSearch; + } + + /** + * Refresh list from a list search + */ + public void refreshlistFromSearch(String typeSearch){ + List policies = new ArrayList(); + Collections.copy(policies, initialPolicies); + List toRemove = new ArrayList(policies.size()); + for (int index=0; index initialSearch) { + this.initialSearch = initialSearch; + } + + /** + * Used for add a string search + * @param search + */ + public void setAddStringSearch(String search){ + this.initialSearch.add(search); + } + /** + * Used for remove string search + * @param filter + */ + public void removeStringSearch(String filter) { + // TODO Auto-generated method stub + this.initialSearch.remove(filter); + + } + + /** + * Used for remove all string search + */ + public void removeAllStringSearch() { + // TODO Auto-generated method stub + this.initialSearch.clear(); + + } + + /** + * Used for insert a filter button + * @param typefilter + */ + public void setFilterList(String typefilter) { + + // TODO Auto-generated method stub + List policiesFilter = new ArrayList(); + if (typefilter.isEmpty()){ + Collections.copy(policiesFilter, initialPolicies); + } + else{ + for (int index=0; indexalessandro.pieve@isti.cnr.it + * + */ + +public class PolicyDeleteDialog extends WindowBox { + + private static final Binder binder = GWT.create(Binder.class); + interface Binder extends UiBinder { + } + + private ArrayList deletePolicy; + //private Boolean error=false; + + + @UiField + Row r_loader_space; + + @UiField + Button b_confirm_delete; + + @UiField + Button b_confirm_exit; + + public PolicyDeleteDialog(ArrayList listDeletePolicy) { + + super(true, false); + + this.setWidget(binder.createAndBindUi(this)); + //this.setAutoHideEnabled(true); + this.setGlassEnabled(true); + this.setWidth("400px"); + this.setHeight("200px"); + this.setAnimationEnabled(isVisible()); + //this.center(); + this.setText("Delete Policy"); + this.setStyleName("modal_delete"); + this.setPopupPosition(((Window.getClientWidth() - 400) / 2), + ((Window.getClientHeight()-200)/2) ); + + + + this.deletePolicy=listDeletePolicy; + for (PolicyAuth policy:listDeletePolicy){ + String caller=policy.getCallerAsString(); + Label textpolicy =new Label(); + textpolicy.setText(caller); + textpolicy.addStyleName("text_label_delete_policy"); + r_loader_space.add(textpolicy); + } + + } + + /*** + * Handler on click for delete policy + * @param event + */ + @UiHandler("b_confirm_delete") + void onClickConfirmDeletePolicy(ClickEvent event) { + List listIdentifier=new ArrayList(); + for (PolicyAuth policy:deletePolicy){ + GWT.log("AuthManager - Delete: "+policy.getIdpolicy()); + listIdentifier.add(policy.getIdpolicy()); + } + AuthManagerController.eventBus.fireEvent(new RemovePoliciesEvent(listIdentifier,this)); + } + + + /*** + * Handler on click for close dialog + * @param event + */ + @UiHandler("b_confirm_exit") + void onClickConfirmExitPolicy(ClickEvent event) { + this.setAnimationEnabled(true); + this.hide(); + this.clear(); + } + + + /** + * Method for loader animation + */ + public void AppLoadingView() + { + Image imgLoading = new Image(AuthResources.INSTANCE.loaderIcon()); + b_confirm_delete.setEnabled(false); + b_confirm_exit.setEnabled(false); + r_loader_space.clear(); + r_loader_space.add(imgLoading); + } + public void StopAppLoadingView(){ + b_confirm_delete.setEnabled(true); + b_confirm_exit.setEnabled(true); + deletePolicy.clear(); + this.hide(); + this.clear(); + + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDeleteDialog.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDeleteDialog.ui.xml new file mode 100644 index 0000000..15b58d4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDeleteDialog.ui.xml @@ -0,0 +1,63 @@ + + + + .panel { + background-color: #d9e2e8; + padding: 10px; + border-left: 2px solid #888; + border-right: 2px solid #888; + border-bottom: 2px solid #888; + } + + .panel_text { + background-color: #F3F7FB; + border-radius: 4px; + border: 1px solid #ccc; + padding: 11px; + } + + .r_loader_space { + margin-top: 10px; + text-align: center; + margin-bottom: 20px; + width: 100%; + margin-left: 0px; + } + + .footer_dialog { + text-align: right; + } + + .button_dialog { + margin-left: 10px; + } + + .label_summary { + text-align: center; + width: 100%; + margin-left: 5px; + } + + + + + + + + Confirm Delete ? + + + + + + NO + YES + + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter.java new file mode 100644 index 0000000..7f16e6e --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter.java @@ -0,0 +1,322 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import org.gcube.portlets.admin.authportletmanager.client.AuthManagerController; +import org.gcube.portlets.admin.authportletmanager.client.event.ListPolicyEvent; +import org.gcube.portlets.admin.authportletmanager.client.widget.BulletList; +import org.gcube.portlets.admin.authportletmanager.client.widget.ListItem; +import org.gcube.portlets.admin.authportletmanager.client.widget.Paragraph; +import org.gcube.portlets.admin.authportletmanager.client.widget.Span; +import org.gcube.portlets.admin.authportletmanager.shared.Caller.TypeCaller; +import org.gcube.portlets.widgets.widgettour.client.extendedclasses.GCubeTour; + +import com.ait.toolkit.hopscotch.client.Placement; +import com.ait.toolkit.hopscotch.client.TourStep; +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.ButtonGroup; +import com.github.gwtbootstrap.client.ui.InputAddOn; +import com.github.gwtbootstrap.client.ui.TextBox; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.KeyCodes; +import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Widget; + +/** + * Header Filter for search, add and delete policy + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ + +public class PolicyFilter extends Composite { + + private static PolicyFilterUiBinder uiBinder = GWT + .create(PolicyFilterUiBinder.class); + + interface PolicyFilterUiBinder extends UiBinder { + } + + + @UiField + TextBox t_search; + @UiField + InputAddOn i_search; + @UiField + Button b_search; + @UiField + Button b_refresh; + @UiField + Button b_add_policy; + + @UiField + Button b_delete_policy; + @UiField + Button b_group_none; + @UiField + Button b_group_user; + @UiField + Button b_group_role; + @UiField + Button b_group_service; + + + @UiField + Button b_search_start; + + @UiField + Button b_search_contains; + + + @UiField + ButtonGroup b_search_type; + + @UiField + FlowPanel string_search; + + private String typeSearch="start"; + + private BulletList list; + + /** + * + */ + public PolicyFilter() { + + initWidget(uiBinder.createAndBindUi(this)); + initFilter(); + // guideTour(); + + } + + public void guideTour(){ + GCubeTour tour = new GCubeTour("Tour-auth", "auth-portlet-manager", 1, "Would you like to see again this tour next time ?", "Tour Auth Manager"); + GWT.log("AuthManager - Start Gcube Tour "); + tour.setShowPrevButton(true); + + TourStep firstStep = new TourStep(Placement.TOP, "idGridPolicy"); + firstStep.setContent("See your rule policYY"); + firstStep.setTitle("List policy active"); + firstStep.centerXOffset(); + firstStep.centerArrowOffset(); + + TourStep secondStep = new TourStep(Placement.TOP, "idAddPolicy"); + secondStep.setContent("Use this for add a new policy "); + secondStep.setTitle("Add Policy"); + secondStep.centerXOffset(); + secondStep.centerArrowOffset(); + + TourStep thirdStep = new TourStep(Placement.TOP, "idSearchPolicy"); + thirdStep.setContent("Use this for search an existing policy " + + "
Use @ for search caller,
Use $ for search service, " + + "
Use * for search access type."); + thirdStep.setTitle("Search Policy"); + thirdStep.centerXOffset(); + thirdStep.centerArrowOffset(); + + TourStep fourthStep = new TourStep(Placement.TOP, "idGroupPolicy"); + fourthStep.setContent("Use this for filter group policy "); + fourthStep.setTitle("Filter Policy"); + fourthStep.centerXOffset(); + fourthStep.centerArrowOffset(); + + //tour.addStep(firstStep); + tour.addStep(secondStep); + tour.addStep(thirdStep); + tour.addStep(fourthStep); + + tour.startTour(); + + } + + + /** + * Init filter + */ + public void initFilter(){ + + + list = new BulletList(); + list.setStyleName("input-list-caller"); + list.clear(); + } + + + @UiHandler("t_search") + public void onKeyDown(KeyDownEvent event) { + if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { + searchPolicy(); + } + } + @UiHandler("b_search") + void onClickSearch(ClickEvent e) { + searchPolicy(); + } + + @UiHandler("b_search_start") + void onClickSearchTypeStart(ClickEvent e) { + typeSearch="start"; + searchPolicy(); + } + + @UiHandler("b_search_contains") + void onClickSearchTypeContains(ClickEvent e) { + typeSearch="contains"; + searchPolicy(); + } + + @UiHandler("b_group_none") + void onClickFilterNone(ClickEvent e) { + filterPolicy(""); + } + + @UiHandler("b_group_user") + void onClickFilterUser(ClickEvent e) { + filterPolicy(TypeCaller.user.toString()); + } + + @UiHandler("b_group_role") + void onClickFilterRole(ClickEvent e) { + filterPolicy(TypeCaller.role.toString()); + } + + @UiHandler("b_group_service") + void onClickFilterService(ClickEvent e) { + filterPolicy(TypeCaller.service.toString()); + } + + + + + + + + + @UiHandler("b_add_policy") + void onClickAddPolicy(ClickEvent e) { + GWT.log("AuthManager - Open Dialog Insert/Modify Policy"); + PolicyAddDialog popup = new PolicyAddDialog(); + + popup.setAnimationEnabled(true); + + popup.show(); + + } + + @UiHandler("b_delete_policy") + void onClickRemovePolicy(ClickEvent e) { + GWT.log("AuthManager - Remove Policy"); + if (!PolicyDataGrid.selectedPolicy.isEmpty()){ + PolicyDeleteDialog confirmDeleteDialog = new PolicyDeleteDialog(PolicyDataGrid.selectedPolicy); + confirmDeleteDialog.show(); + } + + } + /** + *clear filter and reload all policy + * @param e + */ + + @UiHandler("b_refresh") + void onClickRefresh(ClickEvent e) { + GWT.log("AuthManager - Refresh List Policy"); + list.clear(); + b_group_none.setFocus(true); + b_group_none.setActive(true); + + b_group_user.setFocus(false); + b_group_user.setActive(false); + + b_group_role.setFocus(false); + b_group_role.setActive(false); + + b_group_service.setFocus(false); + b_group_service.setActive(false); + + AuthManagerController.eventBus.fireEvent(new ListPolicyEvent()); + } + + + + public void searchPolicy(){ + final String search = t_search.getText(); + if (!search.isEmpty()){ + GWT.log("AuthManager - Filter Search:"+search); + //build a list item + final ListItem displayItem = new ListItem(); + displayItem.setStyleName("token-input-token-facebook"); + Paragraph p = new Paragraph(search); + displayItem.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + displayItem.addStyleName("token-input-selected-token-facebook"); + } + }); + + Span span = new Span("x"); + span.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + removeStringSearch(displayItem, list,search); + } + }); + //add a new filter into list + displayItem.add(p); + displayItem.add(span); + + //add a filter into new list search + PolicyDataProvider.get().setAddStringSearch(search); + if (b_search_contains.isToggled()) + typeSearch="contains"; + else + typeSearch="start"; + + //refresh a provider for data grid + PolicyDataProvider.get().refreshlistFromSearch(typeSearch); + + list.add(displayItem); + string_search.add(list); + //init textbox search + t_search.setText(null); + } + else{ + PolicyDataProvider.get().refreshlistFromSearch(typeSearch); + } + } + + + /** + * Filter list policy for radio button and reset box search + * @param typefilter + */ + private void filterPolicy(String typefilter) { + // TODO Auto-generated method stub + //use filter + PolicyDataProvider.get().setFilterList(typefilter); + //reset box search + PolicyDataProvider.get().removeAllStringSearch(); + list.clear(); + + + } + + + + /** + * Remove a string filter from list and provider + * + * @param displayItem + * @param list + * @param search + */ + public void removeStringSearch(ListItem displayItem, BulletList list,String search){ + list.remove(displayItem); + PolicyDataProvider.get().removeStringSearch(search); + PolicyDataProvider.get().refreshlistFromSearch(typeSearch); + + } +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter.ui.xml new file mode 100644 index 0000000..3cc10b2 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter.ui.xml @@ -0,0 +1,123 @@ + + + + .txt_search { + border-radius: 0px !important; + margin-bottom: 0px !important; + } + + .btn_search { + border-radius: 0px 8px 8px 0 !important; + -webkit-border-radius: 0px 8px 8px 0 !important;; + -moz-border-radius: 0px 8px 8px 0 !important; + margin-right: 30px !important; + } + + .btn_search_start { + -webkit-border-radius: 0px; + border-radius: 0px !important; + } + .btn_search_start:before { + color: #333333; + content: "\f036"; + display: inline-block; + font-family: "fontawesome"; + } + + .btn_search_contains { + -webkit-border-radius: 0px; + border-radius: 0px !important; + } + + .btn_search_contains:before { + color: #333333; + content: "\f039"; + display: inline-block; + font-family: "fontawesome"; + } + .filter_bar { + height: 30px; + padding: 2px; + background-color: #fff; + border-radius: 4px; + } + .label_wizard_policy { + margin-left: 10 px; + font-size: 15 px; + font-weight: 600; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Search + + + + + + + + + + + + + + + + + + + + + + Create policy to deny access to Services + in the current context + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter.java new file mode 100644 index 0000000..0b649fa --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter.java @@ -0,0 +1,298 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import org.gcube.portlets.admin.authportletmanager.client.AuthManagerController; +import org.gcube.portlets.admin.authportletmanager.client.event.ListQuoteEvent; +import org.gcube.portlets.admin.authportletmanager.client.widget.BulletList; +import org.gcube.portlets.admin.authportletmanager.client.widget.ListItem; +import org.gcube.portlets.admin.authportletmanager.client.widget.Paragraph; +import org.gcube.portlets.admin.authportletmanager.client.widget.Span; +import org.gcube.portlets.widgets.widgettour.client.extendedclasses.GCubeTour; + +import com.ait.toolkit.hopscotch.client.Placement; +import com.ait.toolkit.hopscotch.client.TourStep; +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.ButtonGroup; +import com.github.gwtbootstrap.client.ui.InputAddOn; +import com.github.gwtbootstrap.client.ui.TextBox; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.KeyCodes; +import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Widget; + +/** + * Header Filter for search, add and delete quote + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ + +public class QuotaFilter extends Composite { + + private static QuotaFilterUiBinder uiBinder = GWT + .create(QuotaFilterUiBinder.class); + + interface QuotaFilterUiBinder extends UiBinder { + } + + + @UiField + TextBox t_search; + @UiField + InputAddOn i_search; + @UiField + Button b_search; + @UiField + Button b_refresh; + @UiField + Button b_add_quota; + @UiField + Button b_delete_quota; + @UiField + Button b_group_none; + @UiField + Button b_group_user; + @UiField + Button b_group_role; + + + @UiField + Button b_search_start; + + @UiField + Button b_search_contains; + + + @UiField + ButtonGroup b_search_type; + + @UiField + FlowPanel string_search; + + private String typeSearch="start"; + + private BulletList list; + + /** + * + */ + public QuotaFilter() { + + initWidget(uiBinder.createAndBindUi(this)); + initFilter(); + guideTour(); + + } + + public void guideTour(){ + GCubeTour tour = new GCubeTour("Tour-auth", "auth-portlet-manager", 2, "Would you like to see again this tour next time ?", "Tour Auth Manager"); + GWT.log("AuthManager - Start Gcube Tour "); + tour.setShowPrevButton(true); + /* + TourStep firstStep = new TourStep(Placement.TOP, "idGridQuote"); + firstStep.setContent("See your quote"); + firstStep.setTitle("List quote manager active"); + firstStep.centerXOffset(); + firstStep.centerArrowOffset(); +*/ + TourStep secondStep = new TourStep(Placement.TOP, "idAddQuote"); + secondStep.setContent("Use this for add a new quote manager "); + secondStep.setTitle("Add Quote"); + secondStep.centerXOffset(); + secondStep.centerArrowOffset(); + + TourStep thirdStep = new TourStep(Placement.TOP, "idSearchQuote"); + thirdStep.setContent("Use this for search an existing quote manager "); + thirdStep.setTitle("Search Quote"); + thirdStep.centerXOffset(); + thirdStep.centerArrowOffset(); + + TourStep fourthStep = new TourStep(Placement.TOP, "idGroupQuote"); + fourthStep.setContent("Use this for filter group quote manager "); + fourthStep.setTitle("Filter Quote"); + fourthStep.centerXOffset(); + fourthStep.centerArrowOffset(); + + // tour.addStep(firstStep); + tour.addStep(secondStep); + tour.addStep(thirdStep); + tour.addStep(fourthStep); + + tour.startTour(); + GWT.log("AuthManager - Quota Tour Complete "); + + + } + + + /** + * Init filter + */ + public void initFilter(){ + list = new BulletList(); + list.setStyleName("input-list-caller"); + list.clear(); + } + + + @UiHandler("t_search") + public void onKeyDown(KeyDownEvent event) { + if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { + searchQuote(); + } + } + @UiHandler("b_search") + void onClickSearch(ClickEvent e) { + searchQuote(); + } + + @UiHandler("b_search_start") + void onClickSearchTypeStart(ClickEvent e) { + typeSearch="start"; + searchQuote(); + } + + @UiHandler("b_search_contains") + void onClickSearchTypeContains(ClickEvent e) { + typeSearch="contains"; + searchQuote(); + } + + @UiHandler("b_group_none") + void onClickFilterNone(ClickEvent e) { + filterQuote(""); + } + + @UiHandler("b_group_user") + void onClickFilterUser(ClickEvent e) { + filterQuote("User"); + } + + @UiHandler("b_group_role") + void onClickFilterRole(ClickEvent e) { + filterQuote("role"); + } + + + + + + + + + @UiHandler("b_add_quota") + void onClickAddQuote(ClickEvent e) { + GWT.log("AuthManager - Add New Quota"); + QuoteAddDialog popupQuote = new QuoteAddDialog(); + popupQuote.setAnimationEnabled(true); + popupQuote.show(); + + } + + + @UiHandler("b_delete_quota") + void onClickRemoveQuote(ClickEvent e) { + GWT.log("AuthManager - Remove Quote"); + if (!QuoteDataGrid.selectedQuote.isEmpty()){ + QuoteDeleteDialog confirmDeleteDialog = new QuoteDeleteDialog(QuoteDataGrid.selectedQuote); + confirmDeleteDialog.show(); + } + + } + /** + *clear filter and reload all quote + * @param e + */ + + @UiHandler("b_refresh") + void onClickRefresh(ClickEvent e) { + GWT.log("AuthManager - Refresh List Quote"); + list.clear(); + AuthManagerController.eventBus.fireEvent(new ListQuoteEvent()); + } + + + + public void searchQuote(){ + final String search = t_search.getText(); + if (!search.isEmpty()){ + GWT.log("Search text:"+search); + //build a list item + final ListItem displayItem = new ListItem(); + displayItem.setStyleName("token-input-token-facebook"); + Paragraph p = new Paragraph(search); + displayItem.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + displayItem.addStyleName("token-input-selected-token-facebook"); + } + }); + + Span span = new Span("x"); + span.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + removeStringSearch(displayItem, list,search); + } + }); + //add a new filter into list + displayItem.add(p); + displayItem.add(span); + + //add a filter into new list search + QuoteDataProvider.get().setAddStringSearch(search); + if (b_search_contains.isToggled()) + typeSearch="contains"; + else + typeSearch="start"; + + //refresh a provider for data grid + QuoteDataProvider.get().refreshlistFromSearch(typeSearch); + + list.add(displayItem); + string_search.add(list); + //init textbox search + t_search.setText(null); + } + else{ + QuoteDataProvider.get().refreshlistFromSearch(typeSearch); + } + } + + + /** + * Filter list quote for radio button and reset box search + * @param typefilter + */ + private void filterQuote(String typefilter) { + // TODO Auto-generated method stub + //use filter + QuoteDataProvider.get().setFilterList(typefilter); + //reset box search + QuoteDataProvider.get().removeAllStringSearch(); + list.clear(); + + + } + + + + /** + * Remove a string filter from list and provider + * + * @param displayItem + * @param list + * @param search + */ + public void removeStringSearch(ListItem displayItem, BulletList list,String search){ + list.remove(displayItem); + QuoteDataProvider.get().removeStringSearch(search); + QuoteDataProvider.get().refreshlistFromSearch(typeSearch); + + } +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter.ui.xml new file mode 100644 index 0000000..f8e27b0 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter.ui.xml @@ -0,0 +1,125 @@ + + + + .txt_search { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px !important; + margin-bottom: 0 !important; + } + + .btn_search { + border-radius: 0px 8px 8px 0 !important; + -webkit-border-radius: 0px 8px 8px 0 !important;; + -moz-border-radius: 0px 8px 8px 0 !important; + margin-right: 30px !important; + } + + .btn_search_start { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px !important; + } + + .btn_search_start:before { + color: #333333; + content: "\f036"; + display: inline-block; + font-family: "fontawesome"; + } + + .btn_search_contains { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px !important; + } + + .btn_search_contains:before { + color: #333333; + content: "\f039"; + display: inline-block; + font-family: "fontawesome"; + } + + .filter_bar { + height: 30px; + padding: 2px; + background-color: #fff; + border-radius: 4px; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Search + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog.java new file mode 100644 index 0000000..2606505 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog.java @@ -0,0 +1,438 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.client.AuthManagerController; +import org.gcube.portlets.admin.authportletmanager.client.event.AddQuoteEvent; +import org.gcube.portlets.admin.authportletmanager.client.event.UpdateQuoteEvent; +import org.gcube.portlets.admin.authportletmanager.client.resource.AuthResources; +import org.gcube.portlets.admin.authportletmanager.client.widget.InputListWidget; +import org.gcube.portlets.admin.authportletmanager.client.widget.WindowBox; +import org.gcube.portlets.admin.authportletmanager.shared.Caller; +import org.gcube.portlets.admin.authportletmanager.shared.Caller.TypeCaller; +import org.gcube.portlets.admin.authportletmanager.shared.Quote; +import org.gcube.portlets.admin.authportletmanager.shared.Quote.ManagerType; +import org.gcube.portlets.admin.authportletmanager.shared.Quote.TimeInterval; +import org.gcube.portlets.widgets.widgettour.client.extendedclasses.GCubeTour; + +import com.ait.toolkit.hopscotch.client.Placement; +import com.ait.toolkit.hopscotch.client.TourStep; +import com.github.gwtbootstrap.client.ui.Alert; +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.ButtonGroup; +import com.github.gwtbootstrap.client.ui.Image; +import com.github.gwtbootstrap.client.ui.ListBox; +import com.github.gwtbootstrap.client.ui.Row; +import com.github.gwtbootstrap.client.ui.TextBox; +import com.github.gwtbootstrap.client.ui.base.AlertBase; +import com.github.gwtbootstrap.client.ui.event.ClosedEvent; +import com.github.gwtbootstrap.client.ui.event.ClosedHandler; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Widget; +/** + * Dialog Box for add a policy + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class QuoteAddDialog extends WindowBox { + + private static final Binder binder = GWT.create(Binder.class); + interface Binder extends UiBinder { + } + + private Boolean error_display=false; + + private ArrayListlistModifyQuote; + + private ArrayListlistAddQuote; + + public InputListWidget ListWidget; + + @UiField + FlowPanel text_caller_quota; + @UiField + ListBox l_time_interval_quota; + @UiField + ListBox l_type_quota; + @UiField + ButtonGroup b_caller_checkbox; + @UiField + Button b_caller_all_user; + @UiField + Button b_caller_all_role; + @UiField + Button b_caller_except; + @UiField + Button b_add_multiple_caller; + @UiField + Button b_exit_dialog_quota; + @UiField + Button b_save_quota; + @UiField + TextBox t_value_quota; + @UiField + Row r_loader_space; + @UiField + FlowPanel idAddCallerQuote; + @UiField + FlowPanel idAddTimeQuote; + @UiField + FlowPanel idAddTypeQuote; + @UiField + FlowPanel idAddValueQuote; + + public QuoteAddDialog() { + super(true, false); + this.setWidget(binder.createAndBindUi(this)); + //this.setGlassEnabled(true); + this.setWidth("800px"); + this.setAnimationEnabled(true); + this.setGlassEnabled(true); + this.center(); + this.setText("Add/Update Quota"); + idAddCallerQuote.getElement().setId("idAddCallerQuote"); + idAddTimeQuote.getElement().setId("idAddTimeQuote"); + idAddTypeQuote.getElement().setId("idAddTypeQuote"); + idAddValueQuote.getElement().setId("idAddValueQuote"); + //istance a new list policy for modify + listModifyQuote=new ArrayList(); + //Initialize a suggest for caller + text_caller_quota.setStyleName("auto_suggest"); + ListWidget=new InputListWidget(); + text_caller_quota.add(ListWidget); + //disable except + b_caller_except.setEnabled(false); + for (TimeInterval time : TimeInterval.values()) { + l_time_interval_quota.addItem(time.toString()); + + } + for (ManagerType managerType : ManagerType.values()) { + l_type_quota.addItem(managerType.toString()); + } + r_loader_space.clear(); + GCubeTour tourAddDialogQuote = new GCubeTour("tour-auth add dialog", "auth-portlet-manager", 2, "Would you like to see again this tour next time ?", "Tour Quote Manager use"); + tourAddDialogQuote.setShowPrevButton(true); + TourStep firstStep = new TourStep(Placement.TOP, "idAddCallerQuote"); + firstStep.setContent("Add a single or multiple caller that you define a quote manager" + + "If insert an user digit @ before,if insert a role digit # and $ if you want insert a service"); + firstStep.setTitle("Add Caller"); + firstStep.centerXOffset(); + firstStep.centerArrowOffset(); + + TourStep secondStep = new TourStep(Placement.TOP, "idAddTimeQuote"); + secondStep.setContent("Select an interval time for quote "); + secondStep.setTitle("Specify a Time "); + secondStep.centerXOffset(); + secondStep.centerArrowOffset(); + + TourStep thirdStep = new TourStep(Placement.TOP, "idAddTypeQuote"); + thirdStep.setContent("Select a type for quote "); + thirdStep.setTitle("Specify a Type"); + thirdStep.centerXOffset(); + thirdStep.centerArrowOffset(); + + TourStep fourthStep = new TourStep(Placement.TOP, "idAddValueQuote"); + fourthStep.setContent("Select a value for quote "); + fourthStep.setTitle("Specify a Quota"); + fourthStep.centerXOffset(); + fourthStep.centerArrowOffset(); + tourAddDialogQuote.addStep(firstStep); + tourAddDialogQuote.addStep(secondStep); + tourAddDialogQuote.addStep(thirdStep); + tourAddDialogQuote.addStep(fourthStep); + tourAddDialogQuote.startTour(); + + } + + /** + * Click all user + * @param e ClickEvent + */ + @UiHandler("b_caller_all_user") + void onClickAddAllUser(ClickEvent e) { + if (!b_caller_all_user.isToggled()){ + //selected checkbox all user + b_caller_all_user.setFocus(false); + b_caller_all_role.setFocus(false); + b_caller_all_role.setActive(false); + b_add_multiple_caller.setEnabled(false); + b_caller_except.setEnabled(true); + b_caller_except.setActive(false); + Caller allCallerUser= new Caller(TypeCaller.user,"ALL"); + ListWidget.addCaller(allCallerUser); + } + else{ + //not selected checkbox all user + b_caller_all_role.setEnabled(true); + b_add_multiple_caller.setEnabled(true); + b_caller_except.setEnabled(false); + ListWidget.clearList(); + } + } + /** + * Click all role + * @param e ClickEvent + */ + @UiHandler("b_caller_all_role") + void onClickAddAllRole(ClickEvent e) { + if (!b_caller_all_role.isToggled()){ + //selected checkbox all role + b_caller_all_role.setFocus(false); + b_caller_all_user.setFocus(false); + b_caller_all_user.setActive(false); + + b_add_multiple_caller.setEnabled(false); + b_caller_except.setEnabled(true); + b_caller_except.setActive(false); + + Caller allCallerRole= new Caller(TypeCaller.role,"ALL"); + ListWidget.addCaller(allCallerRole); + } + else{ + //not selected checkbox all role + b_caller_all_user.setEnabled(true); + b_add_multiple_caller.setEnabled(true); + b_caller_except.setEnabled(false); + ListWidget.clearList(); + + } + + } + + /** + * Click except + * @param e ClickEvent + */ + @UiHandler("b_caller_except") + void onClickExcept(ClickEvent e) { + //selected except + if (!b_caller_except.isToggled()) + ListWidget.enabledList(); + else{ + ListWidget.clearList(); + if (!b_caller_all_role.isToggled()){ + Caller allCallerUser= new Caller(TypeCaller.user,"ALL"); + ListWidget.addCaller(allCallerUser); + } + else if (!b_caller_all_user.isToggled()){ + Caller allCallerRole= new Caller(TypeCaller.role,"ALL"); + ListWidget.addCaller(allCallerRole); + } + } + } + + + /** + * Click open dialog for multiple caller + * @param e + */ + @UiHandler("b_add_multiple_caller") + void onClickAddCaller(ClickEvent e) { + + DialogAddMultipleCallerUserRole popup = new DialogAddMultipleCallerUserRole(); + popup.initList(ListWidget.callerSelected,this); + popup.show(); + + } + + /** + * Click close dialog + * @param e + */ + @UiHandler("b_exit_dialog_quota") + void onClickExitDialogQuote(ClickEvent e) { + this.hide(); + this.clear(); + } + + /** + * Click add policy + * @param e + */ + + @UiHandler("b_save_quota") + void onClickSaveQuote(ClickEvent e) { + + + if (ListWidget.callerSelected.isEmpty()){ + if (!error_display) + ErrorText("Insert Caller"); + error_display=true; + + } + else{ + error_display=false; + + //TimeInterval timeIntervalQuota=TimeInterval.valueOf(l_time_interval_quota.getSelectedValue()); + int indexI = l_time_interval_quota.getSelectedIndex(); + TimeInterval timeIntervalQuota =TimeInterval.valueOf(l_time_interval_quota.getValue(indexI)); + + //ManagerType typeQuota=ManagerType.valueOf(l_type_quota.getSelectedValue()); + int indexQ = l_type_quota.getSelectedIndex(); + ManagerType typeQuota =ManagerType.valueOf(l_type_quota.getValue(indexQ)); + + Double valueQuota=Double.parseDouble(t_value_quota.getText()); + if (listModifyQuote.isEmpty()){ + //quota to be added + //verify if a insert simple or exception + if (b_caller_except.isToggled()){ + GWT.log("AuthManager - Insert new quota with execption and type:"+typeQuota); + + Quote quote= new Quote(); + List callerList=new ArrayList(); + //order a list caller + if (ListWidget.callerSelected.size() > 0) { + Collections.sort(ListWidget.callerSelected, new Comparator() { + @Override + public int compare(final Caller o1, final Caller o2) { + return o1.getCallerName().compareTo(o2.getCallerName()); + } + } ); + } + for (Caller caller:ListWidget.callerSelected){ + // GWT.log("add"+caller.getCallerName()); + callerList.add(caller); + } + quote.setCaller(callerList); + quote.setManager(typeQuota); + quote.setTimeInterval(timeIntervalQuota); + quote.setQuota(valueQuota); + listAddQuote=new ArrayList(); + listAddQuote.add(quote); + AuthManagerController.eventBus.fireEvent(new AddQuoteEvent(listAddQuote, this)); + } + else{ + listAddQuote=new ArrayList(); + for (Caller caller:ListWidget.callerSelected){ + GWT.log("AuthManager - Insert new quote "+caller.getCallerName()+" and type:"+typeQuota); + Quote quote= new Quote(); + List callerList=new ArrayList(); + callerList.add(caller); + quote.setCaller(callerList); + quote.setManager(typeQuota); + quote.setTimeInterval(timeIntervalQuota); + quote.setQuota(valueQuota); + listAddQuote.add(quote); + } + AuthManagerController.eventBus.fireEvent(new AddQuoteEvent(listAddQuote, this)); + } + } + else{ + for (Quote modifyQuote:listModifyQuote){ + Long idQuote=modifyQuote.getIdQuote(); + GWT.log("AuthManager - Update quote:"+idQuote); + modifyQuote.setManager(typeQuota); + modifyQuote.setTimeInterval(timeIntervalQuota); + modifyQuote.setQuota(valueQuota); + AuthManagerController.eventBus.fireEvent(new UpdateQuoteEvent(modifyQuote,this)); + } + } + } + } + /** + * Array list for policy modified + * @param listPolicy + */ + + public void setModifyQuote(ArrayList listQuote) { + + String timeInterval = null; + String managerType = null; + String quota = null; + + this.listModifyQuote = listQuote; + for (Quote result :listQuote){ + + List callerList= result.getCaller(); + timeInterval = result.getTimeInterval().toString(); + managerType=result.getManager().toString(); + + //String target=result.getTarget(); + quota =result.getQuota().toString(); + + ListWidget.addListCaller(callerList,false); + GWT.log("AuthManager - Modify existing Quote identifier:"+result.getIdQuote()+" from caller:"+result.getCallerAsString()); + } + + //DISABLE ADD ANOTHER CALLER + b_caller_all_user.setEnabled(false); + b_caller_all_role.setEnabled(false); + b_add_multiple_caller.setEnabled(false); + + /* + for (TimeInterval time : TimeInterval.values()) { + l_time_interval_quota.addItem(time.toString()); + + } + */ + l_time_interval_quota.setSelectedValue(timeInterval); + + /* + for (ManagerType manager : ManagerType.values()) { + l_type_quota.addItem(manager.toString()); + } + */ + l_type_quota.setSelectedValue(managerType); + t_value_quota.setText(quota); + + } + /** + * Retrieve information from dialog multiple caller + * @param listCaller + */ + public void setListCaller(List listCaller){ + ListWidget.addListCaller(listCaller,true); + + } + /** + * Alert for msg error + * @param stringMsg + */ + public void ErrorText(String stringMsg) { + Alert msg = new Alert(); + msg.setAnimation(true); + msg.setText(stringMsg); + msg.addClosedHandler(new ClosedHandler() { + + @Override + public void onClosed(ClosedEvent event) { + // TODO Auto-generated method stub + error_display=false; + } + }); + r_loader_space.add(msg); + } + + /** + * Start Animation loading + */ + public void AppLoadingView() { + + b_exit_dialog_quota.setEnabled(false); + b_save_quota.setEnabled(false); + Image imgLoading = new Image(AuthResources.INSTANCE.loaderIcon()); + r_loader_space.clear(); + r_loader_space.add(imgLoading); + } + + /** + * Stop animation loading + */ + public void StopAppLoadingView() { + // TODO Auto-generated method stub + b_exit_dialog_quota.setEnabled(true); + b_save_quota.setEnabled(true); + clear(); + hide(); + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog.ui.xml new file mode 100644 index 0000000..52a7ef0 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog.ui.xml @@ -0,0 +1,123 @@ + + + + .panel { + background-color: #d9e2e8; + padding: 10px; + border-left: 2px solid #888; + border-right: 2px solid #888; + border-bottom: 2px solid #888; + /* + border-radius: 4px; + border: 2px solid #888; + width: 80%; + margin-left: 10%; + */ + } + + .panel_text { + background-color: #F3F7FB; + border-radius: 4px; + border: 1px solid #ccc; + padding: 10px; + } + + .r_loader_space { + /*margin-top:10px;*/ + text-align: center; + height: 30px; + margin-bottom: 10px; + margin-right: 20px; + } + + .row_element { + margin-top: 10px; + } + + .footer_dialog { + padding-right: 20px; + text-align: right; + } + + .button_dialog { + margin-left: 10px; + } + + + + + + + + + + Caller + + + + All Users + + + All Role + + + Except + + + + + + + + + Add + Caller + + + + + + + + + + Time + + + + + + + + Type + + + + + + + + + + Quota + + + + + + + + + + + + + Save + Close + + + + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid.java new file mode 100644 index 0000000..93c58b3 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid.java @@ -0,0 +1,406 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.client.widget.ActionCellClass; +import org.gcube.portlets.admin.authportletmanager.shared.Quote; + +import com.github.gwtbootstrap.client.ui.Label; +import com.google.gwt.cell.client.ActionCell.Delegate; +import com.google.gwt.cell.client.Cell; +import com.google.gwt.cell.client.Cell.Context; +import com.google.gwt.cell.client.CheckboxCell; +import com.google.gwt.cell.client.CompositeCell; +import com.google.gwt.cell.client.DateCell; +import com.google.gwt.cell.client.FieldUpdater; +import com.google.gwt.cell.client.HasCell; +import com.google.gwt.cell.client.NumberCell; +import com.google.gwt.cell.client.TextCell; +import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.i18n.client.DateTimeFormat; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.cellview.client.Column; +import com.google.gwt.user.cellview.client.ColumnSortEvent.ListHandler; +import com.google.gwt.user.cellview.client.DataGrid; +import com.google.gwt.user.cellview.client.SimplePager; +import com.google.gwt.user.cellview.client.SimplePager.TextLocation; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.view.client.DefaultSelectionEventManager; +import com.google.gwt.view.client.MultiSelectionModel; +import com.google.gwt.view.client.SelectionModel; + +/** + * Table for list quote (data grid) + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class QuoteDataGrid extends Composite { + + private static QuoteDataGridUiBinder uiBinder = GWT + .create(QuoteDataGridUiBinder.class); + + interface QuoteDataGridUiBinder extends UiBinder { + } + /** + * The main DataGrid. + */ + @UiField(provided = true) + DataGrid dataGrid; + + + @UiField(provided = true) + SimplePager pager; + + public QuoteDataGrid() { + onInitialize(); + initWidget(uiBinder.createAndBindUi(this)); + + } + + private Column callerColumn; + + + //private Column targetColumn; + private Column managerColumn; + private Column timeIntervalColumn; + + private Column quoteColumn; + + private Column dataInsertColumn; + + private Column dataUpdateColumn; + + + public static SelectionModel selectionModel; + + public static ArrayListselectedQuote= new ArrayList(); + + + + public void onInitialize() { + //resources = GWT.create(Resources.class); + //resources.styles().ensureInjected(); + + + dataGrid = new DataGrid(); + dataGrid.setWidth("100%"); + dataGrid.setHeight("400px"); + dataGrid.setAutoHeaderRefreshDisabled(true); + dataGrid.setAutoHeaderRefreshDisabled(true); + + + dataGrid.addStyleName("table_quote"); + dataGrid.getElement().setId("idGridQuote"); + //Set the message to display when the table is empty. + dataGrid.setEmptyTableWidget(new Label("No Quote Entry")); + + dataGrid.setSkipRowHoverStyleUpdate(false); + + + /* + // dataGrid.setHeaderBuilder(new CustomHeaderBuilder()); + // dataGrid.setFooterBuilder(new CustomFooterBuilder()); + */ + // Create a Pager to control the table. + SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class); + pager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true); + pager.setDisplay(dataGrid); + + + // Attach a column sort handler to the ListDataProvider to sort the list. + ListHandler sortHandler = + new ListHandler(QuoteDataProvider.get().getDataProvider().getList()); + dataGrid.addColumnSortHandler(sortHandler); + + //Add a selection model so we can select cells. + selectionModel = new MultiSelectionModel(); + dataGrid.setSelectionModel(selectionModel, DefaultSelectionEventManager + . createCheckboxManager()); + + + //Init Table Columns + initTableColumns(selectionModel, sortHandler); + + + + QuoteDataProvider.get().addDataDisplay(dataGrid); + dataGrid.setVisible(true); + + + + } + + /** + * Init the columns to the table. + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + private void initTableColumns(final SelectionModel selectionModel, + ListHandler sortHandler) { + // Checkbox column. This table will uses a checkbox column for selection. + Column checkColumn = + new Column(new CheckboxCell(true, false)) { + @Override + public Boolean getValue(Quote object) { + // Get the value from the selection model. + if (selectionModel.isSelected(object)){ + //if already exist no add + if (!selectedQuote.contains(object)) + selectedQuote.add(object); + + } + else + selectedQuote.remove(object); + + return selectionModel.isSelected(object); + } + + }; + + + dataGrid.addColumn(checkColumn, SafeHtmlUtils.fromSafeConstant("
")); + dataGrid.setColumnWidth(checkColumn, 5, Unit.PCT); + + // CallerColumn column this is caller for the service + callerColumn = new Column(new TextCell()) { + @Override + public String getValue(Quote object) { + String caller=object.getCallerAsString(); + return caller; + } + /** for override style on clik */ + @Override + public String getCellStyleNames(Context context, Quote object) { + + if (selectionModel.isSelected(object)) { + return "boldStyle"; + } + else + return null; + } + }; + callerColumn.setSortable(true); + sortHandler.setComparator(callerColumn, new Comparator() { + @Override + public int compare(Quote o1, Quote o2) { + return o1.getCallerAsString().compareTo(o2.getCallerAsString()); + } + }); + dataGrid.setColumnWidth(callerColumn, 20, Unit.PCT); + dataGrid.addColumn(callerColumn, new ResizableHeader("Caller", dataGrid, callerColumn)); + + + //timeIntervalColumn + timeIntervalColumn = new Column(new TextCell()) { + @Override + public String getValue(Quote object) { + String target=object.getTimeInterval().toString(); + return target; + } + /** for override style on clik */ + @Override + public String getCellStyleNames(Context context, Quote object) { + + if (selectionModel.isSelected(object)) { + return "boldStyle"; + } + else + return null; + } + }; + timeIntervalColumn.setSortable(true); + sortHandler.setComparator(timeIntervalColumn, new Comparator() { + @Override + public int compare(Quote o1, Quote o2) { + return o1.getTimeInterval().compareTo(o2.getTimeInterval()); + } + }); + dataGrid.setColumnWidth(timeIntervalColumn, 20, Unit.PCT); + dataGrid.addColumn(timeIntervalColumn, new ResizableHeader("Time", dataGrid, timeIntervalColumn)); + + + //managerColumn + managerColumn = new Column(new TextCell()) { + @Override + public String getValue(Quote object) { + String target=object.getManager().toString(); + return target; + } + /** for override style on clik */ + @Override + public String getCellStyleNames(Context context, Quote object) { + + if (selectionModel.isSelected(object)) { + return "boldStyle"; + } + else + return null; + } + }; + managerColumn.setSortable(true); + sortHandler.setComparator(managerColumn, new Comparator() { + @Override + public int compare(Quote o1, Quote o2) { + return o1.getManager().compareTo(o2.getManager()); + } + }); + dataGrid.setColumnWidth(managerColumn, 20, Unit.PCT); + dataGrid.addColumn(managerColumn, new ResizableHeader("Type", dataGrid, managerColumn)); + + + + //quoteColumn + quoteColumn = new Column(new NumberCell()) { + @Override + public Double getValue(Quote object) { + Double target=object.getQuota(); + + return target; + } + + }; + quoteColumn.setSortable(true); + sortHandler.setComparator(quoteColumn, new Comparator() { + @Override + public int compare(Quote o1, Quote o2) { + return o1.getQuota().compareTo(o2.getQuota()); + } + }); + dataGrid.setColumnWidth(quoteColumn, 20, Unit.PCT); + dataGrid.addColumn(quoteColumn, new ResizableHeader("Quota", dataGrid, quoteColumn)); + + dataInsertColumn = new Column(new DateCell(DateTimeFormat.getFormat("EEE, d MMM yyyy HH:mm:ss"))) { + @Override + public Date getValue(Quote object) { + return object.getDataInsert(); + } + }; + dataInsertColumn.setSortable(true); + + sortHandler.setComparator(dataInsertColumn, new Comparator() { + @Override + public int compare(Quote o1, Quote o2) { + if (o1 == o2) { + return 0; + } + if (o1.getDataInsert() != null) { + Date date1 =o1.getDataInsert(); + Date date2 =o2.getDataInsert(); + + return (o2.getDataInsert() != null) ? date1.compareTo(date2) : 1; + } + return -1; + } + }); + dataGrid.setColumnWidth(dataInsertColumn, 10, Unit.PCT); + + dataGrid.addColumn(dataInsertColumn, new ResizableHeader("Insert", dataGrid, dataInsertColumn)); + + + // dataUpdate. + + dataUpdateColumn = new Column(new DateCell(DateTimeFormat.getFormat("EEE, d MMM yyyy HH:mm:ss "))) { + + @Override + public Date getValue(Quote object) { + return object.getDataUpdate(); + } + }; + dataUpdateColumn.setSortable(true); + sortHandler.setComparator(dataUpdateColumn, new Comparator() { + @Override + public int compare(Quote o1, Quote o2) { + if (o1 == o2) { + return 0; + } + if (o1.getDataUpdate() != null) { + Date date1 =o1.getDataUpdate(); + Date date2 =o2.getDataUpdate(); + + return (o2.getDataUpdate() != null) ? date1.compareTo(date2) : 1; + } + return -1; + } }); + dataGrid.setColumnWidth(dataUpdateColumn, 10, Unit.PCT); + dataGrid.addColumn(dataUpdateColumn, new ResizableHeader("Last Update", dataGrid, dataUpdateColumn)); + + + + + + + //add Columns Actions whit button Edit + List> cells = new LinkedList>(); + cells.add(new ActionHasCell("Edit", new Delegate() { + @Override + public void execute(Quote quote) { + // EDIT CODE + + QuoteAddDialog dialogedit = new QuoteAddDialog(); + ArrayList listModifiedQuote= new ArrayList(); + listModifiedQuote.add(quote); + dialogedit.setModifyQuote(listModifiedQuote); + dialogedit.show(); + + } + })); + cells.add(new ActionHasCell("Delete", new Delegate() { + @Override + public void execute(Quote quote) { + // DELETE CODE + + + + ArrayList listDeleteQuotes =new ArrayList(); + listDeleteQuotes.add(quote); + QuoteDeleteDialog confirmDeleteDialog= new QuoteDeleteDialog(listDeleteQuotes); + confirmDeleteDialog.show(); + + } + })); + CompositeCell cell = new CompositeCell(cells); + Column actionColumn =new Column(cell) { + @Override + public Quote getValue(Quote object) { + return object; + } + }; + dataGrid.setColumnWidth(actionColumn, 15, Unit.PCT); + dataGrid.addColumn(actionColumn, "Actions"); + + } + + + private class ActionHasCell implements HasCell { + private ActionCellClass cell; + + public ActionHasCell(String text, Delegate delegate) { + cell = new ActionCellClass(text, delegate); + } + + @Override + public Cell getCell() { + return cell; + } + + @Override + public FieldUpdater getFieldUpdater() { + return null; + } + + @Override + public Quote getValue(Quote object) { + return object; + } + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid.ui.xml new file mode 100644 index 0000000..f2dc353 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid.ui.xml @@ -0,0 +1,34 @@ + + + + + .cellTable { + border-bottom: 1px solid #ccc; + text-align: left; + margin-bottom: 4px; + } + + + + + + + + + +
+ +
+ +
+ + + + + + +
+ +
\ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataProvider.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataProvider.java new file mode 100644 index 0000000..f0f264a --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataProvider.java @@ -0,0 +1,261 @@ +/* + * Copyright 2010 Google Inc. + * + * 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.gcube.portlets.admin.authportletmanager.client.pagelayout; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.shared.ConstantsSharing; +import org.gcube.portlets.admin.authportletmanager.shared.Quote; + +import com.google.gwt.view.client.HasData; +import com.google.gwt.view.client.ListDataProvider; + +/** + * The data source for contact information used in the sample. + */ +public class QuoteDataProvider { + + + + /** + * The singleton instance of the database. + */ + private static QuoteDataProvider instance; + + /** + * Get the singleton instance of the contact database. + * + * @return the singleton instance + */ + public static QuoteDataProvider get() { + if (instance == null) { + instance = new QuoteDataProvider(); + } + return instance; + } + + /** + * The provider that holds the list of contacts in the database. + */ + private ListDataProvider dataProvider = new ListDataProvider(); + + + /** + * The list string used for search + */ + private List initialSearch= new ArrayList();; + + + /** + * The list quote used for datagrid + */ + private List initialQuote; + + + + /** + * Construct a new QuoteDataProvider + */ + private QuoteDataProvider() { + } + + /** + * Add a display to the database. The current range of interest of the display + * will be populated with data. + * + * @param display a {@Link HasData}. + */ + public void addDataDisplay(HasData display) { + dataProvider.addDataDisplay(display); + } + + public ListDataProvider getDataProvider() { + return dataProvider; + } + + /** + * Load list quote provider + * @param listResultQuote + */ + public void loadQuoteProvider(List listResultQuote) { + initialQuote = listResultQuote; + //load list quote from servlet + List quote = dataProvider.getList(); + quote.removeAll(quote); + for (Quote quota : listResultQuote){ + quote.add(quota); + } + } + + /*** + * Reset a provider + */ + public void resetQuoteProvider(){ + List quote = dataProvider.getList(); + quote.clear(); + } + + /** + * Refresh all displays. + */ + public void refreshDisplays() { + dataProvider.refresh(); + } + + /** + * Method for remove quote from provider + * @param idquote + */ + public void removeQuoteProvider(Long idquote) { + // TODO Auto-generated method stub + List quote = dataProvider.getList(); + for (int i=0; i quote = dataProvider.getList(); + quote.add(quota); + initialQuote.add(quota); + dataProvider.setList(quote); + + } + /** + * Used for research a string filter + * @return + */ + public List getInitialSearch() { + return initialSearch; + } + + + + + /** + * Refresh list from a list search + */ + public void refreshlistFromSearch(String typeSearch){ + List quote = new ArrayList(); + Collections.copy(quote, initialQuote); + List toRemove = new ArrayList(quote.size()); + for (int index=0; index initialSearch) { + this.initialSearch = initialSearch; + } + + /** + * Used for add a string search + * @param search + */ + public void setAddStringSearch(String search){ + this.initialSearch.add(search); + } + /** + * Used for remove string search + * @param filter + */ + public void removeStringSearch(String filter) { + // TODO Auto-generated method stub + this.initialSearch.remove(filter); + + } + + /** + * Used for remove all string search + */ + public void removeAllStringSearch() { + // TODO Auto-generated method stub + this.initialSearch.clear(); + + } + + + + /** + * Used for insert a filter button + * @param typefilter + */ + public void setFilterList(String typefilter) { + + // TODO Auto-generated method stub + List quoteFilter = new ArrayList(); + if (typefilter.isEmpty()){ + Collections.copy(quoteFilter, initialQuote); + } + else{ + for (int index=0; indexalessandro.pieve@isti.cnr.it + * + */ + +public class QuoteDeleteDialog extends DialogBox { + + private static final Binder binder = GWT.create(Binder.class); + interface Binder extends UiBinder { + } + + private ArrayList deleteQuote; + //private Boolean error=false; + + + @UiField + Row r_loader_space; + + @UiField + Button b_confirm_delete; + + @UiField + Button b_confirm_exit; + + public QuoteDeleteDialog(ArrayList listDeleteQuote) { + + this.setWidget(binder.createAndBindUi(this)); + //this.setAutoHideEnabled(true); + this.setGlassEnabled(true); + this.setWidth("400px"); + this.setHeight("200px"); + this.setAnimationEnabled(isVisible()); + //this.center(); + this.setStyleName("modal_delete"); + this.setPopupPosition(((Window.getClientWidth() - 400) / 2), + ((Window.getClientHeight()-200)/2) ); + + + + this.deleteQuote=listDeleteQuote; + for (Quote quote:listDeleteQuote){ + String caller=quote.getCallerAsString(); + Label textquote =new Label(); + textquote.setText("Caller:"+caller); + r_loader_space.add(textquote); + } + + } + + /*** + * Handler on click for delete quote + * @param event + */ + @UiHandler("b_confirm_delete") + void onClickConfirmDeleteQuote(ClickEvent event) { + List listIdentifier=new ArrayList(); + for (Quote quote:deleteQuote){ + GWT.log("AuthManager - Delete Quote: "+quote.getIdQuote()); + listIdentifier.add(quote.getIdQuote()); + } + AuthManagerController.eventBus.fireEvent(new RemoveQuoteEvent(listIdentifier,this)); + } + + + /*** + * Handler on click for close dialog + * @param event + */ + @UiHandler("b_confirm_exit") + void onClickConfirmExitQuote(ClickEvent event) { + this.setAnimationEnabled(true); + this.hide(); + this.clear(); + } + + + /** + * Method for loader animation + */ + public void AppLoadingView() + { + Image imgLoading = new Image(AuthResources.INSTANCE.loaderIcon()); + b_confirm_delete.setEnabled(false); + b_confirm_exit.setEnabled(false); + r_loader_space.clear(); + r_loader_space.add(imgLoading); + } + public void StopAppLoadingView(){ + b_confirm_delete.setEnabled(true); + b_confirm_exit.setEnabled(true); + deleteQuote.clear(); + this.hide(); + this.clear(); + + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDeleteDialog.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDeleteDialog.ui.xml new file mode 100644 index 0000000..dbfe13f --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDeleteDialog.ui.xml @@ -0,0 +1,67 @@ + + + + .panel { + background-color: #d9e2e8; + border-radius: 4px; + border: 2px solid #888; + /*padding: 10px;*/ + width: 80%; + margin-left: 10%; + } + + .panel_text { + background-color: #F3F7FB; + border-radius: 4px; + border: 1px solid #ccc; + padding: 10px; + } + + .r_loader_space { + margin-top: 10px; + text-align: center; + /*height:30px;*/ + margin-bottom: 20px; + width: 100%; + margin-left: 0px; + } + + .footer_dialog { + text-align: right; + } + + .button_dialog { + margin-left: 10px; + } + + .label_summary { + text-align: center; + width: 100%; + margin-left: 5px; + } + + + + + + + + Confirm Delete ? + + + + + + + + NO + YES + + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/ResizableHeader.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/ResizableHeader.java new file mode 100644 index 0000000..c755332 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/ResizableHeader.java @@ -0,0 +1,170 @@ +package org.gcube.portlets.admin.authportletmanager.client.pagelayout; +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.cell.client.Cell; +import com.google.gwt.cell.client.Cell.Context; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.dom.client.Style.Cursor; +import com.google.gwt.dom.client.Style.Position; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; +import com.google.gwt.user.cellview.client.AbstractCellTable; +import com.google.gwt.user.cellview.client.Column; +import com.google.gwt.user.cellview.client.Header; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.Event.NativePreviewEvent; +import com.google.gwt.user.client.Event.NativePreviewHandler; + +/** + * ResizableHeader for DataGrid + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ + + +public class ResizableHeader extends Header { + + private Column column = null; + private AbstractCellTable cellTable; + private String title = ""; + private static final int width = 20; + + public ResizableHeader(String title, AbstractCellTable cellTable, Column column) { + super(new HeaderCell()); + this.title = title; + this.cellTable = cellTable; + this.column = column; + } + + @Override + public String getValue() { + return title; + } + + @Override + public void onBrowserEvent(Context context, Element target, NativeEvent event) { + String eventType = event.getType(); + if (eventType.equals("mousemove")) { + new ColumnResizeHelper(cellTable, column, target); + } else { + return; + } + } + + private void setCursor(Element element, Cursor cursor) { + element.getStyle().setCursor(cursor); + } + + class ColumnResizeHelper implements NativePreviewHandler { + + private HandlerRegistration handler; + private AbstractCellTable table; + private Column col; + private Element el; + private boolean mousedown; + private Element measuringElement; + + public ColumnResizeHelper(AbstractCellTable table, Column col, Element el) { + this.el = el; + this.table = table; + this.col = col; + handler = Event.addNativePreviewHandler(this); + } + + @SuppressWarnings("unchecked") + @Override + public void onPreviewNativeEvent(NativePreviewEvent event) { + NativeEvent nativeEvent = event.getNativeEvent(); + nativeEvent.preventDefault(); + nativeEvent.stopPropagation(); + + String eventType = nativeEvent.getType(); + int clientX = nativeEvent.getClientX(); + if (eventType.equals("mousemove") && mousedown) { + int absoluteLeft = el.getAbsoluteLeft(); + int newWidth = clientX - absoluteLeft; + newWidth = newWidth < width ? width : newWidth; + table.setColumnWidth(col, newWidth + "px"); + return; + } + + if (eventType.equals("mousemove") || eventType.equals("mousedown")) { + Element eventTargetEl = nativeEvent.getEventTarget().cast(); + int absoluteLeft = eventTargetEl.getAbsoluteLeft(); + int offsetWidth = eventTargetEl.getOffsetWidth(); + if (clientX > absoluteLeft + offsetWidth - width) { + if (eventType.equals("mousedown")) { + mousedown = true; + } else { + setCursor(el, Cursor.COL_RESIZE); + } + } else { + removeHandler(); + return; + } + } else if (eventType.equals("mouseup")) { + mousedown = false; + } else if (eventType.equals("mouseout") && !mousedown) { + removeHandler(); + return; + } + + if (eventType.equals("dblclick")) { + // Get column + nativeEvent.preventDefault(); + nativeEvent.stopPropagation(); + double max = 0; + startMeasuring(); + for (E t : table.getVisibleItems()) { + Object value = col.getValue(t); + SafeHtmlBuilder sb = new SafeHtmlBuilder(); + Cell cell = (Cell) col.getCell(); + cell.render(null, value, sb); + max = Math.max(measureText(sb.toSafeHtml().asString()), max); + } + finishMeasuring(); + table.setColumnWidth(col, (max + width) + "px"); + removeHandler(); + } + } + + private void removeHandler() { + handler.removeHandler(); + setCursor(el, Cursor.DEFAULT); + } + + private void startMeasuring() { + Document document = Document.get(); + measuringElement = document.createElement("div"); + measuringElement.getStyle().setPosition(Position.ABSOLUTE); + measuringElement.getStyle().setLeft(-1000, Unit.PX); + measuringElement.getStyle().setTop(-1000, Unit.PX); + document.getBody().appendChild(measuringElement); + } + + private double measureText(String text) { + measuringElement.setInnerHTML(text); + return measuringElement.getOffsetWidth(); + } + + private void finishMeasuring() { + Document.get().getBody().removeChild(measuringElement); + } + } + + static class HeaderCell extends AbstractCell { + public HeaderCell() { + super("click", "mousedown", "mousemove", "dblclick"); + } + + @Override + public void render(Context context, String value, SafeHtmlBuilder sb) { + sb.append(SafeHtmlUtils.fromString(value)); + } + } +}; \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/SidebarLayout.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/SidebarLayout.ui.xml new file mode 100644 index 0000000..36502bf --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/pagelayout/SidebarLayout.ui.xml @@ -0,0 +1,96 @@ + + + + .form_search { + margin-bottom: 0px; + min-height: 20px; + padding: 19px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.05); + border-bottom: 0px; + border-radius: 0px; + } + .select{ + padding-top: 20px; + padding-bottom: 20px; + height: 229px !important; + border-radius: 0px; + width: 291px; + border: 0px; + background: whitesmoke; + overflow-y: auto; + } + + + + + + All Users + All Roles + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/._accounting-manager_128.png b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/._accounting-manager_128.png new file mode 100644 index 0000000..82184a8 Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/._accounting-manager_128.png differ diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/Auth.css b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/Auth.css new file mode 100644 index 0000000..7b829b5 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/Auth.css @@ -0,0 +1,21 @@ +@CHARSET "UTF-8"; + +.ribbon { + line-height: 13px; + font-size: 11px; +} + +#mainPanelLayout_AuthPortlet { + background-color: #d9e2e8; + border-radius: 4px; +} + +.tab-content { + overflow: hidden; + border-right: 1px solid; + border-left: 1px solid #888; + /* padding-top: 10px; */ + padding: 10px 5px 5px 5px; + border-bottom: 1px solid #888; + border-radius: 4px; +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/AuthCSS.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/AuthCSS.java new file mode 100644 index 0000000..d4d4fc8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/AuthCSS.java @@ -0,0 +1,21 @@ +/** + * + */ +package org.gcube.portlets.admin.authportletmanager.client.resource; + +import com.google.gwt.resources.client.CssResource; + +/** + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public interface AuthCSS extends CssResource { + + @ClassName("ribbon") + public String getRibbon(); + + @ClassName("tab-content") + public String getTabContent(); +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/AuthResources.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/AuthResources.java new file mode 100644 index 0000000..9c07521 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/AuthResources.java @@ -0,0 +1,33 @@ +/** + * + */ +package org.gcube.portlets.admin.authportletmanager.client.resource; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.ImageResource; + +/** + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public interface AuthResources extends ClientBundle { + + public static final AuthResources INSTANCE = GWT + .create(AuthResources.class); + + @Source("Auth.css") + AuthCSS authCSS(); + + + + @Source("accounting-manager_128.png") + ImageResource accountingManager128(); + + @Source("loaderHorizontal.gif") + ImageResource loaderIcon(); + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/accounting-manager_128.png b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/accounting-manager_128.png new file mode 100644 index 0000000..b08c968 Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/accounting-manager_128.png differ diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/loaderCircle.gif b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/loaderCircle.gif new file mode 100644 index 0000000..7546107 Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/loaderCircle.gif differ diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/loaderHorizontal.gif b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/loaderHorizontal.gif new file mode 100644 index 0000000..2fd2286 Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/resource/loaderHorizontal.gif differ diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/rpc/AuthManagerService.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/rpc/AuthManagerService.java new file mode 100644 index 0000000..f9f547f --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/rpc/AuthManagerService.java @@ -0,0 +1,74 @@ +package org.gcube.portlets.admin.authportletmanager.client.rpc; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.gcube.portlets.admin.authportletmanager.shared.Caller; +import org.gcube.portlets.admin.authportletmanager.shared.PolicyAuth; +import org.gcube.portlets.admin.authportletmanager.shared.Quote; +import org.gcube.portlets.admin.authportletmanager.shared.exceptions.ServiceException; + +import com.google.gwt.user.client.rpc.RemoteService; +import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; + + + +/** + * + * @author "Alessandro Pieve " alessandro + * .pieve@isti.cnr.it + * + */ +@RemoteServiceRelativePath("authm") +public interface AuthManagerService extends RemoteService { + /** + * Get informations on the current user + * + * @return + * @throws AccountingManagerServiceException + */ + + // Service for load Policy + public ArrayList loadListPolicy() throws ServiceException; + + // Service for load Caller + public ArrayList loadListCaller() throws ServiceException; + + //Service for load Service + public Map> loadListService()throws ServiceException; + + //Service for load Access + public ArrayList loadListAccess() throws ServiceException; + + + // Service for delete multiple policy + List deletePolicies(Listidentifier) throws ServiceException; + + + public void addPolicies(Listidentifier) throws ServiceException; + + //Service for update policy + public void updatePolicy(PolicyAuth policies) throws ServiceException; + + + + /* + * SECTION QUOTA + */ + //Service for load list quota + public ArrayList loadListQuota() throws ServiceException; + // Service for delete multiple policy + public List deleteQuote(Listidentifier) throws ServiceException; + + //Service for add multiple quote + public List addQuote(List quote) throws ServiceException; + //Service for update quote + public Quote updateQuote(Quote quote) throws ServiceException; + + + + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/rpc/AuthManagerServiceAsync.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/rpc/AuthManagerServiceAsync.java new file mode 100644 index 0000000..b6a3831 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/rpc/AuthManagerServiceAsync.java @@ -0,0 +1,72 @@ +/** + * + */ +package org.gcube.portlets.admin.authportletmanager.client.rpc; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.gcube.portlets.admin.authportletmanager.shared.Caller; +import org.gcube.portlets.admin.authportletmanager.shared.PolicyAuth; +import org.gcube.portlets.admin.authportletmanager.shared.Quote; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.rpc.AsyncCallback; + +/** + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public interface AuthManagerServiceAsync { + + public static AuthManagerServiceAsync INSTANCE = (AuthManagerServiceAsync) GWT + .create(AuthManagerService.class); + + //load init value + void loadListPolicy(AsyncCallback> callback); + + void loadListCaller(AsyncCallback> callback); + + void loadListService(AsyncCallback>> asyncCallback); + + void loadListAccess(AsyncCallback> callback); + + + /* + void deletePolicy(Long identifier, + AsyncCallback callback); + */ + /* + void addPolicy(String caller, String typeCaller, String serviceClass, + String serviceName, String serviceId, String access, + AsyncCallback callback); + */ + + void updatePolicy(PolicyAuth policies, AsyncCallback callback); + + void addPolicies(List identifier,AsyncCallback asyncCallback); + + void deletePolicies(List identifier,AsyncCallback> callback); + + /* + * SECTION QUOTA + */ + + void loadListQuota(AsyncCallback> asyncCallback); + + void deleteQuote(List identifier, AsyncCallback> callback); + + void addQuote(List quote, AsyncCallback> callback); + + void updateQuote(Quote quote, AsyncCallback asyncCallback); + + + + + + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/ActionCellClass.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/ActionCellClass.java new file mode 100644 index 0000000..a1ba0fb --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/ActionCellClass.java @@ -0,0 +1,81 @@ +package org.gcube.portlets.admin.authportletmanager.client.widget; + +import static com.google.gwt.dom.client.BrowserEvents.CLICK; +import static com.google.gwt.dom.client.BrowserEvents.KEYDOWN; + +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.cell.client.ActionCell.Delegate; +import com.google.gwt.cell.client.ValueUpdater; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.EventTarget; +import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; + + + + + +public class ActionCellClass extends AbstractCell { + + + private final SafeHtml html; + private final Delegate delegate; + + /** + * Construct a new {@link ActionCellClass}. + * + * @param message the message to display on the button + * @param delegate the delegate that will handle events + */ + public ActionCellClass(SafeHtml message, Delegate delegate) { + super(CLICK, KEYDOWN); + this.delegate = delegate; + String cssClass=""; + if (message.asString().toLowerCase().equals("delete")) + cssClass="btn-danger"; + this.html = new SafeHtmlBuilder().appendHtmlConstant( + "").toSafeHtml(); + } + + /** + * Construct a new {@link ActionCellClass} with a text String that does not contain + * HTML markup. + * + * @param text the text to display on the button + * @param delegate the delegate that will handle events + */ + public ActionCellClass(String text, Delegate delegate) { + this(SafeHtmlUtils.fromString(text), delegate); + } + + + @Override + public void onBrowserEvent(Context context, Element parent, C value, + NativeEvent event, ValueUpdater valueUpdater) { + super.onBrowserEvent(context, parent, value, event, valueUpdater); + if (CLICK.equals(event.getType())) { + EventTarget eventTarget = event.getEventTarget(); + if (!Element.is(eventTarget)) { + return; + } + if (parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))) { + // Ignore clicks that occur outside of the main element. + onEnterKeyDown(context, parent, value, event, valueUpdater); + } + } + } + + @Override + public void render(Context context, C value, SafeHtmlBuilder sb) { + sb.append(html); + } + + @Override + protected void onEnterKeyDown(Context context, Element parent, C value, + NativeEvent event, ValueUpdater valueUpdater) { + delegate.execute(value); + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/BulletList.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/BulletList.java new file mode 100644 index 0000000..c2d0ea5 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/BulletList.java @@ -0,0 +1,23 @@ +package org.gcube.portlets.admin.authportletmanager.client.widget; + +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.ui.ComplexPanel; +import com.google.gwt.user.client.ui.Widget; + +public class BulletList extends ComplexPanel { + @SuppressWarnings("deprecation") + public BulletList() { + setElement(DOM.createElement("UL")); + } + + @SuppressWarnings("deprecation") + public void add(Widget w) { + super.add(w, getElement()); + } + + @SuppressWarnings("deprecation") + public void insert(Widget w, int beforeIndex) { + super.insert(w, getElement(), beforeIndex, true); + } +} + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget.java new file mode 100644 index 0000000..52887ae --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget.java @@ -0,0 +1,380 @@ +package org.gcube.portlets.admin.authportletmanager.client.widget; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.client.Entities; +import org.gcube.portlets.admin.authportletmanager.shared.Caller; +import org.gcube.portlets.admin.authportletmanager.shared.ConstantsSharing; + +import com.github.gwtbootstrap.client.ui.TextBox; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.KeyCodes; +import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.event.dom.client.KeyDownHandler; +import com.google.gwt.event.logical.shared.SelectionEvent; +import com.google.gwt.event.logical.shared.SelectionHandler; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.MultiWordSuggestOracle; +import com.google.gwt.user.client.ui.SuggestBox; +import com.google.gwt.user.client.ui.SuggestOracle; + +public class InputListWidget extends Composite { + + List itemsSelected = new ArrayList(); + public List callerSelected = new ArrayList(); + + public final BulletList list; + /* + * Disable list for entry caller + */ + public void disableList(){ + list.clear(); + } + /* + * Clear list for caller and insert a input box + */ + public void clearList(){ + list.clear(); + callerSelected.clear(); + enabledList(); + } + public InputListWidget() { + FlowPanel panel = new FlowPanel(); + initWidget(panel); + //final BulletList list = new BulletList(); + list = new BulletList(); + list.setStyleName("input-list-caller"); + final ListItem item = new ListItem(); + item.setStyleName("token-input-input-token-facebook"); + final TextBox itemBox = new TextBox(); + itemBox.getElement().setAttribute("style", "outline-color: -moz-use-text-color; outline-style: none; outline-width: medium;"); + final SuggestBox box = new SuggestBox(getSuggestions(), itemBox); + box.setLimit(200); + box.getElement().setId("suggestion_box"); + item.add(box); + list.add(item); + + // this needs to be on the itemBox rather than box, or backspace will get executed twice + itemBox.addKeyDownHandler(new KeyDownHandler() { + public void onKeyDown(KeyDownEvent event) { + if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { + GWT.log("key enter"); + + // only allow manual entries with @ signs (assumed email addresses) + //if (itemBox.getValue().contains("@")) + // deselectItem(itemBox, list); + } + // handle backspace + if (event.getNativeKeyCode() == KeyCodes.KEY_BACKSPACE) { + if ("".equals(itemBox.getValue().trim())) { + ListItem li = (ListItem) list.getWidget(list.getWidgetCount() - 2); + Paragraph p = (Paragraph) li.getWidget(0); + if (itemsSelected.contains(p.getText())) { + itemsSelected.remove(p.getText()); + GWT.log("Removing selected item '" + p.getText() + "'", null); + GWT.log("Remaining: " + itemsSelected, null); + } + list.remove(li); + itemBox.setFocus(true); + } + } + } + }); + + + + //box.addSelectionHandler(new SelectionHandler() { + box.addSelectionHandler(new SelectionHandler() { + + public void onSelection(SelectionEvent selectionEvent) { + GWT.log("addSelectionHandler on Selection"); + addItem(itemBox); + } + }); + + panel.add(list); + + panel.getElement().setAttribute("onclick", "document.getElementById('suggestion_box').focus()"); + box.setFocus(true); + + } + + + + /** + * addCaller + * add a caller to list + * @param caller + * @param list + */ + public void addCaller(Caller caller){ + GWT.log("aggiunto caller"+caller.getCallerName()); + String prefix=null; + switch (caller.getTypecaller()) { + case user: + prefix=ConstantsSharing.TagCaller; + break; + case role: + prefix=ConstantsSharing.TagRole; + break; + case service: + prefix=ConstantsSharing.TagService; + break; + + default: + prefix =""; + break; + } + + if (!callerSelected.contains(caller)) + callerSelected.add(caller); + //reset error + //r_loader_space.clear(); + final TextBox itemBox=new TextBox(); + + itemBox.setValue(prefix+caller.getCallerName()); + itemBox.getElement().setAttribute("style", "outline-color: -moz-use-text-color; outline-style: none; outline-width: medium;"); + final ListItem displayItem = new ListItem(); + displayItem.setStyleName("token-input-token-facebook"); + Paragraph p = new Paragraph(itemBox.getValue()); + + Span span = new Span("x"); + span.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + removeListItem(displayItem, list); + } + }); + displayItem.add(p); + + // displayItem.add(span); + list.clear(); + list.insert(displayItem, 0); + + + + } + + + /** + * + * @param listCaller list caller for add + * @param list Caller used + * @param append Boolean used for add an input text + */ + + public void addListCaller(List listCaller, boolean append){ + if(!append){ + list.clear(); + } + for (Caller caller:listCaller){ + String prefix=null; + switch (caller.getTypecaller()) { + case user: + prefix=ConstantsSharing.TagCaller; + break; + case role: + prefix=ConstantsSharing.TagRole; + break; + case service: + prefix=ConstantsSharing.TagService; + break; + default: + prefix =""; + break; + } + //reset error + final TextBox itemBox=new TextBox(); + itemBox.setValue(prefix+caller.getCallerName()); + itemBox.getElement().setAttribute("style", "outline-color: -moz-use-text-color; outline-style: none; outline-width: medium;"); + final ListItem displayItem = new ListItem(); + displayItem.setStyleName("token-input-token-facebook"); + Paragraph p = new Paragraph(itemBox.getValue()); + + Span span = new Span("x"); + span.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + removeListItem(displayItem, list); + } + }); + if (!callerSelected.contains(caller)){ + callerSelected.add(caller); + displayItem.add(p); + if(append) + displayItem.add(span); + list.insert(displayItem, 0); + } + } + } + + + + /* + * Replace a list of caller selected + */ + public void replaceListCaller(List listCaller){ + //remove all caller + clearList(); + for (Caller caller:listCaller){ + String prefix=null; + switch (caller.getTypecaller()) { + case user: + prefix=ConstantsSharing.TagCaller; + break; + case role: + prefix=ConstantsSharing.TagRole; + break; + case service: + prefix=ConstantsSharing.TagService; + break; + default: + prefix =""; + break; + } + final TextBox itemBox=new TextBox(); + itemBox.setValue(prefix+caller.getCallerName()); + itemBox.getElement().setAttribute("style", "outline-color: -moz-use-text-color; outline-style: none; outline-width: medium;"); + final ListItem displayItem = new ListItem(); + displayItem.setStyleName("token-input-token-facebook"); + Paragraph p = new Paragraph(itemBox.getValue()); + + Span span = new Span("x"); + span.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + removeListItem(displayItem, list); + } + }); + + callerSelected.add(caller); + displayItem.add(p); + displayItem.add(span); + list.insert(displayItem, 0); + + } + } + + private void addItem(final TextBox itemBox) { + + if (itemBox.getValue() != null && !"".equals(itemBox.getValue().trim())) { + + String callerName= itemBox.getValue().substring(1); + if (!callerSelected.contains(Entities.getCallerByName(callerName))){ + final ListItem displayItem = new ListItem(); + displayItem.setStyleName("token-input-token-facebook"); + Paragraph p = new Paragraph(itemBox.getValue()); + displayItem.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + displayItem.addStyleName("token-input-selected-token-facebook"); + } + }); + Span span = new Span("x"); + span.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + removeListItem(displayItem, list); + } + }); + displayItem.add(p); + displayItem.add(span); + // hold the original value of the item selected and add at arraylist + itemsSelected.add(itemBox.getValue()); + //String callerName= itemBox.getValue().substring(1); + GWT.log("AuthManager - Insert Caller: " + callerName, null); + callerSelected.add(Entities.getCallerByName(callerName)); + list.insert(displayItem, list.getWidgetCount() - 1); + } + itemBox.setValue(""); + itemBox.setFocus(true); + + } + } + /** + * + * @param displayItem + * @param list + */ + private void removeListItem(ListItem displayItem, BulletList list) { + GWT.log("Removing: " + displayItem.getWidget(0).getElement().getInnerHTML(), null); + itemsSelected.remove(displayItem.getWidget(0).getElement().getInnerHTML()); + String callerName=displayItem.getWidget(0).getElement().getInnerHTML().substring(1); + callerSelected.remove(Entities.getCallerByName(callerName)); + list.remove(displayItem); + } + /** + * + * Enabling list caller and add an input box for input + */ + public void enabledList() { + // TODO Auto-generated method stub + list.setStyleName("input-list-caller"); + final ListItem item = new ListItem(); + item.setStyleName("token-input-input-token-facebook"); + final TextBox itemBox = new TextBox(); + itemBox.getElement().setAttribute("style", "outline-color: -moz-use-text-color; outline-style: none; outline-width: medium;"); + final SuggestBox box = new SuggestBox(getSuggestions(), itemBox); + box.getElement().setId("suggestion_box"); + item.add(box); + list.add(item); + + // this needs to be on the itemBox rather than box, or backspace will get executed twice + itemBox.addKeyDownHandler(new KeyDownHandler() { + public void onKeyDown(KeyDownEvent event) { + if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { + // only allow manual entries with @ signs (assumed email addresses) + //if (itemBox.getValue().contains("@")) + // deselectItem(itemBox, list); + } + // handle backspace + if (event.getNativeKeyCode() == KeyCodes.KEY_BACKSPACE) { + if ("".equals(itemBox.getValue().trim())) { + ListItem li = (ListItem) list.getWidget(list.getWidgetCount() - 2); + Paragraph p = (Paragraph) li.getWidget(0); + if (itemsSelected.contains(p.getText())) { + itemsSelected.remove(p.getText()); + GWT.log("Removing selected item '" + p.getText() + "'", null); + GWT.log("Remaining: " + itemsSelected, null); + } + list.remove(li); + itemBox.setFocus(true); + } + } + } + }); + box.addSelectionHandler(new SelectionHandler() { + public void onSelection(SelectionEvent selectionEvent) { + addItem(itemBox); + } + }); + } + // + private MultiWordSuggestOracle getSuggestions() { + MultiWordSuggestOracle oracle = new MultiWordSuggestOracle(".:"); + + String prefix=null; + for (Caller suggestion:Entities.getCallers()){ + switch (suggestion.getTypecaller()) { + case user: + prefix=ConstantsSharing.TagCaller; + break; + case role: + prefix=ConstantsSharing.TagRole; + break; + case service: + prefix=ConstantsSharing.TagService; + break; + default: + prefix =""; + break; + } + oracle.add(prefix+suggestion.getCallerName()); + + } + return oracle; + } + + + + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/ListItem.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/ListItem.java new file mode 100644 index 0000000..0916311 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/ListItem.java @@ -0,0 +1,69 @@ +package org.gcube.portlets.admin.authportletmanager.client.widget; + +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.BlurEvent; +import com.google.gwt.event.dom.client.BlurHandler; +import com.google.gwt.event.dom.client.HasClickHandlers; +import com.google.gwt.event.dom.client.HasBlurHandlers; +import com.google.gwt.event.dom.client.HasKeyDownHandlers; +import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.event.dom.client.KeyDownHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.ui.ComplexPanel; +import com.google.gwt.user.client.ui.HasHTML; +import com.google.gwt.user.client.ui.HasText; +import com.google.gwt.user.client.ui.Widget; + +public class ListItem extends ComplexPanel implements HasText, HasHTML, HasClickHandlers, HasKeyDownHandlers, HasBlurHandlers { + HandlerRegistration clickHandler; + + public ListItem() { + setElement(DOM.createElement("LI")); + } + + public void add(Widget w) { + super.add(w, getElement()); + } + + public void insert(Widget w, int beforeIndex) { + super.insert(w, getElement(), beforeIndex, true); + } + + @SuppressWarnings("deprecation") + public String getText() { + return DOM.getInnerText(getElement()); + } + + @SuppressWarnings("deprecation") + public void setText(String text) { + DOM.setInnerText(getElement(), (text == null) ? "" : text); + } + + @SuppressWarnings("deprecation") + public void setId(String id) { + DOM.setElementAttribute(getElement(), "id", id); + } + + @SuppressWarnings("deprecation") + public String getHTML() { + return DOM.getInnerHTML(getElement()); + } + + public void setHTML(String html) { + DOM.setInnerHTML(getElement(), (html == null) ? "" : html); + } + + public HandlerRegistration addClickHandler(ClickHandler handler) { + return addDomHandler(handler, ClickEvent.getType()); + } + + public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) { + return addDomHandler(handler, KeyDownEvent.getType()); + } + + public HandlerRegistration addBlurHandler(BlurHandler handler) { + return addDomHandler(handler, BlurEvent.getType()); + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/MultipleTextBox.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/MultipleTextBox.java new file mode 100644 index 0000000..b631936 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/MultipleTextBox.java @@ -0,0 +1,76 @@ +package org.gcube.portlets.admin.authportletmanager.client.widget; + +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.InputElement; +import com.google.gwt.dom.client.Element; +import com.google.gwt.user.client.ui.TextBoxBase; + +public class MultipleTextBox extends TextBoxBase { + /** + * Creates an empty multiple text box. + */ + public MultipleTextBox() { + this(Document.get().createTextInputElement(), "gwt-TextBox"); + } + + /** + * This constructor may be used by subclasses to explicitly use an existing + * element. This element must be an element whose type is + * 'text'. + * + * @param element the element to be used + */ + protected MultipleTextBox(Element element) { + super(element); + assert InputElement.as(element).getType().equalsIgnoreCase("text"); + } + + MultipleTextBox(Element element, String styleName) { + super(element); + if (styleName != null) { + setStyleName(styleName); + } + } + + @Override + public String getText() { + String wholeString = super.getText(); + String lastString = wholeString; + if (wholeString != null && !wholeString.trim().equals("")) { + int lastComma = wholeString.trim().lastIndexOf(","); + if (lastComma > 0) { + lastString = wholeString.trim().substring(lastComma + 1); + } + } + return lastString; + } + + @Override + public void setText(String text) { + String wholeString = super.getText(); + if (text != null && text.equals("")) { + super.setText(text); + } else { + // Clean last text, to replace with new value, for example, if new + // text is v.zaprudnevd@gmail.com: + // "manuel@we-r-you.com, v" need to be replaced with: + // "manuel@we-r-you.com, v.zaprudnevd@gmail.com, " + if (wholeString != null) { + int lastComma = wholeString.trim().lastIndexOf(","); + if (lastComma > 0) { + wholeString = wholeString.trim().substring(0, lastComma); + } else { + wholeString = ""; + } + + if (!wholeString.trim().endsWith(",") + && !wholeString.trim().equals("")) { + wholeString = wholeString + ", "; + } + + wholeString = wholeString + text + ", "; + super.setText(wholeString); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/Paragraph.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/Paragraph.java new file mode 100644 index 0000000..e1002f6 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/Paragraph.java @@ -0,0 +1,29 @@ +package org.gcube.portlets.admin.authportletmanager.client.widget; + + +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.ui.HasText; +import com.google.gwt.user.client.ui.Widget; + +/** + * This widget is to create

elements in a page. + */ +public class Paragraph extends Widget implements HasText { + + public Paragraph() { + setElement(DOM.createElement("p")); + } + + public Paragraph(String text) { + this(); + setText(text); + } + + public String getText() { + return getElement().getInnerText(); + } + + public void setText(String text) { + getElement().setInnerText(text); + } +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/PickList.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/PickList.java new file mode 100644 index 0000000..148a1be --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/PickList.java @@ -0,0 +1,355 @@ +package org.gcube.portlets.admin.authportletmanager.client.widget; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.SortedMap; +import java.util.TreeMap; + +import org.gcube.portlets.admin.authportletmanager.shared.Caller; +import org.gcube.portlets.admin.authportletmanager.shared.Caller.TypeCaller; + +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.Label; +import com.github.gwtbootstrap.client.ui.ListBox; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.VerticalPanel; + +/** + * + * Usage Example:
+ *

  • + * Put following code into your ui.xml file:
    + * + * + *

    + * + *
  • + * Populate your picklist using {@link NameValuePairImpl}:
    + * + * List nameValuePairs = new ArrayList();
    + * nameValuePairs.add(new NameValuePairImpl("item 1", "item_1"));
    + * nameValuePairs.add(new NameValuePairImpl("item 2", "item_2"));
    + * nameValuePairs.add(new NameValuePairImpl("item 3", "item_3"));
    + * pickList.setLeftListElements(nameValuePairs); + * pickList.setRightListElements(nameValuePairs); + *

    + *
+ * + * Screenshot: + *
+ * + *
+ * + * User: Halil Karakose + * Date: 10/18/13 + * Time: 3:53 PM + * + * @see NameValuePairImpl + */ +public class PickList extends Composite { + private static PickListUiBinder ourUiBinder = GWT.create(PickListUiBinder.class); + + + public ListBox leftList= new ListBox(true); + + public ListBox rightList= new ListBox(true); + @UiField + VerticalPanel leftPanel; + @UiField + VerticalPanel rightPanel; + @UiField + VerticalPanel buttonPanel; + + @UiField + Button toRightButton; + @UiField + Button toLeftButton; + @UiField + Button allToRightButton; + @UiField + Button allToLeftButton; + + @UiField + Label rightPanelLabel; + @UiField + Label leftPanelLabel; + + public PickList() { + initWidget(ourUiBinder.createAndBindUi(this)); + + + leftList.setVisibleItemCount(10); + leftList.setSize(12); + leftList.setStyleName("width_select"); + leftPanel.add(leftList); + + + + rightList.setVisibleItemCount(10); + rightList.setSize(12); + rightList.setStyleName("width_select"); + rightPanel.add(rightList); + + //set padding between cells to make the component look better + this.getElement().setAttribute("cellpadding", "1"); + leftPanel.getElement().setAttribute("cellpadding", "1"); + buttonPanel.getElement().setAttribute("cellpadding", "2"); + rightPanel.getElement().setAttribute("cellpadding", "1"); + + setLeftListElements(new ArrayList()); + setRightListElements(new ArrayList()); + } + + public void clearLeftList() { + clear(leftList); + } + + public void clearRightList() { + clear(rightList); + } + + private void clear(ListBox listBox) { + listBox.clear(); + } + + public void addElementToLeftList(Caller element) { + addElement(leftList, element); + } + + public void addElementToRightList(Caller element) { + addElement(rightList, element); + } + + private void addElement(ListBox listBox, Caller element) { + listBox.addItem(element.getCallerName(), element.getTypecaller().toString()); + } + + public List getLeftListElements() { + return getListBoxElements(leftList); + } + + public void setLeftListElements(List elements) { + + ArrayList callerFilter = new ArrayList(); + List callerSelected=new ArrayList(); + callerSelected=getRightListElements(); + //verify a list elements not present in right list + for (Caller element : elements) { + boolean trovato=false; + for (Caller elementRight : callerSelected) { + if (elementRight.equals(element)){ + trovato=true; + break; + } + + + } + if (!trovato) + callerFilter.add(element); + } + populate(callerFilter, leftList); + } + + public List getRightListElements() { + return getListBoxElements(rightList); + } + + public void setRightListElements(List elements) { + populate(elements, rightList); + } + + public String getSelectedLabelText() { + return rightPanelLabel.getText(); + } + + public void setSelectedLabelText(String selectedLabelText) { + rightPanelLabel.setText(selectedLabelText); + } + + public String getCandidateLabelText() { + return leftPanelLabel.getText(); + } + + public void setCandidateLabelText(String selectedLabelText) { + leftPanelLabel.setText(selectedLabelText); + } + + private List getListBoxElements(ListBox listBox) { + ArrayList callerPairs = new ArrayList(); + for (int i = 0; i < listBox.getItemCount(); i++) { + TypeCaller typecaller =TypeCaller.valueOf(listBox.getValue(i)); + Caller nameValuePair = new Caller(typecaller,listBox.getItemText(i) ); + callerPairs.add(nameValuePair); + } + return callerPairs; + } + /** + * Popolate a leftlist element and sorted by Caller Type + * @param leftListElements + * @param listBox + */ + private void populate(List leftListElements, ListBox listBox) { + SortedMap fromTempList=new TreeMap(); + for (Caller element : leftListElements) { + fromTempList.put(element.getCallerName(), element.getTypecaller().toString()); + } + // order by type checklist from + listBox.clear(); + @SuppressWarnings("unchecked") + Map mapFrom = sortByValues(fromTempList); + for (Entry entry : mapFrom.entrySet()) + listBox.addItem(entry.getKey(),entry.getValue()); + } + + @UiHandler("toRightButton") + public void toRightButtonClicked(ClickEvent event) { + moveItem(leftList, rightList, event); + if (leftList.getItemCount() == 0) { + toRightButton.setEnabled(false); + allToRightButton.setEnabled(false); + } + + if (rightList.getItemCount() >= 1) { // !>= 1! is preferred instead of !== 1! to handle multiple selections + toLeftButton.setEnabled(true); + allToLeftButton.setEnabled(true); + } + } + + @UiHandler("allToRightButton") + public void allToRightButtonClicked(ClickEvent event) { + moveAllItem(leftList, rightList, event); + allToRightButton.setEnabled(false); + toRightButton.setEnabled(false); + + if (rightList.getItemCount() >= 1) { // !>= 1! is preferred instead of !== 1! to handle multiple selections + allToLeftButton.setEnabled(true); + toLeftButton.setEnabled(true); + + } + } + + @UiHandler("toLeftButton") + public void toLeftButtonClicked(ClickEvent event) { + moveItem(rightList, leftList, event); + if (rightList.getItemCount() == 0) { + toLeftButton.setEnabled(false); + allToLeftButton.setEnabled(false); + } + + if (leftList.getItemCount() >= 1) { // !>= 1! is preferred instead of !== 1! to handle multiple selections + toRightButton.setEnabled(true); + allToRightButton.setEnabled(true); + } + } + + @UiHandler("allToLeftButton") + public void allToLeftButtonClicked(ClickEvent event) { + moveAllItem(rightList,leftList , event); + allToLeftButton.setEnabled(false); + toLeftButton.setEnabled(false); + + if (leftList.getItemCount() >= 1) { // !>= 1! is preferred instead of !== 1! to handle multiple selections + allToRightButton.setEnabled(true); + toRightButton.setEnabled(true); + } + } + + private void moveItem(ListBox from, ListBox to, ClickEvent event) { + String value=from.getValue(); + if (value == null) { + Window.alert("Select an item first!"); + return; + } + SortedMap fromTempList=new TreeMap(); + SortedMap toTempList=new TreeMap(); + for(int itemIndex=0; itemIndex mapFrom = sortByValues(fromTempList); + for (Entry entry : mapFrom.entrySet()) + from.addItem(entry.getKey(),entry.getValue()); + + //order by type checklist to + for(int itemIndex=0; itemIndex mapTo = sortByValues(toTempList); + for (Entry entry : mapTo.entrySet()) + to.addItem(entry.getKey(),entry.getValue()); + + } + + + + + + + private void moveAllItem(ListBox from, ListBox to, ClickEvent event) { + SortedMap toTempList=new TreeMap(); + for(int itemIndex=0; itemIndex mapTo = sortByValues(toTempList); + for (Entry entry : mapTo.entrySet()) + to.addItem(entry.getKey(),entry.getValue()); + from.clear(); + + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private static HashMap sortByValues(SortedMap tempList) { + List list = new LinkedList(tempList.entrySet()); + // Defined Custom Comparator here + Collections.sort(list, new Comparator() { + public int compare(Object o1, Object o2) { + return ((Comparable) ((Map.Entry) (o1)).getValue()) + .compareTo(((Map.Entry) (o2)).getValue()); + } + }); + HashMap sortedHashMap = new LinkedHashMap(); + for (Iterator it = list.iterator(); it.hasNext();) { + Map.Entry entry = (Map.Entry) it.next(); + sortedHashMap.put(entry.getKey(), entry.getValue()); + } + return sortedHashMap; + } + + interface PickListUiBinder extends UiBinder { + } + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/PickList.ui.xml b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/PickList.ui.xml new file mode 100644 index 0000000..4a737db --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/PickList.ui.xml @@ -0,0 +1,30 @@ + + + + .width_select { + width: 200px !important; + } + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/Span.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/Span.java new file mode 100644 index 0000000..59a2f44 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/Span.java @@ -0,0 +1,20 @@ +package org.gcube.portlets.admin.authportletmanager.client.widget; + +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HasText; + +/** + * This widget is to create elements in a page. + */ +public class Span extends HTML implements HasText { + + public Span() { + super(DOM.createElement("span")); + } + + public Span(String text) { + this(); + setText(text); + } +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/WindowBox.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/WindowBox.java new file mode 100644 index 0000000..1601ec3 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/client/widget/WindowBox.java @@ -0,0 +1,762 @@ +/* + * Copyright 2010 Traction Software, Inc. + * Copyright 2010 clazzes.org Project + * + * Based on TractionDialogBox by Traction Software, Inc. Renamed to WindowBox and + * added resize support by clazzes.org + * + * 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.gcube.portlets.admin.authportletmanager.client.widget; + +import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.dom.client.Style.Cursor; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.DomEvent; +import com.google.gwt.event.dom.client.MouseDownEvent; +import com.google.gwt.event.dom.client.MouseMoveEvent; +import com.google.gwt.event.dom.client.MouseUpEvent; +import com.google.gwt.event.logical.shared.HasOpenHandlers; +import com.google.gwt.event.logical.shared.OpenEvent; +import com.google.gwt.event.logical.shared.OpenHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.Event.NativePreviewEvent; +import com.google.gwt.user.client.ui.Anchor; +import com.google.gwt.user.client.ui.DialogBox; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Grid; +import com.google.gwt.user.client.ui.PopupPanel; +import com.google.gwt.user.client.ui.RootPanel; +import com.google.gwt.user.client.ui.Widget; + +/** + * Extension of the standard GWT DialogBox to provide a more "window"-like functionality. By default, the WindowBox + * has two control-buttons in the top right corner of the header, which allow the box to be reduced to it's header + * ("minimize") or the whole box to be hidden ("close"). The visiblity of these controls can be toggled seperately + * with {@link #setMinimizeIconVisible(boolean)} and {@link #setCloseIconVisible(boolean)} respectively. + *

+ * The WindowBox relies on the css settings of {@link DialogBox} for styling of the border and header. It also uses + * the following classes to style the additional elements: + * + *
+ *  .gwt-extras-WindowBox
+ *      the box itself
+ *  .gwt-extras-WindowBox .gwt-extras-dialog-container
+ *      the div holding the contents of the box
+ *  .gwt-extras-WindowBox .gwt-extras-dialog-controls
+ *      the div holding the window-controls - PLEASE NOTE: on the DOM-tree, this div is located inside the center-center
+ *      cell of the windowBox table, not in the top-center (where the header-text is). Therefore the css has a negative
+ *      top-value to position the controls on the header 
+ *  .gwt-extras-WindowBox .gwt-extras-dialog-controls a.gwt-extras-dialog-close
+ *  .gwt-extras-WindowBox .gwt-extras-dialog-controls a.gwt-extras-dialog-close:hover
+ *  .gwt-extras-WindowBox .gwt-extras-dialog-controls a.gwt-extras-dialog-minimize
+ *  .gwt-extras-WindowBox .gwt-extras-dialog-controls a.gwt-extras-dialog-minimize:hover
+ *  .gwt-extras-WindowBox .gwt-extras-dialog-controls a.gwt-extras-dialog-maximize
+ *  .gwt-extras-WindowBox .gwt-extras-dialog-controls a.gwt-extras-dialog-maximize:hover
+ *      the controls in the header. A background image sprite is used to create the mouseover- and clicking-effects.
+ *      When the window is minimized, the style-name of the corresponding control changes to "gwt-extras-dialog-maximize"
+ *      and vice-versa   
+ * 
+ */ +public class WindowBox extends DialogBox + implements HasOpenHandlers { + + private static final int MIN_WIDTH = 600; + private static final int MIN_HEIGHT = 300; + + private FlowPanel container; + //private FlowPanel content; + private FlowPanel controls; + private Anchor close; + private Anchor minimize; + + private int dragX; + private int dragY; + + private int minWidth = MIN_WIDTH; + private int minHeight = MIN_HEIGHT; + + private int dragMode; + + private boolean resizable; + + private boolean minimized; + + /** + * Static helper method to change the cursor for a given element when resizing is enabled. + * + * @param dm The code describing the position of the element in question + * @param element The {@link com.google.gwt.dom.client.Element} to set the cursor on + */ + protected static void updateCursor(int dm, com.google.gwt.dom.client.Element element) { + Cursor cursor; + + switch (dm) { + case 0: + cursor = Cursor.NW_RESIZE; + break; + + case 1: + cursor = Cursor.N_RESIZE; + break; + + case 2: + cursor = Cursor.NE_RESIZE; + break; + + case 3: + cursor = Cursor.W_RESIZE; + break; + + case 5: + cursor = Cursor.E_RESIZE; + break; + + case 6: + cursor = Cursor.SW_RESIZE; + break; + + case 7: + cursor = Cursor.S_RESIZE; + break; + + case 8: + cursor = Cursor.SE_RESIZE; + break; + + default: + cursor = Cursor.AUTO; + break; + } + + element.getStyle().setCursor(cursor); + } + + /** + * Creates a DialogBoxEx which is permanent (no auto-hide), non-modal, has a "minimize"- and "close"-button + * in the top-right corner and is not resizeable. The dialog box should not be shown until a child widget has been + * added using {@link #add(com.google.gwt.user.client.ui.IsWidget)}. + *

+ * This is the equivalent for calling DialogBoxEx(false, false, true, false). + * + * @see WindowBox#DialogBoxEx(boolean, boolean, boolean, boolean) + */ + public WindowBox() { + this(false, false, true, true, false); + } + + /** + * Creates a DialogBoxEx which is permanent, non-modal, has a "minimize"- and "close"-button and is optionally resizeable. + * The dialog box should not be shown until a child widget has been added using + * {@link #setWidget(Widget)}. + * + * @see WindowBox#DialogBoxEx(boolean, boolean, boolean, boolean) + * + * @param resizeable true to allow resizing by dragging the borders + */ + public WindowBox(boolean resizeable) { + this(false, false, true, true, resizeable); + } + + /** + * Creates a DialogBoxEx which is permanent and nonmodal, optionally resizeable and/or has a "minimize"- and + * "close"-button. The dialog box should not be shown until a child widget has been added using + * {@link #setWidget(Widget)}. + * + * @see WindowBox#DialogBoxEx(boolean, boolean, boolean, boolean) + * + * @param resizeable true to allow resizing by dragging the borders + * @param showCloseIcon true to show "close"-icon in the top right corner of the header + */ + public WindowBox(boolean showCloseIcon, boolean resizeable) { + this(false, false, true, showCloseIcon, resizeable); + } + + /** + * Creates a DialogBoxEx which is permanent and nonmodal, optionally resizeable and/or has a "minimize"- and + * "close"-button. The dialog box should not be shown until a child widget has been added using + * {@link #setWidget(Widget)}. + * + * @see WindowBox#DialogBoxEx(boolean, boolean, boolean, boolean) + * + * @param showMinimizeIcon true to show "minimize"-icon int the top right corner of the header + * @param resizeable true to allow resizing by dragging the borders + * @param showCloseIcon true to show "close"-icon in the top right corner of the header + */ + public WindowBox(boolean showMinimizeIcon, boolean showCloseIcon, boolean resizeable) { + this(false, false, showMinimizeIcon, showCloseIcon, resizeable); + } + + /** + * Creates a DialogBoxEx which is permanent, optionally modal, resizeable and/or has a "minimize"- and + * "close"-button. The dialog box should not be shown until a child widget has been added using + * {@link #setWidget(Widget)}. + * + * @param modal true if keyboard and mouse events for widgets not contained by the dialog + * should be ignored + * @param showMinimizeIcon true to show "minimize"-icon int the top right corner of the header + * @param resizeable true to allow resizing by dragging the borders + * @param showCloseIcon true to show "close"-icon in the top right corner of the header + */ + public WindowBox(boolean modal, boolean showMinimizeIcon, boolean showCloseIcon, boolean resizeable) { + this(false, modal, showMinimizeIcon, showCloseIcon, resizeable); + } + + /** + * Creates an empty DialogBoxEx with all configuration options. + * The dialog box should not be shown until a child widget has been added using + * {@link #setWidget(Widget)}. + * + * @see DialogBox#DialogBox() + * @see DialogBox#DialogBox(boolean) + * @see DialogBox#DialogBox(boolean, boolean) + * @see DialogBox#DialogBox(boolean, boolean, boolean) + * + * @param autoHide true if the dialog should be automatically hidden when the user clicks outside of it + * @param modal true if keyboard and mouse events for widgets not contained by the dialog + * should be ignored + * @param showMinimizeIcon true to show "minimize"-icon int the top right corner of the header + * @param showCloseIcon true to show "close"-icon in the top right corner of the header + * @param resizeable true to allow resizing by dragging the borders + */ + public WindowBox(boolean autoHide, boolean modal, boolean showMinimizeIcon, boolean showCloseIcon, boolean resizeable) { + super(autoHide, modal); + + this.setStyleName("gwt-extras-WindowBox", true); + + this.container = new FlowPanel(); + this.container.addStyleName("gwt-extras-dialog-container"); + + //this.content = new FlowPanel(); + + this.close = new Anchor(); + this.close.setStyleName("gwt-extras-dialog-close"); + this.close.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent event) { + onCloseClick(event); + } + }); + setCloseIconVisible(showCloseIcon); + + this.minimize = new Anchor(); + this.minimize.setStyleName("gwt-extras-dialog-minimize"); + this.minimize.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent event) { + onMinimizeClick(event); + } + }); + setMinimizeIconVisible(showMinimizeIcon); + + Grid ctrlGrid = new Grid(1, 2); + ctrlGrid.setWidget(0, 0, this.minimize); + ctrlGrid.setWidget(0, 1, this.close); + + this.controls = new FlowPanel(); + this.controls.setStyleName("gwt-extras-dialog-controls"); + this.controls.add(ctrlGrid); + this.dragMode = -1; + + this.resizable = resizeable; + } + + /** + * Sets the cursor to indicate resizability for a specified "drag-mode" (i.e. how the box is being resized) + * on the dialog box. The position is described by an integer, as follows: + * + *
+     *  0-- --1-- --2
+     *  |           |
+     *  
+     *  |           |
+     *  3    -1     5
+     *  |           |
+     *  
+     *  |           |
+     *  6-- --7-- --8
+     * 
+ * + * passing -1 resets the cursor to the default. + * @param dragMode + */ + protected void updateCursor(int dragMode) { + if (this.resizable) { + updateCursor(dragMode,this.getElement()); + + com.google.gwt.dom.client.Element top = this.getCellElement(0,1); + updateCursor(dragMode,top); + + top = Element.as(top.getFirstChild()); + if (top != null) + updateCursor(dragMode,top); + } + } + + /** + * Returns whether the dialog box is mouse-resizeable + * + * @return true if the user can resize the dialog with the mouse + */ + public boolean isResizable() { + return this.resizable; + } + + /** + * Set the dialog box to be resizeable by the user + * + * @param resizable true if the user can resize the dialog with the mouse + */ + public void setResizable(boolean resizable) { + this.resizable = resizable; + } + + /* + * (non-Javadoc) + * @see com.google.gwt.user.client.ui.DialogBox#onBrowserEvent(com.google.gwt.user.client.Event) + */ + @Override + public void onBrowserEvent(Event event) { + + // If we're not yet dragging, only trigger mouse events if the event occurs + // in the caption wrapper + if (this.resizable) { + switch (event.getTypeInt()) { + case Event.ONMOUSEDOWN: + case Event.ONMOUSEUP: + case Event.ONMOUSEMOVE: + case Event.ONMOUSEOVER: + case Event.ONMOUSEOUT: + + if (this.dragMode >= 0 || calcDragMode(event.getClientX(),event.getClientY()) >= 0) { + // paste'n'copy from Widget.onBrowserEvent + switch (DOM.eventGetType(event)) { + case Event.ONMOUSEOVER: + // Only fire the mouse over event if it's coming from outside this + // widget. + case Event.ONMOUSEOUT: + // Only fire the mouse out event if it's leaving this + // widget. + Element related = event.getRelatedEventTarget().cast(); + if (related != null && getElement().isOrHasChild(related)) { + return; + } + break; + } + DomEvent.fireNativeEvent(event, this, this.getElement()); + return; + } + if (this.dragMode<0) + this.updateCursor(this.dragMode); + } + } + + super.onBrowserEvent(event); + } + + /** + * + * @param resize + * @param clientX + * @return + */ + private int getRelX(com.google.gwt.dom.client.Element resize, int clientX) { + return clientX - resize.getAbsoluteLeft() + + resize.getScrollLeft() + + resize.getOwnerDocument().getScrollLeft(); + } + + /** + * + * @param resize + * @param clientY + * @return + */ + private int getRelY(com.google.gwt.dom.client.Element resize, int clientY) { + return clientY - resize.getAbsoluteTop() + + resize.getScrollTop() + + resize.getOwnerDocument().getScrollTop(); + } + + /** + * Calculates the position of the mouse relative to the dialog box, and returns the corresponding "drag-mode" + * integer, which describes which area of the box is being resized. + * + * @param clientX The x-coordinate of the mouse in screen pixels + * @param clientY The y-coordinate of the mouse in screen pixels + * @return A value in range [-1..8] describing the position of the mouse (see {@link #updateCursor(int)} for more + * information) + */ + protected int calcDragMode(int clientX, int clientY) { + com.google.gwt.dom.client.Element resize = this.getCellElement(2,2).getParentElement(); + int xr = this.getRelX(resize, clientX); + int yr = this.getRelY(resize, clientY); + + int w = resize.getClientWidth(); + int h = resize.getClientHeight(); + + if ((xr >= 0 && xr < w && yr >= -5 && yr < h) + || (yr >= 0 && yr < h && xr >= -5 && xr < w)) + return 8; + + resize = this.getCellElement(2,0).getParentElement(); + xr = this.getRelX(resize, clientX); + yr = this.getRelY(resize, clientY); + + if ((xr >= 0 && xr < w && yr >= -5 && yr < h) + || (yr >= 0 && yr < h && xr >= 0 && xr < w+5)) + return 6; + + resize = this.getCellElement(0,2).getParentElement(); + xr = this.getRelX(resize, clientX); + yr = this.getRelY(resize, clientY); + + if ((xr >= 0 && xr < w && yr >= 0 && yr < h+5) + || (yr >= 0 && yr < h && xr >= -5 && xr < w)) + return 2; + + resize = this.getCellElement(0,0).getParentElement(); + xr = this.getRelX(resize, clientX); + yr = this.getRelY(resize, clientY); + + if ((xr >= 0 && xr < w && yr >= 0 && yr < h+5) + || (yr >= 0 && yr < h && xr >= 0 && xr < w+5)) + return 0; + + resize = this.getCellElement(0,1).getParentElement(); + xr = this.getRelX(resize, clientX); + yr = this.getRelY(resize, clientY); + + if (yr >= 0 && yr < h) + return 1; + + resize = this.getCellElement(1,0).getParentElement(); + xr = this.getRelX(resize, clientX); + yr = this.getRelY(resize, clientY); + + if (xr >= 0 && xr < w) + return 3; + + resize = this.getCellElement(2,1).getParentElement(); + xr = this.getRelX(resize, clientX); + yr = this.getRelY(resize, clientY); + + if (yr >= 0 && yr < h) + return 7; + + resize = this.getCellElement(1,2).getParentElement(); + xr = this.getRelX(resize, clientX); + yr = this.getRelY(resize, clientY); + + if (xr >= 0 && xr < w) + return 5; + + return -1; + } + + /** + * Convenience method to set the height, width and position of the given widget + * + * @param panel + * @param dx + * @param dy + */ + protected void dragResizeWidget(PopupPanel panel, int dx, int dy) { + int x = this.getPopupLeft(); + int y = this.getPopupTop(); + + Widget widget = panel.getWidget(); + + // left + right + if ((this.dragMode % 3) != 1) { + int w = widget.getOffsetWidth(); + + // left edge -> move left + if ((this.dragMode % 3) == 0) { + x += dx; + w -= dx; + } else { + w += dx; + } + + w = w < this.minWidth ? this.minWidth : w; + + widget.setWidth(w + "px"); + } + + // up + down + if ((this.dragMode / 3) != 1) { + int h = widget.getOffsetHeight(); + + // up = dy is negative + if ((this.dragMode / 3) == 0) { + y += dy; + h -= dy; + } else { + h += dy; + } + + h = h < this.minHeight ? this.minHeight : h; + + widget.setHeight(h + "px"); + } + + if (this.dragMode / 3 == 0 || this.dragMode % 3 == 0) + panel.setPopupPosition(x, y); + } + + /* (non-Javadoc) + * @see com.google.gwt.user.client.ui.DialogBox#beginDragging(com.google.gwt.event.dom.client.MouseDownEvent) + */ + @Override + protected void beginDragging(MouseDownEvent event) { + int dm = -1; + + if (this.resizable && !this.minimized) + dm = this.calcDragMode(event.getClientX(),event.getClientY()); + + if (this.resizable && dm >= 0) { + this.dragMode = dm; + + DOM.setCapture(getElement()); + + this.dragX = event.getClientX(); + this.dragY = event.getClientY(); + + updateCursor(dm,RootPanel.get().getElement()); + + } else { + super.beginDragging(event); + } + } + + /* (non-Javadoc) + * @see com.google.gwt.user.client.ui.DialogBox#continueDragging(com.google.gwt.event.dom.client.MouseMoveEvent) + */ + @Override + protected void continueDragging(MouseMoveEvent event) { + if (this.dragMode >= 0 && this.resizable) { + this.updateCursor(this.dragMode); + + int dx = event.getClientX() - this.dragX; + int dy = event.getClientY() - this.dragY; + + this.dragX = event.getClientX(); + this.dragY = event.getClientY(); + + dragResizeWidget(this, dx, dy); + } else { + // this updates the cursor when dragging is NOT activated + if (!this.minimized) { + int dm = calcDragMode(event.getClientX(),event.getClientY()); + this.updateCursor(dm); + } + super.continueDragging(event); + } + } + + /* + * (non-Javadoc) + * @see com.google.gwt.user.client.ui.DialogBox#onPreviewNativeEvent(com.google.gwt.user.client.Event.NativePreviewEvent) + */ + @Override + protected void onPreviewNativeEvent(NativePreviewEvent event) { + if (this.resizable) { + // We need to preventDefault() on mouseDown events (outside of the + // DialogBox content) to keep text from being selected when it + // is dragged. + NativeEvent nativeEvent = event.getNativeEvent(); + + if (!event.isCanceled() + && (event.getTypeInt() == Event.ONMOUSEDOWN) + && calcDragMode(nativeEvent.getClientX(),nativeEvent.getClientY()) >= 0) { + nativeEvent.preventDefault(); + } + } + + super.onPreviewNativeEvent(event); + } + + /* (non-Javadoc) + * @see com.google.gwt.user.client.ui.DialogBox#endDragging(com.google.gwt.event.dom.client.MouseUpEvent) + */ + @Override + protected void endDragging(MouseUpEvent event) { + if (this.dragMode >= 0 && this.resizable) { + DOM.releaseCapture(getElement()); + + this.dragX = event.getClientX() - this.dragX; + this.dragY = event.getClientY() - this.dragY; + + this.dragMode = -1; + this.updateCursor(this.dragMode); + RootPanel.get().getElement().getStyle().setCursor(Cursor.AUTO); + } + else { + super.endDragging(event); + } + } + + /* + * (non-Javadoc) + * @see com.google.gwt.user.client.ui.DecoratedPopupPanel#setWidget(com.google.gwt.user.client.ui.Widget) + */ + @Override + public void setWidget(Widget widget) { + if (this.container.getWidgetCount() == 0) { + // setup + this.container.add(this.controls); + //this.container.add(this.content); + super.setWidget(this.container); + } else { + // remove the old one + this.container.remove(1); + } + this.container.add(widget); + + // add the new widget +// this.content.add(widget); + } + + /* (non-Javadoc) + * @see com.google.gwt.user.client.ui.DecoratedPopupPanel#getWidget() + */ + @Override + public Widget getWidget() { + if (this.container.getWidgetCount() > 1) + return this.container.getWidget(1); + else + return null; + } + + /* (non-Javadoc) + * @see com.google.gwt.user.client.ui.DecoratedPopupPanel#remove(com.google.gwt.user.client.ui.Widget) + */ + @Override + public boolean remove(Widget w) { + return this.container.remove(w); + } + + /** + * Set whether the "close"-button should appear in the top right corner of the header + * + * @param visible true if a "close"-button should be shown + */ + public void setCloseIconVisible(boolean visible) { + this.close.setVisible(visible); + } + + /** + * Set whether the "minimize"-button should appear in the top right corner of the header + * + * @param visible true if a "minimize"-button should be shown + */ + public void setMinimizeIconVisible(boolean visible) { + this.minimize.setVisible(visible); + } + + /** + * Returns the FlowPanel that contains the controls. More controls can be + * added directly to this. + */ + public FlowPanel getControlPanel() { + return this.controls; + } + + /** + * Called when the close icon is clicked. The default implementation hides the dialog box. + * + * @param event The {@link ClickEvent} to handle + */ + protected void onCloseClick(ClickEvent event) { + hide(); + } + + /** + * Called when the minimize icon is clicked. The default implementation hides the container of the dialog box. + * + * @param event The {@link ClickEvent} to handle + */ + protected void onMinimizeClick(ClickEvent event) { + Widget widget = getWidget(); + + if (widget == null) + return; + + boolean visible = widget.isVisible(); + + int offsetWidth = widget.getOffsetWidth(); + + widget.setVisible(!visible); + this.minimized = visible; + + if (visible) { + this.container.setWidth(offsetWidth + "px"); + this.minimize.setStyleName("gwt-extras-dialog-maximize"); + } else { + this.container.setWidth(null); + this.minimize.setStyleName("gwt-extras-dialog-minimize"); + } + } + + /* + * (non-Javadoc) + * @see com.google.gwt.event.logical.shared.HasOpenHandlers#addOpenHandler(com.google.gwt.event.logical.shared.OpenHandler) + */ + @Override + public HandlerRegistration addOpenHandler(OpenHandler handler) { + return addHandler(handler, OpenEvent.getType()); + } + + /* + * (non-Javadoc) + * @see com.google.gwt.user.client.ui.DialogBox#show() + */ + @Override + public void show() { + boolean fireOpen = !isShowing(); + super.show(); + if (fireOpen) { + OpenEvent.fire(this, this); + } + } + + /** + * Sets the minimum width to which this widget can be resized by the user, if resizing is enabled. If the value + * is invalid, it is reset to {@link #MIN_WIDTH} + * + * @param minWidth A positive int value + */ + public void setMinWidth(int minWidth) { + if (minWidth < 1) + minWidth = MIN_WIDTH; + + this.minWidth = minWidth; + } + + /** + * Sets the minimum height to which this widget can be resized by the user, if resizing is enabled. If the value + * is invalid, it is reset to {@link #MIN_WIDTH} + * + * @param minHeight A positive int value + */ + public void setMinHeight(int minHeight) { + if (minHeight < 1) + minHeight = MIN_HEIGHT; + + this.minHeight = minHeight; + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/server/AuthServiceImpl.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/AuthServiceImpl.java new file mode 100644 index 0000000..7552f73 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/AuthServiceImpl.java @@ -0,0 +1,605 @@ +package org.gcube.portlets.admin.authportletmanager.server; + +import static org.gcube.common.authorization.client.Constants.authorizationService; +import static org.gcube.resources.discovery.icclient.ICFactory.clientFor; +import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpSession; + +import org.gcube.application.framework.core.session.ASLSession; +import org.gcube.common.authorization.library.policies.Action; +import org.gcube.common.authorization.library.policies.Policy; +import org.gcube.common.authorization.library.policies.PolicyType; +import org.gcube.common.authorization.library.policies.Roles; +import org.gcube.common.authorization.library.policies.Service2ServicePolicy; +import org.gcube.common.authorization.library.policies.ServiceAccess; +import org.gcube.common.authorization.library.policies.Services; +import org.gcube.common.authorization.library.policies.User2ServicePolicy; +import org.gcube.common.authorization.library.policies.Users; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.resources.gcore.GCoreEndpoint; +import org.gcube.portlets.admin.authportletmanager.client.rpc.AuthManagerService; +import org.gcube.portlets.admin.authportletmanager.shared.Access; +import org.gcube.portlets.admin.authportletmanager.shared.Caller; +import org.gcube.portlets.admin.authportletmanager.shared.Caller.TypeCaller; +import org.gcube.portlets.admin.authportletmanager.shared.ConstantsSharing; +import org.gcube.portlets.admin.authportletmanager.shared.PolicyAuth; +import org.gcube.portlets.admin.authportletmanager.shared.Quote; +import org.gcube.portlets.admin.authportletmanager.shared.Service; +import org.gcube.portlets.admin.authportletmanager.shared.exceptions.ServiceException; +import org.gcube.portlets.admin.authportletmanager.shared.exceptions.TypeCallerException; +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.SimpleQuery; +import org.gcube.vomanagement.usermanagement.GroupManager; +import org.gcube.vomanagement.usermanagement.RoleManager; +import org.gcube.vomanagement.usermanagement.UserManager; +import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager; +import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager; +import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager; +import org.gcube.vomanagement.usermanagement.model.GCubeRole; +import org.gcube.vomanagement.usermanagement.model.GCubeUser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gwt.user.server.rpc.RemoteServiceServlet; + +/** + * AuthServiceImpl + * + * Support service request + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +@SuppressWarnings({ "serial", "deprecation" }) +public class AuthServiceImpl extends RemoteServiceServlet +implements AuthManagerService { + + private static Logger logger = LoggerFactory + .getLogger(AuthServiceImpl.class); + + /** + * {@inheritDoc} + */ + @Override + public void init() throws ServletException { + super.init(); + System.out.println("Fix JAXP: jdk.xml.entityExpansionLimit=0"); + System.setProperty("jdk.xml.entityExpansionLimit", "0"); + + System.out.println("initializing AccountingManager"); + + } + + /** + * Load all list policy + */ + @Override + public ArrayList loadListPolicy() throws ServiceException { + try { + HttpSession session = this.getThreadLocalRequest().getSession(); + ArrayList policyList =new ArrayList(); + ASLSession aslSession = SessionUtil.getASLSession(session); + String scope=aslSession.getScope(); + String token =aslSession.getSecurityToken(); + if (ConstantsSharing.DEBUG_MODE) { + token=ConstantsSharing.DEBUG_TOKEN; + scope="/gcube/devNext"; + logger.debug("load list policy in scope:"+scope); + } + SecurityTokenProvider.instance.set(token); + List policies = authorizationService().getPolicies(scope); + if (policies!=null){ + logger.info("Load List Policy Find:"+policies.size()); + if (policies.size()>0){ + for (Policy policy : policies){ + logger.debug("retrieve a policy service object"+policy); + ArrayList callers =new ArrayList(); + boolean excludeCallers=false; + if (policy.getPolicyType()==PolicyType.USER){ + //retrive caller type user or role + List callerExcludes=((User2ServicePolicy) policy).getEntity().getExcludes(); + TypeCaller typecaller=TypeCaller.valueOf(((User2ServicePolicy) policy).getEntity().getType().toString().toLowerCase()); + logger.debug("callerExcludes:"+callerExcludes +" and size:"+callerExcludes.size()); + if (callerExcludes.size()>0){ + //condition with all excepiton + for (String callerExclude: callerExcludes){ + callers.add(new Caller(typecaller,callerExclude)); + } + excludeCallers=true; + } + else{ + String callerIdentifier=((User2ServicePolicy) policy).getEntity().getIdentifier(); + + if (callerIdentifier==null) + callerIdentifier=ConstantsSharing.Star; + callers.add(new Caller(typecaller,callerIdentifier)); + } + } + else{ + //retrive caller type service + logger.debug("retrieve a policy service"+policy.toString()); + String callerIdentifier=((Service2ServicePolicy) policy).getClient().getService().getName().toString()+ + ":"+((Service2ServicePolicy) policy).getClient().getService().getServiceClass()+ + ":"+((Service2ServicePolicy) policy).getClient().getService().getServiceId().toString(); + TypeCaller typecaller=TypeCaller.valueOf("service"); + callers.add(new Caller(typecaller,callerIdentifier)); + } + Long idpolicy=policy.getId(); + String serviceClass="ALL"; + String serviceName="ALL"; + String serviceId="ALL"; + if (!policy.getServiceAccess().toString().equals("*")){ + serviceClass=policy.getServiceAccess().getServiceClass(); + serviceName=policy.getServiceAccess().getName(); + serviceId=policy.getServiceAccess().getServiceId(); + } + Service service =new Service(serviceClass,serviceName,serviceId); + Calendar creationTime = policy.getCreationTime(); + + Date dataInsert = creationTime.getTime(); + Calendar lastUpdateTime = policy.getLastUpdateTime(); + Date dataUpdate = lastUpdateTime.getTime(); + Access access= Access.valueOf(policy.getMode().toString()); + PolicyAuth policyAuth =new PolicyAuth(idpolicy,callers,excludeCallers,service,access,dataInsert,dataUpdate); + logger.debug("traduce into a policy auth:"+policyAuth.toString()); + policyList.add(policyAuth); + } + } + } + return policyList; + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw e; + } catch (Throwable e) { + logger.error("loadListPolicy error: " + e.getLocalizedMessage(), e); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage()); + } + } + + /** + * Load all caller + */ + @Override + public ArrayList loadListCaller() throws ServiceException { + try { + HttpSession session = this.getThreadLocalRequest().getSession(); + @SuppressWarnings("unused") + ASLSession aslSession = SessionUtil.getASLSession(session); + ArrayList callers =new ArrayList(); + String token =aslSession.getSecurityToken(); + if (ConstantsSharing.DEBUG_MODE) { + token=ConstantsSharing.DEBUG_TOKEN; + } + SecurityTokenProvider.instance.set(token); + if (ConstantsSharing.MOCK_UP) { + logger.trace("List Caller on debug mode"); + callers.add(new Caller(TypeCaller.role,"administrator")); + callers.add(new Caller(TypeCaller.user,"lucio.lelii")); + callers.add(new Caller(TypeCaller.role,"agent")); + callers.add(new Caller(TypeCaller.user,"luca.frosini")); + callers.add(new Caller(TypeCaller.user,"giancarlo.panichi")); + callers.add(new Caller(TypeCaller.role,"user")); + callers.add(new Caller(TypeCaller.service,"InformationSystem:IC:all")); + callers.add(new Caller(TypeCaller.service,"InformationSystem:IRegisrty:all")); + } + else{ + RoleManager roleManager = new LiferayRoleManager(); + UserManager userManager = new LiferayUserManager(); + String scope=SessionUtil.getASLSession(session).getScope(); + GroupManager groupManager= new LiferayGroupManager(); + Long groupId= groupManager.getGroupIdFromInfrastructureScope(scope); + for (GCubeUser user :userManager.listUsersByGroup(groupId)){ + callers.add(new Caller(TypeCaller.user,user.getUsername())); + } + //List All roles + for (GCubeRole role :roleManager.listAllGroupRoles()){ + callers.add(new Caller(TypeCaller.role,role.getRoleName())); + } + //List Service + SimpleQuery query = queryFor(GCoreEndpoint.class); + query.setResult("{$resource/Profile/ServiceClass/text()}" + + "{$resource/Profile/ServiceName/text()}"); + + DiscoveryClient client = clientFor(ServiceResult.class); + List resources = client.submit(query); + for (ServiceResult result: resources){ + callers.add(new Caller(TypeCaller.service,result.getServiceClass()+":"+result.getServiceName())); + } + } + return callers; + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw e; + } catch (Throwable e) { + logger.error("loadListCaller error: " + e.getLocalizedMessage(), e); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage(),e); + } + + } + + /** + * Load all service + */ + @Override + public Map> loadListService() throws ServiceException { + try { + HttpSession session = this.getThreadLocalRequest().getSession(); + @SuppressWarnings("unused") + ASLSession aslSession = SessionUtil.getASLSession(session); + Map> services =new HashMap>(); + if (ConstantsSharing.DEBUG_MODE) { + String token=ConstantsSharing.DEBUG_TOKEN; + SecurityTokenProvider.instance.set(token); + } + if (ConstantsSharing.MOCK_UP) { + services.put("InformationSystem", Arrays.asList("IC", "ISRegistry")); + services.put("DataAccess", Arrays.asList("SpeciesProductsDiscovery","dAAaCCESS@")); + services.put("DataAnalysis", Arrays.asList("StatisticalManager")); + } + else{ + //Get List service + SimpleQuery query = queryFor(GCoreEndpoint.class); + query.setResult("{$resource/Profile/ServiceClass/text()}" + + "{$resource/Profile/ServiceName/text()}"); + DiscoveryClient client = clientFor(ServiceResult.class); + + List resources = client.submit(query); + for (ServiceResult result: resources){ + if (!services.containsKey(result.getServiceClass())) + services.put(result.getServiceClass(),new ArrayList()); + services.get(result.getServiceClass()).add(result.getServiceName()); + } + } + return services; + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw e; + } catch (Throwable e) { + logger.error("loadListService error: " + e.getLocalizedMessage(), e); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage()); + } + } + + /** + * Load all access + */ + @Override + public ArrayList loadListAccess() throws ServiceException { + try { + HttpSession session = this.getThreadLocalRequest().getSession(); + @SuppressWarnings("unused") + ASLSession aslSession = SessionUtil.getASLSession(session); + + if (ConstantsSharing.DEBUG_MODE) { + String token=ConstantsSharing.DEBUG_TOKEN; + SecurityTokenProvider.instance.set(token); + } + ArrayList access =new ArrayList(); + for( Access accessValue : Access.values() ) + access.add(access.toString()); + return access; + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw e; + } catch (Throwable e) { + logger.error("loadListAccess error: " + e.getLocalizedMessage(), e); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage()); + } + + } + + /** + * Insert a new List Policy + * @return + * @throws Throwable + */ + @Override + public void addPolicies(List policiesAuth) throws ServiceException { + try { + //Long identifier; + HttpSession session = this.getThreadLocalRequest().getSession(); + ASLSession aslSession = SessionUtil.getASLSession(session); + List policies = new ArrayList(); + String token =aslSession.getSecurityToken(); + if (ConstantsSharing.DEBUG_MODE) { + token=ConstantsSharing.DEBUG_TOKEN; + + } + SecurityTokenProvider.instance.set(token); + String scope=SessionUtil.getASLSession(session).getScope(); + for (PolicyAuth policy: policiesAuth){ + ServiceAccess service=new ServiceAccess(policy.getService().getServiceName(), policy.getService().getServiceClass(), policy.getService().getServiceId()); + Action access =Action.valueOf(policy.getAccessString()); + logger.debug("policy translate:"+policy.getCallerTypeAsString()); + if (policy.getCallerTypeAsString().equalsIgnoreCase(TypeCaller.user.toString())){ + logger.debug("add policy with user"); + policies.add(new User2ServicePolicy(scope, service, Users.one(policy.getCallerAsString()), access )); + } + else if (policy.getCallerTypeAsString().equalsIgnoreCase(TypeCaller.role.toString())){ + logger.debug("add policy with role"); + policies.add(new User2ServicePolicy(scope, service, Roles.one(policy.getCallerAsString()), access )); + } + else if (policy.getCallerTypeAsString().equalsIgnoreCase(TypeCaller.service.toString())){ + logger.debug("add policy with service"); + String[] policyService=policy.getCallerAsString().split(":"); + String serviceName=policyService[0].trim(); + String serviceClass=policyService[1].trim(); + String serviceId="All"; + if (policyService.length==3) + serviceId=policy.getCallerAsString().split(":")[2]; + ServiceAccess serviceCaller =new ServiceAccess(serviceName, serviceClass, serviceId); + policies.add(new Service2ServicePolicy(scope,service,Services.specialized(serviceCaller),access)); + } + else{ + String[] allExecpt=policy.getCallerTypeAsString().trim().split(" "); + if (allExecpt.length>0){ + if (allExecpt[0].equalsIgnoreCase(TypeCaller.user.toString())){ + logger.debug("add policy with user execpt"); + policies.add(new User2ServicePolicy(scope, service, Users.allExcept(policy.getCallerExecptAsString()), access )); + } + else if (allExecpt[0].equalsIgnoreCase(TypeCaller.role.toString())){ + logger.debug("add policy with role execpt"); + policies.add(new User2ServicePolicy(scope, service, Roles.allExcept(policy.getCallerExecptAsString()), access )); + } + else{ + logger.error("ERROR caller type not recognized"+allExecpt[0]); + throw new TypeCallerException("Caller type not found"); + } + } + else{ + logger.error("ERROR caller type not recognized"+policy.getCallerTypeAsString()); + throw new TypeCallerException("Caller type not found"); + } + } + } + logger.info("INSERT CALLER:"+policies.toString()); + authorizationService().addPolicies(policies); + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw e; + } catch (Exception e) { + logger.error("addPolicies error: " + e.getLocalizedMessage(), e); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage()); + + } + } + + /** + * Update an existing policy + */ + @Override + public void updatePolicy(PolicyAuth policy) throws ServiceException{ + try { + + HttpSession session = this.getThreadLocalRequest().getSession(); + ASLSession aslSession = SessionUtil.getASLSession(session); + String token =aslSession.getSecurityToken(); + if (ConstantsSharing.DEBUG_MODE) { + token=ConstantsSharing.DEBUG_TOKEN; + } + SecurityTokenProvider.instance.set(token); + //remove old policy + authorizationService().removePolicies(policy.getIdpolicy()); + //add a new policy + List policies = new ArrayList(); + String scope=SessionUtil.getASLSession(session).getScope(); + ServiceAccess service=new ServiceAccess(policy.getService().getServiceName(), policy.getService().getServiceClass(), policy.getService().getServiceId()); + logger.info("updatePolicy -policy.getCallerAsString()"+policy.getCallerAsString()); + Action access =Action.valueOf(policy.getAccessString()); + policies.add(new User2ServicePolicy(scope, service, Users.one(policy.getCallerAsString()), access )); + authorizationService().addPolicies(policies); + + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw e; + } catch (Throwable e) { + e.printStackTrace(); + logger.error("updatePolicy error: " + e.getLocalizedMessage(), e); + throw new ServiceException(e.getLocalizedMessage()); + } + + } + + + @Override + public List deletePolicies(List identifiers)throws ServiceException { + try { + HttpSession session = this.getThreadLocalRequest().getSession(); + ASLSession aslSession = SessionUtil.getASLSession(session); + ArrayList policy =new ArrayList(); + String token =aslSession.getSecurityToken(); + if (ConstantsSharing.DEBUG_MODE) { + token=ConstantsSharing.DEBUG_TOKEN; + } + SecurityTokenProvider.instance.set(token); + for (Long identifier:identifiers){ + logger.info("Remove policy idpolicy "+identifier); + authorizationService().removePolicies(identifier); + } + return identifiers; + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw e; + } catch (Throwable e) { + logger.error("deletePolicies error: " + e.getLocalizedMessage(), e); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage()); + } + } + + + + /** + * Load all list quota + */ + @Override + public ArrayList loadListQuota() throws ServiceException { + try { + HttpSession session = this.getThreadLocalRequest().getSession(); + SessionUtil.getASLSession(session); + ArrayList quote =new ArrayList(); + if (ConstantsSharing.MOCK_UP) { + logger.info("loadListQuota"); + for (Quote quoteList : TableUtils.SERVICESQUOTE.values()){ + quote.add(quoteList); + } + } + else{ + logger.info("loadListQuota "); + for (Quote quoteList : TableUtils.SERVICESQUOTE.values()){ + + quote.add(quoteList); + } + } + return quote; + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw e; + } catch (Throwable e) { + logger.error("loadListQuota error: " + e.getLocalizedMessage(), e); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage()); + } + + } + + @Override + public List deleteQuote(List identifiers)throws ServiceException { + try { + + HttpSession session = this.getThreadLocalRequest().getSession(); + ASLSession aslSession = SessionUtil.getASLSession(session); + if (ConstantsSharing.MOCK_UP) { + for (Long identifier:identifiers){ + logger.info("Remove quote idquote "+identifier); + TableUtils.SERVICESQUOTE.remove(identifier); + } + } + else{ + for (Long identifier:identifiers){ + logger.info("Remove quote idquote "+identifier); + TableUtils.SERVICESQUOTE.remove(identifier); + } + } + + return identifiers; + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw e; + } catch (Throwable e) { + logger.error("deleteQuote error: " + e.getLocalizedMessage(), e); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage()); + } + } + + @Override + public List addQuote(List quote) throws ServiceException { + try { + Long identifier; + HttpSession session = this.getThreadLocalRequest().getSession(); + ASLSession aslSession = SessionUtil.getASLSession(session); + if (ConstantsSharing.MOCK_UP) { + for (Quote quota: quote){ + identifier =(long)(Math.random()*1000000000); + logger.info("Insert new quota for "+quota.getCallerAsString()+ "return with:"+identifier); + quota.setIdQuote(identifier); + Calendar calendarStart = Calendar.getInstance(); + Date dateStart = calendarStart.getTime(); + quota.setDataInsert(dateStart); + TableUtils.SERVICESQUOTE.put(identifier, quota); + } + } + else{ + for (Quote quota: quote){ + identifier =(long)(Math.random()*1000000000); + logger.info("Insert new quota for "+quota.getCallerAsString()+ "return with:"+identifier); + quota.setIdQuote(identifier); + Calendar calendarStart = Calendar.getInstance(); + Date dateStart = calendarStart.getTime(); + quota.setDataInsert(dateStart); + TableUtils.SERVICESQUOTE.put(identifier, quota); + } + } + return quote; + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw e; + } catch (Throwable e) { + logger.error("addQuote error: " + e.getLocalizedMessage(), e); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage()); + } + } + + + /** + * Update an existing quote + */ + @Override + public Quote updateQuote(Quote quote) throws ServiceException{ + try { + + HttpSession session = this.getThreadLocalRequest().getSession(); + ASLSession aslSession = SessionUtil.getASLSession(session); + + if (ConstantsSharing.MOCK_UP) { + //TableUtils.SERVICES. + TableUtils.SERVICESQUOTE.remove(quote.getIdQuote()); + + Calendar calendarStart = Calendar.getInstance(); + Date dateUpdate = calendarStart.getTime(); + quote.setDataUpdate(dateUpdate); + + TableUtils.SERVICESQUOTE.put(quote.getIdQuote(), quote); + logger.info("Update quote identifier:"+quote.getIdQuote()); + } + else{ + TableUtils.SERVICESQUOTE.remove(quote.getIdQuote()); + Calendar calendarStart = Calendar.getInstance(); + Date dateUpdate = calendarStart.getTime(); + quote.setDataUpdate(dateUpdate); + TableUtils.SERVICESQUOTE.put(quote.getIdQuote(), quote); + logger.info("Update quote identifier:"+quote.getIdQuote()); + } + + return quote; + } catch (ServiceException e) { + logger.error(e.getLocalizedMessage()); + e.printStackTrace(); + throw e; + } catch (Throwable e) { + logger.error("updateQuote error: " + e.getLocalizedMessage(), e); + e.printStackTrace(); + throw new ServiceException(e.getLocalizedMessage()); + } + + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/server/ExpiredSessionServiceException.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/ExpiredSessionServiceException.java new file mode 100644 index 0000000..f215b46 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/ExpiredSessionServiceException.java @@ -0,0 +1,5 @@ +package org.gcube.portlets.admin.authportletmanager.server; + +public class ExpiredSessionServiceException extends Exception { + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/server/ServiceResult.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/ServiceResult.java new file mode 100644 index 0000000..5d012f5 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/ServiceResult.java @@ -0,0 +1,26 @@ +package org.gcube.portlets.admin.authportletmanager.server; + + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name="Service") +@XmlAccessorType(XmlAccessType.PROPERTY) +public class ServiceResult { + + @XmlElement(name="ServiceClass") + private String serviceClass; + @XmlElement(name="ServiceName") + private String serviceName; + + + public String getServiceClass() { + return serviceClass; + } + public String getServiceName() { + return serviceName; + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/server/SessionUtil.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/SessionUtil.java new file mode 100644 index 0000000..27add46 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/SessionUtil.java @@ -0,0 +1,60 @@ +/** + * + */ +package org.gcube.portlets.admin.authportletmanager.server; + +import javax.servlet.http.HttpSession; + +import org.gcube.application.framework.core.session.ASLSession; +import org.gcube.application.framework.core.session.SessionManager; +import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; +import org.gcube.portlets.admin.authportletmanager.shared.ConstantsSharing; +import org.gcube.portlets.admin.authportletmanager.shared.exceptions.ExpiredSessionServiceException; +import org.gcube.portlets.admin.authportletmanager.shared.exceptions.ServiceException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + + +/** + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class SessionUtil { + + private static Logger logger = LoggerFactory.getLogger(SessionUtil.class); + + public static ASLSession getASLSession(HttpSession httpSession) + throws ServiceException { + String username = (String) httpSession + .getAttribute(ScopeHelper.USERNAME_ATTRIBUTE); + ASLSession aslSession; + if (username == null) { + if (ConstantsSharing.DEBUG_MODE) { + logger.info("no user found in session, use test user"); + username = ConstantsSharing.DEFAULT_USER; + String scope = ConstantsSharing.DEFAULT_SCOPE; + httpSession.setAttribute(ScopeHelper.USERNAME_ATTRIBUTE, + username); + aslSession = SessionManager.getInstance().getASLSession( + httpSession.getId(), username); + aslSession.setScope(scope); + } else { + logger.info("no user found in session!"); + throw new ExpiredSessionServiceException("Session Expired!"); + + } + } else { + aslSession = SessionManager.getInstance().getASLSession( + httpSession.getId(), username); + + } + + logger.info("SessionUtil: aslSession " + aslSession.getUsername() + " " + + aslSession.getScope()); + + return aslSession; + } +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/server/TableUtils.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/TableUtils.java new file mode 100644 index 0000000..1be25d4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/TableUtils.java @@ -0,0 +1,37 @@ +package org.gcube.portlets.admin.authportletmanager.server; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.gcube.portlets.admin.authportletmanager.shared.Quote; + + + + + +public class TableUtils { + + public static List quoteList = Arrays.asList( +// new Quote(100000l,"user.name","devNext",ManagerType.STORAGE,TimeInterval.WEEKLY,500.00) + ); + public static Map SERVICESQUOTE = new HashMap(); + static { + for (Quote quote: quoteList) + SERVICESQUOTE.put(quote.getIdQuote(), quote); + } + + + + + + + + + + + + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/server/portlet/AccountingManagerPortlet.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/portlet/AccountingManagerPortlet.java new file mode 100644 index 0000000..cd54034 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/portlet/AccountingManagerPortlet.java @@ -0,0 +1,50 @@ +/** + * + */ +package org.gcube.portlets.admin.authportletmanager.server.portlet; + +import java.io.IOException; + +import javax.portlet.GenericPortlet; +import javax.portlet.PortletException; +import javax.portlet.PortletRequestDispatcher; +import javax.portlet.RenderRequest; +import javax.portlet.RenderResponse; + +import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class AccountingManagerPortlet extends GenericPortlet { + + protected Logger logger = LoggerFactory.getLogger(AccountingManagerPortlet.class); + + + /** + * JSP folder name + */ + public static final String JSP_FOLDER = "/WEB-INF/jsp/"; + + /** + * + */ + public static final String VIEW_JSP = JSP_FOLDER + "AccountingManagerPortlet_view.jsp"; + + /** + * @param request . + * @param response . + * @throws IOException . + * @throws PortletException . + */ + public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { + ScopeHelper.setContext(request); + PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(VIEW_JSP); + rd.include(request,response); + } +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/server/portlet/AuthManagerPortlet.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/portlet/AuthManagerPortlet.java new file mode 100644 index 0000000..4c557ba --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/server/portlet/AuthManagerPortlet.java @@ -0,0 +1,56 @@ +/** + * + */ +package org.gcube.portlets.admin.authportletmanager.server.portlet; + +import java.io.IOException; + +import javax.portlet.GenericPortlet; +import javax.portlet.PortletException; +import javax.portlet.PortletRequestDispatcher; +import javax.portlet.RenderRequest; +import javax.portlet.RenderResponse; + +import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class AuthManagerPortlet extends GenericPortlet { + + protected Logger logger = LoggerFactory.getLogger(AuthManagerPortlet.class); + + + /** + * JSP folder name + */ + public static final String JSP_FOLDER = "/WEB-INF/jsp/"; + + /** + * + */ + public static final String VIEW_JSP = JSP_FOLDER + "AuthPortletManager_view.jsp"; + + /** + * @param request . + * @param response . + * @throws IOException . + * @throws PortletException . + */ + public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { + + + logger.trace("AuthPortletManager loading from JSP: "+VIEW_JSP); + logger.trace("setting context using ScopeHelper"); + ScopeHelper.setContext(request); + + logger.trace("passing to the render"); + PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(VIEW_JSP); + rd.include(request,response); + } +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Access.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Access.java new file mode 100644 index 0000000..3196369 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Access.java @@ -0,0 +1,10 @@ +package org.gcube.portlets.admin.authportletmanager.shared; + +public enum Access { + ALL, + ACCESS, + DELETE, + EXECUTE, + WRITE; +} + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Caller.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Caller.java new file mode 100644 index 0000000..603a354 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Caller.java @@ -0,0 +1,119 @@ +package org.gcube.portlets.admin.authportletmanager.shared; + +import java.io.Serializable; + + +/** + * Caller class for + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class Caller implements Serializable, Comparable { + + /** + * + */ + private static final long serialVersionUID = -8450499385104913365L; + + + + + //private String typeCaller; + + + public enum TypeCaller { + user, + role, + service; + + } + + + private String callerName; + private TypeCaller typeCaller; + + public Caller() { + super(); + } + + public Caller(TypeCaller typeCaller, String callerName) { + super(); + this.typeCaller = typeCaller; + this.callerName=callerName; + } + + public TypeCaller getTypecaller() { + return typeCaller; + } + + public void setTypecaller(TypeCaller typeCaller) { + this.typeCaller = typeCaller; + } + + public String getCallerName() { + return callerName; + } + + + + public void setCallerName(String callerName) { + this.callerName = callerName; + } + + + @Override + public int compareTo(Caller o) { + // TODO Auto-generated method stub + return -this.getCallerName().compareTo(o.getCallerName()); + + } + + public int compare(Caller o1, Caller o2) { + // TODO Auto-generated method stub + return -o1.getCallerName().compareTo(o2.getCallerName()); + } + + + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((callerName == null) ? 0 : callerName.hashCode()); + result = prime * result + + ((typeCaller == null) ? 0 : typeCaller.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Caller other = (Caller) obj; + if (callerName == null) { + if (other.callerName != null) + return false; + } else if (!callerName.equals(other.callerName)) + return false; + if (typeCaller == null) { + if (other.typeCaller != null) + return false; + } else if (!typeCaller.equals(other.typeCaller)) + return false; + return true; + } + + + + + +} + diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Constants.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Constants.java new file mode 100644 index 0000000..1534b0d --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Constants.java @@ -0,0 +1,32 @@ +package org.gcube.portlets.admin.authportletmanager.shared; + +/** + * + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class Constants { + + public static final String APPLICATION_ID = "org.gcube.portlets.admin.accountingmanager.server.portlet.AccountingManagerPortlet"; + public static final String ACCOUNTING_MANAGER_ID = "AccountingManagerId"; + public static final String AM_LANG_COOKIE = "AMLangCookie"; + public static final String AM_LANG = "AMLang"; + public final static String DEFAULT_USER = "alessandro.pieve"; + + + + public static final boolean DEBUG_MODE = true; + public static final boolean TEST_ENABLE = false; + + + public static final String DEFAULT_ROLE = "OrganizationMember"; + public final static String DEFAULT_SCOPE = "/gcube/devsec/devVRE"; + + + + + + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/ConstantsSharing.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/ConstantsSharing.java new file mode 100644 index 0000000..95aff4b --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/ConstantsSharing.java @@ -0,0 +1,44 @@ +package org.gcube.portlets.admin.authportletmanager.shared; + +/** + * CostantsSharing usage for project + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class ConstantsSharing { + + public static final String APPLICATION_ID = "org.gcube.portlets.admin.accountingmanager.server.portlet.AccountingManagerPortlet"; + public static final String ACCOUNTING_MANAGER_ID = "AccountingManagerId"; + public static final String AM_LANG_COOKIE = "AMLangCookie"; + public static final String AM_LANG = "AMLang"; + + public final static String DEFAULT_USER = "alessandro.pieve"; + + public static final boolean DEBUG_MODE = false; + public static final String DEBUG_TOKEN = "afdaa1c6-493b-405e-801d-b219e056f564|98187548"; + public static final boolean MOCK_UP = false; + public static final String DEFAULT_ROLE = "OrganizationMember"; + public final static String DEFAULT_SCOPE = "/gcube/devNext"; + + + /*** + * For client + */ + public static final String LOADINGSTYLE = "x-mask-loading"; + public static final String SERVER_ERROR = "Sorry, an error has occurred on the server when"; + public static final String TRY_AGAIN = "Try again"; + public static int WIDTH_DIALOG_LOADER = 200; + public static int HEIGHT_DIALOG_LOADER = 80; + public static String Star="ALL"; + public static String StarIcon="*"; + public static String StarLabel="ALL SERVICE"; + public static String TagCaller="@"; + public static String TagRole="#"; + public static String TagService="$"; + public static String TagAccess="*"; + public static String TagTime="$"; + public static String TagType="*"; + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/PolicyAuth.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/PolicyAuth.java new file mode 100644 index 0000000..bde8b95 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/PolicyAuth.java @@ -0,0 +1,269 @@ +package org.gcube.portlets.admin.authportletmanager.shared; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +import org.gcube.portlets.admin.authportletmanager.shared.Caller.TypeCaller; + +/** + * PolicyAuth usage for project + * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it + * + */ +public class PolicyAuth implements Serializable { + + private static final long serialVersionUID = 5453609273197782507L; + private Long idPolicy; + private List caller; + private Boolean excludesCaller; + + private Service service; + //private String access; + // private Action access; + + private Access access; + + private Date dataInsert; + private Date dataUpdate; + + public PolicyAuth() { + super(); + } + + public PolicyAuth(List caller, Service service, Access access) { + super(); + this.caller=caller; + this.service = service; + this.access = access; + } + + public PolicyAuth(Long idPolicy, List caller,Service service,Access access) { + super(); + this.idPolicy = idPolicy; + this.caller=caller; + this.service = service; + this.access = access; + } + + public PolicyAuth(Long idPolicy, List caller,Service service,Access access, Date dataInsert, Date dataUpdate) { + super(); + this.idPolicy = idPolicy; + this.caller=caller; + this.service = service; + this.access = access; + this.dataInsert=dataInsert; + this.dataUpdate=dataUpdate; + } + + + public PolicyAuth(Long idPolicy, List caller,Service service,Access access, Date dataInsert) { + super(); + this.idPolicy = idPolicy; + this.caller=caller; + this.service = service; + this.access = access; + this.dataInsert=dataInsert; + + } + + public PolicyAuth(Long idPolicy,List caller,Boolean excludeCallers,Service service,Access access, Date dataInsert, Date dataUpdate) { + super(); + this.idPolicy = idPolicy; + this.caller=caller; + this.excludesCaller=excludeCallers; + this.service = service; + this.access = access; + this.dataInsert=dataInsert; + this.dataUpdate=dataUpdate; + } + + public long getIdpolicy() { + return idPolicy; + } + + public void setIdpolicy(Long idPolicy) { + this.idPolicy = idPolicy; + } + + public List getCaller() { + return caller; + } + + public void setCaller(List caller) { + this.caller = caller; + } + + public void setService(Service service) { + this.service = service; + } + + public Access getAccess() { + return access; + } + public String getAccessString() { + return access.toString(); + } + + + public void setAccess(Access access) { + this.access = access; + } + + public Service getService() { + return service; + } + /* + * Get full name + */ + public String getServiceAsString(){ + return service.getServiceClass()+":"+service.getServiceName()+":"+service.getServiceId(); + } + /* + * Get full name caller + */ + public String getCallerAsString(){ + String callerNameString = new String(); + + for (Caller caller:this.caller){ + callerNameString=caller.getCallerName()+" "+ callerNameString; + } + return callerNameString; + } + /* + * Get full type caller + */ + public String getCallerTypeAsString(){ + String callerTypeString = ""; + + for (Caller caller:this.caller){ + if (this.caller.size()==1){ + callerTypeString=caller.getTypecaller().toString(); + } + else{ + callerTypeString=callerTypeString+" "+caller.getTypecaller().toString(); + } + } + return callerTypeString; + } + + /** + * + * @return + */ + public TypeCaller getCallerType(){ + TypeCaller callerTypeString =null; + + for (Caller caller:this.caller){ + callerTypeString=caller.getTypecaller(); + + } + return callerTypeString; + } + + /* + * Get full type caller + */ + public String getCallerTypeAsDataGrid(){ + String callerTypeString = ""; + + for (Caller caller:this.caller){ + callerTypeString=caller.getTypecaller().toString(); + + } + return callerTypeString; + } + + + + /** + * + * @return + */ + public String[] getCallerExecptAsString(){ + String[] callerNameString = new String[this.caller.size()-1]; + int count =0; + for (Caller caller:this.caller){ + if (!caller.getCallerName().equals("ALL")){ + callerNameString[count]=caller.getCallerName(); + + count++; + } + } + return callerNameString; + } + + + + public Date getDataInsert() { + return dataInsert; + } + public void setDataInsert(Date dataInsert) { + this.dataInsert = dataInsert; + } + public Date getDataUpdate() { + return dataUpdate; + } + public void setDataUpdate(Date dataUpdate) { + this.dataUpdate = dataUpdate; + } + public Boolean getExcludesCaller() { + return excludesCaller; + } + public void setExcludesCaller(Boolean excludesCaller) { + this.excludesCaller = excludesCaller; + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((access == null) ? 0 : access.hashCode()); + result = prime * result + ((caller == null) ? 0 : caller.hashCode()); + result = prime * result + + ((idPolicy == null) ? 0 : idPolicy.hashCode()); + result = prime * result + ((service == null) ? 0 : service.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PolicyAuth other = (PolicyAuth) obj; + if (access == null) { + if (other.access != null) + return false; + } else if (!access.equals(other.access)) + return false; + if (caller == null) { + if (other.caller != null) + return false; + } else if (!caller.equals(other.caller)) + return false; + if (idPolicy == null) { + if (other.idPolicy != null) + return false; + } else if (!idPolicy.equals(other.idPolicy)) + return false; + if (service == null) { + if (other.service != null) + return false; + } else if (!service.equals(other.service)) + return false; + return true; + } + @Override + public String toString() { + return "PolicyAuth [idPolicy=" + idPolicy + ", caller=" + caller + + ", excludesCaller=" + excludesCaller + ", service=" + service + + ", access=" + access + ", dataInsert=" + dataInsert + + ", dataUpdate=" + dataUpdate + "]"; + } + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Quote.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Quote.java new file mode 100644 index 0000000..fbf0417 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Quote.java @@ -0,0 +1,227 @@ +package org.gcube.portlets.admin.authportletmanager.shared; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + + +public class Quote implements Serializable { + + private static final long serialVersionUID = 5453609273197782507L; + + private Long idQuote; + + + private List caller; + + + + private String target; + + //private String manager; + + //private String timeInterval; + + + public enum ManagerType { + STORAGE(0),SERVICE(1),PORTLET(2); + @SuppressWarnings("unused") + private int value; + private ManagerType(int value){ + this.value=value; + } + } + + + + protected ManagerType managerType; + + public enum TimeInterval { + DAILY,WEEKLY,MONTHLY,YEARLY + } + protected TimeInterval timeInterval; + + private Double quota; + + private Date dataInsert; + + private Date dataUpdate; + + + public Quote() { + super(); + } + public Quote(List caller, String target,ManagerType managerType,TimeInterval timeInterval,Double quota) { + super(); + this.caller=caller; + this.target=target; + this.managerType=managerType; + this.timeInterval=timeInterval; + this.quota=quota; + + } + public Quote(Long idquote,List caller, String target,ManagerType managerType,TimeInterval timeInterval,Double quota) { + super(); + this.idQuote=idquote; + this.caller=caller; + this.target=target; + this.managerType=managerType; + this.timeInterval=timeInterval; + this.quota=quota; + + } + + + + public Long getIdQuote() { + return idQuote; + } + public void setIdQuote(Long idQuote) { + this.idQuote = idQuote; + } + public List getCaller() { + return caller; + } + + /* + * Get full name caller + */ + public String getCallerAsString(){ + String callerNameString = new String(); + for (Caller caller:this.caller){ + callerNameString=caller.getCallerName()+" "+ callerNameString; + } + return callerNameString; + } + /* + * Get full type caller + */ + public String getCallerTypeAsString(){ + String callerTypeString = ""; + for (Caller caller:this.caller){ + callerTypeString=callerTypeString+" "+caller.getTypecaller(); + } + return callerTypeString; + } + + + + + public void setCaller(List caller) { + this.caller = caller; + } + public String getTarget() { + return target; + } + public void setTarget(String target) { + this.target = target; + } + public ManagerType getManager() { + return managerType; + } + public void setManager(ManagerType manager) { + this.managerType = manager; + } + public TimeInterval getTimeInterval() { + return timeInterval; + } + public void setTimeInterval(TimeInterval timeInterval) { + this.timeInterval = timeInterval; + } + public Double getQuota() { + return quota; + } + public void setQuota(Double quota) { + this.quota = quota; + } + public Date getDataInsert() { + return dataInsert; + } + public void setDataInsert(Date dataInsert) { + this.dataInsert = dataInsert; + } + public Date getDataUpdate() { + return dataUpdate; + } + public void setDataUpdate(Date dataUpdate) { + this.dataUpdate = dataUpdate; + } + + @Override + public String toString() { + return "Quote [idQuote=" + idQuote + ", caller=" + caller + ", target=" + + target + ", manager=" + managerType + ", timeInterval=" + + timeInterval + ", quota=" + quota + ", dataInsert=" + + dataInsert + ", dataUpdate=" + dataUpdate + "]"; + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((caller == null) ? 0 : caller.hashCode()); + result = prime * result + + ((dataInsert == null) ? 0 : dataInsert.hashCode()); + result = prime * result + + ((dataUpdate == null) ? 0 : dataUpdate.hashCode()); + result = prime * result + ((idQuote == null) ? 0 : idQuote.hashCode()); + result = prime * result + ((managerType == null) ? 0 : managerType.hashCode()); + result = prime * result + ((quota == null) ? 0 : quota.hashCode()); + result = prime * result + ((target == null) ? 0 : target.hashCode()); + result = prime * result + + ((timeInterval == null) ? 0 : timeInterval.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Quote other = (Quote) obj; + if (caller == null) { + if (other.caller != null) + return false; + } else if (!caller.equals(other.caller)) + return false; + if (dataInsert == null) { + if (other.dataInsert != null) + return false; + } else if (!dataInsert.equals(other.dataInsert)) + return false; + if (dataUpdate == null) { + if (other.dataUpdate != null) + return false; + } else if (!dataUpdate.equals(other.dataUpdate)) + return false; + if (idQuote == null) { + if (other.idQuote != null) + return false; + } else if (!idQuote.equals(other.idQuote)) + return false; + if (managerType == null) { + if (other.managerType != null) + return false; + } else if (!managerType.equals(other.managerType)) + return false; + if (quota == null) { + if (other.quota != null) + return false; + } else if (!quota.equals(other.quota)) + return false; + if (target == null) { + if (other.target != null) + return false; + } else if (!target.equals(other.target)) + return false; + if (timeInterval == null) { + if (other.timeInterval != null) + return false; + } else if (!timeInterval.equals(other.timeInterval)) + return false; + return true; + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Role.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Role.java new file mode 100644 index 0000000..05e8116 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Role.java @@ -0,0 +1,38 @@ +package org.gcube.portlets.admin.authportletmanager.shared; + +import java.io.Serializable; + +public class Role implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + private String name; + private String identifier; + + public Role() { + + } + public Role(String name, String identifier) { + super(); + this.name = name; + this.identifier = identifier; + + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getIdentifier() { + return identifier; + } + public void setIdentifier(String identifier) { + this.identifier = identifier; + } + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Service.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Service.java new file mode 100644 index 0000000..a3991b7 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/Service.java @@ -0,0 +1,99 @@ +package org.gcube.portlets.admin.authportletmanager.shared; + +import java.io.Serializable; + + +/** + * + * @author pieve + * + */ +public class Service implements Serializable, Comparable { + + /** + * + */ + private static final long serialVersionUID = -3580147805704412936L; + /** + * + */ + + String serviceClass; + String serviceName; + String serviceId; + public Service() { + super(); + } + public Service(String serviceClass, String serviceName, String serviceId) { + super(); + this.serviceClass = serviceClass; + this.serviceName = serviceName; + this.serviceId = serviceId; + } + + public String getServiceClass() { + return serviceClass; + } + public void setServiceClass(String serviceClass) { + this.serviceClass = serviceClass; + } + public String getServiceName() { + return serviceName; + } + public void setServiceName(String serviceName) { + this.serviceName = serviceName; + } + public String getServiceId() { + return serviceId; + } + public void setServiceId(String serviceId) { + this.serviceId = serviceId; + } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((serviceClass == null) ? 0 : serviceClass.hashCode()); + result = prime * result + + ((serviceId == null) ? 0 : serviceId.hashCode()); + result = prime * result + + ((serviceName == null) ? 0 : serviceName.hashCode()); + return result; + } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Service other = (Service) obj; + if (serviceClass == null) { + if (other.serviceClass != null) + return false; + } else if (!serviceClass.equals(other.serviceClass)) + return false; + if (serviceId == null) { + if (other.serviceId != null) + return false; + } else if (!serviceId.equals(other.serviceId)) + return false; + if (serviceName == null) { + if (other.serviceName != null) + return false; + } else if (!serviceName.equals(other.serviceName)) + return false; + return true; + } + @Override + public int compareTo(Service o) { + return this.serviceClass.compareTo(o.serviceClass); + } + + + + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/ServiceSelection.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/ServiceSelection.java new file mode 100644 index 0000000..2035706 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/ServiceSelection.java @@ -0,0 +1,11 @@ +package org.gcube.portlets.admin.authportletmanager.shared; + +import java.util.List; +import java.util.Map; + +public class ServiceSelection { + + Map> classNameMap; + + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/TypeIdentifier.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/TypeIdentifier.java new file mode 100644 index 0000000..b2f8be0 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/TypeIdentifier.java @@ -0,0 +1,6 @@ +package org.gcube.portlets.admin.authportletmanager.shared; + +public enum TypeIdentifier { + USER,ROLE + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/User.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/User.java new file mode 100644 index 0000000..a7adfe0 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/User.java @@ -0,0 +1,48 @@ +package org.gcube.portlets.admin.authportletmanager.shared; + +import java.io.Serializable; + +public class User implements Serializable{ + + + + /** + * + */ + private static final long serialVersionUID = 1L; + + private String login; + private String name; + private String lastname; + + + + public User() { + + } + public User(String login, String name, String lastname) { + super(); + this.login = login; + this.name = name; + this.lastname = lastname; + } + public String getLogin() { + return login; + } + public void setLogin(String login) { + this.login = login; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getLastname() { + return lastname; + } + public void setLastname(String lastname) { + this.lastname = lastname; + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/exceptions/ExpiredSessionServiceException.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/exceptions/ExpiredSessionServiceException.java new file mode 100644 index 0000000..36c2898 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/exceptions/ExpiredSessionServiceException.java @@ -0,0 +1,29 @@ +package org.gcube.portlets.admin.authportletmanager.shared.exceptions; + +public class ExpiredSessionServiceException extends ServiceException{ + + + private static final long serialVersionUID = -2255657546267656458L; + + + /** + * + */ + public ExpiredSessionServiceException() { + super(); + } + + /** + * @param message + */ + public ExpiredSessionServiceException(String message) { + super(message); + } + + + public ExpiredSessionServiceException(String message,Throwable t) { + super(message,t); + } + + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/exceptions/ServiceException.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/exceptions/ServiceException.java new file mode 100644 index 0000000..88c141b --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/exceptions/ServiceException.java @@ -0,0 +1,38 @@ +/** + * + */ +package org.gcube.portlets.admin.authportletmanager.shared.exceptions; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public class ServiceException extends Exception { + + + private static final long serialVersionUID = -2255657546267656458L; + + + /** + * + */ + public ServiceException() { + super(); + } + + /** + * @param message + */ + public ServiceException(String message) { + super(message); + } + + + public ServiceException(String message,Throwable t) { + super(message,t); + } + + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/exceptions/TypeCallerException.java b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/exceptions/TypeCallerException.java new file mode 100644 index 0000000..a8ea4b3 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/authportletmanager/shared/exceptions/TypeCallerException.java @@ -0,0 +1,40 @@ +package org.gcube.portlets.admin.authportletmanager.shared.exceptions; + +/** + * + * @author "Alessandro Pieve" + * alessandro.pieve@isti.cnr.it + * + */ +public class TypeCallerException extends Exception { + + + + + /** + * + */ + private static final long serialVersionUID = -2210435562417868778L; + + + /** + * + */ + public TypeCallerException() { + super(); + } + + /** + * @param message + */ + public TypeCallerException(String message) { + super(message); + } + + + public TypeCallerException(String message,Throwable t) { + super(message,t); + } + + +} \ No newline at end of file diff --git a/src/main/resources/FARM.gcubekey b/src/main/resources/FARM.gcubekey new file mode 100644 index 0000000..b113201 --- /dev/null +++ b/src/main/resources/FARM.gcubekey @@ -0,0 +1 @@ +< ¬@Qaj¤F€g¸ðQ \ No newline at end of file diff --git a/src/main/resources/d4science.research-infrastructures.eu.gcubekey b/src/main/resources/d4science.research-infrastructures.eu.gcubekey new file mode 100644 index 0000000..b113201 --- /dev/null +++ b/src/main/resources/d4science.research-infrastructures.eu.gcubekey @@ -0,0 +1 @@ +< ¬@Qaj¤F€g¸ðQ \ No newline at end of file diff --git a/src/main/resources/devNext.gcubekey b/src/main/resources/devNext.gcubekey new file mode 100644 index 0000000..260f269 --- /dev/null +++ b/src/main/resources/devNext.gcubekey @@ -0,0 +1 @@ +6 4Zð/Uä‰ Cå±ß˜ \ No newline at end of file diff --git a/src/main/resources/devsec.gcubekey b/src/main/resources/devsec.gcubekey new file mode 100644 index 0000000..260f269 --- /dev/null +++ b/src/main/resources/devsec.gcubekey @@ -0,0 +1 @@ +6 4Zð/Uä‰ Cå±ß˜ \ No newline at end of file diff --git a/src/main/resources/gCubeApps.gcubekey b/src/main/resources/gCubeApps.gcubekey new file mode 100644 index 0000000..b113201 --- /dev/null +++ b/src/main/resources/gCubeApps.gcubekey @@ -0,0 +1 @@ +< ¬@Qaj¤F€g¸ðQ \ No newline at end of file diff --git a/src/main/resources/gcube.gcubekey b/src/main/resources/gcube.gcubekey new file mode 100644 index 0000000..260f269 --- /dev/null +++ b/src/main/resources/gcube.gcubekey @@ -0,0 +1 @@ +6 4Zð/Uä‰ Cå±ß˜ \ No newline at end of file diff --git a/src/main/resources/howto.txt b/src/main/resources/howto.txt new file mode 100644 index 0000000..85633be --- /dev/null +++ b/src/main/resources/howto.txt @@ -0,0 +1,6 @@ +You should put the infrastructure decrypt keys here. + +the keys must be in named ".gcubekey", e.g. "gcube.gcubekey" or "devsec.gcubekey" + +The content of this folder is automatically loaded in the classpath when tomcat starts up. + diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties new file mode 100644 index 0000000..87b68a3 --- /dev/null +++ b/src/main/resources/log4j.properties @@ -0,0 +1,20 @@ +# A default log4j configuration for log4j users. +# +# To use this configuration, deploy it into your application's WEB-INF/classes +# directory. You are also encouraged to edit it as you like. + +log4j.rootLogger=DEBUG, stdout, rollingFile + +# Redirect log messages to console +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.out +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n + + +log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender +log4j.appender.rollingFile.File=test.log +log4j.appender.rollingFile.MaxFileSize=20MB +log4j.appender.rollingFile.MaxBackupIndex=2 +log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout +log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n diff --git a/src/main/resources/org/gcube/portlets/admin/authportletmanager/authman.gwt.xml b/src/main/resources/org/gcube/portlets/admin/authportletmanager/authman.gwt.xml new file mode 100644 index 0000000..249b2fd --- /dev/null +++ b/src/main/resources/org/gcube/portlets/admin/authportletmanager/authman.gwt.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/org/gcube/portlets/admin/authportletmanager/client/resource/Auth.css b/src/main/resources/org/gcube/portlets/admin/authportletmanager/client/resource/Auth.css new file mode 100644 index 0000000..61e426d --- /dev/null +++ b/src/main/resources/org/gcube/portlets/admin/authportletmanager/client/resource/Auth.css @@ -0,0 +1,22 @@ +@CHARSET "UTF-8"; + + +.ribbon { + line-height: 13px; + font-size: 11px; +} +#mainPanelLayout_AuthPortlet { + background-color: #d9e2e8; + border-radius: 4px; +} + +.tab-content { + overflow: hidden; + border-right: 1px solid; + border-left: 1px solid #888; + /* padding-top: 10px; */ + padding: 10px 5px 5px 5px; + border-bottom: 1px solid #888; + border-radius: 4px; +} + diff --git a/src/main/resources/org/gcube/portlets/admin/authportletmanager/client/resource/accounting-manager_128.png b/src/main/resources/org/gcube/portlets/admin/authportletmanager/client/resource/accounting-manager_128.png new file mode 100644 index 0000000..b08c968 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/admin/authportletmanager/client/resource/accounting-manager_128.png differ diff --git a/src/main/resources/symm.key b/src/main/resources/symm.key new file mode 100644 index 0000000..260f269 --- /dev/null +++ b/src/main/resources/symm.key @@ -0,0 +1 @@ +6 4Zð/Uä‰ Cå±ß˜ \ No newline at end of file diff --git a/src/main/webapp/AuthPortletManager.css b/src/main/webapp/AuthPortletManager.css new file mode 100644 index 0000000..81ccc90 --- /dev/null +++ b/src/main/webapp/AuthPortletManager.css @@ -0,0 +1,348 @@ +@CHARSET "UTF-8"; + +.gwt-DialogBox { + z-index: 3; + background-color: #ffffff; +} +/* +.gwt-DialogBox .dialogTop { + background-color: #d9e2e8; + border-radius: 4px; + border: 2px solid #888; +} +*/ +.gwt-extras-dialog-controls { + height: 0px; +} + +.gwt-DialogBox .dialogTopCenterInner { + border-left: 2px solid #888; + border-right: 2px solid #888; + border-top: 2px solid #888; + padding: 5px; + background-color: #f3f7fb; +} + +.modal_delete .dialogTopCenterInner { + border-left: 2px solid #888; + border-right: 2px solid #888; + border-top: 2px solid #888; + padding: 5px; + background-color: #f3f7fb; + margin-bottom: -3px; +} + +.modal_delete .dialogMiddleCenterInner { + margin-top: -5px; +} + +.gwt-SuggestBoxPopup .suggestPopupContent { + overflow-y: scroll; + height: 130px; +} + +#mainPanelLayout_AuthPortlet .row { + margin-left: -10px !important; +} + +#mainPanelLayout_AuthPortlet .tab-content { + /* + overflow: hidden !important; + */ + overflow: initial !important; + border: 1px solid #888; + border-radius: 0px 4px 4px 4px; + padding: 20px 5px 5px 5px; +} + +#mainPanelLayout_AuthPortlet .nav { + margin-bottom: 0px !important; + background: white; +} + +#mainPanelLayout_AuthPortlet .nav-tabs { + border-bottom: 0px !important; +} + +#mainPanelLayout_AuthPortlet .nav-tabs>li { + border: 0px solid #888; +} + +#mainPanelLayout_AuthPortlet .nav-tabs>li>a { + padding-top: 6px !important; + padding-bottom: 6px !important; + border: 1px solid #ccc !important; +} + +#mainPanelLayout_AuthPortlet .nav-tabs>.active>a { + border: 1px solid #888 !important; + border-bottom-color: #D9E2E8 !important; + background-color: #D9E2E8 !important; +} + +#mainPanelLayout_AuthPortlet .well { + padding: 0px !important; + background-color: transparent !important; + border: 0px solid #e3e3e3 !important; +} + +/*********************************************************************************************** +BUTTON FILTER +***********************************************************************************************/ +#mainPanelLayout_AuthPortlet .btn_add:before { + color: #333333; + content: "\f067"; + display: inline-block; + font-family: "fontawesome"; +} + +#mainPanelLayout_AuthPortlet .btn_delete:before { + color: #333333; + content: "\f00d"; + display: inline-block; + font-family: "fontawesome"; +} + +#mainPanelLayout_AuthPortlet .btn_group_none:before { + color: #333333; + content: "\f03a"; + display: inline-block; + font-family: "fontawesome"; +} + +#mainPanelLayout_AuthPortlet .btn_group_user:before { + color: #333333; + content: "\f007"; + display: inline-block; + font-family: "fontawesome"; +} + +#mainPanelLayout_AuthPortlet .btn_group_role:before { + color: #333333; + content: "\f0c0"; + display: inline-block; + font-family: "fontawesome"; +} + +#mainPanelLayout_AuthPortlet .btn_group_service:before { + color: #333333; + content: "\f0ae"; + display: inline-block; + font-family: "fontawesome"; +} + +#mainPanelLayout_AuthPortlet .btn_refresh:before { + color: #333333; + content: "\f021"; + display: inline-block; + font-family: "fontawesome"; +} + +#mainPanelLayout_AuthPortlet .breadcrumb { + padding: 2px 2px; +} + +#mainPanelLayout_AuthPortlet .tooltip { + z-index: initial; +} + +#mainPanelLayout_AuthPortlet .tooltip-inner { + z-index: 1090; +} +/*********************************************************************************************** +END BUTTON FILTER +***********************************************************************************************/ +/*********************************************************************************************** +DATA GRID POLICY AND QUOTA +***********************************************************************************************/ +#mainPanelLayout_AuthPortlet .table_policy, #mainPanelLayout_AuthPortlet .table_quote + { + font-size: 12px; +} + +#mainPanelLayout_AuthPortlet .table_policy th:first-child, + #mainPanelLayout_AuthPortlet .table_quote th:first-child { + border-left: 1px solid #BFBFBF; +} + +#mainPanelLayout_AuthPortlet .table_policy th, + #mainPanelLayout_AuthPortlet .table_quote th { + border-right: 1px solid #BFBFBF; + border-top: 2px solid D7DCE0; + border-bottom: 2px solid #BBB; + background-image: linear-gradient(bottom, #D9E2E8 0%, #F3F7FB 100%); + background-image: -o-linear-gradient(bottom, #D9E2E8 0%, #F3F7FB 100%); + background-image: -moz-linear-gradient(bottom, #D9E2E8 0%, #F3F7FB 100%); + background-image: -webkit-linear-gradient(bottom, #D9E2E8 0%, #F3F7FB 100%); + background-image: -ms-linear-gradient(bottom, #D9E2E8 0%, #F3F7FB 100%); + padding: 2px 4px; +} + +/* Override css for selected Row*/ +#mainPanelLayout_AuthPortlet .table_policy .com-google-gwt-user-cellview-client-DataGrid-Style-dataGridSelectedRow, + #mainPanelLayout_AuthPortlet .table_quote .com-google-gwt-user-cellview-client-DataGrid-Style-dataGridSelectedRow + { + background: #B1B1B1 !important; +} + +#mainPanelLayout_AuthPortlet .table_policy .com-google-gwt-user-cellview-client-DataGrid-Style-dataGridSelectedRowCell, + #mainPanelLayout_AuthPortlet .table_quote .com-google-gwt-user-cellview-client-DataGrid-Style-dataGridSelectedRowCell + { + border: 2px solid #D9E2E8; +} + +/* Override css for keyboard selected Row*/ +#mainPanelLayout_AuthPortlet .table_policy .com-google-gwt-user-cellview-client-DataGrid-Style-dataGridKeyboardSelectedRow, + #mainPanelLayout_AuthPortlet .table_quote .com-google-gwt-user-cellview-client-DataGrid-Style-dataGridKeyboardSelectedRow + { + background: none; +} + +#mainPanelLayout_AuthPortlet .table_policy .com-google-gwt-user-cellview-client-DataGrid-Style-dataGridKeyboardSelectedRowCell, + #mainPanelLayout_AuthPortlet .table_quote .com-google-gwt-user-cellview-client-DataGrid-Style-dataGridKeyboardSelectedRowCell + { + border: 2px solid #D9E2E8; +} + +#mainPanelLayout_AuthPortlet .btn_edit:before { + color: #333333; + content: "\f044"; + display: inline-block; + font-family: "fontawesome"; +} + +#mainPanelLayout_AuthPortlet .btn_edit { + margin-right: 10px; +} + +/****BOX LOADING ***/ +.modal_loader { + background: #d9e2e8; + border-radius: 4px; + border: 2px solid #888; + z-index: 2000; +} + +.modal_loader .label_loader { + text-align: center; + display: block; + margin-bottom: 20px; +} + +.modal_loader .progress_loader { + width: 80% +} + +.modal_loader .dialogContent { + padding: 5px; + background: #F3F7FB; +} + +/****BOX ERROR ***/ +.modal_error { + background: #d9e2e8; + border-radius: 4px; + border: 2px solid #D20000; + z-index: 2000; +} + +.icon_error { + text-align: center; + display: block; + margin-bottom: 20px; + color: red; + width: 100% !important; + font-size: 35px; + display: inline-block !important; +} + +.modal_error .label_text_error { + text-align: center; + width: 100%; + display: inline-block; +} + +.modal_error .modal_error .dialogContent { + padding: 5px; + background: #F3F7FB; +} + +/** Add css suggest text. */ +.auto_suggest { + z-index: 20; + background-color: white; + border: 1px solid #ccc; + border-radius: 4px; + padding: 10px; + width: 80%; + height: 65px; + overflow: auto; +} + +ul.input-list-caller { + overflow: hidden; + height: auto !important; + height: 1%; + width: 100%; + /* border: 1px solid #8496ba;*/ + cursor: text; + font-size: 12px; + font-family: Verdana; + min-height: 1px; + z-index: 999; + margin: 0; + padding: 0; + background-color: #fff; +} + +ul.input-list-caller { + list-style-type: none; +} + +ul.input-list-caller li input { + /*border: 0;*/ + width: 100px; + /*padding: 3px 8px;*/ + background-color: white; + margin: 2px 0; +} + +li.token-input-token-facebook { + overflow: hidden; + height: auto !important; + height: 1%; + margin: 3px; + padding: 1px 3px; + background-color: #eff2f7; + color: #000; + cursor: default; + border: 1px solid #ccd5e4; + font-size: 11px; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + float: left; +} + +li.token-input-token-facebook p { + display: inline; + padding: 0; + margin: 0; +} + +li.token-input-token-facebook span { + color: #a6b3cf; + margin-left: 5px; + font-weight: bold; + cursor: pointer; +} + +li.token-input-selected-token-facebook { + background-color: #5670a6; + border: 1px solid #3b5998; + color: #fff; +} + +li.token-input-input-token-facebook { + float: left; +} \ No newline at end of file diff --git a/src/main/webapp/AuthPortletManager.html b/src/main/webapp/AuthPortletManager.html new file mode 100644 index 0000000..d1f5553 --- /dev/null +++ b/src/main/webapp/AuthPortletManager.html @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + +Accounting Manager + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/META-INF/MANIFEST.MF b/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 0000000..0efe656 --- /dev/null +++ b/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Built-By: pieve +Build-Jdk: 1.7.0_80 +Created-By: Maven Integration for Eclipse + diff --git a/src/main/webapp/META-INF/maven/org.gcube.portlets.admin/auth-portlet-manager/pom.properties b/src/main/webapp/META-INF/maven/org.gcube.portlets.admin/auth-portlet-manager/pom.properties new file mode 100644 index 0000000..5e8592b --- /dev/null +++ b/src/main/webapp/META-INF/maven/org.gcube.portlets.admin/auth-portlet-manager/pom.properties @@ -0,0 +1,7 @@ +#Generated by Maven Integration for Eclipse +#Tue Sep 27 14:11:19 CEST 2016 +version=1.0.0-SNAPSHOT +groupId=org.gcube.portlets.admin +m2e.projectName=auth-portlet-manager +m2e.projectLocation=/home/pieve/workspace/auth-portlet-manager +artifactId=auth-portlet-manager diff --git a/src/main/webapp/META-INF/maven/org.gcube.portlets.admin/auth-portlet-manager/pom.xml b/src/main/webapp/META-INF/maven/org.gcube.portlets.admin/auth-portlet-manager/pom.xml new file mode 100644 index 0000000..f981680 --- /dev/null +++ b/src/main/webapp/META-INF/maven/org.gcube.portlets.admin/auth-portlet-manager/pom.xml @@ -0,0 +1,356 @@ + + + + + maven-parent + org.gcube.tools + 1.0.0 + + + + + 4.0.0 + org.gcube.portlets.admin + auth-portlet-manager + 1.0.0-SNAPSHOT + war + + + auth-portlet-manager + auth-portlet-manager + + + https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/admin/auth-portlet-manager + + + + + + Alessandro Pieve + alessandro.pieve@isti.cnr.it + CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" + + architect + developer + + + + + + + + ${project.build.directory}/${project.build.finalName} + distro + config + + + 2.7.0 + + + + ${env.KEYS} + + UTF-8 + UTF-8 + + + + + localRun + + + org.slf4j + slf4j-api + compile + + + org.slf4j + slf4j-log4j12 + runtime + + + + + + + + + + + org.gcube.resources.discovery + ic-client + + + + + + com.google.gwt + gwt-user + ${gwtVersion} + + + + com.google.gwt + gwt-servlet + ${gwtVersion} + + + + + com.github.gwtbootstrap + gwt-bootstrap + + + + + + + org.gcube.portlets.widgets + callout-tour + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + + + com.google.gwt + gwt-dev + + + + + + + + + javax.portlet + portlet-api + provided + + + + + + + org.gcube.core + common-scope-maps + + compile + + + + + + + + + + + + org.gcube.portal + custom-portal-handler + + + + org.gcube.applicationsupportlayer + aslcore + + + + org.gcube.applicationsupportlayer + accesslogger + + + + + + org.gcube.portlets.user + gcube-widgets + compile + + + + + org.gcube.portlets.widgets + session-checker + [0.2.0-SNAPSHOT,1.0.0-SNAPSHOT) + + + + + + + + + + + org.slf4j + slf4j-api + provided + + + org.slf4j + slf4j-log4j12 + provided + + + + + + + + + org.gcube.dvos + usermanagement-core + + + + + + + + + + junit + junit + 4.8.1 + test + + + + + org.gcube.common + common-authorization + compile + + + org.gcube.common + authorization-client + compile + + + + + + + + + + ${webappDirectory}/WEB-INF/classes + + + src/main/resources + + **/*.* + + + + + + + + org.codehaus.mojo + gwt-maven-plugin + ${gwtVersion} + + + + -Xmx1024M -Xss1024k -Dgwt.compiler.localWorkers=1 + + false + + + + compile + test + + + + + AuthPortletManager.html + ${webappDirectory} + org.gcube.portlets.admin.authportletmanager.authman + + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1.1 + + + compile + + + + + ${webappDirectory} + ${project.build.finalName} + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.16 + + false + + + + org.apache.maven.surefire + surefire-junit47 + 2.16 + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + + ${distroDirectory}/descriptor.xml + + + + + servicearchive + install + + single + + + + + + + + + + + + + org.gcube.distribution + maven-portal-bom + LATEST + pom + import + + + + + + + + diff --git a/src/main/webapp/WEB-INF/classes/._.DS_Store b/src/main/webapp/WEB-INF/classes/._.DS_Store new file mode 100644 index 0000000..8ac37fc Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/._.DS_Store differ diff --git a/src/main/webapp/WEB-INF/classes/FARM.gcubekey b/src/main/webapp/WEB-INF/classes/FARM.gcubekey new file mode 100644 index 0000000..b113201 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/FARM.gcubekey @@ -0,0 +1 @@ +< ¬@Qaj¤F€g¸ðQ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/d4science.research-infrastructures.eu.gcubekey b/src/main/webapp/WEB-INF/classes/d4science.research-infrastructures.eu.gcubekey new file mode 100644 index 0000000..b113201 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/d4science.research-infrastructures.eu.gcubekey @@ -0,0 +1 @@ +< ¬@Qaj¤F€g¸ðQ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/devNext.gcubekey b/src/main/webapp/WEB-INF/classes/devNext.gcubekey new file mode 100644 index 0000000..260f269 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/devNext.gcubekey @@ -0,0 +1 @@ +6 4Zð/Uä‰ Cå±ß˜ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/devsec.gcubekey b/src/main/webapp/WEB-INF/classes/devsec.gcubekey new file mode 100644 index 0000000..260f269 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/devsec.gcubekey @@ -0,0 +1 @@ +6 4Zð/Uä‰ Cå±ß˜ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/gCubeApps.gcubekey b/src/main/webapp/WEB-INF/classes/gCubeApps.gcubekey new file mode 100644 index 0000000..b113201 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/gCubeApps.gcubekey @@ -0,0 +1 @@ +< ¬@Qaj¤F€g¸ðQ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/gcube.gcubekey b/src/main/webapp/WEB-INF/classes/gcube.gcubekey new file mode 100644 index 0000000..260f269 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/gcube.gcubekey @@ -0,0 +1 @@ +6 4Zð/Uä‰ Cå±ß˜ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/howto.txt b/src/main/webapp/WEB-INF/classes/howto.txt new file mode 100644 index 0000000..85633be --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/howto.txt @@ -0,0 +1,6 @@ +You should put the infrastructure decrypt keys here. + +the keys must be in named ".gcubekey", e.g. "gcube.gcubekey" or "devsec.gcubekey" + +The content of this folder is automatically loaded in the classpath when tomcat starts up. + diff --git a/src/main/webapp/WEB-INF/classes/log4j.properties b/src/main/webapp/WEB-INF/classes/log4j.properties new file mode 100644 index 0000000..87b68a3 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/log4j.properties @@ -0,0 +1,20 @@ +# A default log4j configuration for log4j users. +# +# To use this configuration, deploy it into your application's WEB-INF/classes +# directory. You are also encouraged to edit it as you like. + +log4j.rootLogger=DEBUG, stdout, rollingFile + +# Redirect log messages to console +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.out +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n + + +log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender +log4j.appender.rollingFile.File=test.log +log4j.appender.rollingFile.MaxFileSize=20MB +log4j.appender.rollingFile.MaxBackupIndex=2 +log4j.appender.rollingFile.layout = org.apache.log4j.PatternLayout +log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n diff --git a/src/main/webapp/WEB-INF/classes/log4j_properties_sample b/src/main/webapp/WEB-INF/classes/log4j_properties_sample new file mode 100644 index 0000000..94fb683 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/log4j_properties_sample @@ -0,0 +1,19 @@ +log4j.rootCategory=TRACE, FILE, CONSOLE + +# Direct log messages to a log file +log4j.appender.FILE=org.apache.log4j.RollingFileAppender +#Redirect to Tomcat logs folder +#log4j.appender.FILE.File=C:\\logging.log +log4j.appender.FILE.File=${catalina.home}/webapps/accounting-manager/logs/AccountingManagerLog4j.log +log4j.appender.FILE.MaxFileSize=10MB +log4j.appender.FILE.MaxBackupIndex=10 +log4j.appender.FILE.layout=org.apache.log4j.PatternLayout +log4j.appender.FILE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n + +# Console log +log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender +log4j.appender.CONSOLE.Target=System.out +log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout +log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/logback_xml_sample b/src/main/webapp/WEB-INF/classes/logback_xml_sample new file mode 100644 index 0000000..05aadca --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/logback_xml_sample @@ -0,0 +1,46 @@ + + + + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + ${CATALINA_HOME}/webapps/accounting-manager/logs/AccountingManagerLogBack.log + + + + AccountingManager.%d{yyyy-MM-dd}.log + + + 30 + + + + + + + + %d [%thread] %-5level %logger{35} - %msg%n + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/logging_properties_sample b/src/main/webapp/WEB-INF/classes/logging_properties_sample new file mode 100644 index 0000000..13acde2 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/logging_properties_sample @@ -0,0 +1 @@ +debug.com.sun.portal.level=WARNING \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/org/._.DS_Store b/src/main/webapp/WEB-INF/classes/org/._.DS_Store new file mode 100644 index 0000000..8ac37fc Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/._.DS_Store differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/._.DS_Store b/src/main/webapp/WEB-INF/classes/org/gcube/._.DS_Store new file mode 100644 index 0000000..8ac37fc Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/._.DS_Store differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/TestAuthPortletMananger.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/TestAuthPortletMananger.class new file mode 100644 index 0000000..83b8f1b Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/TestAuthPortletMananger.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/authman.gwt.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/authman.gwt.xml new file mode 100644 index 0000000..bf9ff55 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/authman.gwt.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManager$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManager$1.class new file mode 100644 index 0000000..7cda950 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManager$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManager$2.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManager$2.class new file mode 100644 index 0000000..25a7761 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManager$2.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManager.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManager.class new file mode 100644 index 0000000..de322e4 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManager.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$1.class new file mode 100644 index 0000000..c3d9c2c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$10.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$10.class new file mode 100644 index 0000000..0db1197 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$10.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$11.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$11.class new file mode 100644 index 0000000..2510303 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$11.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$12.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$12.class new file mode 100644 index 0000000..d4b63bd Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$12.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$13.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$13.class new file mode 100644 index 0000000..1c1028b Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$13.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$14.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$14.class new file mode 100644 index 0000000..2a834f1 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$14.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$15.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$15.class new file mode 100644 index 0000000..a37c51a Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$15.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$16.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$16.class new file mode 100644 index 0000000..71141cb Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$16.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$17.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$17.class new file mode 100644 index 0000000..c55fd44 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$17.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$18.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$18.class new file mode 100644 index 0000000..1031f78 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$18.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$19.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$19.class new file mode 100644 index 0000000..3f51c6a Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$19.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$2.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$2.class new file mode 100644 index 0000000..8e01134 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$2.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$20.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$20.class new file mode 100644 index 0000000..41041dd Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$20.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$21.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$21.class new file mode 100644 index 0000000..7bb5184 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$21.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$22.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$22.class new file mode 100644 index 0000000..5a31041 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$22.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$3.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$3.class new file mode 100644 index 0000000..f2e2183 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$3.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$4.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$4.class new file mode 100644 index 0000000..c4c1c20 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$4.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$5.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$5.class new file mode 100644 index 0000000..514de7c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$5.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$6.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$6.class new file mode 100644 index 0000000..b185f4b Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$6.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$7.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$7.class new file mode 100644 index 0000000..9f6a750 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$7.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$8.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$8.class new file mode 100644 index 0000000..68a087c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$8.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$9.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$9.class new file mode 100644 index 0000000..5db9bc0 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController$9.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController.class new file mode 100644 index 0000000..ee27bd5 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/AuthManagerController.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/Entities$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/Entities$1.class new file mode 100644 index 0000000..d26ddd0 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/Entities$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/Entities.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/Entities.class new file mode 100644 index 0000000..b11c0ce Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/Entities.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPoliciesEvent$AddPoliciesEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPoliciesEvent$AddPoliciesEventHandler.class new file mode 100644 index 0000000..f5e9f90 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPoliciesEvent$AddPoliciesEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPoliciesEvent$HasAddPoliciesEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPoliciesEvent$HasAddPoliciesEventHandler.class new file mode 100644 index 0000000..bd5149c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPoliciesEvent$HasAddPoliciesEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPoliciesEvent.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPoliciesEvent.class new file mode 100644 index 0000000..77a225d Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPoliciesEvent.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPolicyEventOld$AddPolicyEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPolicyEventOld$AddPolicyEventHandler.class new file mode 100644 index 0000000..1b94dfa Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPolicyEventOld$AddPolicyEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPolicyEventOld$HasAddPolicyEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPolicyEventOld$HasAddPolicyEventHandler.class new file mode 100644 index 0000000..cbf9b35 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPolicyEventOld$HasAddPolicyEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPolicyEventOld.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPolicyEventOld.class new file mode 100644 index 0000000..131994a Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddPolicyEventOld.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddQuoteEvent$AddQuoteEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddQuoteEvent$AddQuoteEventHandler.class new file mode 100644 index 0000000..d29445c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddQuoteEvent$AddQuoteEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddQuoteEvent$HasAddQuoteEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddQuoteEvent$HasAddQuoteEventHandler.class new file mode 100644 index 0000000..0a9b76a Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddQuoteEvent$HasAddQuoteEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddQuoteEvent.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddQuoteEvent.class new file mode 100644 index 0000000..0b6821c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/AddQuoteEvent.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListPolicyEvent$HasListPolicyEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListPolicyEvent$HasListPolicyEventHandler.class new file mode 100644 index 0000000..9a5cdad Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListPolicyEvent$HasListPolicyEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListPolicyEvent$ListPolicyEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListPolicyEvent$ListPolicyEventHandler.class new file mode 100644 index 0000000..aa4c7c9 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListPolicyEvent$ListPolicyEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListPolicyEvent.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListPolicyEvent.class new file mode 100644 index 0000000..acc4e73 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListPolicyEvent.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListQuoteEvent$HasListQuoteEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListQuoteEvent$HasListQuoteEventHandler.class new file mode 100644 index 0000000..87455f0 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListQuoteEvent$HasListQuoteEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListQuoteEvent$ListQuoteEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListQuoteEvent$ListQuoteEventHandler.class new file mode 100644 index 0000000..dac1ccc Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListQuoteEvent$ListQuoteEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListQuoteEvent.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListQuoteEvent.class new file mode 100644 index 0000000..2ae791e Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/ListQuoteEvent.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePoliciesEvent$HasRemovePoliciesEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePoliciesEvent$HasRemovePoliciesEventHandler.class new file mode 100644 index 0000000..1846f8c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePoliciesEvent$HasRemovePoliciesEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePoliciesEvent$RemovePoliciesEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePoliciesEvent$RemovePoliciesEventHandler.class new file mode 100644 index 0000000..68d784e Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePoliciesEvent$RemovePoliciesEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePoliciesEvent.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePoliciesEvent.class new file mode 100644 index 0000000..2a1fa36 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePoliciesEvent.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePolicyEventOLDKO$HasRemovePolicyEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePolicyEventOLDKO$HasRemovePolicyEventHandler.class new file mode 100644 index 0000000..45b7ebd Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePolicyEventOLDKO$HasRemovePolicyEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePolicyEventOLDKO$RemovePolicyEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePolicyEventOLDKO$RemovePolicyEventHandler.class new file mode 100644 index 0000000..c46d178 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePolicyEventOLDKO$RemovePolicyEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePolicyEventOLDKO.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePolicyEventOLDKO.class new file mode 100644 index 0000000..59de194 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemovePolicyEventOLDKO.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemoveQuoteEvent$HasRemoveQuoteEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemoveQuoteEvent$HasRemoveQuoteEventHandler.class new file mode 100644 index 0000000..9a0ccd8 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemoveQuoteEvent$HasRemoveQuoteEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemoveQuoteEvent$RemoveQuoteEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemoveQuoteEvent$RemoveQuoteEventHandler.class new file mode 100644 index 0000000..d3c7083 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemoveQuoteEvent$RemoveQuoteEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemoveQuoteEvent.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemoveQuoteEvent.class new file mode 100644 index 0000000..c73307c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/RemoveQuoteEvent.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdatePolicyEvent$HasUpdatePolicyEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdatePolicyEvent$HasUpdatePolicyEventHandler.class new file mode 100644 index 0000000..a3bd85d Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdatePolicyEvent$HasUpdatePolicyEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdatePolicyEvent$UpdatePolicyEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdatePolicyEvent$UpdatePolicyEventHandler.class new file mode 100644 index 0000000..2503ec7 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdatePolicyEvent$UpdatePolicyEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdatePolicyEvent.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdatePolicyEvent.class new file mode 100644 index 0000000..6fe7359 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdatePolicyEvent.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdateQuoteEvent$HasUpdateQuoteEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdateQuoteEvent$HasUpdateQuoteEventHandler.class new file mode 100644 index 0000000..8b4324c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdateQuoteEvent$HasUpdateQuoteEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdateQuoteEvent$UpdateQuoteEventHandler.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdateQuoteEvent$UpdateQuoteEventHandler.class new file mode 100644 index 0000000..f1f6650 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdateQuoteEvent$UpdateQuoteEventHandler.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdateQuoteEvent.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdateQuoteEvent.class new file mode 100644 index 0000000..c3c7364 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/event/UpdateQuoteEvent.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/CheckCellHead.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/CheckCellHead.class new file mode 100644 index 0000000..7140031 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/CheckCellHead.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService$1.class new file mode 100644 index 0000000..4c45ecd Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService$2.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService$2.class new file mode 100644 index 0000000..8e4887b Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService$2.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService$Binder.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService$Binder.class new file mode 100644 index 0000000..3fd59c4 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService$Binder.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService.class new file mode 100644 index 0000000..9d457db Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService.ui.xml new file mode 100644 index 0000000..378d255 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerService.ui.xml @@ -0,0 +1,105 @@ + + + + .panel { + background-color: #d9e2e8; + padding: 10px; + border-left: 2px solid #888; + border-right: 2px solid #888; + border-bottom: 2px solid #888; + } + + .panel_text { + background-color: #F3F7FB; + border-radius: 4px; + border: 1px solid #ccc; + padding: 10px; + } + + .panel_center { + margin-left: 10px; + margin-right: 10px; + } + + .panel_right { + margin-top: 20px; + height: 200px; + } + + .r_loader_space { + margin-top: 10px; + text-align: center; + height: 30px; + width: auto; + } + + .footer_dialog { + text-align: right; + margin-top: 20px; + } + + .button_dialog { + margin-left: 10px; + } + + .row_element { + margin-top: 10px; + } + + + + + + + + + + + Service Class + + + + + Service Name + + + + + Service Id + + + + + + + + + + + + + + + + + + + + + + + + + Add + Close + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole$1.class new file mode 100644 index 0000000..950b589 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole$Binder.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole$Binder.class new file mode 100644 index 0000000..7521175 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole$Binder.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole.class new file mode 100644 index 0000000..702e745 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole.ui.xml new file mode 100644 index 0000000..5fa0ca6 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogAddMultipleCallerUserRole.ui.xml @@ -0,0 +1,75 @@ + + + + .panel { + background-color: #d9e2e8; + padding: 10px; + border-left: 2px solid #888; + border-right: 2px solid #888; + border-bottom: 2px solid #888; + /* + border-radius: 4px; + border: 2px solid #888; + width: 80%; + margin-left: 10%; + */ + } + .panel_text { + background-color: #F3F7FB; + border-radius: 4px; + border: 1px solid #ccc; + padding: 10px; + } + + .r_loader_space { + margin-top: 10px; + text-align: center; + height: 30px; + width: auto; + } + + .footer_dialog { + text-align: right; + margin-top: 20px; + } + + .button_dialog { + margin-left: 10px; + } + + + + + + Type Caller + + All + Role + User + + + + + + + + + + + + + + + + + Add + Close + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogError$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogError$1.class new file mode 100644 index 0000000..622e440 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogError$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogError.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogError.class new file mode 100644 index 0000000..e3a1bd3 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogError.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogLoader.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogLoader.class new file mode 100644 index 0000000..9a68c17 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/DialogLoader.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout$HeaderLayoutUiBinder.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout$HeaderLayoutUiBinder.class new file mode 100644 index 0000000..5e9734d Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout$HeaderLayoutUiBinder.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout.class new file mode 100644 index 0000000..6cc57d5 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout.ui.xml new file mode 100644 index 0000000..e09a3bd --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/HeaderLayout.ui.xml @@ -0,0 +1,11 @@ + + + + + + Management + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog$1.class new file mode 100644 index 0000000..2c767a0 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog$2.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog$2.class new file mode 100644 index 0000000..172bed6 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog$2.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog$3.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog$3.class new file mode 100644 index 0000000..65155cb Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog$3.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog$Binder.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog$Binder.class new file mode 100644 index 0000000..482ad38 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog$Binder.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.class new file mode 100644 index 0000000..5f9ec1f Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.ui.xml new file mode 100644 index 0000000..f01bc4a --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyAddDialog.ui.xml @@ -0,0 +1,110 @@ + + + + .panel { + background-color: #d9e2e8; + padding: 10px; + border-left: 2px solid #888; + border-right: 2px solid #888; + border-bottom: 2px solid #888; + } + .panel_text { + background-color: #F3F7FB; + border-radius: 4px; + border: 2px solid #ccc; + padding: 10px; + } + .r_loader_space { + /*margin-top:10px;*/ + text-align: center; + height: 30px; + margin-bottom: 10px; + margin-right: 20px; + } + .row_element { + margin-top: 10px; + } + .footer_dialog { + padding-right: 20px; + text-align: right; + } + .button_dialog { + margin-left: 10px; + } + .margin_left{ + margin-left: 10px; + } + + + + + + + Caller + + + + All Users + + + All Role + + + Except + + + + + + + + + Add + User/Role + + + Add + Service + + + + + + Service Class + + + + + Service Name + + + + + Service Id + + + + + + + Access + + + + + + + + + + + + Save + Close + + + + diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$1.class new file mode 100644 index 0000000..7c6958f Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$10.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$10.class new file mode 100644 index 0000000..dd86cf2 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$10.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$11.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$11.class new file mode 100644 index 0000000..c29f89c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$11.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$12.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$12.class new file mode 100644 index 0000000..bf0e7da Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$12.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$13.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$13.class new file mode 100644 index 0000000..336c919 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$13.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$14.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$14.class new file mode 100644 index 0000000..751d830 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$14.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$15.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$15.class new file mode 100644 index 0000000..840aad1 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$15.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$16.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$16.class new file mode 100644 index 0000000..18c9ae9 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$16.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$2.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$2.class new file mode 100644 index 0000000..9c8fc58 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$2.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$3.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$3.class new file mode 100644 index 0000000..64e1b84 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$3.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$4.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$4.class new file mode 100644 index 0000000..18bb4ec Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$4.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$5.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$5.class new file mode 100644 index 0000000..1df1c45 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$5.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$6.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$6.class new file mode 100644 index 0000000..c6a8a75 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$6.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$7.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$7.class new file mode 100644 index 0000000..8bf67eb Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$7.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$8.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$8.class new file mode 100644 index 0000000..1951736 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$8.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$9.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$9.class new file mode 100644 index 0000000..6561da2 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$9.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$ActionHasCell.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$ActionHasCell.class new file mode 100644 index 0000000..01a07ff Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$ActionHasCell.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$PolicyDataGridUiBinder.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$PolicyDataGridUiBinder.class new file mode 100644 index 0000000..2b8225f Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid$PolicyDataGridUiBinder.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid.class new file mode 100644 index 0000000..233471a Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid.ui.xml new file mode 100644 index 0000000..f2dc353 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataGrid.ui.xml @@ -0,0 +1,34 @@ + + + + + .cellTable { + border-bottom: 1px solid #ccc; + text-align: left; + margin-bottom: 4px; + } + + + + + + + + + +
+ +
+ +
+ + + + + + +
+ +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataProvider.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataProvider.class new file mode 100644 index 0000000..ade6e30 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDataProvider.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDeleteDialog$Binder.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDeleteDialog$Binder.class new file mode 100644 index 0000000..7122cc8 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDeleteDialog$Binder.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDeleteDialog.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDeleteDialog.class new file mode 100644 index 0000000..feb3f4a Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDeleteDialog.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDeleteDialog.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDeleteDialog.ui.xml new file mode 100644 index 0000000..15b58d4 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyDeleteDialog.ui.xml @@ -0,0 +1,63 @@ + + + + .panel { + background-color: #d9e2e8; + padding: 10px; + border-left: 2px solid #888; + border-right: 2px solid #888; + border-bottom: 2px solid #888; + } + + .panel_text { + background-color: #F3F7FB; + border-radius: 4px; + border: 1px solid #ccc; + padding: 11px; + } + + .r_loader_space { + margin-top: 10px; + text-align: center; + margin-bottom: 20px; + width: 100%; + margin-left: 0px; + } + + .footer_dialog { + text-align: right; + } + + .button_dialog { + margin-left: 10px; + } + + .label_summary { + text-align: center; + width: 100%; + margin-left: 5px; + } + + + + + + + + Confirm Delete ? + + + + + + NO + YES + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter$1.class new file mode 100644 index 0000000..72f7963 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter$2.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter$2.class new file mode 100644 index 0000000..ec50db2 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter$2.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter$PolicyFilterUiBinder.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter$PolicyFilterUiBinder.class new file mode 100644 index 0000000..e497967 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter$PolicyFilterUiBinder.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter.class new file mode 100644 index 0000000..8de8975 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter.ui.xml new file mode 100644 index 0000000..3cc10b2 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/PolicyFilter.ui.xml @@ -0,0 +1,123 @@ + + + + .txt_search { + border-radius: 0px !important; + margin-bottom: 0px !important; + } + + .btn_search { + border-radius: 0px 8px 8px 0 !important; + -webkit-border-radius: 0px 8px 8px 0 !important;; + -moz-border-radius: 0px 8px 8px 0 !important; + margin-right: 30px !important; + } + + .btn_search_start { + -webkit-border-radius: 0px; + border-radius: 0px !important; + } + .btn_search_start:before { + color: #333333; + content: "\f036"; + display: inline-block; + font-family: "fontawesome"; + } + + .btn_search_contains { + -webkit-border-radius: 0px; + border-radius: 0px !important; + } + + .btn_search_contains:before { + color: #333333; + content: "\f039"; + display: inline-block; + font-family: "fontawesome"; + } + .filter_bar { + height: 30px; + padding: 2px; + background-color: #fff; + border-radius: 4px; + } + .label_wizard_policy { + margin-left: 10 px; + font-size: 15 px; + font-weight: 600; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Search + + + + + + + + + + + + + + + + + + + + + + Create policy to deny access to Services + in the current context + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter$1.class new file mode 100644 index 0000000..f803f60 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter$2.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter$2.class new file mode 100644 index 0000000..67a1b74 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter$2.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter$QuotaFilterUiBinder.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter$QuotaFilterUiBinder.class new file mode 100644 index 0000000..ae94c60 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter$QuotaFilterUiBinder.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter.class new file mode 100644 index 0000000..b7e733e Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter.ui.xml new file mode 100644 index 0000000..f8e27b0 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuotaFilter.ui.xml @@ -0,0 +1,125 @@ + + + + .txt_search { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px !important; + margin-bottom: 0 !important; + } + + .btn_search { + border-radius: 0px 8px 8px 0 !important; + -webkit-border-radius: 0px 8px 8px 0 !important;; + -moz-border-radius: 0px 8px 8px 0 !important; + margin-right: 30px !important; + } + + .btn_search_start { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px !important; + } + + .btn_search_start:before { + color: #333333; + content: "\f036"; + display: inline-block; + font-family: "fontawesome"; + } + + .btn_search_contains { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px !important; + } + + .btn_search_contains:before { + color: #333333; + content: "\f039"; + display: inline-block; + font-family: "fontawesome"; + } + + .filter_bar { + height: 30px; + padding: 2px; + background-color: #fff; + border-radius: 4px; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Search + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog$1.class new file mode 100644 index 0000000..99446fd Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog$2.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog$2.class new file mode 100644 index 0000000..665309d Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog$2.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog$Binder.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog$Binder.class new file mode 100644 index 0000000..1ee72c0 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog$Binder.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog.class new file mode 100644 index 0000000..7dddbcc Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog.ui.xml new file mode 100644 index 0000000..52a7ef0 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteAddDialog.ui.xml @@ -0,0 +1,123 @@ + + + + .panel { + background-color: #d9e2e8; + padding: 10px; + border-left: 2px solid #888; + border-right: 2px solid #888; + border-bottom: 2px solid #888; + /* + border-radius: 4px; + border: 2px solid #888; + width: 80%; + margin-left: 10%; + */ + } + + .panel_text { + background-color: #F3F7FB; + border-radius: 4px; + border: 1px solid #ccc; + padding: 10px; + } + + .r_loader_space { + /*margin-top:10px;*/ + text-align: center; + height: 30px; + margin-bottom: 10px; + margin-right: 20px; + } + + .row_element { + margin-top: 10px; + } + + .footer_dialog { + padding-right: 20px; + text-align: right; + } + + .button_dialog { + margin-left: 10px; + } + + + + + + + + + + Caller + + + + All Users + + + All Role + + + Except + + + + + + + + + Add + Caller + + + + + + + + + + Time + + + + + + + + Type + + + + + + + + + + Quota + + + + + + + + + + + + + Save + Close + + + + diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$1.class new file mode 100644 index 0000000..152628d Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$10.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$10.class new file mode 100644 index 0000000..60cbaea Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$10.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$11.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$11.class new file mode 100644 index 0000000..3514e5f Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$11.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$12.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$12.class new file mode 100644 index 0000000..4db8b09 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$12.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$13.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$13.class new file mode 100644 index 0000000..56e5066 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$13.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$14.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$14.class new file mode 100644 index 0000000..962cfcc Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$14.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$15.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$15.class new file mode 100644 index 0000000..2256cb8 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$15.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$16.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$16.class new file mode 100644 index 0000000..4b53cc5 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$16.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$2.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$2.class new file mode 100644 index 0000000..34d2ce5 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$2.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$3.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$3.class new file mode 100644 index 0000000..741e6da Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$3.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$4.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$4.class new file mode 100644 index 0000000..c52753c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$4.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$5.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$5.class new file mode 100644 index 0000000..3a7d54b Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$5.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$6.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$6.class new file mode 100644 index 0000000..9fe6394 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$6.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$7.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$7.class new file mode 100644 index 0000000..4d61fd5 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$7.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$8.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$8.class new file mode 100644 index 0000000..fd5df42 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$8.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$9.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$9.class new file mode 100644 index 0000000..67d4f06 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$9.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$ActionHasCell.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$ActionHasCell.class new file mode 100644 index 0000000..08575a9 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$ActionHasCell.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$QuoteDataGridUiBinder.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$QuoteDataGridUiBinder.class new file mode 100644 index 0000000..8d277c6 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid$QuoteDataGridUiBinder.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid.class new file mode 100644 index 0000000..d904d96 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid.ui.xml new file mode 100644 index 0000000..f2dc353 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataGrid.ui.xml @@ -0,0 +1,34 @@ + + + + + .cellTable { + border-bottom: 1px solid #ccc; + text-align: left; + margin-bottom: 4px; + } + + + + + + + + + +
+ +
+ +
+ + + + + + +
+ +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataProvider.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataProvider.class new file mode 100644 index 0000000..877c688 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDataProvider.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDeleteDialog$Binder.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDeleteDialog$Binder.class new file mode 100644 index 0000000..4eb668d Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDeleteDialog$Binder.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDeleteDialog.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDeleteDialog.class new file mode 100644 index 0000000..c9357d7 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDeleteDialog.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDeleteDialog.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDeleteDialog.ui.xml new file mode 100644 index 0000000..dbfe13f --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/QuoteDeleteDialog.ui.xml @@ -0,0 +1,67 @@ + + + + .panel { + background-color: #d9e2e8; + border-radius: 4px; + border: 2px solid #888; + /*padding: 10px;*/ + width: 80%; + margin-left: 10%; + } + + .panel_text { + background-color: #F3F7FB; + border-radius: 4px; + border: 1px solid #ccc; + padding: 10px; + } + + .r_loader_space { + margin-top: 10px; + text-align: center; + /*height:30px;*/ + margin-bottom: 20px; + width: 100%; + margin-left: 0px; + } + + .footer_dialog { + text-align: right; + } + + .button_dialog { + margin-left: 10px; + } + + .label_summary { + text-align: center; + width: 100%; + margin-left: 5px; + } + + + + + + + + Confirm Delete ? + + + + + + + + NO + YES + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/ResizableHeader$ColumnResizeHelper.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/ResizableHeader$ColumnResizeHelper.class new file mode 100644 index 0000000..4bf5e4c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/ResizableHeader$ColumnResizeHelper.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/ResizableHeader$HeaderCell.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/ResizableHeader$HeaderCell.class new file mode 100644 index 0000000..e2342a5 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/ResizableHeader$HeaderCell.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/ResizableHeader.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/ResizableHeader.class new file mode 100644 index 0000000..ff6c9b9 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/ResizableHeader.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/SidebarLayout.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/SidebarLayout.ui.xml new file mode 100644 index 0000000..36502bf --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/pagelayout/SidebarLayout.ui.xml @@ -0,0 +1,96 @@ + + + + .form_search { + margin-bottom: 0px; + min-height: 20px; + padding: 19px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.05); + box-shadow: inset 0 1px 1px rgba(0,0,0,0.05); + border-bottom: 0px; + border-radius: 0px; + } + .select{ + padding-top: 20px; + padding-bottom: 20px; + height: 229px !important; + border-radius: 0px; + width: 291px; + border: 0px; + background: whitesmoke; + overflow-y: auto; + } + + + + + + All Users + All Roles + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/._accounting-manager_128.png b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/._accounting-manager_128.png new file mode 100644 index 0000000..82184a8 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/._accounting-manager_128.png differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/Auth.css b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/Auth.css new file mode 100644 index 0000000..61e426d --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/Auth.css @@ -0,0 +1,22 @@ +@CHARSET "UTF-8"; + + +.ribbon { + line-height: 13px; + font-size: 11px; +} +#mainPanelLayout_AuthPortlet { + background-color: #d9e2e8; + border-radius: 4px; +} + +.tab-content { + overflow: hidden; + border-right: 1px solid; + border-left: 1px solid #888; + /* padding-top: 10px; */ + padding: 10px 5px 5px 5px; + border-bottom: 1px solid #888; + border-radius: 4px; +} + diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/AuthCSS.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/AuthCSS.class new file mode 100644 index 0000000..f9a57c3 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/AuthCSS.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/AuthResources.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/AuthResources.class new file mode 100644 index 0000000..1c921ba Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/AuthResources.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/accounting-manager_128.png b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/accounting-manager_128.png new file mode 100644 index 0000000..b08c968 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/accounting-manager_128.png differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/loaderCircle.gif b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/loaderCircle.gif new file mode 100644 index 0000000..7546107 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/loaderCircle.gif differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/loaderHorizontal.gif b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/loaderHorizontal.gif new file mode 100644 index 0000000..2fd2286 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/resource/loaderHorizontal.gif differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/rpc/AuthManagerService.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/rpc/AuthManagerService.class new file mode 100644 index 0000000..c029dd6 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/rpc/AuthManagerService.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/rpc/AuthManagerServiceAsync.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/rpc/AuthManagerServiceAsync.class new file mode 100644 index 0000000..39e8cfa Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/rpc/AuthManagerServiceAsync.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/ActionCellClass.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/ActionCellClass.class new file mode 100644 index 0000000..bfad3ab Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/ActionCellClass.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/BulletList.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/BulletList.class new file mode 100644 index 0000000..68f1b59 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/BulletList.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$1.class new file mode 100644 index 0000000..6c34fd1 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$2.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$2.class new file mode 100644 index 0000000..2e61198 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$2.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$3.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$3.class new file mode 100644 index 0000000..804587d Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$3.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$4.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$4.class new file mode 100644 index 0000000..fabf0c0 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$4.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$5.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$5.class new file mode 100644 index 0000000..e35f75a Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$5.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$6.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$6.class new file mode 100644 index 0000000..23e987f Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$6.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$7.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$7.class new file mode 100644 index 0000000..103d9df Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$7.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$8.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$8.class new file mode 100644 index 0000000..b8ca804 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$8.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$9.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$9.class new file mode 100644 index 0000000..0e2da04 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget$9.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget.class new file mode 100644 index 0000000..a959655 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/InputListWidget.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/ListItem.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/ListItem.class new file mode 100644 index 0000000..3561a1c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/ListItem.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/MultipleTextBox.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/MultipleTextBox.class new file mode 100644 index 0000000..eae59c4 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/MultipleTextBox.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/Paragraph.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/Paragraph.class new file mode 100644 index 0000000..354a8f5 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/Paragraph.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/PickList$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/PickList$1.class new file mode 100644 index 0000000..3db0694 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/PickList$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/PickList$PickListUiBinder.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/PickList$PickListUiBinder.class new file mode 100644 index 0000000..fd8c910 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/PickList$PickListUiBinder.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/PickList.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/PickList.class new file mode 100644 index 0000000..63c7cac Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/PickList.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/PickList.ui.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/PickList.ui.xml new file mode 100644 index 0000000..d6a1479 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/PickList.ui.xml @@ -0,0 +1,34 @@ + + + + .width_select { + width: 200px !important; + } + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/Span.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/Span.class new file mode 100644 index 0000000..44fd760 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/Span.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/WindowBox$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/WindowBox$1.class new file mode 100644 index 0000000..8b385b3 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/WindowBox$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/WindowBox$2.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/WindowBox$2.class new file mode 100644 index 0000000..8ebe0d2 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/WindowBox$2.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/WindowBox.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/WindowBox.class new file mode 100644 index 0000000..cd1f22a Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/client/widget/WindowBox.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/AuthServiceImpl.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/AuthServiceImpl.class new file mode 100644 index 0000000..20eec27 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/AuthServiceImpl.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/ExpiredSessionServiceException.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/ExpiredSessionServiceException.class new file mode 100644 index 0000000..c270b65 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/ExpiredSessionServiceException.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/ServiceResult.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/ServiceResult.class new file mode 100644 index 0000000..6e6a372 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/ServiceResult.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/SessionUtil.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/SessionUtil.class new file mode 100644 index 0000000..7505a48 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/SessionUtil.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/TableUtils.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/TableUtils.class new file mode 100644 index 0000000..51a1339 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/TableUtils.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/portlet/AccountingManagerPortlet.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/portlet/AccountingManagerPortlet.class new file mode 100644 index 0000000..d10bb46 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/portlet/AccountingManagerPortlet.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/portlet/AuthManagerPortlet.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/portlet/AuthManagerPortlet.class new file mode 100644 index 0000000..461af1a Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/server/portlet/AuthManagerPortlet.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Access.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Access.class new file mode 100644 index 0000000..24695f3 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Access.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Caller$TypeCaller.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Caller$TypeCaller.class new file mode 100644 index 0000000..2cf18c7 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Caller$TypeCaller.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Caller.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Caller.class new file mode 100644 index 0000000..c23b208 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Caller.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Constants.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Constants.class new file mode 100644 index 0000000..9c2a919 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Constants.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/ConstantsSharing.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/ConstantsSharing.class new file mode 100644 index 0000000..bb709fb Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/ConstantsSharing.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/PolicyAuth.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/PolicyAuth.class new file mode 100644 index 0000000..61ebd31 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/PolicyAuth.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Quote$ManagerType.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Quote$ManagerType.class new file mode 100644 index 0000000..49921ba Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Quote$ManagerType.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Quote$TimeInterval.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Quote$TimeInterval.class new file mode 100644 index 0000000..101617b Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Quote$TimeInterval.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Quote.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Quote.class new file mode 100644 index 0000000..1459bc5 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Quote.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Role.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Role.class new file mode 100644 index 0000000..6fa9d13 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Role.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Service.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Service.class new file mode 100644 index 0000000..16998d2 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/Service.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/ServiceSelection.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/ServiceSelection.class new file mode 100644 index 0000000..407ad64 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/ServiceSelection.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/TypeIdentifier.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/TypeIdentifier.class new file mode 100644 index 0000000..ee7f2e6 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/TypeIdentifier.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/User.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/User.class new file mode 100644 index 0000000..b415469 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/User.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/exceptions/ExpiredSessionServiceException.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/exceptions/ExpiredSessionServiceException.class new file mode 100644 index 0000000..3cbbed3 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/exceptions/ExpiredSessionServiceException.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/exceptions/ServiceException.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/exceptions/ServiceException.class new file mode 100644 index 0000000..95c280d Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/exceptions/ServiceException.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/exceptions/TypeCallerException.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/exceptions/TypeCallerException.class new file mode 100644 index 0000000..0a24a4b Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/admin/authportletmanager/shared/exceptions/TypeCallerException.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/TestAuthPortletMananger.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/TestAuthPortletMananger.class new file mode 100644 index 0000000..60ef814 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/TestAuthPortletMananger.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/authman.gwt.xml b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/authman.gwt.xml new file mode 100644 index 0000000..85eda88 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/authman.gwt.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/AuthManager$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/AuthManager$1.class new file mode 100644 index 0000000..b59c9a4 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/AuthManager$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/AuthManager.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/AuthManager.class new file mode 100644 index 0000000..1ffee3d Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/AuthManager.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/AuthManagerController$1.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/AuthManagerController$1.class new file mode 100644 index 0000000..5e9c993 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/AuthManagerController$1.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/AuthManagerController.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/AuthManagerController.class new file mode 100644 index 0000000..db6ab95 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/AuthManagerController.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/resource/Auth.css b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/resource/Auth.css new file mode 100644 index 0000000..57cee7a --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/resource/Auth.css @@ -0,0 +1,7 @@ +@CHARSET "UTF-8"; + + +.ribbon { + line-height: 13px; + font-size: 11px; +} diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/resource/AuthCSS.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/resource/AuthCSS.class new file mode 100644 index 0000000..fe3a4af Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/resource/AuthCSS.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/resource/AuthResources.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/resource/AuthResources.class new file mode 100644 index 0000000..1595fc0 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/resource/AuthResources.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/resource/accounting-manager_128.png b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/resource/accounting-manager_128.png new file mode 100644 index 0000000..b08c968 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/resource/accounting-manager_128.png differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/rpc/AuthManagerService.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/rpc/AuthManagerService.class new file mode 100644 index 0000000..eb2dbce Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/rpc/AuthManagerService.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/rpc/AuthManagerServiceAsync.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/rpc/AuthManagerServiceAsync.class new file mode 100644 index 0000000..eb93171 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/client/rpc/AuthManagerServiceAsync.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/server/AuthServiceImpl.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/server/AuthServiceImpl.class new file mode 100644 index 0000000..a73157c Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/server/AuthServiceImpl.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/server/SessionUtil.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/server/SessionUtil.class new file mode 100644 index 0000000..f051a2d Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/server/SessionUtil.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/server/portlet/AccountingManagerPortlet.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/server/portlet/AccountingManagerPortlet.class new file mode 100644 index 0000000..bd9deeb Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/server/portlet/AccountingManagerPortlet.class differ diff --git a/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/shared/Constants.class b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/shared/Constants.class new file mode 100644 index 0000000..6607e70 Binary files /dev/null and b/src/main/webapp/WEB-INF/classes/org/gcube/portlets/user/authportletmanager/shared/Constants.class differ diff --git a/src/main/webapp/WEB-INF/classes/symm.key b/src/main/webapp/WEB-INF/classes/symm.key new file mode 100644 index 0000000..260f269 --- /dev/null +++ b/src/main/webapp/WEB-INF/classes/symm.key @@ -0,0 +1 @@ +6 4Zð/Uä‰ Cå±ß˜ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/AuthPortletManager_view.jsp b/src/main/webapp/WEB-INF/jsp/AuthPortletManager_view.jsp new file mode 100644 index 0000000..c78a638 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/AuthPortletManager_view.jsp @@ -0,0 +1,16 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/lib/ahome-core-1.0.0-SNAPSHOT.jar b/src/main/webapp/WEB-INF/lib/ahome-core-1.0.0-SNAPSHOT.jar new file mode 100644 index 0000000..1194b14 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/ahome-core-1.0.0-SNAPSHOT.jar differ diff --git a/src/main/webapp/WEB-INF/lib/authorization-client-2.0.0-SNAPSHOT.jar b/src/main/webapp/WEB-INF/lib/authorization-client-2.0.0-SNAPSHOT.jar new file mode 100644 index 0000000..6cd21c0 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/authorization-client-2.0.0-SNAPSHOT.jar differ diff --git a/src/main/webapp/WEB-INF/lib/callout-tour-1.0.0-SNAPSHOT.jar b/src/main/webapp/WEB-INF/lib/callout-tour-1.0.0-SNAPSHOT.jar new file mode 100644 index 0000000..d9f8e91 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/callout-tour-1.0.0-SNAPSHOT.jar differ diff --git a/src/main/webapp/WEB-INF/lib/common-authorization-2.0.0-SNAPSHOT.jar b/src/main/webapp/WEB-INF/lib/common-authorization-2.0.0-SNAPSHOT.jar new file mode 100644 index 0000000..22f8a7b Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/common-authorization-2.0.0-SNAPSHOT.jar differ diff --git a/src/main/webapp/WEB-INF/lib/common-scope-maps-1.0.3-SNAPSHOT.jar b/src/main/webapp/WEB-INF/lib/common-scope-maps-1.0.3-SNAPSHOT.jar new file mode 100644 index 0000000..531b3a4 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/common-scope-maps-1.0.3-SNAPSHOT.jar differ diff --git a/src/main/webapp/WEB-INF/lib/common-scope-maps-1.0.4-SNAPSHOT.jar b/src/main/webapp/WEB-INF/lib/common-scope-maps-1.0.4-SNAPSHOT.jar new file mode 100644 index 0000000..5316e34 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/common-scope-maps-1.0.4-SNAPSHOT.jar differ diff --git a/src/main/webapp/WEB-INF/lib/gcube-widgets-2.0.0-SNAPSHOT.jar b/src/main/webapp/WEB-INF/lib/gcube-widgets-2.0.0-SNAPSHOT.jar new file mode 100644 index 0000000..4faca4a Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/gcube-widgets-2.0.0-SNAPSHOT.jar differ diff --git a/src/main/webapp/WEB-INF/lib/gwt-bootstrap-2.3.2.0.jar b/src/main/webapp/WEB-INF/lib/gwt-bootstrap-2.3.2.0.jar new file mode 100644 index 0000000..4f3ffa2 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/gwt-bootstrap-2.3.2.0.jar differ diff --git a/src/main/webapp/WEB-INF/lib/gwt-tour-2.0.0-SNAPSHOT.jar b/src/main/webapp/WEB-INF/lib/gwt-tour-2.0.0-SNAPSHOT.jar new file mode 100644 index 0000000..bbc09cd Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/gwt-tour-2.0.0-SNAPSHOT.jar differ diff --git a/src/main/webapp/WEB-INF/lib/session-checker-0.4.0-SNAPSHOT.jar b/src/main/webapp/WEB-INF/lib/session-checker-0.4.0-SNAPSHOT.jar new file mode 100644 index 0000000..43b18e2 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/session-checker-0.4.0-SNAPSHOT.jar differ diff --git a/src/main/webapp/WEB-INF/lib/session-checker-0.5.0-SNAPSHOT.jar b/src/main/webapp/WEB-INF/lib/session-checker-0.5.0-SNAPSHOT.jar new file mode 100644 index 0000000..1fd33f4 Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/session-checker-0.5.0-SNAPSHOT.jar differ diff --git a/src/main/webapp/WEB-INF/liferay-display.xml b/src/main/webapp/WEB-INF/liferay-display.xml new file mode 100644 index 0000000..f9301fd --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-display.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/src/main/webapp/WEB-INF/liferay-plugin-package.properties b/src/main/webapp/WEB-INF/liferay-plugin-package.properties new file mode 100644 index 0000000..1dbdddb --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-plugin-package.properties @@ -0,0 +1,9 @@ +name=AuthPortletManager +module-group-id=liferay +module-incremental-version=1 +tags= +short-description= +change-log= +page-url=http://www.d4science.eu +author=D4Science EU +licenses= diff --git a/src/main/webapp/WEB-INF/liferay-portlet.xml b/src/main/webapp/WEB-INF/liferay-portlet.xml new file mode 100644 index 0000000..4339a40 --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-portlet.xml @@ -0,0 +1,13 @@ + + + + + + AuthPortletManager + /icon.png + false + false + false + + diff --git a/src/main/webapp/WEB-INF/portlet.xml b/src/main/webapp/WEB-INF/portlet.xml new file mode 100644 index 0000000..fd01058 --- /dev/null +++ b/src/main/webapp/WEB-INF/portlet.xml @@ -0,0 +1,18 @@ + + + + AuthPortletManager + AuthPortletManager + AuthPortletManager + org.gcube.portlets.admin.authportletmanager.server.portlet.AuthManagerPortlet + 0 + + text/html + view + + + AuthPortletManager + AuthPortletManager + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..ce56ce0 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,46 @@ + + + + jUnitHostImpl + com.google.gwt.junit.server.JUnitHostImpl + + + checkServlet + org.gcube.portlets.widgets.sessionchecker.server.SessionCheckerServiceImpl + + + scopeService + org.gcube.portlets.user.gcubewidgets.server.ScopeServiceImpl + + + authService + org.gcube.portlets.admin.authportletmanager.server.AuthServiceImpl + + + jUnitHostImpl + /authman/junithost/* + + + checkServlet + /authman/checksession + + + scopeService + /authman/scopeService + + + authService + /authman/authm + + + widgettourServlet + org.gcube.portlets.widgets.widgettour.server.TourManagerServicesImpl + + + widgettourServlet + /authman/tourmanagerservice + + + AuthPortletManager.html + + \ No newline at end of file diff --git a/src/main/webapp/authman/04724FEED5B95B03264AF08E9E379E38.gwt.rpc b/src/main/webapp/authman/04724FEED5B95B03264AF08E9E379E38.gwt.rpc new file mode 100644 index 0000000..51c122e --- /dev/null +++ b/src/main/webapp/authman/04724FEED5B95B03264AF08E9E379E38.gwt.rpc @@ -0,0 +1,46 @@ +@FinalFields, false +com.ait.toolkit.core.client.FastMap, true, true, false, false, com.ait.toolkit.core.client.FastMap/4238064837, 4238064837 +com.google.gwt.i18n.shared.impl.DateRecord, true, true, true, true, com.google.gwt.i18n.shared.impl.DateRecord/3173882066, 3173882066 +com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException, true, true, true, true, com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533, 3936916533 +com.google.gwt.user.client.rpc.RpcTokenException, true, true, false, false, com.google.gwt.user.client.rpc.RpcTokenException/2345075298, 2345075298 +com.google.gwt.user.client.rpc.XsrfToken, false, false, true, true, com.google.gwt.user.client.rpc.XsrfToken/4254043109, 4254043109 +java.lang.Boolean, true, true, true, true, java.lang.Boolean/476441737, 476441737 +java.lang.Double, true, true, true, true, java.lang.Double/858496421, 858496421 +java.lang.Exception, true, false, true, false, java.lang.Exception/1920171873, 1920171873 +java.lang.Long, true, true, true, true, java.lang.Long/4227064769, 4227064769 +[Ljava.lang.Long;, true, true, true, true, [Ljava.lang.Long;/97727328, 97727328 +java.lang.Number, true, false, true, false, java.lang.Number/300033342, 300033342 +java.lang.RuntimeException, true, false, true, false, java.lang.RuntimeException/515124647, 515124647 +java.lang.String, true, true, true, true, java.lang.String/2004016611, 2004016611 +[Ljava.lang.String;, true, true, false, false, [Ljava.lang.String;/2600011424, 2600011424 +java.lang.Throwable, true, false, true, false, java.lang.Throwable/2953622131, 2953622131 +java.sql.Date, true, true, true, true, java.sql.Date/730999118, 730999118 +java.sql.Time, true, true, true, true, java.sql.Time/1816797103, 1816797103 +java.sql.Timestamp, true, true, true, true, java.sql.Timestamp/3040052672, 3040052672 +java.util.ArrayList, true, true, true, true, java.util.ArrayList/4159755760, 4159755760 +java.util.Arrays$ArrayList, true, true, true, true, java.util.Arrays$ArrayList/2507071751, 2507071751 +java.util.Collections$EmptyList, true, true, true, true, java.util.Collections$EmptyList/4157118744, 4157118744 +java.util.Collections$EmptyMap, true, true, false, false, java.util.Collections$EmptyMap/4174664486, 4174664486 +java.util.Collections$SingletonList, true, true, true, true, java.util.Collections$SingletonList/1586180994, 1586180994 +java.util.Date, true, true, true, true, java.util.Date/3385151746, 3385151746 +java.util.HashMap, true, true, false, false, java.util.HashMap/1797211028, 1797211028 +java.util.IdentityHashMap, true, true, false, false, java.util.IdentityHashMap/1839153020, 1839153020 +java.util.LinkedHashMap, true, true, false, false, java.util.LinkedHashMap/3008245022, 3008245022 +java.util.LinkedList, true, true, true, true, java.util.LinkedList/3953877921, 3953877921 +java.util.Stack, true, true, true, true, java.util.Stack/1346942793, 1346942793 +java.util.TreeMap, true, true, false, false, java.util.TreeMap/1493889780, 1493889780 +java.util.Vector, true, true, true, true, java.util.Vector/3057315478, 3057315478 +org.gcube.portlets.admin.authportletmanager.client.rpc.AuthManagerService, false, false, false, false, _, 2636516818 +org.gcube.portlets.admin.authportletmanager.shared.Access, true, true, true, true, org.gcube.portlets.admin.authportletmanager.shared.Access/1157434602, 1157434602 +org.gcube.portlets.admin.authportletmanager.shared.Caller, true, true, true, true, org.gcube.portlets.admin.authportletmanager.shared.Caller/555973774, 555973774 +org.gcube.portlets.admin.authportletmanager.shared.Caller$TypeCaller, true, true, true, true, org.gcube.portlets.admin.authportletmanager.shared.Caller$TypeCaller/2952578849, 2952578849 +[Lorg.gcube.portlets.admin.authportletmanager.shared.Caller;, true, true, true, true, [Lorg.gcube.portlets.admin.authportletmanager.shared.Caller;/4246029522, 4246029522 +org.gcube.portlets.admin.authportletmanager.shared.PolicyAuth, true, true, true, true, org.gcube.portlets.admin.authportletmanager.shared.PolicyAuth/1046514205, 1046514205 +[Lorg.gcube.portlets.admin.authportletmanager.shared.PolicyAuth;, false, false, true, true, [Lorg.gcube.portlets.admin.authportletmanager.shared.PolicyAuth;/3569787298, 3569787298 +org.gcube.portlets.admin.authportletmanager.shared.Quote, true, true, true, true, org.gcube.portlets.admin.authportletmanager.shared.Quote/3907887275, 3907887275 +org.gcube.portlets.admin.authportletmanager.shared.Quote$ManagerType, true, true, true, true, org.gcube.portlets.admin.authportletmanager.shared.Quote$ManagerType/72627105, 72627105 +org.gcube.portlets.admin.authportletmanager.shared.Quote$TimeInterval, true, true, true, true, org.gcube.portlets.admin.authportletmanager.shared.Quote$TimeInterval/3866538911, 3866538911 +[Lorg.gcube.portlets.admin.authportletmanager.shared.Quote;, true, true, true, true, [Lorg.gcube.portlets.admin.authportletmanager.shared.Quote;/120956112, 120956112 +org.gcube.portlets.admin.authportletmanager.shared.Service, true, true, true, true, org.gcube.portlets.admin.authportletmanager.shared.Service/805597185, 805597185 +org.gcube.portlets.admin.authportletmanager.shared.exceptions.ExpiredSessionServiceException, true, true, false, false, org.gcube.portlets.admin.authportletmanager.shared.exceptions.ExpiredSessionServiceException/3208387242, 3208387242 +org.gcube.portlets.admin.authportletmanager.shared.exceptions.ServiceException, true, true, false, false, org.gcube.portlets.admin.authportletmanager.shared.exceptions.ServiceException/2527702652, 2527702652 diff --git a/src/main/webapp/authman/61CF2EB1942C991A9518A75D35EC17FD.gwt.rpc b/src/main/webapp/authman/61CF2EB1942C991A9518A75D35EC17FD.gwt.rpc new file mode 100644 index 0000000..3720e01 --- /dev/null +++ b/src/main/webapp/authman/61CF2EB1942C991A9518A75D35EC17FD.gwt.rpc @@ -0,0 +1,9 @@ +@FinalFields, false +com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException, true, true, true, true, com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533, 3936916533 +com.google.gwt.user.client.rpc.RpcTokenException, true, true, false, false, com.google.gwt.user.client.rpc.RpcTokenException/2345075298, 2345075298 +com.google.gwt.user.client.rpc.XsrfToken, false, false, true, true, com.google.gwt.user.client.rpc.XsrfToken/4254043109, 4254043109 +java.lang.Exception, true, false, true, false, java.lang.Exception/1920171873, 1920171873 +java.lang.RuntimeException, true, false, true, false, java.lang.RuntimeException/515124647, 515124647 +java.lang.String, true, true, true, true, java.lang.String/2004016611, 2004016611 +java.lang.Throwable, true, false, true, false, java.lang.Throwable/2953622131, 2953622131 +org.gcube.portlets.user.gcubewidgets.client.rpc.ScopeService, false, false, false, false, _, 2480143433 diff --git a/src/main/webapp/authman/6FAFED184E8F55D2CE48AFA04F2D0003.gwt.rpc b/src/main/webapp/authman/6FAFED184E8F55D2CE48AFA04F2D0003.gwt.rpc new file mode 100644 index 0000000..7a41f26 --- /dev/null +++ b/src/main/webapp/authman/6FAFED184E8F55D2CE48AFA04F2D0003.gwt.rpc @@ -0,0 +1,9 @@ +@FinalFields, false +com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException, true, true, true, true, com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533, 3936916533 +com.google.gwt.user.client.rpc.RpcTokenException, true, true, false, false, com.google.gwt.user.client.rpc.RpcTokenException/2345075298, 2345075298 +com.google.gwt.user.client.rpc.XsrfToken, false, false, true, true, com.google.gwt.user.client.rpc.XsrfToken/4254043109, 4254043109 +java.lang.Exception, true, false, true, false, java.lang.Exception/1920171873, 1920171873 +java.lang.RuntimeException, true, false, true, false, java.lang.RuntimeException/515124647, 515124647 +java.lang.String, true, true, true, true, java.lang.String/2004016611, 2004016611 +java.lang.Throwable, true, false, true, false, java.lang.Throwable/2953622131, 2953622131 +org.gcube.portlets.widgets.widgettour.client.TourManagerServices, false, false, false, false, _, 352797203 diff --git a/src/main/webapp/authman/FEC659B04FD01FD39649FE29A41CEDFC.gwt.rpc b/src/main/webapp/authman/FEC659B04FD01FD39649FE29A41CEDFC.gwt.rpc new file mode 100644 index 0000000..db1e800 --- /dev/null +++ b/src/main/webapp/authman/FEC659B04FD01FD39649FE29A41CEDFC.gwt.rpc @@ -0,0 +1,10 @@ +@FinalFields, false +com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException, true, true, true, true, com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533, 3936916533 +com.google.gwt.user.client.rpc.RpcTokenException, true, true, false, false, com.google.gwt.user.client.rpc.RpcTokenException/2345075298, 2345075298 +com.google.gwt.user.client.rpc.XsrfToken, false, false, true, true, com.google.gwt.user.client.rpc.XsrfToken/4254043109, 4254043109 +java.lang.Exception, true, false, true, false, java.lang.Exception/1920171873, 1920171873 +java.lang.RuntimeException, true, false, true, false, java.lang.RuntimeException/515124647, 515124647 +java.lang.String, true, true, true, true, java.lang.String/2004016611, 2004016611 +java.lang.Throwable, true, false, true, false, java.lang.Throwable/2953622131, 2953622131 +org.gcube.portlets.widgets.sessionchecker.client.SessionCheckerService, false, false, false, false, _, 3671181043 +org.gcube.portlets.widgets.sessionchecker.shared.SessionInfoBean, true, true, false, false, org.gcube.portlets.widgets.sessionchecker.shared.SessionInfoBean/1662964092, 1662964092 diff --git a/src/main/webapp/authman/WidgetTour.css b/src/main/webapp/authman/WidgetTour.css new file mode 100644 index 0000000..806331a --- /dev/null +++ b/src/main/webapp/authman/WidgetTour.css @@ -0,0 +1,170 @@ +.gcube_DialogBox_tour { + z-index: 10001; + background: #fff !important; + border: 5px solid rgba(0, 0, 0, .5) !important; + padding: 15px; + border-radius: 4px; + font-size: 13px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.80); + -moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.80); + -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.80); +} + +.gcube_DialogBox_tour .Caption { + color: #000 !important; + font-family: Helvetica, Arial, "Lucida Grande", sans-serif !important; + font-size: 16px !important; + font-weight: 700 !important; + line-height: 19px !important; + margin: -1px 15px 0 0 !important; + padding: 0px !important; +} + +.gcube_DialogBox_tour .dialogContent div { + font-family: Helvetica, Arial; + font-weight: 400; + line-height: 17px; + margin: -5px 0 11px; + padding-top: 8px; + font-size: 13px; + color: #555; +} + +.gcube_DialogBox_tour .dialogTop { + background: #fff !important; + font-size: 16px !important; + border: none !important; + margin: 0px; + padding-left: 5px; + height: 20px; +} + +.gcube_DialogBox_tour .dialogMiddleCenter { + padding: 0px !important; +} + +.gcube_DialogBox_tour .dialogMiddleLeft { + background: #FFF; + padding-left: 0px !important; +} + +.gcube_DialogBox_tour .dialogMiddleRight { + background: #FFF; + padding-left: 0px !important; +} + +.gcube_DialogBox_tour .dialogBottom { + background: #FFF; + margin: 0px; + padding-left: 0px !important; + height: 0px !important; +} + +/* The below comes from the hopscotch.css*/ +.gcube_DialogBox_tour .button { + /* borrowed from katy styles */ + font-weight: bold; + border-width: 1px; + border-style: solid; + cursor: pointer; + margin: 0; + overflow: visible; + text-decoration: none !important; + width: auto; + padding: 0 10px; + height: 26px; + line-height: 24px; + font-size: 12px; * + zoom: 1; + white-space: nowrap; + display: -moz-inline-stack; + display: inline-block; * + vertical-align: auto; + zoom: 1; * + display: inline; + vertical-align: middle; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.gcube_DialogBox_tour .button:hover { * + zoom: 1; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25); +} + +.gcube_DialogBox_tour .button:active { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25) inset; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25) inset; +} + +.gcube_DialogBox_tour .button.next { + border-color: #1b5480; + color: #fff; + margin: 0 0 0 10px; + /* HS specific*/ + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.35); + background-color: #287bbc; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, + startColorstr='#287bbc', endColorstr='#23639a'); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #287bbc), + color-stop(100%, #23639a)); + background-image: -webkit-linear-gradient(top, #287bbc 0%, #23639a 100%); + background-image: -moz-linear-gradient(top, #287bbc 0%, #23639a 100%); + background-image: -o-linear-gradient(top, #287bbc 0%, #23639a 100%); + background-image: linear-gradient(top, #287bbc 0%, #23639a 100%); +} + +.gcube_DialogBox_tour .button.next:hover { + background-color: #2672ae; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, + startColorstr='#2672ae', endColorstr='#1e4f7e'); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2672ae), + color-stop(100%, #1e4f7e)); + background-image: -webkit-linear-gradient(top, #2672ae 0%, #1e4f7e 100%); + background-image: -moz-linear-gradient(top, #2672ae 0%, #1e4f7e 100%); + background-image: -o-linear-gradient(top, #2672ae 0%, #1e4f7e 100%); + background-image: linear-gradient(top, #2672ae 0%, #1e4f7e 100%); +} + +.gcube_DialogBox_tour .button.prev { + border-color: #a7a7a7; + color: #444; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + background-color: #f2f2f2; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, + startColorstr='#f2f2f2', endColorstr='#e9e9e9'); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f2f2f2), + color-stop(100%, #e9e9e9)); + background-image: -webkit-linear-gradient(top, #f2f2f2 0%, #e9e9e9 100%); + background-image: -moz-linear-gradient(top, #f2f2f2 0%, #e9e9e9 100%); + background-image: -o-linear-gradient(top, #f2f2f2 0%, #e9e9e9 100%); + background-image: linear-gradient(top, #f2f2f2 0%, #e9e9e9 100%); +} + +.gcube_DialogBox_tour .button.prev:hover { + background-color: #e8e8e8; + filter: progid:DXImageTransform.Microsoft.gradient(gradientType=0, + startColorstr='#FFE8E8E8', endColorstr='#FFA9A9A9'); + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e8e8e8), + color-stop(13%, #e3e3e3), color-stop(32%, #d7d7d7), + color-stop(71%, #b9b9b9), color-stop(100%, #a9a9a9)); + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #e3e3e3 13%, #d7d7d7 32%, + #b9b9b9 71%, #a9a9a9 100%); + background-image: -moz-linear-gradient(top, #e8e8e8 0%, #e3e3e3 13%, #d7d7d7 32%, #b9b9b9 + 71%, #a9a9a9 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #e3e3e3 13%, #d7d7d7 32%, #b9b9b9 + 71%, #a9a9a9 100%); + background-image: linear-gradient(top, #e8e8e8 0%, #e3e3e3 13%, #d7d7d7 32%, #b9b9b9 71%, + #a9a9a9 100%); +} \ No newline at end of file diff --git a/src/main/webapp/authman/awesomize.js b/src/main/webapp/authman/awesomize.js new file mode 100644 index 0000000..6ae52c7 --- /dev/null +++ b/src/main/webapp/authman/awesomize.js @@ -0,0 +1,32 @@ +// node.js helper script to read in font-awesome.css and print out Java enums +// for icon classes +// +// usage: +// node awesomize.js /path/to/font-awesome.css +// +// @author Sven Jacobs + +var fs = require('fs'), + file = process.argv[2], + regex = /^\.icon-([^:]+):before/m; + +fs.readFile(file, 'UTF-8', function (err, data) { + if (err) throw err; + + var lines = data.split('\n'), + result = []; + + lines.forEach(function (line) { + var match = regex.exec(line); + + if (match) { + result.push(match[1].toUpperCase().replace(/-/g, '_') + '("' + match[1] + '"),'); + } + }); + + result.sort(); + + result.forEach(function (item) { + console.log(item); + }); +}); \ No newline at end of file diff --git a/src/main/webapp/authman/clear.cache.gif b/src/main/webapp/authman/clear.cache.gif new file mode 100644 index 0000000..e565824 Binary files /dev/null and b/src/main/webapp/authman/clear.cache.gif differ diff --git a/src/main/webapp/authman/css/bootstrap-responsive.min.css b/src/main/webapp/authman/css/bootstrap-responsive.min.css new file mode 100644 index 0000000..f4ede63 --- /dev/null +++ b/src/main/webapp/authman/css/bootstrap-responsive.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/src/main/webapp/authman/css/bootstrap.min.css b/src/main/webapp/authman/css/bootstrap.min.css new file mode 100644 index 0000000..b6428e6 --- /dev/null +++ b/src/main/webapp/authman/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/src/main/webapp/authman/css/cssbuttons.css b/src/main/webapp/authman/css/cssbuttons.css new file mode 100644 index 0000000..074437c --- /dev/null +++ b/src/main/webapp/authman/css/cssbuttons.css @@ -0,0 +1,37 @@ +/* + CFD Version: Beta .33 + + This file is part of CSSButtons. + + CSSButtons is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + CSSButtons is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CSSButtons. If not, see . +*/ + + +/* ------------------------------------------------------------------------------------------------------------------------------------------------------------------ + BUTTON DEFINITION CLASS */ + + button.cssbutton {border:0; text-align:center; padding:0; margin:0; cursor:pointer;} + button.cssbutton span {font:bold 12px/23px Verdana; color:#666; display:block; cursor:pointer; position:relative; white-space:nowrap; height:23px; margin-left:1px; padding:0 10px 0 9px;} /* padding-left = (padding-right - margin-left) NOTE: Firefox renders this different */ + +/* ------------------------------------------------------------------------------------------------------------------------------------------------------------------ + LINK DEFINITION CLASS */ + + a.cssbutton {border:0;float:left;text-align:center;padding:0;margin:0;cursor:pointer;text-decoration: none;} + a.cssbutton span {font:bold 12px/23px Verdana; color:#666; display:block; float: left; white-space:nowrap; height:23px; margin-left:1px; padding:0 10px 0 9px;} /* padding-left = (padding-right - margin-left) NOTE: Firefox renders this different */ + +/* ------------------------------------------------------------------------------------------------------------------------------------------------------------------ + INPUT DEFINITION CLASS */ + + div.cssbutton {border:0; float:left; text-align:center; padding:0; margin:0; cursor:pointer;} + div.cssbutton input {border:0; font:bold 12px/23px Verdana; color:#666; display:block; cursor:pointer; float:left; white-space:nowrap; height:23px; margin-left:1px; padding:0 10px 0 9px;} /* padding-left = (padding-right - margin-left) NOTE: Firefox renders this different */ diff --git a/src/main/webapp/authman/css/font-awesome-ie7.css b/src/main/webapp/authman/css/font-awesome-ie7.css new file mode 100644 index 0000000..507ebeb --- /dev/null +++ b/src/main/webapp/authman/css/font-awesome-ie7.css @@ -0,0 +1,1203 @@ +/*! + * Font Awesome 3.2.1 + * the iconic font designed for Bootstrap + * ------------------------------------------------------------------------------ + * The full suite of pictographic icons, examples, and documentation can be + * found at http://fontawesome.io. Stay up to date on Twitter at + * http://twitter.com/fontawesome. + * + * License + * ------------------------------------------------------------------------------ + * - The Font Awesome font is licensed under SIL OFL 1.1 - + * http://scripts.sil.org/OFL + * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - + * http://opensource.org/licenses/mit-license.html + * - Font Awesome documentation licensed under CC BY 3.0 - + * http://creativecommons.org/licenses/by/3.0/ + * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: + * "Font Awesome by Dave Gandy - http://fontawesome.io" + * + * Author - Dave Gandy + * ------------------------------------------------------------------------------ + * Email: dave@fontawesome.io + * Twitter: http://twitter.com/byscuits + * Work: Lead Product Designer @ Kyruus - http://kyruus.com + */ +.icon-large { + font-size: 1.3333333333333333em; + margin-top: -4px; + padding-top: 3px; + margin-bottom: -4px; + padding-bottom: 3px; + vertical-align: middle; +} +.nav [class^="icon-"], +.nav [class*=" icon-"] { + vertical-align: inherit; + margin-top: -4px; + padding-top: 3px; + margin-bottom: -4px; + padding-bottom: 3px; +} +.nav [class^="icon-"].icon-large, +.nav [class*=" icon-"].icon-large { + vertical-align: -25%; +} +.nav-pills [class^="icon-"].icon-large, +.nav-tabs [class^="icon-"].icon-large, +.nav-pills [class*=" icon-"].icon-large, +.nav-tabs [class*=" icon-"].icon-large { + line-height: .75em; + margin-top: -7px; + padding-top: 5px; + margin-bottom: -5px; + padding-bottom: 4px; +} +.btn [class^="icon-"].pull-left, +.btn [class*=" icon-"].pull-left, +.btn [class^="icon-"].pull-right, +.btn [class*=" icon-"].pull-right { + vertical-align: inherit; +} +.btn [class^="icon-"].icon-large, +.btn [class*=" icon-"].icon-large { + margin-top: -0.5em; +} +a [class^="icon-"], +a [class*=" icon-"] { + cursor: pointer; +} +.icon-glass { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-music { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-search { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-envelope-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-heart { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-star { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-star-empty { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-user { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-film { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-th-large { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-th { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-th-list { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-ok { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-remove { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-zoom-in { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-zoom-out { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-off { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-power-off { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-signal { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-cog { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-gear { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-trash { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-home { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-file-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-time { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-road { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-download-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-download { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-upload { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-inbox { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-play-circle { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-repeat { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-rotate-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-refresh { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-list-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-lock { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-flag { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-headphones { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-volume-off { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-volume-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-volume-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-qrcode { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-barcode { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-tag { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-tags { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-book { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bookmark { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-print { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-camera { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-font { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bold { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-italic { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-text-height { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-text-width { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-align-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-align-center { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-align-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-align-justify { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-list { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-indent-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-indent-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-facetime-video { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-picture { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-pencil { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-map-marker { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-adjust { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-tint { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-edit { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-share { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-check { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-move { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-step-backward { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-fast-backward { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-backward { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-play { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-pause { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-stop { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-forward { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-fast-forward { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-step-forward { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-eject { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-chevron-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-chevron-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-plus-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-minus-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-remove-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-ok-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-question-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-info-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-screenshot { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-remove-circle { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-ok-circle { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-ban-circle { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-arrow-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-arrow-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-arrow-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-arrow-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-share-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-mail-forward { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-resize-full { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-resize-small { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-plus { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-minus { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-asterisk { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-exclamation-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-gift { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-leaf { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-fire { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-eye-open { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-eye-close { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-warning-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-plane { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-calendar { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-random { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-comment { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-magnet { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-chevron-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-chevron-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-retweet { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-shopping-cart { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-folder-close { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-folder-open { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-resize-vertical { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-resize-horizontal { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bar-chart { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-twitter-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-facebook-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-camera-retro { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-key { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-cogs { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-gears { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-comments { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-thumbs-up-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-thumbs-down-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-star-half { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-heart-empty { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-signout { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-linkedin-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-pushpin { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-external-link { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-signin { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-trophy { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-github-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-upload-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-lemon { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-phone { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-check-empty { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-unchecked { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bookmark-empty { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-phone-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-twitter { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-facebook { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-github { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-unlock { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-credit-card { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-rss { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-hdd { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bullhorn { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bell { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-certificate { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-hand-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-hand-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-hand-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-hand-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-circle-arrow-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-circle-arrow-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-circle-arrow-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-circle-arrow-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-globe { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-wrench { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-tasks { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-filter { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-briefcase { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-fullscreen { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-group { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-link { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-cloud { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-beaker { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-cut { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-copy { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-paper-clip { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-paperclip { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-save { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sign-blank { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-reorder { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-list-ul { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-list-ol { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-strikethrough { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-underline { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-table { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-magic { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-truck { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-pinterest { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-pinterest-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-google-plus-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-google-plus { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-money { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-caret-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-caret-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-caret-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-caret-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-columns { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-envelope { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-linkedin { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-undo { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-rotate-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-legal { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-dashboard { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-comment-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-comments-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bolt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sitemap { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-umbrella { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-paste { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-lightbulb { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-exchange { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-cloud-download { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-cloud-upload { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-user-md { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-stethoscope { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-suitcase { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bell-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-coffee { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-food { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-file-text-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-building { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-hospital { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-ambulance { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-medkit { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-fighter-jet { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-beer { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-h-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-plus-sign-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-double-angle-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-double-angle-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-double-angle-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-double-angle-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-angle-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-angle-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-angle-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-angle-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-desktop { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-laptop { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-tablet { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-mobile-phone { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-circle-blank { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-quote-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-quote-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-spinner { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-circle { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-reply { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-mail-reply { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-github-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-folder-close-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-folder-open-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-expand-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-collapse-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-smile { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-frown { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-meh { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-gamepad { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-keyboard { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-flag-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-flag-checkered { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-terminal { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-code { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-reply-all { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-mail-reply-all { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-star-half-empty { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-star-half-full { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-location-arrow { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-crop { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-code-fork { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-unlink { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-question { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-info { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-exclamation { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-superscript { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-subscript { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-eraser { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-puzzle-piece { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-microphone { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-microphone-off { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-shield { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-calendar-empty { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-fire-extinguisher { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-rocket { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-maxcdn { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-chevron-sign-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-chevron-sign-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-chevron-sign-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-chevron-sign-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-html5 { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-css3 { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-anchor { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-unlock-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bullseye { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-ellipsis-horizontal { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-ellipsis-vertical { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-rss-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-play-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-ticket { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-minus-sign-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-check-minus { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-level-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-level-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-check-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-edit-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-external-link-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-share-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-compass { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-collapse { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-collapse-top { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-expand { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-eur { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-euro { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-gbp { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-usd { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-dollar { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-inr { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-rupee { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-jpy { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-yen { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-cny { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-renminbi { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-krw { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-won { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-btc { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bitcoin { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-file { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-file-text { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-by-alphabet { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-by-alphabet-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-by-attributes { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-by-attributes-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-by-order { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-by-order-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-thumbs-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-thumbs-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-youtube-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-youtube { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-xing { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-xing-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-youtube-play { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-dropbox { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-stackexchange { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-instagram { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-flickr { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-adn { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bitbucket { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bitbucket-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-tumblr { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-tumblr-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-long-arrow-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-long-arrow-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-long-arrow-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-long-arrow-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-apple { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-windows { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-android { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-linux { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-dribbble { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-skype { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-foursquare { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-trello { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-female { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-male { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-gittip { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sun { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-moon { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-archive { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bug { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-vk { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-weibo { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-renren { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} diff --git a/src/main/webapp/authman/css/font-awesome-ie7.min.css b/src/main/webapp/authman/css/font-awesome-ie7.min.css new file mode 100644 index 0000000..d3dae63 --- /dev/null +++ b/src/main/webapp/authman/css/font-awesome-ie7.min.css @@ -0,0 +1,384 @@ +.icon-large{font-size:1.3333333333333333em;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;vertical-align:middle;} +.nav [class^="icon-"],.nav [class*=" icon-"]{vertical-align:inherit;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;}.nav [class^="icon-"].icon-large,.nav [class*=" icon-"].icon-large{vertical-align:-25%;} +.nav-pills [class^="icon-"].icon-large,.nav-tabs [class^="icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large{line-height:.75em;margin-top:-7px;padding-top:5px;margin-bottom:-5px;padding-bottom:4px;} +.btn [class^="icon-"].pull-left,.btn [class*=" icon-"].pull-left,.btn [class^="icon-"].pull-right,.btn [class*=" icon-"].pull-right{vertical-align:inherit;} +.btn [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large{margin-top:-0.5em;} +a [class^="icon-"],a [class*=" icon-"]{cursor:pointer;} +.icon-glass{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-music{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-search{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-envelope-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-heart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-star{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-star-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-user{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-film{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-th-large{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-th{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-th-list{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ok{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-remove{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-zoom-in{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-zoom-out{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-power-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-signal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cog{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-gear{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-trash{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-home{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-file-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-time{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-road{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-download-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-download{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-upload{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-inbox{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-play-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-repeat{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-rotate-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-refresh{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-list-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-lock{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-flag{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-headphones{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-volume-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-volume-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-volume-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-qrcode{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-barcode{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tag{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tags{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-book{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bookmark{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-print{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-camera{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-font{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bold{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-italic{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-text-height{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-text-width{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-align-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-align-center{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-align-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-align-justify{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-list{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-indent-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-indent-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-facetime-video{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-picture{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-pencil{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-map-marker{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-adjust{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tint{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-edit{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-share{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-check{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-move{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-step-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-fast-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-play{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-pause{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-stop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-fast-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-step-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-eject{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-plus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-minus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-remove-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ok-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-question-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-info-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-screenshot{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-remove-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ok-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ban-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-share-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-mail-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-resize-full{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-resize-small{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-plus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-minus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-asterisk{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-exclamation-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-gift{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-leaf{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-fire{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-eye-open{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-eye-close{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-warning-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-plane{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-calendar{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-random{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-comment{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-magnet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-retweet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-shopping-cart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-folder-close{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-folder-open{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-resize-vertical{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-resize-horizontal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bar-chart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-twitter-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-facebook-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-camera-retro{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-key{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cogs{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-gears{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-comments{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-thumbs-up-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-thumbs-down-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-star-half{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-heart-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-signout{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-linkedin-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-pushpin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-external-link{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-signin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-trophy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-github-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-upload-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-lemon{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-phone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-check-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-unchecked{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bookmark-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-phone-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-twitter{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-facebook{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-github{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-unlock{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-credit-card{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-rss{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-hdd{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bullhorn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bell{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-certificate{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-hand-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-hand-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-hand-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-hand-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-circle-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-circle-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-circle-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-circle-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-globe{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-wrench{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tasks{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-filter{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-briefcase{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-fullscreen{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-group{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-link{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cloud{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-beaker{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cut{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-copy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-paper-clip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-paperclip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-save{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sign-blank{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-reorder{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-list-ul{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-list-ol{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-strikethrough{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-underline{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-table{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-magic{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-truck{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-pinterest{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-pinterest-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-google-plus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-google-plus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-money{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-caret-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-caret-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-caret-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-caret-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-columns{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-envelope{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-linkedin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-undo{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-rotate-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-legal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-dashboard{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-comment-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-comments-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bolt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sitemap{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-umbrella{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-paste{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-lightbulb{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-exchange{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cloud-download{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cloud-upload{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-user-md{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-stethoscope{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-suitcase{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bell-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-coffee{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-food{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-file-text-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-building{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-hospital{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ambulance{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-medkit{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-fighter-jet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-beer{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-h-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-plus-sign-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-double-angle-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-double-angle-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-double-angle-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-double-angle-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-angle-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-angle-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-angle-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-angle-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-desktop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-laptop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tablet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-mobile-phone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-circle-blank{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-quote-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-quote-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-spinner{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-reply{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-mail-reply{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-github-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-folder-close-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-folder-open-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-expand-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-collapse-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-smile{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-frown{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-meh{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-gamepad{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-keyboard{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-flag-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-flag-checkered{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-terminal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-code{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-reply-all{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-mail-reply-all{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-star-half-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-star-half-full{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-location-arrow{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-crop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-code-fork{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-unlink{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-question{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-info{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-exclamation{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-superscript{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-subscript{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-eraser{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-puzzle-piece{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-microphone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-microphone-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-shield{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-calendar-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-fire-extinguisher{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-rocket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-maxcdn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-sign-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-sign-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-sign-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-sign-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-html5{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-css3{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-anchor{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-unlock-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bullseye{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ellipsis-horizontal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ellipsis-vertical{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-rss-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-play-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ticket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-minus-sign-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-check-minus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-level-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-level-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-check-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-edit-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-external-link-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-share-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-compass{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-collapse{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-collapse-top{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-expand{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-eur{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-euro{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-gbp{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-usd{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-dollar{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-inr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-rupee{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-jpy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-yen{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cny{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-renminbi{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-krw{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-won{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-btc{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bitcoin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-file{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-file-text{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-by-alphabet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-by-alphabet-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-by-attributes{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-by-attributes-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-by-order{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-by-order-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-thumbs-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-thumbs-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-youtube-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-youtube{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-xing{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-xing-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-youtube-play{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-dropbox{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-stackexchange{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-instagram{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-flickr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-adn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bitbucket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bitbucket-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tumblr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tumblr-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-long-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-long-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-long-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-long-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-apple{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-windows{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-android{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-linux{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-dribbble{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-skype{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-foursquare{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-trello{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-female{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-male{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-gittip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sun{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-moon{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-archive{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bug{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-vk{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-weibo{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-renren{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} diff --git a/src/main/webapp/authman/css/font-awesome.css b/src/main/webapp/authman/css/font-awesome.css new file mode 100644 index 0000000..30a96b2 --- /dev/null +++ b/src/main/webapp/authman/css/font-awesome.css @@ -0,0 +1,1479 @@ +/*! + * Font Awesome 3.2.1 + * the iconic font designed for Bootstrap + * ------------------------------------------------------------------------------ + * The full suite of pictographic icons, examples, and documentation can be + * found at http://fontawesome.io. Stay up to date on Twitter at + * http://twitter.com/fontawesome. + * + * License + * ------------------------------------------------------------------------------ + * - The Font Awesome font is licensed under SIL OFL 1.1 - + * http://scripts.sil.org/OFL + * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - + * http://opensource.org/licenses/mit-license.html + * - Font Awesome documentation licensed under CC BY 3.0 - + * http://creativecommons.org/licenses/by/3.0/ + * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: + * "Font Awesome by Dave Gandy - http://fontawesome.io" + * + * Author - Dave Gandy + * ------------------------------------------------------------------------------ + * Email: dave@fontawesome.io + * Twitter: http://twitter.com/byscuits + * Work: Lead Product Designer @ Kyruus - http://kyruus.com + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../font/fontawesome-webfont.eot?v=3.2.1'); + src: url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'), url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'), url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg'); + font-weight: normal; + font-style: normal; +} +/* FONT AWESOME CORE + * -------------------------- */ +[class^="icon-"], +[class*=" icon-"] { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + *margin-right: .3em; +} +[class^="icon-"]:before, +[class*=" icon-"]:before { + text-decoration: inherit; + display: inline-block; + speak: none; +} +/* makes the font 33% larger relative to the icon container */ +.icon-large:before { + vertical-align: -10%; + font-size: 1.3333333333333333em; +} +/* makes sure icons active on rollover in links */ +a [class^="icon-"], +a [class*=" icon-"] { + display: inline; +} +/* increased font size for icon-large */ +[class^="icon-"].icon-fixed-width, +[class*=" icon-"].icon-fixed-width { + display: inline-block; + width: 1.1428571428571428em; + text-align: right; + padding-right: 0.2857142857142857em; +} +[class^="icon-"].icon-fixed-width.icon-large, +[class*=" icon-"].icon-fixed-width.icon-large { + width: 1.4285714285714286em; +} +.icons-ul { + margin-left: 2.142857142857143em; + list-style-type: none; +} +.icons-ul > li { + position: relative; +} +.icons-ul .icon-li { + position: absolute; + left: -2.142857142857143em; + width: 2.142857142857143em; + text-align: center; + line-height: inherit; +} +[class^="icon-"].hide, +[class*=" icon-"].hide { + display: none; +} +.icon-muted { + color: #eeeeee; +} +.icon-light { + color: #ffffff; +} +.icon-dark { + color: #333333; +} +.icon-border { + border: solid 1px #eeeeee; + padding: .2em .25em .15em; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.icon-2x { + font-size: 2em; +} +.icon-2x.icon-border { + border-width: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.icon-3x { + font-size: 3em; +} +.icon-3x.icon-border { + border-width: 3px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.icon-4x { + font-size: 4em; +} +.icon-4x.icon-border { + border-width: 4px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.icon-5x { + font-size: 5em; +} +.icon-5x.icon-border { + border-width: 5px; + -webkit-border-radius: 7px; + -moz-border-radius: 7px; + border-radius: 7px; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +[class^="icon-"].pull-left, +[class*=" icon-"].pull-left { + margin-right: .3em; +} +[class^="icon-"].pull-right, +[class*=" icon-"].pull-right { + margin-left: .3em; +} +/* BOOTSTRAP SPECIFIC CLASSES + * -------------------------- */ +/* Bootstrap 2.0 sprites.less reset */ +[class^="icon-"], +[class*=" icon-"] { + display: inline; + width: auto; + height: auto; + line-height: normal; + vertical-align: baseline; + background-image: none; + background-position: 0% 0%; + background-repeat: repeat; + margin-top: 0; +} +/* more sprites.less reset */ +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"] { + background-image: none; +} +/* keeps Bootstrap styles with and without icons the same */ +.btn [class^="icon-"].icon-large, +.nav [class^="icon-"].icon-large, +.btn [class*=" icon-"].icon-large, +.nav [class*=" icon-"].icon-large { + line-height: .9em; +} +.btn [class^="icon-"].icon-spin, +.nav [class^="icon-"].icon-spin, +.btn [class*=" icon-"].icon-spin, +.nav [class*=" icon-"].icon-spin { + display: inline-block; +} +.nav-tabs [class^="icon-"], +.nav-pills [class^="icon-"], +.nav-tabs [class*=" icon-"], +.nav-pills [class*=" icon-"], +.nav-tabs [class^="icon-"].icon-large, +.nav-pills [class^="icon-"].icon-large, +.nav-tabs [class*=" icon-"].icon-large, +.nav-pills [class*=" icon-"].icon-large { + line-height: .9em; +} +.btn [class^="icon-"].pull-left.icon-2x, +.btn [class*=" icon-"].pull-left.icon-2x, +.btn [class^="icon-"].pull-right.icon-2x, +.btn [class*=" icon-"].pull-right.icon-2x { + margin-top: .18em; +} +.btn [class^="icon-"].icon-spin.icon-large, +.btn [class*=" icon-"].icon-spin.icon-large { + line-height: .8em; +} +.btn.btn-small [class^="icon-"].pull-left.icon-2x, +.btn.btn-small [class*=" icon-"].pull-left.icon-2x, +.btn.btn-small [class^="icon-"].pull-right.icon-2x, +.btn.btn-small [class*=" icon-"].pull-right.icon-2x { + margin-top: .25em; +} +.btn.btn-large [class^="icon-"], +.btn.btn-large [class*=" icon-"] { + margin-top: 0; +} +.btn.btn-large [class^="icon-"].pull-left.icon-2x, +.btn.btn-large [class*=" icon-"].pull-left.icon-2x, +.btn.btn-large [class^="icon-"].pull-right.icon-2x, +.btn.btn-large [class*=" icon-"].pull-right.icon-2x { + margin-top: .05em; +} +.btn.btn-large [class^="icon-"].pull-left.icon-2x, +.btn.btn-large [class*=" icon-"].pull-left.icon-2x { + margin-right: .2em; +} +.btn.btn-large [class^="icon-"].pull-right.icon-2x, +.btn.btn-large [class*=" icon-"].pull-right.icon-2x { + margin-left: .2em; +} +/* Fixes alignment in nav lists */ +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + line-height: inherit; +} +/* EXTRAS + * -------------------------- */ +/* Stacked and layered icon */ +.icon-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: -35%; +} +.icon-stack [class^="icon-"], +.icon-stack [class*=" icon-"] { + display: block; + text-align: center; + position: absolute; + width: 100%; + height: 100%; + font-size: 1em; + line-height: inherit; + *line-height: 2em; +} +.icon-stack .icon-stack-base { + font-size: 2em; + *line-height: 1em; +} +/* Animated rotating icon */ +.icon-spin { + display: inline-block; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + -webkit-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} +/* Prevent stack and spinners from being taken inline when inside a link */ +a .icon-stack, +a .icon-spin { + display: inline-block; + text-decoration: none; +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-o-keyframes spin { + 0% { + -o-transform: rotate(0deg); + } + 100% { + -o-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +/* Icon rotations and mirroring */ +.icon-rotate-90:before { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); +} +.icon-rotate-180:before { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); +} +.icon-rotate-270:before { + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} +.icon-flip-horizontal:before { + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.icon-flip-vertical:before { + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} +/* ensure rotation occurs inside anchor tags */ +a .icon-rotate-90:before, +a .icon-rotate-180:before, +a .icon-rotate-270:before, +a .icon-flip-horizontal:before, +a .icon-flip-vertical:before { + display: inline-block; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.icon-glass:before { + content: "\f000"; +} +.icon-music:before { + content: "\f001"; +} +.icon-search:before { + content: "\f002"; +} +.icon-envelope-alt:before { + content: "\f003"; +} +.icon-heart:before { + content: "\f004"; +} +.icon-star:before { + content: "\f005"; +} +.icon-star-empty:before { + content: "\f006"; +} +.icon-user:before { + content: "\f007"; +} +.icon-film:before { + content: "\f008"; +} +.icon-th-large:before { + content: "\f009"; +} +.icon-th:before { + content: "\f00a"; +} +.icon-th-list:before { + content: "\f00b"; +} +.icon-ok:before { + content: "\f00c"; +} +.icon-remove:before { + content: "\f00d"; +} +.icon-zoom-in:before { + content: "\f00e"; +} +.icon-zoom-out:before { + content: "\f010"; +} +.icon-power-off:before, +.icon-off:before { + content: "\f011"; +} +.icon-signal:before { + content: "\f012"; +} +.icon-gear:before, +.icon-cog:before { + content: "\f013"; +} +.icon-trash:before { + content: "\f014"; +} +.icon-home:before { + content: "\f015"; +} +.icon-file-alt:before { + content: "\f016"; +} +.icon-time:before { + content: "\f017"; +} +.icon-road:before { + content: "\f018"; +} +.icon-download-alt:before { + content: "\f019"; +} +.icon-download:before { + content: "\f01a"; +} +.icon-upload:before { + content: "\f01b"; +} +.icon-inbox:before { + content: "\f01c"; +} +.icon-play-circle:before { + content: "\f01d"; +} +.icon-rotate-right:before, +.icon-repeat:before { + content: "\f01e"; +} +.icon-refresh:before { + content: "\f021"; +} +.icon-list-alt:before { + content: "\f022"; +} +.icon-lock:before { + content: "\f023"; +} +.icon-flag:before { + content: "\f024"; +} +.icon-headphones:before { + content: "\f025"; +} +.icon-volume-off:before { + content: "\f026"; +} +.icon-volume-down:before { + content: "\f027"; +} +.icon-volume-up:before { + content: "\f028"; +} +.icon-qrcode:before { + content: "\f029"; +} +.icon-barcode:before { + content: "\f02a"; +} +.icon-tag:before { + content: "\f02b"; +} +.icon-tags:before { + content: "\f02c"; +} +.icon-book:before { + content: "\f02d"; +} +.icon-bookmark:before { + content: "\f02e"; +} +.icon-print:before { + content: "\f02f"; +} +.icon-camera:before { + content: "\f030"; +} +.icon-font:before { + content: "\f031"; +} +.icon-bold:before { + content: "\f032"; +} +.icon-italic:before { + content: "\f033"; +} +.icon-text-height:before { + content: "\f034"; +} +.icon-text-width:before { + content: "\f035"; +} +.icon-align-left:before { + content: "\f036"; +} +.icon-align-center:before { + content: "\f037"; +} +.icon-align-right:before { + content: "\f038"; +} +.icon-align-justify:before { + content: "\f039"; +} +.icon-list:before { + content: "\f03a"; +} +.icon-indent-left:before { + content: "\f03b"; +} +.icon-indent-right:before { + content: "\f03c"; +} +.icon-facetime-video:before { + content: "\f03d"; +} +.icon-picture:before { + content: "\f03e"; +} +.icon-pencil:before { + content: "\f040"; +} +.icon-map-marker:before { + content: "\f041"; +} +.icon-adjust:before { + content: "\f042"; +} +.icon-tint:before { + content: "\f043"; +} +.icon-edit:before { + content: "\f044"; +} +.icon-share:before { + content: "\f045"; +} +.icon-check:before { + content: "\f046"; +} +.icon-move:before { + content: "\f047"; +} +.icon-step-backward:before { + content: "\f048"; +} +.icon-fast-backward:before { + content: "\f049"; +} +.icon-backward:before { + content: "\f04a"; +} +.icon-play:before { + content: "\f04b"; +} +.icon-pause:before { + content: "\f04c"; +} +.icon-stop:before { + content: "\f04d"; +} +.icon-forward:before { + content: "\f04e"; +} +.icon-fast-forward:before { + content: "\f050"; +} +.icon-step-forward:before { + content: "\f051"; +} +.icon-eject:before { + content: "\f052"; +} +.icon-chevron-left:before { + content: "\f053"; +} +.icon-chevron-right:before { + content: "\f054"; +} +.icon-plus-sign:before { + content: "\f055"; +} +.icon-minus-sign:before { + content: "\f056"; +} +.icon-remove-sign:before { + content: "\f057"; +} +.icon-ok-sign:before { + content: "\f058"; +} +.icon-question-sign:before { + content: "\f059"; +} +.icon-info-sign:before { + content: "\f05a"; +} +.icon-screenshot:before { + content: "\f05b"; +} +.icon-remove-circle:before { + content: "\f05c"; +} +.icon-ok-circle:before { + content: "\f05d"; +} +.icon-ban-circle:before { + content: "\f05e"; +} +.icon-arrow-left:before { + content: "\f060"; +} +.icon-arrow-right:before { + content: "\f061"; +} +.icon-arrow-up:before { + content: "\f062"; +} +.icon-arrow-down:before { + content: "\f063"; +} +.icon-mail-forward:before, +.icon-share-alt:before { + content: "\f064"; +} +.icon-resize-full:before { + content: "\f065"; +} +.icon-resize-small:before { + content: "\f066"; +} +.icon-plus:before { + content: "\f067"; +} +.icon-minus:before { + content: "\f068"; +} +.icon-asterisk:before { + content: "\f069"; +} +.icon-exclamation-sign:before { + content: "\f06a"; +} +.icon-gift:before { + content: "\f06b"; +} +.icon-leaf:before { + content: "\f06c"; +} +.icon-fire:before { + content: "\f06d"; +} +.icon-eye-open:before { + content: "\f06e"; +} +.icon-eye-close:before { + content: "\f070"; +} +.icon-warning-sign:before { + content: "\f071"; +} +.icon-plane:before { + content: "\f072"; +} +.icon-calendar:before { + content: "\f073"; +} +.icon-random:before { + content: "\f074"; +} +.icon-comment:before { + content: "\f075"; +} +.icon-magnet:before { + content: "\f076"; +} +.icon-chevron-up:before { + content: "\f077"; +} +.icon-chevron-down:before { + content: "\f078"; +} +.icon-retweet:before { + content: "\f079"; +} +.icon-shopping-cart:before { + content: "\f07a"; +} +.icon-folder-close:before { + content: "\f07b"; +} +.icon-folder-open:before { + content: "\f07c"; +} +.icon-resize-vertical:before { + content: "\f07d"; +} +.icon-resize-horizontal:before { + content: "\f07e"; +} +.icon-bar-chart:before { + content: "\f080"; +} +.icon-twitter-sign:before { + content: "\f081"; +} +.icon-facebook-sign:before { + content: "\f082"; +} +.icon-camera-retro:before { + content: "\f083"; +} +.icon-key:before { + content: "\f084"; +} +.icon-gears:before, +.icon-cogs:before { + content: "\f085"; +} +.icon-comments:before { + content: "\f086"; +} +.icon-thumbs-up-alt:before { + content: "\f087"; +} +.icon-thumbs-down-alt:before { + content: "\f088"; +} +.icon-star-half:before { + content: "\f089"; +} +.icon-heart-empty:before { + content: "\f08a"; +} +.icon-signout:before { + content: "\f08b"; +} +.icon-linkedin-sign:before { + content: "\f08c"; +} +.icon-pushpin:before { + content: "\f08d"; +} +.icon-external-link:before { + content: "\f08e"; +} +.icon-signin:before { + content: "\f090"; +} +.icon-trophy:before { + content: "\f091"; +} +.icon-github-sign:before { + content: "\f092"; +} +.icon-upload-alt:before { + content: "\f093"; +} +.icon-lemon:before { + content: "\f094"; +} +.icon-phone:before { + content: "\f095"; +} +.icon-unchecked:before, +.icon-check-empty:before { + content: "\f096"; +} +.icon-bookmark-empty:before { + content: "\f097"; +} +.icon-phone-sign:before { + content: "\f098"; +} +.icon-twitter:before { + content: "\f099"; +} +.icon-facebook:before { + content: "\f09a"; +} +.icon-github:before { + content: "\f09b"; +} +.icon-unlock:before { + content: "\f09c"; +} +.icon-credit-card:before { + content: "\f09d"; +} +.icon-rss:before { + content: "\f09e"; +} +.icon-hdd:before { + content: "\f0a0"; +} +.icon-bullhorn:before { + content: "\f0a1"; +} +.icon-bell:before { + content: "\f0a2"; +} +.icon-certificate:before { + content: "\f0a3"; +} +.icon-hand-right:before { + content: "\f0a4"; +} +.icon-hand-left:before { + content: "\f0a5"; +} +.icon-hand-up:before { + content: "\f0a6"; +} +.icon-hand-down:before { + content: "\f0a7"; +} +.icon-circle-arrow-left:before { + content: "\f0a8"; +} +.icon-circle-arrow-right:before { + content: "\f0a9"; +} +.icon-circle-arrow-up:before { + content: "\f0aa"; +} +.icon-circle-arrow-down:before { + content: "\f0ab"; +} +.icon-globe:before { + content: "\f0ac"; +} +.icon-wrench:before { + content: "\f0ad"; +} +.icon-tasks:before { + content: "\f0ae"; +} +.icon-filter:before { + content: "\f0b0"; +} +.icon-briefcase:before { + content: "\f0b1"; +} +.icon-fullscreen:before { + content: "\f0b2"; +} +.icon-group:before { + content: "\f0c0"; +} +.icon-link:before { + content: "\f0c1"; +} +.icon-cloud:before { + content: "\f0c2"; +} +.icon-beaker:before { + content: "\f0c3"; +} +.icon-cut:before { + content: "\f0c4"; +} +.icon-copy:before { + content: "\f0c5"; +} +.icon-paperclip:before, +.icon-paper-clip:before { + content: "\f0c6"; +} +.icon-save:before { + content: "\f0c7"; +} +.icon-sign-blank:before { + content: "\f0c8"; +} +.icon-reorder:before { + content: "\f0c9"; +} +.icon-list-ul:before { + content: "\f0ca"; +} +.icon-list-ol:before { + content: "\f0cb"; +} +.icon-strikethrough:before { + content: "\f0cc"; +} +.icon-underline:before { + content: "\f0cd"; +} +.icon-table:before { + content: "\f0ce"; +} +.icon-magic:before { + content: "\f0d0"; +} +.icon-truck:before { + content: "\f0d1"; +} +.icon-pinterest:before { + content: "\f0d2"; +} +.icon-pinterest-sign:before { + content: "\f0d3"; +} +.icon-google-plus-sign:before { + content: "\f0d4"; +} +.icon-google-plus:before { + content: "\f0d5"; +} +.icon-money:before { + content: "\f0d6"; +} +.icon-caret-down:before { + content: "\f0d7"; +} +.icon-caret-up:before { + content: "\f0d8"; +} +.icon-caret-left:before { + content: "\f0d9"; +} +.icon-caret-right:before { + content: "\f0da"; +} +.icon-columns:before { + content: "\f0db"; +} +.icon-sort:before { + content: "\f0dc"; +} +.icon-sort-down:before { + content: "\f0dd"; +} +.icon-sort-up:before { + content: "\f0de"; +} +.icon-envelope:before { + content: "\f0e0"; +} +.icon-linkedin:before { + content: "\f0e1"; +} +.icon-rotate-left:before, +.icon-undo:before { + content: "\f0e2"; +} +.icon-legal:before { + content: "\f0e3"; +} +.icon-dashboard:before { + content: "\f0e4"; +} +.icon-comment-alt:before { + content: "\f0e5"; +} +.icon-comments-alt:before { + content: "\f0e6"; +} +.icon-bolt:before { + content: "\f0e7"; +} +.icon-sitemap:before { + content: "\f0e8"; +} +.icon-umbrella:before { + content: "\f0e9"; +} +.icon-paste:before { + content: "\f0ea"; +} +.icon-lightbulb:before { + content: "\f0eb"; +} +.icon-exchange:before { + content: "\f0ec"; +} +.icon-cloud-download:before { + content: "\f0ed"; +} +.icon-cloud-upload:before { + content: "\f0ee"; +} +.icon-user-md:before { + content: "\f0f0"; +} +.icon-stethoscope:before { + content: "\f0f1"; +} +.icon-suitcase:before { + content: "\f0f2"; +} +.icon-bell-alt:before { + content: "\f0f3"; +} +.icon-coffee:before { + content: "\f0f4"; +} +.icon-food:before { + content: "\f0f5"; +} +.icon-file-text-alt:before { + content: "\f0f6"; +} +.icon-building:before { + content: "\f0f7"; +} +.icon-hospital:before { + content: "\f0f8"; +} +.icon-ambulance:before { + content: "\f0f9"; +} +.icon-medkit:before { + content: "\f0fa"; +} +.icon-fighter-jet:before { + content: "\f0fb"; +} +.icon-beer:before { + content: "\f0fc"; +} +.icon-h-sign:before { + content: "\f0fd"; +} +.icon-plus-sign-alt:before { + content: "\f0fe"; +} +.icon-double-angle-left:before { + content: "\f100"; +} +.icon-double-angle-right:before { + content: "\f101"; +} +.icon-double-angle-up:before { + content: "\f102"; +} +.icon-double-angle-down:before { + content: "\f103"; +} +.icon-angle-left:before { + content: "\f104"; +} +.icon-angle-right:before { + content: "\f105"; +} +.icon-angle-up:before { + content: "\f106"; +} +.icon-angle-down:before { + content: "\f107"; +} +.icon-desktop:before { + content: "\f108"; +} +.icon-laptop:before { + content: "\f109"; +} +.icon-tablet:before { + content: "\f10a"; +} +.icon-mobile-phone:before { + content: "\f10b"; +} +.icon-circle-blank:before { + content: "\f10c"; +} +.icon-quote-left:before { + content: "\f10d"; +} +.icon-quote-right:before { + content: "\f10e"; +} +.icon-spinner:before { + content: "\f110"; +} +.icon-circle:before { + content: "\f111"; +} +.icon-mail-reply:before, +.icon-reply:before { + content: "\f112"; +} +.icon-github-alt:before { + content: "\f113"; +} +.icon-folder-close-alt:before { + content: "\f114"; +} +.icon-folder-open-alt:before { + content: "\f115"; +} +.icon-expand-alt:before { + content: "\f116"; +} +.icon-collapse-alt:before { + content: "\f117"; +} +.icon-smile:before { + content: "\f118"; +} +.icon-frown:before { + content: "\f119"; +} +.icon-meh:before { + content: "\f11a"; +} +.icon-gamepad:before { + content: "\f11b"; +} +.icon-keyboard:before { + content: "\f11c"; +} +.icon-flag-alt:before { + content: "\f11d"; +} +.icon-flag-checkered:before { + content: "\f11e"; +} +.icon-terminal:before { + content: "\f120"; +} +.icon-code:before { + content: "\f121"; +} +.icon-reply-all:before { + content: "\f122"; +} +.icon-mail-reply-all:before { + content: "\f122"; +} +.icon-star-half-full:before, +.icon-star-half-empty:before { + content: "\f123"; +} +.icon-location-arrow:before { + content: "\f124"; +} +.icon-crop:before { + content: "\f125"; +} +.icon-code-fork:before { + content: "\f126"; +} +.icon-unlink:before { + content: "\f127"; +} +.icon-question:before { + content: "\f128"; +} +.icon-info:before { + content: "\f129"; +} +.icon-exclamation:before { + content: "\f12a"; +} +.icon-superscript:before { + content: "\f12b"; +} +.icon-subscript:before { + content: "\f12c"; +} +.icon-eraser:before { + content: "\f12d"; +} +.icon-puzzle-piece:before { + content: "\f12e"; +} +.icon-microphone:before { + content: "\f130"; +} +.icon-microphone-off:before { + content: "\f131"; +} +.icon-shield:before { + content: "\f132"; +} +.icon-calendar-empty:before { + content: "\f133"; +} +.icon-fire-extinguisher:before { + content: "\f134"; +} +.icon-rocket:before { + content: "\f135"; +} +.icon-maxcdn:before { + content: "\f136"; +} +.icon-chevron-sign-left:before { + content: "\f137"; +} +.icon-chevron-sign-right:before { + content: "\f138"; +} +.icon-chevron-sign-up:before { + content: "\f139"; +} +.icon-chevron-sign-down:before { + content: "\f13a"; +} +.icon-html5:before { + content: "\f13b"; +} +.icon-css3:before { + content: "\f13c"; +} +.icon-anchor:before { + content: "\f13d"; +} +.icon-unlock-alt:before { + content: "\f13e"; +} +.icon-bullseye:before { + content: "\f140"; +} +.icon-ellipsis-horizontal:before { + content: "\f141"; +} +.icon-ellipsis-vertical:before { + content: "\f142"; +} +.icon-rss-sign:before { + content: "\f143"; +} +.icon-play-sign:before { + content: "\f144"; +} +.icon-ticket:before { + content: "\f145"; +} +.icon-minus-sign-alt:before { + content: "\f146"; +} +.icon-check-minus:before { + content: "\f147"; +} +.icon-level-up:before { + content: "\f148"; +} +.icon-level-down:before { + content: "\f149"; +} +.icon-check-sign:before { + content: "\f14a"; +} +.icon-edit-sign:before { + content: "\f14b"; +} +.icon-external-link-sign:before { + content: "\f14c"; +} +.icon-share-sign:before { + content: "\f14d"; +} +.icon-compass:before { + content: "\f14e"; +} +.icon-collapse:before { + content: "\f150"; +} +.icon-collapse-top:before { + content: "\f151"; +} +.icon-expand:before { + content: "\f152"; +} +.icon-euro:before, +.icon-eur:before { + content: "\f153"; +} +.icon-gbp:before { + content: "\f154"; +} +.icon-dollar:before, +.icon-usd:before { + content: "\f155"; +} +.icon-rupee:before, +.icon-inr:before { + content: "\f156"; +} +.icon-yen:before, +.icon-jpy:before { + content: "\f157"; +} +.icon-renminbi:before, +.icon-cny:before { + content: "\f158"; +} +.icon-won:before, +.icon-krw:before { + content: "\f159"; +} +.icon-bitcoin:before, +.icon-btc:before { + content: "\f15a"; +} +.icon-file:before { + content: "\f15b"; +} +.icon-file-text:before { + content: "\f15c"; +} +.icon-sort-by-alphabet:before { + content: "\f15d"; +} +.icon-sort-by-alphabet-alt:before { + content: "\f15e"; +} +.icon-sort-by-attributes:before { + content: "\f160"; +} +.icon-sort-by-attributes-alt:before { + content: "\f161"; +} +.icon-sort-by-order:before { + content: "\f162"; +} +.icon-sort-by-order-alt:before { + content: "\f163"; +} +.icon-thumbs-up:before { + content: "\f164"; +} +.icon-thumbs-down:before { + content: "\f165"; +} +.icon-youtube-sign:before { + content: "\f166"; +} +.icon-youtube:before { + content: "\f167"; +} +.icon-xing:before { + content: "\f168"; +} +.icon-xing-sign:before { + content: "\f169"; +} +.icon-youtube-play:before { + content: "\f16a"; +} +.icon-dropbox:before { + content: "\f16b"; +} +.icon-stackexchange:before { + content: "\f16c"; +} +.icon-instagram:before { + content: "\f16d"; +} +.icon-flickr:before { + content: "\f16e"; +} +.icon-adn:before { + content: "\f170"; +} +.icon-bitbucket:before { + content: "\f171"; +} +.icon-bitbucket-sign:before { + content: "\f172"; +} +.icon-tumblr:before { + content: "\f173"; +} +.icon-tumblr-sign:before { + content: "\f174"; +} +.icon-long-arrow-down:before { + content: "\f175"; +} +.icon-long-arrow-up:before { + content: "\f176"; +} +.icon-long-arrow-left:before { + content: "\f177"; +} +.icon-long-arrow-right:before { + content: "\f178"; +} +.icon-apple:before { + content: "\f179"; +} +.icon-windows:before { + content: "\f17a"; +} +.icon-android:before { + content: "\f17b"; +} +.icon-linux:before { + content: "\f17c"; +} +.icon-dribbble:before { + content: "\f17d"; +} +.icon-skype:before { + content: "\f17e"; +} +.icon-foursquare:before { + content: "\f180"; +} +.icon-trello:before { + content: "\f181"; +} +.icon-female:before { + content: "\f182"; +} +.icon-male:before { + content: "\f183"; +} +.icon-gittip:before { + content: "\f184"; +} +.icon-sun:before { + content: "\f185"; +} +.icon-moon:before { + content: "\f186"; +} +.icon-archive:before { + content: "\f187"; +} +.icon-bug:before { + content: "\f188"; +} +.icon-vk:before { + content: "\f189"; +} +.icon-weibo:before { + content: "\f18a"; +} +.icon-renren:before { + content: "\f18b"; +} diff --git a/src/main/webapp/authman/css/font-awesome.min.css b/src/main/webapp/authman/css/font-awesome.min.css new file mode 100644 index 0000000..866437f --- /dev/null +++ b/src/main/webapp/authman/css/font-awesome.min.css @@ -0,0 +1,403 @@ +@font-face{font-family:'FontAwesome';src:url('../font/fontawesome-webfont.eot?v=3.2.1');src:url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'),url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'),url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'),url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');font-weight:normal;font-style:normal;}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;} +[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none;} +.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em;} +a [class^="icon-"],a [class*=" icon-"]{display:inline;} +[class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.1428571428571428em;text-align:right;padding-right:0.2857142857142857em;}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.4285714285714286em;} +.icons-ul{margin-left:2.142857142857143em;list-style-type:none;}.icons-ul>li{position:relative;} +.icons-ul .icon-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;text-align:center;line-height:inherit;} +[class^="icon-"].hide,[class*=" icon-"].hide{display:none;} +.icon-muted{color:#eeeeee;} +.icon-light{color:#ffffff;} +.icon-dark{color:#333333;} +.icon-border{border:solid 1px #eeeeee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.icon-2x{font-size:2em;}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.icon-3x{font-size:3em;}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} +.icon-4x{font-size:4em;}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.icon-5x{font-size:5em;}.icon-5x.icon-border{border-width:5px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px;} +.pull-right{float:right;} +.pull-left{float:left;} +[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em;} +[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em;} +[class^="icon-"],[class*=" icon-"]{display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0% 0%;background-repeat:repeat;margin-top:0;} +.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:none;} +.btn [class^="icon-"].icon-large,.nav [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large,.nav [class*=" icon-"].icon-large{line-height:.9em;} +.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block;} +.nav-tabs [class^="icon-"],.nav-pills [class^="icon-"],.nav-tabs [class*=" icon-"],.nav-pills [class*=" icon-"],.nav-tabs [class^="icon-"].icon-large,.nav-pills [class^="icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large{line-height:.9em;} +.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.18em;} +.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{line-height:.8em;} +.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.25em;} +.btn.btn-large [class^="icon-"],.btn.btn-large [class*=" icon-"]{margin-top:0;}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.05em;} +.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x{margin-right:.2em;} +.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-left:.2em;} +.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{line-height:inherit;} +.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%;}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em;} +.icon-stack .icon-stack-base{font-size:2em;*line-height:1em;} +.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;} +a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none;} +@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);} 100%{-moz-transform:rotate(359deg);}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);} 100%{-webkit-transform:rotate(359deg);}}@-o-keyframes spin{0%{-o-transform:rotate(0deg);} 100%{-o-transform:rotate(359deg);}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg);} 100%{-ms-transform:rotate(359deg);}}@keyframes spin{0%{transform:rotate(0deg);} 100%{transform:rotate(359deg);}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);} +.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);} +.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);} +.icon-flip-horizontal:before{-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1);} +.icon-flip-vertical:before{-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1);} +a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block;} +.icon-glass:before{content:"\f000";} +.icon-music:before{content:"\f001";} +.icon-search:before{content:"\f002";} +.icon-envelope-alt:before{content:"\f003";} +.icon-heart:before{content:"\f004";} +.icon-star:before{content:"\f005";} +.icon-star-empty:before{content:"\f006";} +.icon-user:before{content:"\f007";} +.icon-film:before{content:"\f008";} +.icon-th-large:before{content:"\f009";} +.icon-th:before{content:"\f00a";} +.icon-th-list:before{content:"\f00b";} +.icon-ok:before{content:"\f00c";} +.icon-remove:before{content:"\f00d";} +.icon-zoom-in:before{content:"\f00e";} +.icon-zoom-out:before{content:"\f010";} +.icon-power-off:before,.icon-off:before{content:"\f011";} +.icon-signal:before{content:"\f012";} +.icon-gear:before,.icon-cog:before{content:"\f013";} +.icon-trash:before{content:"\f014";} +.icon-home:before{content:"\f015";} +.icon-file-alt:before{content:"\f016";} +.icon-time:before{content:"\f017";} +.icon-road:before{content:"\f018";} +.icon-download-alt:before{content:"\f019";} +.icon-download:before{content:"\f01a";} +.icon-upload:before{content:"\f01b";} +.icon-inbox:before{content:"\f01c";} +.icon-play-circle:before{content:"\f01d";} +.icon-rotate-right:before,.icon-repeat:before{content:"\f01e";} +.icon-refresh:before{content:"\f021";} +.icon-list-alt:before{content:"\f022";} +.icon-lock:before{content:"\f023";} +.icon-flag:before{content:"\f024";} +.icon-headphones:before{content:"\f025";} +.icon-volume-off:before{content:"\f026";} +.icon-volume-down:before{content:"\f027";} +.icon-volume-up:before{content:"\f028";} +.icon-qrcode:before{content:"\f029";} +.icon-barcode:before{content:"\f02a";} +.icon-tag:before{content:"\f02b";} +.icon-tags:before{content:"\f02c";} +.icon-book:before{content:"\f02d";} +.icon-bookmark:before{content:"\f02e";} +.icon-print:before{content:"\f02f";} +.icon-camera:before{content:"\f030";} +.icon-font:before{content:"\f031";} +.icon-bold:before{content:"\f032";} +.icon-italic:before{content:"\f033";} +.icon-text-height:before{content:"\f034";} +.icon-text-width:before{content:"\f035";} +.icon-align-left:before{content:"\f036";} +.icon-align-center:before{content:"\f037";} +.icon-align-right:before{content:"\f038";} +.icon-align-justify:before{content:"\f039";} +.icon-list:before{content:"\f03a";} +.icon-indent-left:before{content:"\f03b";} +.icon-indent-right:before{content:"\f03c";} +.icon-facetime-video:before{content:"\f03d";} +.icon-picture:before{content:"\f03e";} +.icon-pencil:before{content:"\f040";} +.icon-map-marker:before{content:"\f041";} +.icon-adjust:before{content:"\f042";} +.icon-tint:before{content:"\f043";} +.icon-edit:before{content:"\f044";} +.icon-share:before{content:"\f045";} +.icon-check:before{content:"\f046";} +.icon-move:before{content:"\f047";} +.icon-step-backward:before{content:"\f048";} +.icon-fast-backward:before{content:"\f049";} +.icon-backward:before{content:"\f04a";} +.icon-play:before{content:"\f04b";} +.icon-pause:before{content:"\f04c";} +.icon-stop:before{content:"\f04d";} +.icon-forward:before{content:"\f04e";} +.icon-fast-forward:before{content:"\f050";} +.icon-step-forward:before{content:"\f051";} +.icon-eject:before{content:"\f052";} +.icon-chevron-left:before{content:"\f053";} +.icon-chevron-right:before{content:"\f054";} +.icon-plus-sign:before{content:"\f055";} +.icon-minus-sign:before{content:"\f056";} +.icon-remove-sign:before{content:"\f057";} +.icon-ok-sign:before{content:"\f058";} +.icon-question-sign:before{content:"\f059";} +.icon-info-sign:before{content:"\f05a";} +.icon-screenshot:before{content:"\f05b";} +.icon-remove-circle:before{content:"\f05c";} +.icon-ok-circle:before{content:"\f05d";} +.icon-ban-circle:before{content:"\f05e";} +.icon-arrow-left:before{content:"\f060";} +.icon-arrow-right:before{content:"\f061";} +.icon-arrow-up:before{content:"\f062";} +.icon-arrow-down:before{content:"\f063";} +.icon-mail-forward:before,.icon-share-alt:before{content:"\f064";} +.icon-resize-full:before{content:"\f065";} +.icon-resize-small:before{content:"\f066";} +.icon-plus:before{content:"\f067";} +.icon-minus:before{content:"\f068";} +.icon-asterisk:before{content:"\f069";} +.icon-exclamation-sign:before{content:"\f06a";} +.icon-gift:before{content:"\f06b";} +.icon-leaf:before{content:"\f06c";} +.icon-fire:before{content:"\f06d";} +.icon-eye-open:before{content:"\f06e";} +.icon-eye-close:before{content:"\f070";} +.icon-warning-sign:before{content:"\f071";} +.icon-plane:before{content:"\f072";} +.icon-calendar:before{content:"\f073";} +.icon-random:before{content:"\f074";} +.icon-comment:before{content:"\f075";} +.icon-magnet:before{content:"\f076";} +.icon-chevron-up:before{content:"\f077";} +.icon-chevron-down:before{content:"\f078";} +.icon-retweet:before{content:"\f079";} +.icon-shopping-cart:before{content:"\f07a";} +.icon-folder-close:before{content:"\f07b";} +.icon-folder-open:before{content:"\f07c";} +.icon-resize-vertical:before{content:"\f07d";} +.icon-resize-horizontal:before{content:"\f07e";} +.icon-bar-chart:before{content:"\f080";} +.icon-twitter-sign:before{content:"\f081";} +.icon-facebook-sign:before{content:"\f082";} +.icon-camera-retro:before{content:"\f083";} +.icon-key:before{content:"\f084";} +.icon-gears:before,.icon-cogs:before{content:"\f085";} +.icon-comments:before{content:"\f086";} +.icon-thumbs-up-alt:before{content:"\f087";} +.icon-thumbs-down-alt:before{content:"\f088";} +.icon-star-half:before{content:"\f089";} +.icon-heart-empty:before{content:"\f08a";} +.icon-signout:before{content:"\f08b";} +.icon-linkedin-sign:before{content:"\f08c";} +.icon-pushpin:before{content:"\f08d";} +.icon-external-link:before{content:"\f08e";} +.icon-signin:before{content:"\f090";} +.icon-trophy:before{content:"\f091";} +.icon-github-sign:before{content:"\f092";} +.icon-upload-alt:before{content:"\f093";} +.icon-lemon:before{content:"\f094";} +.icon-phone:before{content:"\f095";} +.icon-unchecked:before,.icon-check-empty:before{content:"\f096";} +.icon-bookmark-empty:before{content:"\f097";} +.icon-phone-sign:before{content:"\f098";} +.icon-twitter:before{content:"\f099";} +.icon-facebook:before{content:"\f09a";} +.icon-github:before{content:"\f09b";} +.icon-unlock:before{content:"\f09c";} +.icon-credit-card:before{content:"\f09d";} +.icon-rss:before{content:"\f09e";} +.icon-hdd:before{content:"\f0a0";} +.icon-bullhorn:before{content:"\f0a1";} +.icon-bell:before{content:"\f0a2";} +.icon-certificate:before{content:"\f0a3";} +.icon-hand-right:before{content:"\f0a4";} +.icon-hand-left:before{content:"\f0a5";} +.icon-hand-up:before{content:"\f0a6";} +.icon-hand-down:before{content:"\f0a7";} +.icon-circle-arrow-left:before{content:"\f0a8";} +.icon-circle-arrow-right:before{content:"\f0a9";} +.icon-circle-arrow-up:before{content:"\f0aa";} +.icon-circle-arrow-down:before{content:"\f0ab";} +.icon-globe:before{content:"\f0ac";} +.icon-wrench:before{content:"\f0ad";} +.icon-tasks:before{content:"\f0ae";} +.icon-filter:before{content:"\f0b0";} +.icon-briefcase:before{content:"\f0b1";} +.icon-fullscreen:before{content:"\f0b2";} +.icon-group:before{content:"\f0c0";} +.icon-link:before{content:"\f0c1";} +.icon-cloud:before{content:"\f0c2";} +.icon-beaker:before{content:"\f0c3";} +.icon-cut:before{content:"\f0c4";} +.icon-copy:before{content:"\f0c5";} +.icon-paperclip:before,.icon-paper-clip:before{content:"\f0c6";} +.icon-save:before{content:"\f0c7";} +.icon-sign-blank:before{content:"\f0c8";} +.icon-reorder:before{content:"\f0c9";} +.icon-list-ul:before{content:"\f0ca";} +.icon-list-ol:before{content:"\f0cb";} +.icon-strikethrough:before{content:"\f0cc";} +.icon-underline:before{content:"\f0cd";} +.icon-table:before{content:"\f0ce";} +.icon-magic:before{content:"\f0d0";} +.icon-truck:before{content:"\f0d1";} +.icon-pinterest:before{content:"\f0d2";} +.icon-pinterest-sign:before{content:"\f0d3";} +.icon-google-plus-sign:before{content:"\f0d4";} +.icon-google-plus:before{content:"\f0d5";} +.icon-money:before{content:"\f0d6";} +.icon-caret-down:before{content:"\f0d7";} +.icon-caret-up:before{content:"\f0d8";} +.icon-caret-left:before{content:"\f0d9";} +.icon-caret-right:before{content:"\f0da";} +.icon-columns:before{content:"\f0db";} +.icon-sort:before{content:"\f0dc";} +.icon-sort-down:before{content:"\f0dd";} +.icon-sort-up:before{content:"\f0de";} +.icon-envelope:before{content:"\f0e0";} +.icon-linkedin:before{content:"\f0e1";} +.icon-rotate-left:before,.icon-undo:before{content:"\f0e2";} +.icon-legal:before{content:"\f0e3";} +.icon-dashboard:before{content:"\f0e4";} +.icon-comment-alt:before{content:"\f0e5";} +.icon-comments-alt:before{content:"\f0e6";} +.icon-bolt:before{content:"\f0e7";} +.icon-sitemap:before{content:"\f0e8";} +.icon-umbrella:before{content:"\f0e9";} +.icon-paste:before{content:"\f0ea";} +.icon-lightbulb:before{content:"\f0eb";} +.icon-exchange:before{content:"\f0ec";} +.icon-cloud-download:before{content:"\f0ed";} +.icon-cloud-upload:before{content:"\f0ee";} +.icon-user-md:before{content:"\f0f0";} +.icon-stethoscope:before{content:"\f0f1";} +.icon-suitcase:before{content:"\f0f2";} +.icon-bell-alt:before{content:"\f0f3";} +.icon-coffee:before{content:"\f0f4";} +.icon-food:before{content:"\f0f5";} +.icon-file-text-alt:before{content:"\f0f6";} +.icon-building:before{content:"\f0f7";} +.icon-hospital:before{content:"\f0f8";} +.icon-ambulance:before{content:"\f0f9";} +.icon-medkit:before{content:"\f0fa";} +.icon-fighter-jet:before{content:"\f0fb";} +.icon-beer:before{content:"\f0fc";} +.icon-h-sign:before{content:"\f0fd";} +.icon-plus-sign-alt:before{content:"\f0fe";} +.icon-double-angle-left:before{content:"\f100";} +.icon-double-angle-right:before{content:"\f101";} +.icon-double-angle-up:before{content:"\f102";} +.icon-double-angle-down:before{content:"\f103";} +.icon-angle-left:before{content:"\f104";} +.icon-angle-right:before{content:"\f105";} +.icon-angle-up:before{content:"\f106";} +.icon-angle-down:before{content:"\f107";} +.icon-desktop:before{content:"\f108";} +.icon-laptop:before{content:"\f109";} +.icon-tablet:before{content:"\f10a";} +.icon-mobile-phone:before{content:"\f10b";} +.icon-circle-blank:before{content:"\f10c";} +.icon-quote-left:before{content:"\f10d";} +.icon-quote-right:before{content:"\f10e";} +.icon-spinner:before{content:"\f110";} +.icon-circle:before{content:"\f111";} +.icon-mail-reply:before,.icon-reply:before{content:"\f112";} +.icon-github-alt:before{content:"\f113";} +.icon-folder-close-alt:before{content:"\f114";} +.icon-folder-open-alt:before{content:"\f115";} +.icon-expand-alt:before{content:"\f116";} +.icon-collapse-alt:before{content:"\f117";} +.icon-smile:before{content:"\f118";} +.icon-frown:before{content:"\f119";} +.icon-meh:before{content:"\f11a";} +.icon-gamepad:before{content:"\f11b";} +.icon-keyboard:before{content:"\f11c";} +.icon-flag-alt:before{content:"\f11d";} +.icon-flag-checkered:before{content:"\f11e";} +.icon-terminal:before{content:"\f120";} +.icon-code:before{content:"\f121";} +.icon-reply-all:before{content:"\f122";} +.icon-mail-reply-all:before{content:"\f122";} +.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123";} +.icon-location-arrow:before{content:"\f124";} +.icon-crop:before{content:"\f125";} +.icon-code-fork:before{content:"\f126";} +.icon-unlink:before{content:"\f127";} +.icon-question:before{content:"\f128";} +.icon-info:before{content:"\f129";} +.icon-exclamation:before{content:"\f12a";} +.icon-superscript:before{content:"\f12b";} +.icon-subscript:before{content:"\f12c";} +.icon-eraser:before{content:"\f12d";} +.icon-puzzle-piece:before{content:"\f12e";} +.icon-microphone:before{content:"\f130";} +.icon-microphone-off:before{content:"\f131";} +.icon-shield:before{content:"\f132";} +.icon-calendar-empty:before{content:"\f133";} +.icon-fire-extinguisher:before{content:"\f134";} +.icon-rocket:before{content:"\f135";} +.icon-maxcdn:before{content:"\f136";} +.icon-chevron-sign-left:before{content:"\f137";} +.icon-chevron-sign-right:before{content:"\f138";} +.icon-chevron-sign-up:before{content:"\f139";} +.icon-chevron-sign-down:before{content:"\f13a";} +.icon-html5:before{content:"\f13b";} +.icon-css3:before{content:"\f13c";} +.icon-anchor:before{content:"\f13d";} +.icon-unlock-alt:before{content:"\f13e";} +.icon-bullseye:before{content:"\f140";} +.icon-ellipsis-horizontal:before{content:"\f141";} +.icon-ellipsis-vertical:before{content:"\f142";} +.icon-rss-sign:before{content:"\f143";} +.icon-play-sign:before{content:"\f144";} +.icon-ticket:before{content:"\f145";} +.icon-minus-sign-alt:before{content:"\f146";} +.icon-check-minus:before{content:"\f147";} +.icon-level-up:before{content:"\f148";} +.icon-level-down:before{content:"\f149";} +.icon-check-sign:before{content:"\f14a";} +.icon-edit-sign:before{content:"\f14b";} +.icon-external-link-sign:before{content:"\f14c";} +.icon-share-sign:before{content:"\f14d";} +.icon-compass:before{content:"\f14e";} +.icon-collapse:before{content:"\f150";} +.icon-collapse-top:before{content:"\f151";} +.icon-expand:before{content:"\f152";} +.icon-euro:before,.icon-eur:before{content:"\f153";} +.icon-gbp:before{content:"\f154";} +.icon-dollar:before,.icon-usd:before{content:"\f155";} +.icon-rupee:before,.icon-inr:before{content:"\f156";} +.icon-yen:before,.icon-jpy:before{content:"\f157";} +.icon-renminbi:before,.icon-cny:before{content:"\f158";} +.icon-won:before,.icon-krw:before{content:"\f159";} +.icon-bitcoin:before,.icon-btc:before{content:"\f15a";} +.icon-file:before{content:"\f15b";} +.icon-file-text:before{content:"\f15c";} +.icon-sort-by-alphabet:before{content:"\f15d";} +.icon-sort-by-alphabet-alt:before{content:"\f15e";} +.icon-sort-by-attributes:before{content:"\f160";} +.icon-sort-by-attributes-alt:before{content:"\f161";} +.icon-sort-by-order:before{content:"\f162";} +.icon-sort-by-order-alt:before{content:"\f163";} +.icon-thumbs-up:before{content:"\f164";} +.icon-thumbs-down:before{content:"\f165";} +.icon-youtube-sign:before{content:"\f166";} +.icon-youtube:before{content:"\f167";} +.icon-xing:before{content:"\f168";} +.icon-xing-sign:before{content:"\f169";} +.icon-youtube-play:before{content:"\f16a";} +.icon-dropbox:before{content:"\f16b";} +.icon-stackexchange:before{content:"\f16c";} +.icon-instagram:before{content:"\f16d";} +.icon-flickr:before{content:"\f16e";} +.icon-adn:before{content:"\f170";} +.icon-bitbucket:before{content:"\f171";} +.icon-bitbucket-sign:before{content:"\f172";} +.icon-tumblr:before{content:"\f173";} +.icon-tumblr-sign:before{content:"\f174";} +.icon-long-arrow-down:before{content:"\f175";} +.icon-long-arrow-up:before{content:"\f176";} +.icon-long-arrow-left:before{content:"\f177";} +.icon-long-arrow-right:before{content:"\f178";} +.icon-apple:before{content:"\f179";} +.icon-windows:before{content:"\f17a";} +.icon-android:before{content:"\f17b";} +.icon-linux:before{content:"\f17c";} +.icon-dribbble:before{content:"\f17d";} +.icon-skype:before{content:"\f17e";} +.icon-foursquare:before{content:"\f180";} +.icon-trello:before{content:"\f181";} +.icon-female:before{content:"\f182";} +.icon-male:before{content:"\f183";} +.icon-gittip:before{content:"\f184";} +.icon-sun:before{content:"\f185";} +.icon-moon:before{content:"\f186";} +.icon-archive:before{content:"\f187";} +.icon-bug:before{content:"\f188";} +.icon-vk:before{content:"\f189";} +.icon-weibo:before{content:"\f18a";} +.icon-renren:before{content:"\f18b";} diff --git a/src/main/webapp/authman/css/gpl.txt b/src/main/webapp/authman/css/gpl.txt new file mode 100644 index 0000000..818433e --- /dev/null +++ b/src/main/webapp/authman/css/gpl.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/src/main/webapp/authman/css/gwt-bootstrap.css b/src/main/webapp/authman/css/gwt-bootstrap.css new file mode 100644 index 0000000..3b9a796 --- /dev/null +++ b/src/main/webapp/authman/css/gwt-bootstrap.css @@ -0,0 +1,35 @@ +body { padding-top: 50px; } +div.input-prepend>input,div.input-prepend>textarea,div.input-prepend>select,div.input-prepend>*.uneditable-input { margin-bottom: 0; } +div.input-append>input,div.input-append>textarea,div.input-append>select,div.input-append>*.uneditable-input { margin-bottom: 0; } +.gwt-PopupPanel .gwt-DatePicker { width: 200px; } +.gwt-SuggestBoxPopup { z-index: 2100; } +.gwt-SuggestBoxPopup .suggestPopupTop { background-color: white; } +.gwt-SuggestBoxPopup .suggestPopupMiddle { background-color: white; } +.gwt-SuggestBoxPopup .suggestPopupBottomCenter { background-color: white; } +.gwt-SuggestBoxPopup .item { + /*padding: 2px 6px; + color: #000;*/ + cursor: pointer; + font-size: 110%; + + /*display: block;*/ + padding: 3px 9px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} +.gwt-SuggestBoxPopup .item-selected { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} \ No newline at end of file diff --git a/src/main/webapp/authman/css/ieBrowserHacks.css b/src/main/webapp/authman/css/ieBrowserHacks.css new file mode 100644 index 0000000..7fff0ae --- /dev/null +++ b/src/main/webapp/authman/css/ieBrowserHacks.css @@ -0,0 +1,22 @@ +/* This file is part of CSS Buttons. + + CSS Buttons is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + CSS Buttons is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CSSButtons. If not, see . +*/ + + +/* for IE 6 and 7 (conditionalize as needed) + When designing button Backgrounds, ensure there's a white(transparent) gap between top and bottom states */ + + button.cssbutton {width:1%;} /* IE FLOAT HACK */ + button.cssbutton span {float:left;} /* IE HACK - This FLOAT is sometimes not need. As tested IE7 Needs it. */ \ No newline at end of file diff --git a/src/main/webapp/authman/css/prettify.css b/src/main/webapp/authman/css/prettify.css new file mode 100644 index 0000000..d44b3a2 --- /dev/null +++ b/src/main/webapp/authman/css/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} \ No newline at end of file diff --git a/src/main/webapp/authman/css/skins/sample/Thumbs.db b/src/main/webapp/authman/css/skins/sample/Thumbs.db new file mode 100644 index 0000000..6420a36 Binary files /dev/null and b/src/main/webapp/authman/css/skins/sample/Thumbs.db differ diff --git a/src/main/webapp/authman/css/skins/sample/_notes/dwsync.xml b/src/main/webapp/authman/css/skins/sample/_notes/dwsync.xml new file mode 100644 index 0000000..fdf0399 --- /dev/null +++ b/src/main/webapp/authman/css/skins/sample/_notes/dwsync.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/authman/css/skins/sample/index.html b/src/main/webapp/authman/css/skins/sample/index.html new file mode 100644 index 0000000..678afba --- /dev/null +++ b/src/main/webapp/authman/css/skins/sample/index.html @@ -0,0 +1,23 @@ + + + + + + + + +
Search Link Any Size
+ + + + + +
Search Link Any Size
+ + + + diff --git a/src/main/webapp/authman/css/skins/sample/sample.css b/src/main/webapp/authman/css/skins/sample/sample.css new file mode 100644 index 0000000..8f465d1 --- /dev/null +++ b/src/main/webapp/authman/css/skins/sample/sample.css @@ -0,0 +1,59 @@ +/* This file is part of CSS Buttons. + + CSS Buttons is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + CSS Buttons is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CSS Buttons. If not, see . +*/ + +/* Overrides the CSS Buttons Framework */ +button.cssbutton.sample span,a.cssbutton.sample span,div.cssbutton.sample input { +color:#924F4F; +} + +/* Name: sample a + Desc: Blue Button */ +button.cssbutton.sample.a span,a.cssbutton.sample.a span,div.cssbutton.sample.a input { +background:url("sample_aRight.gif") no-repeat right 0; +} + +button.cssbutton.sample.a,a.cssbutton.sample.a,div.cssbutton.sample.a { +background:url("sample_aLeft.gif") no-repeat 0 center; +} + +button.cssbutton.sample.a:hover span,a.cssbutton.sample.a:hover span,div.cssbutton.sample.a:hover input { +color:#666; +background:url("sample_aRight.gif") no-repeat right 100%; +} + +button.cssbutton.sample.a:hover,a.cssbutton.sample.a:hover,div.cssbutton.sample.a:hover { +background:url("sample_aLeft.gif") no-repeat -255px center; +} + +/* Name: sample b + Desc: Orange Button */ +button.cssbutton.sample.b span,a.cssbutton.sample.b span,div.cssbutton.sample.b input { +color:#924F4F; +background:url("sample_bRight.gif") no-repeat right 0; +} + +button.cssbutton.sample.b,a.cssbutton.sample.b,div.cssbutton.sample.b { +background:url("sample_bLeft.gif") no-repeat 0 center; +} + +button.cssbutton.sample.b:hover span,a.cssbutton.sample.b:hover span,div.cssbutton.sample.b:hover input { +color:#524F4F; +background:url("sample_bRight.gif") no-repeat right 100%; +} + +button.cssbutton.sample.b:hover,a.cssbutton.sample.b:hover,div.cssbutton.sample.b:hover { +background:url("sample_bLeft.gif") no-repeat -255px center; +} \ No newline at end of file diff --git a/src/main/webapp/authman/css/skins/sample/sample_aLeft.gif b/src/main/webapp/authman/css/skins/sample/sample_aLeft.gif new file mode 100644 index 0000000..391912d Binary files /dev/null and b/src/main/webapp/authman/css/skins/sample/sample_aLeft.gif differ diff --git a/src/main/webapp/authman/css/skins/sample/sample_aRight.gif b/src/main/webapp/authman/css/skins/sample/sample_aRight.gif new file mode 100644 index 0000000..8cdd460 Binary files /dev/null and b/src/main/webapp/authman/css/skins/sample/sample_aRight.gif differ diff --git a/src/main/webapp/authman/css/skins/sample/sample_bLeft.gif b/src/main/webapp/authman/css/skins/sample/sample_bLeft.gif new file mode 100644 index 0000000..ec4dd4f Binary files /dev/null and b/src/main/webapp/authman/css/skins/sample/sample_bLeft.gif differ diff --git a/src/main/webapp/authman/css/skins/sample/sample_bRight.gif b/src/main/webapp/authman/css/skins/sample/sample_bRight.gif new file mode 100644 index 0000000..0b315bb Binary files /dev/null and b/src/main/webapp/authman/css/skins/sample/sample_bRight.gif differ diff --git a/src/main/webapp/authman/css/skins/sample/sample_commented.css b/src/main/webapp/authman/css/skins/sample/sample_commented.css new file mode 100644 index 0000000..17cf88e --- /dev/null +++ b/src/main/webapp/authman/css/skins/sample/sample_commented.css @@ -0,0 +1,56 @@ +/* This file is part of CSS Buttons. + + CSS Buttons is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + CSS Buttons is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CSS Buttons. If not, see . +*/ + +/* Name: sample_a + Desc: Blue Button */ + button.cssbutton.sample.a {background:url("sample_aLeft.gif") no-repeat 0px center;} /* Using Horizontal BG Positioning */ + button.cssbutton.sample.a span {background:url("sample_aRight.gif") no-repeat right 0%; } /* Using Vertical BG Positioning */ + + button.cssbutton.sample.a:hover {background:url("sample_aLeft.gif") no-repeat -40px center;} /* Negative X Positioning Method */ + button.cssbutton.sample.a:hover span {background:url("sample_aRight.gif") no-repeat right 100%; } + + a.cssbutton.sample.a {background:url("sample_aLeft.gif") no-repeat 0px center;} /* Using Horizontal BG Positioning */ + a.cssbutton.sample.a span {background:url("sample_aRight.gif") no-repeat right 0%; } /* Using Vertical BG Positioning */ + + a.cssbutton.sample.a:hover {background:url("sample_aLeft.gif") no-repeat -40px center;} /* Negative X Positioning Method */ + a.cssbutton.sample.a:hover span {background:url("sample_aRight.gif") no-repeat right 100%; } + + div.cssbutton.sample.a {background:url("sample_aLeft.gif") no-repeat 0px center;} /* Using Horizontal BG Positioning */ + div.cssbutton.sample.a input {background:url("sample_aRight.gif") no-repeat right 0%; } /* Using Vertical BG Positioning */ + + div.cssbutton.sample.a:hover {background:url("sample_aLeft.gif") no-repeat -40px center;} /* Negative X Positioning Method */ + div.cssbutton.sample.a:hover input {background:url("sample_aRight.gif") no-repeat right 100%; } + +/* Name: sample_b + Desc: Orange Button */ + button.cssbutton.sample.b {background:url("sample_bLeft.gif") no-repeat 0px center;} /* Using Horizontal BG Positioning */ + button.cssbutton.sample.b span {background:url("sample_bRight.gif") no-repeat right 0%; } /* Using Vertical BG Positioning */ + + button.cssbutton.sample.b:hover {background:url("sample_bLeft.gif") no-repeat -40px center;} /* Negative X Positioning Method */ + button.cssbutton.sample.b:hover span {background:url("sample_bRight.gif") no-repeat right 100%; } + + a.cssbutton.sample.b {background:url("sample_bLeft.gif") no-repeat 0px center;} /* Using Horizontal BG Positioning */ + a.cssbutton.sample.b span {background:url("sample_bRight.gif") no-repeat right 0%; } /* Using Vertical BG Positioning */ + + a.cssbutton.sample.b:hover {background:url("sample_bLeft.gif") no-repeat -40px center;} /* Negative X Positioning Method */ + a.cssbutton.sample.b:hover span {background:url("sample_bRight.gif") no-repeat right 100%; } + + div.cssbutton.sample.b {background:url("sample_bLeft.gif") no-repeat 0px center;} /* Using Horizontal BG Positioning */ + div.cssbutton.sample.b input {background:url("sample_bRight.gif") no-repeat right 0%; } /* Using Vertical BG Positioning */ + + div.cssbutton.sample.b:hover {background:url("sample_bLeft.gif") no-repeat -40px center;} /* Negative X Positioning Method */ + div.cssbutton.sample.b:hover input {background:url("sample_bRight.gif") no-repeat right 100%; } + \ No newline at end of file diff --git a/src/main/webapp/authman/font/FontAwesome.otf b/src/main/webapp/authman/font/FontAwesome.otf new file mode 100644 index 0000000..7012545 Binary files /dev/null and b/src/main/webapp/authman/font/FontAwesome.otf differ diff --git a/src/main/webapp/authman/font/fontawesome-webfont.eot b/src/main/webapp/authman/font/fontawesome-webfont.eot new file mode 100644 index 0000000..0662cb9 Binary files /dev/null and b/src/main/webapp/authman/font/fontawesome-webfont.eot differ diff --git a/src/main/webapp/authman/font/fontawesome-webfont.svg b/src/main/webapp/authman/font/fontawesome-webfont.svg new file mode 100644 index 0000000..2edb4ec --- /dev/null +++ b/src/main/webapp/authman/font/fontawesome-webfont.svg @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/authman/font/fontawesome-webfont.ttf b/src/main/webapp/authman/font/fontawesome-webfont.ttf new file mode 100644 index 0000000..d365924 Binary files /dev/null and b/src/main/webapp/authman/font/fontawesome-webfont.ttf differ diff --git a/src/main/webapp/authman/font/fontawesome-webfont.woff b/src/main/webapp/authman/font/fontawesome-webfont.woff new file mode 100644 index 0000000..b9bd17e Binary files /dev/null and b/src/main/webapp/authman/font/fontawesome-webfont.woff differ diff --git a/src/main/webapp/authman/gcube_common_styles.css b/src/main/webapp/authman/gcube_common_styles.css new file mode 100644 index 0000000..f0b5893 --- /dev/null +++ b/src/main/webapp/authman/gcube_common_styles.css @@ -0,0 +1,658 @@ +/** + * Common CSS for gCube Portlets + * + */ +@import url(normalize.css); + +/****** PANELS STYLES *******/ + + + +/* Use it for your portlet main Panel */ +.gcube_panel { + background: #FFFFFF; + border: 1px solid #99BBE8; + overflow: hidden; +} + +.gcube_poli_panel { + background: #FFFFFF; + border: 1px outset #99BBE8; + overflow: hidden; +} + +.gcube_noborders_panel { + background: #FFFFFF; + border: 0px; + overflow: hidden; +} + +/* or */ +.gcube_panel_thick_border { + background: #FFFFFF; + border: 2px solid #99BBE8; + overflow: hidden; +} + +/* To Use for the Portlet Main Header (if any) */ +.gcube_header_background { + background: #d6e3F3 !important; + border-bottom: 1px solid #6ab4eb; + border: none; + border-bottom: 1px solid #6ab4eb; + line-height: 15px; + overflow: hidden; + padding: 1px 4px 1px 4px; + margin: 0px; +} + +.gcube_inner_header_background { + font-family: tahoma, arial, verdana, sans-serif; + font-size: 11px; + font-weight: bold; + color: #15428B; + border-top: 1px solid #0D70C6; + border-left: 1px solid #0D70C6; + border-right: 1px solid #0D70C6; + background: transparent url(gcube_images/bg_nonselected_stack_item.png) + repeat; +} + +.gcube_content_panel { + padding: 4px; +} + +.gcube_panel_background { + font-family: tahoma, arial, verdana, sans-serif; + border: 1px solid #99BBE8; + font-size: 11px; + font-weight: bold; + color: #15428B; + background: transparent url(gcube_images/bg_nonselected_stack_item.png) + repeat; +} + +.gcube_header_caption { + color: #15428B; + text-shadow: 0 2px 4px rgba(0, 0, 0, 0.23); + font-family: tahoma, arial, verdana, sans-serif; + font-size: 10px; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + font-weight: bold; + padding: 1px 4px 1px 2px; +} + +/****** BORDERS STYLES *******/ +.gcube_border_thin { + border: 1px solid #99BBE8; +} + +.gcube_border_standard { + border: 2px solid #99BBE8; +} + +/****** TABLE STYLES *******/ +.gcube_table_header { + background: #d6e3F3 !important; + border-bottom: 1px solid #6ab4eb; + border: none; + color: #000000; + font-family: tahoma, arial, verdana, sans-serif; + font-size: 11px; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + line-height: 15px; + overflow: hidden; + padding: 1px 4px 1px 4px; + margin: 0px; +} + +.pad2 { + padding: 1px 2px 1px 2px; +} + +.margin { + margin: 1px 2px 1px 2px; +} + +/****** FORM COMPONENTS STYLES ******/ +.gwt-CheckBox { + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; +} + +.gwt-CheckBox label { + padding: 3px; +} + +.gwt-TextBox { + background: #FFFFFF url(gcube_images/text-bg.gif) repeat-x scroll 0 0; + border: 1px solid #B5B8C8; + padding: 1px 3px; +} + +.gwt-PushButton-up,.gwt-PushButton-up-hovering,.gwt-PushButton-down,.gwt-PushButton-down-hovering + { + cursor: hand; + cursor: pointer; +} + +.gwt-Button { + color: #464646; + border: 1px solid #BBB; + -moz-border-radius: 2em; + -webkit-border-radius: 2em; + border-radius: 4px; + background: #F2F2F2; + font-size: 12px; + cursor: pointer; + cursor: hand; + padding: 4px 15px; + margin: 5px; +} + +.gwt-Button[disabled]:hover,.gwt-Button[disabled]:active,.gwt-Button[disabled] + { + color: #CCC; + border-color: #BBB; + cursor: default; + opacity: 1.0; + background: #F2F2F2; +} + +.gwt-Button:hover { + border-color: #222; + color: #222; + opacity: 0.8; +} + +.gwt-Button:active { + background: #e3e8f3; +} + +.gwt-TextArea { + border: 1px inset #3366CC; + font-family: Arial, Helvetica, sans-serif; +} + +.button_help { + cursor: hand; + cursor: pointer; +} + +.button_help:hover { + opacity: 0.6; + filter: alpha(opacity = 60); +} + +/****** FONTS ******/ +.font_bold { + font-weight: bold +} + +.font_family { + font-family: Verdana, Helvetica, Arial, sans-serif; +} + +.font_tiny { + font-size: 8px; +} + +.font_small { + font-size: 10px; +} + +.font_standard { + font-size: 12px; +} + +.font_large { + font-size: 16px; +} + +.font_color { + color: #15428B; +} + +/****** MOUSE POINTERS ******/ +.crossCursor { + cursor: crosshair; +} + +.widthResizeCursor { + cursor: e-resize; +} + +.heightResizeCursor { + cursor: s-resize; +} + +.seResizeCursor { + cursor: se-resize; +} + +.cursor-move { + cursor: move; +} + +/* + * Use This to make the hand appear */ +.selectable { + cursor: hand; + cursor: pointer; +} + +/****** BASKETING STYLES *******/ +.gcube_basket_item { + background: transparent url(gcube_images/button_Down_stretch.png) + repeat-x scroll 0 0px; + border: 1px solid #0D70C6; + color: #15428B; + font-family: tahoma, arial, verdana, sans-serif; + font-size: 12px; + overflow: hidden; + margin-left: 2px; +} + +.gcube_selected { + border: 0px solid #D9E8FB; + background-color: #D9E8FB; + padding: 1px 4px 1px 4px; +} + +/****** DIALOG BOX STYLES ******/ +.gwt-PopupPanel { + background: #FFFFFF none repeat-x scroll 0 0; + border: 3px solid #99BBE8; + overflow: hidden; +} + +.gwt-DecoratedPopupPanel { + background: #FFFFFF none repeat-x scroll 0 0; + border: 3px solid #99BBE8; + overflow: hidden; +} + +/** dialog box **/ +.gcube_DialogBox { + z-index: 10001; + background: #FFFFFF none repeat-x scroll 0 0; + border: 5px solid #CCC; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.80); + -moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.80); + -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.80); +} + +.gcube_DialogBox .Caption { + color: #19326C; + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", + "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; + font-size: 15px; + font-weight: normal; + padding: 5px; +} + +.gcube_DialogBox .dialogContent div { + font-family: "HelveticaNeue-Light", "Helvetica Neue Light", + "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; + font-size: 13px; + color: #555; +} + +.gcube_DialogBox .dialogTop { + background: #EDEDEF; + margin: 0px; + padding-left: 5px; + height: 20px; + border-bottom: 1px #CCC solid; +} + +.gcube_DialogBox .dialogMiddleCenter { + padding: 5px; +} + +.gcube_DialogBox .dialogMiddleLeft { + background: #FFF; + padding-left: 5px; +} + +.gcube_DialogBox .dialogMiddleRight { + background: #FFF; + padding-right: 5px; +} + +.gcube_DialogBox .dialogBottom { + background: #FFF; + margin: 0px; + padding-left: 5px; + height: 5px; +} + +/****** DECORATED TAB BAR - TAB PANEL ********/ +.gwt-TabPanel { + font-size: 11px; + font-family: sans-serif; +} + +.gwt-TabPanelBottom { + border-top: 5px solid #DEDEDE; + overflow: hidden; + padding: 6px; +} + +.gwt-DecoratedTabBar { + height: 10px; + color: #416AA3; + cursor: pointer; + font-family: tahoma, arial, helvetica; + font-size: 11px; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + font-weight: normal; + line-height: normal; + white-space: nowrap; +} + +.gwt-TabBarItem { + height: 10px; +} + +.gwt-DecoratedTabBar .gwt-TabBarItem { + margin-left: 6px; + border-collapse: separate; +} + +.gwt-DecoratedTabBar .gwt-TabBarFirst { + width: 5px; /* first tab distance from the left */ +} + +.gwt-DecoratedTabBar .gwt-TabBarRest { + +} + +.gwt-DecoratedTabBar .tabTopCenter { + padding: 0px; + background: #DEDEDE; +} + +.gwt-DecoratedTabBar .tabTopLeft,.gwt-DecoratedTabBar .tabTopRight { + padding: 0px; + zoom: 1; +} + +.gwt-DecoratedTabBar .tabMiddleLeft,.gwt-DecoratedTabBar .tabMiddleRight + { + width: 6px; + padding: 0px; + background: #DEDEDE; +} + +.gwt-DecoratedTabBar .tabMiddleLeftInner,.gwt-DecoratedTabBar .tabMiddleRightInner + { + width: 1px; + height: 1px; +} + +.gwt-DecoratedTabBar .tabMiddleCenter { + cursor: pointer; + cursor: hand; + background: transparent url(gcube_images/gcube_header_gray.gif) repeat-x + scroll 0 -1px; + border-bottom: 1px solid #CDCDCD; + padding-top: 1px +} + +.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabTopCenter { + background: #8DB2E3; +} + +.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleLeft,.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleRight + { + background: #CEDFF5 url(gcube_images/gcube-tab-bg-selected.gif) repeat-x + scroll center bottom; +} + +.gwt-DecoratedTabBar .gwt-TabBarItem-selected .tabMiddleCenter { + cursor: default; + background: #CEDFF5 url(gcube_images/gcube-tab-bg-selected.gif) repeat-x + scroll center bottom; + color: #15428B; + border-bottom: 1px solid #8DB2E3; +} + +/****** MENUBAR ******/ +.gwt-MenuBar .gwt-MenuItem { + color: #15428B; + font-family: tahoma, arial, verdana, sans-serif; + font-size: 11px; + cursor: pointer; + cursor: hand; + border: 0px; +} + +.gwt-MenuBar .gwt-MenuItem-selected { + background: #E0EDFE; +} + +.gwt-MenuBar-horizontal { + color: #15428B; + font-family: tahoma, arial, verdana, sans-serif; + font-size: 10px; + /*border:1px solid #99BBE8;*/ + border: none; + background: none; +} + +.gwt-MenuBar-horizontal .gwt-MenuItem { + vertical-align: bottom; + color: #3366CC; + font-weight: bold; +} + +.gwt-MenuBar-horizontal .gwt-MenuItemSeparator { + width: 1px; + padding: 0px; + margin: 0px; + border: 0px; + border-left: 1px solid #888888; + background: white; +} + +.gwt-MenuBar-horizontal .gwt-MenuItemSeparator .menuSeparatorInner { + width: 1px; + height: 1px; + background: white; +} + +.gwt-MenuBar-vertical { + background-color: #cddef3; + border: 1px solid #99BBE8; +} + +/* ********* Trees ***************** */ +.gwt-Tree .gwt-TreeItem { + padding: 1px 0px; + margin: 0px; + border: 0px; + display: block !important; + white-space: nowrap; + cursor: hand; + cursor: pointer; +} + +/* ******* StackPanel *********/ /* ******* StackPanel *********/ +.gwt-StackPanel { + +} + +.gwt-StackPanel .gwt-StackPanelContent { + border: 1px solid #bbbbbb; + border-bottom: 0px; + background: white; + padding: 2px 2px 10px 5px; +} + +.gwt-StackPanelItem { + cursor: pointer; + cursor: hand; + font-family: tahoma, arial, verdana, sans-serif; + font-size: 11px; + font-weight: bold; + color: #15428B; + border-top: 1px solid #0D70C6; + border-left: 1px solid #0D70C6; + border-right: 1px solid #0D70C6; + background: transparent url(gcube_images/bg_nonselected_stack_item.png) + repeat; +} + +.gwt-StackPanel .stackItemTopLeft,.gwt-StackPanel .stackItemTopRight { + height: 6px; + width: 6px; + zoom: 1; +} + +.gwt-StackPanel .gwt-StackPanelItem-selected { + border: 1px solid #0D70C6; + color: #15428B; + background: transparent url(gcube_images/bg_selected_stack_item.png) + repeat-x scroll 0 -1px; +} + +.gwt-PushButton-up,.gwt-PushButton-up-hovering,.gwt-PushButton-up-disabled,.gwt-PushButton-down,.gwt-PushButton-down-hovering,.gwt-PushButton-down-disabled + { + margin: 0; + text-decoration: none; + background: #fff;; + border-radius: 2px; + -moz-border-radius: 2px; +} + +.gwt-PushButton-up,.gwt-PushButton-up-hovering,.gwt-PushButton-up-disabled + { + padding: 3px 5px 3px 5px; +} + +.gwt-PushButton-up { + border: 1px solid #bbb; + border-bottom: 1px solid #a0a0a0; + cursor: pointer; + cursor: hand; +} + +.gwt-PushButton-up-hovering { + border: 1px solid; + border-color: #939393; + cursor: pointer; + cursor: hand; +} + +.gwt-PushButton-up-disabled { + border: 1px solid #bbb; + cursor: default; + opacity: .5; + filter: alpha(opacity = 45); + zoom: 1; +} + +.gwt-PushButton-down,.gwt-PushButton-down-hovering,.gwt-PushButton-down-disabled + { + padding: 4px 4px 2px 6px; + outline: none; +} + +.gwt-PushButton-down { + border: 1px inset #666; + cursor: pointer; + cursor: hand; +} + +.gwt-PushButton-down-hovering { + border: 1px solid #939393; + border-top: 1px solid #333333; + cursor: pointer; + cursor: hand; +} + +.gwt-PushButton-down-disabled { + border: 1px outset #ccc; + cursor: default; + opacity: 0.5; + filter: alpha(opacity = 45); + zoom: 1; +} + +.gwt-ToggleButton-up,.gwt-ToggleButton-up-hovering,.gwt-ToggleButton-up-disabled,.gwt-ToggleButton-down,.gwt-ToggleButton-down-hovering,.gwt-ToggleButton-down-disabled + { + margin: 0; + text-decoration: none; + background: #FFF; + -moz-border-radius: 2px; + border-radius: 2px; +} + +.gwt-ToggleButton-up,.gwt-ToggleButton-up-hovering,.gwt-ToggleButton-up-disabled + { + padding: 3px 5px 3px 5px; +} + +.gwt-ToggleButton-up { + border: 1px solid #bbb; + border-bottom: 1px solid #a0a0a0; + cursor: pointer; + cursor: hand; +} + +.gwt-ToggleButton-up-hovering { + border: 1px solid; + border-color: #939393; + cursor: pointer; + cursor: hand; +} + +.gwt-ToggleButton-up-disabled { + border: 1px solid #bbb; + cursor: default; + opacity: .5; + zoom: 1; + filter: alpha(opacity = 45); +} + +.gwt-ToggleButton-down,.gwt-ToggleButton-down-hovering,.gwt-ToggleButton-down-disabled + { + padding: 4px 4px 2px 6px; +} + +.gwt-ToggleButton-down { + background-position: 0 -513px; + border: 1px inset #666; + cursor: pointer; + cursor: hand; +} + +.gwt-ToggleButton-down-hovering { + background-position: 0 -513px; + border: 1px inset; + border-color: #9cf #69e #69e #7af; + cursor: pointer; + cursor: hand; +} + +.gwt-ToggleButton-down-disabled { + background-position: 0 -513px; + border: 1px inset #ccc; + cursor: default; + opacity: .5; + zoom: 1; + filter: alpha(opacity = 45); +} \ No newline at end of file diff --git a/src/main/webapp/authman/gcube_images/bg_nonselected_stack_item.png b/src/main/webapp/authman/gcube_images/bg_nonselected_stack_item.png new file mode 100644 index 0000000..abafd34 Binary files /dev/null and b/src/main/webapp/authman/gcube_images/bg_nonselected_stack_item.png differ diff --git a/src/main/webapp/authman/gcube_images/bg_selected_stack_item.png b/src/main/webapp/authman/gcube_images/bg_selected_stack_item.png new file mode 100644 index 0000000..8c1dcf8 Binary files /dev/null and b/src/main/webapp/authman/gcube_images/bg_selected_stack_item.png differ diff --git a/src/main/webapp/authman/gcube_images/button_Down_stretch.png b/src/main/webapp/authman/gcube_images/button_Down_stretch.png new file mode 100644 index 0000000..3efe468 Binary files /dev/null and b/src/main/webapp/authman/gcube_images/button_Down_stretch.png differ diff --git a/src/main/webapp/authman/gcube_images/gcube-menu-background.gif b/src/main/webapp/authman/gcube_images/gcube-menu-background.gif new file mode 100644 index 0000000..c601b1e Binary files /dev/null and b/src/main/webapp/authman/gcube_images/gcube-menu-background.gif differ diff --git a/src/main/webapp/authman/gcube_images/gcube-tab-bg-selected.gif b/src/main/webapp/authman/gcube_images/gcube-tab-bg-selected.gif new file mode 100644 index 0000000..5eaba1e Binary files /dev/null and b/src/main/webapp/authman/gcube_images/gcube-tab-bg-selected.gif differ diff --git a/src/main/webapp/authman/gcube_images/gcube-tab-bg.gif b/src/main/webapp/authman/gcube_images/gcube-tab-bg.gif new file mode 100644 index 0000000..34f1333 Binary files /dev/null and b/src/main/webapp/authman/gcube_images/gcube-tab-bg.gif differ diff --git a/src/main/webapp/authman/gcube_images/gcube_header_gray.gif b/src/main/webapp/authman/gcube_images/gcube_header_gray.gif new file mode 100644 index 0000000..8046089 Binary files /dev/null and b/src/main/webapp/authman/gcube_images/gcube_header_gray.gif differ diff --git a/src/main/webapp/authman/gcube_images/hborder.png b/src/main/webapp/authman/gcube_images/hborder.png new file mode 100644 index 0000000..ec58ae6 Binary files /dev/null and b/src/main/webapp/authman/gcube_images/hborder.png differ diff --git a/src/main/webapp/authman/gcube_images/help.png b/src/main/webapp/authman/gcube_images/help.png new file mode 100644 index 0000000..5c87017 Binary files /dev/null and b/src/main/webapp/authman/gcube_images/help.png differ diff --git a/src/main/webapp/authman/gcube_images/text-bg.gif b/src/main/webapp/authman/gcube_images/text-bg.gif new file mode 100644 index 0000000..4179607 Binary files /dev/null and b/src/main/webapp/authman/gcube_images/text-bg.gif differ diff --git a/src/main/webapp/authman/gcube_images/white-grad.png b/src/main/webapp/authman/gcube_images/white-grad.png new file mode 100644 index 0000000..aaf57aa Binary files /dev/null and b/src/main/webapp/authman/gcube_images/white-grad.png differ diff --git a/src/main/webapp/authman/gcube_images/white-top-bottom.gif b/src/main/webapp/authman/gcube_images/white-top-bottom.gif new file mode 100644 index 0000000..fe7dd1c Binary files /dev/null and b/src/main/webapp/authman/gcube_images/white-top-bottom.gif differ diff --git a/src/main/webapp/authman/img/glyphicons-halflings-white.png b/src/main/webapp/authman/img/glyphicons-halflings-white.png new file mode 100644 index 0000000..3bf6484 Binary files /dev/null and b/src/main/webapp/authman/img/glyphicons-halflings-white.png differ diff --git a/src/main/webapp/authman/img/glyphicons-halflings.png b/src/main/webapp/authman/img/glyphicons-halflings.png new file mode 100644 index 0000000..a996999 Binary files /dev/null and b/src/main/webapp/authman/img/glyphicons-halflings.png differ diff --git a/src/main/webapp/authman/js/bootstrap.min.js b/src/main/webapp/authman/js/bootstrap.min.js new file mode 100644 index 0000000..1e11b28 --- /dev/null +++ b/src/main/webapp/authman/js/bootstrap.min.js @@ -0,0 +1,6 @@ +/*! +* Bootstrap.js by @fat & @mdo 2.3.2 +* Copyright 2012 Twitter, Inc. +* http://www.apache.org/licenses/LICENSE-2.0.txt +*/ +!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(".dropdown-backdrop").remove(),e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||("ontouchstart"in document.documentElement&&(!s.closest('.nav').length)&&e('