Vassilis Floros 2019-11-07 12:45:40 +00:00
parent a7c112162d
commit cc5bb088be
116 changed files with 36171 additions and 0 deletions

1
distro/LICENSE Normal file
View File

@ -0,0 +1 @@
${gcube.license}

65
distro/README Normal file
View File

@ -0,0 +1,65 @@
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
--------------------------------------------------
* Panagiota Koltsida (p.koltsida@di.uoa.gr), University of Athens
Maintainers
-----------
* Panagiota Koltsida (p.koltsida@di.uoa.gr), University of Athens
Download information
--------------------------------------------------
Source code is available from SVN:
${scm.url}
Binaries can be downloaded from the gCube website:
${gcube.website}
Installation
--------------------------------------------------
Use the respective war
Documentation
--------------------------------------------------
Documentation is available on-line in the gCube Wiki:
${gcube.wikiRoot}/Users%27_Management
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.

33
distro/changelog.xml Normal file
View File

@ -0,0 +1,33 @@
<ReleaseNotes>
<Changeset component="org.gcube.portlets-admin.users-management-portlet.3-0-0" date="2016-06-20">
<Change>First release of the redesigned portlet</Change>
</Changeset>
<Changeset component="org.gcube.portlets-admin.users-management-portlet.3-1-0" date="2016-09-24">
<Change>UI usability improvements</Change>
<Change>Added more options in handling users and/or groups/roles</Change>
<Change>Fixed minor bugs concerning user deletion from VRE and scroll bars in modals</Change>
</Changeset>
<Changeset component="org.gcube.portlets-admin.users-management-portlet.3-2-0" date="2016-11-09">
<Change>VRE Managers are informed for acceptance or rejection of requests</Change>
<Change>Fixed a bug in the request's grid causing grid not to be refreshed after an action</Change>
</Changeset>
<Changeset component="org.gcube.portlets-admin.users-management-portlet.3-3-0" date="2017-02-28">
<Change>Displaying rejected requests</Change>
<Change>Improved modals' labels</Change>
</Changeset>
<Changeset component="org.gcube.portlets-admin.users-management-portlet.3-4-0" date="2017-04-06">
<Change>Fixed a scroll bar issue</Change>
<Change>Updated the label for unregistering users from a VRE</Change>
<Change>Fixed a bug which preventing the display of the requests for registration</Change>
</Changeset>
<Changeset component="org.gcube.portlets-admin.users-management-portlet.3-6-0" date="2017-08-23">
<Change>Fixed date sorting in table</Change>
<Change>Added notification for group membership</Change>
</Changeset>
<Changeset component="org.gcube.portlets-admin.users-management-portlet.3-7-0" date="2018-07-19">
<Change>Removed acceptance admin column in table</Change>
</Changeset>
<Changeset component="org.gcube.portlets-admin.users-management-portlet.3-8-0" date="2019-07-04">
<Change>Email on role assignment/revoke</Change>
</Changeset>
</ReleaseNotes>

31
distro/descriptor.xml Normal file
View File

@ -0,0 +1,31 @@
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>servicearchive</id>
<formats>
<format>tar.gz</format>
</formats>
<baseDirectory>/</baseDirectory>
<fileSets>
<fileSet>
<directory>${distroDirectory}</directory>
<outputDirectory>/</outputDirectory>
<useDefaultExcludes>true</useDefaultExcludes>
<includes>
<include>README</include>
<include>LICENSE</include>
<include>changelog.xml</include>
</includes>
<fileMode>755</fileMode>
<filtered>true</filtered>
</fileSet>
</fileSets>
<files>
<file>
<source>target/${build.finalName}.${project.packaging}</source>
<outputDirectory>/${artifactId}</outputDirectory>
</file>
</files>
</assembly>

25
distro/profile.xml Normal file
View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<Resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ID></ID>
<Type>Service</Type>
<Profile>
<Description>${description}</Description>
<Class>PortletAdmin</Class>
<Name>${artifactId}</Name>
<Version>${version}</Version>
<Packages>
<Software>
<Name>${artifactId}</Name>
<Version>${version}</Version>
<MavenCoordinates>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
</MavenCoordinates>
<Files>
<File>target/${build.finalName}.war</File>
</Files>
</Software>
</Packages>
</Profile>
</Resource>

162
pom.xml Normal file
View File

@ -0,0 +1,162 @@
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>maven-parent</artifactId>
<groupId>org.gcube.tools</groupId>
<version>1.0.0</version>
</parent>
<groupId>org.gcube.portlets.admin</groupId>
<artifactId>UsersManagementPortlet</artifactId>
<packaging>war</packaging>
<name>UsersManagement Portlet</name>
<description>UsersManagementPortlet portlet</description>
<version>3.8.1-SNAPSHOT</version>
<scm>
<connection>scm:svn:https://svn.madgik.di.uoa.gr/code/gcube/Portlets/UsersManagementPortlet</connection>
<developerConnection>scm:svn:https://svn.madgik.di.uoa.gr/code/gcube/Portlets/UsersManagementPortlet</developerConnection>
<url>https://svn.madgik.di.uoa.gr/code/gcube/Portlets/UsersManagementPortlet</url>
</scm>
<properties>
<liferay.version>6.2.2</liferay.version>
<distroDirectory>${project.basedir}/distro</distroDirectory>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.gcube.distribution</groupId>
<artifactId>maven-portal-bom</artifactId>
<version>LATEST</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>portal-service</artifactId>
<version>${liferay.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.portlet</groupId>
<artifactId>portlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>util-taglib</artifactId>
<version>6.2.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.18</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.liferay.maven.archetypes</groupId>
<artifactId>liferay-portlet-archetype</artifactId>
<version>${liferay.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.gcube.dvos</groupId>
<artifactId>usermanagement-core</artifactId>
<!-- <version>[2.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</version> -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.gcube.common.portal</groupId>
<artifactId>portal-manager</artifactId>
<!-- <version>[2.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</version> -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.gcube.portal</groupId>
<artifactId>custom-portal-handler</artifactId>
<!-- <version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version> -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.gcube.portal.mailing</groupId>
<artifactId>email-templates-library</artifactId>
<version>[1.0.0-SNAPSHOT,2.0.0-SNAPSHOT)</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptors>
<descriptor>${distroDirectory}/descriptor.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>servicearchive</id>
<phase>install</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,200 @@
/**
*
*/
package gr.cite.bluebridge.portlets.admin.usersmanagementportlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
/**
* @author Panagiota Koltsida
*
*/
public class EmailPartsConstruction {
static String gCubeFileName = "gcube-data.properties";
static String propFileName = "EmailTemplates.properties";
static String catalinaHome = System.getProperty("catalina.base");
static String filePath = catalinaHome + File.separator + "conf" + File.separator;
private static Log logger = LogFactoryUtil.getLog(EmailPartsConstruction.class);
public static String returnProperty(String bodyKey){
InputStream is = null;
try{
Properties props = new Properties();
logger.debug("Using file -> " + filePath + propFileName);
is = new FileInputStream(filePath + propFileName);
if (is != null) {
props.load(is);
}
String prop1 = props.getProperty(bodyKey);
logger.debug("The body msg that will be sent is.... ");
logger.debug(prop1);
return prop1;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public static String returnPortalName(){
InputStream is = null;
try{
Properties props = new Properties();
logger.debug("Using file -> " + filePath + gCubeFileName);
is = new FileInputStream(filePath + gCubeFileName);
if (is != null) {
props.load(is);
}
String prop1 = props.getProperty("portalinstancename");
logger.debug(prop1);
return prop1;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public static String returnBodyForMembershipRequestApproval(){
InputStream is = null;
String body = "";
try{
Properties props = new Properties();
logger.debug("Using file -> " + filePath + propFileName);
is = new FileInputStream(filePath + propFileName);
if (is != null) {
props.load(is);
}
String prop1 = props.getProperty(body);
logger.debug("The body msg that will be sent is.... ");
logger.debug(prop1);
return prop1;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public static void sendDismissalEmailToUser(){
InputStream is = null;
try{
Properties props = new Properties();
logger.debug("Using file -> " + filePath + propFileName);
is = new FileInputStream(filePath + propFileName);
if (is != null) {
props.load(is);
}
String prop1 = props.getProperty("prop1");
System.out.println(prop1);
}catch(Exception e){
e.printStackTrace();
}
}
public static String sendMailForMembershipRequestAcceptanceOrRejection(
String acceptRejectBody,
String userFullName, String groupName, String managerFullName,
String managerEmail, String userEmail, String portalComplete){
String body = returnProperty(acceptRejectBody);
if(body != null){
logger.info("portal name: " +portalComplete);
return java.text.MessageFormat.format(body, userFullName, groupName, managerFullName, managerEmail, userEmail, portalComplete);
}
return "";
}
public static void sendMailForMembershipRequestRejection(
String userFullName, String groupName, String managerFullName,
String managerEmail, String userEmail, String portalComplete){
String body = returnProperty("membershipRequestRejectionBody");
if(body != null){
java.text.MessageFormat.format(body, userFullName, groupName, managerFullName, managerEmail, userEmail);
}
}
public static String subjectForMembershipRequestAcceptanceOrRejection(
String subjectProperty, String groupName){
String subject = returnProperty(subjectProperty);
if(subject != null){
String finalString = groupName;
return java.text.MessageFormat.format(subject, finalString);
}
return "";
}
public static String subjectForUserDismissalFromSite(
String subjectProperty, String groupName){
return subjectForMembershipRequestAcceptanceOrRejection(subjectProperty, groupName);
}
public static void userDismissalFromSite(String groupName){
String body = returnProperty("userDismissalFromSiteBody");
if(body != null){
java.text.MessageFormat.format(body, groupName);
}
}
public static String getSiteTeamAssignmentSubject(String siteTeamName) {
String subject = returnProperty("siteTeamAssignmentSubject");
String response = "";
if(subject != null && !subject.isEmpty()) {
response = java.text.MessageFormat.format(subject, siteTeamName);
}
return response;
}
public static String getSiteTeamDismissalSubject(String siteTeamName) {
String subject = returnProperty("siteTeamDismissalSubject");
String response = "";
if(subject != null && !subject.isEmpty()) {
response = java.text.MessageFormat.format(subject, siteTeamName);
}
return response;
}
public static String getRoleAssignmentRevokeSubject(String groupname) {
String subject = returnProperty("roleAssignmentRevokeSubject");
String response = "";
if(subject != null && !subject.isEmpty()) {
response = java.text.MessageFormat.format(subject, groupname);
}
return response;
}
public static String constructPortal(String protocol, String port, String baseURL){
return baseURL;
}
}

View File

@ -0,0 +1,10 @@
membershipRequestAcceptanceBody=<p style=\"font-size:small\">Dear <b> {0}</b>,</p> <p style=\"font-size:small\"> Your request for accessing the {1} has been approved by {2} </p> <p style=\"font-size:small\">From now on you can access it here: {5} using the following email: <b> {4} </b></p>
membershipRequestAcceptanceSubject={0} Request Approved
membershipRequestRejectionBody=<p style=\"font-size:small\">Dear <b> {0}</b>,</p> <p style=\"font-size:small\">Your request for accessing the {1} at: <b>{5}</b> has been rejected by {2} </p>
membershipRequestRejectionSubject={0} Request Rejected
userDismissalFromSiteBody=<p style=\"font-size:small\">You have been unregistered from the <b> {0} VO/VRE</b></p> <p style=\"font-size:small\">The {0} VO/VRE administration team</p>
userDismissalFromSiteSubject={0} You have been unregistered
siteTeamAssignmentSubject=You are now associated with {0}
siteTeamDismissalSubject=You have been dismissed from {0}
roleAssignmentRevokeSubject=Your roles have been modified for {0}

View File

@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!DOCTYPE display PUBLIC "-//Liferay//DTD Display 6.2.0//EN" "http://www.liferay.com/dtd/liferay-display_6_2_0.dtd">
<display>
<category name="gCube Enabling Apps">
<portlet id="Users Management" />
</category>
</display>

View File

@ -0,0 +1,10 @@
name=UsersManagementPortlet
module-group-id=liferay
module-incremental-version=1
tags=
short-description=
change-log=
page-url=http://www.liferay.com
author=Liferay, Inc.
licenses=LGPL
portal.dependency.jars=usermanagement-core-2.0.0-20160229.000514-14.jar

View File

@ -0,0 +1,25 @@
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.2.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_2_0.dtd">
<liferay-portlet-app>
<portlet>
<portlet-name>Users Management</portlet-name>
<icon>/icon.png</icon>
</portlet>
<role-mapper>
<role-name>administrator</role-name>
<role-link>Administrator</role-link>
</role-mapper>
<role-mapper>
<role-name>guest</role-name>
<role-link>Guest</role-link>
</role-mapper>
<role-mapper>
<role-name>power-user</role-name>
<role-link>Power User</role-link>
</role-mapper>
<role-mapper>
<role-name>user</role-name>
<role-link>User</role-link>
</role-mapper>
</liferay-portlet-app>

View File

@ -0,0 +1,42 @@
<?xml version="1.0"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0">
<portlet>
<portlet-name>Users Management</portlet-name>
<display-name>Users Management</display-name>
<portlet-class>gr.cite.bluebridge.portlets.admin.usersmanagementportlet.UsersManagementPortletHome</portlet-class>
<init-param>
<name>view-template</name>
<value>/views/</value>
</init-param>
<!-- <init-param>
<name>role1</name>
<value>VO-Admin</value>
</init-param>
<init-param>
<name>role2</name>
<value>VRE-Manager</value>
</init-param> -->
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
</supports>
<portlet-info>
<title>Users Management</title>
<short-title>Users Management</short-title>
<keywords>Users Management</keywords>
</portlet-info>
<security-role-ref>
<role-name>administrator</role-name>
</security-role-ref>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power-user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>
</portlet-app>

View File

@ -0,0 +1,4 @@
<?xml version="1.0"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>

View File

@ -0,0 +1,142 @@
div#usersManagementPortletContainer div.modal-header,
div#usersManagementPortletContainer div.modal-footer{
border: 0px !important;
}
div#usersManagementPortletContainer div.text-tag.span2 {
padding : 0px;
}
div#usersManagementPortletContainer div#border,
div#usersManagementPortletContainer div#borderFirstScreen {
/* height:3px; */
border-top: 2px solid #0271be;
/* padding-bottom: 0.2em; */
}
div#usersManagementPortletContainer div.text-tag.span2:not(:first-of-type) {
margin-left : 10px !important;
}
div#usersManagementPortletContainer div.text-wrap {
width :inherit !important;
}
div#usersManagementPortletContainer span#textAboveTagsInput div.row div.text-core.span9 div.text-wrap,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignRolesModal div.row div.text-core.span9 div.text-wrap,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignUsersToGroupsModal div.row div.text-core.span9 div.text-wrap {
width :100% !important;
}
div#usersManagementPortletContainer span#textAboveTagsInput div.row div.text-core.span9,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignRolesModal div.row div.text-core.span9,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignUsersToGroupsModal div.row div.text-core.span9 {
min-height: 45px !important;
margin-top : -10px;
height:100% !important;
}
div#usersManagementPortletContainer span#textAboveTagsInput div.row:first div.text-core.span9 {
position: static;
}
div#usersManagementPortletContainer span#textAboveTagsInput div.row div.text-core.span9 div.text-wrap ,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignRolesModal div.row div.text-core.span9 div.text-wrap,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignUsersToGroupsModal div.row div.text-core.span9 div.text-wrap {
position:static;
}
div#usersManagementPortletContainer span#textAboveTagsInput div.row div.text-core.span9 div.text-wrap div.text-tags,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignRolesModal div.row div.text-core.span9 div.text-wrap div.text-tags,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignUsersToGroupsModal div.row div.text-core.span9 div.text-wrap div.text-tags{
position:static;
}
div#usersManagementPortletContainer span#textAboveTagsInput div.row div.text-core.span9 div.text-button {
padding: 0px 0px 8px 5px !important;
text-align: -webkit-center;
}
div#usersManagementPortletContainer #assignUsersRolesModal div.text-button.span12,
div#usersManagementPortletContainer #assignUsersToGroupsModal div.text-button.span12 {
padding-right: 0px;
}
div#usersManagementPortletContainer div.text-button.span12{
padding-left:10px !important;
border-radius : 6px !important;
}
div#usersManagementPortletContainer a.tag-remove {
/* margin-left : 5px; */
font-size : 14px;
padding: 3px 0px 3px 2px;
/* margin-top : 4px; */
}
div#usersManagementPortletContainer div#requestsAcceptanceBody > div.row:first-of-type > div.text-core > div.text-wrap > div.text-tags > div.text-tag:not(:last-of-type){
margin-right : 15px !important;
}
div#usersManagementPortletContainer span#textAboveTagsInput> div.row div.text-tags > div.text-tag:not(:last-of-type),
div#usersManagementPortletContainer span#textAboveTagsInputInAssignRolesModal> div.row div.text-tags > div.text-tag:not(:last-of-type),
div#usersManagementPortletContainer span#textAboveTagsInputInAssignUsersToGroupsModal> div.row div.text-tags > div.text-tag:not(:last-of-type){
margin-right : 15px !important;
}
div#usersManagementPortletContainer a.tag-remove:hover {
/* background : white;
background-color : white; */
text-decoration : none;
color: red;
}
div#usersManagementPortletContainer span#textAboveTagsInput div.row:nth-last-child(-n+2) div.text-core.span9 div.text-wrap div.text-dropdown.text-position-below,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignRolesModal div.row:nth-last-child(-n+2) div.text-core.span9 div.text-wrap div.text-dropdown.text-position-below,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignUsersToGroupsModal div.row:nth-last-child(-n+2) div.text-core.span9 div.text-wrap div.text-dropdown.text-position-below {
margin-left: -5px;
top: 100% !important;
}
div#usersManagementPortletContainer textarea#userNamesList {
width :100% !important;
display : none !important;
}
div#usersManagementPortletContainer textarea#userNamesListInAssignRolesModal,
div#usersManagementPortletContainer textarea#userNamesListInAssignUsersToGroupsModal {
width :100% !important;
display : none !important;
}
div#usersManagementPortletContainer div.text-tags {
padding-top:0px !important;
padding-bottom:0px !important;
padding-left : 0px !important;
}
div#usersManagementPortletContainer div.text-button {
background : rgb(234,234,234) !important;
background-color : rgb(234,234,234) !important;
border : 0px !important;
text-align :
}
div#usersManagementPortletContainer div.text-button span {
padding-top : 7px;
display : inline-block;
text-align: center;
font-size : 14px;
color: #0271be;
white-space : nowrap;
}
div.modal-body div.row ~ div.row div.text-button span {
/* text-transform : capitalize; */
}
div#usersManagementPortletContainer a.text-remove {
display : none !important;
}
div#usersManagementPortletContainer div.text-button.span12 {
border-radius : 7px;
}
div#usersManagementPortletContainer div#requestsAcceptanceBody > div.row > div.text-core.span11 > div.text-wrap {
position: static !important;
}
div#usersManagementPortletContainer div#requestsAcceptanceBody > div.row > div.text-core.span11 > div.text-wrap > div.text-tags{
position : static;
}
div#usersManagementPortletContainer input#singleTag {
margin-top : 0px;
margin-left : 10px;
}
div#usersManagementPortletContainer div#singleTagSection.hiddenSection,
div#usersManagementPortletContainer div#multipleTagsSection.hiddenSection,
div#usersManagementPortletContainer div#singleTagSectionInAssignRolesModal.hiddenSection,
div#usersManagementPortletContainer div#multipleTagsSectionInAssignRolesModal.hiddenSection,
div#usersManagementPortletContainer div#singleTagSectionInAssignUsersToGroupsModal.hiddenSection,
div#usersManagementPortletContainer div#multipleTagsSectionInAssignUsersToGroupsModal.hiddenSection{
display :none;
}
.recipients .text-tag,
.emailCBCContainer .text-tag {
margin-right: 1em;
margin-bottom: 0.5em;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,485 @@
/*
* Table styles
*/
table.dataTable {
width: 100%;
margin: 0 auto;
clear: both;
border-collapse: separate;
border-spacing: 0;
/*
* Header and footer styles
*/
/*
* Body styles
*/
}
table.dataTable thead th,
table.dataTable tfoot th {
font-weight: bold;
/* position: relative; */
background-image: none !important;
}
table.dataTable thead th,
table.dataTable thead td {
padding: 10px 18px;
border-bottom: 1px solid #111;
}
table.dataTable thead th:active,
table.dataTable thead td:active {
outline: none;
}
table.dataTable tfoot th,
table.dataTable tfoot td {
padding: 10px 18px 6px 18px;
border-top: 1px solid #111;
}
table.dataTable thead .sorting,
table.dataTable thead .sorting_asc,
table.dataTable thead .sorting_desc {
cursor: pointer;
*cursor: hand;
}
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after {
/* position: absolute;
top: 12px;
right: 8px;
display: block; */
font-family: FontAwesome;
font-weight: normal;
font-size: 0.8em;
}
table.dataTable thead .sorting,
table.dataTable thead .sorting_asc,
table.dataTable thead .sorting_desc,
table.dataTable thead .sorting_asc_disabled,
table.dataTable thead .sorting_desc_disabled {
background-repeat: no-repeat;
background-position: center right;
}
table.dataTable thead .sorting:after {
content: "\f0dc";
color: #0271be;
font-size: 0.8em;
}
table.dataTable thead .sorting:hover:after,
table.dataTable thead .sorting_desc:hover:after,
table.dataTable thead .sorting_asc:hover:after {
color: #009AE5;
}
table.dataTable thead .sorting_asc:after {
content: "\f0de";
color: #0271be;
font-size: 0.8em;
}
table.dataTable thead .sorting_desc:after {
content: "\f0dd";
color: #0271be;
}
table.dataTable thead .sorting_asc_disabled:after {
}
/* table.dataTable thead .sorting {
background-image: url("../../img/sort_both.png");
}
table.dataTable thead .sorting_asc {
background-image: url("../../img/sort_asc.png");
}
table.dataTable thead .sorting_desc {
background-image: url("../../img/sort_desc.png");
}
table.dataTable thead .sorting_asc_disabled {
background-image: url("../../img/sort_asc_disabled.png");
}
table.dataTable thead .sorting_desc_disabled {
background-image: url("../../img/sort_desc_disabled.png");
} */
table.dataTable tbody tr {
background-color: #ffffff;
}
table.dataTable tbody tr.selected {
background-color: #B0BED9;
}
table.dataTable tbody th,
table.dataTable tbody td {
padding: 8px 10px;
}
table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
border-top: 1px solid #ddd;
}
table.dataTable.row-border tbody tr:first-child th,
table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,
table.dataTable.display tbody tr:first-child td {
border-top: none;
}
table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
border-top: 1px solid #ddd;
border-right: 1px solid #ddd;
}
table.dataTable.cell-border tbody tr th:first-child,
table.dataTable.cell-border tbody tr td:first-child {
border-left: 1px solid #ddd;
}
table.dataTable.cell-border tbody tr:first-child th,
table.dataTable.cell-border tbody tr:first-child td {
border-top: none;
}
table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
background-color: #f9f9f9;
}
table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
background-color: #acbad4;
}
table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {
background-color: #f6f6f6;
}
table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
background-color: #aab7d1;
}
table.dataTable.order-column tbody tr > .sorting_1,
table.dataTable.order-column tbody tr > .sorting_2,
table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
table.dataTable.display tbody tr > .sorting_2,
table.dataTable.display tbody tr > .sorting_3 {
background-color: #fafafa;
}
table.dataTable.order-column tbody tr.selected > .sorting_1,
table.dataTable.order-column tbody tr.selected > .sorting_2,
table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
table.dataTable.display tbody tr.selected > .sorting_2,
table.dataTable.display tbody tr.selected > .sorting_3 {
background-color: #acbad5;
}
table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
background-color: #f1f1f1;
}
table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
background-color: #f3f3f3;
}
table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
background-color: whitesmoke;
}
table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
background-color: #a6b4cd;
}
table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
background-color: #a8b5cf;
}
table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
background-color: #a9b7d1;
}
table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
background-color: #fafafa;
}
table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
background-color: #fcfcfc;
}
table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
background-color: #fefefe;
}
table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
background-color: #acbad5;
}
table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
background-color: #aebcd6;
}
table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
background-color: #afbdd8;
}
table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
background-color: #eaeaea;
}
table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {
background-color: #ececec;
}
table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {
background-color: #efefef;
}
table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
background-color: #a2aec7;
}
table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
background-color: #a3b0c9;
}
table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
background-color: #a5b2cb;
}
table.dataTable.no-footer {
border-bottom: 1px solid #111;
}
table.dataTable.nowrap th, table.dataTable.nowrap td {
white-space: nowrap;
}
table.dataTable.compact thead th,
table.dataTable.compact thead td {
padding: 4px 17px 4px 4px;
}
table.dataTable.compact tfoot th,
table.dataTable.compact tfoot td {
padding: 4px;
}
table.dataTable.compact tbody th,
table.dataTable.compact tbody td {
padding: 4px;
}
table.dataTable th.dt-left,
table.dataTable td.dt-left {
text-align: left;
}
table.dataTable th.dt-center,
table.dataTable td.dt-center,
table.dataTable td.dataTables_empty {
text-align: center;
}
table.dataTable th.dt-right,
table.dataTable td.dt-right {
text-align: right;
}
table.dataTable th.dt-justify,
table.dataTable td.dt-justify {
text-align: justify;
}
table.dataTable th.dt-nowrap,
table.dataTable td.dt-nowrap {
white-space: nowrap;
}
table.dataTable thead th.dt-head-left,
table.dataTable thead td.dt-head-left,
table.dataTable tfoot th.dt-head-left,
table.dataTable tfoot td.dt-head-left {
text-align: left;
}
table.dataTable thead th.dt-head-center,
table.dataTable thead td.dt-head-center,
table.dataTable tfoot th.dt-head-center,
table.dataTable tfoot td.dt-head-center {
text-align: center;
}
table.dataTable thead th.dt-head-right,
table.dataTable thead td.dt-head-right,
table.dataTable tfoot th.dt-head-right,
table.dataTable tfoot td.dt-head-right {
text-align: right;
}
table.dataTable thead th.dt-head-justify,
table.dataTable thead td.dt-head-justify,
table.dataTable tfoot th.dt-head-justify,
table.dataTable tfoot td.dt-head-justify {
text-align: justify;
}
table.dataTable thead th.dt-head-nowrap,
table.dataTable thead td.dt-head-nowrap,
table.dataTable tfoot th.dt-head-nowrap,
table.dataTable tfoot td.dt-head-nowrap {
white-space: nowrap;
}
table.dataTable tbody th.dt-body-left,
table.dataTable tbody td.dt-body-left {
text-align: left;
}
table.dataTable tbody th.dt-body-center,
table.dataTable tbody td.dt-body-center {
text-align: center;
}
table.dataTable tbody th.dt-body-right,
table.dataTable tbody td.dt-body-right {
text-align: right;
}
table.dataTable tbody th.dt-body-justify,
table.dataTable tbody td.dt-body-justify {
text-align: justify;
}
table.dataTable tbody th.dt-body-nowrap,
table.dataTable tbody td.dt-body-nowrap {
white-space: nowrap;
}
table.dataTable,
table.dataTable th,
table.dataTable td {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
/*
* Control feature layout
*/
.dataTables_wrapper {
position: relative;
clear: both;
*zoom: 1;
zoom: 1;
}
.dataTables_wrapper .dataTables_length {
float: left;
}
.dataTables_wrapper .dataTables_filter {
float: right;
text-align: right;
}
.dataTables_wrapper .dataTables_filter input {
margin-left: 0.5em;
}
.dataTables_wrapper .dataTables_info {
clear: both;
float: left;
padding-top: 0.755em;
}
.dataTables_wrapper .dataTables_paginate {
float: right;
text-align: right;
padding-top: 0.25em;
}
.dataTables_wrapper .dataTables_paginate .paginate_button {
box-sizing: border-box;
display: inline-block;
min-width: 1.5em;
padding: 0.5em 1em;
margin-left: 2px;
text-align: center;
text-decoration: none !important;
cursor: pointer;
*cursor: hand;
color: #333 !important;
border: 1px solid transparent;
border-radius: 0px;
}
.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
color: #333 !important;
border: 1px solid #979797;
background-color: white;
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc));
/* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%);
/* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%);
/* FF3.6+ */
background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%);
/* IE10+ */
background: -o-linear-gradient(top, white 0%, #dcdcdc 100%);
/* Opera 11.10+ */
background: linear-gradient(to bottom, white 0%, #dcdcdc 100%);
/* W3C */
}
.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
cursor: default;
color: #666 !important;
border: 1px solid transparent;
background: transparent;
box-shadow: none;
}
.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
color: white !important;
border: 1px solid #111;
background-color: #585858;
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));
/* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #585858 0%, #111 100%);
/* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient(top, #585858 0%, #111 100%);
/* FF3.6+ */
background: -ms-linear-gradient(top, #585858 0%, #111 100%);
/* IE10+ */
background: -o-linear-gradient(top, #585858 0%, #111 100%);
/* Opera 11.10+ */
background: linear-gradient(to bottom, #585858 0%, #111 100%);
/* W3C */
}
.dataTables_wrapper .dataTables_paginate .paginate_button:active {
outline: none;
background-color: #2b2b2b;
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));
/* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
/* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
/* FF3.6+ */
background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
/* IE10+ */
background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
/* Opera 11.10+ */
background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);
/* W3C */
box-shadow: inset 0 0 3px #111;
}
.dataTables_wrapper .dataTables_paginate .ellipsis {
padding: 0 1em;
}
.dataTables_wrapper .dataTables_processing {
position: absolute;
top: 50%;
left: 50%;
width: 100%;
height: 40px;
margin-left: -50%;
margin-top: -25px;
padding-top: 20px;
text-align: center;
font-size: 1.2em;
background-color: white;
background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
}
.dataTables_wrapper .dataTables_length,
.dataTables_wrapper .dataTables_filter,
.dataTables_wrapper .dataTables_info,
.dataTables_wrapper .dataTables_processing,
.dataTables_wrapper .dataTables_paginate {
color: #333;
}
.dataTables_wrapper .dataTables_scroll {
clear: both;
}
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
*margin-top: -1px;
-webkit-overflow-scrolling: touch;
}
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing,
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing {
height: 0;
overflow: hidden;
margin: 0 !important;
padding: 0 !important;
}
.dataTables_wrapper.no-footer .dataTables_scrollBody {
border-bottom: 1px solid #111;
}
.dataTables_wrapper.no-footer div.dataTables_scrollHead table,
.dataTables_wrapper.no-footer div.dataTables_scrollBody table {
border-bottom: none;
}
.dataTables_wrapper:after {
visibility: hidden;
display: block;
content: "";
clear: both;
height: 0;
}
@media screen and (max-width: 767px) {
.dataTables_wrapper .dataTables_info,
.dataTables_wrapper .dataTables_paginate {
float: none;
text-align: center;
}
.dataTables_wrapper .dataTables_paginate {
margin-top: 0.5em;
}
}
@media screen and (max-width: 640px) {
.dataTables_wrapper .dataTables_length,
.dataTables_wrapper .dataTables_filter {
float: none;
text-align: center;
}
.dataTables_wrapper .dataTables_filter {
margin-top: 0.5em;
}
}

View File

