Merge branch 'master' of https://github.com/naver/pinpoint into user-include

This commit is contained in:
Jaehong Kim
2015-12-01 16:48:32 +09:00
621 changed files with 320 additions and 136806 deletions
@@ -38,7 +38,9 @@ public class ConnectionCloseInterceptor implements AroundInterceptor {
logger.beforeInterceptor(target, args);
}
// In case of close, we have to delete data even if the invocation failed.
((DatabaseInfoAccessor)target)._$PINPOINT$_setDatabaseInfo(null);
if (target instanceof DatabaseInfoAccessor) {
((DatabaseInfoAccessor) target)._$PINPOINT$_setDatabaseInfo(null);
}
}
@IgnoreMethod
@@ -76,7 +76,9 @@ public class DriverConnectInterceptor extends SpanEventSimpleAroundInterceptorFo
DatabaseInfo databaseInfo = createDatabaseInfo(driverUrl);
if (success) {
if (recordConnection) {
((DatabaseInfoAccessor)result)._$PINPOINT$_setDatabaseInfo(databaseInfo);
if (result instanceof DatabaseInfoAccessor) {
((DatabaseInfoAccessor) result)._$PINPOINT$_setDatabaseInfo(databaseInfo);
}
}
}
}
@@ -86,7 +88,7 @@ public class DriverConnectInterceptor extends SpanEventSimpleAroundInterceptorFo
if (recordConnection) {
DatabaseInfo databaseInfo = (result instanceof DatabaseInfoAccessor) ? ((DatabaseInfoAccessor)result)._$PINPOINT$_getDatabaseInfo() : null;
if (databaseInfo == null) {
databaseInfo = UnKnownDatabaseInfo.INSTANCE;
}
@@ -75,8 +75,9 @@ public class StatementCreateInterceptor implements AroundInterceptor {
if (databaseInfo == null) {
databaseInfo = UnKnownDatabaseInfo.INSTANCE;
}
((DatabaseInfoAccessor)result)._$PINPOINT$_setDatabaseInfo(databaseInfo);
if (result instanceof DatabaseInfoAccessor) {
((DatabaseInfoAccessor) result)._$PINPOINT$_setDatabaseInfo(databaseInfo);
}
}
}
}
@@ -126,13 +126,11 @@ public class ZookeeperProfilerClusterManager implements ServerStateChangeEventHa
if (SocketStateCode.RUN_DUPLEX == stateCode) {
UpdateJob job = new UpdateJob(pinpointServer, new byte[0]);
worker.putJob(job);
profileCluster.addClusterPoint(new PinpointServerClusterPoint(pinpointServer));
worker.putJob(job);
} else if (SocketStateCode.isClosed(stateCode)) {
DeleteJob job = new DeleteJob(pinpointServer);
worker.putJob(job);
profileCluster.removeClusterPoint(new PinpointServerClusterPoint(pinpointServer));
}
} else {
@@ -271,13 +271,6 @@ public class TCPReceiver {
SocketAddress remoteAddress = pinpointSocket.getRemoteAddress();
try {
TBase<?, ?> tBase = SerializationUtils.deserialize(bytes, deserializerFactory);
if (tBase instanceof L4Packet) {
if (logger.isDebugEnabled()) {
L4Packet packet = (L4Packet) tBase;
logger.debug("tcp l4 packet {}", packet.getHeader());
}
return;
}
TBase result = dispatchHandler.dispatchRequestMessage(tBase);
if (result != null) {
byte[] resultBytes = SerializationUtils.serialize(result, serializerFactory);
@@ -20,16 +20,23 @@ import com.navercorp.pinpoint.collector.receiver.DispatchHandler;
import com.navercorp.pinpoint.collector.util.PacketUtils;
import com.navercorp.pinpoint.thrift.io.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.thrift.TBase;
import org.apache.thrift.TException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.*;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
/**
* @author emeroad
* @author netspider
* @author minwoo.jung
*/
public class BaseUDPHandlerFactory<T extends DatagramPacket> implements PacketHandlerFactory<T> {
@@ -42,8 +49,10 @@ public class BaseUDPHandlerFactory<T extends DatagramPacket> implements PacketHa
private final TBaseFilter<SocketAddress> filter;
private final PacketHandler<T> dispatchPacket = new DispatchPacket();
private final InetAddress[] ignoreAddresses;
public BaseUDPHandlerFactory(DispatchHandler dispatchHandler, TBaseFilter<SocketAddress> filter) {
public BaseUDPHandlerFactory(DispatchHandler dispatchHandler, TBaseFilter<SocketAddress> filter, List<String> l4IpList) {
if (dispatchHandler == null) {
throw new NullPointerException("dispatchHandler must not be null");
}
@@ -52,6 +61,34 @@ public class BaseUDPHandlerFactory<T extends DatagramPacket> implements PacketHa
}
this.dispatchHandler = dispatchHandler;
this.filter = filter;
this.ignoreAddresses = setIgnoreAddressList(l4IpList);
}
private InetAddress[] setIgnoreAddressList(List<String> l4IpList) {
if (l4IpList == null) {
return null;
}
try {
List<InetAddress> inetAddressList = new ArrayList<InetAddress>();
for (int i = 0; i < l4IpList.size(); i++) {
String l4Ip = l4IpList.get(i);
if (StringUtils.isBlank(l4Ip)) {
continue;
}
InetAddress address = InetAddress.getByName(l4Ip);
if (address != null) {
inetAddressList.add(address);
}
}
InetAddress[] inetAddressArray = new InetAddress[inetAddressList.size()];
return inetAddressList.toArray(inetAddressArray);
} catch (UnknownHostException e) {
logger.warn("l4ipList error {}", l4IpList, e);
}
return null;
}
@Override
@@ -67,9 +104,14 @@ public class BaseUDPHandlerFactory<T extends DatagramPacket> implements PacketHa
@Override
public void receive(T packet) {
if (isIgnoreAddress(packet.getAddress())) {
return;
}
final HeaderTBaseDeserializer deserializer = deserializerFactory.createDeserializer();
TBase<?, ?> tBase = null;
SocketAddress socketAddress = packet.getSocketAddress();
TBase<?, ?> tBase = null;
try {
tBase = deserializer.deserialize(packet.getData());
if (filter.filter(tBase, socketAddress) == TBaseFilter.BREAK) {
@@ -94,6 +136,24 @@ public class BaseUDPHandlerFactory<T extends DatagramPacket> implements PacketHa
}
}
}
private boolean isIgnoreAddress(InetAddress remoteAddress) {
if (ignoreAddresses == null) {
return false;
}
if (remoteAddress == null) {
return false;
}
for (InetAddress ignore : ignoreAddresses) {
if (ignore.equals(remoteAddress)) {
if (logger.isDebugEnabled()) {
logger.debug("UDP Connected ignore address. IP : " + remoteAddress.getHostAddress());
}
return true;
}
}
return false;
}
}
}
@@ -1,42 +0,0 @@
/*
* Copyright 2014 NAVER Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.navercorp.pinpoint.collector.receiver.udp;
import com.navercorp.pinpoint.thrift.io.L4Packet;
import org.apache.thrift.TBase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author emeroad
*/
public class L4PacketFilter<T> implements TBaseFilter<T> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public boolean filter(TBase<?, ?> tBase, T remoteAddress) {
if (tBase instanceof L4Packet) {
if (logger.isDebugEnabled()) {
L4Packet l4Packet = (L4Packet) tBase;
logger.debug("udp l4 packet {} {}", l4Packet.getHeader(), remoteAddress);
}
return BREAK;
}
return CONTINUE;
}
}
@@ -206,18 +206,17 @@
<bean id="udpSpanBasePacketHandler" class="com.navercorp.pinpoint.collector.receiver.udp.BaseUDPHandlerFactory">
<constructor-arg index="0" ref="udpSpanDispatchHandlerWrapper"/>
<constructor-arg index="1" ref="tBaseFilterChain"/>
<constructor-arg index="2" value="#{collectorConfiguration.l4IpList}"/>
</bean>
<bean id="tBaseFilterChain" class="com.navercorp.pinpoint.collector.receiver.udp.TBaseFilterChain">
<constructor-arg>
<list>
<ref bean="l4PacketFilter"/>
<ref bean="networkAvailabilityCheckPacketFilter"/>
</list>
</constructor-arg>
</bean>
<bean id="l4PacketFilter" class="com.navercorp.pinpoint.collector.receiver.udp.L4PacketFilter"/>
<bean id="networkAvailabilityCheckPacketFilter" class="com.navercorp.pinpoint.collector.receiver.udp.NetworkAvailabilityCheckPacketFilter"/>
@@ -237,6 +236,7 @@
<bean id="udpStatBasePacketHandler" class="com.navercorp.pinpoint.collector.receiver.udp.BaseUDPHandlerFactory">
<constructor-arg index="0" ref="udpDispatchHandlerWrapper"/>
<constructor-arg index="1" ref="tBaseFilterChain"/>
<constructor-arg index="2" value="#{collectorConfiguration.l4IpList}"/>
</bean>
<bean id="udpStatReceiver" class="com.navercorp.pinpoint.collector.receiver.udp.UDPReceiver">
@@ -37,9 +37,11 @@ public class AddOpInterceptor implements AroundInterceptor {
if (isDebug) {
logger.beforeInterceptor(target, args);
}
String serviceCode = ((ServiceCodeAccessor)target)._$PINPOINT$_getServiceCode();
((ServiceCodeAccessor)args[1])._$PINPOINT$_setServiceCode(serviceCode);
final Object serviceCodeAccessor = args[1];
if (target instanceof ServiceCodeAccessor && serviceCodeAccessor instanceof ServiceCodeAccessor) {
String serviceCode = ((ServiceCodeAccessor) target)._$PINPOINT$_getServiceCode();
((ServiceCodeAccessor) serviceCodeAccessor)._$PINPOINT$_setServiceCode(serviceCode);
}
}
@Override
@@ -162,6 +162,7 @@ public class ApiInterceptor implements AroundInterceptor {
this.traceContext.getAsyncId();
final AsyncTraceId asyncTraceId = trace.getAsyncTraceId();
recorder.recordNextAsyncId(asyncTraceId.getAsyncId());
// type check isAsynchronousInvocation
((AsyncTraceIdAccessor)result)._$PINPOINT$_setAsyncTraceId(asyncTraceId);
if (isDebug) {
logger.debug("Set asyncTraceId metadata {}", asyncTraceId);
@@ -41,7 +41,8 @@ public class CacheManagerConstructInterceptor implements AroundInterceptor {
if (isDebug) {
logger.afterInterceptor(target, args, result, throwable);
}
((ServiceCodeAccessor)target)._$PINPOINT$_setServiceCode((String)args[1]);
if (target instanceof ServiceCodeAccessor) {
((ServiceCodeAccessor) target)._$PINPOINT$_setServiceCode((String) args[1]);
}
}
}
@@ -47,11 +47,16 @@ public class FrontCacheGetFutureConstructInterceptor implements AroundIntercepto
}
try {
((CacheNameAccessor)target)._$PINPOINT$_setCacheName(DEFAULT_FRONTCACHE_NAME);
if (args[0] instanceof Element) {
Element element = (Element) args[0];
((CacheKeyAccessor)target)._$PINPOINT$_setCacheKey(element.getObjectKey());
if (target instanceof CacheNameAccessor) {
((CacheNameAccessor) target)._$PINPOINT$_setCacheName(DEFAULT_FRONTCACHE_NAME);
}
final Object elementArg = args[0];
if (elementArg instanceof Element) {
final Element element = (Element) elementArg;
if (target instanceof CacheKeyAccessor) {
((CacheKeyAccessor) target)._$PINPOINT$_setCacheKey(element.getObjectKey());
}
}
} catch (Exception e) {
logger.error("failed to add metadata: {}", e);
@@ -70,9 +70,11 @@ public class FrontCacheGetFutureGetInterceptor implements AroundInterceptor {
try {
final SpanEventRecorder recorder = trace.currentSpanEventRecorder();
recorder.recordApi(methodDescriptor);
String cacheName = ((CacheNameAccessor)target)._$PINPOINT$_getCacheName();
if (cacheName != null) {
recorder.recordDestinationId(cacheName);
if (target instanceof CacheNameAccessor) {
final String cacheName = ((CacheNameAccessor) target)._$PINPOINT$_getCacheName();
if (cacheName != null) {
recorder.recordDestinationId(cacheName);
}
}
recorder.recordServiceType(ArcusConstants.ARCUS_EHCACHE_FUTURE_GET);
@@ -37,7 +37,9 @@ public class FutureSetOperationInterceptor implements AroundInterceptor {
logger.beforeInterceptor(target, args);
}
((OperationAccessor)target)._$PINPOINT$_setOperation((Operation)args[0]);
if (target instanceof OperationAccessor) {
((OperationAccessor) target)._$PINPOINT$_setOperation((Operation) args[0]);
}
}
@Override
@@ -38,8 +38,11 @@ public class SetCacheManagerInterceptor implements AroundInterceptor {
logger.beforeInterceptor(target, args);
}
String serviceCode = ((ServiceCodeAccessor)args[0])._$PINPOINT$_getServiceCode();
((ServiceCodeAccessor)target)._$PINPOINT$_setServiceCode(serviceCode);
final Object serviceCodeObject = args[0];
if (serviceCodeObject instanceof ServiceCodeAccessor && target instanceof ServiceCodeAccessor) {
String serviceCode = ((ServiceCodeAccessor) serviceCodeObject)._$PINPOINT$_getServiceCode();
((ServiceCodeAccessor) target)._$PINPOINT$_setServiceCode(serviceCode);
}
}
@IgnoreMethod
@@ -58,6 +58,7 @@ public class HttpRequestExecuteAsyncMethodInnerClassConstructorInterceptor imple
final InterceptorScopeInvocation transaction = interceptorScope.getCurrentInvocation();
if (transaction != null && transaction.getAttachment() != null) {
final AsyncTraceId asyncTraceId = (AsyncTraceId) transaction.getAttachment();
// type check validate();
((AsyncTraceIdAccessor)target)._$PINPOINT$_setAsyncTraceId(asyncTraceId);
// clear.
transaction.removeAttachment();
@@ -152,6 +152,7 @@ public class DefaultClientExchangeHandlerImplStartMethodInterceptor implements A
// set asynchronous trace
final AsyncTraceId asyncTraceId = trace.getAsyncTraceId();
recorder.recordNextAsyncId(asyncTraceId.getAsyncId());
// check type isAsynchronousInvocation()
((AsyncTraceIdAccessor)((ResultFutureGetter)target)._$PINPOINT$_getResultFuture())._$PINPOINT$_setAsyncTraceId(asyncTraceId);
if (isDebug) {
logger.debug("Set asyncTraceId metadata {}", asyncTraceId);
@@ -62,6 +62,7 @@ public class HttpRequestExecutorDoSendRequestAndDoReceiveResponseMethodIntercept
InterceptorScopeInvocation invocation = interceptorScope.getCurrentInvocation();
if(invocation != null && invocation.getAttachment() != null) {
// TODO type check
HttpCallContext callContext = (HttpCallContext) invocation.getAttachment();
if(methodDescriptor.getMethodName().equals("doSendRequest")) {
callContext.setWriteBeginTime(System.currentTimeMillis());
@@ -85,6 +86,7 @@ public class HttpRequestExecutorDoSendRequestAndDoReceiveResponseMethodIntercept
InterceptorScopeInvocation invocation = interceptorScope.getCurrentInvocation();
if(invocation != null && invocation.getAttachment() != null) {
// TODO type check
HttpCallContext callContext = (HttpCallContext) invocation.getAttachment();
if(methodDescriptor.getMethodName().equals("doSendRequest")) {
callContext.setWriteEndTime(System.currentTimeMillis());
@@ -79,10 +79,16 @@ public class HttpURLConnectionInterceptor implements AroundInterceptor {
return;
}
HttpURLConnection request = (HttpURLConnection) target;
boolean connected = ((ConnectedGetter)target)._$PINPOINT$_isConnected();
boolean connecting = (target instanceof ConnectingGetter) && ((ConnectingGetter)target)._$PINPOINT$_isConnecting();
final HttpURLConnection request = (HttpURLConnection) target;
boolean connected = false;
if (target instanceof ConnectedGetter) {
connected = ((ConnectedGetter) target)._$PINPOINT$_isConnected();
}
boolean connecting = false;
if (target instanceof ConnectingGetter) {
connecting = ((ConnectingGetter) target)._$PINPOINT$_isConnecting();
}
if (connected || connecting) {
return;
@@ -14,6 +14,8 @@ import java.lang.reflect.Method;
@TargetMethod(name = "handle", paramTypes = { "org.eclipse.jetty.server.AbstractHttpConnection" })
public class Jetty8ServerHandleInterceptor extends AbstractServerHandleInterceptor {
private volatile Method getRequestMethod;
public Jetty8ServerHandleInterceptor(TraceContext traceContext, MethodDescriptor descriptor, Filter<String> excludeFilter) {
super(traceContext, descriptor, excludeFilter);
}
@@ -23,7 +25,7 @@ public class Jetty8ServerHandleInterceptor extends AbstractServerHandleIntercept
try {
Object object = args[0];
Method getRequestMethod = getMethod(object.getClass(), "getRequest");
Method getRequestMethod = getGetRequestMethod(object.getClass());
Request request = (Request) getRequestMethod.invoke(object);
return request;
} catch (Exception e) {
@@ -33,24 +35,26 @@ public class Jetty8ServerHandleInterceptor extends AbstractServerHandleIntercept
return null;
}
private Method getMethod(Class clazz, String methodName) {
Class targetClazz = clazz;
while (targetClazz != null) {
try {
Method method = targetClazz.getMethod(methodName);
if (method != null) {
return method;
}
} catch (NoSuchMethodException e) {
Class superclass = targetClazz.getSuperclass();
if (superclass != null) {
targetClazz = superclass;
}
}
private Method getGetRequestMethod(Class clazz) {
if (getRequestMethod != null) {
return getRequestMethod;
}
synchronized (this) {
if (getRequestMethod != null) {
return getRequestMethod;
}
try {
Method findedMethod = clazz.getMethod("getRequest");
if (findedMethod != null) {
getRequestMethod = findedMethod;
return getRequestMethod;
}
} catch (NoSuchMethodException e) {
logger.warn(e.getMessage(), e);
}
}
return null;
};
@@ -19,7 +19,11 @@ public class ServerHandleInterceptor extends AbstractServerHandleInterceptor {
@Override
protected Request getRequest(Object[] args) {
final HttpChannel<?> channel = (HttpChannel<?>) args[0];
final Object httpChannelObject = args[0];
if (!(httpChannelObject instanceof HttpChannel)) {
return null;
}
final HttpChannel<?> channel = (HttpChannel<?>) httpChannelObject;
final Request request = channel.getRequest();
return request;
}
@@ -69,8 +69,7 @@ public class ParsingInterceptor implements AroundInterceptor {
recorder.recordServiceType(JsonLibConstants.SERVICE_TYPE);
recorder.recordApi(descriptor);
recorder.recordException(throwable);
if (args.length > 0 && args[0] instanceof String) {
if (args != null && args.length > 0 && args[0] instanceof String) {
recorder.recordAttribute(JsonLibConstants.JSON_LIB_ANNOTATION_KEY_JSON_LENGTH, ((String) args[0]).length());
}
} finally {
@@ -67,6 +67,7 @@ public class DispatcherEnqueueMethodInterceptor implements AroundInterceptor {
recorder.recordNextAsyncId(asyncTraceId.getAsyncId());
// set async id.
// AsyncTraceIdAccessor typeCheck validate();
((AsyncTraceIdAccessor)args[0])._$PINPOINT$_setAsyncTraceId(asyncTraceId);
if (isDebug) {
logger.debug("Set asyncTraceId metadata {}", asyncTraceId);
@@ -104,6 +104,7 @@ public class HttpEngineReadResponseMethodInterceptor implements AroundIntercepto
recorder.recordException(throwable);
if (statusCode) {
// type check validate();
Response response = ((UserResponseGetter) target)._$PINPOINT$_getUserResponse();
if (response != null) {
recorder.recordAttribute(AnnotationKey.HTTP_STATUS_CODE, response.code());
@@ -143,7 +143,7 @@ public class HttpEngineSendRequestMethodInterceptor implements AroundInterceptor
SpanEventRecorder recorder = trace.currentSpanEventRecorder();
recorder.recordApi(methodDescriptor);
recorder.recordException(throwable);
// typeCheck validate();
Request request = ((UserRequestGetter) target)._$PINPOINT$_getUserRequest();
if (request != null) {
try {
@@ -60,6 +60,9 @@ public class RequestBuilderBuildMethodBackwardCompatibilityInterceptor implement
}
try {
if (!(target instanceof Request.Builder)) {
return;
}
final Request.Builder builder = ((Request.Builder) target);
if (!trace.canSampled()) {
if (isDebug) {
@@ -58,6 +58,9 @@ public class RequestBuilderBuildMethodInterceptor implements AroundInterceptor {
}
try {
if(!(target instanceof Request.Builder)) {
return;
}
final Request.Builder builder = ((Request.Builder) target);
if (!trace.canSampled()) {
if (isDebug) {
@@ -56,9 +56,6 @@ public class PostgreSQLConnectionCreateInterceptor implements AroundInterceptor
return;
}
for(Object o:args) {
logger.info("test: "+o.toString());
}
Properties properties = getProperties(args[3]);
@@ -39,8 +39,11 @@ public class PostgreSqlPreparedStatementCreateInterceptor1 extends SpanEventSimp
@Override
public void doInBeforeTrace(SpanEventRecorder recorder, Object target, Object[] args) {
DatabaseInfo databaseInfo = (target instanceof DatabaseInfoAccessor) ? ((DatabaseInfoAccessor)target)._$PINPOINT$_getDatabaseInfo() : null;
DatabaseInfo databaseInfo = null;
if (target instanceof DatabaseInfoAccessor) {
databaseInfo = ((DatabaseInfoAccessor)target)._$PINPOINT$_getDatabaseInfo();
}
if (databaseInfo == null) {
databaseInfo = UnKnownDatabaseInfo.INSTANCE;
}
@@ -56,7 +59,7 @@ public class PostgreSqlPreparedStatementCreateInterceptor1 extends SpanEventSimp
if (success) {
if (target instanceof DatabaseInfoAccessor) {
// set databaseInfo to PreparedStatement only when preparedStatement is generated successfully.
DatabaseInfo databaseInfo = ((DatabaseInfoAccessor)target)._$PINPOINT$_getDatabaseInfo();
final DatabaseInfo databaseInfo = ((DatabaseInfoAccessor)target)._$PINPOINT$_getDatabaseInfo();
if (databaseInfo != null) {
if (result instanceof DatabaseInfoAccessor) {
((DatabaseInfoAccessor)result)._$PINPOINT$_setDatabaseInfo(databaseInfo);
@@ -67,7 +70,7 @@ public class PostgreSqlPreparedStatementCreateInterceptor1 extends SpanEventSimp
// 1. Don't check traceContext. preparedStatement can be created in other thread.
// 2. While sampling is active, the thread which creates preparedStatement could not be a sampling target. So record sql anyway.
String sql = (String) args[0];
ParsingResult parsingResult = traceContext.parseSql(sql);
final ParsingResult parsingResult = traceContext.parseSql(sql);
if (parsingResult != null) {
((ParsingResultAccessor)result)._$PINPOINT$_setParsingResult(parsingResult);
} else {
@@ -42,8 +42,11 @@ public class PostgreSqlPreparedStatementCreateInterceptor2 extends SpanEventSimp
@Override
public void doInBeforeTrace(SpanEventRecorder recorder, Object target, Object[] args) {
DatabaseInfo databaseInfo = (target instanceof DatabaseInfoAccessor) ? ((DatabaseInfoAccessor)target)._$PINPOINT$_getDatabaseInfo() : null;
DatabaseInfo databaseInfo = null;
if (target instanceof DatabaseInfoAccessor) {
databaseInfo = ((DatabaseInfoAccessor)target)._$PINPOINT$_getDatabaseInfo();
}
if (databaseInfo == null) {
databaseInfo = UnKnownDatabaseInfo.INSTANCE;
}
@@ -39,8 +39,11 @@ public class PostgreSqlPreparedStatementCreateInterceptor3 extends SpanEventSimp
@Override
public void doInBeforeTrace(SpanEventRecorder recorder, Object target, Object[] args) {
DatabaseInfo databaseInfo = (target instanceof DatabaseInfoAccessor) ? ((DatabaseInfoAccessor)target)._$PINPOINT$_getDatabaseInfo() : null;
DatabaseInfo databaseInfo = null;
if (target instanceof DatabaseInfoAccessor) {
databaseInfo = ((DatabaseInfoAccessor)target)._$PINPOINT$_getDatabaseInfo();
}
if (databaseInfo == null) {
databaseInfo = UnKnownDatabaseInfo.INSTANCE;
}
@@ -93,9 +93,11 @@ public class ProcessFunctionProcessInterceptor implements AroundInterceptor {
logger.afterInterceptor(target, args, result, throwable);
}
// Unset server marker
Object iprot = args[1];
if (validateInputProtocol(iprot)) {
((ServerMarkerFlagFieldAccessor)iprot)._$PINPOINT$_setServerMarkerFlag(false);
if (args.length != 4) {
Object iprot = args[1];
if (validateInputProtocol(iprot)) {
((ServerMarkerFlagFieldAccessor) iprot)._$PINPOINT$_setServerMarkerFlag(false);
}
}
}
@@ -74,13 +74,15 @@ public abstract class FrameBufferTransportInjectInterceptor implements AroundInt
// Retrieve the socket information from the trans_ field of the given instance.
protected final Socket getRootSocket(Object target) {
TNonblockingTransport inTrans = ((TNonblockingTransportFieldGetter)target)._$PINPOINT$_getTNonblockingTransport();
if (inTrans != null) {
if (inTrans instanceof SocketFieldAccessor) {
return ((SocketFieldAccessor)inTrans)._$PINPOINT$_getSocket();
} else {
if (isDebug) {
logger.debug("Invalid target object. Need field accessor({}).", SocketFieldAccessor.class.getName());
if (target instanceof TNonblockingTransportFieldGetter) {
TNonblockingTransport inTrans = ((TNonblockingTransportFieldGetter) target)._$PINPOINT$_getTNonblockingTransport();
if (inTrans != null) {
if (inTrans instanceof SocketFieldAccessor) {
return ((SocketFieldAccessor) inTrans)._$PINPOINT$_getSocket();
} else {
if (isDebug) {
logger.debug("Invalid target object. Need field accessor({}).", SocketFieldAccessor.class.getName());
}
}
}
}
@@ -47,8 +47,9 @@ public class ConnectorInitializeInterceptor implements AroundInterceptor {
if (isDebug) {
logger.afterInterceptor(target, args, result, throwable);
}
Connector connector = (Connector)target;
this.traceContext.getServerMetaDataHolder().addConnector(connector.getProtocol(), connector.getPort());
if (target instanceof Connector) {
final Connector connector = (Connector) target;
this.traceContext.getServerMetaDataHolder().addConnector(connector.getProtocol(), connector.getPort());
}
}
}
@@ -77,6 +77,7 @@ public class RequestStartAsyncInterceptor implements AroundInterceptor {
final AsyncTraceId asyncTraceId = trace.getAsyncTraceId();
recorder.recordNextAsyncId(asyncTraceId.getAsyncId());
// result is BasicFuture
// type check validate()
((AsyncTraceIdAccessor)result)._$PINPOINT$_setAsyncTraceId(asyncTraceId);
if (isDebug) {
logger.debug("Set asyncTraceId metadata {}", asyncTraceId);
@@ -16,13 +16,12 @@
package com.navercorp.pinpoint.profiler.sender;
import java.util.List;
import java.util.concurrent.ThreadFactory;
import com.navercorp.pinpoint.common.util.PinpointThreadFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.navercorp.pinpoint.common.util.PinpointThreadFactory;
import java.util.List;
import java.util.concurrent.ThreadFactory;
/**
* @author Taejin Koo
@@ -37,8 +36,8 @@ public class StandbySpanStreamDataSendWorker implements Runnable {
private final StandbySpanStreamDataStorage standbySpanStreamDataStorage;
private final long blockTime;
private final Thread workerThread;
private final Object lock = new Object();
private Thread workerThread;
private boolean isStarted = false;
@@ -50,34 +49,34 @@ public class StandbySpanStreamDataSendWorker implements Runnable {
this.flushHandler = flushHandler;
this.standbySpanStreamDataStorage = dataStorage;
this.blockTime = blockTime;
final ThreadFactory threadFactory = new PinpointThreadFactory(this.getClass().getSimpleName(), true);
this.workerThread = threadFactory.newThread(this);
}
public void start() {
logger.info("{} initialization started.", this.getClass().getSimpleName());
final ThreadFactory threadFactory = new PinpointThreadFactory(this.getClass().getSimpleName(), true);
this.workerThread = threadFactory.newThread(this);
logger.info("start() started.");
if (!workerThread.isAlive()) {
this.isStarted = true;
this.workerThread.start();
logger.info("{} initialization completed.", this.getClass().getSimpleName());
logger.info("start() completed.");
} else {
logger.info("{} already started.", this.getClass().getSimpleName());
logger.info("start() failed. caused:already started.", this.getClass().getSimpleName());
}
}
public void stop() {
logger.info("{} destroying started.", this.getClass().getSimpleName());
logger.info("stop() started.");
this.isStarted = false;
long startTimeMillis = System.currentTimeMillis();
long maxWaitTimeMillis = 3000;
while (this.workerThread.isAlive()) {
this.workerThread.interrupt();
while (workerThread != null && workerThread.isAlive()) {
workerThread.interrupt();
try {
this.workerThread.join(100L);
workerThread.join(100L);
if (System.currentTimeMillis() - startTimeMillis > maxWaitTimeMillis) {
break;
@@ -86,7 +85,7 @@ public class StandbySpanStreamDataSendWorker implements Runnable {
}
}
logger.info("{} destroying completed.", this.getClass().getSimpleName());
logger.info("stop() completed.");
}
boolean addStandbySpanStreamData(SpanStreamSendData standbySpanStreamData) {
@@ -53,7 +53,7 @@ public class StandbySpanStreamDataStorage {
return false;
}
if (standbySpanStreamData.getAvailableBufferCapacity() > 0 && standbySpanStreamData.getAvailableBufferCapacity() > 0) {
if (standbySpanStreamData.getAvailableBufferCapacity() > 0 && standbySpanStreamData.getAvailableGatheringComponentsCount() > 0) {
if (priorityQueue.size() >= capacity) {
return false;
}
@@ -76,7 +76,9 @@ public class AgentInfoSenderTest {
try {
agentInfoSender.start();
Thread.sleep(1000L);
while (requestCount.get() < 1) {
Thread.sleep(1000L);
}
} finally {
closeAll(serverAcceptor, agentInfoSender, pinpointClient, clientFactory);
}
@@ -103,7 +105,9 @@ public class AgentInfoSenderTest {
try {
agentInfoSender.start();
Thread.sleep(agentInfoSendRetryIntervalMs * expectedTriesUntilSuccess);
while (requestCount.get() < expectedTriesUntilSuccess) {
Thread.sleep(1000L);
}
} finally {
closeAll(serverAcceptor, agentInfoSender, pinpointClient, socketFactory);
}
@@ -116,7 +120,7 @@ public class AgentInfoSenderTest {
final AtomicInteger requestCount = new AtomicInteger();
final AtomicInteger successCount = new AtomicInteger();
final long agentInfoSendRetryIntervalMs = 100L;
final int expectedTriesUntilSuccess = 15;
final int expectedTriesUntilSuccess = AgentInfoSender.DEFAULT_MAX_TRY_COUNT_PER_ATTEMPT * 5;
ResponseServerMessageListener serverListener = new ResponseServerMessageListener(requestCount, successCount, expectedTriesUntilSuccess);
@@ -130,7 +134,9 @@ public class AgentInfoSenderTest {
try {
agentInfoSender.start();
Thread.sleep(agentInfoSendRetryIntervalMs * expectedTriesUntilSuccess);
while (requestCount.get() < expectedTriesUntilSuccess) {
Thread.sleep(1000L);
}
} finally {
closeAll(serverAcceptor, agentInfoSender, pinpointClient, socketFactory);
}
@@ -140,15 +146,17 @@ public class AgentInfoSenderTest {
@Test
public void agentInfoShouldRetryUntilAttemptsAreExhaustedWhenRefreshing() throws InterruptedException {
final AtomicInteger requestCount = new AtomicInteger();
final AtomicInteger successServerRequestCount = new AtomicInteger();
final AtomicInteger failServerRequestCount = new AtomicInteger();
final AtomicInteger successCount = new AtomicInteger();
final long agentInfoSendRetryIntervalMs = 100L;
final long agentInfoSendRefreshIntervalMs = 1000L;
final int expectedTries = AgentInfoSender.DEFAULT_MAX_TRY_COUNT_PER_ATTEMPT + 1;
final int expectedSuccessServerTries = 1;
final int expectedFailServerTries = AgentInfoSender.DEFAULT_MAX_TRY_COUNT_PER_ATTEMPT;
final CountDownLatch agentReconnectLatch = new CountDownLatch(1);
ResponseServerMessageListener successServerListener = new ResponseServerMessageListener(requestCount, successCount);
ResponseServerMessageListener failServerListener = new ResponseServerMessageListener(requestCount, successCount, Integer.MAX_VALUE);
ResponseServerMessageListener successServerListener = new ResponseServerMessageListener(successServerRequestCount, successCount);
ResponseServerMessageListener failServerListener = new ResponseServerMessageListener(failServerRequestCount, successCount, Integer.MAX_VALUE);
PinpointServerAcceptor successServerAcceptor = createServerAcceptor(successServerListener);
PinpointServerAcceptor failServerAcceptor = null;
@@ -169,48 +177,83 @@ public class AgentInfoSenderTest {
.build();
try {
agentInfoSender.start();
Thread.sleep(agentInfoSendRetryIntervalMs);
while (successServerRequestCount.get() < expectedSuccessServerTries) {
Thread.sleep(agentInfoSendRetryIntervalMs);
}
successServerAcceptor.close();
// wait till agent reconnects
failServerAcceptor = createServerAcceptor(failServerListener);
// wait till agent reconnects
agentReconnectLatch.await();
Thread.sleep(agentInfoSendRefreshIntervalMs);
while (failServerRequestCount.get() < expectedFailServerTries) {
Thread.sleep(agentInfoSendRefreshIntervalMs);
}
failServerAcceptor.close();
} finally {
closeAll(failServerAcceptor, agentInfoSender, pinpointClient, socketFactory);
closeAll(null, agentInfoSender, pinpointClient, socketFactory);
}
assertEquals(1, successCount.get());
assertEquals(expectedTries, requestCount.get());
assertEquals(expectedSuccessServerTries, successServerRequestCount.get());
assertEquals(expectedFailServerTries, failServerRequestCount.get());
}
@Test
public void agentInfoShouldBeSentOnlyOnceEvenAfterReconnect() throws InterruptedException {
public void agentInfoShouldBeSentOnlyOnceEvenAfterReconnect() throws Exception {
final AtomicInteger requestCount = new AtomicInteger();
final AtomicInteger successCount = new AtomicInteger();
final AtomicInteger reconnectCount = new AtomicInteger();
final int expectedReconnectCount = 3;
final long agentInfoSendRetryIntervalMs = 100L;
final int maxTryCountPerAttempt = Integer.MAX_VALUE;
final CyclicBarrier reconnectEventBarrier = new CyclicBarrier(2);
ResponseServerMessageListener serverListener = new ResponseServerMessageListener(requestCount, successCount);
PinpointServerAcceptor serverAcceptor = createServerAcceptor(serverListener);
PinpointClientFactory clientFactory = createPinpointClientFactory();
PinpointClient pinpointClient = ClientFactoryUtils.createPinpointClient(HOST, PORT, clientFactory);
TcpDataSender dataSender = new TcpDataSender(pinpointClient);
dataSender.addReconnectEventListener(new PinpointClientReconnectEventListener() {
@Override
public void reconnectPerformed(PinpointClient client) {
reconnectCount.incrementAndGet();
try {
reconnectEventBarrier.await();
} catch (Exception e) {
// just fail
throw new RuntimeException(e);
}
}
});
AgentInfoSender agentInfoSender = new AgentInfoSender.Builder(dataSender, getAgentInfo())
.sendInterval(agentInfoSendRetryIntervalMs)
.maxTryPerAttempt(maxTryCountPerAttempt)
.build();
try {
// initial connect
agentInfoSender.start();
createAndDeleteServer(serverListener, 1000L);
Thread.sleep(500L);
createAndDeleteServer(serverListener, 1000L);
Thread.sleep(500L);
createAndDeleteServer(serverListener, 1000L);
while (requestCount.get() < 1) {
Thread.sleep(1000L);
}
serverAcceptor.close();
// reconnect
for (int i = 0; i < expectedReconnectCount; ++i) {
PinpointServerAcceptor reconnectServerAcceptor = createServerAcceptor(serverListener);
// wait for agent to reconnect
reconnectEventBarrier.await();
// wait to see if AgentInfo is sent again (it shouldn't)
Thread.sleep(1000L);
reconnectServerAcceptor.close();
reconnectEventBarrier.reset();
}
} finally {
closeAll(null, agentInfoSender, pinpointClient, clientFactory);
}
assertEquals(1, successCount.get());
assertEquals(expectedReconnectCount, reconnectCount.get());
}
@Test
@@ -218,7 +261,7 @@ public class AgentInfoSenderTest {
final AtomicInteger requestCount = new AtomicInteger();
final AtomicInteger successCount = new AtomicInteger();
final long agentInfoSendRetryIntervalMs = 100L;
final long agentInfoSendRefreshIntervalMs = 1000L;
final long agentInfoSendRefreshIntervalMs = 100L;
final int expectedRefreshCount = 5;
ResponseServerMessageListener serverListener = new ResponseServerMessageListener(requestCount, successCount);
@@ -236,7 +279,9 @@ public class AgentInfoSenderTest {
try {
agentInfoSender.start();
Thread.sleep(agentInfoSendRefreshIntervalMs * expectedRefreshCount);
while (requestCount.get() < expectedRefreshCount) {
Thread.sleep(1000L);
}
} finally {
closeAll(serverAcceptor, agentInfoSender, pinpointClient, socketFactory);
}
@@ -65,7 +65,6 @@ public class DefaultPinpointClientHandler extends SimpleChannelHandler implement
private long timeoutMillis = DEFAULT_TIMEOUTMILLIS;
private long pingDelay = DEFAULT_PING_DELAY;
private long handshakeRetryInterval = DEFAULT_ENABLE_WORKER_PACKET_DELAY;
private int maxHandshakeCount = DEFAULT_ENABLE_WORKER_PACKET_RETRY_COUNT;
private final Timer channelTimer;
@@ -79,20 +79,20 @@ public class PinpointClientHandshaker {
}
public void handshakeStart(Channel channel, Map<String, Object> handshakeData) {
logger.info("{} handshakeStart method started. channel:{}", simpleClassNameAndHashCodeString(), channel);
logger.info("{} handshakeStart() started. channel:{}", simpleClassNameAndHashCodeString(), channel);
if (channel == null) {
logger.warn("{} handshakeStart method failed. caused:channel may not be null.", simpleClassNameAndHashCodeString());
logger.warn("{} handshakeStart() failed. caused:channel may not be null.", simpleClassNameAndHashCodeString());
return;
}
if (!channel.isConnected()) {
logger.warn("{} handshakeStart method failed. caused:channel is not connected.", simpleClassNameAndHashCodeString());
logger.warn("{} handshakeStart() failed. caused:channel is not connected.", simpleClassNameAndHashCodeString());
return;
}
if (!state.compareAndSet(STATE_INIT, STATE_STARTED)) {
logger.warn("{} handshakeStart method failed. caused:unexpected state.", simpleClassNameAndHashCodeString());
logger.warn("{} handshakeStart() failed. caused:unexpected state.", simpleClassNameAndHashCodeString());
return;
}
@@ -104,14 +104,14 @@ public class PinpointClientHandshaker {
}
if (handshakeJob == null) {
logger.warn("{} handshakeStart method failed. caused:handshakeJob may not be null.", simpleClassNameAndHashCodeString());
logger.warn("{} handshakeStart() failed. caused:handshakeJob may not be null.", simpleClassNameAndHashCodeString());
handshakeAbort();
return;
}
handshake(handshakeJob);
reserveHandshake(handshakeJob);
logger.info("{} handshakeStart method completed. channel:{}, data:{}", simpleClassNameAndHashCodeString(), channel, handshakeData);
logger.info("{} handshakeStart() completed. channel:{}, data:{}", simpleClassNameAndHashCodeString(), channel, handshakeData);
}
private HandshakeJob createHandshakeJob(Channel channel, Map<String, Object> handshakeData) throws ProtocolException {
@@ -136,22 +136,22 @@ public class PinpointClientHandshaker {
private void reserveHandshake(HandshakeJob handshake) {
if (handshakeCount.get() >= maxHandshakeCount) {
logger.warn("{} reserveHandshake method failed. caused:Retry count is over({}/{}).", simpleClassNameAndHashCodeString(), handshakeCount.get(), maxHandshakeCount);
logger.warn("{} reserveHandshake() failed. caused:Retry count is over({}/{}).", simpleClassNameAndHashCodeString(), handshakeCount.get(), maxHandshakeCount);
handshakeAbort();
return;
}
logger.debug("{} reserveHandshake method started.", simpleClassNameAndHashCodeString());
logger.debug("{} reserveHandshake() started.", simpleClassNameAndHashCodeString());
this.handshakerTimer.newTimeout(handshake, retryInterval, TimeUnit.MILLISECONDS);
}
public boolean handshakeComplete(ControlHandshakeResponsePacket responsePacket) {
logger.info("{} handshakeComplete method started. responsePacket:{}", simpleClassNameAndHashCodeString(), responsePacket);
logger.info("{} handshakeComplete() started. responsePacket:{}", simpleClassNameAndHashCodeString(), responsePacket);
synchronized (lock) {
if (!this.state.compareAndSet(STATE_STARTED, STATE_FINISHED)) {
// state can be 0 or 2.
logger.info("{} handshakeComplete method failed. caused:unexpected state.", simpleClassNameAndHashCodeString());
logger.info("{} handshakeComplete() failed. caused:unexpected state.", simpleClassNameAndHashCodeString());
this.state.set(STATE_FINISHED);
return false;
}
@@ -164,7 +164,7 @@ public class PinpointClientHandshaker {
ClusterOption clusterOption = getClusterOption(handshakeResponse);
this.clusterOption.compareAndSet(null, clusterOption);
logger.info("{} handshakeComplete method completed. handshake-response:{}.", simpleClassNameAndHashCodeString(), handshakeResponse);
logger.info("{} handshakeComplete() completed. handshake-response:{}.", simpleClassNameAndHashCodeString(), handshakeResponse);
return true;
}
}
@@ -235,7 +235,7 @@ public class PinpointClientHandshaker {
}
public void handshakeAbort() {
logger.info("{} handshakeAbort method started.", simpleClassNameAndHashCodeString());
logger.info("{} handshakeAbort() started.", simpleClassNameAndHashCodeString());
if (!state.compareAndSet(STATE_STARTED, STATE_FINISHED)) {
// state can be 0 or 2.
@@ -243,7 +243,7 @@ public class PinpointClientHandshaker {
this.state.set(STATE_FINISHED);
return;
}
logger.info("{} handshakeAbort method completed.", simpleClassNameAndHashCodeString());
logger.info("{} handshakeAbort() completed.", simpleClassNameAndHashCodeString());
}
public boolean isRun() {
@@ -265,7 +265,7 @@ public class PinpointClientHandshaker {
}
private boolean isFinished(int currentState) {
return this.state.get() == STATE_FINISHED;
return currentState == STATE_FINISHED;
}
private int currentState() {
@@ -47,7 +47,7 @@ public final class ClientFactoryUtils {
LOGGER.info("tcp connect success. remote:{}", connectAddress);
return pinpointClient;
} catch (PinpointSocketException e) {
LOGGER.warn("tcp connect fail. retmoe:{} try reconnect, retryCount:{}", connectAddress, i);
LOGGER.warn("tcp connect fail. remote:{} try reconnect, retryCount:{}", connectAddress, i);
}
}
LOGGER.warn("change background tcp connect mode remote:{} ", connectAddress);
+3 -1
View File
@@ -1,3 +1,5 @@
<FindBugsFilter>
<Match>
<Package name="~com.navercorp.pinpoint.thrift.dto.*" />
</Match>
</FindBugsFilter>
@@ -79,9 +79,6 @@ public class ChunkHeaderTBaseDeserializer {
}
final int validate = validate(header);
if (validate == HeaderUtils.PASS_L4) {
return new L4Packet(header);
}
TBase<?, ?> base = locator.tBaseLookup(header.getType());
base.read(protocol);
@@ -65,9 +65,6 @@ public class HeaderTBaseDeserializer {
base.read(protocol);
return base;
}
if (validate == HeaderUtils.PASS_L4) {
return new L4Packet(header);
}
throw new IllegalStateException("invalid validate " + validate);
} finally {
trans.clear();
@@ -87,8 +84,6 @@ public class HeaderTBaseDeserializer {
TBase<?, ?> base = locator.tBaseLookup(header.getType());
base.read(protocol);
tBaseList.add(base);
} else if (validate == HeaderUtils.PASS_L4) {
tBaseList.add(new L4Packet(header));
} else {
throw new IllegalStateException("invalid validate " + validate);
}
@@ -21,8 +21,6 @@ package com.navercorp.pinpoint.thrift.io;
*/
final class HeaderUtils {
public static final int OK = Header.SIGNATURE;
// TODO Maybe PASS_L4 should be a modifiable variable
public static final int PASS_L4 = 85; // Udp
public static final int FAIL = 0;
private HeaderUtils() {
@@ -31,9 +29,7 @@ final class HeaderUtils {
public static int validateSignature(byte signature) {
if (Header.SIGNATURE == signature) {
return OK;
} else if (PASS_L4 == signature) {
return PASS_L4;
}
}
return FAIL;
}
}
@@ -1,79 +0,0 @@
/*
* Copyright 2014 NAVER Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.navercorp.pinpoint.thrift.io;
import org.apache.thrift.TBase;
import org.apache.thrift.TException;
import org.apache.thrift.TFieldIdEnum;
import org.apache.thrift.protocol.TProtocol;
/**
* @author emeroad
*/
public class L4Packet implements org.apache.thrift.TBase<L4Packet, org.apache.thrift.TFieldIdEnum>, java.io.Serializable, Cloneable, Comparable<L4Packet> {
private final transient Header header;
public L4Packet(Header header) {
this.header = header;
}
public Header getHeader() {
return header;
}
@Override
public void read(TProtocol tProtocol) throws TException {
}
@Override
public void write(TProtocol tProtocol) throws TException {
}
@Override
public TFieldIdEnum fieldForId(int i) {
return null;
}
@Override
public boolean isSet(TFieldIdEnum tFieldIdEnum) {
return false;
}
@Override
public Object getFieldValue(TFieldIdEnum tFieldIdEnum) {
return null;
}
@Override
public void setFieldValue(TFieldIdEnum tFieldIdEnum, Object o) {
}
@Override
public TBase deepCopy() {
return null;
}
@Override
public void clear() {
}
@Override
public int compareTo(L4Packet o) {
return 0;
}
}
@@ -127,7 +127,7 @@ public class UserGroupController {
@RequestMapping(value = "/member", method = RequestMethod.POST)
@ResponseBody
public Map<String, String> insertUserGroupMember(@RequestBody UserGroupMember userGroupMember) {
if (StringUtils.isEmpty(userGroupMember.getMemberId()) || StringUtils.isEmpty(userGroupMember.getMemberId())) {
if (StringUtils.isEmpty(userGroupMember.getMemberId()) || StringUtils.isEmpty(userGroupMember.getUserGroupId())) {
Map<String, String> result = new HashMap<>();
result.put("errorCode", "500");
result.put("errorMessage", "there is not userGroupId or memberId in params to insert user group member");
@@ -27,7 +27,8 @@
cst: {
periodTypes: ['5m', '20m', '1h', '3h', '6h', '12h', '1d', '2d'],
depthList: [ 1, 2, 3, 4, 5, 6, 7, 8],
maxFavorite: 5000
maxFavorite: 5000,
maxPeriod: 2
}
});
@@ -63,6 +64,9 @@
this.getPeriodTypes = function() {
return cfg.cst.periodTypes;
};
this.getMaxPeriod = function() {
return cfg.cst.maxPeriod;
}
function loadPreference() {
@@ -1,48 +0,0 @@
{
"name": "angular-motion",
"description": "AngularMotion - Fancy CSS3 animations for AngularJS 1.2+",
"version": "0.3.2",
"keywords": [
"angular",
"animation"
],
"homepage": "https://github.com/mgcrea/angular-motion",
"bugs": "https://github.com/mgcrea/angular-motion/issues",
"author": {
"name": "Olivier Louvignes",
"email": "olivier@mg-crea.com",
"url": "https://github.com/mgcrea"
},
"repository": {
"type": "git",
"url": "https://github.com/mgcrea/angular-motion.git"
},
"licenses": [
{
"type": "MIT"
}
],
"main": [
"dist/angular-motion.min.css"
],
"dependencies": {
"angular": "~1.2.10",
"angular-animate": "~1.2.10"
},
"devDependencies": {
"bootstrap": ">=3.0.0",
"angular-mocks": "~1.2.10",
"angular-strap": "~2.0.0",
"fastclick": "~0.6.11"
},
"_release": "0.3.2",
"_resolution": {
"type": "version",
"tag": "v0.3.2",
"commit": "077d33b040bc060599aaee8f417594bb6c7e9a30"
},
"_source": "git://github.com/mgcrea/angular-motion.git",
"_target": "~0.3.2",
"_originalSource": "angular-motion",
"_direct": true
}
@@ -1,13 +0,0 @@
# http://editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
@@ -1,11 +0,0 @@
.dev/
.tmp/
.DS_Store
*.sublime-project
*.sublime-workspace
bower_components/
node_modules/
/pages/
/docs/
/test/coverage/
!.gitignore
@@ -1,28 +0,0 @@
{
"node": true,
"browser": true,
"devel": false,
"esnext": true,
"bitwise": true,
"camelcase": true,
"curly": false,
"eqeqeq": true,
"immed": true,
"indent": 2,
"latedef": true,
"newcap": true,
"noarg": true,
"quotmark": "single",
"regexp": true,
"undef": true,
"unused": false,
"strict": true,
"trailing": true,
"smarttabs": true,
"boss": false,
"eqnull": false,
"expr": true,
"globals": {
"angular": false
}
}
@@ -1,15 +0,0 @@
language: node_js
node_js:
- "0.10"
before_script:
- export DISPLAY=:99.0
- export PHANTOMJS_BIN=/usr/local/phantomjs/bin/phantomjs
- sh -e /etc/init.d/xvfb start
- sleep 3 # give xvfb some time to start
- npm install -gq grunt-cli bower coveralls
- bower install --dev
- date --rfc-2822
script:
- grunt jshint test build
@@ -1,28 +0,0 @@
# Contributing
## Important notes
Please don't edit files in the `dist` subdirectory as they are generated via Grunt. You'll find source code in the `src` subdirectory!
### Code style
Regarding code style like indentation and whitespace, **follow the conventions you see used in the source already.**
## Modifying the code
First, ensure that you have the latest [Node.js](http://nodejs.org/) and [npm](http://npmjs.org/) installed.
Test that Grunt's CLI and Bower are installed by running `grunt --version` and `bower --version`. If the commands aren't found, run `npm install -g grunt-cli bower`. For more information about installing the tools, see the [getting started with Grunt guide](http://gruntjs.com/getting-started) or [bower.io](http://bower.io/) respectively.
1. Fork and clone the repo.
1. Run `npm install` to install all build dependencies (including Grunt).
1. Run `bower install` to install the front-end dependencies.
1. Run `grunt` to grunt this project.
Assuming that you don't see any red, you're ready to go. Just be sure to run `grunt` after making any changes, to ensure that nothing is broken.
## Submitting pull requests
1. Create a new branch, please don't work in your `master` branch directly.
1. Add failing tests for the change you want to make. Run `grunt` to see the tests fail.
1. Fix stuff.
1. Run `grunt` to see if the tests pass. Repeat steps 2-4 until done.
1. Update the documentation to reflect any changes.
1. Push to your fork and submit a pull request.
@@ -1,475 +0,0 @@
'use strict';
// # Globbing
// for performance reasons we're only matching one level down:
// 'test/spec/{,*/}*.js'
// use this if you want to recursively match all subfolders:
// 'test/spec/**/*.js'
module.exports = function (grunt) {
// Load grunt tasks automatically
require('load-grunt-tasks')(grunt);
// Time how long tasks take. Can help when optimizing build times
// require('time-grunt')(grunt);
// Define the configuration for all the tasks
grunt.initConfig({
// Project settings
pkg: require('./package.json'),
bower: require('./bower.json'),
yo: {
src: 'src',
dist: 'dist',
docs: 'docs',
pages: 'pages'
},
// Project meta
meta: {
banner: '/**\n' +
' * <%= pkg.name %>\n' +
' * @version v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %>\n' +
' * @link <%= pkg.homepage %>\n' +
' * @author <%= pkg.author.name %> <<%= pkg.author.email %>>\n' +
' * @license MIT License, http://www.opensource.org/licenses/MIT\n' +
' */\n'
},
// Watches files for changes and runs tasks based on the changed files
watch: {
styles: {
options: {
spawn: false
},
files: ['src/{,*/}*.less', 'docs/styles/{,*/}*.less'],
tasks: ['less:dev', 'autoprefixer']
},
gruntfile: {
files: ['Gruntfile.js']
},
livereload: {
options: {
livereload: '<%= connect.options.livereload %>'
},
files: [
'{docs,.dev,.tmp,<%= yo.src %>}/{,*/}{,docs/}*.html',
'{docs,.dev,.tmp,<%= yo.src %>}/{,*/}*.css',
'{docs,.dev,.tmp,<%= yo.src %>}/{,*/}*.js',
'{docs,<%= yo.src %>}/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
]
}
},
// The actual grunt server settings
connect: {
options: {
port: 9000,
hostname: '0.0.0.0',
livereload: 35729
},
livereload: {
options: {
open: true,
base: ['docs', '.dev', '.tmp', '<%= yo.src %>']
}
},
test: {
options: {
port: 9001,
base: ['.tmp', 'test', '<%= yo.src %>']
}
},
dist: {
options: {
base: '<%= yo.dist %>'
}
}
},
// Make sure code styles are up to par and there are no obvious mistakes
jshint: {
options: {
jshintrc: '.jshintrc',
reporter: require('jshint-stylish')
},
all: [
'Gruntfile.js',
'<%= yo.src %>/scripts/{,*/}*.js'
],
test: {
options: {
jshintrc: 'test/.jshintrc'
},
src: ['test/spec/{,*/}*.js']
}
},
// Empties folders to start fresh
clean: {
dist: {
files: [{
dot: true,
src: [
'.tmp',
'<%= yo.dist %>/*',
'!<%= yo.dist %>/.git*'
]
}]
},
docs: {
files: [{
dot: true,
src: [
'.tmp',
'<%= yo.pages %>/*',
'!<%= yo.pages %>/.git*'
]
}]
},
server: '.tmp'
},
// Compile less stylesheets
less: {
dev: {
options: {
// dumpLineNumbers: 'comments',
},
files: [{
expand: true,
flatten: true,
cwd: '<%= yo.src %>/',
src: '{,*/}*.less',
dest: '.tmp/styles/modules/',
ext: '.css'
}, {
src: '<%= yo.src %>/{,*/}*.less',
dest: '.tmp/styles/<%= bower.name %>.css',
}]
},
dist: {
options: {
cleancss: true
},
files: [{
expand: true,
flatten: true,
cwd: '<%= yo.src %>/',
src: '{,*/}*.less',
dest: '.tmp/styles/modules/',
ext: '.min.css'
}, {
src: '<%= yo.src %>/{,*/}*.less',
dest: '.tmp/styles/<%= bower.name %>.min.css',
}]
},
docs: {
options: {
cleancss: false
},
files: [{
expand: true,
cwd: '<%= yo.docs %>/styles/',
src: '*.less',
dest: '.tmp/styles/',
ext: '.css'
}]
}
},
// Add vendor prefixed styles
autoprefixer: {
options: {
browsers: ['last 2 versions']
},
all: {
files: [{
expand: true,
cwd: '.tmp/styles/',
src: '{,*/}*.css',
dest: '.tmp/styles/'
}]
}
},
// Reads HTML for usemin blocks to enable smart builds that automatically
// concat, minify and revision files. Creates configurations in memory so
// additional tasks can operate on them
useminPrepare: {
html: '<%= yo.docs %>/index.html',
options: {
dest: '<%= yo.pages %>'
}
},
// Performs rewrites based on rev and the useminPrepare configuration
usemin: {
html: '<%= yo.pages %>/index.html',
css: ['<%= yo.pages %>/styles/{,*/}*.css'],
options: {
assetsDirs: ['<%= yo.pages %>', '<%= yo.pages %>/images']
}
},
// Embed static ngincludes
nginclude: {
docs: {
files: [{
src: '<%= yo.docs %>/index.html',
dest: '<%= yo.pages %>/index.html'
}],
options: {
assetsDirs: ['<%= yo.src %>', '<%= yo.docs %>']
}
}
},
// Minify html files
htmlmin: {
options: {
collapseWhitespace: true,
removeComments: false
},
docs: {
files: [{
expand: true,
cwd: '<%= yo.pages %>',
src: ['*.html'],//, 'views/{,*/}*.html'],
dest: '<%= yo.pages %>'
}]
}
},
// Copies remaining files to places other tasks can use
copy: {
dist: {
files: [{
expand: true,
cwd: '.tmp/styles/',
dest: '<%= yo.dist %>',
src: '{,*/}*.css'
}]
},
docs: {
files: [{
expand: true,
cwd: '<%= yo.docs %>/',
dest: '<%= yo.pages %>',
src: [
'images/*',
'1.0/**/*'
]
}]
}
},
// Run some tasks in parallel to speed up the build process
concurrent: {
docs: [
'less:docs',
'uglify:generated',
'cssmin:generated'
],
server: [
'less:dev'
],
test: [
'less:dev'
],
dist: [
'less:dist',
'imagemin',
'svgmin',
'htmlmin'
]
},
concat: {
// generated: {
// options: {
// banner: '(function(window, document, $, undefined) {\n\'use strict\';\n',
// footer: '\n})(window, document, window.jQuery);\n'
// }
// },
dist: {
options: {
// Replace all 'use strict' statements in the code with a single one at the top
banner: '(function(window, document, undefined) {\n\'use strict\';\n',
footer: '\n})(window, document);\n',
process: function(src, filepath) {
return '// Source: ' + filepath + '\n' +
src.replace(/(^|\n)[ \t]*('use strict'|"use strict");?\s*/g, '$1');
}
},
files: [{
src: ['<%= yo.src %>/module.js', '<%= yo.src %>/{,*/}*.js'],
dest: '<%= yo.dist %>/<%= pkg.name %>.js'
}, {
src: ['<%= yo.dist %>/modules/{,*/}*.tpl.js'],
dest: '<%= yo.dist %>/<%= pkg.name %>.tpl.js'
}]
},
banner: {
options: {
banner: '<%= meta.banner %>',
},
files: [{
expand: true,
cwd: '<%= yo.dist %>',
src: '{,*/}*.{js,css}',
dest: '<%= yo.dist %>'
}]
},
docs: {
options: {
banner: '<%= meta.banner %>',
},
files: [{
expand: true,
cwd: '<%= yo.pages %>',
src: ['scripts/{demo,docs,angular-strap}*', 'styles/{main}*'],
dest: '<%= yo.pages %>'
}]
}
},
// Allow the use of non-minsafe AngularJS files. Automatically makes it
// minsafe compatible so Uglify does not destroy the ng references
ngmin: {
dist: {
files: [{
src: '<%= yo.dist %>/<%= pkg.name %>.js',
dest: '<%= yo.dist %>/<%= pkg.name %>.js'
}]
},
modules: {
files: [{
expand: true,
flatten: true,
cwd: '<%= yo.src %>',
src: '{,*/}*.js',
dest: '<%= yo.dist %>/modules'
}]
},
docs: {
files: [{
expand: true,
cwd: '.tmp/concat/scripts',
src: '*.js',
dest: '.tmp/concat/scripts'
}]
}
},
ngtemplates: {
docs: {
options: {
module: 'mgcrea.ngMotionDocs',
usemin: 'scripts/docs.tpl.min.js'
},
files: [{
cwd: '<%= yo.src %>',
src: '{,*/}docs/*.html',
dest: '.tmp/ngtemplates/src-docs.tpl.js'
},
{
cwd: '<%= yo.docs %>',
src: 'views/sidebar.html',
dest: '.tmp/ngtemplates/docs-views.tpl.js'
},
{
cwd: '<%= yo.docs %>',
src: 'views/partials/{,*/}*.html',
dest: '.tmp/ngtemplates/docs-partials.tpl.js'
}]
}
},
// Test settings
karma: {
options: {
configFile: 'test/karma.conf.js',
browsers: ['PhantomJS']
},
unit: {
singleRun: true,
options: {
reporters: ['dots']
}
},
server: {
autoWatch: true
}
},
uglify: {
generated: {
options: {
compress: false,
mangle: false,
beautify: true
}
}
}
});
grunt.registerTask('serve', function (target) {
if (target === 'dist') {
return grunt.task.run(['build', 'connect:dist:keepalive']);
}
grunt.task.run([
'clean:server',
'concurrent:server',
'autoprefixer',
'connect:livereload',
'watch'
]);
});
grunt.registerTask('test', [
'clean:server',
'connect:test',
'karma:unit'
]);
grunt.registerTask('build', [
'clean:dist',
'less:dev',
'less:dist',
'autoprefixer',
'copy:dist',
'concat:banner'
]);
grunt.registerTask('docs', [
'clean:docs',
'useminPrepare',
'less:dev',
'less:docs',
'autoprefixer',
'nginclude:docs',
'ngtemplates:docs',
'concat:generated',
'ngmin:docs',
'copy:docs',
'cssmin:generated',
'uglify:generated',
'concat:docs',
'usemin',
// 'htmlmin:docs' // breaks code preview
]);
grunt.registerTask('default', [
'newer:jshint',
'test',
'build'
]);
};
@@ -1,21 +0,0 @@
The MIT License
Copyright (c) 2014 Olivier Louvignes http://olouv.com
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.
@@ -1,95 +0,0 @@
# [AngularMotion](http://mgcrea.github.io/angular-motion) [![Build Status](https://secure.travis-ci.org/mgcrea/angular-motion.png?branch=master)](http://travis-ci.org/#!/mgcrea/angular-motion) [![Dependency Status](https://gemnasium.com/mgcrea/angular-motion.png)](https://gemnasium.com/mgcrea/angular-motion) [![Analytics](https://ga-beacon.appspot.com/UA-1813303-10/angular-motion/readme?pixel)](https://github.com/igrigorik/ga-beacon)
[![Banner](http://mgcrea.github.io/angular-motion/images/snippet.png)](http://mgcrea.github.io/angular-motion)
AngularMotion is an animation starter-kit built for [AngularJS 1.2.0+](https://github.com/angular/angular.js).
It's a spin off from [AngularStrap](http://mgcrea.github.io/angular-strap) v2 release work.
## Documentation and examples
+ Check the [documentation](http://mgcrea.github.io/angular-motion) and [changelog](https://github.com/mgcrea/angular-motion/releases).
## Quick start
+ Include the required libraries (cdn/local)
>
``` html
<link rel="stylesheet" href="//rawgithub.com/mgcrea/angular-motion/master/dist/angular-motion.min.css">
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular-animate.min.js"></script>
```
+ Inject the `ngAnimate` module into your app
>
``` javascript
angular.module('myApp', ['ngAnimate']);
```
## Developers
Clone the repo, `git clone git://github.com/mgcrea/angular-motion.git`, [download the latest release](https://github.com/mgcrea/angular-motion/zipball/master) or install with bower `bower install angular-motion --save`.
AngularMotion is tested with `karma` against the latest stable release of AngularJS.
>
$ npm install grunt-cli --global
$ npm install --dev
$ grunt test
You can build the latest version using `grunt`.
>
$ grunt build
You can quickly hack around (the docs) with:
>
$ grunt serve
## Contributing
Please submit all pull requests the against master branch. If your unit test contains JavaScript patches or features, you should include relevant unit tests. Thanks!
## Authors
**Olivier Louvignes**
+ http://olouv.com
+ http://github.com/mgcrea
## Copyright and license
The MIT License
Copyright (c) 2012 Olivier Louvignes
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.
@@ -1,38 +0,0 @@
{
"name": "angular-motion",
"description": "AngularMotion - Fancy CSS3 animations for AngularJS 1.2+",
"version": "0.3.2",
"keywords": [
"angular",
"animation"
],
"homepage": "https://github.com/mgcrea/angular-motion",
"bugs": "https://github.com/mgcrea/angular-motion/issues",
"author": {
"name": "Olivier Louvignes",
"email": "olivier@mg-crea.com",
"url": "https://github.com/mgcrea"
},
"repository": {
"type": "git",
"url": "https://github.com/mgcrea/angular-motion.git"
},
"licenses": [
{
"type": "MIT"
}
],
"main": [
"dist/angular-motion.min.css"
],
"dependencies": {
"angular": "~1.2.10",
"angular-animate": "~1.2.10"
},
"devDependencies": {
"bootstrap": ">=3.0.0",
"angular-mocks": "~1.2.10",
"angular-strap": "~2.0.0",
"fastclick": "~0.6.11"
}
}
@@ -1,810 +0,0 @@
/**
* angular-motion
* @version v0.3.2 - 2014-02-11
* @link https://github.com/mgcrea/angular-motion
* @author Olivier Louvignes <olivier@mg-crea.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
.am-fade-and-scale {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-fade-and-scale.ng-enter,
.am-fade-and-scale.am-fade-and-scale-add,
.am-fade-and-scale.ng-hide-remove,
.am-fade-and-scale.ng-move {
-webkit-animation-name: fadeAndScaleIn;
animation-name: fadeAndScaleIn;
}
.am-fade-and-scale.ng-leave,
.am-fade-and-scale.am-fade-and-scale-remove,
.am-fade-and-scale.ng-hide {
-webkit-animation-name: fadeAndScaleOut;
animation-name: fadeAndScaleOut;
}
.am-fade-and-scale.ng-enter {
visibility: hidden;
-webkit-animation-name: fadeAndScaleIn;
animation-name: fadeAndScaleIn;
}
.am-fade-and-scale.ng-enter.ng-enter-active {
visibility: visible;
}
.am-fade-and-scale.ng-leave {
-webkit-animation-name: fadeAndScaleOut;
animation-name: fadeAndScaleOut;
}
@-webkit-keyframes fadeAndScaleIn {
from {
opacity: 0;
-webkit-transform: scale(0.7);
transform: scale(0.7);
}
to {
opacity: 1;
}
}
@keyframes fadeAndScaleIn {
from {
opacity: 0;
-webkit-transform: scale(0.7);
transform: scale(0.7);
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeAndScaleOut {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: scale(0.7);
transform: scale(0.7);
}
}
@keyframes fadeAndScaleOut {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: scale(0.7);
transform: scale(0.7);
}
}
.am-fade-and-slide-top {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-fade-and-slide-top.am-fade-and-slide-top-add,
.am-fade-and-slide-top.ng-hide-remove,
.am-fade-and-slide-top.ng-move {
-webkit-animation-name: fadeAndSlideFromTop;
animation-name: fadeAndSlideFromTop;
}
.am-fade-and-slide-top.am-fade-and-slide-top-remove,
.am-fade-and-slide-top.ng-hide {
-webkit-animation-name: fadeAndSlideToTop;
animation-name: fadeAndSlideToTop;
}
.am-fade-and-slide-top.ng-enter {
visibility: hidden;
-webkit-animation-name: fadeAndSlideFromTop;
animation-name: fadeAndSlideFromTop;
}
.am-fade-and-slide-top.ng-enter.ng-enter-active {
visibility: visible;
}
.am-fade-and-slide-top.ng-leave {
-webkit-animation-name: fadeAndSlideToTop;
animation-name: fadeAndSlideToTop;
}
.am-fade-and-slide-right {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-fade-and-slide-right.am-fade-and-slide-right-add,
.am-fade-and-slide-right.ng-hide-remove,
.am-fade-and-slide-right.ng-move {
-webkit-animation-name: fadeAndSlideFromRight;
animation-name: fadeAndSlideFromRight;
}
.am-fade-and-slide-right.am-fade-and-slide-right-remove,
.am-fade-and-slide-right.ng-hide {
-webkit-animation-name: fadeAndSlideToRight;
animation-name: fadeAndSlideToRight;
}
.am-fade-and-slide-right.ng-enter {
visibility: hidden;
-webkit-animation-name: fadeAndSlideFromRight;
animation-name: fadeAndSlideFromRight;
}
.am-fade-and-slide-right.ng-enter.ng-enter-active {
visibility: visible;
}
.am-fade-and-slide-right.ng-leave {
-webkit-animation-name: fadeAndSlideToRight;
animation-name: fadeAndSlideToRight;
}
.am-fade-and-slide-bottom {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-fade-and-slide-bottom.am-fade-and-slide-bottom-add,
.am-fade-and-slide-bottom.ng-hide-remove,
.am-fade-and-slide-bottom.ng-move {
-webkit-animation-name: fadeAndSlideFromBottom;
animation-name: fadeAndSlideFromBottom;
}
.am-fade-and-slide-bottom.am-fade-and-slide-bottom-remove,
.am-fade-and-slide-bottom.ng-hide {
-webkit-animation-name: fadeAndSlideToBottom;
animation-name: fadeAndSlideToBottom;
}
.am-fade-and-slide-bottom.ng-enter {
visibility: hidden;
-webkit-animation-name: fadeAndSlideFromBottom;
animation-name: fadeAndSlideFromBottom;
}
.am-fade-and-slide-bottom.ng-enter.ng-enter-active {
visibility: visible;
}
.am-fade-and-slide-bottom.ng-leave {
-webkit-animation-name: fadeAndSlideToBottom;
animation-name: fadeAndSlideToBottom;
}
.am-fade-and-slide-left {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-fade-and-slide-left.am-fade-and-slide-left-add,
.am-fade-and-slide-left.ng-hide-remove,
.am-fade-and-slide-left.ng-move {
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
-webkit-animation-name: fadeAndSlideFromLeft;
animation-name: fadeAndSlideFromLeft;
}
.am-fade-and-slide-left.am-fade-and-slide-left-remove,
.am-fade-and-slide-left.ng-hide {
-webkit-animation-name: fadeAndSlideToLeft;
animation-name: fadeAndSlideToLeft;
}
.am-fade-and-slide-left.ng-enter {
visibility: hidden;
-webkit-animation-name: fadeAndSlideFromLeft;
animation-name: fadeAndSlideFromLeft;
}
.am-fade-and-slide-left.ng-enter.ng-enter-active {
visibility: visible;
}
.am-fade-and-slide-left.ng-leave {
-webkit-animation-name: fadeAndSlideToLeft;
animation-name: fadeAndSlideToLeft;
}
@-webkit-keyframes fadeAndSlideFromTop {
from {
opacity: 0;
-webkit-transform: translateY(-20%);
transform: translateY(-20%);
}
to {
opacity: 1;
}
}
@keyframes fadeAndSlideFromTop {
from {
opacity: 0;
-webkit-transform: translateY(-20%);
transform: translateY(-20%);
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeAndSlideToTop {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateY(-20%);
transform: translateY(-20%);
}
}
@keyframes fadeAndSlideToTop {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateY(-20%);
transform: translateY(-20%);
}
}
@-webkit-keyframes fadeAndSlideFromRight {
from {
opacity: 0;
-webkit-transform: translateX(20%);
transform: translateX(20%);
}
to {
opacity: 1;
}
}
@keyframes fadeAndSlideFromRight {
from {
opacity: 0;
-webkit-transform: translateX(20%);
transform: translateX(20%);
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeAndSlideToRight {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateX(20%);
transform: translateX(20%);
}
}
@keyframes fadeAndSlideToRight {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateX(20%);
transform: translateX(20%);
}
}
@-webkit-keyframes fadeAndSlideFromBottom {
from {
opacity: 0;
-webkit-transform: translateY(20%);
transform: translateY(20%);
}
to {
opacity: 1;
}
}
@keyframes fadeAndSlideFromBottom {
from {
opacity: 0;
-webkit-transform: translateY(20%);
transform: translateY(20%);
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeAndSlideToBottom {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateY(20%);
transform: translateY(20%);
}
}
@keyframes fadeAndSlideToBottom {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateY(20%);
transform: translateY(20%);
}
}
@-webkit-keyframes fadeAndSlideFromLeft {
from {
opacity: 0;
-webkit-transform: translateX(-20%);
transform: translateX(-20%);
}
to {
opacity: 1;
}
}
@keyframes fadeAndSlideFromLeft {
from {
opacity: 0;
-webkit-transform: translateX(-20%);
transform: translateX(-20%);
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeAndSlideToLeft {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateX(-20%);
transform: translateX(-20%);
}
}
@keyframes fadeAndSlideToLeft {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateX(-20%);
transform: translateX(-20%);
}
}
.am-fade {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: linear;
animation-timing-function: linear;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
opacity: 1;
}
.am-fade.am-fade-add,
.am-fade.ng-hide-remove,
.am-fade.ng-move {
-webkit-animation-name: fadeIn;
animation-name: fadeIn;
}
.am-fade.am-fade-remove,
.am-fade.ng-hide {
-webkit-animation-name: fadeOut;
animation-name: fadeOut;
}
.am-fade.ng-enter {
visibility: hidden;
-webkit-animation-name: fadeIn;
animation-name: fadeIn;
}
.am-fade.ng-enter.ng-enter-active {
visibility: visible;
}
.am-fade.ng-leave {
-webkit-animation-name: fadeOut;
animation-name: fadeOut;
}
@-webkit-keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
.modal-backdrop.am-fade,
.aside-backdrop.am-fade {
background: rgba(0, 0, 0, 0.5);
-webkit-animation-duration: 0.15s;
animation-duration: 0.15s;
}
.am-flip-x {
-webkit-animation-duration: 0.4s;
animation-duration: 0.4s;
-webkit-animation-timing-function: ease;
animation-timing-function: ease;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-flip-x.am-flip-x-add,
.am-flip-x.ng-hide-remove,
.am-flip-x.ng-move {
-webkit-animation-name: flipInXBounce;
animation-name: flipInXBounce;
}
.am-flip-x.am-flip-x-remove,
.am-flip-x.ng-hide {
-webkit-animation-name: flipOutX;
animation-name: flipOutX;
}
.am-flip-x.ng-enter {
visibility: hidden;
-webkit-animation-name: flipInXBounce;
animation-name: flipInXBounce;
}
.am-flip-x.ng-enter.ng-enter-active {
visibility: visible;
}
.am-flip-x.ng-leave {
-webkit-animation-name: flipOutX;
animation-name: flipOutX;
}
.am-flip-x-linear {
-webkit-animation-duration: 0.4s;
animation-duration: 0.4s;
-webkit-animation-timing-function: ease;
animation-timing-function: ease;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-flip-x-linear.am-flip-x-add,
.am-flip-x-linear.ng-hide-remove,
.am-flip-x-linear.ng-move {
-webkit-animation-name: flipInX;
animation-name: flipInX;
}
.am-flip-x-linear.am-flip-x-remove,
.am-flip-x-linear.ng-hide {
-webkit-animation-name: flipOutX;
animation-name: flipOutX;
}
.am-flip-x-linear.ng-enter {
visibility: hidden;
-webkit-animation-name: flipInX;
animation-name: flipInX;
}
.am-flip-x-linear.ng-enter.ng-enter-active {
visibility: visible;
}
.am-flip-x-linear.ng-leave {
-webkit-animation-name: flipOutX;
animation-name: flipOutX;
}
@-webkit-keyframes flipInX {
from {
opacity: 0;
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
}
to {
opacity: 1;
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
}
}
@keyframes flipInX {
from {
opacity: 0;
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
}
to {
opacity: 1;
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
}
}
@-webkit-keyframes flipInXBounce {
from {
opacity: 0;
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
}
40% {
-webkit-transform: perspective(400px) rotateX(-10deg);
transform: perspective(400px) rotateX(-10deg);
}
70% {
-webkit-transform: perspective(400px) rotateX(10deg);
transform: perspective(400px) rotateX(10deg);
}
to {
opacity: 1;
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
}
}
@keyframes flipInXBounce {
from {
opacity: 0;
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
}
40% {
-webkit-transform: perspective(400px) rotateX(-10deg);
transform: perspective(400px) rotateX(-10deg);
}
70% {
-webkit-transform: perspective(400px) rotateX(10deg);
transform: perspective(400px) rotateX(10deg);
}
to {
opacity: 1;
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
}
}
@-webkit-keyframes flipOutX {
from {
opacity: 1;
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
}
to {
opacity: 0;
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
}
}
@keyframes flipOutX {
from {
opacity: 1;
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
}
to {
opacity: 0;
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
}
}
.am-slide-top {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-slide-top.am-fade-and-slide-top-add,
.am-slide-top.ng-hide-remove,
.am-slide-top.ng-move {
-webkit-animation-name: slideFromTop;
animation-name: slideFromTop;
}
.am-slide-top.am-fade-and-slide-top-remove,
.am-slide-top.ng-hide {
-webkit-animation-name: slideToTop;
animation-name: slideToTop;
}
.am-slide-top.ng-enter {
visibility: hidden;
-webkit-animation-name: slideFromTop;
animation-name: slideFromTop;
}
.am-slide-top.ng-enter.ng-enter-active {
visibility: visible;
}
.am-slide-top.ng-leave {
-webkit-animation-name: slideToTop;
animation-name: slideToTop;
}
.am-slide-right {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-slide-right.am-fade-and-slide-right-add,
.am-slide-right.ng-hide-remove,
.am-slide-right.ng-move {
-webkit-animation-name: slideFromRight;
animation-name: slideFromRight;
}
.am-slide-right.am-fade-and-slide-right-remove,
.am-slide-right.ng-hide {
-webkit-animation-name: slideToRight;
animation-name: slideToRight;
}
.am-slide-right.ng-enter {
visibility: hidden;
-webkit-animation-name: slideFromRight;
animation-name: slideFromRight;
}
.am-slide-right.ng-enter.ng-enter-active {
visibility: visible;
}
.am-slide-right.ng-leave {
-webkit-animation-name: slideToRight;
animation-name: slideToRight;
}
.am-slide-bottom {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-slide-bottom.am-fade-and-slide-bottom-add,
.am-slide-bottom.ng-hide-remove,
.am-slide-bottom.ng-move {
-webkit-animation-name: slideFromBottom;
animation-name: slideFromBottom;
}
.am-slide-bottom.am-fade-and-slide-bottom-remove,
.am-slide-bottom.ng-hide {
-webkit-animation-name: slideToBottom;
animation-name: slideToBottom;
}
.am-slide-bottom.ng-enter {
visibility: hidden;
-webkit-animation-name: slideFromBottom;
animation-name: slideFromBottom;
}
.am-slide-bottom.ng-enter.ng-enter-active {
visibility: visible;
}
.am-slide-bottom.ng-leave {
-webkit-animation-name: slideToBottom;
animation-name: slideToBottom;
}
.am-slide-left {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-slide-left.am-fade-and-slide-left-add,
.am-slide-left.ng-hide-remove,
.am-slide-left.ng-move {
-webkit-animation-name: slideFromLeft;
animation-name: slideFromLeft;
}
.am-slide-left.am-fade-and-slide-left-remove,
.am-slide-left.ng-hide {
-webkit-animation-name: slideToLeft;
animation-name: slideToLeft;
}
.am-slide-left.ng-enter {
visibility: hidden;
-webkit-animation-name: slideFromLeft;
animation-name: slideFromLeft;
}
.am-slide-left.ng-enter.ng-enter-active {
visibility: visible;
}
.am-slide-left.ng-leave {
-webkit-animation-name: slideToLeft;
animation-name: slideToLeft;
}
@-webkit-keyframes slideFromTop {
from {
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
}
@keyframes slideFromTop {
from {
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
}
@-webkit-keyframes slideToTop {
to {
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
}
@keyframes slideToTop {
to {
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
}
@-webkit-keyframes slideFromRight {
from {
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
}
@keyframes slideFromRight {
from {
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
}
@-webkit-keyframes slideToRight {
to {
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
}
@keyframes slideToRight {
to {
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
}
@-webkit-keyframes slideFromBottom {
from {
-webkit-transform: translateY(100%);
transform: translateY(100%);
}
}
@keyframes slideFromBottom {
from {
-webkit-transform: translateY(100%);
transform: translateY(100%);
}
}
@-webkit-keyframes slideToBottom {
to {
-webkit-transform: translateY(100%);
transform: translateY(100%);
}
}
@keyframes slideToBottom {
to {
-webkit-transform: translateY(100%);
transform: translateY(100%);
}
}
@-webkit-keyframes slideFromLeft {
from {
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
}
}
@keyframes slideFromLeft {
from {
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
}
}
@-webkit-keyframes slideToLeft {
to {
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
}
}
@keyframes slideToLeft {
to {
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
}
}
File diff suppressed because one or more lines are too long
@@ -1,80 +0,0 @@
/**
* angular-motion
* @version v0.3.2 - 2014-02-11
* @link https://github.com/mgcrea/angular-motion
* @author Olivier Louvignes <olivier@mg-crea.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
.am-fade-and-scale {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-fade-and-scale.ng-enter,
.am-fade-and-scale.am-fade-and-scale-add,
.am-fade-and-scale.ng-hide-remove,
.am-fade-and-scale.ng-move {
-webkit-animation-name: fadeAndScaleIn;
animation-name: fadeAndScaleIn;
}
.am-fade-and-scale.ng-leave,
.am-fade-and-scale.am-fade-and-scale-remove,
.am-fade-and-scale.ng-hide {
-webkit-animation-name: fadeAndScaleOut;
animation-name: fadeAndScaleOut;
}
.am-fade-and-scale.ng-enter {
visibility: hidden;
-webkit-animation-name: fadeAndScaleIn;
animation-name: fadeAndScaleIn;
}
.am-fade-and-scale.ng-enter.ng-enter-active {
visibility: visible;
}
.am-fade-and-scale.ng-leave {
-webkit-animation-name: fadeAndScaleOut;
animation-name: fadeAndScaleOut;
}
@-webkit-keyframes fadeAndScaleIn {
from {
opacity: 0;
-webkit-transform: scale(0.7);
transform: scale(0.7);
}
to {
opacity: 1;
}
}
@keyframes fadeAndScaleIn {
from {
opacity: 0;
-webkit-transform: scale(0.7);
transform: scale(0.7);
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeAndScaleOut {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: scale(0.7);
transform: scale(0.7);
}
}
@keyframes fadeAndScaleOut {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: scale(0.7);
transform: scale(0.7);
}
}
@@ -1,8 +0,0 @@
/**
* angular-motion
* @version v0.3.2 - 2014-02-11
* @link https://github.com/mgcrea/angular-motion
* @author Olivier Louvignes <olivier@mg-crea.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
.am-fade-and-scale{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-fade-and-scale.ng-enter,.am-fade-and-scale.am-fade-and-scale-add,.am-fade-and-scale.ng-hide-remove,.am-fade-and-scale.ng-move{-webkit-animation-name:fadeAndScaleIn;animation-name:fadeAndScaleIn}.am-fade-and-scale.ng-leave,.am-fade-and-scale.am-fade-and-scale-remove,.am-fade-and-scale.ng-hide{-webkit-animation-name:fadeAndScaleOut;animation-name:fadeAndScaleOut}.am-fade-and-scale.ng-enter{visibility:hidden;-webkit-animation-name:fadeAndScaleIn;animation-name:fadeAndScaleIn}.am-fade-and-scale.ng-enter.ng-enter-active{visibility:visible}.am-fade-and-scale.ng-leave{-webkit-animation-name:fadeAndScaleOut;animation-name:fadeAndScaleOut}@-webkit-keyframes fadeAndScaleIn{from{opacity:0;-webkit-transform:scale(0.7);transform:scale(0.7)}to{opacity:1}}@keyframes fadeAndScaleIn{from{opacity:0;-webkit-transform:scale(0.7);transform:scale(0.7)}to{opacity:1}}@-webkit-keyframes fadeAndScaleOut{from{opacity:1}to{opacity:0;-webkit-transform:scale(0.7);transform:scale(0.7)}}@keyframes fadeAndScaleOut{from{opacity:1}to{opacity:0;-webkit-transform:scale(0.7);transform:scale(0.7)}}
@@ -1,293 +0,0 @@
/**
* angular-motion
* @version v0.3.2 - 2014-02-11
* @link https://github.com/mgcrea/angular-motion
* @author Olivier Louvignes <olivier@mg-crea.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
.am-fade-and-slide-top {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-fade-and-slide-top.am-fade-and-slide-top-add,
.am-fade-and-slide-top.ng-hide-remove,
.am-fade-and-slide-top.ng-move {
-webkit-animation-name: fadeAndSlideFromTop;
animation-name: fadeAndSlideFromTop;
}
.am-fade-and-slide-top.am-fade-and-slide-top-remove,
.am-fade-and-slide-top.ng-hide {
-webkit-animation-name: fadeAndSlideToTop;
animation-name: fadeAndSlideToTop;
}
.am-fade-and-slide-top.ng-enter {
visibility: hidden;
-webkit-animation-name: fadeAndSlideFromTop;
animation-name: fadeAndSlideFromTop;
}
.am-fade-and-slide-top.ng-enter.ng-enter-active {
visibility: visible;
}
.am-fade-and-slide-top.ng-leave {
-webkit-animation-name: fadeAndSlideToTop;
animation-name: fadeAndSlideToTop;
}
.am-fade-and-slide-right {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-fade-and-slide-right.am-fade-and-slide-right-add,
.am-fade-and-slide-right.ng-hide-remove,
.am-fade-and-slide-right.ng-move {
-webkit-animation-name: fadeAndSlideFromRight;
animation-name: fadeAndSlideFromRight;
}
.am-fade-and-slide-right.am-fade-and-slide-right-remove,
.am-fade-and-slide-right.ng-hide {
-webkit-animation-name: fadeAndSlideToRight;
animation-name: fadeAndSlideToRight;
}
.am-fade-and-slide-right.ng-enter {
visibility: hidden;
-webkit-animation-name: fadeAndSlideFromRight;
animation-name: fadeAndSlideFromRight;
}
.am-fade-and-slide-right.ng-enter.ng-enter-active {
visibility: visible;
}
.am-fade-and-slide-right.ng-leave {
-webkit-animation-name: fadeAndSlideToRight;
animation-name: fadeAndSlideToRight;
}
.am-fade-and-slide-bottom {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-fade-and-slide-bottom.am-fade-and-slide-bottom-add,
.am-fade-and-slide-bottom.ng-hide-remove,
.am-fade-and-slide-bottom.ng-move {
-webkit-animation-name: fadeAndSlideFromBottom;
animation-name: fadeAndSlideFromBottom;
}
.am-fade-and-slide-bottom.am-fade-and-slide-bottom-remove,
.am-fade-and-slide-bottom.ng-hide {
-webkit-animation-name: fadeAndSlideToBottom;
animation-name: fadeAndSlideToBottom;
}
.am-fade-and-slide-bottom.ng-enter {
visibility: hidden;
-webkit-animation-name: fadeAndSlideFromBottom;
animation-name: fadeAndSlideFromBottom;
}
.am-fade-and-slide-bottom.ng-enter.ng-enter-active {
visibility: visible;
}
.am-fade-and-slide-bottom.ng-leave {
-webkit-animation-name: fadeAndSlideToBottom;
animation-name: fadeAndSlideToBottom;
}
.am-fade-and-slide-left {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-fade-and-slide-left.am-fade-and-slide-left-add,
.am-fade-and-slide-left.ng-hide-remove,
.am-fade-and-slide-left.ng-move {
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
-webkit-animation-name: fadeAndSlideFromLeft;
animation-name: fadeAndSlideFromLeft;
}
.am-fade-and-slide-left.am-fade-and-slide-left-remove,
.am-fade-and-slide-left.ng-hide {
-webkit-animation-name: fadeAndSlideToLeft;
animation-name: fadeAndSlideToLeft;
}
.am-fade-and-slide-left.ng-enter {
visibility: hidden;
-webkit-animation-name: fadeAndSlideFromLeft;
animation-name: fadeAndSlideFromLeft;
}
.am-fade-and-slide-left.ng-enter.ng-enter-active {
visibility: visible;
}
.am-fade-and-slide-left.ng-leave {
-webkit-animation-name: fadeAndSlideToLeft;
animation-name: fadeAndSlideToLeft;
}
@-webkit-keyframes fadeAndSlideFromTop {
from {
opacity: 0;
-webkit-transform: translateY(-20%);
transform: translateY(-20%);
}
to {
opacity: 1;
}
}
@keyframes fadeAndSlideFromTop {
from {
opacity: 0;
-webkit-transform: translateY(-20%);
transform: translateY(-20%);
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeAndSlideToTop {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateY(-20%);
transform: translateY(-20%);
}
}
@keyframes fadeAndSlideToTop {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateY(-20%);
transform: translateY(-20%);
}
}
@-webkit-keyframes fadeAndSlideFromRight {
from {
opacity: 0;
-webkit-transform: translateX(20%);
transform: translateX(20%);
}
to {
opacity: 1;
}
}
@keyframes fadeAndSlideFromRight {
from {
opacity: 0;
-webkit-transform: translateX(20%);
transform: translateX(20%);
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeAndSlideToRight {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateX(20%);
transform: translateX(20%);
}
}
@keyframes fadeAndSlideToRight {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateX(20%);
transform: translateX(20%);
}
}
@-webkit-keyframes fadeAndSlideFromBottom {
from {
opacity: 0;
-webkit-transform: translateY(20%);
transform: translateY(20%);
}
to {
opacity: 1;
}
}
@keyframes fadeAndSlideFromBottom {
from {
opacity: 0;
-webkit-transform: translateY(20%);
transform: translateY(20%);
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeAndSlideToBottom {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateY(20%);
transform: translateY(20%);
}
}
@keyframes fadeAndSlideToBottom {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateY(20%);
transform: translateY(20%);
}
}
@-webkit-keyframes fadeAndSlideFromLeft {
from {
opacity: 0;
-webkit-transform: translateX(-20%);
transform: translateX(-20%);
}
to {
opacity: 1;
}
}
@keyframes fadeAndSlideFromLeft {
from {
opacity: 0;
-webkit-transform: translateX(-20%);
transform: translateX(-20%);
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeAndSlideToLeft {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateX(-20%);
transform: translateX(-20%);
}
}
@keyframes fadeAndSlideToLeft {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translateX(-20%);
transform: translateX(-20%);
}
}
File diff suppressed because one or more lines are too long
@@ -1,77 +0,0 @@
/**
* angular-motion
* @version v0.3.2 - 2014-02-11
* @link https://github.com/mgcrea/angular-motion
* @author Olivier Louvignes <olivier@mg-crea.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
.am-fade {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: linear;
animation-timing-function: linear;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
opacity: 1;
}
.am-fade.am-fade-add,
.am-fade.ng-hide-remove,
.am-fade.ng-move {
-webkit-animation-name: fadeIn;
animation-name: fadeIn;
}
.am-fade.am-fade-remove,
.am-fade.ng-hide {
-webkit-animation-name: fadeOut;
animation-name: fadeOut;
}
.am-fade.ng-enter {
visibility: hidden;
-webkit-animation-name: fadeIn;
animation-name: fadeIn;
}
.am-fade.ng-enter.ng-enter-active {
visibility: visible;
}
.am-fade.ng-leave {
-webkit-animation-name: fadeOut;
animation-name: fadeOut;
}
@-webkit-keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
.modal-backdrop.am-fade,
.aside-backdrop.am-fade {
background: rgba(0, 0, 0, 0.5);
-webkit-animation-duration: 0.15s;
animation-duration: 0.15s;
}
@@ -1,8 +0,0 @@
/**
* angular-motion
* @version v0.3.2 - 2014-02-11
* @link https://github.com/mgcrea/angular-motion
* @author Olivier Louvignes <olivier@mg-crea.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
.am-fade{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;opacity:1}.am-fade.am-fade-add,.am-fade.ng-hide-remove,.am-fade.ng-move{-webkit-animation-name:fadeIn;animation-name:fadeIn}.am-fade.am-fade-remove,.am-fade.ng-hide{-webkit-animation-name:fadeOut;animation-name:fadeOut}.am-fade.ng-enter{visibility:hidden;-webkit-animation-name:fadeIn;animation-name:fadeIn}.am-fade.ng-enter.ng-enter-active{visibility:visible}.am-fade.ng-leave{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.modal-backdrop.am-fade,.aside-backdrop.am-fade{background:rgba(0,0,0,.5);-webkit-animation-duration:.15s;animation-duration:.15s}
@@ -1,157 +0,0 @@
/**
* angular-motion
* @version v0.3.2 - 2014-02-11
* @link https://github.com/mgcrea/angular-motion
* @author Olivier Louvignes <olivier@mg-crea.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
.am-flip-x {
-webkit-animation-duration: 0.4s;
animation-duration: 0.4s;
-webkit-animation-timing-function: ease;
animation-timing-function: ease;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-flip-x.am-flip-x-add,
.am-flip-x.ng-hide-remove,
.am-flip-x.ng-move {
-webkit-animation-name: flipInXBounce;
animation-name: flipInXBounce;
}
.am-flip-x.am-flip-x-remove,
.am-flip-x.ng-hide {
-webkit-animation-name: flipOutX;
animation-name: flipOutX;
}
.am-flip-x.ng-enter {
visibility: hidden;
-webkit-animation-name: flipInXBounce;
animation-name: flipInXBounce;
}
.am-flip-x.ng-enter.ng-enter-active {
visibility: visible;
}
.am-flip-x.ng-leave {
-webkit-animation-name: flipOutX;
animation-name: flipOutX;
}
.am-flip-x-linear {
-webkit-animation-duration: 0.4s;
animation-duration: 0.4s;
-webkit-animation-timing-function: ease;
animation-timing-function: ease;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-flip-x-linear.am-flip-x-add,
.am-flip-x-linear.ng-hide-remove,
.am-flip-x-linear.ng-move {
-webkit-animation-name: flipInX;
animation-name: flipInX;
}
.am-flip-x-linear.am-flip-x-remove,
.am-flip-x-linear.ng-hide {
-webkit-animation-name: flipOutX;
animation-name: flipOutX;
}
.am-flip-x-linear.ng-enter {
visibility: hidden;
-webkit-animation-name: flipInX;
animation-name: flipInX;
}
.am-flip-x-linear.ng-enter.ng-enter-active {
visibility: visible;
}
.am-flip-x-linear.ng-leave {
-webkit-animation-name: flipOutX;
animation-name: flipOutX;
}
@-webkit-keyframes flipInX {
from {
opacity: 0;
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
}
to {
opacity: 1;
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
}
}
@keyframes flipInX {
from {
opacity: 0;
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
}
to {
opacity: 1;
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
}
}
@-webkit-keyframes flipInXBounce {
from {
opacity: 0;
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
}
40% {
-webkit-transform: perspective(400px) rotateX(-10deg);
transform: perspective(400px) rotateX(-10deg);
}
70% {
-webkit-transform: perspective(400px) rotateX(10deg);
transform: perspective(400px) rotateX(10deg);
}
to {
opacity: 1;
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
}
}
@keyframes flipInXBounce {
from {
opacity: 0;
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
}
40% {
-webkit-transform: perspective(400px) rotateX(-10deg);
transform: perspective(400px) rotateX(-10deg);
}
70% {
-webkit-transform: perspective(400px) rotateX(10deg);
transform: perspective(400px) rotateX(10deg);
}
to {
opacity: 1;
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
}
}
@-webkit-keyframes flipOutX {
from {
opacity: 1;
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
}
to {
opacity: 0;
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
}
}
@keyframes flipOutX {
from {
opacity: 1;
-webkit-transform: perspective(400px) rotateX(0deg);
transform: perspective(400px) rotateX(0deg);
}
to {
opacity: 0;
-webkit-transform: perspective(400px) rotateX(90deg);
transform: perspective(400px) rotateX(90deg);
}
}
@@ -1,8 +0,0 @@
/**
* angular-motion
* @version v0.3.2 - 2014-02-11
* @link https://github.com/mgcrea/angular-motion
* @author Olivier Louvignes <olivier@mg-crea.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
.am-flip-x{-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-flip-x.am-flip-x-add,.am-flip-x.ng-hide-remove,.am-flip-x.ng-move{-webkit-animation-name:flipInXBounce;animation-name:flipInXBounce}.am-flip-x.am-flip-x-remove,.am-flip-x.ng-hide{-webkit-animation-name:flipOutX;animation-name:flipOutX}.am-flip-x.ng-enter{visibility:hidden;-webkit-animation-name:flipInXBounce;animation-name:flipInXBounce}.am-flip-x.ng-enter.ng-enter-active{visibility:visible}.am-flip-x.ng-leave{-webkit-animation-name:flipOutX;animation-name:flipOutX}.am-flip-x-linear{-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-flip-x-linear.am-flip-x-add,.am-flip-x-linear.ng-hide-remove,.am-flip-x-linear.ng-move{-webkit-animation-name:flipInX;animation-name:flipInX}.am-flip-x-linear.am-flip-x-remove,.am-flip-x-linear.ng-hide{-webkit-animation-name:flipOutX;animation-name:flipOutX}.am-flip-x-linear.ng-enter{visibility:hidden;-webkit-animation-name:flipInX;animation-name:flipInX}.am-flip-x-linear.ng-enter.ng-enter-active{visibility:visible}.am-flip-x-linear.ng-leave{-webkit-animation-name:flipOutX;animation-name:flipOutX}@-webkit-keyframes flipInX{from{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}to{opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg)}}@keyframes flipInX{from{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}to{opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg)}}@-webkit-keyframes flipInXBounce{from{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-transform:perspective(400px) rotateX(-10deg);transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}to{opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg)}}@keyframes flipInXBounce{from{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-transform:perspective(400px) rotateX(-10deg);transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}to{opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg)}}@-webkit-keyframes flipOutX{from{opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}@keyframes flipOutX{from{opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}
@@ -1,227 +0,0 @@
/**
* angular-motion
* @version v0.3.2 - 2014-02-11
* @link https://github.com/mgcrea/angular-motion
* @author Olivier Louvignes <olivier@mg-crea.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
.am-slide-top {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-slide-top.am-fade-and-slide-top-add,
.am-slide-top.ng-hide-remove,
.am-slide-top.ng-move {
-webkit-animation-name: slideFromTop;
animation-name: slideFromTop;
}
.am-slide-top.am-fade-and-slide-top-remove,
.am-slide-top.ng-hide {
-webkit-animation-name: slideToTop;
animation-name: slideToTop;
}
.am-slide-top.ng-enter {
visibility: hidden;
-webkit-animation-name: slideFromTop;
animation-name: slideFromTop;
}
.am-slide-top.ng-enter.ng-enter-active {
visibility: visible;
}
.am-slide-top.ng-leave {
-webkit-animation-name: slideToTop;
animation-name: slideToTop;
}
.am-slide-right {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-slide-right.am-fade-and-slide-right-add,
.am-slide-right.ng-hide-remove,
.am-slide-right.ng-move {
-webkit-animation-name: slideFromRight;
animation-name: slideFromRight;
}
.am-slide-right.am-fade-and-slide-right-remove,
.am-slide-right.ng-hide {
-webkit-animation-name: slideToRight;
animation-name: slideToRight;
}
.am-slide-right.ng-enter {
visibility: hidden;
-webkit-animation-name: slideFromRight;
animation-name: slideFromRight;
}
.am-slide-right.ng-enter.ng-enter-active {
visibility: visible;
}
.am-slide-right.ng-leave {
-webkit-animation-name: slideToRight;
animation-name: slideToRight;
}
.am-slide-bottom {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-slide-bottom.am-fade-and-slide-bottom-add,
.am-slide-bottom.ng-hide-remove,
.am-slide-bottom.ng-move {
-webkit-animation-name: slideFromBottom;
animation-name: slideFromBottom;
}
.am-slide-bottom.am-fade-and-slide-bottom-remove,
.am-slide-bottom.ng-hide {
-webkit-animation-name: slideToBottom;
animation-name: slideToBottom;
}
.am-slide-bottom.ng-enter {
visibility: hidden;
-webkit-animation-name: slideFromBottom;
animation-name: slideFromBottom;
}
.am-slide-bottom.ng-enter.ng-enter-active {
visibility: visible;
}
.am-slide-bottom.ng-leave {
-webkit-animation-name: slideToBottom;
animation-name: slideToBottom;
}
.am-slide-left {
-webkit-animation-duration: 0.3s;
animation-duration: 0.3s;
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
-webkit-animation-fill-mode: backwards;
animation-fill-mode: backwards;
}
.am-slide-left.am-fade-and-slide-left-add,
.am-slide-left.ng-hide-remove,
.am-slide-left.ng-move {
-webkit-animation-name: slideFromLeft;
animation-name: slideFromLeft;
}
.am-slide-left.am-fade-and-slide-left-remove,
.am-slide-left.ng-hide {
-webkit-animation-name: slideToLeft;
animation-name: slideToLeft;
}
.am-slide-left.ng-enter {
visibility: hidden;
-webkit-animation-name: slideFromLeft;
animation-name: slideFromLeft;
}
.am-slide-left.ng-enter.ng-enter-active {
visibility: visible;
}
.am-slide-left.ng-leave {
-webkit-animation-name: slideToLeft;
animation-name: slideToLeft;
}
@-webkit-keyframes slideFromTop {
from {
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
}
@keyframes slideFromTop {
from {
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
}
@-webkit-keyframes slideToTop {
to {
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
}
@keyframes slideToTop {
to {
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
}
@-webkit-keyframes slideFromRight {
from {
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
}
@keyframes slideFromRight {
from {
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
}
@-webkit-keyframes slideToRight {
to {
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
}
@keyframes slideToRight {
to {
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
}
@-webkit-keyframes slideFromBottom {
from {
-webkit-transform: translateY(100%);
transform: translateY(100%);
}
}
@keyframes slideFromBottom {
from {
-webkit-transform: translateY(100%);
transform: translateY(100%);
}
}
@-webkit-keyframes slideToBottom {
to {
-webkit-transform: translateY(100%);
transform: translateY(100%);
}
}
@keyframes slideToBottom {
to {
-webkit-transform: translateY(100%);
transform: translateY(100%);
}
}
@-webkit-keyframes slideFromLeft {
from {
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
}
}
@keyframes slideFromLeft {
from {
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
}
}
@-webkit-keyframes slideToLeft {
to {
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
}
}
@keyframes slideToLeft {
to {
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
}
}
@@ -1,8 +0,0 @@
/**
* angular-motion
* @version v0.3.2 - 2014-02-11
* @link https://github.com/mgcrea/angular-motion
* @author Olivier Louvignes <olivier@mg-crea.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
.am-slide-top{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-slide-top.am-fade-and-slide-top-add,.am-slide-top.ng-hide-remove,.am-slide-top.ng-move{-webkit-animation-name:slideFromTop;animation-name:slideFromTop}.am-slide-top.am-fade-and-slide-top-remove,.am-slide-top.ng-hide{-webkit-animation-name:slideToTop;animation-name:slideToTop}.am-slide-top.ng-enter{visibility:hidden;-webkit-animation-name:slideFromTop;animation-name:slideFromTop}.am-slide-top.ng-enter.ng-enter-active{visibility:visible}.am-slide-top.ng-leave{-webkit-animation-name:slideToTop;animation-name:slideToTop}.am-slide-right{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-slide-right.am-fade-and-slide-right-add,.am-slide-right.ng-hide-remove,.am-slide-right.ng-move{-webkit-animation-name:slideFromRight;animation-name:slideFromRight}.am-slide-right.am-fade-and-slide-right-remove,.am-slide-right.ng-hide{-webkit-animation-name:slideToRight;animation-name:slideToRight}.am-slide-right.ng-enter{visibility:hidden;-webkit-animation-name:slideFromRight;animation-name:slideFromRight}.am-slide-right.ng-enter.ng-enter-active{visibility:visible}.am-slide-right.ng-leave{-webkit-animation-name:slideToRight;animation-name:slideToRight}.am-slide-bottom{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-slide-bottom.am-fade-and-slide-bottom-add,.am-slide-bottom.ng-hide-remove,.am-slide-bottom.ng-move{-webkit-animation-name:slideFromBottom;animation-name:slideFromBottom}.am-slide-bottom.am-fade-and-slide-bottom-remove,.am-slide-bottom.ng-hide{-webkit-animation-name:slideToBottom;animation-name:slideToBottom}.am-slide-bottom.ng-enter{visibility:hidden;-webkit-animation-name:slideFromBottom;animation-name:slideFromBottom}.am-slide-bottom.ng-enter.ng-enter-active{visibility:visible}.am-slide-bottom.ng-leave{-webkit-animation-name:slideToBottom;animation-name:slideToBottom}.am-slide-left{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-slide-left.am-fade-and-slide-left-add,.am-slide-left.ng-hide-remove,.am-slide-left.ng-move{-webkit-animation-name:slideFromLeft;animation-name:slideFromLeft}.am-slide-left.am-fade-and-slide-left-remove,.am-slide-left.ng-hide{-webkit-animation-name:slideToLeft;animation-name:slideToLeft}.am-slide-left.ng-enter{visibility:hidden;-webkit-animation-name:slideFromLeft;animation-name:slideFromLeft}.am-slide-left.ng-enter.ng-enter-active{visibility:visible}.am-slide-left.ng-leave{-webkit-animation-name:slideToLeft;animation-name:slideToLeft}@-webkit-keyframes slideFromTop{from{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes slideFromTop{from{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes slideToTop{to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes slideToTop{to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes slideFromRight{from{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes slideFromRight{from{-webkit-transform:translateX(100%);transform:translateX(100%)}}@-webkit-keyframes slideToRight{to{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes slideToRight{to{-webkit-transform:translateX(100%);transform:translateX(100%)}}@-webkit-keyframes slideFromBottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes slideFromBottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}}@-webkit-keyframes slideToBottom{to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes slideToBottom{to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@-webkit-keyframes slideFromLeft{from{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes slideFromLeft{from{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@-webkit-keyframes slideToLeft{to{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes slideToLeft{to{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}
@@ -1,57 +0,0 @@
{
"name": "angular-motion",
"description": "AngularMotion - Fancy CSS3 animations for AngularJS 1.2+",
"version": "0.3.2",
"keywords": [
"angular",
"animation"
],
"homepage": "https://github.com/mgcrea/angular-motion",
"bugs": "https://github.com/mgcrea/angular-motion/issues",
"author": {
"name": "Olivier Louvignes",
"email": "olivier@mg-crea.com",
"url": "https://github.com/mgcrea"
},
"repository": {
"type": "git",
"url": "https://github.com/mgcrea/angular-motion.git"
},
"licenses": [
{
"type": "MIT"
}
],
"dependencies": {},
"devDependencies": {
"grunt": "~0.4.2",
"grunt-angular-templates": "~0.5.1",
"grunt-autoprefixer": "~0.6.5",
"grunt-concurrent": "~0.4.3",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-connect": "~0.6.0",
"grunt-contrib-copy": "~0.5.0",
"grunt-contrib-cssmin": "~0.7.0",
"grunt-contrib-htmlmin": "~0.2.0",
"grunt-contrib-jshint": "~0.8.0",
"grunt-contrib-less": "~0.9.0",
"grunt-contrib-uglify": "~0.3.2",
"grunt-contrib-watch": "~0.5.3",
"grunt-karma": "~0.6.2",
"grunt-newer": "~0.6.1",
"grunt-nginclude": "~0.3.1",
"grunt-ngmin": "0.0.3",
"grunt-rev": "~0.1.0",
"grunt-usemin": "~2.0.2",
"jshint-stylish": "~0.1.5",
"karma-coverage": "~0.1.5",
"load-grunt-tasks": "~0.3.0"
},
"engines": {
"node": ">=0.8.0"
},
"scripts": {
"test": "grunt test"
}
}
@@ -1,29 +0,0 @@
<div class="bs-docs-section">
<div class="page-header">
<h1 id="fade-and-scale">FadeAndScale <a class="small" href="//github.com/mgcrea/angular-strap/blob/master/src/fade-and-scale/fade-and-scale.less" target="_blank">fade-and-scale.less</a></h1>
<code>mgcrea.ngMotion.fade-and-scale</code>
</div>
<p>Fancy scale animation that leverages <code>CSS3 keyframes</code>, see <a href="http://caniuse.com/#search=keyframes" target="_blank">browser support</a>.</p>
<p>This animation works with <code>scale, opacity</code> animating respectively from <code>.7 to 1, 0 to 1</code>.</p>
<h3 id="fade-and-scale-examples">Live demo <a class="small edit-plunkr" data-module-name="mgcrea.ngStrapDocs" data-content-html-url="aside/docs/aside.demo.html" data-content-js-url="aside/docs/aside.demo.js" ng-plunkr data-title="edit in plunker" data-placement="right" bs-tooltip></a></h3>
<!-- <pre class="bs-example-scope">$scope.aside = {{aside | json}};</pre> -->
<div class="bs-example" append-source>
<h5>fade-and-scale</h5>
<button type="button" class="btn btn-danger" data-animation="am-fade-and-scale" data-placement="center" bs-modal="modal">modal from center<br><small>(am-fade-and-scale)</small></button>
</div>
<h2 id="fade-and-scale-usage">Usage</h2>
<p>Append one of theses classes <code>am-fade-and-scale</code> to enable theses transitions.</p>
<div class="callout callout-info">
<h4>AngularStrap integration</h4>
<p>You should use the <code>data-animation</code> attribute with AngularStrap.</p>
</div>
</div>
@@ -1,56 +0,0 @@
// Fade & Slide
//
@fade-and-scale-duration: .3s;
@fade-and-scale-timing-function: ease-in-out;
.am-fade-and-scale {
animation-duration: @fade-and-scale-duration;
animation-timing-function: @fade-and-scale-timing-function;
animation-fill-mode: backwards;
&.ng-enter, &.am-fade-and-scale-add, &.ng-hide-remove, &.ng-move {
animation-name: fadeAndScaleIn;
}
&.ng-leave, &.am-fade-and-scale-remove, &.ng-hide {
animation-name: fadeAndScaleOut;
}
&.ng-enter {
visibility: hidden;
animation-name: fadeAndScaleIn;
&.ng-enter-active {
visibility: visible;
}
}
&.ng-leave {
animation-name: fadeAndScaleOut;
}
}
// Keyframes
//
@keyframes fadeAndScaleIn {
from {
opacity: 0;
transform: scale(0.7);
}
to {
opacity: 1;
}
}
@keyframes fadeAndScaleOut {
from {
opacity: 1;
}
to {
opacity: 0;
transform: scale(0.7);
}
}
@@ -1,35 +0,0 @@
<div class="bs-docs-section">
<div class="page-header">
<h1 id="fade-and-slide">FadeAndSlide <a class="small" href="//github.com/mgcrea/angular-strap/blob/master/src/fade-and-slide/fade-and-slide.less" target="_blank">fade-and-slide.less</a></h1>
<code>mgcrea.ngMotion.fade-and-slide</code>
</div>
<p>Fancy slide animation that leverages <code>CSS3 keyframes</code>, see <a href="http://caniuse.com/#search=keyframes" target="_blank">browser support</a>.</p>
<p>This animation works with <code>translateX/Y, opacity</code> animating respectively from <code>0% to 20%, 0 to 1</code>.</p>
<h3 id="fade-and-slide-examples">Live demo <a class="small edit-plunkr" data-module-name="mgcrea.ngStrapDocs" data-content-html-url="aside/docs/aside.demo.html" data-content-js-url="aside/docs/aside.demo.js" ng-plunkr data-title="edit in plunker" data-placement="right" bs-tooltip></a></h3>
<!-- <pre class="bs-example-scope">$scope.aside = {{aside | json}};</pre> -->
<div class="bs-example" append-source>
<h5>fade-and-slide</h5>
<button type="button" class="btn btn-primary" data-animation="am-fade-and-slide-left" data-placement="left" bs-aside="aside">aside from left<br><small>(am-fade-and-slide-left)</small></button>
<button type="button" class="btn btn-success" data-animation="am-fade-and-slide-right" data-placement="right" bs-aside="aside">aside from right<br><small>(am-fade-and-slide-right)</small></button><br><br>
<button type="button" class="btn btn-primary" data-animation="am-fade-and-slide-top" bs-modal="modal">modal from top<br><small>(am-fade-and-slide-top)</small></button>
<button type="button" class="btn btn-success" data-animation="am-fade-and-slide-bottom" data-placement="center" bs-modal="modal">modal from bottom<br><small>(am-fade-and-slide-bottom)</small></button>
</div>
<h2 id="fade-and-slide-usage">Usage</h2>
<p>Append one of theses classes <code>am-fade-and-slide-top</code>, <code>am-fade-and-slide-right</code>, <code>am-fade-and-slide-bottom</code>, <code>am-fade-and-slide-left</code> to enable theses transitions.</p>
<div class="callout callout-info">
<h4>AngularStrap integration</h4>
<p>You should use the <code>data-animation</code> attribute with AngularStrap.</p>
</div>
</div>
@@ -1,194 +0,0 @@
// Fade & Slide
//
@fade-and-slide-duration: .3s;
@fade-and-slide-timing-function: ease-in-out;
.am-fade-and-slide-top {
animation-duration: @fade-and-slide-duration;
animation-timing-function: @fade-and-slide-timing-function;
animation-fill-mode: backwards;
&.am-fade-and-slide-top-add, &.ng-hide-remove, &.ng-move {
animation-name: fadeAndSlideFromTop;
}
&.am-fade-and-slide-top-remove, &.ng-hide {
animation-name: fadeAndSlideToTop;
}
&.ng-enter {
visibility: hidden;
animation-name: fadeAndSlideFromTop;
&.ng-enter-active {
visibility: visible;
}
}
&.ng-leave {
animation-name: fadeAndSlideToTop;
}
}
.am-fade-and-slide-right {
animation-duration: @fade-and-slide-duration;
animation-timing-function: @fade-and-slide-timing-function;
animation-fill-mode: backwards;
&.am-fade-and-slide-right-add, &.ng-hide-remove, &.ng-move {
animation-name: fadeAndSlideFromRight;
}
&.am-fade-and-slide-right-remove, &.ng-hide {
animation-name: fadeAndSlideToRight;
}
&.ng-enter {
visibility: hidden;
animation-name: fadeAndSlideFromRight;
&.ng-enter-active {
visibility: visible;
}
}
&.ng-leave {
animation-name: fadeAndSlideToRight;
}
}
.am-fade-and-slide-bottom {
animation-duration: @fade-and-slide-duration;
animation-timing-function: @fade-and-slide-timing-function;
animation-fill-mode: backwards;
&.am-fade-and-slide-bottom-add, &.ng-hide-remove, &.ng-move {
animation-name: fadeAndSlideFromBottom;
}
&.am-fade-and-slide-bottom-remove, &.ng-hide {
animation-name: fadeAndSlideToBottom;
}
&.ng-enter {
visibility: hidden;
animation-name: fadeAndSlideFromBottom;
&.ng-enter-active {
visibility: visible;
}
}
&.ng-leave {
animation-name: fadeAndSlideToBottom;
}
}
.am-fade-and-slide-left {
animation-duration: @fade-and-slide-duration;
animation-timing-function: @fade-and-slide-timing-function;
animation-fill-mode: backwards;
&.am-fade-and-slide-left-add, &.ng-hide-remove, &.ng-move {
animation-fill-mode: backwards;
animation-name: fadeAndSlideFromLeft;
}
&.am-fade-and-slide-left-remove, &.ng-hide {
animation-name: fadeAndSlideToLeft;
}
&.ng-enter {
visibility: hidden;
animation-name: fadeAndSlideFromLeft;
&.ng-enter-active {
visibility: visible;
}
}
&.ng-leave {
animation-name: fadeAndSlideToLeft;
}
}
// Keyframes
//
@keyframes fadeAndSlideFromTop {
from {
opacity: 0;
transform: translateY(-20%);
}
to {
opacity: 1;
}
}
@keyframes fadeAndSlideToTop {
from {
opacity: 1;
}
to {
opacity: 0;
transform: translateY(-20%);
}
}
@keyframes fadeAndSlideFromRight {
from {
opacity: 0;
transform: translateX(20%);
}
to {
opacity: 1;
}
}
@keyframes fadeAndSlideToRight {
from {
opacity: 1;
}
to {
opacity: 0;
transform: translateX(20%);
}
}
@keyframes fadeAndSlideFromBottom {
from {
opacity: 0;
transform: translateY(20%);
}
to {
opacity: 1;
}
}
@keyframes fadeAndSlideToBottom {
from {
opacity: 1;
}
to {
opacity: 0;
transform: translateY(20%);
}
}
@keyframes fadeAndSlideFromLeft {
from {
opacity: 0;
transform: translateX(-20%);
}
to {
opacity: 1;
}
}
@keyframes fadeAndSlideToLeft {
from {
opacity: 1;
}
to {
opacity: 0;
transform: translateX(-20%);
}
}
@@ -1,35 +0,0 @@
<div class="bs-docs-section">
<div class="page-header">
<h1 id="fade">Fade <a class="small" href="//github.com/mgcrea/angular-strap/blob/master/src/fade/fade.less" target="_blank">fade.less</a></h1>
<code>mgcrea.ngMotion.fade</code>
</div>
<p>Basic fade animation that leverages <code>CSS3 keyframes</code>, see <a href="http://caniuse.com/#search=keyframes" target="_blank">browser support</a>.</p>
<p>This animation works with <code>opacity</code> animating respectively from <code>0 to 1</code>.</p>
<h3 id="fade-examples">Live demo <a class="small edit-plunkr" data-module-name="mgcrea.ngStrapDocs" data-content-html-url="aside/docs/aside.demo.html" data-content-js-url="aside/docs/aside.demo.js" ng-plunkr data-title="edit in plunker" data-placement="right" bs-tooltip></a></h3>
<!-- <pre class="bs-example-scope">$scope.aside = {{aside | json}};</pre> -->
<div class="bs-example" append-source>
<h5>fade</h5>
<button type="button" class="btn btn-primary" data-animation="am-fade" data-placement="left" bs-popover="popover">popover from left<br><small>(am-fade)</small></button>
<button type="button" class="btn btn-success" data-animation="am-fade" data-placement="right" bs-popover="popover">popover from right<br><small>(am-fade)</small></button><br><br>
<button type="button" class="btn btn-primary" data-animation="am-fade" data-placement="top" bs-tooltip="tooltip">tooltip from top<br><small>(am-fade)</small></button>
<button type="button" class="btn btn-success" data-animation="am-fade" data-placement="bottom" bs-tooltip="tooltip">tooltip from bottom<br><small>(am-fade)</small></button>
</div>
<h2 id="fade-usage">Usage</h2>
<p>Append one of theses classes <code>am-fade</code> to enable theses transitions.</p>
<div class="callout callout-info">
<h4>AngularStrap integration</h4>
<p>You should use the <code>data-animation</code> attribute with AngularStrap.</p>
</div>
</div>
@@ -1,69 +0,0 @@
// Fade
//
@fade-duration: .3s;
@fade-timing-function: linear;
.am-fade {
animation-duration: @fade-duration;
animation-timing-function: @fade-timing-function;
animation-fill-mode: backwards;
opacity: 1;
&.am-fade-add, &.ng-hide-remove, &.ng-move {
animation-name: fadeIn;
}
&.am-fade-remove, &.ng-hide {
animation-name: fadeOut;
}
&.ng-enter {
visibility: hidden;
animation-name: fadeIn;
&.ng-enter-active {
visibility: visible;
}
}
&.ng-leave {
animation-name: fadeOut;
}
}
// Keyframes
//
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
// Bootstrap 3
//
.modal-backdrop, .aside-backdrop {
&.am-fade {
background: rgba(0, 0, 0, .5);
animation-duration: @fade-duration / 2;
}
}
@@ -1,31 +0,0 @@
<div class="bs-docs-section">
<div class="page-header">
<h1 id="flip">FadeAndScale <a class="small" href="//github.com/mgcrea/angular-strap/blob/master/src/flip/flip.less" target="_blank">flip.less</a></h1>
<code>mgcrea.ngMotion.flip</code>
</div>
<p>Fancy flip animation that leverages <code>CSS3 keyframes</code>, see <a href="http://caniuse.com/#search=keyframes" target="_blank">browser support</a>.</p>
<p>This animation works with <code>perspective, rotate</code> animating respectively from <code>to 400px, 90 to 0</code>.</p>
<h3 id="flip-examples">Live demo <a class="small edit-plunkr" data-module-name="mgcrea.ngStrapDocs" data-content-html-url="aside/docs/aside.demo.html" data-content-js-url="aside/docs/aside.demo.js" ng-plunkr data-title="edit in plunker" data-placement="right" bs-tooltip></a></h3>
<!-- <pre class="bs-example-scope">$scope.aside = {{aside | json}};</pre> -->
<div class="bs-example" append-source>
<h5>flip</h5>
<button type="button" class="btn btn-primary" data-animation="am-flip-x" data-placement="bottom" bs-popover="popover">popover from bottom<br><small>(am-flip-x)</small></button>
<button type="button" class="btn btn-success" data-animation="am-flip-x" data-placement="center" bs-modal="modal">modal from center<br><small>(am-flip-x)</small></button>
</div>
<h2 id="flip-usage">Usage</h2>
<p>Append one of theses classes <code>am-flip-x</code> to enable theses transitions.</p>
<div class="callout callout-info">
<h4>AngularStrap integration</h4>
<p>You should use the <code>data-animation</code> attribute with AngularStrap.</p>
</div>
</div>
@@ -1,101 +0,0 @@
// Fade
//
@flip-duration: .4s;
@flip-timing-function: ease;
.am-flip-x {
animation-duration: @flip-duration;
animation-timing-function: @flip-timing-function;
animation-fill-mode: backwards;
&.am-flip-x-add, &.ng-hide-remove, &.ng-move {
animation-name: flipInXBounce;
}
&.am-flip-x-remove, &.ng-hide {
animation-name: flipOutX;
}
&.ng-enter {
visibility: hidden;
animation-name: flipInXBounce;
&.ng-enter-active {
visibility: visible;
}
}
&.ng-leave {
animation-name: flipOutX;
}
}
.am-flip-x-linear {
animation-duration: @flip-duration;
animation-timing-function: @flip-timing-function;
animation-fill-mode: backwards;
&.am-flip-x-add, &.ng-hide-remove, &.ng-move {
animation-name: flipInX;
}
&.am-flip-x-remove, &.ng-hide {
animation-name: flipOutX;
}
&.ng-enter {
visibility: hidden;
animation-name: flipInX;
&.ng-enter-active {
visibility: visible;
}
}
&.ng-leave {
animation-name: flipOutX;
}
}
// Keyframes
//
@keyframes flipInX {
from {
opacity: 0;
transform: perspective(400px) rotateX(90deg);
}
to {
opacity: 1;
transform: perspective(400px) rotateX(0deg);
}
}
@keyframes flipInXBounce {
from {
opacity: 0;
transform: perspective(400px) rotateX(90deg);
}
40% {
transform: perspective(400px) rotateX(-10deg);
}
70% {
transform: perspective(400px) rotateX(10deg);
}
to {
opacity: 1;
transform: perspective(400px) rotateX(0deg);
}
}
@keyframes flipOutX {
from {
opacity: 1;
transform: perspective(400px) rotateX(0deg);
}
to {
opacity: 0;
transform: perspective(400px) rotateX(90deg);
}
}
@@ -1,36 +0,0 @@
<div class="bs-docs-section">
<div class="page-header">
<h1 id="slide">Slide <a class="small" href="//github.com/mgcrea/angular-strap/blob/master/src/slide/slide.less" target="_blank">slide.less</a>
</h1>
<code>mgcrea.ngMotion.slide</code>
</div>
<p>Basic slide animation that leverages <code>CSS3 keyframes</code>, see <a href="http://caniuse.com/#search=keyframes" target="_blank">browser support</a>.</p>
<p>This animation works with <code>translateX/Y</code> animating from <code>0% to 100%</code>.</p>
<h3 id="slide-examples">Live demo <a class="small edit-plunkr" data-module-name="mgcrea.ngStrapDocs" data-content-html-url="aside/docs/aside.demo.html" data-content-js-url="aside/docs/aside.demo.js" ng-plunkr data-title="edit in plunker" data-placement="right" bs-tooltip></a></h3>
<!-- <pre class="bs-example-scope">$scope.aside = {{aside | json}};</pre> -->
<div class="bs-example" append-source>
<h5>slide</h5>
<button type="button" class="btn btn-primary" data-animation="am-slide-left" data-placement="left" bs-aside="aside">aside from left<br><small>(slide-left)</small></button>
<button type="button" class="btn btn-success" data-animation="am-slide-right" data-placement="right" bs-aside="aside">aside from right<br><small>(slide-right)</small></button>
<button type="button" class="btn btn-primary" data-animation="am-slide-top" bs-modal="modal">modal from top<br><small>(am-slide-top)</small></button>
<button type="button" class="btn btn-success" data-animation="am-slide-bottom" data-placement="center" bs-modal="modal">modal from bottom<br><small>(am-slide-bottom)</small></button>
</div>
<h2 id="slide-usage">Usage</h2>
<p>Append one of theses classes <code>am-slide-top</code>, <code>am-slide-right</code>, <code>am-slide-bottom</code>, <code>am-slide-left</code> to enable theses transitions, </p>
<div class="callout callout-info">
<h4>AngularStrap integration</h4>
<p>You should use the <code>data-animation</code> attribute with AngularStrap.</p>
</div>
</div>
@@ -1,19 +0,0 @@
'use strict';
angular.module('mgcrea.ngStrapDocs')
.config(function($asideProvider, $modalProvider) {
angular.extend($modalProvider.defaults, {
container: 'body',
html: true
});
angular.extend($asideProvider.defaults, {
container: 'body',
html: true
});
})
.controller('SlideDemoCtrl', function($scope) {
$scope.aside = {title: 'Title', content: 'Hello Aside<br />This is a multiline message!'};
$scope.modal = {title: 'Title', content: 'Hello Modal<br />This is a multiline message!'};
});
@@ -1,160 +0,0 @@
// Slide
//
@slide-duration: .3s;
@slide-timing-function: ease-in-out;
.am-slide-top {
animation-duration: @slide-duration;
animation-timing-function: @slide-timing-function;
animation-fill-mode: backwards;
&.am-fade-and-slide-top-add, &.ng-hide-remove, &.ng-move {
animation-name: slideFromTop;
}
&.am-fade-and-slide-top-remove, &.ng-hide {
animation-name: slideToTop;
}
&.ng-enter {
visibility: hidden;
animation-name: slideFromTop;
&.ng-enter-active {
visibility: visible;
}
}
&.ng-leave, {
animation-name: slideToTop;
}
}
.am-slide-right {
animation-duration: @slide-duration;
animation-timing-function: @slide-timing-function;
animation-fill-mode: backwards;
&.am-fade-and-slide-right-add, &.ng-hide-remove, &.ng-move {
animation-name: slideFromRight;
}
&.am-fade-and-slide-right-remove, &.ng-hide {
animation-name: slideToRight;
}
&.ng-enter {
visibility: hidden;
animation-name: slideFromRight;
&.ng-enter-active {
visibility: visible;
}
}
&.ng-leave, {
animation-name: slideToRight;
}
}
.am-slide-bottom {
animation-duration: @slide-duration;
animation-timing-function: @slide-timing-function;
animation-fill-mode: backwards;
&.am-fade-and-slide-bottom-add, &.ng-hide-remove, &.ng-move {
animation-name: slideFromBottom;
}
&.am-fade-and-slide-bottom-remove, &.ng-hide {
animation-name: slideToBottom;
}
&.ng-enter {
visibility: hidden;
animation-name: slideFromBottom;
&.ng-enter-active {
visibility: visible;
}
}
&.ng-leave, {
animation-name: slideToBottom;
}
}
.am-slide-left {
animation-duration: @slide-duration;
animation-timing-function: @slide-timing-function;
animation-fill-mode: backwards;
&.am-fade-and-slide-left-add, &.ng-hide-remove, &.ng-move {
animation-name: slideFromLeft;
}
&.am-fade-and-slide-left-remove, &.ng-hide {
animation-name: slideToLeft;
}
&.ng-enter {
visibility: hidden;
animation-name: slideFromLeft;
&.ng-enter-active {
visibility: visible;
}
}
&.ng-leave, {
animation-name: slideToLeft;
}
}
// Keyframes
//
@keyframes slideFromTop {
from {
transform: translateY(-100%);
}
}
@keyframes slideToTop {
to {
transform: translateY(-100%);
}
}
@keyframes slideFromRight {
from {
transform: translateX(100%);
}
}
@keyframes slideToRight {
to {
transform: translateX(100%);
}
}
@keyframes slideFromBottom {
from {
transform: translateY(100%);
}
}
@keyframes slideToBottom {
to {
transform: translateY(100%);
}
}
@keyframes slideFromLeft {
from {
transform: translateX(-100%);
}
}
@keyframes slideToLeft {
to {
transform: translateX(-100%);
}
}
@@ -1,32 +0,0 @@
{
"node": true,
"browser": true,
"esnext": true,
"bitwise": true,
"camelcase": false,
"curly": false,
"eqeqeq": true,
"immed": true,
"indent": 2,
"latedef": true,
"newcap": true,
"noarg": true,
"quotmark": "single",
"regexp": true,
"undef": true,
"unused": false,
"strict": true,
"globalstrict": true,
"trailing": true,
"smarttabs": true,
"predef": [
"$",
"angular",
"describe",
"beforeEach",
"afterEach",
"inject",
"it",
"expect"
]
}
@@ -1,63 +0,0 @@
// Karma configuration
'use strict';
module.exports = function(config) {
config.set({
// base path, that will be used to resolve files and exclude
basePath: './..',
// frameworks to use
frameworks: ['jasmine'],
// list of files / patterns to load in the browser
files: [
'bower_components/angular/angular.js',
'bower_components/angular-mocks/angular-mocks.js',
'bower_components/angular-animate/angular-animate.js',
'src/{,*/}*.js',
'bower_components/jquery/jquery.js',
'test/spec/*.js'
],
// list of files / patterns to exclude
exclude: [
],
// test results reporter to use
// possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
reporters: ['progress'],
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
colors: true,
// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: false,
// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera (has to be installed with `npm install karma-opera-launcher`)
// - Safari (only Mac; has to be installed with `npm install karma-safari-launcher`)
// - PhantomJS
// - IE (only Windows; has to be installed with `npm install karma-ie-launcher`)
browsers: ['PhantomJS'],
// If browser does not capture in given timeout [ms], kill it
captureTimeout: 60000,
// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun: false
});
};
@@ -1,19 +0,0 @@
'use strict';
describe('Animations', function() {
beforeEach(module('ngAnimate'));
var scope, $animate;
// Load ngAnimate and a mock scope
beforeEach(inject(function($rootScope, _$animate_) {
scope = $rootScope.$new();
$animate = _$animate_;
}));
it('the animate service should be properly defined', function() {
expect($animate).toBeDefined();
});
});
@@ -1,18 +0,0 @@
{
"name": "angular-scenario",
"version": "1.2.18",
"main": "./angular-scenario.js",
"dependencies": {
"angular": "1.2.18"
},
"homepage": "https://github.com/angular/bower-angular-scenario",
"_release": "1.2.18",
"_resolution": {
"type": "version",
"tag": "v1.2.18",
"commit": "ced796ccc54bd2d9942216aecd499a672cec6e2c"
},
"_source": "git://github.com/angular/bower-angular-scenario.git",
"_target": "1.2.18",
"_originalSource": "angular-scenario"
}
@@ -1,42 +0,0 @@
# bower-angular-scenario
This repo is for distribution on `bower`. The source for this module is in the
[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngScenario).
Please file issues and pull requests against that repo.
## Install
Install with `bower`:
```shell
bower install angular-scenario
```
## Documentation
Documentation is available on the
[AngularJS docs site](http://docs.angularjs.org/).
## License
The MIT License
Copyright (c) 2010-2012 Google, Inc. http://angularjs.org
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.
File diff suppressed because it is too large Load Diff
@@ -1,8 +0,0 @@
{
"name": "angular-scenario",
"version": "1.2.18",
"main": "./angular-scenario.js",
"dependencies": {
"angular": "1.2.18"
}
}
@@ -1,6 +0,0 @@
/**
* Configuration for jstd scenario adapter
*/
var jstdScenarioAdapter = {
relativeUrlPrefix: '/build/docs/'
};
@@ -1,185 +0,0 @@
/**
* @license AngularJS v1.0.4
* (c) 2010-2012 Google, Inc. http://angularjs.org
* License: MIT
*/
(function(window) {
'use strict';
/**
* JSTestDriver adapter for angular scenario tests
*
* Example of jsTestDriver.conf for running scenario tests with JSTD:
<pre>
server: http://localhost:9877
load:
- lib/angular-scenario.js
- lib/jstd-scenario-adapter-config.js
- lib/jstd-scenario-adapter.js
# your test files go here #
proxy:
- {matcher: "/your-prefix/*", server: "http://localhost:8000/"}
</pre>
*
* For more information on how to configure jstd proxy, see {@link http://code.google.com/p/js-test-driver/wiki/Proxy}
* Note the order of files - it's important !
*
* Example of jstd-scenario-adapter-config.js
<pre>
var jstdScenarioAdapter = {
relativeUrlPrefix: '/your-prefix/'
};
</pre>
*
* Whenever you use <code>browser().navigateTo('relativeUrl')</code> in your scenario test, the relativeUrlPrefix will be prepended.
* You have to configure this to work together with JSTD proxy.
*
* Let's assume you are using the above configuration (jsTestDriver.conf and jstd-scenario-adapter-config.js):
* Now, when you call <code>browser().navigateTo('index.html')</code> in your scenario test, the browser will open /your-prefix/index.html.
* That matches the proxy, so JSTD will proxy this request to http://localhost:8000/index.html.
*/
/**
* Custom type of test case
*
* @const
* @see jstestdriver.TestCaseInfo
*/
var SCENARIO_TYPE = 'scenario';
/**
* Plugin for JSTestDriver
* Connection point between scenario's jstd output and jstestdriver.
*
* @see jstestdriver.PluginRegistrar
*/
function JstdPlugin() {
var nop = function() {};
this.reportResult = nop;
this.reportEnd = nop;
this.runScenario = nop;
this.name = 'Angular Scenario Adapter';
/**
* Called for each JSTD TestCase
*
* Handles only SCENARIO_TYPE test cases. There should be only one fake TestCase.
* Runs all scenario tests (under one fake TestCase) and report all results to JSTD.
*
* @param {jstestdriver.TestRunConfiguration} configuration
* @param {Function} onTestDone
* @param {Function} onAllTestsComplete
* @returns {boolean} True if this type of test is handled by this plugin, false otherwise
*/
this.runTestConfiguration = function(configuration, onTestDone, onAllTestsComplete) {
if (configuration.getTestCaseInfo().getType() != SCENARIO_TYPE) return false;
this.reportResult = onTestDone;
this.reportEnd = onAllTestsComplete;
this.runScenario();
return true;
};
this.getTestRunsConfigurationFor = function(testCaseInfos, expressions, testRunsConfiguration) {
testRunsConfiguration.push(
new jstestdriver.TestRunConfiguration(
new jstestdriver.TestCaseInfo(
'Angular Scenario Tests', function() {}, SCENARIO_TYPE), []));
return true;
};
}
/**
* Singleton instance of the plugin
* Accessed using closure by:
* - jstd output (reports to this plugin)
* - initScenarioAdapter (register the plugin to jstd)
*/
var plugin = new JstdPlugin();
/**
* Initialise scenario jstd-adapter
* (only if jstestdriver is defined)
*
* @param {Object} jstestdriver Undefined when run from browser (without jstd)
* @param {Function} initScenarioAndRun Function that inits scenario and runs all the tests
* @param {Object=} config Configuration object, supported properties:
* - relativeUrlPrefix: prefix for all relative links when navigateTo()
*/
function initScenarioAdapter(jstestdriver, initScenarioAndRun, config) {
if (jstestdriver) {
// create and register ScenarioPlugin
jstestdriver.pluginRegistrar.register(plugin);
plugin.runScenario = initScenarioAndRun;
/**
* HACK (angular.scenario.Application.navigateTo)
*
* We need to navigate to relative urls when running from browser (without JSTD),
* because we want to allow running scenario tests without creating its own virtual host.
* For example: http://angular.local/build/docs/docs-scenario.html
*
* On the other hand, when running with JSTD, we need to navigate to absolute urls,
* because of JSTD proxy. (proxy, because of same domain policy)
*
* So this hack is applied only if running with JSTD and change all relative urls to absolute.
*/
var appProto = angular.scenario.Application.prototype,
navigateTo = appProto.navigateTo,
relativeUrlPrefix = config && config.relativeUrlPrefix || '/';
appProto.navigateTo = function(url, loadFn, errorFn) {
if (url.charAt(0) != '/' && url.charAt(0) != '#' &&
url != 'about:blank' && !url.match(/^https?/)) {
url = relativeUrlPrefix + url;
}
return navigateTo.call(this, url, loadFn, errorFn);
};
}
}
/**
* Builds proper TestResult object from given model spec
*
* TODO(vojta) report error details
*
* @param {angular.scenario.ObjectModel.Spec} spec
* @returns {jstestdriver.TestResult}
*/
function createTestResultFromSpec(spec) {
var map = {
success: 'PASSED',
error: 'ERROR',
failure: 'FAILED'
};
return new jstestdriver.TestResult(
spec.fullDefinitionName,
spec.name,
jstestdriver.TestResult.RESULT[map[spec.status]],
spec.error || '',
spec.line || '',
spec.duration);
}
/**
* Generates JSTD output (jstestdriver.TestResult)
*/
angular.scenario.output('jstd', function(context, runner, model) {
model.on('SpecEnd', function(spec) {
plugin.reportResult(createTestResultFromSpec(spec));
});
model.on('RunnerEnd', function() {
plugin.reportEnd();
});
});
initScenarioAdapter(window.jstestdriver, angular.scenario.setUpAndRun, window.jstdScenarioAdapter);
})(window);
@@ -1,13 +0,0 @@
{
"name": "autotype",
"_cacheHeaders": {
"ETag": "\"4fc86fb680c427f7883d2f4dfacbe0d84ba76a92\"",
"Content-Length": "13286",
"Content-Type": "text/plain; charset=utf-8"
},
"_release": "e-tag:4fc86fb68",
"main": "index.js",
"_source": "https://raw.github.com/mmonteleone/jquery.autotype/master/jquery.autotype.js",
"_target": "*",
"_originalSource": "https://raw.github.com/mmonteleone/jquery.autotype/master/jquery.autotype.js"
}
@@ -1,283 +0,0 @@
/**
* jQuery.autotype - Simple, accurate, typing simulation for jQuery
*
* version 0.5.0
*
* http://michaelmonteleone.net/projects/autotype
* http://github.com/mmonteleone/jquery.autotype
*
* Copyright (c) 2009 Michael Monteleone
* Licensed under terms of the MIT License (README.markdown)
*/
(function($){
// code type constants
var CHARACTER = 1,
NON_CHARACTER = 2,
MODIFIER_BEGIN = 3,
MODIFIER_END = 4,
isNullOrEmpty = function(val) { return val === null || val.length === 0; },
isUpper = function(char) { return char.toUpperCase() === char; },
isLower = function(char) { return char.toLowerCase() === char; },
areDifferentlyCased = function(char1,char2) {
return (isUpper(char1) && isLower(char2)) ||
(isLower(char1) && isUpper(char2));
},
convertCase = function(char) {
return isUpper(char) ? char.toLowerCase() : char.toUpperCase();
},
parseCodes = function(value, codeMap) {
// buffer to hold a collection of key/char code pairs corresponding to input string value
var codes = [],
// buffer to hold the name of a control key as it's being parsed
definingControlKey = false,
// hold a collection of currently pushed modifier keys
activeModifiers = {
alt: false,
meta: false,
shift: false,
ctrl: false
},
explicitModifiers = $.extend({}, activeModifiers),
// buffer to hold construction of current control key
currentControlKey = '',
previousChar = '',
pushCode = function(opts) {
codes.push($.extend({}, opts, activeModifiers));
},
pushModifierBeginCode = function(modifierName) {
activeModifiers[modifierName] = true;
pushCode({
keyCode: codeMap[modifierName],
charCode: 0,
char: '',
type: MODIFIER_BEGIN
});
},
pushModifierEndCode = function(modifierName) {
activeModifiers[modifierName] = false;
pushCode({
keyCode: codeMap[modifierName],
charCode: 0,
char: '',
type: MODIFIER_END
});
};
for(var i=0;i<value.length;i++) {
// if the character is about to define a control key
if(!definingControlKey &&
i <= value.length - 5 &&
value.charAt(i) === '{' &&
value.charAt(i+1) === '{')
{
// skip the next "{"
i++;
definingControlKey = true;
}
// if the character is about to end definition of control key
else if (definingControlKey &&
i <= value.length - 2 &&
value.charAt(i) === '}' &&
value.charAt(i+1) === '}')
{
// skip the next "}"
i++;
// check if this key is a modifier-opener (is a ctrl,alt,del,shift)
if(activeModifiers[currentControlKey] !== undefined)
{
explicitModifiers[currentControlKey] = true;
pushModifierBeginCode(currentControlKey);
}
// check if this key is a modifier-closer (is a /ctrl,/alt,/del,.shift)
else if(activeModifiers[currentControlKey.substring(1)] !== undefined)
{
explicitModifiers[currentControlKey] = false;
pushModifierEndCode(currentControlKey.substring(1));
}
// otherwise is some other kind of non-modifier control key
else
{
pushCode({
keyCode: codeMap[currentControlKey],
charCode: 0,
char: '',
type: NON_CHARACTER,
controlKeyName: currentControlKey
});
}
definingControlKey = false;
currentControlKey = '';
}
// currently defining control key
else if (definingControlKey)
{
currentControlKey += value.charAt(i);
}
// otherwise is just a text character
else
{
var character = value.charAt(i);
// check for any implicitly changing of cases, and register presses/releases
// of the shift key in accord with them.
if(
(!isNullOrEmpty(previousChar) && areDifferentlyCased(previousChar, character)) ||
(isNullOrEmpty(previousChar) && isUpper(character))
)
{
if(isUpper(character) && !activeModifiers.shift) {
pushModifierBeginCode("shift");
} else if (isLower(character) && activeModifiers.shift && !explicitModifiers.shift){
pushModifierEndCode("shift");
}
}
// modify the current character if there are active modifiers
if((activeModifiers.shift && isLower(character)) ||
(!activeModifiers.shift && isUpper(character))) {
// shift converts case
character = convertCase(character);
}
var code = {
// if can't identify a keycode, just fudge with the char code.
// nope, this isn't ideal by any means.
keyCode: codeMap[character] || character.charCodeAt(0),
charCode: character.charCodeAt(0),
char: character,
type: CHARACTER
};
// modify the current character if there are active modifiers
if(activeModifiers.alt ||
activeModifiers.ctrl ||
activeModifiers.meta) {
// alt, ctrl, meta make it so nothing is typed
code.char = '';
}
pushCode(code);
if(code.char !== '') { previousChar = code.char; }
}
}
return codes;
},
triggerCodeOnField = function(code, field) {
// build up base content that every event should contain
// with information about whether certain chord keys are
// simulated as being pressed
var evnt = {
altKey: code.alt,
metaKey: code.meta,
shiftKey: code.shift,
ctrlKey: code.ctrl
};
// build out 3 event instances for all the steps of a key entry
var keyDownEvent = $.extend($.Event(), evnt, {type:'keydown', keyCode: code.keyCode, charCode: 0, which: code.keyCode});
var keyPressEvent = $.extend($.Event(), evnt, {type:'keypress', keyCode: 0, charCode: code.charCode, which: code.charCode || code.keyCode});
var keyUpEvent = $.extend($.Event(), evnt, {type:'keyup', keyCode: code.keyCode, charCode: 0, which: code.keyCode});
// go ahead and trigger the first 2 (down and press)
// a keyup of a modifier shouldn't also re-trigger a keydown
if(code.type !== MODIFIER_END) {
field.trigger(keyDownEvent);
}
// modifier keys don't have a keypress event, only down or up
if(code.type !== MODIFIER_BEGIN && code.type !== MODIFIER_END) {
field.trigger(keyPressEvent);
}
// only actually add the new character to the input if the keydown or keypress events
// weren't cancelled by any consuming event handlers
if(!keyDownEvent.isPropagationStopped() &&
!keyPressEvent.isPropagationStopped()) {
if(code.type === NON_CHARACTER) {
switch(code.controlKeyName) {
case 'enter':
field.val(field.val() + "\n");
break;
case 'back':
field.val(field.val().substring(0,field.val().length-1));
break;
}
} else {
field.val(field.val() + code.char);
}
}
// then also trigger the 3rd event (up)
// a keydown of a modifier shouldn't also trigger a keyup until coded
if(code.type !== MODIFIER_BEGIN) {
field.trigger(keyUpEvent);
}
},
triggerCodesOnField = function(codes, field, delay, global) {
if(delay > 0) {
codes = codes.reverse();
var keyInterval = global.setInterval(function(){
var code = codes.pop();
triggerCodeOnField(code, field);
if(codes.length === 0) {
global.clearInterval(keyInterval);
field.trigger('autotyped');
}
}, delay);
} else {
$.each(codes,function(){
triggerCodeOnField(this, field);
});
field.trigger('autotyped');
}
};
$.fn.autotype = function(value, options) {
if(value === undefined || value === null) { throw("Value is required by jQuery.autotype plugin"); }
var settings = $.extend({}, $.fn.autotype.defaults, options);
// 1st Pass
// step through the input string and convert it into
// a logical sequence of steps, key, and charcodes to apply to the inputs
var codes = parseCodes(value, settings.keyCodes[settings.keyBoard]);
// 2nd Pass
// Run the translated codes against each input through a realistic
// and cancelable series of key down/press/up events
return this.each(function(){ triggerCodesOnField(codes, $(this), settings.delay, settings.global); });
};
$.fn.autotype.defaults = {
version: '0.5.0',
keyBoard: 'enUs',
delay: 0,
global: window,
keyCodes: {
enUs: { 'back':8,'ins':45,'del':46,'enter':13,'shift':16,'ctrl':17,'meta':224,
'alt':18,'pause':19,'caps':20,'esc':27,'pgup':33,'pgdn':34,
'end':35,'home':36,'left':37,'up':38,'right':39,'down':40,
'printscr':44,'num0':96,'num1':97,'num2':98,'num3':99,'num4':100,
'num5':101,'num6':102,'num7':103,'num8':104,'num9':105,
'multiply':106,'add':107,'subtract':109,'decimal':110,
'divide':111,'f1':112,'f2':113,'f3':114,'f4':115,'f5':116,
'f6':117,'f7':118,'f8':119,'f9':120,'f10':121,'f11':122,
'f12':123,'numlock':144,'scrolllock':145,' ':9,' ':32,
'tab':9,'space':32,'0':48,'1':49,'2':50,'3':51,'4':52,
'5':53,'6':54,'7':55,'8':56,'9':57,')':48,'!':49,'@':50,
'#':51,'$':52,'%':53,'^':54,'&':55,'*':56,'(':57,';':186,
'=':187,',':188,'-':189,'.':190,'/':191,'[':219,'\\':220,
']':221,"'":222,':':186,'+':187,'<':188,'_':189,'>':190,
'?':191,'{':219,'|':220,'}':221,'"':222,'a':65,'b':66,'c':67,
'd':68,'e':69,'f':70,'g':71,'h':72,'i':73,'j':74,'k':75,
'l':76,'m':77,'n':78,'o':79,'p':80,'q':81,'r':82,'s':83,
't':84,'u':85,'v':86,'w':87,'x':88,'y':89,'z':90,'A':65,
'B':66,'C':67,'D':68,'E':69,'F':70,'G':71,'H':72,'I':73,
'J':74,'K':75,'L':76,'M':77,'N':78,'O':79,'P':80,'Q':81,
'R':82,'S':83,'T':84,'U':85,'V':86,'W':87,'X':88,'Y':89,'Z':90 }
}
};
})(jQuery);
@@ -1,23 +0,0 @@
{
"name": "bootstrap-datepicker",
"version": "1.3.0",
"main": [
"js/bootstrap-datepicker.js",
"css/datepicker.css",
"css/datepicker3.css"
],
"dependencies": {
"jquery": ">=1.7.1",
"bootstrap": ">=3.0 <4.0"
},
"homepage": "https://github.com/eternicode/bootstrap-datepicker",
"_release": "1.3.0",
"_resolution": {
"type": "version",
"tag": "1.3.0",
"commit": "37db99f95ff3a32ccc76b7122b2b73f3b0b9fe42"
},
"_source": "git://github.com/eternicode/bootstrap-datepicker.git",
"_target": ">= 1.0.0",
"_originalSource": "bootstrap-datepicker"
}
@@ -1,3 +0,0 @@
instrumented/
tests/coverage.html
docs/_build
@@ -1,3 +0,0 @@
instrumented/
tests/coverage.html
docs/_build
@@ -1,18 +0,0 @@
b965e03abfcb10d66c8dad96d54d6f8e1c5d8501 v1.0.0
7a490672b362af7640bbeb68553a0e0a5a95cb9e v1.0.1
9a730557f14d79c2ce2d28eacb24bdf52ac2e042 1.0.2-rc.1
62604d506e5ba9d85ee6c2d86723b9b3d817e7bd 1.0.2-rc.1.1
f6211e251c021331decc16bfbcf25577dd354ef4 1.0.2-rc.2
493d2332f0cb7f2dd308c442920da86063ff2e0f 1.0.2
77a6755dc3df3ada745024648535562587fab630 1.1.0
fe9e4106def42741adba1606245ab0eab32acb55 1.1.1
e37ab4f7d0d30a45ee80a7019fd2bcf8c1765de7 1.1.2
0596a9619e30c5f52d0f56c9cba9daf0d69d29ab 1.1.3
ba267071688d93d973bee4ddb11344971e851e9e 1.2.0-rc.1
57e2f78d70dc5c6a265869cff3b885a78123300c 1.2.0
68703f4d535efdeb865eba0c0b3d3b4acfb76121 1.3.0-rc.1
abfc042e74af3e944a0819296260a8c96c6169c1 1.3.0-rc.2
2687213f73e257375fcc3c35c1a3d23284e17341 1.3.0-rc.3
0e5bbe72a69c9d75edbfce775943e2f7eb719eeb 1.3.0-rc.4
3d6c7937e3f7b7e1cdb7db22fbd504e853ee776b 1.3.0-rc.5
5bc760304871bb691a613b79c86ba9a91735007f 1.3.0-rc.6
@@ -1,27 +0,0 @@
{
"requireSpaceAfterKeywords": [
"if", "else", "for", "while", "do", "switch", "return"
],
"disallowSpacesInFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
},
"disallowSpacesInsideObjectBrackets": true,
"disallowSpacesInsideArrayBrackets": true,
"disallowSpacesInsideParentheses": true,
"disallowQuotedKeysInObjects": "allButReserved",
"disallowSpaceAfterObjectKeys": true,
"disallowLeftStickedOperators": [
"?", "==", "===", "!=", "!==", ">", ">=", "<", "<="
],
"disallowRightStickedOperators": [
"?", "==", "===", "!=", "!==", ">", ">=", "<", "<="
],
"requireLeftStickedOperators": [","],
"requireRightStickedOperators": ["!"],
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~"],
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
"validateLineBreaks": "LF",
"requireKeywordsOnNewLine": ["else", "return", "break", "delete"],
"requireLineFeedAtFileEnd": true
}
@@ -1,20 +0,0 @@
{
"jquery": true,
"browser": true,
"eqeqeq": true,
"freeze": true,
//"indent": 4, // when we move to spaces
"latedef": true,
"undef": true,
"unused": true,
"immed": true,
"trailing": true,
"maxcomplexity": 50, // Can we get this under 5?
//"maxlen": 120,
"-W014": false, // Bad line breaking before ? (in tertiary operator)
"-W065": false, // Missing radix parameter to parseInt (defaults to 10)
"-W069": false, // Literal accessor is better written in dot notation
"-W100": false // Silently deleted characters (in locales)
}
@@ -1,9 +0,0 @@
install:
- npm install -g jshint jscs
before_script:
- cd ./tests
- echo "new Date().toString();" | phantomjs
script:
- jshint ../js/bootstrap-datepicker.js ../js/locales/*.js
- jscs -c ../.jscs.json ../js/bootstrap-datepicker.js ../js/locales/*.js
- phantomjs run-qunit.js tests.html

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