git-svn-id: https://svn.research-infrastructures.eu/d4science/gcube/branches/portlets/admin/UsersManagementPortlet/3.8.1/UsesrsManagementPortlet@182229 82a268e6-3cf1-43bd-a215-b396298e98cf
|
@ -0,0 +1 @@
|
|||
${gcube.license}
|
|
@ -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.
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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}
|
||||
|
|
@ -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>
|
|
@ -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
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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}}
|
|
@ -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;
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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%;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;;
|
||||
}
|
|
@ -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%;
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 467 B |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 263 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 427 B |
After Width: | Height: | Size: 260 B |
After Width: | Height: | Size: 146 B |
|
@ -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');
|
||||
}
|
|
@ -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:');
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
|
@ -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'
|
||||
}));
|
||||
}
|
|
@ -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("'", "'");
|
||||
});
|
||||
|
||||
tagEvents(theList, teamList);
|
||||
|
||||
tableEvents();
|
||||
fetchUserRequestRejectionEmailSubject();
|
||||
|
||||
hidePreloader();
|
||||
};
|
||||
|
||||
AJAX_CALL_POST(theData, callback);
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
});
|
|
@ -0,0 +1,4 @@
|
|||
/node_modules/
|
||||
/src/css/_common.css
|
||||
tests/*.png
|
||||
tests/*.jar
|
|
@ -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.
|
|
@ -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
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
../node_modules/.bin/stylus --watch --include ../src/stylus --out ../src/css ../src/stylus/*.styl
|
||||
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 177 B |
After Width: | Height: | Size: 406 B |
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
*
|
||||
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
|||
[ExtensionDirs]
|
||||
|
||||
[ThemeDirs]
|
||||
Extension0=/Applications/Firefox 9.0.1.app/Contents/MacOS/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
|
|
@ -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>
|
|
@ -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:$
|
|
@ -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", "");
|
|
@ -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}}
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
|
||||
curl -O "http://selenium.googlecode.com/files/selenium-server-standalone-2.15.0.jar"
|
||||
|
|
@ -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"
|
||||
|
|
@ -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);
|
||||
|
|
@ -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);
|
||||
|
|
@ -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);
|
||||
|
|
@ -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);
|
||||
|
|
@ -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);
|
||||
|
|
@ -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);
|
||||
|
|
@ -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'))
|
||||
;
|
||||
});
|
||||
|
|
@ -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);
|