@ -0,0 +1 @@
table.dataTable tbody>tr.selected,table.dataTable tbody>tr>.selected{background-color:#B0BED9}table.dataTable.stripe tbody>tr.odd.selected,table.dataTable.stripe tbody>tr.odd>.selected,table.dataTable.display tbody>tr.odd.selected,table.dataTable.display tbody>tr.odd>.selected{background-color:#acbad4}table.dataTable.hover tbody>tr.selected:hover,table.dataTable.hover tbody>tr>.selected:hover,table.dataTable.display tbody>tr.selected:hover,table.dataTable.display tbody>tr>.selected:hover{background-color:#aab7d1}table.dataTable.order-column tbody>tr.selected>.sorting_1,table.dataTable.order-column tbody>tr.selected>.sorting_2,table.dataTable.order-column tbody>tr.selected>.sorting_3,table.dataTable.order-column tbody>tr>.selected,table.dataTable.display tbody>tr.selected>.sorting_1,table.dataTable.display tbody>tr.selected>.sorting_2,table.dataTable.display tbody>tr.selected>.sorting_3,table.dataTable.display tbody>tr>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody>tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody>tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody>tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody>tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody>tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody>tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody>tr.odd>.selected,table.dataTable.order-column.stripe tbody>tr.odd>.selected{background-color:#a6b4cd}table.dataTable.display tbody>tr.even>.selected,table.dataTable.order-column.stripe tbody>tr.even>.selected{background-color:#acbad5}table.dataTable.display tbody>tr.selected:hover>.sorting_1,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody>tr.selected:hover>.sorting_2,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody>tr.selected:hover>.sorting_3,table.dataTable.order-column.hover tbody>tr.selected:hover>.sorting_3{background-color:#a5b2cb}table.dataTable.display tbody>tr:hover>.selected,table.dataTable.display tbody>tr>.selected:hover,table.dataTable.order-column.hover tbody>tr:hover>.selected,table.dataTable.order-column.hover tbody>tr>.selected:hover{background-color:#a2aec7}table.dataTable td.select-checkbox{position:relative}table.dataTable td.select-checkbox:before,table.dataTable td.select-checkbox:after{display:block;position:absolute;top:1.2em;left:50%;width:12px;height:12px;box-sizing:border-box}table.dataTable td.select-checkbox:before{content:' ';margin-top:-6px;margin-left:-6px;border:1px solid black;border-radius:3px}table.dataTable tr.selected td.select-checkbox:after{content:'\2714';margin-top:-11px;margin-left:-4px;text-align:center;text-shadow:1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9}div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0.5em}@media screen and (max-width: 640px){div.dataTables_wrapper span.select-info,div.dataTables_wrapper span.select-item{margin-left:0;display:block}}

View File

@ -0,0 +1,492 @@
div#usersManagementPortletContainer button.close {
color: #d1d1d1 !important;
opacity : 1 !important;
}
div#usersManagementPortletContainer button.close:hover {
color: #0271be !important;
}
div#usersManagementPortletContainer span#theHeader {
color: #0271be;
}
div#usersManagementPortletContainer button#saveUsersRolesModal,
div#usersManagementPortletContainer #saveUsersRolesModalInAssignRolesModal,
div#usersManagementPortletContainer #closeUsersRolesModalInAssignRolesModal,
div#usersManagementPortletContainer #saveUsersTeamsInAssignUsersToGroupsModal,
div#usersManagementPortletContainer #closeUsersTeamsInAssignUsersToGroupsModal {
color : #4cb5d2;
}
div#usersManagementPortletContainer button#closeUsersRolesModal,
div#usersManagementPortletContainer button#acceptUsersRequestsOk,
div#usersManagementPortletContainer span#acceptRequestHeader,
div#usersManagementPortletContainer button#acceptDeleteUsersFromCurrentSiteModal,
div#usersManagementPortletContainer button#closeDeleteUsersFromCurrentSiteModal {
color : #4cb5d2;
}
div#usersManagementPortletContainer span#deleteCurrentSiteUsersHeader {
color : #0271be;
}
div#usersManagementPortletContainer div#blueLineBottom,
div#usersManagementPortletContainerSiteTeamsEditMode div#blueLineBottom {
border-bottom: 2px solid #0271be;
padding-bottom: 0.2em;
}
div#usersManagementPortletContainer div#changeUsersRolesModal div.modal-footer,
div#usersManagementPortletContainer div#usersRequestsModal div.modal-footer {
background-color: white;
background: white;
}
div#usersManagementPortletContainer span#textAboveTagsInput ,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignRolesModal,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignUsersToGroupsModal {
/* opacity: 0.8; */
display : block;
}
div#usersManagementPortletContainer div#changeUsersRolesModal div.modal-body div.bootstrap-tagsinput {
diplay : inline-block;
}
div#usersManagementPortletContainer div#changeUsersRolesModal div.modal-body div.bootstrap-tagsinput input{
display : none;
}
div#usersManagementPortletContainer div#changeUsersRolesModal div.modal-body label:not(#deleteTheRolesLabel),
div#usersManagementPortletContainer div#assignUsersRolesModal div.modal-body label:not(#deleteTheRolesLabelInAssignRolesModal),
div#usersManagementPortletContainer div#assignUsersToGroupsModal div.modal-body label:not(#deleteTheRolesLabelInAssignUsersToGroupsModal),
#addGroupTeamAttributes label,
#groupTeamAttributes label {
color: #0271be;
display : inline-block;
text-transform: capitalize;
}
div#usersManagementPortletContainer div#changeUsersTeamsModal div.modal-body label:not(#deleteTheRolesLabel) {
color : #4cb5d2;
display : inline-block;
}
div#usersManagementPortletContainer label#deleteTheRolesLabel {
display : inline-block;
}
div#usersManagementPortletContainer label#deleteTheRolesLabelInAssignRolesModal,
div#usersManagementPortletContainer label#deleteTheRolesLabelInAssignUsersToGroupsModal {
display : inline-block;
}
div#usersManagementPortletContainer div#changeUsersRolesModal div.modal-body div.bootstrap-tagsinput {
display : inline-block;
margin-left : 10px;
}
div#usersManagementPortletContainer span#textAboveTagsInput div.row,
div#assignUsersRolesModal span#textAboveTagsInputInAssignRolesModal div.row,
div#assignUsersToGroupsModal span#textAboveTagsInputInAssignUsersToGroupsModal div.row {
margin-left : 0px;
}
div#usersManagementPortletContainer span#textAboveTagsInput div.row.usersEmailsTagsInModals div.text-core.span9,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignRolesModal div.row.usersEmailsTagsInModals div.text-core.span9,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignUsersToGroupsModal div.row.usersEmailsTagsInModals div.text-core.span9 {
max-height: 10em !important;
overflow-y: scroll !important;
margin-top: -0.7em;
padding-top: 0.7em;
}
div#usersManagementPortletContainer div#changeUsersRolesModal div.modal-body span#textAboveTagsInput div.row:last-of-type div.bootstrap-tagsinput {
border: 1px solid #4cb5d2;
border-radius: 8px;
margin-top:-7px
}
div#usersManagementPortletContainer div#changeUsersRolesModal div.modal-body span#textAboveTagsInput div.row:nth-last-child(-n+2) div.text-core.span9,
div#usersManagementPortletContainer div#assignUsersRolesModal div.modal-body span#textAboveTagsInputInAssignRolesModal div.row:last-of-type div.text-core.span9,
div#usersManagementPortletContainer div#assignUsersToGroupsModal div.modal-body span#textAboveTagsInputInAssignUsersToGroupsModal div.row:last-of-type div.text-core.span9 {
border-radius: 0.2em;
border: 1px solid #d1d1d1;
padding: 5px !important;
}
div#usersManagementPortletContainer div#changeUsersRolesModal div.modal-body span#textAboveTagsInput div.row:nth-last-child(-n+2),
div#usersManagementPortletContainer div#assignUsersRolesModal div.modal-body span#textAboveTagsInputInAssignRolesModal div.row:last-of-type,
div#usersManagementPortletContainer div#assignUsersToGroupsModal div.modal-body span#textAboveTagsInputInAssignUsersToGroupsModal div.row:last-of-type {
margin-top: 1.2em;
}
div#usersManagementPortletContainer div#changeUsersRolesModal div.modal-body span#textAboveTagsInput i {
color : #4cb5d2;
padding : 12px;
}
i.fa.fa-times {
padding: 6px !important;
color: #d1d1d1 !important;
}
i.fa.fa-times:hover {
color: #0271be !important;
}
div#usersManagementPortletContainer div#dropdownList {
max-height:200px;
overflow: scroll;
margin-left : 10px;
border : 1px solid #4cb5d2;
}
div#usersManagementPortletContainer div.listElement:not(:last-of-type) {
border-bottom: 1px solid #4cb5d2;
}
div#usersManagementPortletContainer textarea#roleList {
/* margin-left : 10px; */
width : 100% !important;
border-radius : 7px;
padding-top : 8px !important;
padding-bottom : 8px !important;
display : none !important;
}
div#usersManagementPortletContainer textarea#roleListInAssignRolesModal {
/* margin-left : 10px; */
width : 100% !important;
border-radius : 7px;
padding-top : 8px !important;
padding-bottom : 8px !important;
display : none !important;
}
div#usersManagementPortletContainer span#textAboveTagsInput div.row:last-of-type div.text-core.offset3 {
width: 70%;
}
div#usersManagementPortletContainer span#textAboveTagsInput div.row:nth-last-child(-n+2) div.text-core.span9 div.text-wrap div.text-arrow,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignRolesModal div.row:last-of-type div.text-core.span9 div.text-wrap div.text-arrow,
div#usersManagementPortletContainer span#textAboveTagsInputInAssignUsersToGroupsModal div.row:last-of-type div.text-core.span9 div.text-wrap div.text-arrow {
-ms-transform: scale(1.6,1.6); /* IE 9 */
-webkit-transform: scale(1.6,1.6); /* Safari */
transform: scale(1.6,1.6);
height: 35px;
margin-right : 10px;
}
div#usersManagementPortletContainer span#textAboveTagsInput div.row:last-of-type div.text-core.offset3 div.text-wrap {
width: 100% !important;
}
div#usersManagementPortletContainer div.text-dropdown.text-position-below {
margin-left: 10px;
}
div#usersManagementPortletContainer div.text-tags.text-tags-on-top {
margin-left:14px;
margin-top:6px;
}
div#usersManagementPortletContainer div.text-core.offset3 div.text-wrap div.text-arrow {
margin-top: 3%;
}
div#usersManagementPortletContainer div#usersRequestsModal {
width : 60%;
/* top : 33%; */
color: #0271be !important;
}
@media (min-width: 1700px){
div#usersManagementPortletContainer div#usersRequestsModal {
left : 35%;
}
}
@media (min-width: 1550px) and (max-width: 1699px){
div#usersManagementPortletContainer div#usersRequestsModal {
left: 37%;
}
}
@media (min-width: 1350px) and (max-width: 1549px){
div#usersManagementPortletContainer div#usersRequestsModal {
left: 40%;
}
}
@media (min-width: 1300px) and (max-width: 1350px){
div#usersManagementPortletContainer div#usersRequestsModal {
left: 41%;
}
}
@media (min-width: 1250px) and (max-width: 1299px){
div#usersManagementPortletContainer div#usersRequestsModal {
left: 42%;
}
}
@media (min-width: 1100px) and (max-width: 1249px){
div#usersManagementPortletContainer div#usersRequestsModal {
left: 44%;
}
}
@media (min-width: 1050px) and (max-width: 1099px){
div#usersManagementPortletContainer div#usersRequestsModal {
left: 46%;
}
}
@media (min-width: 1000px) and (max-width: 1049px){
div#usersManagementPortletContainer div#usersRequestsModal {
left: 47%;
}
}
@media (min-width: 980px) and (max-width: 999px){
div#usersManagementPortletContainer div#usersRequestsModal {
left: 49%;
}
}
@media (min-width: 900px) and (max-width: 979px){
div#usersManagementPortletContainer div#usersRequestsModal {
left: 51%;
width: 62%;
}
}
@media (min-width: 850px) and (max-width: 900px){
div#usersManagementPortletContainer div#usersRequestsModal {
left: 52%;
}
}
@media (min-width: 801px) and (max-width: 849px){
div#usersManagementPortletContainer div#usersRequestsModal {
left: 55%;
}
}
@media (min-width: 768px) and (max-width: 800px){
div#usersManagementPortletContainer div#usersRequestsModal {
left: 57%;
}
}
div#usersManagementPortletContainer div#usersRequestsModal .modalSubHeader {
margin-top: 1em;
}
div#usersManagementPortletContainer button#acceptAll,
div#usersManagementPortletContainer button#rejectAll,
div#usersManagementPortletContainer button#sendAcceptance,
div#usersManagementPortletContainer button#sendRejection {
/* color : #4cb5d2 !important */
}
div#usersManagementPortletContainer a#reloadUsersRequestsTable {
font-size: 14px;
background-color: #7EAB10;
background: #7EAB10;
color: white;
display: inline;
border-radius: 50% !important;
padding: 6px 9px;
margin-left: 8px;
cursor: pointer;
}
div#usersManagementPortletContainer div#usersRequestsTableContainer {
position : relative;
}
div#usersManagementPortletContainer div#requestsAcceptanceContainer {
position : relative;
}
div#usersManagementPortletContainer div#requestsAcceptanceContainer.hideSection,
div#usersManagementPortletContainer div#requestsAcceptanceBody div.row.hideSection {
display : none;
}
div#usersManagementPortletContainer div#usersRequestsTableContainer.hideSection {
display : none;
}
div#usersManagementPortletContainer div#clickToGoBack {
cursor: pointer;
display : inline-block;
}
div#usersManagementPortletContainer button.hideButton {
display : none !important;
}
.emailCBCContainer {
margin-bottom: 1em;
}
div#usersManagementPortletContainer div#requestsAcceptanceBody > div.row > div.text-core {
position : static;
height: 100% !important;
}
div#requestsAcceptanceBody .recipients label + .text-core,
.emailCBCContainer .text-core {
min-height: 45px !important;
overflow-y: scroll;
}
div#usersManagementPortletContainer div#requestsAcceptanceBody > div.row:not(last-of-type) {
margin-bottom: 1em;
}
div#usersManagementPortletContainer textarea#tagsForEmails,
#CCAdminsEmails, #BCCAdminsEmails {
display : none;
}
div#usersManagementPortletContainer div#requestsAcceptanceBody label {
display : inline-block;
}
div#usersManagementPortletContainer div#requestsAcceptanceBody div.row {
margin-left : 0px;
}
div#usersManagementPortletContainer div#requestsAcceptanceToolbar {
display:block;
padding: 10px;
}
div#usersManagementPortletContainer div#emailForAcceptance,
div#usersManagementPortletContainer div#emailForRejection {
background-color : rgb(234, 234, 234);
background : rgb(234, 234, 234);
padding : 10px;
border-radius : 7px;
color : black;
}
div#usersManagementPortletContainer a#reloadUsersRequestsTable.btn.hide{
display:none;
}
div#usersManagementPortletContainer div.modal-backdrop.fade.in.hideFirstModal {
z-index: 1051;
}
div#usersManagementPortletContainer div#acceptUsersRequestsModal {
z-index: 1052;
}
div#usersManagementPortletContainer #editEmailTemplate {
float:right;
color: #0271be;
border-radius: 25%;
background-color: #fff;
background: #fff;
border: none;
width: 40px;
height: 30px;
}
div#usersManagementPortletContainer label#labelRejectionEmail {
display:inline-block;
}
div#usersManagementPortletContainer input#sendAutomaticRejectionEmail {
margin:0px !important;
}
div#usersManagementPortletContainer span#theMiniHeader {
left: 15px;
top: 1.9em;
display: inline-block;
position: absolute;
color : #555;
}
div#usersManagementPortletContainer p#deleteTheRoles {
margin : 0 0 5px;
}
div#usersManagementPortletContainer button#closeUSerDetailsModal,
div#usersManagementPortletContainer #openEditModal,
div#usersManagementPortletContainer span#userName,
div#usersManagementPortletContainer span#detailsFor,
div#usersManagementPortletContainer span#username, div#userDetailsModal > div.modal-body > div.row-fluid > label {
color: #0271be;
}
div#usersManagementPortletContainer span#userName {
color : #4cb5d2;
}
div#usersManagementPortletContainer span#detailsFor{
font-size : 17.5px;
color : #0271be;
}
div#usersManagementPortletContainer span#userName {
display:none;
}
div#usersManagementPortletContainer div#usersRequestsModal .modal-body {
/* overflow-y : visible; */
overflow-x : visible;
}
div#usersManagementPortletContainer div.modal.fade.in .close:hover,
div#usersManagementPortletContainer div.modal.fade.in .btn-link:hover,
div#usersManagementPortletContainerSiteTeamsEditMode div.modal.fade.in .btn-link:hover {/* color: #0271be !important; */}
div#usersManagementPortletContainer span#detailsFor,
div#usersManagementPortletContainerSiteTeamsEditMode span#teamPrefixHeader {
/* margin-bottom : 8px; */
}
div#usersManagementPortletContainer div#deleteUsersFromCurrentSiteModal span#deleteCurrentSiteUsersHeader,
div#usersManagementPortletContainer div#changeUsersRolesModalHeaderDiv span#theHeader,
div#usersManagementPortletContainer div#InternalServerErrorModal div#blueLineBottom {
font-size : 18px;
}
div#usersManagementPortletContainer div#changeUsersRolesModalHeaderDiv {
border-bottom: 2px solid #0271be;
padding-bottom: 0.2em;
}
div#usersManagementPortletContainer div#InternalServerErrorModal div#blueLineBottom {
font-size : 18px;
padding-bottom : 7px;
color: #0271be;
}
div#usersManagementPortletContainer div#InternalServerErrorModal #closeInternalServerModal {
color : #4cb5d2;
}
#usersManagementPortletContainerSiteTeamsEditMode div#editGroupTeamModal div#groupTeamAttributes div.row-fluid {
margin-bottom: 10px;
}
div#usersManagementPortletContainer textarea#teamsList,
div#usersManagementPortletContainer textarea#teamsListInAssignUsersToGroupsModal {
display : none;
}
#usersManagementPortletContainerSiteTeamsEditMode span#teamPrefixHeader,
#usersManagementPortletContainerSiteTeamsEditMode span#teamNameHeader,
#usersManagementPortletContainerSiteTeamsEditMode span#acceptRequestHeader,
#usersManagementPortletContainerSiteTeamsEditMode span#acceptRequestHeader {
color: #0271be;
font-size : 18px;
}
#usersManagementPortletContainerSiteTeamsEditMode .modal-footer,
#usersManagementPortletContainerSiteTeamsEditMode .modal-header {
border-top : none;
border-bottom : none;
}
#usersManagementPortletContainerSiteTeamsEditMode .modal.fade button {
color: #d1d1d1;
}
#usersManagementPortletContainerSiteTeamsEditMode .modal.fade button:hover {
color: #0271be;
}
#usersManagementPortletContainerSiteTeamsEditMode .modal.fade button.close {
opacity : 1;
}
#usersManagementPortletContainer #acceptRequestHeader {
font-size: 18px;
}
div#displayGroupTeamUsersModal {
width: 700px;
left: 45%;
}
div#displayGroupTeamUsersModal .modal-body{
padding-top: 0px;
}
div.modalHeaderContainer {
display: inline-block;
}
div.modalSubHeader {
/* display: inline-block; */
color: #777;
font-size: 0.9em;
}
#usersRequestsModal .modal-header {
padding-bottom: 0px;
}
#clickToGoBack {
color: #0271be;
}
#addGroupTeamAttributes input,
#addGroupTeamAttributes textarea,
#groupTeamAttributes input,
#groupTeamAttributes textarea {
border-radius: 0.2em;
border: 1px solid #d1d1d1;
}
.modal-footer {
background: #fff !important;
background-color: #fff !important;;
}
.modal-footer button {
color: #0271be !important;
border-radius: 5px !important;
}
.modal-footer button:hover {
background: #eeeeee !important;
background-color:#eeeeee !important;
}
.text-arrow .caretContainer {
position: absolute;
top: 47%;
left: 32%;
}
span.caretContainer > i.caret {
padding: 0 !important;
border-top-color: #0271be;
}
div.emailSubject {
background-color: rgb(234, 234, 234);
background: rgb(234, 234, 234);
border-radius: 7px
}
div.emailSubjectContainer{
margin-bottom: 1em;
}
div.emailSubject {
padding:7px;
color: black;
}
/* html {
overflow:hidden;
} */
.grantDenyClass, .denyClass {
display:inline;
}

View File

@ -0,0 +1,142 @@
div#usersManagementPortletContainer ul#myTab {
background: #1273c7;
background-color: #1273c7;
border-radius : 7px;
}
div#usersManagementPortletContainer ul#myTab li a{
color : white;
}
div#usersManagementPortletContainer ul#myTab li a:hover{
color : #1273c7;
background: white;
background-color: white;
}
div#usersManagementPortletContainer ul#myTab li.active a{
color : white;
background: rgb(42, 170, 230);
background-color: rgb(42, 170, 230);
}
div#usersManagementPortletContainer ul#myTab li.active a{
color : white;
background: rgb(42, 170, 230);
background-color: rgb(42, 170, 230);
}
div#usersManagementPortletContainer ul#myTab li.active {
}
div#usersManagementPortletContainer div.searchDiv,
div#usersManagementPortletContainerSiteTeamsEditMode div.searchDiv {
background: #0271be;
background-color: #0271be;
cursor:pointer;
padding: 7px 10px 3px 10px;
border-radius:50%;
color: white;
display:inline-block;
float:right;
height: 25px;
}
div#usersManagementPortletContainer #CurrentUsersTable_filter label,
div#usersManagementPortletContainer #usersRequestsTable_filter label,
div#usersManagementPortletContainerSiteTeamsEditMode #GroupTeamsTable_filter label {
display : inline-block;
}
div#usersManagementPortletContainer div.dataTables_filter label > input,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_filter label > input {
margin-bottom: 0px !important;
}
div#usersManagementPortletContainer .hideMe input,
div#usersManagementPortletContainerSiteTeamsEditMode .hideMe input,
.hideMe input {
display:none;
}
div#usersManagementPortletContainerSiteTeamsEditMode div#GroupTeamsTableUsers_filter > label {
display: inline;
}
div#usersManagementPortletContainer ul#myTab {
background: #1273c7;
background-color: #1273c7;
border-radius : 7px;
}
div#usersManagementPortletContainer ul#myTab li a{
color : white;
}
div#usersManagementPortletContainer ul#myTab li a:hover{
color : #1273c7;
background: white;
background-color: white;
}
div#usersManagementPortletContainer ul#myTab li.active a{
color : white;
background: rgb(42, 170, 230);
background-color: rgb(42, 170, 230);
}
div#usersManagementPortletContainer ul#myTab li.active a{
color : white;
background: rgb(42, 170, 230);
background-color: rgb(42, 170, 230);
}
div#usersManagementPortletContainer ul#myTab li.active {
}
div#usersManagementPortletContainer div.searchDiv,
div#usersManagementPortletContainerSiteTeamsEditMode div.searchDiv,
div.searchDiv {
background: #0271be;
background-color: #0271be;
cursor:pointer;
padding: 5px 10px 3px 10px;
border-radius:50%;
color: white;
display:inline-block;
float:right;
height: 25px;
position: absolute;
right: 0;
}
div#usersManagementPortletContainer div.searchDiv:not(.active):hover,
div#usersManagementPortletContainerSiteTeamsEditMode div.searchDiv:not(.active):hover {
background: #009AE5;
background-color: #009AE5;
}
div#usersManagementPortletContainer div.searchDiv.active,
div#usersManagementPortletContainerSiteTeamsEditMode div.searchDiv.active,
div.searchDiv.active {
background: #019ad3;
background-color: #019ad3;
}
div#usersManagementPortletContainer #CurrentUsersTable_filter label,
div#usersManagementPortletContainer #usersRequestsTable_filter label,
div#usersManagementPortletContainerSiteTeamsEditMode #GroupTeamsTable_filter label,
div#rejectedUsersRequestsManagementTab #rejectedUsersRequestsTable_filter label {
display : inline-block;
/* position: relative; */
}
div#usersManagementPortletContainer div.dataTables_filter label > input,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_filter label > input,
#rejectedUsersRequestsTable_filter label > input {
margin-bottom: 0px !important;
margin-right: 21px;
}
div#usersManagementPortletContainer .hideMe input,
div#usersManagementPortletContainerSiteTeamsEditMode .hideMe input,
#rejectedUsersRequestsManagementTab .hideMe input {
display:none;
}
div#usersManagementPortletContainerSiteTeamsEditMode div#GroupTeamsTableUsers_filter > label {
display: inline;
}
#CurrentUsersTable_filter input, #usersRequestsTable_filter input, #GroupTeamsTable_filter input, #GroupTeamsTableUsers_filter input,
#rejectedUsersRequestsTable_filter input {
border-radius: 1em 0 0 1em;
}
#CurrentUsersTable_filter input:focus,
#usersRequestsTable_filter input:focus,
#GroupTeamsTable_filter input:focus,
#GroupTeamsTableUsers_filter input:focus {
webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(127, 127, 127, 0.6);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(127, 127, 127, 0.6);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(127, 127, 127, 0.6);
border-color: rgba(2, 113, 190, 0.5);
}

View File

@ -0,0 +1,167 @@
div#usersManagementPortletContainer div.dataTables_paginate.paging_full_numbers a.paginate_button#CurrentUsersTable_previous,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#CurrentUsersTable_previous,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTable_previous,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTable_previous,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTableUsers_previous,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTableUsers_previous,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#rejectedUsersRequestsTables_previous {
background: #0271be;
background-color: #0271be;
color: white;
border:0px;
/* border-top-left-radius: 7px; */
/* border-bottom-left-radius: 7px; */
}
div#usersManagementPortletContainer div.dataTables_paginate.paging_full_numbers a.paginate_button#CurrentUsersTable_previous:after,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#CurrentUsersTable_previous:after,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTable_previous:after,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTable_previous:after,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTableUsers_previous:after,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTableUsers_previous:after,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#rejectedUsersRequestsTables_previous:after{
content: "\f04a ";
}
div.dataTables_paginate.paging_full_numbers{
font-family: FontAwesome;
}
div#usersManagementPortletContainer div.dataTables_paginate.paging_full_numbers a.paginate_button#CurrentUsersTable_previous:not(.disabled):hover,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTable_previous:not(.disabled):hover,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTableUsers_previous:not(.disabled):hover,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#rejectedUsersRequestsTables_previous:not(.disabled):hover {
color: white;
border:0px;
}
div#usersManagementPortletContainer div.dataTables_paginate.paging_full_numbers a.paginate_button#CurrentUsersTable_next,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#CurrentUsersTable_next,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTable_next,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTable_next,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTableUsers_next,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTableUsers_next,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#rejectedUsersRequestsTable_next {
background: #0271be;
background-color: #0271be;
color: white !important;
border:0px;
/* border-top-right-radius: 7px; */
/* border-bottom-right-radius: 7px; */
}
div#usersManagementPortletContainer div.dataTables_paginate.paging_full_numbers a.paginate_button#CurrentUsersTable_next:after,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#CurrentUsersTable_next:after,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTable_next:after,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTable_next:after,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTableUsers_next:after,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTableUsers_next:after,
div.dataTables_paginate.paging_full_numbers a.paginate_button#rejectedUsersRequestsTables_next:after {
content: "\f04e";
}
div#usersManagementPortletContainer div.dataTables_paginate.paging_full_numbers a.paginate_button#CurrentUsersTable_next:not(.disabled):hover,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTable_next:not(.disabled):hover,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button#GroupTeamsTableUsers_next:not(.disabled):hover,
div.dataTables_paginate.paging_full_numbers a.paginate_button#rejectedUsersRequestsTable_next:not(.disabled):hover {
background: rgb(42, 170, 210);
background-color: rgb(42, 170, 210);
color: white !important;
border:0px;
}
div#usersManagementPortletContainer div.dataTables_paginate.paging_full_numbers span a.paginate_button.current,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers span a.paginate_button.current,
div.dataTables_paginate.paging_full_numbers span a.paginate_button.current {
background: rgb(41, 131, 173);
background-color: rgb(41, 131, 173);
color: white !important;
border:0px;
cursor : default;
}
div#usersManagementPortletContainer div.dataTables_paginate.paging_full_numbers a.paginate_button,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button,
div.dataTables_paginate.paging_full_numbers a.paginate_button {
color: white !important;
background: #0271be;
background-color: #0271be;
border:0px !important;
padding: 2px 15px;
margin-top: 6px;
font-size: 0.9em;
}
div.dataTables_paginate.paging_full_numbers a.first {
border-top-left-radius: 7px;
border-bottom-left-radius: 7px;
}
div.dataTables_paginate.paging_full_numbers a.first:after {
content: "\f049";
}
div.dataTables_paginate.paging_full_numbers a.previous {
/* border-top-left-radius: 7px; */
/* border-bottom-left-radius: 7px; */
}
div.dataTables_paginate.paging_full_numbers a.previous:after {
content: "\f04a";
}
div.dataTables_paginate.paging_full_numbers a.next {
/* border-top-right-radius: 7px; */
/* border-bottom-right-radius: 7px; */
}
.paging_full_numbers a.next:after {
content: "\f04e";
}
div.dataTables_paginate.paging_full_numbers a.last {
border-top-right-radius: 7px;
border-bottom-right-radius: 7px;
}
.paging_full_numbers a.last:after {
content: "\f050";
}
div.dataTables_paginate.paging_full_numbers a.paginate_button:not(.disabled):hover{
border:0px;
color: white;
background: #4CB5D2 !important;
background-color: #4CB5D2 !important;
}
div.dataTables_paginate.paging_full_numbers a.paginate_button:not(.disabled):not(.current):active{
border:0px;
color: white;
background: #019ad3 !important;
background-color: #019ad3 !important;
}
div.dataTables_paginate.paging_full_numbers a.paginate_button.current:hover {
border:0px !important;
color: white !important;
background: rgb(41, 131, 173);
background-color: rgb(41, 131, 173) ;
}
div#usersManagementPortletContainer .btn-default.moreInfo,
div#usersManagementPortletContainerSiteTeamsEditMode .btn-default.moreInfo,
.btn-default.moreInfo {
border : none;
background: rgb(1, 95, 126);
background-color: rgb(1, 95, 126);
color : white;
}
div#usersManagementPortletContainer .btn-default.moreInfo:hover,
div#usersManagementPortletContainerSiteTeamsEditMode .btn-default.moreInfo:hover,
.btn-default.moreInfo:hover {
border : none;
background: #327A8A;
background-color: #327A8A;
color : white;
}
div.dataTables_paginate.paging_full_numbers a.paginate_button#usersRequestsTable_previous,
div.dataTables_paginate.paging_full_numbers a.paginate_button#usersRequestsTable_previous,
div.dataTables_paginate.paging_full_numbers a.paginate_button#rejectedUsersRequestsTable_previous {
background: #0271be;
background-color: #0271be;
/* color: white !important; */
border:0px;
}
div#usersManagementPortletContainer div.dataTables_paginate.paging_full_numbers a.paginate_button.disabled,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button.disabled,
div.dataTables_paginate.paging_full_numbers a.paginate_button.disabled {
background:#e0e0e0 !important;
background-color:#e0e0e0 !important;
}
div#usersManagementPortletContainer div.dataTables_paginate.paging_full_numbers a.paginate_button.current,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_paginate.paging_full_numbers a.paginate_button.current,
div.dataTables_paginate.paging_full_numbers a.paginate_button.current {
background: #019AD3;
background-color: #019AD3;
}

View File

@ -0,0 +1,23 @@
div#blanket.shown *{
background-color : #fff !important;
background : #fff !important;
color : #fff !important;
pointer-events: none;
cursor: default;
}
div#blanket.shown .dataTables_info,
div#blanket.shown div.dataTables_length select,
div#blanket.shown ul.nav.nav-tabs > li > a,
div#blanket.shown div.dataTables_paginate.paging_simple_numbers {
display : none;
}
div#blanket p#preloader.hiddenPreloader,
div#blanket p#preloader.hiddenPreloader {
display : none;
}
div#blanket.shown p#preloader, div#blanket.shown p#preloader {
position: fixed;
z-index: 1052;
top: 30%;
left: 45%;
}

View File

@ -0,0 +1,106 @@
table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child,
table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child {
position: relative;
padding-left: 30px;
cursor: pointer;
}
table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child:before,
table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child:before {
top: 8px;
left: 4px;
height: 16px;
width: 16px;
display: block;
position: absolute;
color: white;
border: 2px solid white;
border-radius: 16px;
text-align: center;
line-height: 14px;
box-shadow: 0 0 3px #444;
box-sizing: content-box;
content: '+';
background-color: #337ab7;
}
table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child.dataTables_empty:before,
table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child.dataTables_empty:before {
display: none;
}
table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td:first-child:before,
table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th:first-child:before {
content: '-';
background-color: #d33333;
}
table.dataTable.dtr-inline.collapsed > tbody > tr.child td:before {
display: none;
}
table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child,
table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child {
padding-left: 27px;
}
table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child:before,
table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child:before {
top: 5px;
left: 4px;
height: 14px;
width: 14px;
border-radius: 14px;
line-height: 12px;
}
table.dataTable.dtr-column > tbody > tr > td.control,
table.dataTable.dtr-column > tbody > tr > th.control {
position: relative;
cursor: pointer;
}
table.dataTable.dtr-column > tbody > tr > td.control:before,
table.dataTable.dtr-column > tbody > tr > th.control:before {
top: 50%;
left: 50%;
height: 16px;
width: 16px;
margin-top: -10px;
margin-left: -10px;
display: block;
position: absolute;
color: white;
border: 2px solid white;
border-radius: 16px;
text-align: center;
line-height: 14px;
box-shadow: 0 0 3px #444;
box-sizing: content-box;
content: '+';
background-color: #337ab7;
}
table.dataTable.dtr-column > tbody > tr.parent td.control:before,
table.dataTable.dtr-column > tbody > tr.parent th.control:before {
content: '-';
background-color: #d33333;
}
table.dataTable > tbody > tr.child {
padding: 0.5em 1em;
}
table.dataTable > tbody > tr.child:hover {
background: transparent !important;
}
table.dataTable > tbody > tr.child ul {
display: inline-block;
list-style-type: none;
margin: 0;
padding: 0;
}
table.dataTable > tbody > tr.child ul li {
border-bottom: 1px solid #efefef;
padding: 0.5em 0;
}
table.dataTable > tbody > tr.child ul li:first-child {
padding-top: 0;
}
table.dataTable > tbody > tr.child ul li:last-child {
border-bottom: none;
}
table.dataTable > tbody > tr.child span.dtr-title {
display: inline-block;
min-width: 75px;
font-weight: bold;
}

View File

@ -0,0 +1,68 @@
div#usersManagementPortletContainer table#CurrentUsersTable thead > tr th:first-of-type,
div#usersManagementPortletContainer table#usersRequestsTable thead > tr th:first-of-type,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead > tr th:first-of-type {
position:relative;
}
div#usersManagementPortletContainer table#CurrentUsersTable thead > tr th:first-of-type div {
position: absolute;
bottom: 2px;
left: 7px;
background: #eeeeee;
background-color: #eeeeee;
width: 21px;
height: 24px;
padding: 3px 0px 0px 6px;
}
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead > tr th:first-of-type {
text-align: center;
cursor: auto;
}
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead > tr th:first-of-type div {
position: absolute;
bottom: 2px;
left: 7px;
background: #eeeeee;
background-color: #eeeeee;
width: 24px;
height: 27px;
padding-left: 3px;
}
div#usersManagementPortletContainer table#usersRequestsTable thead > tr th:first-of-type{
padding-left: 2px;
}
div#usersManagementPortletContainer table#usersRequestsTable thead > tr th:first-of-type div {
position: absolute;
bottom: 4px;
left: 7px;
background: #eeeeee;
background-color: #eeeeee;
width: 20px;
height: 23px;
padding: 2px 0px 0px 5px;
}
div#usersManagementPortletContainer table#CurrentUsersTable thead > tr th:first-of-type.none div,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead > tr th:first-of-type.none div,
div#usersManagementPortletContainer table#usersRequestsTable thead > tr th:first-of-type.none div {
background-color: rgb(42, 170, 230);
background: rgb(42, 170, 230);
}
div#usersManagementPortletContainer table#CurrentUsersTable thead > tr th:first-of-type:not(.none):hover div,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead > tr th:first-of-type:not(.none):hover div,
div#usersManagementPortletContainer table#usersRequestsTable thead > tr th:first-of-type:not(.none):hover div {
background-color: rgb(42, 170, 210);
background: rgb(42, 170, 210);
}
div#usersManagementPortletContainer table#CurrentUsersTable thead > tr th:first-of-type:not(.none):hover div i,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead > tr th:first-of-type:not(.none):hover div i,
div#usersManagementPortletContainer table#usersRequestsTable thead > tr th:first-of-type:not(.none):hover div i {
color: rgb(42, 170, 210);
}
div#usersManagementPortletContainer th i.icon-ok,
div#usersManagementPortletContainerSiteTeamsEditMode th i.icon-ok {
color: #eeeeee;
font-size: 1em;
}
div#usersManagementPortletContainer th i.icon-ok.whiteFont,
div#usersManagementPortletContainerSiteTeamsEditMode th i.icon-ok.whiteFont {
color: #fff;
}

View File

@ -0,0 +1,581 @@
div#usersManagementPortletContainer, div#usersManagementPortletContainerSiteTeamsEditMode {
background-color : #fff;
background : #fff;
/* padding: 2px; */
}
div#usersManagementPortletContainer i.icon-search,
div#usersManagementPortletContainerSiteTeamsEditMode i.icon-search,
i.icon-search {
-ms-transform: scale(1.2,1.4) !important; /* IE 9 */
-webkit-transform: scale(1.2,1.4) !important; /* Safari */
transform: sscale(1.2,1.4) !important;
display :inline-block !important;
}
div#usersManagementPortletContainer table#CurrentUsersTable tbody,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tbody,
table#rejectedUsersRequestsTable tbody {
background-color : rgba(234, 236, 240, 1);
background: rgba(234, 236, 240, 1);
}
div#usersManagementPortletContainer table#CurrentUsersTable thead > tr,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead > tr ,
table#rejectedUsersRequestsTable thead > tr{
border-bottom-color : white;
}
div#usersManagementPortletContainer table#CurrentUsersTable thead > tr,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead > tr,
table#rejectedUsersRequestsTable thead > tr {
border: none;
}
div#usersManagementPortletContainer table#CurrentUsersTable thead > tr th,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead > tr th,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTableUsers thead > tr th,
table#rejectedUsersRequestsTable thead > tr th{
border: none;
font-weight: bold;
padding-bottom: 0px;
padding-left: 4px;
text-transform: capitalize;
}
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTableUsers thead > tr th:after
table#rejectedUsersRequestsTable thead > tr th:after,{
font-weight: normal;
}
div#usersManagementPortletContainer table#CurrentUsersTable thead > tr th:first-of-type,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead > tr th:first-of-type,
table#rejectedUsersRequestsTable thead > tr th:first-of-type {
width: 14px !important;
}
@-moz-document url-prefix() {
div#usersManagementPortletContainer table#CurrentUsersTable thead > tr th:first-of-type,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead > tr th:first-of-type {
width:15px !important;
}
}
@-moz-document url-prefix() {
div#usersManagementPortletContainer table#usersRequestsTable thead > tr th:first-of-type div {
left: 7px !important;;
}
}
/* @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
div#usersManagementPortletContainer table#CurrentUsersTable thead > tr th:first-of-type,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead > tr th:first-of-type {
width:17px !important;
}
div#usersManagementPortletContainer table#usersRequestsTable thead > tr th:first-of-type div {
left: 7px !important;;
}
} */
div#usersManagementPortletContainer table#CurrentUsersTable tbody tr:last-of-type,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tbody tr:last-of-type,
table#rejectedUsersRequestsTable tbody tr:last-of-type {
border: none;
}
div#usersManagementPortletContainer table#CurrentUsersTable tbody,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tbody,
table#rejectedUsersRequestsTable tbody {
border: none;
}
div#usersManagementPortletContainer table#CurrentUsersTable,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable,
table#rejectedUsersRequestsTable {
border: none;
}
div#usersManagementPortletContainer table#CurrentUsersTable tr td:first-of-type,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tr td:first-of-type,
table#tr:not(.selected):hover td div tr td:first-of-type {
:white;
}
.dataTable:not(#GroupTeamsTableUsers) tr td {
cursor: pointer;
}
div#usersManagementPortletContainer table#CurrentUsersTable tr.selected td div,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tr.selected td div,
table#tr:not(.selected):hover td div tr.selected td div {
background-color : rgb(42, 170, 230);
background : rgb(42, 170, 230);
color : #fff;
}
div#usersManagementPortletContainer table#CurrentUsersTable tr:not(.selected):hover td div,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tr:not(.selected):hover td div,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTableUsers tr:not(.selected):hover td div,
table#rejectedUsersRequestsTable tr:not(.selected):hover td div {
background: #4cb5d2;
background-color: #4cb5d2;
color: white;
}
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTableUsers tr:not(.selected):hover td div,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTableUsers tr td div {
/* padding-left : 15px !important; */
}
div#usersManagementPortletContainer table#CurrentUsersTable tr td:first-of-type,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tr td:first-of-type,
table#rejectedUsersRequestsTable tr td:first-of-type {
padding-top: 1px;
}
div#usersManagementPortletContainer table#CurrentUsersTable tr:hover td div i.icon-ok,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tr:hover td div i.icon-ok,
#rejectedUsersRequestsTable tr:hover td div i.icon-ok {
color: #4cb5d2;
}
div#usersManagementPortletContainer table#CurrentUsersTable tr td div i.icon-ok.whiteFont,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tr td div i.icon-ok.whiteFont,
table#rejectedUsersRequestsTable tr td div i.icon-ok.whiteFont {
color: white;
font-size: 1em;
}
div#usersManagementPortletContainer table#CurrentUsersTable tbody tr,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tbody tr,
table#rejectedUsersRequestsTable tbody tr {
background:#fff;
padding: 0px;
background-color:#fff;
}
div#usersManagementPortletContainer table#CurrentUsersTable tbody tr td div,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tbody tr td div,
table#rejectedUsersRequestsTable tbody tr td div {
background: #eeeeee;
background-color: #eeeeee;
}
div#usersManagementPortletContainer table#CurrentUsersTable tbody tr td div i,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tbody tr td div i {
color: #eeeeee;
}
div#usersManagementPortletContainer table#CurrentUsersTable tbody tr td,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tbody tr td,
table#rejectedUsersRequestsTable tbody tr td {
padding: 0px 2px 0px 2px;
text-align: center;
line-height: 1em;
}
div#usersManagementPortletContainer table#CurrentUsersTable thead th,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable thead th,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTableUsers thead th,
table#rejectedUsersRequestsTable thead th {
text-align: left;
}
div#usersManagementPortletContainer table#CurrentUsersTable tbody tr div,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tbody tr div,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTableUsers tbody tr div,
div#usersManagementPortletContainer table#usersRequestsTable tbody tr div,
table#rejectedUsersRequestsTable tbody tr div {
background: #eeeeee;
background-color: #eeeeee;
padding: 2px 0px 0px 10px;
text-align: left;
height: 1.5em;
line-height : 1.5em;
overflow : hidden;
-o-text-overflow: ellipsis;
-ms-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap;
width:inherit;
height: 23px;
}
div#usersManagementPortletContainer table#usersRequestsTable tbody tr div,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tbody tr div,
table#rejectedUsersRequestsTable tbody tr div {
background:white;
background-color:white;
padding:2px;
text-align: left;
height: 1.5em;
line-height : 1.5em;
overflow : hidden;
-o-text-overflow: ellipsis;
-ms-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap;
width:inherit;
}
div#usersManagementPortletContainer table#CurrentUsersTable tbody tr td:first-of-type div,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable tbody tr td:first-of-type div,
table#rejectedUsersRequestsTable tbody tr td:first-of-type div {
display:inline-block;
width: 1.5em;
text-align: center;
padding: 2px 3px 2px 3px;
}
div#usersManagementPortletContainer div.dataTables_info, div.dataTables_length label, table#CurrentUsersTable > thead > tr > th,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_info, div.dataTables_length label, table#GroupTeamsTable > thead > tr > th,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_info, table#GroupTeamsTableUsers > thead > tr > th,
table#rejectedUsersRequestsTable > thead > tr> th {
color : #0271be; !important
font-weight: normal !important;
padding-left: 3px;
margin-bottom: 0px;
}
div.dataTables_length label {
font-size: 0.9em;
}
#GroupTeamsTableUsers_length label {
padding-top: 6px;
}
div#usersManagementPortletContainer table#CurrentUsersTable > tbody > tr > td.dataTables_empty,
div#usersManagementPortletContainer table#usersRequestsTable > tbody > tr > td.dataTables_empty,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable > tbody > tr > td.dataTables_empty,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable > tbody > tr > td.dataTables_empty,
table#GroupTeamsTableUsers td.dataTables_empty,
table#rejectedUsersRequestsTable td.dataTables_empty {
background: #d1d1d1;
background-color: #d1d1d1;
color: #f2f2f2;
}
td.dataTables_empty:hover {
cursor: default !important;
}
/* div#usersManagementPortletContainer div.dataTables_info, div.dataTables_filter,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_info, div.dataTables_filter {
margin-bottom: 10px;
} */
div#usersManagementPortletContainer div.dataTables_filter,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_filter,
#rejectedUsersRequestsManagementTab div.dataTables_filter {
margin-top: 1.1em;
margin-bottom: 1em;
width: 250px;
height: 30px;
position: relative;
}
div#usersManagementPortletContainer div.dataTables_info,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_info,
#rejectedUsersRequestsTableContainer div.dataTables_info{
padding-left: 10px;
font-size: 0.9em;
padding-top: 7px;
color: #0271be;
}
div#displayGroupTeamUsersModal div.dataTables_info {
padding-left : 0px;
}
div#usersManagementPortletContainer div.dataTables_length,
div#usersManagementPortletContainer div.dataTables_paginate.paging_simple_numbers,
div#usersManagementPortletContainerSiteTeamsEditMode #GroupTeamsTable_wrapper div.dataTables_length,
div#usersManagementPortletContainerSiteTeamsEditMode #GroupTeamsTable_wrapper div.dataTables_paginate.paging_simple_numbers,
#rejectedUsersRequestsTable_wrapper div.dataTables_length,
#rejectedUsersRequestsTable_wrapper div.dataTables_length.paging_simple_numbers {
margin-top: 6px;
}
.dataTables_length label:hover {
cursor: default;
}
div#usersManagementPortletContainer div.dataTables_length label > select,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_length label > select,
#rejectedUsersRequestsTableContainer div.dataTables_length label > select {
width : 65px !important;
margin-bottom: 0px;
height: 25px;
}
@media (min-width: 768px) and (max-width: 979px) {
div#usersManagementPortletContainer div.dataTables_length label > select,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_length label > select {
font-size: 1.1em;
}
}
div#usersManagementPortletContainer div.dataTables_length label > select:focus,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_length label > select:focus {
outline: none;
}
div#usersManagementPortletContainer table#usersRequestsTable thead > tr th,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable thead > tr th {
border: none;
}
div#usersManagementPortletContainer table#usersRequestsTable tbody,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tbody {
border: none;
}
div#usersManagementPortletContainer table#usersRequestsTable,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable,
table#rejectedUsersRequestsTable {
border: none;
}
div#usersManagementPortletContainer table#usersRequestsTable tbody tr:last-of-type,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tbody tr:last-of-type,
table#rejectedUsersRequestsTable tbody tr:last-of-type {
border: none;
}
div#usersManagementPortletContainer table#usersRequestsTable thead > tr,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable thead > tr {
border-bottom-color : white;
}
div#usersManagementPortletContainer table#usersRequestsTable thead > tr,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable thead > tr,
table#rejectedUsersRequestsTable thead > tr {
border: none;
}
div#usersManagementPortletContainer table#usersRequestsTable,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable {
text-align: center;
}
div#usersManagementPortletContainer table#usersRequestsTable i.icon-ok,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable i.icon-ok,
table#rejectedUsersRequestsTable i.icon-ok {
/* color : rgb(234, 234, 234); */
color : #eeeeee;
font-size: 1em;
}
div#usersManagementPortletContainer table#usersRequestsTable tr:hover td div i.icon-ok.whiteFont,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tr:hover td div i.icon-ok.whiteFont,
table#rejectedUsersRequestsTable tr:hover td div i.icon-ok.whiteFont {
color: white;
}
div#usersManagementPortletContainer table#usersRequestsTable tr td div,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tr td div,
table#rejectedUsersRequestsTable tr td div {
/* background-color : #e7e7e7;
background : #e7e7e7; */
background-color : #eeeeee;
background : #eeeeee;
}
div#usersManagementPortletContainer table#usersRequestsTable tbody tr td,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tbody tr td,
table#rejectedUsersRequestsTable tbody tr td {
padding: 0px 2px 0px 2px;
line-height: 1.09em;
}
div#usersManagementPortletContainer table#usersRequestsTable tbody tr td div,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tbody tr td div,
table#rejectedUsersRequestsTable tbody tr td div {
padding: 2px 0px 0px 10px;
}
div#usersManagementPortletContainer table#usersRequestsTable tr td:first-of-type,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tr td:first-of-type,
table#rejectedUsersRequestsTable tr td:first-of-type {
cursor:pointer;
color:white !important;
}
div#usersManagementPortletContainer table#usersRequestsTable tr.selected,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tr.selected,
table#rejectedUsersRequestsTable tr.selected {
background-color : white;
background : white;
}
div#usersManagementPortletContainer table#usersRequestsTable tr.selected td div,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tr.selected td div,
table#rejectedUsersRequestsTable tr.selected td div {
background-color : rgb(42, 170, 230);
background : rgb(42, 170, 230);
/* padding: 2px; */
color : #fff;
}
div#usersManagementPortletContainer table#usersRequestsTable th,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable th,
table#rejectedUsersRequestsTable th {
text-align : left;
}
div#usersManagementPortletContainer table#usersRequestsTable tr.selected td:first-of-type div,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tr.selected td:first-of-type div,
table#rejectedUsersRequestsTable tr.selected td:first-of-type div {
text-align: center;
}
div#usersManagementPortletContainer table#usersRequestsTable tr:not(.selected):hover td div,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tr:not(.selected):hover td div,
table#rejectedUsersRequestsTable tr:not(.selected):hover td div {
background: rgb(42, 170, 210);
background-color: rgb(42, 170, 210);
color: white;
}
div#usersManagementPortletContainer table#usersRequestsTable tr td:first-of-type div,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tr td:first-of-type div,
table#rejectedUsersRequestsTable tr td:first-of-type div {
width: 1.5em;
display : inline-block;
padding: 2px;
}
div#usersManagementPortletContainer table#usersRequestsTable tr td:first-of-type,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tr td:first-of-type,
table#rejectedUsersRequestsTable tr td:first-of-type {
text-align: center;
/* padding-top : 4px; */
}
div#usersManagementPortletContainer table#usersRequestsTable thead th:first-of-type,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable thead th:first-of-type,
table#rejectedUsersRequestsTable thead th:first-of-type {
width : 15px !important;
}
div#usersManagementPortletContainer table#usersRequestsTable tr:hover td div i.icon-ok,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tr:hover td div i.icon-ok,
table#rejectedUsersRequestsTable tr:hover td div i.icon-ok {
color: rgb(42, 170, 210);
}
div#usersManagementPortletContainer table#usersRequestsTable tr:hover,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tr:hover,
table#rejectedUsersRequestsTable tr:hover {
background-color : white;
background : white;
}
div#usersManagementPortletContainer table#usersRequestsTable tr td:not(:first-of-type),
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable tr td:not(:first-of-type),
table#rejectedUsersRequestsTable tr td:not(:first-of-type) {
color : black;
}
div#usersManagementPortletContainer table#usersRequestsTable > thead > tr > th,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable > thead > tr > th,
table#rejectedUsersRequestsTable > thead > tr > th {
font-weight: bold;
color: #0271be;
padding-bottom: 0px;
padding-left: 4px;
text-transform: capitalize;
}
div#usersManagementPortletContainer table#usersRequestsTable > thead > tr > th:after,
table#rejectedUsersRequestsTable > thead > tr > th:after {
font-weight: normal !important;
}
div#usersManagementPortletContainer table#usersRequestsTable > thead > tr > th:hover:after,
table#GroupTeamsTableUsers > thead > tr > th:hover:after,
table#rejectedUsersRequestsTable > thead > tr > th:hover:after {
color: #009AE5;
}
div#usersManagementPortletContainer table#usersRequestsTable > thead > tr > th:active:after,
table#GroupTeamsTableUsers > thead > tr > th:active:after,
table#GroupTeamsTable > thead > tr > th:active:after,
table#rejectedUsersRequestsTable > thead > tr > th:active:after {
color: #019ad3;
}
div#usersManagementPortletContainer div.dataTables_filter label,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_filter label,
table#rejectedUsersRequestsTable div.dataTables_filter label {
color : #0271be !important
}
div#usersManagementPortletContainer a#currentUsersTableRefresh,
div#usersManagementPortletContainerSiteTeamsEditMode a#currentUsersTableRefresh {
font-size: 14px;
background-color: #7EAB10;
background: #7EAB10;
color: white;
display: inline;
border-radius: 50%;
padding: 6px 9px;
margin-left: 8px;
cursor: pointer;
}
div#usersManagementPortletContainer div#auxilliaryDiv,
div#usersManagementPortletContainerSiteTeamsEditMode div#auxilliaryDiv {
padding: 0px 15px;
}
div#usersManagementPortletContainer div#changeUsersRolesModal div.modal-body,
div#usersManagementPortletContainerSiteTeamsEditMode div#changeUsersRolesModal div.modal-body,
div#assignUsersRolesModal div#changeUsersRolesModal div.modal-body,
div#usersManagementPortletContainer div#assignUsersToGroupsModal div.modal-body {
display:inline;
}
div#usersManagementPortletContainer div#assignUsersRolesModal div.modal-body,
div#usersManagementPortletContainer div#assignUsersToGroupsModal div.modal-body {
overflow-y: visible;
}
div#usersManagementPortletContainer div#assignUsersRolesModal div.modal-body{
padding-top: 0px;
}
div#usersManagementPortletContainer div#assignUsersToGroupsModal div.modal-body,
div#usersManagementPortletContainer div#changeUsersRolesModal div.modal-body {
padding: 0px;
}
div#usersManagementPortletContainer div.text-dropdown.text-position-below,
div#usersManagementPortletContainerSiteTeamsEditMode div.text-dropdown.text-position-below {
top:initial !important;
}
div#usersManagementPortletContainer span#rolesArrow,
div#usersManagementPortletContainerSiteTeamsEditMode span#rolesArrow,
span#rolesArrow {
display: inline-block;
width: 0;
height: 0;
/* background: red; */
border-style: solid;
border-width: 15px 10px 10px 0px;
border-color: transparent #fff transparent transparent;
position: absolute;
bottom : 50%;
right: 100%;
}
div#usersManagementPortletContainer span#roles,
div#usersManagementPortletContainerSiteTeamsEditMode span#roles,
span#roles {
display : inline-block;
position: relative;
text-align: left;
}
div#usersManagementPortletContainer span#onHoverUser,
div#usersManagementPortletContainerSiteTeamsEditMode span#onHoverUser,
span#onHoverUser {
color : rgb(42, 170, 210);
padding-left : 35px;
padding-top : 10px;
}
div#usersManagementPortletContainer span#rolesContainer,
div#usersManagementPortletContainerSiteTeamsEditMode span#rolesContainer,
span#rolesContainer {
display : inline-block;
background-color : #fff;
background : #fff;
z-index : 3;
position : absolute;
bottom: 0%;
left: 100%;
border-radius : 8px;
box-shadow: 0px 9px 20px grey;
transform: translateY(50%);
}
div#usersManagementPortletContainer table#CurrentUsersTable,
div#usersManagementPortletContainer table#usersRequestsTable,
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTable,
div#usersManagementPortletContainerSiteTeamsEditMode table#usersRequestsTable,
table#rejectedUsersRequestsTable {
table-layout: fixed;
}
div#usersManagementPortletContainer ul#rolesList,
div#usersManagementPortletContainerSiteTeamsEditMode ul#rolesList,
ul#rolesList {
list-style-type: none;
margin : 0px;
padding : 5px 20px 20px 20px;
}
div#usersManagementPortletContainer ul#rolesList li,
div#usersManagementPortletContainerSiteTeamsEditMode ul#rolesList li,
ul#rolesList li {
margin : 0px;
padding : 0px 15px;
white-space: nowrap;
}
div#usersManagementPortletContainer ul#rolesList li:hover,
div#usersManagementPortletContainerSiteTeamsEditMode ul#rolesList li:hover,
ul#rolesList li:hover {
background: #eeeeee;
background-color: #eeeeee;
}
div#usersManagementPortletContainer td.relative,
div#usersManagementPortletContainerSiteTeamsEditMode td.relative,
td.relative {
position : relative;
}
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTableUsers,
table#rejectedUsersRequestsTable {
border-bottom : none;
}
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTableUsers tbody td,
table#rejectedUsersRequestsTable tbody td {
padding: 3px;
}
div#usersManagementPortletContainerSiteTeamsEditMode table#GroupTeamsTableUsers tbody td.dataTables_empty,
table#rejectedUsersRequestsTable tbody td.dataTables_empty {
padding: 0px;
}
.dataTable td:focus {
outline:none !important;
}
table:not(#GroupTeamsTableUsers):not(#rejectedUsersRequestsTable) thead th:first-of-type:hover {
cursor: pointer;
}
table.dataTable {
margin-bottom: 2em;
}
div#blanket *{
outline: none;
}

View File

@ -0,0 +1,59 @@
ul#myTab {
margin-bottom : 0px;
border-bottom : none;
/* background-color : #eeeeee;
background : #eeeeee; */
background-color : #fff;
background : #fff;
}
ul#myTab > li.active a.tabTitle {
background : #019ad3;
background-color : #019ad3;
color : #fff;
font-size: 1.2em;
}
ul#myTab > li.active a.lineBeneathTabTitle {
background : #019ad3;
background-color : #019ad3;
color : #fff;
}
ul#myTab > li > a.lineBeneathTabTitle {
line-height: 0.8em;
font-size:0.8em;
padding: 0px 0px 10px 12px;
border-radius: 0px;
}
ul#myTab > li > a {
border: none;
padding-bottom: 5px;
background : #0271BE;
background-color : #0271BE;
color: #fff;
}
ul#myTab > li.active:hover > a.tabTitle,
ul#myTab > li.active:hover > a.lineBeneathTabTitle {
background : #019ad3;
background-color : #019ad3;
color : #fff;
cursor: default;
}
ul#myTab > li > a.tabTitle{
font-size: 1.2em;
}
ul#myTab > li:hover > a.tabTitle {
background: #4CB5D2;
background-color: #4CB5D2;
color : #fff;
}
ul#myTab > li:hover > a.lineBeneathTabTitle {
background: #4CB5D2;
background-color: #4CB5D2;
color : #fff;
cursor: pointer;
}
#tabsForTables {
overflow : inherit;
}
span.portlet-title-text.portlet-title-editable {
font-size: 0px;;
}

View File

@ -0,0 +1,22 @@
div.bootstrap-tagsinput span.label-info {
background: #0271be;
background-color: #0271be;
}
div.bootstrap-tagsinput span.label-info span:after{
content: 'x';
padding: 0 2px;
margin-left: 2px;
}
div.bootstrap-tagsinput span.label-info span:hover:after{
background-color: #019ad3;
background: #019ad3;
}
#CurrentUsersTable_filter div.bootstrap-tagsinput input {
display:none;
}
#CurrentUsersTable_filter div.bootstrap-tagsinput {
display:inline-block;
position:absolute;
left: 5%;
top: 10%;
}

View File

@ -0,0 +1,334 @@
/*-----Portlet topper-----*/
.portlet-title-text{
/* display:none; */
}
/*------------------------*/
div#usersManagementPortletContainer span#numOfSelectedRowsUserReqs,
div#usersManagementPortletContainer span#numOfSelectedRows {
padding-right: 4px;
}
div#usersManagementPortletContainer #usersManagementDiv {
font-size: 15px;
color : #4cb5d2;
display : inline;
/* padding-right: 15px; */
float: right;
}
div#usersManagementPortletContainer div#userRequestsNotifications.notificationsHidden {
font-size: 14px;
background-color : #d8d8d8;
background : #d8d8d8;
color: white;
display: inline-block;
border-radius : 50%;
height: 25px;
width: 25px;
margin-top: 4px;
text-align: center;
pointer-events: none;
}
div#usersManagementPortletContainer div#userRequestsNotificationsTabletView.notificationsHidden {
font-size: 14px;
background-color : #d8d8d8;
background : #d8d8d8;
color: white;
display: inline-block;
border-radius : 50%;
height: 25px;
width: 25px;
/* margin-top: 4px; */
text-align: center;
pointer-events: none;
}
div#usersManagementPortletContainer div#userRequestsNotifications:after {
/* content: 'No pending requests'; */
color:#808080;
font-size 0.8em;
}
div#usersManagementPortletContainer div#userRequestsNotifications.notificationsShown {
font-size: 14px;
background-color : #c00000;
background : #c00000;
color: white;
display: inline-block;
border-radius : 50%;
/* padding: 6px 9px; */
cursor : pointer;
float: right;
position: relative;
height: 25px;
width: 25px;
margin-top: 6px;
text-align: center;
}
#userRequestsNotificationsTabletView {
font-size: 14px;
background-color : #c00000;
background : #c00000;
color: white;
display: inline-block;
border-radius : 50%;
cursor : pointer;
float: left;
position: relative;
height: 25px;
width: 25px;
margin-top: 1em;
text-align: center;
border: 1px solid #ddd;
left: 7px;
z-index: 1039;
}
div#usersManagementPortletContainer div#toolbarHr,div.toolbarHr {
border-bottom: 4px solid #019ad3;
display:block !important;
padding: 0px !important;
margin: 0 !important;
height: 0 !important;
}
div#usersManagementPortletContainer div#toolbar.hiddenToolbar {
display: none;
}
div#usersManagementPortletContainer div#toolbar.shownToolbar {
background : #eeeeee;
background-color : #eeeeee;
}
div#usersManagementPortletContainer div#toolbar.shownToolbar > div#displaySelected {
cursor : default !important;
float : right;
/* margin-right: 10px; */
color: #808080;
/* border-right:1px solid #ddd; */
}
div#usersManagementPortletContainer div.toolbarContainer {
/* padding: 0px 0px 2px 0px; */
}
div#usersManagementPortletContainer div#toolbar div.insideToolbar {
padding-right: 15px;
padding-left: 15px;
padding-top : 10px;
color: #0271be;
display : inline-block;
height : 2em;
cursor : pointer;
}
div#usersManagementPortletContainer div#toolbar div.insideToolbar:hover {
background: #4cb5d2;
background-color: #4cb5d2;
color : #fff;
}
div#usersManagementPortletContainer div#toolbar.shownToolbar:hover div.insideToolbar:last-of-type {
background-color : #eeeeee;
background : #eeeeee;
color : #4cb5d2;
}
div#usersManagementPortletContainer div#toolbar.hiddenToolbar div.insideToolbar {
background-color : #fff;
background : #fff;
color : #fff;
}
div#usersManagementPortletContainer div#toolbar.hiddenToolbar:hover div.insideToolbar {
background-color : #fff;
background : #fff;
color : #fff;
cursor : default;
}
div#usersManagementPortletContainer div#usersRequestsTableToolbarContainer div {
padding-right: 15px;
padding-left: 15px;
padding-top : 10px;
color: #0271be;
display : inline-block;
height : 2em;
cursor : pointer;
}
div#usersManagementPortletContainer div#usersRequestsTableToolbarContainer div:not(#displaySelectedUserReqs):hover {
background: #4cb5d2;
background-color: #4cb5d2;
color : white;
}
div#usersManagementPortletContainer div#usersRequestsTableToolbarContainer.hiddenToolbar div:hover {
background: white;
background-color: white;
color : white;
}
div#usersManagementPortletContainer div#usersRequestsTableToolbarContainer.shownToolbar > div#displaySelectedUserReqs {
cursor : default !important;
float : right;
}
/* div#usersManagementPortletContainer div#usersRequestsTableToolbarContainer.shownToolbar:hover div:last-of-type {
background-color : #eeeeee;
background : #eeeeee;
color : rgb(13, 99, 200);
} */
div#usersManagementPortletContainer div#usersRequestsTableToolbarContainer {
background-color : #eeeeee;
background : #eeeeee;
margin-bottom : 10px;
}
div#usersManagementPortletContainer div#usersRequestsTableToolbarContainer.hiddenToolbar,
div#usersRequestsTableToolbarContainer.hiddenToolbar div {
background-color : white;
background : white;
color : white !important;
cursor : default !important;
}
div#usersManagementPortletContainer div#usersRequestsModal div.modal-body {
padding-top : 0px !important;
}
div#usersManagementPortletContainer div#requestsAcceptanceToolbar i,
div#usersManagementPortletContainer span:not(.grantDenyClass):not(.denyClass) {
display : inline-block;
}
#elementBubbletittle{
display:inline-block;
}
div#usersManagementPortletContainer div#requestsAcceptanceToolbar {
background : rgb(234, 234, 234);
background-color : rgb(234, 234, 234);
display : block;
}
div#usersManagementPortletContainer div#requestsAcceptanceToolbar i{
transform : scale(1.5,1.5);
-webkit-transform : scale(1.5,1.5);
}
div#usersManagementPortletContainer span#toolbarText {
margin-left: 10px;
}
div#usersManagementPortletContainer #currentUsersTableRefresh,
div#usersManagementPortletContainer #reloadUsersRequestsTable {
border : none;
}
div#usersManagementPortletContainerSiteTeamsEditMode div#groupTeamsTableToolbarContainer.hiddenToolbar > div:not(#addSiteTeam) {
background: #fff;
background-color: #fff;
color: #fff;
cursor : default;
}
div#usersManagementPortletContainerSiteTeamsEditMode div#groupTeamsTableToolbarContainer {
background: #eeeeee;
background-color: #eeeeee;
}
div#usersManagementPortletContainerSiteTeamsEditMode div#groupTeamsTableToolbarContainer.hiddenToolbar {
background: #fff;
background-color: #fff;
}
div#usersManagementPortletContainerSiteTeamsEditMode div#groupTeamsTableToolbarContainer.hiddenToolbar #deleteSiteTeam,
div#usersManagementPortletContainerSiteTeamsEditMode div#groupTeamsTableToolbarContainer.hiddenToolbar #editSiteTeam{
background: #fff;
background-color: #fff;
}
div#usersManagementPortletContainerSiteTeamsEditMode div#groupTeamsTableToolbarContainer div {
padding-right: 15px;
padding-left: 15px;
padding-top : 10px;
color: #0271be;
display : inline-block;
height : 2em;
cursor : pointer;
}
div#usersManagementPortletContainerSiteTeamsEditMode div#groupTeamsTableToolbarContainer div:hover {
background: #4cb5d2;
background-color: #4cb5d2;
color : #fff;
}
div.shownToolbar div#usersManagementDiv {
float:right;
}
div#toolbar div#userRequestsNotifications {
float:right;
}
div#notificationsNumberPlaceHolder {
text-align: center;
display: inline-block;
padding: 3px 0px 0px 0px;
}
div#notificationsNumberPlaceHolderTabletView {
text-align: center;
display: inline-block;
padding: 3px 0px 0px 0px;
}
div#notificationsNumberPlaceHolder:before {
/* content: 'Pending Requests:'; */
white-space: nowrap;
margin-left: -135px;
position: absolute;
color:#808080;
font-size 0.8em;
}
div#notificationsNumberPlaceHolder:hover:before {
cursor: default;
}
#notificationsTextDiv{
float: right;
margin-top: 8px;
padding-left: 2px;
color:#808080;
font-size 0.8em;
}
#notificationsTextDivTabletView{
padding-top: 3px;
padding-left: 2px;
color:#808080;
font-size 0.8em;
}
#notificationsTextDivTabletView{
float: left;
margin-top: 0.9em;
padding-left: 13px;
color:#808080;
font-size 0.8em;
}
div#addSiteTeam {
display: inline-block;
float: left;
color: #0271be;
height: 27px;
padding: 10px 15px 0px 15px;
background: #eeeeee;
background-color: #eeeeee;
}
div#addSiteTeam:hover {
color: #eeeeee;
background: #4cb5d2;
background-color: #4cb5d2;
cursor: pointer;
}
#newGroupPlusIcon {
margin-left: 5px;
}
#displaySelectedUserReqs{
color:#808080 !important;
}
@media only screen and (min-width:980px) and (max-width: 1012px) {
#userRequestsNotifications{
display:none !important;
}
#notificationsTextDiv{
display:none !important;
}
#userRequestsNotificationsTabletView{
display:inline-block !important;
}
#notificationsTextDivTabletView{
display:inline-block !important;
}
}
@media only screen and (min-width:768px) and (max-width: 1012px) {
div#usersManagementPortletContainer div#toolbar.shownToolbar > div#displaySelected {
margin-right: 0px;
border-right:none;
padding-left: 0px;
}
div#usersManagementPortletContainer div.dataTables_filter label,
div#usersManagementPortletContainerSiteTeamsEditMode div.dataTables_filter label {
width: 250px;
}
}

BIN
src/main/webapp/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B

View File

@ -0,0 +1,4 @@
function removeArrowFromFirstTableColumn(){
var tablesSelector = $('#usersManagementPortletContainer #CurrentUsersTable thead th:first, #usersManagementPortletContainer #usersRequestsTable thead th:first, #usersManagementPortletContainerSiteTeamsEditMode #GroupTeamsTable thead th:first, #rejectedUsersRequestsTable thead th:first');
tablesSelector.removeClass('sorting_asc');
}

View File

@ -0,0 +1,378 @@
function initializeCurrentUsersTable(){
$('table#CurrentUsersTable').on( 'draw.dt', function (e, settings, data) {
var info = $('#CurrentUsersTable').DataTable().page.info();
CurrentUsersTablePages = info.pages;
}).dataTable({
data : usersTableData,
columns : [
{
data : "CheckBox"
},
{
data : "UserName",
orderable : true
},
{
data : "Email",
orderable : true
},
{
data : "FullName",
orderable : true
},
{
data : "Roles",
orderable : true
} ,
{
data : "Teams",
orderable : true
} ,
{
data : "RequestDate",
orderable : true,
orderData: 8,
targets : 6
},
{
data : "ValidationDate",
orderable : true,
orderData: 9,
targets : 7
},
{
data : "RequestDateObject",
visible : false,
searchable : false,
orderable : true,
type : "date"
},
{
data : "ValidationDateObject",
visible : false,
searchable : false,
orderable : true,
type : "date"
}
],
pagingType : "full_numbers",
language : {
"info": "Showing _START_ - _END_ of _TOTAL_ | ",
"processing" : "Processing...",
"paginate": {
"next": "",
"previous": "",
"first": "",
"last": ""
},
"search": "_INPUT_",
"searchPlaceholder": "Search..."
},
dom: '<"toolbarContainer">frtilp',
responsive: {
details: {
display: $.fn.dataTable.Responsive.display.childRowImmediate,
type: ''
}
},
columnDefs: [{"orderable" : false, "targets" : 0},
{responsivePriority: 1, targets: 0},
{responsivePriority: 2, targets: 1},
{responsivePriority: 3, targets: 2},
{responsivePriority: 4, targets: 3},
{responsivePriority: 5, targets: 5},
{responsivePriority: 6, targets: 6},
{responsivePriority: 7, targets: 7}]
});
addTagsInputFunctionalityToSearchInput();
}
function initializeMembershipRequestsTable(){
$('table#usersRequestsTable').on( 'draw.dt', function (e, settings, data) {
var info = $('#usersRequestsTable').DataTable().page.info();
UsersRequestsTablePages = info.pages;
}).DataTable({
data : reqsTableData,
columns : [
{
data : "CheckBox",
orderable : false,
},
{
data : "UserName",
orderable : true,
},
{
data : "Email",
orderable : true,
},
{
data : "FullName",
orderable : true,
},
{
data : "Message",
orderable : true,
},
{
data: "RequestDate",
orderable : true,
orderData : 6,
targets : 5
},{
data : "RequestDateObject",
orderable : true,
visible : false,
searchable : false,
type : "date"
}
],
pagingType : "full_numbers",
language : {
"info": "Showing _START_ - _END_ of _TOTAL_ | ",
"processing" : "Processing...",
"paginate": {
"next": "",
"previous": "",
"first": "",
"last": ""
},
"search": "_INPUT_",
"searchPlaceholder": "Search..."
},
dom: '<"usersRequestsTableToolbarContainer">frtilp',
responsive: {
details: {
display: $.fn.dataTable.Responsive.display.childRowImmediate,
type: ''
}
},
columnDefs: [{responsivePriority: 1, targets: 0},
{responsivePriority: 2, targets: 1},
{responsivePriority: 3, targets: 2},
{responsivePriority: 4, targets: 3}]
});
}
function initializeRejectedMembershipRequestsTable(){
$('table#rejectedUsersRequestsTable')
.on('init.dt', function() {
constructToolbarForRejectedUsersRequestsTable();
})
.on( 'draw.dt', function (e, settings, data) {
// var info = $('#usersRequestsTable').DataTable().page.info();
// UsersRequestsTablePages = info.pages;
}).DataTable({
data : reqsTableData,
columns : [
{
data : "CheckBox",
orderable : false,
},
{
data : "UserName",
orderable : true,
},
{
data : "Email",
orderable : true,
},
{
data : "FullName",
orderable : true,
},
{
data : "Message",
orderable : true,
},
{
data: "RequestDate",
orderable : true,
orderData : 7,
targets : 5
},
{
data: "RejectionDate",
orderable : true,
orderData : 8,
targets : 6
},
{
data: "RequestDateObject",
orderable : true,
searchable : false,
visible : false
},
{
data: "RejectionDateObject",
orderable : true,
searchable : false,
visible : false
}
],
pagingType : "full_numbers",
language : {
"info": "Showing _START_ - _END_ of _TOTAL_ | ",
"processing" : "Processing...",
"paginate": {
"next": "",
"previous": "",
"first": "",
"last": ""
},
"search": "_INPUT_",
"searchPlaceholder": "Search..."
},
dom: '<"rejectedMembershipRequestsTableToolbarContainer">frtilp',
responsive: {
details: {
display: $.fn.dataTable.Responsive.display.childRowImmediate,
type: ''
}
},
columnDefs: [{responsivePriority: 1, targets: 0},
{responsivePriority: 2, targets: 1},
{responsivePriority: 3, targets: 2},
{responsivePriority: 4, targets: 3},
{responsivePriority: 5, targets: 4}]
});
}
function initializeGroupTeamsTable(){
$('table#GroupTeamsTable').on( 'draw.dt', function (e, settings, data) {
var info = $('#GroupTeamsTable').DataTable().page.info();
GroupTeamsTablePages = info.pages;
}).DataTable({
data : groupTeamsTableData,
columns : [
{
data : "CheckBox",
orderable : false,
},
{
data : "Name",
orderable : true,
},
{
data : "Description",
orderable : true,
},
{
data : "NumberOfUsers",
orderable : true,
},
{
data : "CreationDate",
orderable : true,
orderData: 7,
targets : 4
},
{
data: "LastModificationDate",
orderable : true,
orderData: 8,
targets : 5
},
{
data: "CreatorName",
orderable : true
},
{
data : "CreationDateObject",
visible : false,
searchable : false,
orderable : true,
type : "date"
},
{
data : "LastModificationDateObject",
visible : false,
searchable : false,
orderable : true,
type : "date"
}
],
language : {
"info": "Showing _START_ - _END_ of _TOTAL_ | ",
"processing" : "Processing...",
"paginate": {
"next": "",
"previous": "",
"first": "",
"last": ""
},
"search": "_INPUT_",
"searchPlaceholder": "Search..."
},
dom: '<"groupTeamsTableToolbarContainer">frtilp',
pagingType : "full_numbers",
responsive: {
details: {
display: $.fn.dataTable.Responsive.display.childRowImmediate,
type: ''
}
},
columnDefs: [{responsivePriority: 1, targets: 0},
{responsivePriority: 2, targets: 1},
{responsivePriority: 3, targets: 2},
{responsivePriority: 4, targets: 3}]
});
}
function initializeSiteTeamUsersTable(){
$('table#GroupTeamsTableUsers').on( 'draw.dt', function (e, settings, data) {
var info = $('#GroupTeamsTableUsers').DataTable().page.info();
GroupTeamsTableUsersTablePages = info.pages;
if(GroupTeamsTableUsersTablePages <= 1){
$('#GroupTeamsTableUsers_paginate').addClass('hidden');
}else{
$('#GroupTeamsTableUsers_paginate').removeClass('hidden');
}
}).dataTable({
data : [],
columns : [
{
data : "FullName",
orderable : true
},
{
data : "UserName",
orderable : true
}
],
pagingType : "full_numbers",
dom: 'frtilp',
language : {
"info": "Showing _START_ - _END_ of _TOTAL_ | ",
"processing" : "Processing...",
"paginate": {
"next": "",
"previous": "",
"first": "",
"last": ""
},
"search": "_INPUT_",
"searchPlaceholder": "Search..."
}
});
}
function setTooltips(){
// $('#userRequestsNotifications').tooltip();
$('#currentUsersTableRefresh').tooltip();
$('#reloadUsersRequestsTable').tooltip();
$('#editEmailTemplate').tooltip();
// $('#usersManagementPortletContainer .searchDiv').tooltip();
// $('#usersManagementPortletContainerSiteTeamsEditMode .searchDiv').tooltip();
}
function eraseTextOfSearchInputLabels(){
var array = $('#CurrentUsersTable_filter label, #usersRequestsTable_filter label, #GroupTeamsTable_filter label, #GroupTeamsTableUsers_filter label');
$.each(array, function(){
$($(this).contents()[0]).remove();
});//remove Search: text from label
array.find('input').attr('placeholder', 'Search:');
}

View File

@ -0,0 +1,336 @@
function tagEvents(theList, teamsList){
//Roles
$('#roleList').textext({
plugins : 'autocomplete arrow tags',
html : {
arrow:'<div class="text-arrow"><span class="caretContainer"><i class="caret"></i></span></div>'
},
ext : {
tags : {
addTags : function(tags) {
if(!alreadyExists(tags)) {
$.fn.textext.TextExtTags.prototype.addTags.apply(this, arguments);
}
}
}
}
})
.bind('getSuggestions', function(e, data)
{
var list = theList,
textext = $(e.target).textext()[0],
query = (data ? data.query : '') || ''
;
$(this).trigger(
'setSuggestions',
{
result : textext.itemManager().filter(list, query)
}
);
});
$('#roleListInAssignRolesModal').textext({
plugins : 'autocomplete arrow tags',
html : {
arrow:'<div class="text-arrow"><span class="caretContainer"><i class="caret"></i></span></div>'
},
ext : {
tags : {
addTags : function(tags) {
if(!alreadyExistsInAssignModal(tags)) {
$.fn.textext.TextExtTags.prototype.addTags.apply(this, arguments);
}
}
}
}
})
.bind('getSuggestions', function(e, data)
{
var list = theList,
textext = $(e.target).textext()[0],
query = (data ? data.query : '') || ''
;
$(this).trigger(
'setSuggestions',
{
result : textext.itemManager().filter(list, query)
}
);
});
//UI
$('#roleListInAssignRolesModal').closest('.text-core').addClass('span9')
//Teams
$('#teamsList').textext({
plugins : 'autocomplete arrow tags',
html : {
arrow:'<div class="text-arrow"><span class="caretContainer"><i class="caret"></i></span></div>'
},
ext : {
tags : {
addTags : function(tags) {
if(!alreadyExists(tags)) {
$.fn.textext.TextExtTags.prototype.addTags.apply(this, arguments);
}
}
}
}
})
.bind('getSuggestions', function(e, data)
{
var list = teamsList,
textext = $(e.target).textext()[0],
query = (data ? data.query : '') || ''
;
$(this).trigger(
'setSuggestions',
{
result : textext.itemManager().filter(list, query)
}
);
});
$('#teamsListInAssignUsersToGroupsModal').textext({
plugins : 'autocomplete arrow tags',
html : {
arrow:'<div class="text-arrow"><span class="caretContainer"><i class="caret"></i></span></div>'
},
ext : {
tags : {
addTags : function(tags) {
if(!alreadyExistsInAssignUsersToGroupsModal(tags)) {
$.fn.textext.TextExtTags.prototype.addTags.apply(this, arguments);
}
}
}
}
})
.bind('getSuggestions', function(e, data)
{
var list = teamsList,
textext = $(e.target).textext()[0],
query = (data ? data.query : '') || ''
;
$(this).trigger(
'setSuggestions',
{
result : textext.itemManager().filter(list, query)
}
);
});
//UI
$('#teamsListInAssignUsersToGroupsModal').closest('.text-core').addClass('span9')
//Emails
$('#tagsForEmails').textext({
plugins : 'tags'
});
$('#tagsForEmails').closest('.row').find('.text-core').addClass('span11');
$('#usersManagementPortletContainer div.text-tags').off().bind('DOMNodeInserted', function(event) {
var element = event.target;
var tagName = $(element).prop("tagName");
if(tagName !== 'DIV')return;
$(this).find('.text-button').addClass('span12');
$(this).find('.text-label').addClass('span11');
$('#tagsForEmails').parent().find('a.text-remove').html('<i class="fa fa-times"></i>').removeClass('text-remove').addClass('tag-remove span1');
});
$('span#textAboveTagsInput div.row div.text-core:first-of-type').addClass('span9');
$('#CCAdminsEmails').textext({
plugins : 'tags'
});
$('#BCCAdminsEmails').textext({
plugins : 'tags',
html: {
tag : '<div class="text-tag"><div class="text-button span12"><span class="text-label span11"></span></div></div>'
}
});
$('textarea#BCCAdminsEmails').textext()[0].tags().containerElement().closest('.text-core').addClass('span11');
}
function alreadyExists(tags){
var roleTexts = $('#roleList').parent().find('.text-button.span12 .text-label');
var teamTexts = $('#teamsList').parent().find('.text-button.span12 .text-label');
var elements = $.merge(roleTexts, teamTexts);
for(var i = 0; i < elements.length; i++){
if(tags === null) return false;
for(var j = 0; j < tags.length; j++){
if($(elements[i]).text().trim() === tags[j].trim()){
return true;
}
}
}
return false;
}
function alreadyExistsInAssignModal(tags){
var roleTextsInAssignModal = $('#roleListInAssignRolesModal').parent().find('.text-button.span12 .text-label');
var elements = roleTextsInAssignModal;
for(var i = 0; i < elements.length; i++){
if(tags === null) return false;
for(var j = 0; j < tags.length; j++){
if($(elements[i]).text().trim() === tags[j].trim()){
return true;
}
}
}
return false;
}
function alreadyExistsInAssignUsersToGroupsModal(tags){
var teamTexts = $('#teamsListInAssignUsersToGroupsModal').parent().find('.text-button.span12 .text-label');
var elements = teamTexts;
for(var i = 0; i < elements.length; i++){
if(tags === null) return false;
for(var j = 0; j < tags.length; j++){
if($(elements[i]).text().trim() === tags[j].trim()){
return true;
}
}
}
return false;
}
function teamEditedOrDeleted(teamsList){
$('#teamsList').closest('.text-core.span9').remove();
$('#textAboveTagsInput .row:nth-of-type(5)').append(
$('<textarea></textarea>', {
id : 'teamsList'
})
);
$('#teamsList').textext({
plugins : 'autocomplete arrow tags',
html : {
arrow:'<div class="text-arrow"><span class="caretContainer"><i class="caret"></i></span></div>'
},
ext : {
tags : {
addTags : function(tags) {
if(!alreadyExists(tags)) {
$.fn.textext.TextExtTags.prototype.addTags.apply(this, arguments);
}
}
}
}
})
.bind('getSuggestions', function(e, data)
{
var list = teamsList,
textext = $(e.target).textext()[0],
query = (data ? data.query : '') || ''
;
$(this).trigger(
'setSuggestions',
{
result : textext.itemManager().filter(list, query)
}
);
});
$('span#textAboveTagsInput div.row:nth-of-type(5) div.text-core:first').addClass('span9');
$('#teamsList').parent().find('div.text-tags').off().bind(
'DOMNodeInserted',
function(event) {
var element = event.target;
var tagName = $(element).prop("tagName");
if (tagName !== 'DIV')
return;
// $('#roleList').parent().find('div.text-tag').addClass('span5');
$('#teamsList').parent().find('div.text-button').addClass(
'span12');
$('#teamsList').parent().find('a.text-remove').html('<i class="fa fa-times"></i>')
.removeClass('text-remove').addClass('tag-remove');
$('textarea#teamsList').parent().find('a.tag-remove').off().on(
'click', function() {
$(this).closest('.text-tag').remove();
});
var matched = false;
var tagsTextt = $('#teamsList').parent().find(
'div.text-tag.span5');
for (var i = 0; i < tagsTextt.length; i++) {
for (var j = i + 1; j < tagsTextt.length; j++) {
if ($(tagsTextt[i]).text() === $(tagsTextt[j]).text()) {
tagsTextt[j].remove();
}
}
}
});
$('#teamsListInAssignUsersToGroupsModal').closest('.text-core.span9').remove();
$('#textAboveTagsInputInAssignUsersToGroupsModal .row:last').append(
$('<textarea></textarea>', {
id : 'teamsListInAssignUsersToGroupsModal'
})
);
$('#teamsListInAssignUsersToGroupsModal').textext({
plugins : 'autocomplete arrow tags',
html : {
arrow:'<div class="text-arrow"><span class="caretContainer"><i class="caret"></i></span></div>'
},
ext : {
tags : {
addTags : function(tags) {
if(!alreadyExistsInAssignUsersToGroupsModal(tags)) {
$.fn.textext.TextExtTags.prototype.addTags.apply(this, arguments);
}
}
}
}
})
.bind('getSuggestions', function(e, data)
{
var list = teamsList,
textext = $(e.target).textext()[0],
query = (data ? data.query : '') || ''
;
$(this).trigger(
'setSuggestions',
{
result : textext.itemManager().filter(list, query)
}
);
});
$('span#textAboveTagsInputInAssignUsersToGroupsModal div.row:last div.text-core:first').addClass('span9');
$('#teamsListInAssignUsersToGroupsModal').parent().find('div.text-tags').off().bind(
'DOMNodeInserted',
function(event) {
var element = event.target;
var tagName = $(element).prop("tagName");
if (tagName !== 'DIV')
return;
// $('#roleList').parent().find('div.text-tag').addClass('span5');
$('#teamsListInAssignUsersToGroupsModal').parent().find('div.text-button').addClass(
'span12');
$('#teamsListInAssignUsersToGroupsModal').parent().find('a.text-remove').html('<i class="fa fa-times"></i>')
.removeClass('text-remove').addClass('tag-remove');
$('textarea#teamsListInAssignUsersToGroupsModal').parent().find('a.tag-remove').off().on(
'click', function() {
$(this).closest('.text-tag').remove();
});
var matched = false;
var tagsTextt = $('#teamsListInAssignUsersToGroupsModal').parent().find(
'div.text-tag.span5');
for (var i = 0; i < tagsTextt.length; i++) {
for (var j = i + 1; j < tagsTextt.length; j++) {
if ($(tagsTextt[i]).text() === $(tagsTextt[j]).text()) {
tagsTextt[j].remove();
}
}
}
});
}

View File

@ -0,0 +1,256 @@
function constructToolbarForCurrentUsersTable(){
var toolbar = $('<div></div>', {
id: 'toolbar',
class: 'shownToolbar',
css: {
display: 'none'
}
// 'class' : 'hiddenToolbar'
});
var dispSelected = $('<div></div>', {
id : 'displaySelected',
class: 'insideToolbar'
});
dispSelected.append($('<span></span>', {
id : 'numOfSelectedRows'
}));
dispSelected.append($('<span></span>', {
id : 'justSelectedText',
text : ' selected'
}));
var notificationsWrapper = $('<div></div>', {
id : 'userRequestsNotifications',
'class' : 'notificationsShown hidden',
// 'class' : 'notificationsShown visible-desktop',
'data-toggle' : "tooltip",
'data-placement':"left",
'data-original-title':"Users' membership requests",
css : {
display: 'none'
}//hide element
});
var notificationsNumberPlaceHolder = $('<div></div>', {
id: 'notificationsNumberPlaceHolder',
text: 0
});
var notificationsTextSpan = $('<span></span>', {
id : 'notificationsTextDiv',
text: ' pending requests',
class : 'hidden',
css : {
display: 'none'
}//hide element
// class : 'visible-desktop'
});
notificationsWrapper.append(notificationsNumberPlaceHolder);
var notificationsWrapperTabletView = $('<div></div>', {
id : 'userRequestsNotificationsTabletView',
// 'class' : 'notificationsShown visible-tablet',
'class' : 'notificationsShown',
'data-toggle' : "tooltip",
'data-placement':"left",
'data-original-title':"Users' membership requests"
});
var notificationsNumberPlaceHolderTabletView = $('<div></div>', {
id: 'notificationsNumberPlaceHolderTabletView',
text: 0
});
var notificationsTextSpanTabletView = $('<span></span>', {
id : 'notificationsTextDivTabletView',
text: ' pending requests',
class : ''
// class : 'visible-tablet'
});
toolbar
.append($('<div></div>', {
id : 'deselectAll',
class: 'insideToolbar',
text : 'Deselect All'
})).append($('<div></div>', {
id : 'editSelected',
class: 'insideToolbar',
text : 'Edit Selected'
})).append($('<div></div>', {
id : 'assignRolesToUser',
class: 'insideToolbar',
text : 'Assign Roles'
})).append($('<div></div>', {
id : 'assignUsersToGroup',
class: 'insideToolbar',
text : 'Add to Group'
})).append($('<div></div>', {
id : 'deleteSelected',
text : 'Unsubscribe Selected',
class: 'insideToolbar'
})).append(notificationsTextSpan).append(notificationsWrapper).append(dispSelected);
// .append($('<div></div>', {
// id : 'usersManagementDiv',
// text : 'Pending Requests:'
// }))//.append(currentUsersTableRefresh)
$("#usersManagementPortletContainer div.toolbarContainer")
.append($('<div></div>', {
id : 'toolbarHr'
})).append(toolbar);
notificationsWrapperTabletView.append(notificationsNumberPlaceHolderTabletView);
notificationsTextSpanTabletView.insertAfter(toolbar);
notificationsWrapperTabletView.insertAfter(toolbar);
}
function searchInputFixForCurrentUsersTable(){
var a = $('<div></div>', {
'class': 'searchDiv',
'data-toggle' : "tooltip",
'data-placement': "top",
'data-original-title':"Search"
}).append($('<i></i>', {
'class' : "icon-search"
}).prop('outerHTML'));
$('#CurrentUsersTable_filter').append(a);
$('#CurrentUsersTable_filter label').toggleClass('hideMe');
$('div#changeUsersRolesModal div.modal-body span#textAboveTagsInput div.bootstrap-tagsinput').addClass('span9');
}
function searchInputFixForMembershipRequestsTable(){
var aa = $('<div></div>', {
'class': 'searchDiv',
'data-toggle' : "tooltip",
'data-placement': "top",
'data-original-title':"Search"
}).append($('<i></i>', {
'class' : "icon-search"
}).prop('outerHTML'));
$('#usersRequestsTable_filter').append(aa);
$('#usersRequestsTable_filter label').toggleClass('hideMe');
}
function searchInputFixForSiteTeamsEditTable(){
var aa = $('<div></div>', {
'class': 'searchDiv',
'data-toggle' : "tooltip",
'data-placement': "top",
'data-original-title':"Search"
}).append($('<i></i>', {
'class' : "icon-search"
}).prop('outerHTML'));
$('#GroupTeamsTable_filter').append(aa);
$('#GroupTeamsTable_filter label').toggleClass('hideMe');
}
function searchInputFixForSiteTeamsUsersTable(){
var aa = $('<div></div>', {
'class': 'searchDiv',
'data-toggle' : "tooltip",
'data-placement': "top",
'data-original-title':"Search"
}).append($('<i></i>', {
'class' : "icon-search"
}).prop('outerHTML'));
$('#GroupTeamsTableUsers_filter').append(aa);
$('#GroupTeamsTableUsers_filter label').toggleClass('hideMe');
}
function searchInputFixForRejectedUsersRequestsTable(){
var aa = $('<div></div>', {
'class': 'searchDiv',
'data-toggle' : "tooltip",
'data-placement': "top",
'data-original-title':"Search"
}).append($('<i></i>', {
'class' : "icon-search"
}).prop('outerHTML'));
$('#rejectedUsersRequestsTable_filter').append(aa);
$('#rejectedUsersRequestsTable_filter label').toggleClass('hideMe');
}
function constructToolbarForMembershipRequestsTable(){
var dispSelectedUserReqs = $('<div></div>', {
id : 'displaySelectedUserReqs'
});
dispSelectedUserReqs.append($('<span></span>', {
id : 'numOfSelectedRowsUserReqs'
}));
dispSelectedUserReqs.append($('<span></span>', {
id : 'justSelectedTextUserReqs',
text : ' selected'
}));
$('#usersManagementPortletContainer .usersRequestsTableToolbarContainer')
// .addClass('hiddenToolbar')
.addClass('shownToolbar')
.prop('id', 'usersRequestsTableToolbarContainer')
.css('display', 'none')
.append($('<div></div>', {
id : 'acceptSeleced',
text : 'Accept Selected'
})).append($('<div></div>', {
id : 'rejectSeleced',
text : 'Reject Selected'
})).append(dispSelectedUserReqs);
var div = $('<div></div>', {
id : 'borderFirstScreen'
});
div.insertBefore('#usersManagementPortletContainer .usersRequestsTableToolbarContainer');
}
function constructToolbarForSiteTeamsTable(){
$('<div></div>', {
class : 'toolbarHr'
}).insertBefore($('.groupTeamsTableToolbarContainer'));
$('.groupTeamsTableToolbarContainer')
// .addClass('hiddenToolbar')
.addClass('shownToolbar')
.css('display', 'none')
.prop('id', 'groupTeamsTableToolbarContainer')
.append($('<div></div>', {
id : 'deleteSiteTeam',
text : 'Delete Group'
})).append($('<div></div>', {
id : 'editSiteTeam',
text : 'Edit Group'
}));
var addSiteTeam = $('<div></div>', {
id : 'addSiteTeam',
text : 'New Group'
});
var newGroupPlusIcon = $('<i></i>',{
class: "fa fa-plus-circle",
'aria-hidden':"true",
id : 'newGroupPlusIcon'
});
addSiteTeam.append(newGroupPlusIcon);
addSiteTeam.insertAfter('.groupTeamsTableToolbarContainer');
var div = $('<div></div>', {
id : 'borderFirstScreen'
});
div.insertBefore('#groupTeamsTableToolbarContainer .groupTeamsTableToolbarContainer');
}
function constructToolbarForRejectedUsersRequestsTable(){
$("div.rejectedMembershipRequestsTableToolbarContainer")
.append($('<div></div>', {
class : 'toolbarHr'
}));
}

View File

@ -0,0 +1,556 @@
function surroundObjectPropWithDiv(object){
for(var prop in object){
if(object[prop] instanceof Date)continue;
if(object[prop].length === 0)object[prop] = "-";
if(object[prop] === '123')object[prop] = "";
if(Array.isArray(object[prop]) && object[prop].length > 0){
var variable = "";
for(var i = 0; i < object[prop].length; i++){
if(i===object[prop].length-1){
variable += object[prop][i];
}else{
variable += object[prop][i] + ", ";
}
}
object[prop] = variable;
}
object[prop] = '<div>' + object[prop] + '</div>';
}
return object;
}
function AJAX_CALL_POST(theData, callBack){
$.ajax(
{
url: loginURL,
type: 'post',
datatype:'json',
data: theData,
success: function(data){
callBack(data);
removeArrowFromFirstTableColumn();
// hideTeamManagementToolbar();
hidePreloader();
},
error: function (xhr, ajaxOptions, thrownError) {
$('div.modal.fade').modal('hide');
hidePreloader();
$('#usersManagementPortletContainer #InternalServerErrorModal').modal('show');
// alert(xhr.status);
// alert(thrownError);
}
}
);
}
function dataToBeSendViaAJAX(fieldName, value, theObject){
var returnObject;
if(typeof theObject === "object"){
returnObject = theObject;
}else {
returnObject = {};
}
returnObject[nameSpace + fieldName] = value;
return returnObject;
}
function fetchAllCurrentUsers(mode, deleteUsers, usersUUIDs, roles, teams, deleteRoles, reqIDs, sendEmail, typeOfChangesUpponUserMode){
var theData = dataToBeSendViaAJAX("groupId", theGroupId);
theData = dataToBeSendViaAJAX("currentUsersTable", true, theData);
theData = dataToBeSendViaAJAX("deleteUsersFromCurrentUsersTable", deleteUsers, theData);
theData = dataToBeSendViaAJAX("sendDismissalEmail", sendEmail, theData);
theData = dataToBeSendViaAJAX("selectedUsers", usersUUIDs, theData);
theData = dataToBeSendViaAJAX("usersRoles", roles, theData);
theData = dataToBeSendViaAJAX("usersTeams", teams, theData);
theData = dataToBeSendViaAJAX("modeCurrentUsersTable", mode, theData);
theData = dataToBeSendViaAJAX("deletePreviousRoles", deleteRoles, theData);
theData = dataToBeSendViaAJAX("membershipRequestsIDs", reqIDs, theData);
theData = dataToBeSendViaAJAX("typeOfChangesUpponUserMode", typeOfChangesUpponUserMode, theData);
var callBack = function(data){
var content= JSON.parse(data);
currentUsers = [];
currentUsers = content.currentUsers;
if(!$.isEmptyObject(content)){
for(var i = 0; i < currentUsers.length; i++){
currentUsers[i] = new currentUsersObjectForDataTable(
'<i class="icon-ok"></i>',
currentUsers[i].userName,
currentUsers[i].userEmail,
currentUsers[i].userFullName,
currentUsers[i].userSiteRoles,
currentUsers[i].userTeams,
currentUsers[i].userId,
currentUsers[i].requestDate,
currentUsers[i].validationDate,
currentUsers[i].reqID,
currentUsers[i].isSelf,
currentUsers[i].RequestDateObject,
currentUsers[i].ValidationDateObject
);
currentUsers[i] = surroundObjectPropWithDiv(currentUsers[i]);
}
$('table#CurrentUsersTable').DataTable().clear();
for(var i = 0; i < currentUsers.length; i++){
$('table#CurrentUsersTable').dataTable().fnAddData(currentUsers[i]);
}
$('table#CurrentUsersTable th:first').removeClass('none');
if(CurrentUsersTablePages <= 1){
$('#CurrentUsersTable_paginate').addClass('hidden');
}else{
$('#CurrentUsersTable_paginate').removeClass('hidden');
}
var isDataTable = $.fn.DataTable.isDataTable( '#GroupTeamsTable' );
// var siteTeamsTableDataLenght = $('#GroupTeamsTable').dataTable().fnGetData().length;
if(mode !== 2 && isDataTable){//refresh
fetchAllSiteTeamsForTheCurrentGroup();
}else if(mode !== 2 && !isDataTable){
initializeGroupTeamsTable();
fetchAllSiteTeamsForTheCurrentGroup();
searchInputFixForSiteTeamsEditTable();
siteTeamsTableEvents();
constructToolbarForSiteTeamsTable();
initializeSiteTeamUsersTable();
searchInputFixForSiteTeamsUsersTable();
setTimeout(function(){//If you don't add some time interval, the table won't redraw when you press the tab
$('table#GroupTeamsTable').DataTable().columns.adjust().draw();
$('table#GroupTeamsTable').DataTable().columns.adjust().responsive.recalc();
removeArrowFromFirstTableColumn();
},200);
$('.unhit').removeClass('unhit').addClass('redraw');
$('li.redraw').on('click', function(){
setTimeout(function(){//If you don't add some time interval, the table won't redraw when you press the tab
$('table#GroupTeamsTable').DataTable().columns.adjust().draw();
$('table#GroupTeamsTable').DataTable().columns.adjust().responsive.recalc();
removeArrowFromFirstTableColumn();
},200);
$(this).removeClass('redraw');
});
}
} else {
hidePreloader();
$('#usersManagementPortletContainer #InternalServerErrorModal').modal('show');
}
};
AJAX_CALL_POST(theData, callBack);
}
function fetchAllUsersRequests(mode, reqIDs, replyUserId, sendCustomRejectionEmail, CustomRejectionEmailBody){
var theData = dataToBeSendViaAJAX("groupId", theGroupId);
theData = dataToBeSendViaAJAX("fetchUsersRequests", true, theData);
theData = dataToBeSendViaAJAX("modeMembershipRequestsTable", mode, theData);
theData = dataToBeSendViaAJAX("membershipRequestsIds", reqIDs, theData);
theData = dataToBeSendViaAJAX("managerId", replyUserId, theData);
theData = dataToBeSendViaAJAX("CustomRejectionEmailFromAdmin", sendCustomRejectionEmail, theData);
theData = dataToBeSendViaAJAX("CustomRejectionEmailBodyFromAdmin", CustomRejectionEmailBody, theData);
var callBack = function(data){
var content= JSON.parse(data);
currentUsersRequests = [];
currentUsersRequests = content.currentUsersRequests;
if(!$.isEmptyObject(content) && content !== null && content.currentUsersRequests.length!== 0){
for(var i = 0; i < currentUsersRequests.length; i++){
currentUsersRequests[i] = new usersRequestObjectForDataTable(
'<i class="icon-ok"></i>',
currentUsersRequests[i].userName,
currentUsersRequests[i].userEmail,
currentUsersRequests[i].userFullName,
currentUsersRequests[i].requestComments,
currentUsersRequests[i].userId,
currentUsersRequests[i].requestId,
currentUsersRequests[i].requestDate,
currentUsersRequests[i].requestDateObject
);
currentUsersRequests[i] = surroundObjectPropWithDiv(currentUsersRequests[i]);
}
$('table#usersRequestsTable').DataTable().clear();
for(var i = 0; i < currentUsersRequests.length; i++){
$('table#usersRequestsTable').dataTable().fnAddData(currentUsersRequests[i]);
}
$('table#usersRequestsTable th:first').removeClass('none');
$('div#usersRequestsTableToolbarContainer').animate({height:'hide'});
$('div#usersRequestsTableToolbarContainer').removeClass('openToolbar');
if(UsersRequestsTablePages <= 1){
$('#usersRequestsTable_paginate').addClass('hidden');
}else{
$('#usersRequestsTable_paginate').removeClass('hidden');
}
countUsersMembershipRequests();
// $('div#usersRequestsTableToolbarContainer').addClass('hiddenToolbar').removeClass('shownToolbar');
$('span#numOfSelectedRowsUserReqs').text('');
} else if(content.currentUsersRequests.length === 0) {
$('#notificationsNumberPlaceHolder').text(0);
$('#notificationsNumberPlaceHolderTabletView').text(0);
} else if(content === null) {
hidePreloader();
$('#usersManagementPortletContainer #InternalServerErrorModal').modal('show');
}
fetchAllCurrentUsers(2, false, [], [], [], false, [], false);
}
AJAX_CALL_POST(theData, callBack);
}
function fetchAllRejectedUsersRequests() {
var theData = dataToBeSendViaAJAX("groupId", theGroupId);
theData = dataToBeSendViaAJAX("fetchUsersRejectedRequests", true, theData);
// theData = dataToBeSendViaAJAX("membershipRequestsIds", reqIDs, theData);
var callback = function(data){
var content= JSON.parse(data);
var rejectedUsersRequests = [];
rejectedUsersRequests = content.currentUsersRequests;
if(!$.isEmptyObject(content) && content !== null && content.currentUsersRequests.length!== 0){
for(var i = 0; i < rejectedUsersRequests.length; i++){
rejectedUsersRequests[i] = new rejectedUsersRequestObjectForDataTable(
'<i class="icon-ok"></i>',
rejectedUsersRequests[i].userName,
rejectedUsersRequests[i].userEmail,
rejectedUsersRequests[i].userFullName,
rejectedUsersRequests[i].requestComments,
rejectedUsersRequests[i].userId,
rejectedUsersRequests[i].requestId,
rejectedUsersRequests[i].requestDate,
rejectedUsersRequests[i].rejectionDate,
rejectedUsersRequests[i].requestDateObject,
rejectedUsersRequests[i].rejectionDateObject
);
rejectedUsersRequests[i] = surroundObjectPropWithDiv(rejectedUsersRequests[i]);
}
$('table#rejectedUsersRequestsTable').DataTable().clear();
for(var i = 0; i < rejectedUsersRequests.length; i++){
$('table#rejectedUsersRequestsTable').dataTable().fnAddData(rejectedUsersRequests[i]);
}
// $('table#rejectedUsersRequestsTable th:first').removeClass('none');
// $('div#usersRequestsTableToolbarContainer').animate({height:'hide'});
// $('div#usersRequestsTableToolbarContainer').removeClass('openToolbar');
var numOfTablePages = $('#rejectedUsersRequestsTable').DataTable().page.info().pages;
if(numOfTablePages <= 1){
$('#rejectedUsersRequestsTable_paginate').addClass('hidden');
}else{
$('#rejectedUsersRequestsTable_paginate').removeClass('hidden');
}
countUsersMembershipRequests();
// $('div#usersRequestsTableToolbarContainer').addClass('hiddenToolbar').removeClass('shownToolbar');
// $('span#numOfSelectedRowsUserReqs').text('');
} else if(content.currentUsersRequests.length === 0) {
// $('#notificationsNumberPlaceHolder').text(0);
// $('#notificationsNumberPlaceHolderTabletView').text(0);
} else if(content === null) {
hidePreloader();
$('#usersManagementPortletContainer #InternalServerErrorModal').modal('show');
}
// fetchAllCurrentUsers(2, false, [], [], [], false, [], false);
}
AJAX_CALL_POST(theData, callback);
}
function countUsersMembershipRequests(){
var theData = dataToBeSendViaAJAX("groupId", theGroupId);
theData = dataToBeSendViaAJAX("countUsersMembershipRequests", true, theData);
var callBack = function(data){
var content= JSON.parse(data);
if(!$.isEmptyObject(content) && content !== null){
$('#notificationsNumberPlaceHolder').text(content.countUsersMembershipRequests[0]);
$('#notificationsNumberPlaceHolderTabletView').text(content.countUsersMembershipRequests[0]);
portalName = content.countUsersMembershipRequests[1];//retrieving the portal name from the backend via ajax
}else if(content === null) {
hidePreloader();
$('#usersManagementPortletContainer #InternalServerErrorModal').modal('show');
}
};
AJAX_CALL_POST(theData, callBack);
}
function fetchAllSiteTeamsForTheCurrentGroup(){
var theData = dataToBeSendViaAJAX("groupId", theGroupId);
theData = dataToBeSendViaAJAX("fetchAllSiteTeamsForTheCurrentGroup", true, theData);
theData = dataToBeSendViaAJAX("modeSiteTeams", SITE_TEAMS_TABLE_REFRESH, theData);
var callBack = function(data){
var content= JSON.parse(data);
var siteTeams = [];
siteTeams = content.siteTeams;
if(!$.isEmptyObject(content) && content !== null && siteTeams.length!== 0){
var teams = [];
for(var i = 0; i < siteTeams.length; i++){
siteTeams[i] = new siteTeamsObjectForDataTable(
'<i class="icon-ok"></i>',
siteTeams[i].Name,
siteTeams[i].TeamID,
siteTeams[i].Description,
siteTeams[i].NumberOfUsers,
siteTeams[i].CreationDate,
siteTeams[i].LastModificationDate,
siteTeams[i].CreatorName,
siteTeams[i].siteTeamUsers,
siteTeams[i].CreationDateObject,
siteTeams[i].LastModificationDateObject
);
teams.push(siteTeams[i].Name);
siteTeams[i].siteTeamUsers = formatSiteTeamUsers(siteTeams[i].siteTeamUsers);
siteTeams[i] = surroundObjectPropWithDiv(siteTeams[i]);
}
teamEditedOrDeleted(teams);
$('table#GroupTeamsTable').DataTable().clear();
for(var i = 0; i < siteTeams.length; i++){
$('table#GroupTeamsTable').dataTable().fnAddData(siteTeams[i]);
}
if(GroupTeamsTablePages <= 1){
$('#GroupTeamsTable_paginate').addClass('hidden');
} else if(siteTeams.length === 0){
$('#GroupTeamsTable_paginate').addClass('hidden');
}
}else if(content === null) {
hidePreloader();
$('#usersManagementPortletContainer #InternalServerErrorModal').modal('show');
}else if(siteTeams.length === 0){
$('#GroupTeamsTable_paginate').removeClass('hidden');
}
if(!handlersAppliedToToolbarForFirstTime){
siteTeamsToolbarEvents();
}
};
AJAX_CALL_POST(theData, callBack);
}
function EditSiteTeamsForTheCurrentGroup(siteTeamName, siteTeamDescription, TeamID){
var theData = dataToBeSendViaAJAX("groupId", theGroupId);
theData = dataToBeSendViaAJAX("fetchAllSiteTeamsForTheCurrentGroup", true, theData);
theData = dataToBeSendViaAJAX("modeSiteTeams", SITE_TEAMS_TABLE_EDIT_GROUP, theData);
theData = dataToBeSendViaAJAX("siteTeamName", siteTeamName, theData);
theData = dataToBeSendViaAJAX("siteTeamDescription", siteTeamDescription, theData);
theData = dataToBeSendViaAJAX("siteTeamID", TeamID, theData);
var callBack = function(data){
var content= JSON.parse(data);
var siteTeams = [];
siteTeams = content.siteTeams;
if(!$.isEmptyObject(content) && content !== null && siteTeams.length!== 0){
var teams = [];
for(var i = 0; i < siteTeams.length; i++){
siteTeams[i] = new siteTeamsObjectForDataTable(
'<i class="icon-ok"></i>',
siteTeams[i].Name,
siteTeams[i].TeamID,
siteTeams[i].Description,
siteTeams[i].NumberOfUsers,
siteTeams[i].CreationDate,
siteTeams[i].LastModificationDate,
siteTeams[i].CreatorName,
siteTeams[i].siteTeamUsers,
siteTeams[i].CreationDateObject,
siteTeams[i].LastModificationDateObject
);
teams.push(siteTeams[i].Name);
siteTeams[i].siteTeamUsers = formatSiteTeamUsers(siteTeams[i].siteTeamUsers);
siteTeams[i] = surroundObjectPropWithDiv(siteTeams[i]);
}
teamEditedOrDeleted(teams);
$('table#GroupTeamsTable').DataTable().clear();
for(var i = 0; i < siteTeams.length; i++){
$('table#GroupTeamsTable').dataTable().fnAddData(siteTeams[i]);
}
$('#groupTeamsTableToolbarContainer').animate({height:'hide'});
$('#groupTeamsTableToolbarContainer').removeClass('opened');
fetchAllCurrentUsers(2, false, [], [], false, [], false);
}else if(content === null) {
$('div.modal.fade').modal('hide');
hidePreloader();
$('#usersManagementPortletContainer #InternalServerErrorModal').modal('show');
}
$('#editGroupTeamModal').modal('hide');
};
showPreloader();
AJAX_CALL_POST(theData, callBack);
}
function CreateSiteTeamsForTheCurrentGroup(siteTeamName, siteTeamDescription){
var theData = dataToBeSendViaAJAX("groupId", theGroupId);
theData = dataToBeSendViaAJAX("fetchAllSiteTeamsForTheCurrentGroup", true, theData);
theData = dataToBeSendViaAJAX("modeSiteTeams", SITE_TEAMS_TABLE_CREATE_GROUP, theData);
theData = dataToBeSendViaAJAX("siteTeamName", siteTeamName, theData);
theData = dataToBeSendViaAJAX("siteTeamDescription", siteTeamDescription, theData);
var callBack = function(data){
var content= JSON.parse(data);
var siteTeams = [];
siteTeams = content.siteTeams;
if(!$.isEmptyObject(content) && content !== null && siteTeams.length!== 0){
var teams = [];
for(var i = 0; i < siteTeams.length; i++){
siteTeams[i] = new siteTeamsObjectForDataTable(
'<i class="icon-ok"></i>',
siteTeams[i].Name,
siteTeams[i].TeamID,
siteTeams[i].Description,
siteTeams[i].NumberOfUsers,
siteTeams[i].CreationDate,
siteTeams[i].LastModificationDate,
siteTeams[i].CreatorName,
siteTeams[i].siteTeamUsers,
siteTeams[i].CreationDateObject,
siteTeams[i].LastModificationDateObject
);
teams.push(siteTeams[i].Name);
siteTeams[i].siteTeamUsers = formatSiteTeamUsers(siteTeams[i].siteTeamUsers);
siteTeams[i] = surroundObjectPropWithDiv(siteTeams[i]);
}
teamEditedOrDeleted(teams);
$('table#GroupTeamsTable').DataTable().clear();
for(var i = 0; i < siteTeams.length; i++){
$('table#GroupTeamsTable').dataTable().fnAddData(siteTeams[i]);
}
fetchAllCurrentUsers(2, false, [], [], false, [], false);
}else if(content === null) {
$('div.modal.fade').modal('hide');
hidePreloader();
$('#usersManagementPortletContainer #InternalServerErrorModal').modal('show');
}
$('#newGroupTeamModal').modal('hide');
};
$('div.modal.fade').modal('hide');
showPreloader();
AJAX_CALL_POST(theData, callBack);
}
function DeleteSiteTeamsForTheCurrentGroup(teamID){
var theData = dataToBeSendViaAJAX("groupId", theGroupId);
theData = dataToBeSendViaAJAX("fetchAllSiteTeamsForTheCurrentGroup", true, theData);
theData = dataToBeSendViaAJAX("modeSiteTeams", SITE_TEAMS_TABLE_DELETE_GROUP, theData);
theData = dataToBeSendViaAJAX("siteTeamID", teamID, theData);
var callBack = function(data){
var content= JSON.parse(data);
var siteTeams = [];
siteTeams = content.siteTeams;
if(!$.isEmptyObject(content) && content !== null){
var teams = [];
for(var i = 0; i < siteTeams.length; i++){
siteTeams[i] = new siteTeamsObjectForDataTable(
'<i class="icon-ok"></i>',
siteTeams[i].Name,
siteTeams[i].TeamID,
siteTeams[i].Description,
siteTeams[i].NumberOfUsers,
siteTeams[i].CreationDate,
siteTeams[i].LastModificationDate,
siteTeams[i].CreatorName,
siteTeams[i].siteTeamUsers,
siteTeams[i].CreationDateObject,
siteTeams[i].LastModificationDateObject
);
teams.push(siteTeams[i].Name);
siteTeams[i].siteTeamUsers = formatSiteTeamUsers(siteTeams[i].siteTeamUsers);
siteTeams[i] = surroundObjectPropWithDiv(siteTeams[i]);
}
teamEditedOrDeleted(teams);
if(siteTeams.length!== 0){
$('table#GroupTeamsTable').DataTable().clear();
} else {
$('table#GroupTeamsTable').DataTable().clear().draw();
}
for(var i = 0; i < siteTeams.length; i++){
$('table#GroupTeamsTable').dataTable().fnAddData(siteTeams[i]);
}
$('#groupTeamsTableToolbarContainer').animate({height:'hide'});
$('#groupTeamsTableToolbarContainer').removeClass('opened');
fetchAllCurrentUsers(2, false, [], [], false, [], false);
}else if(content === null) {
$('div.modal.fade').modal('hide');
hidePreloader();
$('#usersManagementPortletContainer #InternalServerErrorModal').modal('show');
}
$('#deleteGroupTeamModal').modal('hide');
};
showPreloader();
AJAX_CALL_POST(theData, callBack);
}
function fetchUserRequestRejectionEmailSubject() {
var theData = dataToBeSendViaAJAX("groupId", theGroupId);
theData = dataToBeSendViaAJAX("userRequestRejectionEmailSubject", true, theData);
var callback = function(data){
var objectFromJSON = JSON.parse(data);
rejectRequestEmailSubject = objectFromJSON.userRequestRejectionEmailSubject;
userRequestRejectionEmailAdminsMailsCC = eval(objectFromJSON.userRequestRejectionEmailAdminsMailsCC);
$('.emailSubject').text(rejectRequestEmailSubject);
$('textarea#BCCAdminsEmails').textext()[0].tags().addTags(
userRequestRejectionEmailAdminsMailsCC);
};
AJAX_CALL_POST(theData, callback);
}
function fetchRolesInitial() {
var theData = dataToBeSendViaAJAX("rolesInitial", true, theData);
var callback = function(data){
theList = JSON.parse(data).roleNames;
fetchTeamsInitial();
};
AJAX_CALL_POST(theData, callback);
}
function fetchTeamsInitial() {
var theData = dataToBeSendViaAJAX("teamsInitial", true, theData);
var callback = function(data){
teamList = JSON.parse(data).teamNames;
$.each(teamList, function(index, value){
teamList[index] = value.replace("'", "&#39;");
});
tagEvents(theList, teamList);
tableEvents();
fetchUserRequestRejectionEmailSubject();
hidePreloader();
};
AJAX_CALL_POST(theData, callback);
}

6
src/main/webapp/js/bootstrap.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,151 @@
function tableUtils(){
}
function startPreloader(){
$("#element").introLoader();
}
function stopPreloader(){
$("#element").data('introLoader').stop();
}
function currentUsersObjectForDataTable(
CheckBox, UserName,
Email, FullName,
Roles, Teams, UserId,
RequestDate, ValidationDate,
reqID,
isSelf, RequestDateObject,
ValidationDateObject){
this.CheckBox = CheckBox;
this.UserName = UserName;
this.Email = Email;
this.FullName = FullName;
this.Roles = Roles;
this.Teams = Teams;
this.UserId = UserId;
this.RequestDate = RequestDate;//returnDateInProperForm(RequestDate);
this.ValidationDate = ValidationDate;//returnDateInProperForm(ValidationDate);
this.reqID = reqID;
this.isSelf = isSelf;
if( RequestDateObject === '-' ) {
this.RequestDateObject = new Date(-8640000000000000);
}else
this.RequestDateObject = new Date(RequestDateObject);
if( ValidationDateObject === '-' ) {
this.ValidationDateObject = new Date(-8640000000000000);
}else
this.ValidationDateObject = new Date(ValidationDateObject);
}
function usersRequestObjectForDataTable(
CheckBox, UserName,
Email, FullName,
Message, UserId,
RequestId, RequestDate,
RequestDateObject){
this.CheckBox = CheckBox;
this.UserName = UserName;
this.Email = Email;
this.FullName = FullName;
this.Message = Message;
this.UserId = UserId;
this.RequestDate = RequestDate;//returnDateInProperForm(RequestDate);
this.RequestId = RequestId;
if( RequestDateObject === '-' ) {
this.RequestDateObject = new Date(-8640000000000000);
}else
this.RequestDateObject = new Date(RequestDateObject);
}
function rejectedUsersRequestObjectForDataTable(
CheckBox, UserName,
Email, FullName,
Message, UserId,
RequestId, RequestDate, RejectionDate,
RequestDateObject, RejectionDateObject){
this.CheckBox = CheckBox;
this.UserName = UserName;
this.Email = Email;
this.FullName = FullName;
this.Message = Message;
this.UserId = UserId;
this.RequestId = RequestId;
this.RequestDate = RequestDate;//returnDateInProperForm(RequestDate);
this.RejectionDate = RejectionDate;//returnDateInProperForm(RejectionDate);
if( RequestDateObject === '-' ) {
this.RequestDateObject = new Date(-8640000000000000);
}else
this.RequestDateObject = new Date(RequestDateObject);
if( RejectionDateObject === '-' ) {
this.RejectionDateObject = new Date(-8640000000000000);
}else
this.RejectionDateObject = new Date(RejectionDateObject);
}
function siteTeamsObjectForDataTable(
CheckBox, Name, TeamID,
Description, NumberOfUsers,
CreationDate, LastModificationDate,
CreatorName, siteTeamUsers,
CreationDateObject, LastModificationDateObject){
this.CheckBox = CheckBox;
this.Name = Name;
this.TeamID = TeamID;
this.Description = Description;
this.NumberOfUsers = NumberOfUsers;
this.CreationDate = /*returnDateInProperForm(*/CreationDate;
this.LastModificationDate = /*returnDateInProperForm(*/LastModificationDate;
this.CreatorName = CreatorName;
this.siteTeamUsers = siteTeamUsers;
if( CreationDateObject === '-' ) {
this.CreationDateObject = new Date(-8640000000000000);
}else
this.CreationDateObject = new Date(CreationDateObject);
if( LastModificationDateObject === '-' ) {
this.LastModificationDateObject = new Date(-8640000000000000);
}else
this.LastModificationDateObject = new Date(LastModificationDateObject);
}
function siteTeamsUserObjectForDataTable(
FullName,UserName){
this.FullName = FullName;
this.UserName = UserName;
}
function returnDateInProperForm(ValidationDate){
if(ValidationDate !== null && ValidationDate !== undefined && ValidationDate !== '-'){
var serverDate = new Date(Date.parse(ValidationDate));
var properDate;
var month = serverDate.getMonth()+1;
month = (month.toString().length === 1) ? '0'+month : month;
var day = serverDate.getDate().toString();
day = (day.length === 1) ? '0'+day : day;
var year = serverDate.getFullYear();
properDate = month + '/' + day + '/' + year;
return properDate;
}else return '-';
}
function formatSiteTeamUsers(array){
var newArray = [];
for(var i=0; i<array.length;i++){
if(!$.isEmptyObject(array[i]) && array[i] !== null){
array[i] = "<p>" + array[i].fullName + "</p>" + ",<p>" + array[i].screenName + "</p>";
newArray.push(array[i]);
}
}
return newArray;
}

View File

@ -0,0 +1,192 @@
function displaySiteRolesOnHover(){
$('#usersManagementPortletContainer #CurrentUsersTable_wrapper').on('mouseover', function(e){
var tagName = $(e.target).prop('tagName').toLowerCase();
var parentTagName = $(e.target).parent().prop('tagName').toLowerCase();
var className = $(e.target).attr('class');
if(tagName === "td" || parentTagName === "td" || tagName === "span" || tagName === "ul" || tagName === "li"){
return;
}else {
destroyBubble();
}
});
$('#usersManagementPortletContainer table#CurrentUsersTable, table#usersRequestsTable, table#rejectedUsersRequestsTable')
.off('mouseover').on('mouseover', 'tr td:not(:first) div', function(e){
destroyBubble();
var tagName = $(e.target).prop('tagName').toLowerCase();
if(isEllipsisActive($(this))){
$(this).closest('td').addClass('relative');
var one = $('<span></span>', {
id : 'rolesArrow'
});
var two = $('<span></span>', {
id : 'onHoverUser',
'class' : 'rolesBubbletittle'
});
var three = $('<span></span>', {
id : 'elementBubbletittle'
// text : 'Roles of'
});
var four = $('<span></span>', {
id : 'roles'
});
var five = $('<span></span>', {
id : 'rolesContainer'
});
four.append(three).append(two).append(one);
five.append(four);
$(this).closest('td').append(five);
var text = $(this).text();
var splitted = text.split(',');
var theUl = $('<ul></ul>', {
id : 'rolesList'
});
$('#roles').append(theUl);
for(var string in splitted){
$('#rolesList').append($('<li></li>', {
text : splitted[string]
}));
}
var thIndex = $(this).closest('td').index() + 1;
var tableId = $(this).closest('table').attr('id');
var title = $('#' + tableId.toString() + ' th:nth-child(' + thIndex + ')').text();
$('#onHoverUser').text(title);
}
}).on('click', 'tr td:not(:first-of-type) div', function(){
var table = $(this).closest('table');
var tr = $(this).closest('tr');
var index = $(this).closest('td').index() + 1;
var data = table.dataTable().fnGetData(tr[0]);
$('#userDetailsModal .modal-body').html('');
$('span#userName').text('');
var tableId = table.attr('id');
if(tableId === 'CurrentUsersTable'){
$('#openEditModal').removeClass('hidden');
passUsersDetailsToModalFromCurrentUsersTable(tableId, data);
}else if(tableId === 'usersRequestsTable'){
$('#openEditModal').addClass('hidden');
passUsersDetailsToModalFromUsersRequestsTable(tableId, data);
}
if($(this).closest('table').attr('id') === 'CurrentUsersTable'){
// console.log('The index of the row is: ' + );
var thisTrIndex = $('#CurrentUsersTable tbody tr').index($(this).closest('tr'));
keepTrackOfUsersTableRow = thisTrIndex;
}
});
}
function destroyBubble(){
$('#rolesList').remove();
$('#usersManagementPortletContainer .relative').removeClass('relative');
$('#rolesContainer').remove();
}
function isEllipsisActive(element) {
return_val = false;
var text = element.text();
var html = $('<span></span>',{
text : text,
id : "tmpsmp"
});
$('body').append(html);
if(element.width() < html.width()) {
return_val = true;
}
$('#tmpsmp').remove();
return return_val;
}
function removeDivTag(element){
var text = $($.parseHTML(element)).text();
return text;
}
function passUsersDetailsToModalFromCurrentUsersTable(tableId, data){
var i=0;
$('span#userName').text(removeDivTag(data.UserName));
for(var field in data){
if(i === 0 || i === 6 || i === 9 || i === 11) {
i++;
continue;
} else {
i++;
}
injectDetailsToModal(tableId, i, removeDivTag(data[field]));
}
usersRequestsDetailModaWasOpen = false;
$('#userDetailsModal').modal('show');
}
function passUsersDetailsToModalFromUsersRequestsTable(tableId, data){
var i=0;
$('span#userName').text(removeDivTag(data.UserName));
for(var field in data){
if(i === 0 || i === 5 || i === 7) {
i++;
continue;
} else {
i++;
}
injectDetailsToModal(tableId, i, removeDivTag(data[field]));
}
$('#usersRequestsModal').modal('hide');
usersRequestsDetailModaWasOpen = true;
$('#userDetailsModal').modal('show');
}
function injectDetailsToModal(tableId, thNumber, text){
if(thNumber === 8){
thNumber = 7;
}else if(thNumber === 9){
thNumber = 8;
}else if(thNumber === 11){
thNumber = 9;
}else if(thNumber === 7){
thNumber = 6;
}
var properTitle = $('#' + tableId + ' th:nth-child(' + thNumber + ')').text();
buildRowsForModal(properTitle, text);
}
function buildRowsForModal(properTitle, text){
//Label for attribute must equal the div id
var randomNumber = Math.floor(Math.random() * 2323614) + 1;
var row = $('<div></div>', {
'class' : 'row-fluid'
});
var theId = 'randomId'+randomNumber;
var userField = $('<div></div>', {
id : theId,
text : text,
'class' : 'span9'
});
var label = $('<label></label>', {
'for' : theId,
'class' : 'span3',
text : properTitle + ':'
});
row.append(label).append(userField);
$('#userDetailsModal .modal-body').append(row);
}

View File

@ -0,0 +1,51 @@
$('.modal-footer button#assignUsersToGroupModalBtn').off('click').on('click',function(){
assignUsersToGroupModalBtnPressed = true;
filterUserTableByUsersThatDontBelongInAGroup = true;
$('#CurrentUsersTable_filter label input:first').animate({height:'show'});
$('#CurrentUsersTable_filter .searchDiv').addClass('active');
$('#displayGroupTeamUsersModal').modal('hide');
// An event triggers on modal hidden and drives you to code on line 38
//view $('#displayGroupTeamUsersModal').on('hidden', function(){
// var modalHide = function(){
// $('#displayGroupTeamUsersModal').modal('hide');
// };
//
// var showAfterModalHides = function(){
// setTimeout(function(){
// $('#CurrentUsersTable_filter label').removeClass('hideMe');
// $('#CurrentUsersTable_filter label input').focus();
// $('li#userManagement a.tabTitle').tab('show');//tab('show') applies on data-toggle="tab" element, only
// },700);
// };
//
// var aMhI = afterModalHidesItself(modalHide);
//
// aMhI.done(showAfterModalHides);
});
function afterModalHidesItself(fn, time){
var dfd = $.Deferred();
setTimeout(function(){
dfd.resolve(fn());
}, time || 0);
return dfd.promise();
}
$('#displayGroupTeamUsersModal').on('hidden', function(){
if(assignUsersToGroupModalBtnPressed){
$('#CurrentUsersTable_filter label').removeClass('hideMe');
$('#tagsForWhenYouWantToAssignUsersToGroups').tagsinput('removeAll');
$('#tagsForWhenYouWantToAssignUsersToGroups').tagsinput('add', $.trim($('#teamNameHeader').text()));
var regex = '^((?!' + $.trim($('#teamNameHeader').text()) + ').)*$';
$('table#CurrentUsersTable').DataTable().columns( 5 ).search(regex, true, false).draw();
$('table#CurrentUsersTable th:first').removeClass('sorting_asc');
$('li#userManagement a.tabTitle').tab('show');//tab('show') applies on data-toggle="tab" element, only
assignUsersToGroupModalBtnPressed = false;
}
});

View File

@ -0,0 +1,4 @@
/node_modules/
/src/css/_common.css
tests/*.png
tests/*.jar

View File

@ -0,0 +1,20 @@
Copyright (c) 2011-2012 Alex Gorbatchev
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,132 @@
# Version 2.0 in development
Please note that there's version 2.0 in active development. Checkout the #2.0.0-wip
branch for more fun action! CoffeeScript and full Jasmine coverage - fun stuff!
## About
TextExt is a plugin for jQuery which is designed to provide functionality such
as tag input and autocomplete.
The core design principle behind TextExt is modularity and extensibility. Each
piece of functionality is separated from the main core and can act individually
or together with other plugins.
TextExt's modular design allows you easily turn a standard HTML text input into a
wide range of modern, tailored to your needs input field without bloating your
source code and slowing down your site with the code that you aren't using.
A wide number of plugins are available including Tags, Autocomplete, Filter, Ajax
as well as a few which are purely aesthetic like Focus.
Please refer to the [manual] for the full API documentation and examples.
## Features
* Tags
* Autocomplete
* AJAX loading
* Placeholder text
* Arrow
* ... and much more!
## Example
```html
<textarea id="textarea" rows="1"></textarea>
<script type="text/javascript">
$('#textarea').textext({
plugins : 'tags prompt focus autocomplete ajax arrow',
tagsItems : [ 'Basic', 'JavaScript', 'PHP', 'Scala' ],
prompt : 'Add one...',
ajax : {
url : '/manual/examples/data.json',
dataType : 'json',
cacheResults : true
}
});
</script>
```
## How To Use
The steps to using TextExt are as follows:
1. Specify which plugins you need via the `plugins` option
2. Configure each plugin individually if necessary
3. Enjoy!
## History
### 1.3.1
#### Bug Fixes
* Fixed jQuery 1.8.x compatability ([issue #74](https://github.com/alexgorbatchev/jquery-textext/issues/74)).
### 1.3.0
#### New Features
* Added `tagClick` event to the tags plugin
([issue #13](https://github.com/alexgorbatchev/jquery-textext/pull/13)).
See the [example](http://textextjs.com/manual/examples/tags-click.html).
* Prompt plugin now checks `placeholder` attribute
([issue #8](https://github.com/alexgorbatchev/jquery-textext/pull/8)).
See the [example](http://textextjs.com/manual/examples/prompt-from-placeholder.html).
* Clicking on item in autocomplete will automatically add that item to tags
[#2](https://github.com/alexgorbatchev/jquery-textext/issues/2).
#### Bug Fixes
* Fixes getter methods created when plugins are initialized.
([issue #20](https://github.com/alexgorbatchev/jquery-textext/pull/20)).
* Fixed issues
[#4](https://github.com/alexgorbatchev/jquery-textext/issues/4),
[#4](https://github.com/alexgorbatchev/jquery-textext/issues/5) and
[#10](https://github.com/alexgorbatchev/jquery-textext/issues/5)
related to the mouse issues in the autocomplete dropdown.
* Fixed `textext.[pluginName]()`
([issue #20](https://github.com/alexgorbatchev/jquery-textext/pull/20)).
### 1.2.0
* Added ability to get instances of plugins to call methods on them directy
([issue #6](https://github.com/alexgorbatchev/jquery-textext/issues/6)).
See the [example](http://textextjs.com/manual/examples/tags-adding.html).
### 1.1.0
#### New Features
* Added `autocomplete.render` option for custom rendering. See the
[manual](http://textextjs.com/manual/plugins/autocomplete.html#autocomplete-render) and
[example](http://textextjs.com/manual/examples/autocomplete-with-custom-render.html).
* Added `autocomplete.dropdown.maxHeight` option for setting height of the dropdown. See
[manual](http://textextjs.com/manual/plugins/autocomplete.html#autocomplete-dropdown-maxheight) and
[example](http://textextjs.com/manual/examples/autocomplete-with-custom-render.html).
* Added [Arrow plugin](http://textextjs.com/manual/plugins/arrow.html).
* Switched to MIT license.
#### Bug Fixes
* TextExt core now works with `<input/>` tags.
* Filter plugin now works without Tags.
* Fixed clicking on suggestion in autocomplete dropdown.
### 1.0.0
* Initial release.
## License
The TextExt component is released under the open source MIT. This means that you
can use it any way you want, but I would very much appreciate if you take a minute
and support the project through a donation.
## Contributors
Alphabetically:
* [adamayres](http://github.com/adamayres) (Adam Ayres)
* [alexyoung](http://github.com/alexyoung) (Alex Young)
* [cmer](http://github.com/cmer) (Carl Mercier)
* [deefour](http://github.com/deefour) (Jason Daly)
* [KoernerWS](http://github.com/KoernerWS) (Florian Koerner)
* [sstok](http://github.com/sstok) (Sebastiaan Stok)
[manual]: http://textextjs.com/manual/index.html

View File

@ -0,0 +1,3 @@
#!/bin/bash
../node_modules/.bin/stylus --watch --include ../src/stylus --out ../src/css ../src/stylus/*.styl

View File

@ -0,0 +1,10 @@
{
"name" : "app_name",
"version" : "0.0.0",
"dependencies" : {
"stylus" : "x.x.x",
"soda" : ">= 0.2.x",
"uglify-js" : "x.x.x"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

View File

@ -0,0 +1,29 @@
.text-core {
position: relative;
}
.text-core .text-wrap {
background: #fff;
position: absolute;
}
.text-core .text-wrap textarea,
.text-core .text-wrap input {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
border-radius: 0px;
border: 1px solid #9daccc;
outline: none;
resize: none;
position: absolute;
z-index: 1;
background: none;
overflow: hidden;
margin: 0;
padding: 3px 5px 4px 5px;
white-space: nowrap;
font: 11px "lucida grande", tahoma, verdana, arial, sans-serif;
line-height: 13px;
height: auto;
}

View File

@ -0,0 +1,13 @@
.text-core .text-wrap .text-arrow {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
position: absolute;
top: 0;
right: 0;
width: 22px;
height: 22px;
/* background: url("arrow.png") 50% 50% no-repeat; */
cursor: pointer;
z-index: 2;
}

View File

@ -0,0 +1,35 @@
.text-core .text-wrap .text-dropdown {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 0;
position: absolute;
z-index: 3;
background: #fff;
border: 1px solid #9daccc;
width: 100%;
max-height: 100px;
padding: 1px;
font: 11px "lucida grande", tahoma, verdana, arial, sans-serif;
display: none;
overflow-x: hidden;
overflow-y: auto;
}
.text-core .text-wrap .text-dropdown.text-position-below {
margin-top: 1px;
}
.text-core .text-wrap .text-dropdown.text-position-above {
margin-bottom: 1px;
}
.text-core .text-wrap .text-dropdown .text-list .text-suggestion {
padding: 3px 5px;
cursor: pointer;
}
.text-core .text-wrap .text-dropdown .text-list .text-suggestion em {
font-style: normal;
text-decoration: underline;
}
.text-core .text-wrap .text-dropdown .text-list .text-suggestion.text-selected {
color: #fff;
background: #6d84b4;
}

View File

@ -0,0 +1,13 @@
.text-core .text-wrap .text-clear {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
position: absolute;
top: 0;
right: 14px;
width: 22px;
height: 22px;
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAYUlEQVR42mP4////P1IwA5RBNIBr+Pj5+/9Tlx78v373OYoCkBgIY2gACWr7tP63CO8BanoBlmyfuQssBsIYGtAVLNpwEsMADA0gAFMIw+hOpEwDSU4i2dMkByvJEUcsAABHaALCQIZDrAAAAABJRU5ErkJggg==") 50% 50% no-repeat;
cursor: pointer;
z-index: 2;
}

View File

@ -0,0 +1,12 @@
.text-core .text-wrap .text-focus {
-webkit-box-shadow: 0px 0px 6px #6d84b4;
-moz-box-shadow: 0px 0px 6px #6d84b4;
box-shadow: 0px 0px 6px #6d84b4;
position: absolute;
width: 100%;
height: 100%;
display: none;
}
.text-core .text-wrap .text-focus.text-show-focus {
display: block;
}

View File

@ -0,0 +1,16 @@
.text-core .text-wrap .text-prompt {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
position: absolute;
width: 100%;
height: 100%;
margin: 1px 0 0 2px;
font: 11px "lucida grande", tahoma, verdana, arial, sans-serif;
color: #c0c0c0;
overflow: hidden;
white-space: pre;
}
.text-core .text-wrap .text-prompt.text-hide-prompt {
display: none;
}

View File

@ -0,0 +1,49 @@
.text-core .text-wrap .text-tags {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
position: absolute;
width: 100%;
height: 100%;
padding: 3px 35px 3px 3px;
cursor: text;
}
.text-core .text-wrap .text-tags.text-tags-on-top {
z-index: 2;
}
.text-core .text-wrap .text-tags .text-tag {
float: left;
}
.text-core .text-wrap .text-tags .text-tag .text-button {
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
position: relative;
float: left;
border: 1px solid #9daccc;
background: #e2e6f0;
color: #000;
padding: 0px 17px 0px 3px;
margin: 0 2px 2px 0;
cursor: pointer;
height: 16px;
font: 11px "lucida grande", tahoma, verdana, arial, sans-serif;
}
.text-core .text-wrap .text-tags .text-tag .text-button a.text-remove {
position: absolute;
right: 3px;
top: 2px;
display: block;
width: 11px;
height: 11px;
background: url("close.png") 0 0 no-repeat;
}
.text-core .text-wrap .text-tags .text-tag .text-button a.text-remove:hover {
background-position: 0 -11px;
}
.text-core .text-wrap .text-tags .text-tag .text-button a.text-remove:active {
background-position: 0 -22px;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,354 @@
/**
* jQuery TextExt Plugin
* http://textextjs.com
*
* @version 1.3.1
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
* @license MIT License
*/
(function($)
{
/**
* AJAX plugin is very useful if you want to load list of items from a data point and pass it
* to the Autocomplete or Filter plugins.
*
* Because it meant to be as a helper method for either Autocomplete or Filter plugin, without
* either of these two present AJAX plugin won't do anything.
*
* @author agorbatchev
* @date 2011/08/16
* @id TextExtAjax
*/
function TextExtAjax() {};
$.fn.textext.TextExtAjax = TextExtAjax;
$.fn.textext.addPlugin('ajax', TextExtAjax);
var p = TextExtAjax.prototype,
/**
* AJAX plugin options are grouped under `ajax` when passed to the `$().textext()` function. Be
* mindful that the whole `ajax` object is also passed to jQuery `$.ajax` call which means that
* you can change all jQuery options as well. Please refer to the jQuery documentation on how
* to set url and all other parameters. For example:
*
* $('textarea').textext({
* plugins: 'ajax',
* ajax: {
* url: 'http://...'
* }
* })
*
* **Important**: Because it's necessary to pass options to `jQuery.ajax()` in a single object,
* all jQuery related AJAX options like `url`, `dataType`, etc **must** be within the `ajax` object.
* This is the exception to general rule that TextExt options can be specified in dot or camel case
* notation.
*
* @author agorbatchev
* @date 2011/08/16
* @id TextExtAjax.options
*/
/**
* By default, when user starts typing into the text input, AJAX plugin will start making requests
* to the `url` that you have specified and will pass whatever user has typed so far as a parameter
* named `q`, eg `?q=foo`.
*
* If you wish to change this behaviour, you can pass a function as a value for this option which
* takes one argument (the user input) and should return a key/value object that will be converted
* to the request parameters. For example:
*
* 'dataCallback' : function(query)
* {
* return { 'search' : query };
* }
*
* @name ajax.data.callback
* @default null
* @author agorbatchev
* @date 2011/08/16
* @id TextExtAjax.options.data.callback
*/
OPT_DATA_CALLBACK = 'ajax.data.callback',
/**
* By default, the server end point is constantly being reloaded whenever user changes the value
* in the text input. If you'd rather have the client do result filtering, you can return all
* possible results from the server and cache them on the client by setting this option to `true`.
*
* In such a case, only one call to the server will be made and filtering will be performed on
* the client side using `ItemManager` attached to the core.
*
* @name ajax.data.results
* @default false
* @author agorbatchev
* @date 2011/08/16
* @id TextExtAjax.options.cache.results
*/
OPT_CACHE_RESULTS = 'ajax.cache.results',
/**
* The loading message delay is set in seconds and will specify how long it would take before
* user sees the message. If you don't want user to ever see this message, set the option value
* to `Number.MAX_VALUE`.
*
* @name ajax.loading.delay
* @default 0.5
* @author agorbatchev
* @date 2011/08/16
* @id TextExtAjax.options.loading.delay
*/
OPT_LOADING_DELAY = 'ajax.loading.delay',
/**
* Whenever an AJAX request is made and the server takes more than the number of seconds specified
* in `ajax.loading.delay` to respond, the message specified in this option will appear in the drop
* down.
*
* @name ajax.loading.message
* @default "Loading..."
* @author agorbatchev
* @date 2011/08/17
* @id TextExtAjax.options.loading.message
*/
OPT_LOADING_MESSAGE = 'ajax.loading.message',
/**
* When user is typing in or otherwise changing the value of the text input, it's undesirable to make
* an AJAX request for every keystroke. Instead it's more conservative to send a request every number
* of seconds while user is typing the value. This number of seconds is specified by the `ajax.type.delay`
* option.
*
* @name ajax.type.delay
* @default 0.5
* @author agorbatchev
* @date 2011/08/17
* @id TextExtAjax.options.type.delay
*/
OPT_TYPE_DELAY = 'ajax.type.delay',
/**
* AJAX plugin dispatches or reacts to the following events.
*
* @author agorbatchev
* @date 2011/08/17
* @id TextExtAjax.events
*/
/**
* AJAX plugin reacts to the `getSuggestions` event dispatched by the Autocomplete plugin.
*
* @name getSuggestions
* @author agorbatchev
* @date 2011/08/17
* @id TextExtAjax.events.getSuggestions
*/
/**
* In the event of successful AJAX request, the AJAX coponent dispatches the `setSuggestions`
* event meant to be recieved by the Autocomplete plugin.
*
* @name setSuggestions
* @author agorbatchev
* @date 2011/08/17
* @id TextExtAjax.events.setSuggestions
*/
EVENT_SET_SUGGESTION = 'setSuggestions',
/**
* AJAX plugin dispatches the `showDropdown` event which Autocomplete plugin is expecting.
* This is used to temporarily show the loading message if the AJAX request is taking longer
* than expected.
*
* @name showDropdown
* @author agorbatchev
* @date 2011/08/17
* @id TextExtAjax.events.showDropdown
*/
EVENT_SHOW_DROPDOWN = 'showDropdown',
TIMER_LOADING = 'loading',
DEFAULT_OPTS = {
ajax : {
typeDelay : 0.5,
loadingMessage : 'Loading...',
loadingDelay : 0.5,
cacheResults : false,
dataCallback : null
}
}
;
/**
* Initialization method called by the core during plugin instantiation.
*
* @signature TextExtAjax.init(core)
*
* @param core {TextExt} Instance of the TextExt core class.
*
* @author agorbatchev
* @date 2011/08/17
* @id TextExtAjax.init
*/
p.init = function(core)
{
var self = this;
self.baseInit(core, DEFAULT_OPTS);
self.on({
getSuggestions : self.onGetSuggestions
});
self._suggestions = null;
};
/**
* Performas an async AJAX with specified options.
*
* @signature TextExtAjax.load(query)
*
* @param query {String} Value that user has typed into the text area which is
* presumably the query.
*
* @author agorbatchev
* @date 2011/08/14
* @id TextExtAjax.load
*/
p.load = function(query)
{
var self = this,
dataCallback = self.opts(OPT_DATA_CALLBACK) || function(query) { return { q : query } },
opts
;
opts = $.extend(true,
{
data : dataCallback(query),
success : function(data) { self.onComplete(data, query) },
error : function(jqXHR, message) { console.error(message, query) }
},
self.opts('ajax')
);
$.ajax(opts);
};
/**
* Successful call AJAX handler. Takes the data that came back from AJAX and the
* original query that was used to make the call.
*
* @signature TextExtAjax.onComplete(data, query)
*
* @param data {Object} Data loaded from the server, should be an Array of strings
* by default or whatever data structure your custom `ItemManager` implements.
*
* @param query {String} Query string, ie whatever user has typed in.
*
* @author agorbatchev
* @date 2011/08/14
* @id TextExtAjax.onComplete
*/
p.onComplete = function(data, query)
{
var self = this,
result = data
;
self.dontShowLoading();
// If results are expected to be cached, then we store the original
// data set and return the filtered one based on the original query.
// That means we do filtering on the client side, instead of the
// server side.
if(self.opts(OPT_CACHE_RESULTS) == true)
{
self._suggestions = data;
result = self.itemManager().filter(data, query);
}
self.trigger(EVENT_SET_SUGGESTION, { result : result });
};
/**
* If show loading message timer was started, calling this function disables it,
* otherwise nothing else happens.
*
* @signature TextExtAjax.dontShowLoading()
*
* @author agorbatchev
* @date 2011/08/16
* @id TextExtAjax.dontShowLoading
*/
p.dontShowLoading = function()
{
this.stopTimer(TIMER_LOADING);
};
/**
* Shows message specified in `ajax.loading.message` if loading data takes more than
* number of seconds specified in `ajax.loading.delay`.
*
* @signature TextExtAjax.showLoading()
*
* @author agorbatchev
* @date 2011/08/15
* @id TextExtAjax.showLoading
*/
p.showLoading = function()
{
var self = this;
self.dontShowLoading();
self.startTimer(
TIMER_LOADING,
self.opts(OPT_LOADING_DELAY),
function()
{
self.trigger(EVENT_SHOW_DROPDOWN, function(autocomplete)
{
autocomplete.clearItems();
var node = autocomplete.addDropdownItem(self.opts(OPT_LOADING_MESSAGE));
node.addClass('text-loading');
});
}
);
};
/**
* Reacts to the `getSuggestions` event and begin loading suggestions. If
* `ajax.cache.results` is specified, all calls after the first one will use
* cached data and filter it with the `core.itemManager.filter()`.
*
* @signature TextExtAjax.onGetSuggestions(e, data)
*
* @param e {Object} jQuery event.
* @param data {Object} Data structure passed with the `getSuggestions` event
* which contains the user query, eg `{ query : "..." }`.
*
* @author agorbatchev
* @date 2011/08/15
* @id TextExtAjax.onGetSuggestions
*/
p.onGetSuggestions = function(e, data)
{
var self = this,
suggestions = self._suggestions,
query = (data || {}).query || ''
;
if(suggestions && self.opts(OPT_CACHE_RESULTS) === true)
return self.onComplete(suggestions, query);
self.startTimer(
'ajax',
self.opts(OPT_TYPE_DELAY),
function()
{
self.showLoading();
self.load(query);
}
);
};
})(jQuery);

View File

@ -0,0 +1,106 @@
/**
* jQuery TextExt Plugin
* http://textextjs.com
*
* @version 1.3.1
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
* @license MIT License
*/
(function($)
{
/**
* Displays a dropdown style arrow button. The `TextExtArrow` works together with the
* `TextExtAutocomplete` plugin and whenever clicked tells the autocomplete plugin to
* display its suggestions.
*
* @author agorbatchev
* @date 2011/12/27
* @id TextExtArrow
*/
function TextExtArrow() {};
$.fn.textext.TextExtArrow = TextExtArrow;
$.fn.textext.addPlugin('arrow', TextExtArrow);
var p = TextExtArrow.prototype,
/**
* Arrow plugin only has one option and that is its HTML template. It could be
* changed when passed to the `$().textext()` function. For example:
*
* $('textarea').textext({
* plugins: 'arrow',
* html: {
* arrow: "<span/>"
* }
* })
*
* @author agorbatchev
* @date 2011/12/27
* @id TextExtArrow.options
*/
/**
* HTML source that is used to generate markup required for the arrow.
*
* @name html.arrow
* @default '<div class="text-arrow"/>'
* @author agorbatchev
* @date 2011/12/27
* @id TextExtArrow.options.html.arrow
*/
OPT_HTML_ARROW = 'html.arrow',
DEFAULT_OPTS = {
html : {
arrow : '<div class="text-arrow"/>'
}
}
;
/**
* Initialization method called by the core during plugin instantiation.
*
* @signature TextExtArrow.init(core)
*
* @param core {TextExt} Instance of the TextExt core class.
*
* @author agorbatchev
* @date 2011/12/27
* @id TextExtArrow.init
*/
p.init = function(core)
{
var self = this,
arrow
;
self.baseInit(core, DEFAULT_OPTS);
self._arrow = arrow = $(self.opts(OPT_HTML_ARROW));
self.core().wrapElement().append(arrow);
arrow.bind('click', function(e) { self.onArrowClick(e); });
};
//--------------------------------------------------------------------------------
// Event handlers
/**
* Reacts to the `click` event whenever user clicks the arrow.
*
* @signature TextExtArrow.onArrowClick(e)
*
* @param e {Object} jQuery event.
* @author agorbatchev
* @date 2011/12/27
* @id TextExtArrow.onArrowClick
*/
p.onArrowClick = function(e)
{
this.trigger('toggleDropdown');
this.core().focusInput();
};
//--------------------------------------------------------------------------------
// Core functionality
})(jQuery);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,116 @@
/**
* jQuery TextExt Plugin
* http://alexgorbatchev.com/textext
*
* @version 1.3.1
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
* @license MIT License
*/
(function($)
{
/**
* Displays a clear search button.
*
* @author mreinstein
* @date 2012/02/19
* @id TextExtClear
*/
function TextExtClear() {};
$.fn.textext.TextExtClear = TextExtClear;
$.fn.textext.addPlugin('clear', TextExtClear);
var p = TextExtClear.prototype,
/**
* Clear plugin only has one option and that is its HTML template. It could be
* changed when passed to the `$().textext()` function. For example:
*
* $('textarea').textext({
* plugins: 'clear',
* html: {
* clear: "<span/>"
* }
* })
*
* @author mreinstein
* @date 2012/02/19
* @id TextExtClear.options
*/
/**
* HTML source that is used to generate markup required for the clear.
*
* @name html.clear
* @default '<div class="text-clear"/>'
* @author mreinstein
* @date 2012/02/19
* @id TextExtClear.options.html.clear
*/
OPT_HTML_CLEAR = 'html.clear',
DEFAULT_OPTS = {
html : {
clear : '<div class="text-clear"/>'
}
};
/**
* Initialization method called by the core during plugin instantiation.
*
* @signature TextExtClear.init(core)
*
* @param core {TextExt} Instance of the TextExt core class.
*
* @author agorbatchev
* @date 2011/12/27
* @id TextExtClear.init
*/
p.init = function(core)
{
var self = this,
clear
;
self.baseInit(core, DEFAULT_OPTS);
self._clear = clear = $(self.opts(OPT_HTML_CLEAR));
self.core().wrapElement().append(clear);
clear.bind('click', function(e) { self.onClearClick(e); });
};
//--------------------------------------------------------------------------------
// Event handlers
/**
* Reacts to the `click` event whenever user clicks the clear.
*
* @signature TextExtClear.onClearClick(e)
*
* @param e {Object} jQuery event.
* @author agorbatchev
* @date 2011/12/27
* @id TextExtClear.onClearClick
*/
p.onClearClick = function(e)
{
var self = this;
// check if the tags plugin is present
if(typeof self.core()._plugins.tags != 'undefined')
{
// it is! remove all tags
var elems = self.core()._plugins.tags.tagElements();
for(var i =0; i < elems.length;i++)
{
self.core()._plugins.tags.removeTag($(elems[i]));
}
}
// clear the text from the search area
self.val('');
self.core().getFormData();
};
//--------------------------------------------------------------------------------
// Core functionality
})(jQuery);

View File

@ -0,0 +1,242 @@
/**
* jQuery TextExt Plugin
* http://textextjs.com
*
* @version 1.3.1
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
* @license MIT License
*/
(function($)
{
/**
* The Filter plugin introduces ability to limit input that the text field
* will accept. If the Tags plugin is used, Filter plugin will limit which
* tags it's possible to add.
*
* The list of allowed items can be either specified through the
* options, can come from the Suggestions plugin or be loaded by the Ajax
* plugin. All these plugins have one thing in common -- they
* trigger `setSuggestions` event which the Filter plugin is expecting.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter
*/
function TextExtFilter() {};
$.fn.textext.TextExtFilter = TextExtFilter;
$.fn.textext.addPlugin('filter', TextExtFilter);
var p = TextExtFilter.prototype,
/**
* Filter plugin options are grouped under `filter` when passed to the
* `$().textext()` function. For example:
*
* $('textarea').textext({
* plugins: 'filter',
* filter: {
* items: [ "item1", "item2" ]
* }
* })
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.options
*/
/**
* This is a toggle switch to enable or disable the Filter plugin. The value is checked
* each time at the top level which allows you to toggle this setting on the fly.
*
* @name filter.enabled
* @default true
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.options.enabled
*/
OPT_ENABLED = 'filter.enabled',
/**
* Arra of items that the Filter plugin will allow the Tag plugin to add to the list of
* its resut tags. Each item by default is expected to be a string which default `ItemManager`
* can work with. You can change the item type by supplying custom `ItemManager`.
*
* @name filter.items
* @default null
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.options.items
*/
OPT_ITEMS = 'filter.items',
/**
* Filter plugin dispatches and reacts to the following events.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.events
*/
/**
* Filter plugin reacts to the `isTagAllowed` event triggered by the Tags plugin before
* adding a new tag to the list. If the new tag is among the `items` specified in options,
* then the new tag will be allowed.
*
* @name isTagAllowed
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.events.isTagAllowed
*/
/**
* Filter plugin reacts to the `setSuggestions` event triggered by other plugins like
* Suggestions and Ajax.
*
* However, event if this event is handled and items are passed with it and stored, if `items`
* option was supplied, it will always take precedense.
*
* @name setSuggestions
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.events.setSuggestions
*/
DEFAULT_OPTS = {
filter : {
enabled : true,
items : null
}
}
;
/**
* Initialization method called by the core during plugin instantiation.
*
* @signature TextExtFilter.init(core)
*
* @param core {TextExt} Instance of the TextExt core class.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.init
*/
p.init = function(core)
{
var self = this;
self.baseInit(core, DEFAULT_OPTS);
self.on({
getFormData : self.onGetFormData,
isTagAllowed : self.onIsTagAllowed,
setSuggestions : self.onSetSuggestions
});
self._suggestions = null;
};
//--------------------------------------------------------------------------------
// Core functionality
/**
* Reacts to the [`getFormData`][1] event triggered by the core. Returns data with the
* weight of 200 to be *greater than the Autocomplete plugins* data weights.
* The weights system is covered in greater detail in the [`getFormData`][1] event
* documentation.
*
* This method does nothing if Tags tag is also present.
*
* [1]: /manual/textext.html#getformdata
*
* @signature TextExtFilter.onGetFormData(e, data, keyCode)
*
* @param e {Object} jQuery event.
* @param data {Object} Data object to be populated.
* @param keyCode {Number} Key code that triggered the original update request.
*
* @author agorbatchev
* @date 2011/12/28
* @id TextExtFilter.onGetFormData
* @version 1.1
*/
p.onGetFormData = function(e, data, keyCode)
{
var self = this,
val = self.val(),
inputValue = val,
formValue = ''
;
if(!self.core().hasPlugin('tags'))
{
if(self.isValueAllowed(inputValue))
formValue = val;
data[300] = self.formDataObject(inputValue, formValue);
}
};
/**
* Checks given value if it's present in `filterItems` or was loaded for the Autocomplete
* or by the Suggestions plugins. `value` is compared to each item using `ItemManager.compareItems`
* method which is currently attached to the core. Returns `true` if value is known or
* Filter plugin is disabled.
*
* @signature TextExtFilter.isValueAllowed(value)
*
* @param value {Object} Value to check.
*
* @author agorbatchev
* @date 2011/12/28
* @id TextExtFilter.isValueAllowed
* @version 1.1
*/
p.isValueAllowed = function(value)
{
var self = this,
list = self.opts('filterItems') || self._suggestions || [],
itemManager = self.itemManager(),
result = !self.opts(OPT_ENABLED), // if disabled, should just return true
i
;
for(i = 0; i < list.length && !result; i++)
if(itemManager.compareItems(value, list[i]))
result = true;
return result;
};
/**
* Handles `isTagAllowed` event dispatched by the Tags plugin. If supplied tag is not
* in the `items` list, method sets `result` on the `data` argument to `false`.
*
* @signature TextExtFilter.onIsTagAllowed(e, data)
*
* @param e {Object} jQuery event.
* @param data {Object} Payload in the following format : `{ tag : {Object}, result : {Boolean} }`.
* @author agorbatchev
* @date 2011/08/04
* @id TextExtFilter.onIsTagAllowed
*/
p.onIsTagAllowed = function(e, data)
{
data.result = this.isValueAllowed(data.tag);
};
/**
* Reacts to the `setSuggestions` events and stores supplied suggestions for future use.
*
* @signature TextExtFilter.onSetSuggestions(e, data)
*
* @param e {Object} jQuery event.
* @param data {Object} Payload in the following format : `{ result : {Array} } }`.
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFilter.onSetSuggestions
*/
p.onSetSuggestions = function(e, data)
{
this._suggestions = data.result;
};
})(jQuery);

View File

@ -0,0 +1,174 @@
/**
* jQuery TextExt Plugin
* http://textextjs.com
*
* @version 1.3.1
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
* @license MIT License
*/
(function($)
{
/**
* Focus plugin displays a visual effect whenever user sets focus
* into the text area.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFocus
*/
function TextExtFocus() {};
$.fn.textext.TextExtFocus = TextExtFocus;
$.fn.textext.addPlugin('focus', TextExtFocus);
var p = TextExtFocus.prototype,
/**
* Focus plugin only has one option and that is its HTML template. It could be
* changed when passed to the `$().textext()` function. For example:
*
* $('textarea').textext({
* plugins: 'focus',
* html: {
* focus: "<span/>"
* }
* })
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFocus.options
*/
/**
* HTML source that is used to generate markup required for the focus effect.
*
* @name html.focus
* @default '<div class="text-focus"/>'
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFocus.options.html.focus
*/
OPT_HTML_FOCUS = 'html.focus',
/**
* Focus plugin dispatches or reacts to the following events.
*
* @author agorbatchev
* @date 2011/08/17
* @id TextExtFocus.events
*/
/**
* Focus plugin reacts to the `focus` event and shows the markup generated from
* the `html.focus` option.
*
* @name focus
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFocus.events.focus
*/
/**
* Focus plugin reacts to the `blur` event and hides the effect.
*
* @name blur
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFocus.events.blur
*/
DEFAULT_OPTS = {
html : {
focus : '<div class="text-focus"/>'
}
}
;
/**
* Initialization method called by the core during plugin instantiation.
*
* @signature TextExtFocus.init(core)
*
* @param core {TextExt} Instance of the TextExt core class.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtFocus.init
*/
p.init = function(core)
{
var self = this;
self.baseInit(core, DEFAULT_OPTS);
self.core().wrapElement().append(self.opts(OPT_HTML_FOCUS));
self.on({
blur : self.onBlur,
focus : self.onFocus
});
self._timeoutId = 0;
};
//--------------------------------------------------------------------------------
// Event handlers
/**
* Reacts to the `blur` event and hides the focus effect with a slight delay which
* allows quick refocusing without effect blinking in and out.
*
* @signature TextExtFocus.onBlur(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/08
* @id TextExtFocus.onBlur
*/
p.onBlur = function(e)
{
var self = this;
clearTimeout(self._timeoutId);
self._timeoutId = setTimeout(function()
{
self.getFocus().hide();
},
100);
};
/**
* Reacts to the `focus` event and shows the focus effect.
*
* @signature TextExtFocus.onFocus
*
* @param e {Object} jQuery event.
* @author agorbatchev
* @date 2011/08/08
* @id TextExtFocus.onFocus
*/
p.onFocus = function(e)
{
var self = this;
clearTimeout(self._timeoutId);
self.getFocus().show();
};
//--------------------------------------------------------------------------------
// Core functionality
/**
* Returns focus effect HTML element.
*
* @signature TextExtFocus.getFocus()
*
* @author agorbatchev
* @date 2011/08/08
* @id TextExtFocus.getFocus
*/
p.getFocus = function()
{
return this.core().wrapElement().find('.text-focus');
};
})(jQuery);

View File

@ -0,0 +1,309 @@
/**
* jQuery TextExt Plugin
* http://textextjs.com
*
* @version 1.3.1
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
* @license MIT License
*/
(function($)
{
/**
* Prompt plugin displays a visual user propmpt in the text input area. If user focuses
* on the input, the propt is hidden and only shown again when user focuses on another
* element and text input doesn't have a value.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtPrompt
*/
function TextExtPrompt() {};
$.fn.textext.TextExtPrompt = TextExtPrompt;
$.fn.textext.addPlugin('prompt', TextExtPrompt);
var p = TextExtPrompt.prototype,
CSS_HIDE_PROMPT = 'text-hide-prompt',
/**
* Prompt plugin has options to change the prompt label and its HTML template. The options
* could be changed when passed to the `$().textext()` function. For example:
*
* $('textarea').textext({
* plugins: 'prompt',
* prompt: 'Your email address'
* })
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtPrompt.options
*/
/**
* Prompt message that is displayed to the user whenever there's no value in the input.
*
* @name prompt
* @default 'Awaiting input...'
* @author agorbatchev
* @date 2011/08/18
* @id TextExtPrompt.options.prompt
*/
OPT_PROMPT = 'prompt',
/**
* HTML source that is used to generate markup required for the prompt effect.
*
* @name html.prompt
* @default '<div class="text-prompt"/>'
* @author agorbatchev
* @date 2011/08/18
* @id TextExtPrompt.options.html.prompt
*/
OPT_HTML_PROMPT = 'html.prompt',
/**
* Prompt plugin dispatches or reacts to the following events.
* @id TextExtPrompt.events
*/
/**
* Prompt plugin reacts to the `focus` event and hides the markup generated from
* the `html.prompt` option.
*
* @name focus
* @author agorbatchev
* @date 2011/08/18
* @id TextExtPrompt.events.focus
*/
/**
* Prompt plugin reacts to the `blur` event and shows the prompt back if user
* hasn't entered any value.
*
* @name blur
* @author agorbatchev
* @date 2011/08/18
* @id TextExtPrompt.events.blur
*/
DEFAULT_OPTS = {
prompt : 'Awaiting input...',
html : {
prompt : '<div class="text-prompt"/>'
}
}
;
/**
* Initialization method called by the core during plugin instantiation.
*
* @signature TextExtPrompt.init(core)
*
* @param core {TextExt} Instance of the TextExt core class.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtPrompt.init
*/
p.init = function(core)
{
var self = this,
placeholderKey = 'placeholder',
container,
prompt
;
self.baseInit(core, DEFAULT_OPTS);
container = $(self.opts(OPT_HTML_PROMPT));
$(self).data('container', container);
self.core().wrapElement().append(container);
self.setPrompt(self.opts(OPT_PROMPT));
prompt = core.input().attr(placeholderKey);
if(!prompt)
prompt = self.opts(OPT_PROMPT);
// clear placeholder attribute if set
core.input().attr(placeholderKey, '');
if(prompt)
self.setPrompt(prompt);
if($.trim(self.val()).length > 0)
self.hidePrompt();
self.on({
blur : self.onBlur,
focus : self.onFocus,
postInvalidate : self.onPostInvalidate,
postInit : self.onPostInit
});
};
//--------------------------------------------------------------------------------
// Event handlers
/**
* Reacts to the `postInit` and configures the plugin for initial display.
*
* @signature TextExtPrompt.onPostInit(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/24
* @id TextExtPrompt.onPostInit
*/
p.onPostInit = function(e)
{
this.invalidateBounds();
};
/**
* Reacts to the `postInvalidate` and insures that prompt display remains correct.
*
* @signature TextExtPrompt.onPostInvalidate(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/24
* @id TextExtPrompt.onPostInvalidate
*/
p.onPostInvalidate = function(e)
{
this.invalidateBounds();
};
/**
* Repositions the prompt to make sure it's always at the same place as in the text input carret.
*
* @signature TextExtPrompt.invalidateBounds()
*
* @author agorbatchev
* @date 2011/08/24
* @id TextExtPrompt.invalidateBounds
*/
p.invalidateBounds = function()
{
var self = this,
input = self.input()
;
self.containerElement().css({
paddingLeft : input.css('paddingLeft'),
paddingTop : input.css('paddingTop')
});
};
/**
* Reacts to the `blur` event and shows the prompt effect with a slight delay which
* allows quick refocusing without effect blinking in and out.
*
* The prompt is restored if the text box has no value.
*
* @signature TextExtPrompt.onBlur(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/08
* @id TextExtPrompt.onBlur
*/
p.onBlur = function(e)
{
var self = this;
self.startTimer('prompt', 0.1, function()
{
self.showPrompt();
});
};
/**
* Shows prompt HTML element.
*
* @signature TextExtPrompt.showPrompt()
*
* @author agorbatchev
* @date 2011/08/22
* @id TextExtPrompt.showPrompt
*/
p.showPrompt = function()
{
var self = this,
input = self.input()
;
if($.trim(self.val()).length === 0 && !input.is(':focus'))
self.containerElement().removeClass(CSS_HIDE_PROMPT);
};
/**
* Hides prompt HTML element.
*
* @signature TextExtPrompt.hidePrompt()
*
* @author agorbatchev
* @date 2011/08/22
* @id TextExtPrompt.hidePrompt
*/
p.hidePrompt = function()
{
this.stopTimer('prompt');
this.containerElement().addClass(CSS_HIDE_PROMPT);
};
/**
* Reacts to the `focus` event and hides the prompt effect.
*
* @signature TextExtPrompt.onFocus
*
* @param e {Object} jQuery event.
* @author agorbatchev
* @date 2011/08/08
* @id TextExtPrompt.onFocus
*/
p.onFocus = function(e)
{
this.hidePrompt();
};
//--------------------------------------------------------------------------------
// Core functionality
/**
* Sets the prompt display to the specified string.
*
* @signature TextExtPrompt.setPrompt(str)
*
* @oaram str {String} String that will be displayed in the prompt.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtPrompt.setPrompt
*/
p.setPrompt = function(str)
{
this.containerElement().text(str);
};
/**
* Returns prompt effect HTML element.
*
* @signature TextExtPrompt.containerElement()
*
* @author agorbatchev
* @date 2011/08/08
* @id TextExtPrompt.containerElement
*/
p.containerElement = function()
{
return $(this).data('container');
};
})(jQuery);

View File

@ -0,0 +1,175 @@
/**
* jQuery TextExt Plugin
* http://textextjs.com
*
* @version 1.3.1
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
* @license MIT License
*/
(function($)
{
/**
* Suggestions plugin allows to easily specify the list of suggestion items that the
* Autocomplete plugin would present to the user.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtSuggestions
*/
function TextExtSuggestions() {};
$.fn.textext.TextExtSuggestions = TextExtSuggestions;
$.fn.textext.addPlugin('suggestions', TextExtSuggestions);
var p = TextExtSuggestions.prototype,
/**
* Suggestions plugin only has one option and that is to set suggestion items. It could be
* changed when passed to the `$().textext()` function. For example:
*
* $('textarea').textext({
* plugins: 'suggestions',
* suggestions: [ "item1", "item2" ]
* })
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtSuggestions.options
*/
/**
* List of items that Autocomplete plugin would display in the dropdown.
*
* @name suggestions
* @default null
* @author agorbatchev
* @date 2011/08/18
* @id TextExtSuggestions.options.suggestions
*/
OPT_SUGGESTIONS = 'suggestions',
/**
* Suggestions plugin dispatches or reacts to the following events.
*
* @author agorbatchev
* @date 2011/08/17
* @id TextExtSuggestions.events
*/
/**
* Suggestions plugin reacts to the `getSuggestions` event and returns `suggestions` items
* from the options.
*
* @name getSuggestions
* @author agorbatchev
* @date 2011/08/19
* @id TextExtSuggestions.events.getSuggestions
*/
/**
* Suggestions plugin triggers the `setSuggestions` event to pass its own list of `Suggestions`
* to the Autocomplete plugin.
*
* @name setSuggestions
* @author agorbatchev
* @date 2011/08/19
* @id TextExtSuggestions.events.setSuggestions
*/
/**
* Suggestions plugin reacts to the `postInit` event to pass its list of `suggestions` to the
* Autocomplete right away.
*
* @name postInit
* @author agorbatchev
* @date 2011/08/19
* @id TextExtSuggestions.events.postInit
*/
DEFAULT_OPTS = {
suggestions : null
}
;
/**
* Initialization method called by the core during plugin instantiation.
*
* @signature TextExtSuggestions.init(core)
*
* @param core {TextExt} Instance of the TextExt core class.
*
* @author agorbatchev
* @date 2011/08/18
* @id TextExtSuggestions.init
*/
p.init = function(core)
{
var self = this;
self.baseInit(core, DEFAULT_OPTS);
self.on({
getSuggestions : self.onGetSuggestions,
postInit : self.onPostInit
});
};
/**
* Triggers `setSuggestions` and passes supplied suggestions to the Autocomplete plugin.
*
* @signature TextExtSuggestions.setSuggestions(suggestions, showHideDropdown)
*
* @param suggestions {Array} List of suggestions. With the default `ItemManager` it should
* be a list of strings.
* @param showHideDropdown {Boolean} If it's undesirable to show the dropdown right after
* suggestions are set, `false` should be passed for this argument.
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtSuggestions.setSuggestions
*/
p.setSuggestions = function(suggestions, showHideDropdown)
{
this.trigger('setSuggestions', { result : suggestions, showHideDropdown : showHideDropdown != false });
};
/**
* Reacts to the `postInit` event and triggers `setSuggestions` event to set suggestions list
* right after initialization.
*
* @signature TextExtSuggestions.onPostInit(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtSuggestions.onPostInit
*/
p.onPostInit = function(e)
{
var self = this;
self.setSuggestions(self.opts(OPT_SUGGESTIONS), false);
};
/**
* Reacts to the `getSuggestions` event and triggers `setSuggestions` event with the list
* of `suggestions` specified in the options.
*
* @signature TextExtSuggestions.onGetSuggestions(e, data)
*
* @param e {Object} jQuery event.
* @param data {Object} Payload from the `getSuggestions` event with the user query, eg `{ query: {String} }`.
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtSuggestions.onGetSuggestions
*/
p.onGetSuggestions = function(e, data)
{
var self = this,
suggestions = self.opts(OPT_SUGGESTIONS)
;
suggestions.sort();
self.setSuggestions(self.itemManager().filter(suggestions, data.query));
};
})(jQuery);

View File

@ -0,0 +1,698 @@
/**
* jQuery TextExt Plugin
* http://textextjs.com
*
* @version 1.3.1
* @copyright Copyright (C) 2011 Alex Gorbatchev. All rights reserved.
* @license MIT License
*/
(function($)
{
/**
* Tags plugin brings in the traditional tag functionality where user can assemble and
* edit list of tags. Tags plugin works especially well together with Autocomplete, Filter,
* Suggestions and Ajax plugins to provide full spectrum of features. It can also work on
* its own and just do one thing -- tags.
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags
*/
function TextExtTags() {};
$.fn.textext.TextExtTags = TextExtTags;
$.fn.textext.addPlugin('tags', TextExtTags);
var p = TextExtTags.prototype,
CSS_DOT = '.',
CSS_TAGS_ON_TOP = 'text-tags-on-top',
CSS_DOT_TAGS_ON_TOP = CSS_DOT + CSS_TAGS_ON_TOP,
CSS_TAG = 'text-tag',
CSS_DOT_TAG = CSS_DOT + CSS_TAG,
CSS_TAGS = 'text-tags',
CSS_DOT_TAGS = CSS_DOT + CSS_TAGS,
CSS_LABEL = 'text-label',
CSS_DOT_LABEL = CSS_DOT + CSS_LABEL,
CSS_REMOVE = 'text-remove',
CSS_DOT_REMOVE = CSS_DOT + CSS_REMOVE,
/**
* Tags plugin options are grouped under `tags` when passed to the
* `$().textext()` function. For example:
*
* $('textarea').textext({
* plugins: 'tags',
* tags: {
* items: [ "tag1", "tag2" ]
* }
* })
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.options
*/
/**
* This is a toggle switch to enable or disable the Tags plugin. The value is checked
* each time at the top level which allows you to toggle this setting on the fly.
*
* @name tags.enabled
* @default true
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.options.tags.enabled
*/
OPT_ENABLED = 'tags.enabled',
/**
* Allows to specify tags which will be added to the input by default upon initialization.
* Each item in the array must be of the type that current `ItemManager` can understand.
* Default type is `String`.
*
* @name tags.items
* @default null
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.options.tags.items
*/
OPT_ITEMS = 'tags.items',
/**
* HTML source that is used to generate a single tag.
*
* @name html.tag
* @default '<div class="text-tags"/>'
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.options.html.tag
*/
OPT_HTML_TAG = 'html.tag',
/**
* HTML source that is used to generate container for the tags.
*
* @name html.tags
* @default '<div class="text-tag"><div class="text-button"><span class="text-label"/><a class="text-remove"/></div></div>'
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.options.html.tags
*/
OPT_HTML_TAGS = 'html.tags',
/**
* Tags plugin dispatches or reacts to the following events.
*
* @author agorbatchev
* @date 2011/08/17
* @id TextExtTags.events
*/
/**
* Tags plugin triggers the `isTagAllowed` event before adding each tag to the tag list. Other plugins have
* an opportunity to interrupt this by setting `result` of the second argument to `false`. For example:
*
* $('textarea').textext({...}).bind('isTagAllowed', function(e, data)
* {
* if(data.tag === 'foo')
* data.result = false;
* })
*
* The second argument `data` has the following format: `{ tag : {Object}, result : {Boolean} }`. `tag`
* property is in the format that the current `ItemManager` can understand.
*
* @name isTagAllowed
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.events.isTagAllowed
*/
EVENT_IS_TAG_ALLOWED = 'isTagAllowed',
/**
* Tags plugin triggers the `tagClick` event when user clicks on one of the tags. This allows to process
* the click and potentially change the value of the tag (for example in case of user feedback).
*
* $('textarea').textext({...}).bind('tagClick', function(e, tag, value, callback)
* {
* var newValue = window.prompt('New value', value);
* if(newValue)
* callback(newValue, true);
* })
*
* Callback argument has the following signature:
*
* function(newValue, refocus)
* {
* ...
* }
*
* Please check out [example](/manual/examples/tags-changing.html).
*
* @name tagClick
* @version 1.3.0
* @author s.stok
* @date 2011/01/23
* @id TextExtTags.events.tagClick
*/
EVENT_TAG_CLICK = 'tagClick',
DEFAULT_OPTS = {
tags : {
enabled : true,
items : null
},
html : {
tags : '<div class="text-tags"/>',
tag : '<div class="text-tag"><div class="text-button"><span class="text-label"/><a class="text-remove"/></div></div>'
}
}
;
/**
* Initialization method called by the core during plugin instantiation.
*
* @signature TextExtTags.init(core)
*
* @param core {TextExt} Instance of the TextExt core class.
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.init
*/
p.init = function(core)
{
this.baseInit(core, DEFAULT_OPTS);
var self = this,
input = self.input(),
container
;
if(self.opts(OPT_ENABLED))
{
container = $(self.opts(OPT_HTML_TAGS));
input.after(container);
$(self).data('container', container);
self.on({
enterKeyPress : self.onEnterKeyPress,
backspaceKeyDown : self.onBackspaceKeyDown,
preInvalidate : self.onPreInvalidate,
postInit : self.onPostInit,
getFormData : self.onGetFormData
});
self.on(container, {
click : self.onClick,
mousemove : self.onContainerMouseMove
});
self.on(input, {
mousemove : self.onInputMouseMove
});
}
self._originalPadding = {
left : parseInt(input.css('paddingLeft') || 0),
top : parseInt(input.css('paddingTop') || 0)
};
self._paddingBox = {
left : 0,
top : 0
};
self.updateFormCache();
};
/**
* Returns HTML element in which all tag HTML elements are residing.
*
* @signature TextExtTags.containerElement()
*
* @author agorbatchev
* @date 2011/08/15
* @id TextExtTags.containerElement
*/
p.containerElement = function()
{
return $(this).data('container');
};
//--------------------------------------------------------------------------------
// Event handlers
/**
* Reacts to the `postInit` event triggered by the core and sets default tags
* if any were specified.
*
* @signature TextExtTags.onPostInit(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/09
* @id TextExtTags.onPostInit
*/
p.onPostInit = function(e)
{
var self = this;
self.addTags(self.opts(OPT_ITEMS));
};
/**
* Reacts to the [`getFormData`][1] event triggered by the core. Returns data with the
* weight of 200 to be *greater than the Autocomplete plugin* data weight. The weights
* system is covered in greater detail in the [`getFormData`][1] event documentation.
*
* [1]: /manual/textext.html#getformdata
*
* @signature TextExtTags.onGetFormData(e, data, keyCode)
*
* @param e {Object} jQuery event.
* @param data {Object} Data object to be populated.
* @param keyCode {Number} Key code that triggered the original update request.
*
* @author agorbatchev
* @date 2011/08/22
* @id TextExtTags.onGetFormData
*/
p.onGetFormData = function(e, data, keyCode)
{
var self = this,
inputValue = keyCode === 13 ? '' : self.val(),
formValue = self._formData
;
data[200] = self.formDataObject(inputValue, formValue);
};
/**
* Returns initialization priority of the Tags plugin which is expected to be
* *less than the Autocomplete plugin* because of the dependencies. The value is
* 100.
*
* @signature TextExtTags.initPriority()
*
* @author agorbatchev
* @date 2011/08/22
* @id TextExtTags.initPriority
*/
p.initPriority = function()
{
return 100;
};
/**
* Reacts to user moving mouse over the text area when cursor is over the text
* and not over the tags. Whenever mouse cursor is over the area covered by
* tags, the tags container is flipped to be on top of the text area which
* makes all tags functional with the mouse.
*
* @signature TextExtTags.onInputMouseMove(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/08
* @id TextExtTags.onInputMouseMove
*/
p.onInputMouseMove = function(e)
{
this.toggleZIndex(e);
};
/**
* Reacts to user moving mouse over the tags. Whenever the cursor moves out
* of the tags and back into where the text input is happening visually,
* the tags container is sent back under the text area which allows user
* to interact with the text using mouse cursor as expected.
*
* @signature TextExtTags.onContainerMouseMove(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/08
* @id TextExtTags.onContainerMouseMove
*/
p.onContainerMouseMove = function(e)
{
this.toggleZIndex(e);
};
/**
* Reacts to the `backspaceKeyDown` event. When backspace key is pressed in an empty text field,
* deletes last tag from the list.
*
* @signature TextExtTags.onBackspaceKeyDown(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/02
* @id TextExtTags.onBackspaceKeyDown
*/
p.onBackspaceKeyDown = function(e)
{
var self = this,
lastTag = self.tagElements().last()
;
if(self.val().length == 0)
self.removeTag(lastTag);
};
/**
* Reacts to the `preInvalidate` event and updates the input box to look like the tags are
* positioned inside it.
*
* @signature TextExtTags.onPreInvalidate(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.onPreInvalidate
*/
p.onPreInvalidate = function(e)
{
var self = this,
lastTag = self.tagElements().last(),
pos = lastTag.position()
;
if(lastTag.length > 0)
pos.left += lastTag.innerWidth();
else
pos = self._originalPadding;
self._paddingBox = pos;
self.input().css({
paddingLeft : pos.left,
paddingTop : pos.top
});
};
/**
* Reacts to the mouse `click` event.
*
* @signature TextExtTags.onClick(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.onClick
*/
p.onClick = function(e)
{
var self = this,
core = self.core(),
source = $(e.target),
focus = 0,
tag
;
if(source.is(CSS_DOT_TAGS))
{
focus = 1;
}
else if(source.is(CSS_DOT_REMOVE))
{
self.removeTag(source.parents(CSS_DOT_TAG + ':first'));
focus = 1;
}
else if(source.is(CSS_DOT_LABEL))
{
tag = source.parents(CSS_DOT_TAG + ':first');
self.trigger(EVENT_TAG_CLICK, tag, tag.data(CSS_TAG), tagClickCallback);
}
function tagClickCallback(newValue, refocus)
{
tag.data(CSS_TAG, newValue);
tag.find(CSS_DOT_LABEL).text(self.itemManager().itemToString(newValue));
self.updateFormCache();
core.getFormData();
core.invalidateBounds();
if(refocus)
core.focusInput();
}
if(focus)
core.focusInput();
};
/**
* Reacts to the `enterKeyPress` event and adds whatever is currently in the text input
* as a new tag. Triggers `isTagAllowed` to check if the tag could be added first.
*
* @signature TextExtTags.onEnterKeyPress(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.onEnterKeyPress
*/
p.onEnterKeyPress = function(e)
{
var self = this,
val = self.val(),
tag = self.itemManager().stringToItem(val)
;
if(self.isTagAllowed(tag))
{
self.addTags([ tag ]);
// refocus the textarea just in case it lost the focus
self.core().focusInput();
}
};
//--------------------------------------------------------------------------------
// Core functionality
/**
* Creates a cache object with all the tags currently added which will be returned
* in the `onGetFormData` handler.
*
* @signature TextExtTags.updateFormCache()
*
* @author agorbatchev
* @date 2011/08/09
* @id TextExtTags.updateFormCache
*/
p.updateFormCache = function()
{
var self = this,
result = []
;
self.tagElements().each(function()
{
result.push($(this).data(CSS_TAG));
});
// cache the results to be used in the onGetFormData
self._formData = result;
};
/**
* Toggles tag container to be on top of the text area or under based on where
* the mouse cursor is located. When cursor is above the text input and out of
* any of the tags, the tags container is sent under the text area. If cursor
* is over any of the tags, the tag container is brought to be over the text
* area.
*
* @signature TextExtTags.toggleZIndex(e)
*
* @param e {Object} jQuery event.
*
* @author agorbatchev
* @date 2011/08/08
* @id TextExtTags.toggleZIndex
*/
p.toggleZIndex = function(e)
{
var self = this,
offset = self.input().offset(),
mouseX = e.clientX - offset.left,
mouseY = e.clientY - offset.top,
box = self._paddingBox,
container = self.containerElement(),
isOnTop = container.is(CSS_DOT_TAGS_ON_TOP),
isMouseOverText = mouseX > box.left && mouseY > box.top
;
if(!isOnTop && !isMouseOverText || isOnTop && isMouseOverText)
container[(!isOnTop ? 'add' : 'remove') + 'Class'](CSS_TAGS_ON_TOP);
};
/**
* Returns all tag HTML elements.
*
* @signature TextExtTags.tagElements()
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.tagElements
*/
p.tagElements = function()
{
return this.containerElement().find(CSS_DOT_TAG);
};
/**
* Wrapper around the `isTagAllowed` event which triggers it and returns `true`
* if `result` property of the second argument remains `true`.
*
* @signature TextExtTags.isTagAllowed(tag)
*
* @param tag {Object} Tag object that the current `ItemManager` can understand.
* Default is `String`.
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.isTagAllowed
*/
p.isTagAllowed = function(tag)
{
var opts = { tag : tag, result : true };
this.trigger(EVENT_IS_TAG_ALLOWED, opts);
return opts.result === true;
};
/**
* Adds specified tags to the tag list. Triggers `isTagAllowed` event for each tag
* to insure that it could be added. Calls `TextExt.getFormData()` to refresh the data.
*
* @signature TextExtTags.addTags(tags)
*
* @param tags {Array} List of tags that current `ItemManager` can understand. Default
* is `String`.
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.addTags
*/
p.addTags = function(tags)
{
if(!tags || tags.length == 0)
return;
var self = this,
core = self.core(),
container = self.containerElement(),
i, tag
;
for(i = 0; i < tags.length; i++)
{
tag = tags[i];
if(tag && self.isTagAllowed(tag))
container.append(self.renderTag(tag));
}
self.updateFormCache();
core.getFormData();
core.invalidateBounds();
};
/**
* Returns HTML element for the specified tag.
*
* @signature TextExtTags.getTagElement(tag)
*
* @param tag {Object} Tag object in the format that current `ItemManager` can understand.
* Default is `String`.
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.getTagElement
*/
p.getTagElement = function(tag)
{
var self = this,
list = self.tagElements(),
i, item
;
for(i = 0; i < list.length; i++) {
item = $(list[i]);
if(self.itemManager().compareItems(item.data(CSS_TAG), tag))
return item;
}
return null;
};
/**
* Removes specified tag from the list. Calls `TextExt.getFormData()` to refresh the data.
*
* @signature TextExtTags.removeTag(tag)
*
* @param tag {Object} Tag object in the format that current `ItemManager` can understand.
* Default is `String`.
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.removeTag
*/
p.removeTag = function(tag)
{
var self = this,
core = self.core(),
element
;
if(tag instanceof $)
{
element = tag;
tag = tag.data(CSS_TAG);
}
else
{
element = self.getTagElement(tag);
if (element === null) {
//Tag does not exist
return;
}
}
element.remove();
self.updateFormCache();
core.getFormData();
core.invalidateBounds();
};
/**
* Creates and returns new HTML element from the source code specified in the `html.tag` option.
*
* @signature TextExtTags.renderTag(tag)
*
* @param tag {Object} Tag object in the format that current `ItemManager` can understand.
* Default is `String`.
*
* @author agorbatchev
* @date 2011/08/19
* @id TextExtTags.renderTag
*/
p.renderTag = function(tag)
{
var self = this,
node = $(self.opts(OPT_HTML_TAG))
;
node.find('.text-label').text(self.itemManager().itemToString(tag));
node.data(CSS_TAG, tag);
return node;
};
})(jQuery);

View File

@ -0,0 +1,20 @@
$close = 'close.png'
$border = #9DACCC
$selected = #6D84B4
$prefix = 'text-'
$font = 11px "lucida grande",tahoma,verdana,arial,sans-serif
vendor(prop, args)
-webkit-{prop} : args
-moz-{prop} : args
{prop} : args
border_box()
vendor('box-sizing', border-box)
shadow(args...)
vendor('box-shadow', args)
round_corners(args...)
vendor('border-radius', args)

View File

@ -0,0 +1,26 @@
@import '_common'
.{$prefix}core
position : relative
.{$prefix}wrap
position : absolute
background : #fff
textarea, input
border_box()
round_corners(0px)
border : 1px solid $border
outline : none
resize : none
position : absolute
z-index : 1
background : none
overflow : hidden
margin : 0
padding : 3px 5px 4px 5px
white-space : nowrap
font : $font
line-height : 13px
height : auto

View File

@ -0,0 +1,14 @@
@import '_common'
.{$prefix}core .{$prefix}wrap
.{$prefix}arrow
border_box()
position : absolute
top : 0
right : 0
width : 22px
height : 22px
background : url(arrow.png) 50% 50% no-repeat;
cursor : pointer
z-index : 2

View File

@ -0,0 +1,36 @@
@import '_common'
.{$prefix}core .{$prefix}wrap .{$prefix}dropdown
border_box()
padding : 0
position : absolute
z-index : 3
background : #fff
border : 1px solid $border
width : 100%
max-height : 100px
padding : 1px
font : $font
display : none
overflow-x : hidden
overflow-y : auto
&.{$prefix}position-below
margin-top: 1px;
&.{$prefix}position-above
margin-bottom: 1px;
.{$prefix}list
.{$prefix}suggestion
padding : 3px 5px
cursor : pointer
em
font-style : normal
text-decoration : underline
&.{$prefix}selected
color : #fff
background : $selected

View File

@ -0,0 +1,13 @@
@import '_common'
.{$prefix}core .{$prefix}wrap
.{$prefix}focus
vendor('box-shadow', 0px 0px 6px $selected)
position : absolute
width : 100%
height : 100%
display : none
&.{$prefix}show-focus
display : block

View File

@ -0,0 +1,17 @@
@import '_common'
.{$prefix}core .{$prefix}wrap
.{$prefix}prompt
border_box()
position : absolute
width : 100%
height : 100%
margin : 1px 0 0 2px
font : $font
color : silver
overflow : hidden
white-space : pre
&.{$prefix}hide-prompt
display : none

View File

@ -0,0 +1,45 @@
@import '_common'
.{$prefix}core .{$prefix}wrap .{$prefix}tags
border_box()
position : absolute
width : 100%
height : 100%
padding : 3px 35px 3px 3px
cursor : text
&.{$prefix}tags-on-top
z-index : 2
.{$prefix}tag
float : left
.{$prefix}button
round_corners(2px)
border_box()
position : relative
float : left
border : 1px solid #9DACCC
background : #E2E6F0
color : #000
padding : 0px 17px 0px 3px
margin : 0 2px 2px 0
cursor : pointer
height : 16px
font : $font
a.{$prefix}remove
position : absolute
right : 3px
top : 2px
display : block
width : 11px
height : 11px
background : url($close) 0 0 no-repeat
&:hover
background-position: 0 -11px
&:active
background-position: 0 -22px

View File

@ -0,0 +1,416 @@
var soda = require('soda');
var prefix = 'css=.text-core > .text-wrap > ',
focus = prefix + '.text-focus',
textarea = prefix + 'textarea',
dropdown = prefix + '.text-dropdown',
prompt = prefix + '.text-prompt'
;
var DOWN = 40,
UP = 38,
ESC = 27,
ENTER = 13
;
function log(cmd, args)
{
args = Array.prototype.slice.apply(arguments);
cmd = args.shift();
console.log(' \x1b[33m%s\x1b[0m%s', cmd, args.length > 0 ? ': ' + args.join(', ') : '');
};
function echo(msg)
{
log('echo', msg);
};
function verifyTextExt(browser)
{
browser.assertElementPresent(textarea);
};
function keyPress(charCode)
{
return function(browser)
{
browser
.keyDown(textarea, '\\' + charCode)
.keyUp(textarea, '\\' + charCode)
;
};
};
function backspace(browser)
{
browser.and(keyPress(8));
};
function tagXPath(value)
{
return '//div[contains(@class, "text-core")]//div[contains(@class, "text-tags")]//span[text()="' + value + '"]/../..';
};
function suggestionsXPath(selected, index)
{
index = index != null ? '[' + (index + 1) + ']' : '';
selected = selected == true ? '[contains(@class, "text-selected")]' : '';
return '//div[contains(@class, "text-core")]//div[contains(@class, "text-dropdown")]//div[contains(@class, "text-suggestion")]' + index + selected;
};
function assertSuggestionItem(test)
{
return function(browser) { browser.assertVisible(suggestionsXPath() + '//span[text()="Basic"]') };
};
function assertOutput(value)
{
return function(browser) { browser.assertElementPresent('//pre[@id="output"][contains(text(), \'' + value + '\')]') };
};
function assertNotOutput(value)
{
return function(browser) { browser.assertElementNotPresent('//pre[@id="output"][contains(text(), \'' + value + '\')]') };
};
function assertTagPresent(value)
{
return function(browser) { browser.assertElementPresent(tagXPath(value)) };
};
function assertTagNotPresent(value)
{
return function(browser) { browser.assertElementNotPresent(tagXPath(value)) };
};
function enterKey(browser)
{
browser.and(keyPress(13));
};
function typeTag(value)
{
return function(browser)
{
browser
.type(textarea, '')
.typeKeys(textarea, value)
.and(enterKey)
;
};
};
function clearInput(browser)
{
browser
.and(keyPress(27))
.type(textarea, '')
;
};
function focusInput(browser)
{
browser.fireEvent(textarea, 'focus');
};
function defaultWrap(value)
{
return value;
};
function typeAndValidateTag(value, wrap)
{
wrap = wrap || defaultWrap;
return function(browser)
{
browser
.and(typeTag(value))
.and(assertTagPresent(wrap(value)))
;
};
};
function closeTag(value, wrap)
{
wrap = wrap || defaultWrap;
return function(browser)
{
browser
.click(tagXPath(wrap(value)) + '//a[@class="text-remove"]')
.and(assertTagNotPresent(wrap(value)))
;
};
};
function screenshot(name)
{
return function(browser)
{
// browser.captureEntirePageScreenshot(__dirname + '/' + name + ' (' + (new Date().toUTCString().replace(/:/g, '.')) + ').png');
};
};
function createBrowser()
{
return soda.createClient({
host : 'localhost',
port : 4444,
url : 'http://localhost:4000',
browser : 'firefox'
});
};
function testAjaxFunctionality()
{
return function(browser)
{
browser
.and(focusInput)
.typeKeys(textarea, 'ba')
.waitForVisible(dropdown)
.and(assertSuggestionItem('Basic'))
;
}
};
function testArrowFunctionality()
{
var arrow = prefix + '.text-arrow';
return function(browser)
{
browser
// open/close test
.click(arrow)
.waitForVisible(dropdown)
.click(arrow)
.waitForNotVisible(dropdown)
// open and click on item
.click(arrow)
.waitForVisible(dropdown)
.click(suggestionsXPath(false, 0))
.waitForNotVisible(dropdown)
.and(assertOutput('Basic'))
.assertValue(textarea, 'Basic')
.assertNotVisible(prompt)
;
};
};
function testFilterFunctionality()
{
return function(browser)
{
browser
.and(focusInput)
.and(typeTag('hello'))
.and(assertTagNotPresent('hello'))
.and(assertNotOutput('hello'))
.and(typeTag('world'))
.and(assertTagNotPresent('world'))
.and(assertNotOutput('world'))
;
};
};
function testTagFunctionality(opts)
{
opts = opts || {};
var labelWrap = opts.label,
objectWrap = opts.object
;
function output()
{
var list = Array.prototype.slice.apply(arguments);
if(objectWrap)
for(var i = 0; i < list.length; i++)
list[i] = objectWrap(list[i]);
var match = JSON.stringify(list).replace(/^\[|\]$/g, '');
return assertOutput(match);
};
return function(browser)
{
browser
.and(focusInput)
.and(typeAndValidateTag('hello', labelWrap))
.and(output('hello'))
.and(typeAndValidateTag('world', labelWrap))
.and(output('hello','world'))
.and(typeAndValidateTag('word1', labelWrap))
.and(output('hello','world','word1'))
.and(typeAndValidateTag('word2', labelWrap))
.and(output('hello','world','word1','word2'))
.and(typeAndValidateTag('word3', labelWrap))
.and(output('hello','world','word1','word2','word3'))
.and(closeTag('word2', labelWrap))
.and(output('hello','world','word1','word3'))
.and(closeTag('word1', labelWrap))
.and(output('hello','world','word3'))
.and(closeTag('word3', labelWrap))
.and(output('hello','world'))
// backspace
.and(backspace)
.and(assertTagNotPresent('world'))
;
};
};
function testPromptFunctionality(secondary)
{
return function(browser)
{
browser
.assertVisible(prompt)
.and(focusInput)
.and(secondary)
.assertNotVisible(prompt)
;
};
};
function testAutocompleteFunctionality(finalAssert)
{
finalAssert = finalAssert || function(browser)
{
browser
.assertValue(textarea, 'OCAML')
.and(assertOutput('OCAML'))
;
};
return function(browser)
{
browser
.click(textarea)
.and(clearInput)
// activate the dropdown
.and(keyPress(DOWN))
.assertVisible(dropdown)
.assertVisible(suggestionsXPath(true, 0))
// go to the second item
.and(keyPress(DOWN))
.assertElementNotPresent(suggestionsXPath(true, 0))
.assertVisible(suggestionsXPath(true, 1))
// go to the third item
.and(keyPress(DOWN))
.assertElementNotPresent(suggestionsXPath(true, 1))
.assertVisible(suggestionsXPath(true, 2))
// go back up to the second item
.and(keyPress(UP))
.assertElementNotPresent(suggestionsXPath(true, 2))
.assertVisible(suggestionsXPath(true, 1))
// go back up to the first item
.and(keyPress(UP))
.assertElementNotPresent(suggestionsXPath(true, 1))
.assertVisible(suggestionsXPath(true, 0))
// test the mouse click
.click(suggestionsXPath(true, 0))
.waitForNotVisible(dropdown)
.assertValue(textarea, 'Basic')
.and(assertOutput('Basic'))
.and(clearInput)
.typeKeys(textarea, 'oca')
.waitForVisible(dropdown)
.assertVisible(suggestionsXPath(true, 0))
.and(enterKey)
.assertNotVisible(dropdown)
.and(finalAssert)
;
};
};
function testPlainInputFunctionality()
{
return function(browser)
{
browser
.typeKeys(textarea, 'Hello world')
// for some reason without the enter key last letter doesn't trigger events...
// pressing the enter key puts the last letter through... odd??
.and(enterKey)
.and(assertOutput('"Hello world"'))
;
};
};
function runModule(run)
{
var browser = createBrowser();
browser.on('command', log);
browser.chain.session()
.windowMaximize()
.and(run)
.testComplete()
.end(function(err)
{
if (err) throw err;
echo('ALL DONE');
})
;
};
module.exports = {
log : log,
echo : echo,
clearInput : clearInput,
focusInput : focusInput,
backspace : backspace,
keyPress : keyPress,
verifyTextExt : verifyTextExt,
tagXPath : tagXPath,
suggestionsXPath : suggestionsXPath,
assertTagPresent : assertTagPresent,
assertTagNotPresent : assertTagNotPresent,
assertOutput : assertOutput,
assertSuggestionItem : assertSuggestionItem,
typeTag : typeTag,
typeAndValidateTag : typeAndValidateTag,
enterKey : enterKey,
closeTag : closeTag,
screenshot : screenshot,
createBrowser : createBrowser,
runModule : runModule,
testFilterFunctionality : testFilterFunctionality,
testTagFunctionality : testTagFunctionality,
testPromptFunctionality : testPromptFunctionality,
testAutocompleteFunctionality : testAutocompleteFunctionality,
testPlainInputFunctionality : testPlainInputFunctionality,
testAjaxFunctionality : testAjaxFunctionality,
testArrowFunctionality : testArrowFunctionality,
css : {
focus : focus,
textarea : textarea,
dropdown : dropdown
}
};

View File

@ -0,0 +1,2 @@
*

View File

@ -0,0 +1,7 @@
[Compatibility]
LastVersion=9.0.1_20111220165912/20111220165912
LastOSABI=Darwin_x86_64-gcc3
LastPlatformDir=/Applications/Firefox 9.0.1.app/Contents/MacOS
LastAppDir=/Applications/Firefox 9.0.1.app/Contents/MacOS
InvalidateCaches=1

View File

@ -0,0 +1,4 @@
[ExtensionDirs]
[ThemeDirs]
Extension0=/Applications/Firefox 9.0.1.app/Contents/MacOS/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}

View File

@ -0,0 +1,33 @@
<?xml version="1.0"?>
<RDF:RDF xmlns:NC="http://home.netscape.com/NC-rdf#"
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<RDF:Description RDF:about="chrome://browser/content/sanitize.xul#itemList"
collapsed="false" />
<RDF:Description RDF:about="chrome://browser/content/sanitize.xul#detailsExpander"
class="expander-up" />
<RDF:Description RDF:about="chrome://browser/content/sanitize.xul#SanitizeDialog"
screenX="1097"
screenY="642" />
<RDF:Description RDF:about="chrome://browser/content/browser.xul#main-window"
width="1260"
height="1404"
screenY="22"
sizemode="normal"
screenX="211" />
<RDF:Description RDF:about="chrome://browser/content/browser.xul#sidebar-box"
sidebarcommand=""
width=""
src="" />
<RDF:Description RDF:about="chrome://browser/content/sanitize.xul">
<NC:persist RDF:resource="chrome://browser/content/sanitize.xul#detailsExpander"/>
<NC:persist RDF:resource="chrome://browser/content/sanitize.xul#itemList"/>
<NC:persist RDF:resource="chrome://browser/content/sanitize.xul#SanitizeDialog"/>
</RDF:Description>
<RDF:Description RDF:about="chrome://browser/content/browser.xul">
<NC:persist RDF:resource="chrome://browser/content/browser.xul#main-window"/>
<NC:persist RDF:resource="chrome://browser/content/browser.xul#sidebar-box"/>
<NC:persist RDF:resource="chrome://browser/content/browser.xul#sidebar-title"/>
</RDF:Description>
<RDF:Description RDF:about="chrome://browser/content/browser.xul#sidebar-title"
value="" />
</RDF:RDF>

View File

@ -0,0 +1,190 @@
Generated File. Do not edit.
[HEADER]
Version:0.15:$
Arch:x86_64-gcc3:$
[PLUGINS]
net.juniper.DSSafariExtensions.plugin:$
/Library/Internet Plug-Ins/net.juniper.DSSafariExtensions.plugin:$
19243:$
1321897505000:0:1:$
Juniper Networks Safari Extensions:$
Juniper Networks Safari Extensions:$
1
0:application/x-net-juniper-dssafariextensions:Juniper Networks Extension Type::$
AmazonMP3DownloaderPlugin.plugin:$
/Applications/Amazon MP3 Downloader.app/Contents/Resources/AmazonMP3DownloaderPlugin.plugin:$
AmazonMP3DownloaderPlugin 1.0.15:$
1321560836000:0:1:$
AmazonMP3DownloaderPlugin 1.0.15:$
AmazonMP3DownloaderPlugin:$
1
0:application/x-amz:AmazonMP3DownloaderPlugin 1.0.15::$
Flash Player.plugin:$
/Library/Internet Plug-Ins/Flash Player.plugin:$
10.3.181.14:$
1310162668000:0:1:$
Shockwave Flash 10.3 r181:$
Shockwave Flash:$
2
0:application/x-shockwave-flash:Shockwave Flash:swf:$
1:application/futuresplash:FutureSplash Player:spl:$
npgtpo3dautoplugin.plugin:$
/Library/Internet Plug-Ins/npgtpo3dautoplugin.plugin:$
0.1.44.5:$
1308958693000:0:1:$
Google Talk Plugin Video Accelerator version:0.1.44.5:$
Google Talk Plugin Video Accelerator:$
1
0:application/vnd.gtpo3d.auto:Google Talk Plugin Video Accelerator Type::$
googletalkbrowserplugin.plugin:$
/Library/Internet Plug-Ins/googletalkbrowserplugin.plugin:$
2.1.7.2968:$
1308958693000:0:1:$
Version 2.1.7.2968:$
Google Talk NPAPI Plugin:$
1
0:application/googletalk:Google voice and video chat:googletalk:$
QuickTime Plugin.plugin:$
/Library/Internet Plug-Ins/QuickTime Plugin.plugin:$
7.7.1:$
1308549020000:0:1:$
The QuickTime Plugin allows you to view a wide variety of multimedia content in web pages. For more information, visit the <A HREF=http://www.apple.com/quicktime>QuickTime</A> Web site.:$
QuickTime Plug-in 7.7.1:$
59
0:audio/x-midi:MIDI:mid,midi,smf,kar:$
1:audio/x-ac3:AC3 audio:ac3:$
2:video/mp4:MPEG-4 media:mp4:$
3:video/x-m4v:Video:m4v:$
4:application/x-sdp:SDP stream descriptor:sdp:$
5:audio/AMR:AMR audio:AMR:$
6:application/x-rtsp:RTSP stream descriptor:rtsp,rts:$
7:image/tiff:TIFF image:tif,tiff:$
8:video/3gpp2:3GPP2 media:3g2,3gp2:$
9:image/jpeg2000:JPEG2000 image:jp2:$
10:audio/mpeg:MPEG audio:mpeg,mpg,m1s,m1a,mp2,mpm,mpa,m2a,mp3,swa:$
11:image/x-quicktime:QuickTime image:qtif,qti:$
12:audio/mpeg3:MP3 audio:mp3,swa:$
13:application/sdp:SDP stream descriptor:sdp:$
14:application/x-mpeg:AMC media:amc:$
15:image/x-macpaint:MacPaint image:pntg,pnt,mac:$
16:video/mpeg:MPEG media:mpeg,mpg,m1s,m1v,m1a,m75,m15,mp2,mpm,mpv,mpa:$
17:video/x-msvideo:Video For Windows:avi,vfw:$
18:audio/aac:AAC audio:aac,adts:$
19:audio/x-gsm:GSM audio:gsm:$
20:video/sd-video:SD video:sdv:$
21:audio/x-caf:CAF audio:caf:$
22:image/x-jpeg2000-image:JPEG2000 image:jp2:$
23:audio/3gpp:3GPP media:3gp,3gpp:$
24:audio/mp3:MP3 audio:mp3,swa:$
25:image/x-targa:TGA image:targa,tga:$
26:video/avi:Video For Windows:avi,vfw:$
27:image/png:PNG image:png:$
28:image/x-tiff:TIFF image:tif,tiff:$
29:audio/mp4:MPEG-4 media:mp4:$
30:image/jp2:JPEG2000 image:jp2:$
31:audio/x-aiff:AIFF audio:aiff,aif,aifc,cdda:$
32:video/x-mpeg:MPEG media:mpeg,mpg,m1s,m1v,m1a,m75,m15,mp2,mpm,mpv,mpa:$
33:video/3gpp:3GPP media:3gp,3gpp:$
34:audio/x-mpeg:MPEG audio:mpeg,mpg,m1s,m1a,mp2,mpm,mpa,m2a,mp3,swa:$
35:audio/x-aac:AAC audio:aac,adts:$
36:audio/mid:MIDI:mid,midi,smf,kar:$
37:audio/3gpp2:3GPP2 media:3g2,3gp2:$
38:audio/midi:MIDI:mid,midi,smf,kar:$
39:audio/x-wav:WAVE audio:wav,bwf:$
40:audio/x-mp3:MP3 audio:mp3,swa:$
41:video/quicktime:QuickTime Movie:mov,qt,mqv:$
42:audio/x-mpeg3:MP3 audio:mp3,swa:$
43:image/x-bmp:BMP image:bmp,dib:$
44:audio/ac3:AC3 audio:ac3:$
45:image/pict:PICT image:pict,pic,pct:$
46:audio/x-m4p:AAC audio:m4p:$
47:audio/x-m4a:AAC audio:m4a:$
48:image/x-png:PNG image:png:$
49:image/x-pict:PICT image:pict,pic,pct:$
50:image/x-sgi:SGI image:sgi,rgb:$
51:audio/x-m4b:AAC audio book:m4b:$
52:video/flc:AutoDesk Animator:flc,fli,cel:$
53:audio/aiff:AIFF audio:aiff,aif,aifc,cdda:$
54:video/msvideo:Video For Windows:avi,vfw:$
55:audio/basic:uLaw/AU audio:au,snd,ulw:$
56:image/jpeg2000-image:JPEG2000 image:jp2:$
57:audio/wav:WAVE audio:wav,bwf:$
58:audio/vnd.qcelp:QUALCOMM PureVoice audio:qcp,qcp:$
JavaAppletPlugin.plugin:$
/System/Library/Java/Support/CoreDeploy.bundle/Contents/JavaAppletPlugin.plugin:$
14.1.0:$
1308272440000:0:1:$
Displays Java applet content, or a placeholder if Java is not installed.:$
Java Applet Plug-in:$
17
0:application/x-java-applet;version=1.1.3:Java applet::$
1:application/x-java-applet:Basic Java Applets:javaapplet:$
2:application/x-java-applet;version=1.2.2:Java applet::$
3:application/x-java-applet;version=1.5:Java applet::$
4:application/x-java-vm:Java applet::$
5:application/x-java-applet;version=1.3.1:Java applet::$
6:application/x-java-applet;version=1.3:Java applet::$
7:application/x-java-applet;version=1.1.2:Java applet::$
8:application/x-java-applet;version=1.1:Java applet::$
9:application/x-java-applet;version=1.2.1:Java applet::$
10:application/x-java-applet;version=1.6:Java applet::$
11:application/x-java-applet;version=1.4.2:Java applet::$
12:application/x-java-applet;version=1.4:Java applet::$
13:application/x-java-applet;version=1.1.1:Java applet::$
14:application/x-java-applet;version=1.2:Java applet::$
15:application/x-java-applet;jpi-version=1.6.0_29:Java applet::$
16:application/x-java-vm-npruntime:::$
WebEx64.plugin:$
/Users/agorbatchev/Library/Internet Plug-Ins/WebEx64.plugin:$
1.0:$
1307651021000:0:1:$
WebEx64 General Plugin Container Version 202:$
WebEx64 General Plugin Container:$
1
0:application/webx-gpc-plugin64:gpc::$
Silverlight.plugin:$
/Library/Internet Plug-Ins/Silverlight.plugin:$
4.0.60129.0:$
1296448496000:0:1:$
4.0.60129.0:$
Silverlight Plug-In:$
2
0:application/x-silverlight:Microsoft Silverlight:xaml:$
1:application/x-silverlight-2:Microsoft Silverlight:xaml:$
DirectorShockwave.plugin:$
/Library/Internet Plug-Ins/DirectorShockwave.plugin:$
11.5.7r609:$
1272547663000:0:1:$
:$
:$
0
iPhotoPhotocast.plugin:$
/Library/Internet Plug-Ins/iPhotoPhotocast.plugin:$
7.0:$
1258508974000:0:1:$
iPhoto6:$
iPhotoPhotocast:$
1
0:application/photo:iPhoto 700::$
OfficeLiveBrowserPlugin.plugin:$
/Library/Internet Plug-Ins/OfficeLiveBrowserPlugin.plugin:$
12.2.5:$
1256000273000:0:1:$
Office Live Update v1.0:$
Microsoft Office Live Plug-in:$
1
0:application/officelive:Office Live Update v1.0::$
[INVALID]
/Library/Internet Plug-Ins/Quartz Composer.webplugin:$
1308270108000:$
/Library/Internet Plug-Ins/nsIQTScriptablePlugin.xpt:$
1321292803000:$
/Library/Internet Plug-Ins/flashplayer.xpt:$
1304635372000:$
/Library/Internet Plug-Ins/Disabled Plug-Ins:$
1274731912000:$
/Library/Internet Plug-Ins/AdobePDFViewer.plugin:$
1274910092000:$

View File

@ -0,0 +1,41 @@
// Mozilla User Preferences
/* Do not edit this file.
*
* If you make changes to this file while the application is running,
* the changes will be overwritten when the application exits.
*
* To make a manual change to preferences, you can visit the URL about:config
* For more information, see http://www.mozilla.org/unix/customizing.html#prefs
*/
user_pref("browser.bookmarks.restore_default_bookmarks", false);
user_pref("browser.cache.disk.capacity", 1048576);
user_pref("browser.cache.disk.smart_size.first_run", false);
user_pref("browser.cache.disk.smart_size_cached_value", 1048576);
user_pref("browser.migration.version", 5);
user_pref("browser.places.smartBookmarksVersion", 2);
user_pref("browser.rights.3.shown", true);
user_pref("browser.shell.checkDefaultBrowser", false);
user_pref("browser.startup.homepage_override.buildID", "20111220165912");
user_pref("browser.startup.homepage_override.mstone", "rv:9.0.1");
user_pref("extensions.blocklist.pingCountVersion", 0);
user_pref("extensions.bootstrappedAddons", "{}");
user_pref("extensions.databaseSchema", 6);
user_pref("extensions.enabledAddons", "{972ce4c6-7e08-4474-a285-3208198ce6fd}:9.0.1");
user_pref("extensions.installCache", "[{\"name\":\"app-global\",\"addons\":{\"{972ce4c6-7e08-4474-a285-3208198ce6fd}\":{\"descriptor\":\"/Applications/Firefox 9.0.1.app/Contents/MacOS/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}\",\"mtime\":1324444015000}}}]");
user_pref("extensions.lastAppVersion", "9.0.1");
user_pref("extensions.lastPlatformVersion", "9.0.1");
user_pref("extensions.pendingOperations", false);
user_pref("extensions.shownSelectionUI", true);
user_pref("intl.charsetmenu.browser.cache", "UTF-8");
user_pref("network.cookie.prefsMigrated", true);
user_pref("places.history.expiration.transient_current_max_pages", 104858);
user_pref("places.history.expiration.transient_optimal_database_size", 167772160);
user_pref("privacy.cpd.siteSettings", true);
user_pref("privacy.sanitize.migrateFx3Prefs", true);
user_pref("privacy.sanitize.timeSpan", 0);
user_pref("toolkit.telemetry.prompted", 2);
user_pref("urlclassifier.keyupdatetime.https://sb-ssl.google.com/safebrowsing/newkey", 1327691121);
user_pref("xpinstall.whitelist.add", "");
user_pref("xpinstall.whitelist.add.36", "");

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"windows":[{"tabs":[{"entries":[{"url":"about:home","title":"Mozilla Firefox Start Page","ID":0,"docshellID":5,"owner_b64":"NhAra3tiRRqhyKDUVsktxQAAAAAAAAAAwAAAAAAAAEYAAQAAAAAAAS8nfAAOr03buTZBMmukiq45X+BFfRhK26P9r5jIoa8RAAAAAAVhYm91dAAAAARob21lAODaHXAvexHTjNAAYLD8FKM5X+BFfRhK26P9r5jIoa8RAAAAAA5tb3otc2FmZS1hYm91dAAAAARob21lAAAAAA==","docIdentifier":0,"formdata":{},"scroll":"0,0"}],"index":1,"hidden":false,"attributes":{"image":"chrome://branding/content/icon16.png"}}],"selected":1,"_closedTabs":[],"busy":false,"width":1260,"height":1404,"screenX":211,"screenY":22,"sizemode":"normal"}],"selectedWindow":1,"_closedWindows":[],"session":{"state":"stopped","lastUpdate":1325099214574,"startTime":1325099208545}}

View File

@ -0,0 +1,4 @@
#!/bin/bash
curl -O "http://selenium.googlecode.com/files/selenium-server-standalone-2.15.0.jar"

View File

@ -0,0 +1,4 @@
#!/bin/bash
PATH="/Applications/Firefox 5.0.1.app/Contents/MacOS":$PATH
java -jar selenium-server-standalone-2.15.0.jar -firefoxProfileTemplate "./firefox_profile"

View File

@ -0,0 +1,106 @@
var soda = require('soda'),
assert = require('assert'),
common = require('./common')
;
function beginAjaxTest(exampleId, test)
{
return function(browser)
{
browser
.open('/manual/plugins/ajax.html')
.clickAndWait('css=#example-' + exampleId)
.and(common.verifyTextExt)
.and(test)
.and(common.screenshot('ajax-' + exampleId))
;
};
};
function testLoadingMessage()
{
function inject()
{
var originalAjax = $.ajax;
$.ajax = function()
{
var args = arguments,
self = this
;
setTimeout(
function()
{
originalAjax.apply(self, args);
},
1000
);
};
};
return function(browser)
{
browser.and(
beginAjaxTest('ajax-with-autocomplete', function(browser)
{
var loadingMessage = common.css.dropdown + ' .text-suggestion.text-loading';
browser
.runScript("(" + inject.toString() + ")();")
.and(common.focusInput)
.typeKeys(common.css.textarea, 'ba')
.waitForVisible(common.css.dropdown)
// since we delayed AJAX call in the test, the loading message
// should show up for us before the items are loaded
.assertVisible(loadingMessage)
// wait for the loading message to disappear
.waitForElementNotPresent(loadingMessage)
// verify that suggestion is present
.and(common.assertSuggestionItem('Basic'))
// run the autocomplete tests
.and(common.clearInput)
.and(common.testAutocompleteFunctionality())
;
})
);
};
};
function testWithTags()
{
return function(browser)
{
browser.and(
beginAjaxTest('ajax-with-filter-tags-and-autocomplete', function(browser)
{
browser
.and(common.testAjaxFunctionality())
.and(common.clearInput)
.and(common.testAutocompleteFunctionality(function() {}))
.and(common.testFilterFunctionality())
;
})
);
};
};
function run(browser)
{
browser
.and(testLoadingMessage())
.and(testWithTags())
;
};
module.exports = run;
if(require.main == module)
common.runModule(run);

View File

@ -0,0 +1,36 @@
var soda = require('soda'),
assert = require('assert'),
common = require('./common')
;
function testAutocomplete(exampleId, finalAssert)
{
return function(browser)
{
browser
.open('/manual/plugins/autocomplete.html')
.clickAndWait('css=#example-' + exampleId)
.and(common.verifyTextExt)
.and(common.testAutocompleteFunctionality(finalAssert))
.and(common.screenshot('autocomplete-' + exampleId))
;
};
};
function run(browser)
{
browser
.and(testAutocomplete('autocomplete'))
.and(testAutocomplete('autocomplete-with-filter'))
.and(testAutocomplete('autocomplete-with-custom-render'))
.and(testAutocomplete('autocomplete-with-tags', common.testTagFunctionality()))
.and(testAutocomplete('autocomplete-with-tags-and-filter', common.testFilterFunctionality()))
;
};
module.exports = run;
if(require.main == module)
common.runModule(run);

View File

@ -0,0 +1,51 @@
var soda = require('soda'),
assert = require('assert'),
common = require('./common')
;
function testFilter(exampleId)
{
return function(browser)
{
browser
.open('/manual/plugins/filter.html')
.clickAndWait('css=#example-' + exampleId)
.and(common.verifyTextExt)
.and(common.testFilterFunctionality())
.and(common.screenshot('filter-' + exampleId))
;
};
};
function testTags()
{
return function(browser)
{
browser
.and(common.typeAndValidateTag('PHP'))
.and(common.typeAndValidateTag('Ruby'))
.and(common.typeAndValidateTag('Go'))
;
};
};
function run(browser)
{
browser
.and(testFilter('filter-with-static-list-of-items'))
.and(testTags())
.and(testFilter('filter-using-suggestions'))
.and(testTags())
.and(testFilter('autocomplete-with-filter'))
.and(testFilter('filter'))
;
};
module.exports = run;
if(require.main == module)
common.runModule(run);

View File

@ -0,0 +1,46 @@
var soda = require('soda'),
assert = require('assert'),
common = require('./common')
;
var focus = common.css.focus,
textarea = common.css.textarea
;
function testFocusFunctionality(browser)
{
browser
.fireEvent(textarea, 'focus')
.waitForVisible(focus)
.fireEvent(textarea, 'blur')
.waitForNotVisible(focus)
;
};
function testFocus(exampleId)
{
return function(browser)
{
browser
.open('/manual/plugins/focus.html')
.clickAndWait('css=#example-' + exampleId)
.and(common.verifyTextExt)
.and(testFocusFunctionality)
.and(common.screenshot('focus-' + exampleId))
;
};
};
function run(browser)
{
browser
.and(testFocus('focus'))
;
};
module.exports = run;
if(require.main == module)
common.runModule(run);

View File

@ -0,0 +1,40 @@
var soda = require('soda'),
assert = require('assert'),
common = require('./common')
;
function testPrompt(exampleId, secondary)
{
return function(browser)
{
browser
.open('/manual/plugins/prompt.html')
.clickAndWait('css=#example-' + exampleId)
.and(common.verifyTextExt)
.and(common.testPromptFunctionality(secondary))
.and(common.screenshot('prompt-' + exampleId))
;
};
};
function run(browser)
{
browser
.and(testPrompt('prompt', common.testPlainInputFunctionality()))
.and(testPrompt('prompt-with-autocomplete-and-arrow', function(browser)
{
browser
.and(common.testArrowFunctionality())
.and(common.testAutocompleteFunctionality())
;
}))
.and(testPrompt('prompt-with-tags', common.testTagFunctionality()))
;
};
module.exports = run;
if(require.main == module)
common.runModule(run);

View File

@ -0,0 +1,36 @@
var soda = require('soda'),
assert = require('assert'),
common = require('./common')
;
function testTags(exampleId, wrap)
{
return function(browser)
{
browser
.open('/manual/plugins/tags.html')
.clickAndWait('css=#example-' + exampleId)
.and(common.verifyTextExt)
.and(common.testTagFunctionality(wrap))
.and(common.screenshot('tags-' + exampleId))
;
};
};
function run(browser)
{
browser
.and(testTags('tags'))
.and(testTags('tags-with-items'))
.and(testTags('tags-with-custom-labels', { label: function(v) { return '[ ' + v + ' ]' } }))
.and(testTags('tags-with-custom-rendering'))
.and(testTags('tags-with-custom-data-objects', { object: function(v) { return { name : v } }} ))
;
};
module.exports = run;
if(require.main == module)
common.runModule(run);

View File

@ -0,0 +1,16 @@
var soda = require('soda'),
assert = require('assert'),
common = require('./common')
;
common.runModule(function(browser)
{
browser
.and(require('./test_autocomplete.js'))
.and(require('./test_tags.js'))
.and(require('./test_filter.js'))
.and(require('./test_focus.js'))
.and(require('./test_prompt.js'))
;
});

View File

@ -0,0 +1,32 @@
/*!
Buttons for DataTables 1.0.3
©2015 SpryMedia Ltd - datatables.net/license
*/
(function(r,n,m){var p=function(e,j){var p=0,s=0,k=j.ext.buttons,l=function(a,b){!0===b&&(b={});e.isArray(b)&&(b={buttons:b});this.c=e.extend(!0,{},l.defaults,b);b.buttons&&(this.c.buttons=b.buttons);this.s={dt:new j.Api(a),buttons:[],subButtons:[],listenKeys:"",namespace:"dtb"+p++};this.dom={container:e("<"+this.c.dom.container.tag+"/>").addClass(this.c.dom.container.className)};this._constructor()};e.extend(l.prototype,{action:function(a,b){var c=this._indexToButton(a).conf;if(b===m)return c.action;
c.action=b;return this},active:function(a,b){this._indexToButton(a).node.toggleClass(this.c.dom.button.active,b===m?!0:b);return this},add:function(a,b){if("string"===typeof a&&-1!==a.indexOf("-")){var c=a.split("-");this.c.buttons[1*c[0]].buttons.splice(1*c[1],0,b)}else this.c.buttons.splice(1*a,0,b);this.dom.container.empty();this._buildButtons(this.c.buttons);return this},container:function(){return this.dom.container},disable:function(a){this._indexToButton(a).node.addClass(this.c.dom.button.disabled);
return this},destroy:function(){e("body").off("keyup."+this.s.namespace);var a=this.s.buttons,b=this.s.subButtons,c,d,f;c=0;for(a=a.length;c<a;c++){this.removePrep(c);d=0;for(f=b[c].length;d<f;d++)this.removePrep(c+"-"+d)}this.removeCommit();this.dom.container.remove();b=this.s.dt.settings()[0];c=0;for(a=b.length;c<a;c++)if(b.inst===this){b.splice(c,1);break}return this},enable:function(a,b){if(!1===b)return this.disable(a);this._indexToButton(a).node.removeClass(this.c.dom.button.disabled);return this},
name:function(){return this.c.name},node:function(a){return this._indexToButton(a).node},removeCommit:function(){var a=this.s.buttons,b=this.s.subButtons,c,d;for(c=a.length-1;0<=c;c--)null===a[c]&&(a.splice(c,1),b.splice(c,1),this.c.buttons.splice(c,1));c=0;for(a=b.length;c<a;c++)for(d=b[c].length-1;0<=d;d--)null===b[c][d]&&(b[c].splice(d,1),this.c.buttons[c].buttons.splice(d,1));return this},removePrep:function(a){var b,c=this.s.dt;if("number"===typeof a||-1===a.indexOf("-"))b=this.s.buttons[1*a],
b.conf.destroy&&b.conf.destroy.call(c.button(a),c,b,b.conf),b.node.remove(),this._removeKey(b.conf),this.s.buttons[1*a]=null;else{var d=a.split("-");b=this.s.subButtons[1*d[0]][1*d[1]];b.conf.destroy&&b.conf.destroy.call(c.button(a),c,b,b.conf);b.node.remove();this._removeKey(b.conf);this.s.subButtons[1*d[0]][1*d[1]]=null}return this},text:function(a,b){var c=this._indexToButton(a),d=this.c.dom.buttonLiner.tag,e=this.s.dt,g=function(a){return"function"===typeof a?a(e,c.node,c.conf):a};if(b===m)return g(c.conf.text);
c.conf.text=b;d?c.node.children(d).html(g(b)):c.node.html(g(b));return this},toIndex:function(a){var b,c,d,e;d=this.s.buttons;var g=this.s.subButtons;b=0;for(c=d.length;b<c;b++)if(d[b].node[0]===a)return b+"";b=0;for(c=g.length;b<c;b++){d=0;for(e=g[b].length;d<e;d++)if(g[b][d].node[0]===a)return b+"-"+d}},_constructor:function(){var a=this,b=this.s.dt,c=b.settings()[0];c._buttons||(c._buttons=[]);c._buttons.push({inst:this,name:this.c.name});this._buildButtons(this.c.buttons);b.on("destroy",function(){a.destroy()});
e("body").on("keyup."+this.s.namespace,function(b){if(!n.activeElement||n.activeElement===n.body){var c=String.fromCharCode(b.keyCode).toLowerCase();a.s.listenKeys.toLowerCase().indexOf(c)!==-1&&a._keypress(c,b)}})},_addKey:function(a){a.key&&(this.s.listenKeys+=e.isPlainObject(a.key)?a.key.key:a.key)},_buildButtons:function(a,b,c){var d=this.s.dt;b||(b=this.dom.container,this.s.buttons=[],this.s.subButtons=[]);for(var f=0,g=a.length;f<g;f++){var h=this._resolveExtends(a[f]);if(h)if(e.isArray(h))this._buildButtons(h,
b,c);else{var i=this._buildButton(h,c!==m?!0:!1);if(i){var q=i.node;b.append(i.inserter);c===m?(this.s.buttons.push({node:q,conf:h,inserter:i.inserter}),this.s.subButtons.push([])):this.s.subButtons[c].push({node:q,conf:h,inserter:i.inserter});h.buttons&&(i=this.c.dom.collection,h._collection=e("<"+i.tag+"/>").addClass(i.className),this._buildButtons(h.buttons,h._collection,f));h.init&&h.init.call(d.button(q),d,q,h)}}}},_buildButton:function(a,b){var c=this.c.dom.button,d=this.c.dom.buttonLiner,f=
this.c.dom.collection,g=this.s.dt,h=function(b){return"function"===typeof b?b(g,i,a):b};b&&f.button&&(c=f.button);b&&f.buttonLiner&&(d=f.buttonLiner);if(a.available&&!a.available(g,a))return!1;var i=e("<"+c.tag+"/>").addClass(c.className).attr("tabindex",this.s.dt.settings()[0].iTabIndex).attr("aria-controls",this.s.dt.table().node().id).on("click.dtb",function(b){b.preventDefault();!i.hasClass(c.disabled)&&a.action&&a.action.call(g.button(i),b,g,i,a);i.blur()}).on("keyup.dtb",function(b){b.keyCode===
13&&!i.hasClass(c.disabled)&&a.action&&a.action.call(g.button(i),b,g,i,a)});d.tag?i.append(e("<"+d.tag+"/>").html(h(a.text)).addClass(d.className)):i.html(h(a.text));!1===a.enabled&&i.addClass(c.disabled);a.className&&i.addClass(a.className);a.namespace||(a.namespace=".dt-button-"+s++);d=(d=this.c.dom.buttonContainer)?e("<"+d.tag+"/>").addClass(d.className).append(i):i;this._addKey(a);return{node:i,inserter:d}},_indexToButton:function(a){if("number"===typeof a||-1===a.indexOf("-"))return this.s.buttons[1*
a];a=a.split("-");return this.s.subButtons[1*a[0]][1*a[1]]},_keypress:function(a,b){var c,d,f,g;f=this.s.buttons;var h=this.s.subButtons,i=function(c,d){if(c.key)if(c.key===a)d.click();else if(e.isPlainObject(c.key)&&c.key.key===a&&(!c.key.shiftKey||b.shiftKey))if(!c.key.altKey||b.altKey)if(!c.key.ctrlKey||b.ctrlKey)(!c.key.metaKey||b.metaKey)&&d.click()};c=0;for(d=f.length;c<d;c++)i(f[c].conf,f[c].node);c=0;for(d=h.length;c<d;c++){f=0;for(g=h[c].length;f<g;f++)i(h[c][f].conf,h[c][f].node)}},_removeKey:function(a){if(a.key){var b=
e.isPlainObject(a.key)?a.key.key:a.key,a=this.s.listenKeys.split(""),b=e.inArray(b,a);a.splice(b,1);this.s.listenKeys=a.join("")}},_resolveExtends:function(a){for(var b=this.s.dt,c,d,f=function(c){for(var d=0;!e.isPlainObject(c)&&!e.isArray(c);){if("function"===typeof c){if(c=c(b,a),!c)return!1}else if("string"===typeof c){if(!k[c])throw"Unknown button type: "+c;c=k[c]}d++;if(30<d)throw"Buttons: Too many iterations";}return e.isArray(c)?c:e.extend({},c)},a=f(a);a&&a.extend;){var g=f(k[a.extend]);
if(e.isArray(g))return g;c=g.className;a=e.extend({},g,a);c&&a.className!==c&&(a.className=c+" "+a.className);var h=a.postfixButtons;if(h){a.buttons||(a.buttons=[]);c=0;for(d=h.length;c<d;c++)a.buttons.push(h[c]);a.postfixButtons=null}if(h=a.prefixButtons){a.buttons||(a.buttons=[]);c=0;for(d=h.length;c<d;c++)a.buttons.splice(c,0,h[c]);a.prefixButtons=null}a.extend=g.extend}return a}});l.background=function(a,b,c){c===m&&(c=400);a?e("<div/>").addClass(b).css("display","none").appendTo("body").fadeIn(c):
e("body > div."+b).fadeOut(c,function(){e(this).remove()})};l.instanceSelector=function(a,b){if(!a)return e.map(b,function(a){return a.inst});var c=[],d=e.map(b,function(a){return a.name}),f=function(a){if(e.isArray(a))for(var h=0,i=a.length;h<i;h++)f(a[h]);else"string"===typeof a?-1!==a.indexOf(",")?f(a.split(",")):(a=e.inArray(e.trim(a),d),-1!==a&&c.push(b[a].inst)):"number"===typeof a&&c.push(b[a].inst)};f(a);return c};l.buttonSelector=function(a,b){for(var c=[],d=function(a,b){var f,g,j=[];e.each(b.s.buttons,
function(a,b){null!==b&&j.push({node:b.node[0],name:b.name})});e.each(b.s.subButtons,function(a,b){e.each(b,function(a,b){null!==b&&j.push({node:b.node[0],name:b.name})})});f=e.map(j,function(a){return a.node});if(e.isArray(a)||a instanceof e){f=0;for(g=a.length;f<g;f++)d(a[f],b)}else if(null===a||a===m||"*"===a){f=0;for(g=j.length;f<g;f++)c.push({inst:b,idx:b.toIndex(j[f].node)})}else if("number"===typeof a)c.push({inst:b,idx:a});else if("string"===typeof a)if(-1!==a.indexOf(",")){var k=a.split(",");
f=0;for(g=k.length;f<g;f++)d(e.trim(k[f]),b)}else if(a.match(/^\d+(\-\d+)?$/))c.push({inst:b,idx:a});else if(-1!==a.indexOf(":name")){k=a.replace(":name","");f=0;for(g=j.length;f<g;f++)j[f].name===k&&c.push({inst:b,idx:b.toIndex(j[f].node)})}else e(f).filter(a).each(function(){c.push({inst:b,idx:b.toIndex(this)})});else"object"===typeof a&&a.nodeName&&(g=e.inArray(a,f),-1!==g&&c.push({inst:b,idx:b.toIndex(f[g])}))},f=0,g=a.length;f<g;f++)d(b,a[f]);return c};l.defaults={buttons:["copy","excel","csv",
"pdf","print"],name:"main",tabIndex:0,dom:{container:{tag:"div",className:"dt-buttons"},collection:{tag:"div",className:"dt-button-collection"},button:{tag:"a",className:"dt-button",active:"active",disabled:"disabled"},buttonLiner:{tag:"span",className:""}}};l.version="1.0.3";e.extend(k,{collection:{text:function(a){return a.i18n("buttons.collection","Collection")},className:"buttons-collection",action:function(a,b,c,d){a=c.offset();b=e(b.table().container());d._collection.addClass(d.collectionLayout).css("display",
"none").appendTo("body").fadeIn(d.fade);"absolute"===d._collection.css("position")?(d._collection.css({top:a.top+c.outerHeight(),left:a.left}),c=a.left+d._collection.outerWidth(),b=b.offset().left+b.width(),c>b&&d._collection.css("left",a.left-(c-b))):(a=d._collection.height()/2,a>e(r).height()/2&&(a=e(r).height()/2),d._collection.css("marginTop",-1*a));d.background&&l.background(!0,d.backgroundClassName,d.fade);setTimeout(function(){e(n).on("click.dtb-collection",function(a){if(!e(a.target).parents().andSelf().filter(d._collection).length){d._collection.fadeOut(d.fade,
function(){d._collection.detach()});l.background(false,d.backgroundClassName,d.fade);e(n).off("click.dtb-collection")}})},10)},background:!0,collectionLayout:"",backgroundClassName:"dt-button-background",fade:400},copy:function(a,b){if(b.preferHtml&&k.copyHtml5)return"copyHtml5";if(k.copyFlash&&k.copyFlash.available(a,b))return"copyFlash";if(k.copyHtml5)return"copyHtml5"},csv:function(a,b){if(k.csvHtml5&&k.csvHtml5.available(a,b))return"csvHtml5";if(k.csvFlash&&k.csvFlash.available(a,b))return"csvFlash"},
excel:function(a,b){if(k.excelHtml5&&k.excelHtml5.available(a,b))return"excelHtml5";if(k.excelFlash&&k.excelFlash.available(a,b))return"excelFlash"},pdf:function(a,b){if(k.pdfHtml5&&k.pdfHtml5.available(a,b))return"pdfHtml5";if(k.pdfFlash&&k.pdfFlash.available(a,b))return"pdfFlash"}});j.Api.register("buttons()",function(a,b){b===m&&(b=a,a=m);return this.iterator(!0,"table",function(c){if(c._buttons)return l.buttonSelector(l.instanceSelector(a,c._buttons),b)},!0)});j.Api.register("button()",function(a,
b){var c=this.buttons(a,b);1<c.length&&c.splice(1,c.length);return c});j.Api.register(["buttons().active()","button().active()"],function(a){return this.each(function(b){b.inst.active(b.idx,a)})});j.Api.registerPlural("buttons().action()","button().action()",function(a){return a===m?this.map(function(a){return a.inst.action(a.idx)}):this.each(function(b){b.inst.action(b.idx,a)})});j.Api.register(["buttons().enable()","button().enable()"],function(a){return this.each(function(b){b.inst.enable(b.idx,
a)})});j.Api.register(["buttons().disable()","button().disable()"],function(){return this.each(function(a){a.inst.disable(a.idx)})});j.Api.registerPlural("buttons().nodes()","button().node()",function(){var a=e();e(this.each(function(b){a=a.add(b.inst.node(b.idx))}));return a});j.Api.registerPlural("buttons().text()","button().text()",function(a){return a===m?this.map(function(a){return a.inst.text(a.idx)}):this.each(function(b){b.inst.text(b.idx,a)})});j.Api.registerPlural("buttons().trigger()",
"button().trigger()",function(){return this.each(function(a){a.inst.node(a.idx).trigger("click")})});j.Api.registerPlural("buttons().containers()","buttons().container()",function(){var a=e();e(this.each(function(b){a=a.add(b.inst.container())}));return a});j.Api.register("button().add()",function(a,b){1===this.length&&this[0].inst.add(a,b);return this.button(a)});j.Api.register("buttons().destroy()",function(){this.pluck("inst").unique().each(function(a){a.destroy()});return this});j.Api.registerPlural("buttons().remove()",
"buttons().remove()",function(){this.each(function(a){a.inst.removePrep(a.idx)});this.pluck("inst").unique().each(function(a){a.removeCommit()});return this});var o;j.Api.register("buttons.info()",function(a,b,c){var d=this;if(!1===a)return e("#datatables_buttons_info").fadeOut(function(){e(this).remove()}),clearTimeout(o),o=null,this;o&&clearTimeout(o);e("#datatables_buttons_info").length&&e("#datatables_buttons_info").remove();e('<div id="datatables_buttons_info" class="dt-button-info"/>').html(a?
"<h2>"+a+"</h2>":"").append(e("<div/>")["string"===typeof b?"html":"append"](b)).css("display","none").appendTo("body").fadeIn();c!==m&&0!==c&&(o=setTimeout(function(){d.buttons.info(!1)},c));return this});j.Api.register("buttons.exportData()",function(a){if(this.context.length){for(var b=new j.Api(this.context[0]),c=e.extend(!0,{},{rows:null,columns:"",modifier:{search:"applied",order:"applied"},orthogonal:"display",stripHtml:!0,stripNewlines:!0,trim:!0},a),d=function(a){if("string"!==typeof a)return a;
c.stripHtml&&(a=a.replace(/<.*?>/g,""));c.trim&&(a=a.replace(/^\s+|\s+$/g,""));c.stripNewlines&&(a=a.replace(/\n/g," "));return a},a=b.columns(c.columns).indexes().map(function(a){return d(b.column(a).header().innerHTML)}).toArray(),f=b.table().footer()?b.columns(c.columns).indexes().map(function(a){return(a=b.column(a).footer())?d(a.innerHTML):""}).toArray():null,g=b.cells(c.rows,c.columns,c.modifier).render(c.orthogonal).toArray(),h=a.length,i=g.length/h,k=Array(i),l=0,m=0;m<i;m++){for(var n=Array(h),
o=0;o<h;o++)n[o]=d(g[l]),l++;k[m]=n}return{header:a,footer:f,body:k}}});e.fn.dataTable.Buttons=l;e.fn.DataTable.Buttons=l;e(n).on("init.dt.dtb",function(a,b){if("dt"===a.namespace){var c=b.oInit.buttons||j.defaults.buttons;c&&!b._buttons&&(new l(b,c)).container()}});j.ext.feature.push({fnInit:function(a){var a=new j.Api(a),b=a.init().buttons;return(new l(a,b)).container()},cFeature:"B"});return l};"function"===typeof define&&define.amd?define(["jquery","datatables"],p):"object"===typeof exports?p(require("jquery"),
require("datatables")):jQuery&&!jQuery.fn.dataTable.Buttons&&p(jQuery,jQuery.fn.dataTable)})(window,document);

Some files were not shown because too many files have changed in this diff Show More