Compare commits

..

No commits in common. "main" and "legacy_v2" have entirely different histories.

90 changed files with 30800 additions and 10513 deletions

18
.gitignore vendored
View file

@ -1,13 +1,9 @@
# Docker data
mysql-*
session-ses_*.md
forgejo/
redis/
nextcloud/
# Environment & secrets
.env
# Nginx
portfolio/mongo/data/
portfolio/mongo/db_backups/
portfolio/mongo/auth/
portfolio/src/node_modules/
nginx/certs/
nginx/conf.d/default.conf
nextcloud/
gitea/
.env

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule "portfolio"]
path = portfolio
url = https://unboundedpress.org/code/mwinter/portfolio.git

158
AGENTS.md
View file

@ -1,158 +0,0 @@
# Agent Guidelines for Unboundedpress Dev
## Project Overview
This repository contains two main projects:
- **`portfolio-nuxt/`** - Primary Nuxt 3 application (Vue 3, TypeScript, Tailwind CSS, Pinia)
- **`portfolio/`** - Legacy Express.js application (plain JavaScript)
The Nuxt project is the main focus for development.
## Build Commands
### portfolio-nuxt (Primary Project)
```bash
cd portfolio-nuxt
npm install # Install dependencies
npm run dev # Development server
npm run build # Build for production
npm run generate # Generate static site
npm run preview # Preview production build
```
### portfolio (Legacy Project)
```bash
cd portfolio/src
npm run serve # Development with nodemon
npm run format # Format code
```
### Running a Single Test
**No test framework is currently configured.** If you add tests:
- For Nuxt: Use Vitest
- Run a single test: `npx vitest run --testNamePattern="test name"`
## Code Style Guidelines
### General Principles
- Use TypeScript in Vue components (`.vue` with `<script setup lang="ts">`)
- Use JavaScript (`.js`) in Pinia stores under `stores/`
- Follow Vue 3 Composition API with `<script setup>`
- Use Tailwind CSS classes for styling
### TypeScript Conventions
- Use `defineProps` and `defineEmits` with type-based syntax
- Use `withDefaults` for optional props with default values
- Prefer `ref` and `reactive` from Vue
- Use `toRefs` when destructuring props
```typescript
const props = withDefaults(
defineProps<{
modelValue?: boolean
persistent?: boolean
}>(),
{
modelValue: false,
persistent: false,
},
)
const emit = defineEmits<{
(e: 'update:modelValue', value: boolean): void
}>()
```
### Vue Component Structure
1. `<script setup lang="ts">` - Logic (imports, props, emits, composables)
2. `<template>` - Template with slots
3. `<style>` - Scoped styles (if needed, Tailwind preferred)
### Imports
- Use `@/` alias for imports (configured in Nuxt)
- Import Vue core: `import { ref, watch } from 'vue'`
- Import from stores: `import { useModalStore } from '@/stores/ModalStore'`
- Import icons: `import Icon from 'nuxt-icon'` or `<Icon name="..." />` in template
### File Naming
- Vue components: PascalCase (e.g., `IconButton.vue`, `Modal.vue`)
- Component folders: PascalCase with index.vue (e.g., `components/Modal/`)
- Stores: PascalCase with Store suffix (e.g., `AudioPlayerStore.js`, `ModalStore.js`)
- Pages: kebab-case (e.g., `index.vue`, `about-us.vue`)
### Tailwind CSS
- Use utility classes for all styling
- Follow existing patterns in components (see `components/Modal/Modal.vue`)
- Use `bg-`, `text-`, `p-`, `m-`, `flex-`, `grid-` prefixes
### State Management (Pinia)
- Create stores in `stores/` directory
- Use JavaScript (`.js`) for stores
- Follow the pattern in `stores/ModalStore.js`:
```javascript
import { defineStore } from "pinia"
export const useModalStore = defineStore("ModalStore", {
state: () => ({ key: "value" }),
actions: {
setKey(value) {
this.key = value
}
}
})
```
### API Data Fetching
- Use Nuxt's `useFetch` and `useAsyncData` composables
- Transform data in the `transform` option
```typescript
const { data: works } = await useFetch('https://unboundedpress.org/api/works', {
transform: (works) => {
// transformation logic
return transformedData
}
})
```
### Error Handling
- Handle null/undefined values in templates with `v-if` guards
- Use optional chaining (`?.`) when accessing nested properties
- Validate URLs before using them (see pattern in `pages/index.vue`)
### Head Management
Use `useHead` for SEO metadata:
```typescript
useHead({
titleTemplate: 'Site Title - %s'
})
```
### Transition and Animation
- Use Vue's built-in `<Transition>` and `<TransitionRoot>` components
- Use Headless UI for complex components (already installed)
## Additional Conventions
### Composables
- Place reusable logic in `composables/` directory
- Use the `use` prefix (e.g., `useModal`)
### Server Routes
- Place API routes in `server/api/` directory
- Use `.ts` files for TypeScript routes
### Image Handling
- Use `<NuxtImg>` component for optimized images
- Configure domains in `nuxt.config.ts` under `image.domains`
## Environment Variables
- Use `.env` files for local development
- Template available in `.env_template`
- Never commit secrets to version control
## Docker
- `Dockerfile` provided for deployment
- Multi-stage build available in `Dockerfile_upgrade`

301
README.md
View file

@ -1,301 +0,0 @@
# Unboundedpress
Self-hosted web infrastructure using Docker Compose.
## Overview
- **portfolio**: ⚠️ **MOST IMPORTANT** - Main Nuxt 3 website containing a majority of my life's work (replaced old Express.js portfolio)
- **Nextcloud**: File storage and document editing
- **Forgejo**: Code repository (migrated from Gitea)
- **Collabora**: Online document editor (integrated with Nextcloud)
- **nginx-proxy**: Reverse proxy with automatic HTTPS (Let's Encrypt)
- **Redis**: Caching for Nextcloud
## Prerequisites
- Docker & Docker Compose installed
- Ports 80 and 443 available
- Domain DNS pointing to server
## Quick Start
```bash
# 1. Clone repository
git clone <repo-url>
cd unboundedpress_dev
# 2. Create .env file
cp .env_template .env
# Edit .env with your values
# 3. Start services
docker compose up -d
# 4. Verify
docker compose ps
```
## Environment Variables (.env)
| Variable | Description | Example |
|----------|-------------|---------|
| DOMAIN | Your domain | unboundedpress.org |
| USER | Admin username | mwinter |
| PASSWORD | Admin password | ************ |
| EMAIL | Email for SSL certificates | admin@example.com |
## Services
| Service | URL | Description |
|---------|-----|-------------|
| portfolio | https://{domain}/ | Main website |
| Nextcloud | https://{domain}/cloud/ | File storage & documents |
| Forgejo | https://{domain}/code/ | Git repositories |
| Collabora | https://{domain}/collab/ | Document editing (integrated with Nextcloud) |
## Production Deployment
### Step 1: Update Environment
Edit `.env`:
```bash
DOMAIN=unboundedpress.org
# Comment out or remove: HTTPS_METHOD=noredirect
```
### Step 2: Update Nextcloud Collabora URLs
```bash
# Internal URL (Nextcloud uses to talk to Collabora)
docker exec nextcloud php occ config:app:set richdocuments wopi_url --value="http://collabora:9980"
# External URL (browser uses to open Collabora)
docker exec nextcloud php occ config:app:set richdocuments public_wopi_url --value="https://unboundedpress.org/collab"
# Callback URL (Collabora uses to connect back to Nextcloud)
docker exec nextcloud php occ config:app:set richdocuments wopi_callback_url --value="https://unboundedpress.org/cloud"
```
### Step 3: Restart Services
```bash
docker compose restart
```
### Step 4: Verify SSL
SSL certificates are automatically issued by acme-companion. Check status:
```bash
docker logs nginx-proxy-acme
```
## Local Development
### HTTPS Setup (mkcert)
For local development with HTTPS, use mkcert to create locally-trusted certificates:
```bash
# Install mkcert (Arch Linux)
sudo pacman -S mkcert
# Install local CA
mkcert -install
# Create certificates
cd nginx/certs
mkcert -key-file key.pem -cert-file cert.pem "localdev.unboundedpress.org" "*.localdev.unboundedpress.org"
# Rename to default certificate
mv cert.pem default.crt
mv key.pem default.key
# Restart proxy
docker compose restart nginx-proxy
```
### Access Local Services
After setup, access at:
- Main site: https://localdev.unboundedpress.org/
- Nextcloud: https://localdev.unboundedpress.org/cloud/
- Forgejo: https://localdev.unboundedpress.org/code/
## Maintenance
### Bot Blocker Updates
The nginx-ultimate-bad-bot-blocker updates automatically via cron (monthly on the 1st at 3 AM).
Manual update:
```bash
docker exec nginx-proxy update-ngxblocker
```
### Backup Nextcloud
```bash
# Database backup
docker exec mysql-nextcloud mysqldump -u root -p${PASSWORD} nextcloud > backup_nextcloud_db_$(date +%Y%m%d).sql
# Files backup (run on host)
tar -czf nextcloud_backup_$(date +%Y%m%d).tar.gz nextcloud/html/data/
```
### Backup Forgejo
```bash
# Database backup
docker exec mysql-forgejo mysqldump -u root -p${PASSWORD} forgejo > backup_forgejo_db_$(date +%Y%m%d).sql
# Files backup (run on host)
tar -czf forgejo_backup_$(date +%Y%m%d).tar.gz forgejo/
```
### Update Images
```bash
# Pull latest images
docker compose pull
# Restart services with new images
docker compose up -d
```
### View Logs
```bash
# All services
docker compose logs -f
# Specific service
docker compose logs -f nginx-proxy
docker compose logs -f nextcloud
docker compose logs -f forgejo
```
## Directory Structure
⚠️ **Important**: The `portfolio/` directory contains the majority of my life's work. Ensure backups are current before making any changes.
```
.
.
├── docker-compose.yml # Main compose file
├── .env # Environment variables (not in repo)
├── .env_template # Template for .env
├── nginx/
│ ├── Dockerfile # nginx-proxy build with bot blocker
│ ├── certs/ # SSL certificates
│ ├── conf.d/ # nginx configuration
│ ├── vhost.d/ # Virtual host configs
│ ├── bots.d/ # Bot blocker rules
│ └── crontab # Cron for bot blocker updates
├── portfolio/
│ ├── Dockerfile # Multi-stage production build
│ └── ...
├── nextcloud/
│ ├── html/ # Nextcloud data
│ └── mysql/ # Nextcloud database
├── forgejo/
│ └── ... # Forgejo data
└── redis/
└── ... # Redis data
```
## Troubleshooting
### Nextcloud Login Issues
If login redirects back to login page:
1. Clear browser cookies
2. Check trusted_domains in config
3. Ensure HTTPS is properly configured
```bash
# Check trusted domains
docker exec nextcloud occ config:system:get trusted_domains
# Add domain if needed
docker exec nextcloud occ config:system:set trusted_domains 4 --value="unboundedpress.org"
```
### Collabora Not Opening Documents
1. Verify public_wopi_url is set correctly:
```bash
docker exec nextcloud occ config:app:get richdocuments public_wopi_url
```
2. Check nginx config for /collab/ routing:
```bash
docker exec nginx-proxy cat /etc/nginx/vhost.d/unboundedpress.org | grep -A 5 "location /collab"
```
3. Check Collabora logs:
```bash
docker logs collabora
```
### SSL Certificate Issues
1. Check acme-companion logs:
```bash
docker logs nginx-proxy-acme
```
2. Verify ports 80/443 are open:
```bash
sudo ufw status
# or
sudo iptables -L -n
```
3. Check certificate files exist:
```bash
ls -la nginx/certs/
```
### Container Won't Start
1. Check logs for errors:
```bash
docker compose logs [service-name]
```
2. Verify .env file exists and has correct values
3. Check port conflicts:
```bash
sudo netstat -tlnp | grep ':80\|:443'
```
## Architecture
```
Internet
nginx-proxy (port 80/443)
├── portfolio ─────► :5000
├── nextcloud ──────────► :80 → /cloud/
│ ├── mysql-nextcloud
│ └── redis
├── forgejo ────────────► :4000 → /code/
│ └── mysql-forgejo
└── collabora ──────────► :9980 → /collab/
```
## Credits
- [nginx-proxy](https://github.com/nginx-proxy/nginx-proxy)
- [acme-companion](https://github.com/nginx-proxy/acme-companion)
- [nginx-ultimate-bad-bot-blocker](https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker)
- [Collabora](https://www.collaboraoffice.com/)
- [Forgejo](https://forgejo.org/)
- [Nextcloud](https://nextcloud.com/)
- [Redis](https://redis.io/)

41
README.txt Normal file
View file

@ -0,0 +1,41 @@
# unboundedpress
Repo for my personal website.
If you have the keys to my castle, you should be able to archive the entire top level folder, move everything to another server and just deploy with:
docker-compose up -d
But that is being pretty optimistic.
In the docker-compose.yml file, there are detailed notes of non-automatic steps that need to be taken, especially for deploying from scratch.
Here are some useful tips.
The current server is running on ubuntu server 22.04/
# Running on docker. Here are some install tips.
# https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04
# https://www.digitalocean.com/community/tutorials/how-to-install-docker-compose-on-ubuntu-22-04
# There are two .env files that are the same and go at the top level folder and again in portfolio/src. Templates are provided.
# Here is a list of the services
# Main components
porfolio - node server and frontend for my porfilio that uses mongo backend
mongo - houses the data of my portfolio
restheart - api to feed data from mongo to portfolio (though there are some end points built into the node app)
gitea - my code repository
mysql-gitea - databse for gitea
nginx-proxy - reverse proxy for everything
acme-companion - lets encrypt certificate manager
# Extra components
nextcloud
mysql-nextcloud
# Here are some useful tips for mongo
# dump and restore example:
mongodump --host localhost --port 27017 -d portfolio -o /db_backups/db_dump_2023_04_07 -u username -p password --authenticationDatabase admin
mongorestore --host localhost --port 27017 -d portfolio -u username -p password --authenticationDatabase admin /db_backups/db_dump_2023_04_07/unboundedpress
# here is an example of a file upload through restheart:
curl -v -u user:pass -X POST -F 'properties={"filename":"filename"}' -F "file=@filepath_here" https://unboundedpress.org/api/scores.files

View file

@ -1,28 +1,34 @@
version: '3'
services:
nginx-proxy:
build: ./nginx
# TODO: Note that this is built with ultimate-bad-bot-blocker scripts
# that currently need to be run manually to update
# (with the possibility that the bots.d folder has to be blown away first - not sure)
# Eventually, this needs to be checked and put on a chron job
# docker exec -t nginx-proxy bash
# /usr/local/sbin/setup-ngxblocker -x
# /usr/local/sbin/update-ngxblocker -x email
container_name: nginx-proxy
networks:
default:
ipv4_address: 172.18.0.5
ports:
- "80:80"
- "443:443"
restart: always
#environment:
# - HTTPS_METHOD=noredirect
# - HTTPS_METHOD=noredirect
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/vhost.d:/etc/nginx/vhost.d
- ./nginx/bots.d:/etc/nginx/bots.d
- ./nginx/certs:/etc/nginx/certs:rw
- nginx:/usr/share/nginx/html
#- nginx:/app/nginx.tmpl
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./nginx/crontab:/etc/crontabs/root:ro
#- ./nginx/htpasswd:/etc/nginx/htpasswd
acme-companion:
image: nginxproxy/acme-companion:2.6.2
image: nginxproxy/acme-companion:2.2
container_name: nginx-proxy-acme
environment:
- DEFAULT_EMAIL=${EMAIL}
@ -42,41 +48,173 @@ services:
restart: always
portfolio:
# TODO: This will eventually be rewritten with something like VUE
container_name: portfolio
build:
context: ./portfolio
args:
- PASSWORD=${PASSWORD}
build: ./portfolio
# To just server running the following command
#command: bash -c "npm run serve"
# To reinstall the packages run the following command instead
command: bash -c "npm install && npm run serve"
volumes:
- portfolio:/src/node_modules
- ./portfolio/server/data:/src/server/data
- ./portfolio/src:/src
environment:
- PASSWORD=${PASSWORD}
- VIRTUAL_HOST=${DOMAIN},www.${DOMAIN}
- VIRTUAL_PATH=/
- VIRTUAL_PORT=5000
- LETSENCRYPT_HOST=${DOMAIN},www.${DOMAIN},gitea.${DOMAIN}
#- VIRTUAL_DEST=/
- VIRTUAL_PORT=3000
- LETSENCRYPT_HOST=${DOMAIN},www.${DOMAIN},gitea.${DOMAIN} #this last one is for legacy support
- LETSENCRYPT_EMAIL=${EMAIL}
ports:
- "3000:3000"
restart: always
depends_on:
nginx-proxy:
mongo:
condition: service_healthy
#restheart:
#nginx-proxy:
#labels:
# com.github.nginx-proxy.nginx-proxy.keepalive: "64"
mongo:
container_name: mongo
# using mongo4 or mongo5 as opposed to mongo:6 for server status in mongo-express and because of bugs
# mongo 5 requires avx support so if the machine is not capable of avx support use mongo4
# NOTE: mongo 4 shell uses mongo and mongo 5 uses mongosh!
# These need to be changed accordingly in the health check and the mongosetup.sh file for the container mongo-init
image: mongo:5
#image: mongo:4
restart: always
environment:
- MONGO_INITDB_ROOT_USERNAME=${USER}
- MONGO_INITDB_ROOT_PASSWORD=${PASSWORD}
- MONGO_INITDB_DATABASE=portfolio
command: ["--keyFile", "/auth/keyfile", "--replSet", "rs0", "--bind_ip_all"]
# NOTE: If starting from scracth, create key for mongo then put it in ./mongo/auth/
# openssl rand -base64 756 > keyfile
# chmod 600 keyfile
# sudo chown 999 keyfile
# sudo chgrp 999 keyfile
# NOTE: If you tar archive the site and move it without retaining permissions,
# you will need to run the last 3 lines on the file to make it work
ports:
- 27017:27017
volumes:
- ./portfolio/mongo/data/db:/data/db
- ./portfolio/mongo/data/configdb:/data/configdb
- ./portfolio/mongo/auth/keyfile:/auth/keyfile
- ./portfolio/mongo/db_backups:/db_backups
healthcheck:
# mongo 5
test: echo 'rs.status().ok' | mongosh --host mongo:27017 -u $${MONGO_INITDB_ROOT_USERNAME} -p $${MONGO_INITDB_ROOT_PASSWORD} --quiet | grep 1
# mongo 4
#test: echo 'rs.status().ok' | mongo --host mongo:27017 -u $${MONGO_INITDB_ROOT_USERNAME} -p $${MONGO_INITDB_ROOT_PASSWORD} --quiet | grep 1
interval: 15s
start_period: 20s
mongo-init:
container_name: mongo-init
# using mongo5 as opposed to mongo:6 for server status in mongo-express and because of bugs
image: mongo:5
restart: on-failure
volumes:
# mongo 5
- ./portfolio/mongo/scripts/mongo5setup.sh:/scripts/mongo5setup.sh
# mongo 4
#- ./portfolio/mongo/scripts/mongo4setup.sh:/scripts/mongo4setup.sh
# these two are necessary otherwise they get created again as anonymous volumes
- ./portfolio/mongo/data/db:/data/db
- ./portfolio/mongo/data/configdb:/data/configdb
# mongo 5
entrypoint: ["bash", "/scripts/mongo5setup.sh" ]
# mongo 4
#entrypoint: ["bash", "/scripts/mongo4setup.sh" ]
environment:
- MONGO_INITDB_ROOT_USERNAME=${USER}
- MONGO_INITDB_ROOT_PASSWORD=${PASSWORD}
depends_on:
mongo:
condition: service_started
mongo-express:
# using mongo-express:0.54 as opposed to mongo-express:1 for server status and because of bugs
image: mongo-express:0.54
container_name: mongo-express
restart: always
environment:
- ME_CONFIG_MONGODB_URL=mongodb://${USER}:${PASSWORD}@mongo:27017/?replicaSet=rs0
- ME_CONFIG_MONGODB_ADMINUSERNAME=${USER}
- ME_CONFIG_MONGODB_ADMINPASSWORD=${PASSWORD}
- ME_CONFIG_MONGODB_ENABLE_ADMIN=true
- ME_CONFIG_BASICAUTH_USERNAME=${USER}
- ME_CONFIG_BASICAUTH_PASSWORD=${PASSWORD}
- ME_CONFIG_SITE_BASEURL=/admin
- ME_CONFIG_SITE_GRIDFS_ENABLED=true
- VIRTUAL_HOST=${DOMAIN},admin.${DOMAIN}
- VIRTUAL_PATH=/admin/
- VIRTUAL_PORT=8081
#volumes:
# - ./nginx/certs:/etc/nginx/certs:ro
depends_on:
mongo:
condition: service_healthy
ports:
- "8081:8081"
forgejo:
image: codeberg.org/forgejo/forgejo:7
container_name: forgejo
restheart:
image: softinstigate/restheart:7
container_name: restheart
# NOTE: the api_admin endpoint only works locally
environment:
- RHO=
/mongo/mongo-mounts[1]->{'where':'/api','what':'portfolio'};
/mongo/mongo-mounts[2]->{'where':'/api_admin','what':'restheart'};
/mclient/connection-string->'mongodb://${USER}:${PASSWORD}@mongo:27017/?replicaSet=rs0';
/http-listener/host->'0.0.0.0';
# NOTE: If starting from scratch use must set admin password!
# curl -u admin:secret -X PATCH localhost:8080/api_admin/users/admin -H "Content-Type: application/json" -d '{ "password": "my-strong-password" }'
# NOTE: An ACL entry to allow unaunthenticated users to perform gets must be added
# For now, it was added to the restheart db manually
# by adding the following to the acl collection with curl or using mongo-express
# {
# predicate: 'path-prefix[/api] and method[GET]',
# roles: ['$unauthenticated'],
# priority: 50
# }
# This does not seem to do anything but should somehow use a file for the realm creations
#/fileRealmAuthenticator/users[userid='admin']/password->'${PASSWORD}';
- VIRTUAL_HOST=${DOMAIN},www.${DOMAIN}
- VIRTUAL_PATH=/api/
- VIRTUAL_DEST=/api/
- VIRTUAL_PORT=8080
depends_on:
mongo:
condition: service_healthy
#command: ["--envFile", "/opt/restheart/etc/default.properties"]
ports:
- "8080:8080"
restart: always
#volumes:
# - ./restheart:/opt/restheart/etc:ro
gitea:
image: gitea/gitea:1
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- FORGEJO__database__DB_TYPE=mysql
- FORGEJO__database__HOST=mysql-forgejo
- FORGEJO__database__NAME=forgejo
- FORGEJO__database__USER=${USER}
- FORGEJO__database__PASSWD=${PASSWORD}
- FORGEJO__server__LANDING_PAGE=/${USER}
- FORGEJO__attachment__MAX_SIZE=5000
- FORGEJO__server__ROOT_URL=https://${DOMAIN}/code/
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=mysql-gitea
- GITEA__database__NAME=gitea
- GITEA__database__USER=${USER}
- GITEA__database__PASSWD=${PASSWORD}
- GITEA__server__LANDING_PAGE=/${USER}
- GITEA__attachment__MAX_SIZE=5000
#- GITEA__repository.upload__FILE_MAX_SIZE=5000
# NOTE: This next line can be commented out if you want to run the wizard locally
# But it needs to be set properly as the base url to work remotely
# no matter how you run the wizard
- GITEA__server__ROOT_URL=https://${DOMAIN}/code/
- HTTP_PORT=4000
- LFS_START_SERVER=true
- DISABLE_REGISTRATION=true
@ -87,16 +225,19 @@ services:
- VIRTUAL_DEST=/
restart: always
volumes:
- ./forgejo:/data
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "4000:4000"
- "222:22"
depends_on:
mysql-forgejo:
mysql-gitea:
condition: service_healthy
mysql-forgejo:
image: mariadb:10.11
container_name: mysql-forgejo
mysql-gitea:
image: mariadb:10
container_name: mysql-gitea
restart: always
environment:
- MYSQL_ROOT_PASSWORD=${PASSWORD}
@ -104,17 +245,21 @@ services:
- MYSQL_DATABASE=gitea
- MYSQL_USER=${USER}
volumes:
- ./forgejo/mysql:/var/lib/mysql
- ./gitea/mysql:/var/lib/mysql
#- ./mysql_gitea/etc:/etc/mysql/conf.d
#- ./mysql_gitea/init:/docker-entrypoint-initdb.d
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
interval: 15s
start_period: 20s
nextcloud:
image: nextcloud:31-apache
image: nextcloud:25
container_name: nextcloud
restart: always
volumes:
#- ./nextcloud/data:/var/www/html/data
#- nextcloud:/var/www/html
- ./nextcloud/html:/var/www/html
environment:
- MYSQL_DATABASE=nextcloud
@ -124,43 +269,40 @@ services:
- NEXTCLOUD_ADMIN_USER=${USER}
- NEXTCLOUD_ADMIN_PASSWORD=${PASSWORD}
- NEXTCLOUD_TRUSTED_DOMAINS=${DOMAIN} www.${DOMAIN}
- NEXTCLOUD_EXTRA_APPS=calendar,richdocuments
#- NEXTCLOUD_INIT_LOCK=true
- APACHE_DISABLE_REWRITE_IP=1
- TRUSTED_PROXIES=nginx-proxy
- REDIS_HOST=redis
- OVERWRITEHOST=${DOMAIN}
- OVERWRITEWEBROOT=/cloud
- OVERWRITEPROTOCOL=https
#- OVERWRITECLIURL=http://localhost/
- OVERWRITECLIURL=https://unboundedpress.org
# NOTE: These configurations above make it work with the subdirectory
# but you cannot set VIRTUAL_PORT
# for reasons I have no idea
- VIRTUAL_HOST=${DOMAIN},www.${DOMAIN}
- VIRTUAL_PATH=/cloud/
- VIRTUAL_DEST=/
extra_hosts:
- "${DOMAIN}:172.18.0.5"
# TODO: add redis and chron
#- REDIS_HOST=redis
depends_on:
mysql-nextcloud:
condition: service_healthy
redis:
condition: service_started
#redis:
ports:
- 8888:80
collabora:
image: collabora/code:latest
image: collabora/code:22.05.14.3.1
container_name: collabora
depends_on:
nginx-proxy:
condition: service_started
nextcloud:
condition: service_started
- nextcloud
cap_add:
- MKNOD
extra_hosts:
- "${DOMAIN}:172.18.0.5"
environment:
- username=${USER}
- password=${PASSWORD}
- domain=${DOMAIN}
- server_name=${DOMAIN}
- aliasgroup1=https://${DOMAIN}:443
- VIRTUAL_HOST=${DOMAIN},www.${DOMAIN}
- VIRTUAL_PATH=/collab/
- VIRTUAL_DEST=/
@ -170,25 +312,23 @@ services:
- extra_params=--o:ssl.enable=false --o:ssl.termination=true
# NOTE: The file nginx/vhosts.d/unboundedpress.org handles
# routing for collabora on production only
ports:
- 9980:9980
cron-nextcloud:
image: nextcloud:31-apache
image: nextcloud:25
container_name: cron-nextcloud
restart: always
volumes:
- ./nextcloud/html:/var/www/html
entrypoint: /cron.sh
environment:
- NEXTCLOUD_EXTRA_APPS=calendar,richdocuments
- REDIS_HOST=redis
depends_on:
mysql-nextcloud:
condition: service_healthy
redis:
condition: service_started
#redis:
mysql-nextcloud:
image: mariadb:10.11
image: mariadb:10
container_name: mysql-nextcloud
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
@ -204,26 +344,8 @@ services:
interval: 15s
start_period: 20s
redis:
image: redis:alpine
container_name: redis
restart: always
volumes:
- ./redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 3
volumes:
nginx:
#nextcloud:
acme:
portfolio:
networks:
default:
ipam:
driver: default
config:
- subnet: 172.18.0.0/16

View file

@ -1,6 +1,4 @@
FROM nginxproxy/nginx-proxy:1.9.0
RUN apt-get update && apt-get install -y wget cron && rm -rf /var/lib/apt/lists/*
FROM nginxproxy/nginx-proxy:1.2
# Install curl
# RUN apk add --no-cache curl

View file

@ -1,12 +0,0 @@
# DEPRECATED
# This file is no longer used
# ********************************************
# ALL Blacklisting AND Whitelisting is done in
# ********************************************
# include /etc/nginx/bots.d/whitelist-domains.conf; < whitelisting of domains (can also blacklist)
# include /etc/nginx/bots.d/custom-bad-referrers.conf; < whitelisting AND blacklisting of domains and referrer domains
# DEPRECATED

View file

@ -5,8 +5,8 @@
# VERSION INFORMATION #
#----------------------
# Version: V4.2024.01
# Updated: 2024-04-23
# Version: V4.2022.03
# Updated: 2022-03-25
#----------------------
# VERSION INFORMATION #
@ -53,27 +53,12 @@
# "~*(?:\b)someverygooduseragentname2(?:\b)" 0;
# "~*(?:\b)some\-very\-good\-useragentname2(?:\b)" 0;
# ----------------------
# RATE LIMITING EXAMPLES
# ----------------------
# "~*(?:\b)someverybaduseragentname1(?:\b)" 2;
# "~*(?:\b)someverybaduseragentname2(?:\b)" 2;
# "~*(?:\b)some\-very\-bad\-useragentname3(?:\b)" 2;
# ---------------------
# BLACKLISTING EXAMPLES
# ---------------------
# "~*(?:\b)someverybaduseragentname4(?:\b)" 3;
# "~*(?:\b)someverybaduseragentname5(?:\b)" 3;
# "~*(?:\b)some\-very\-bad\-useragentname6(?:\b)" 3;
# ----------------------------
# SUPER RATE LIMITING EXAMPLES
# ----------------------------
# "~*(?:\b)someverybaduseragentname7(?:\b)" 4;
# "~*(?:\b)someverybaduseragentname8(?:\b)" 4;
# "~*(?:\b)some\-very\-bad\-useragentname9(?:\b)" 4;
# "~*(?:\b)someverybaduseragentname1(?:\b)" 3;
# "~*(?:\b)someverybaduseragentname2(?:\b)" 3;
# "~*(?:\b)some\-very\-bad\-useragentname2(?:\b)" 3;
# Here are some default things I block on my own server, these appear in various types of injection attacks
# You can disable them if you have problems or don't agree by switching thir value to 0 or moving them into the whitelist section first and then making their value 0

View file

@ -2,8 +2,8 @@
# VERSION INFORMATION #
#----------------------
# Version: V5.2024.04
# Updated: 2024-04-30
# Version: V4.2019.04
# Updated: 2019-06-28
#----------------------
# VERSION INFORMATION #
@ -49,19 +49,15 @@
# BLOCK BAD BOTS
# --------------
# Section bot_1 Unused
#limit_conn bot1_connlimit 100;
#limit_req zone=bot1_reqlimitip burst=50;
limit_conn bot2_connlimit 10;
limit_req zone=bot2_reqlimitip burst=10;
# Uncomment below lines for super rate limiting feature
#limit_conn bot4_connlimit 10;
#limit_req zone=bot4_reqlimitip burst=10;
if ($bad_bot = '3') {
return 444;
}
return 444; # << Response Code Issued May Be Modified to Whatever you Choose ie. 404 but 444 wastes less of Nginxs time
}
# ---------------------
# BLOCK BAD REFER WORDS

File diff suppressed because it is too large Load diff

View file

@ -1 +0,0 @@
0 3 1 * * /usr/local/sbin/update-ngxblocker

View file

@ -1,2 +1,12 @@
## Start of configuration add by letsencrypt container
location ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request off;
allow all;
root /usr/share/nginx/html;
try_files $uri =404;
break;
}
## End of configuration add by letsencrypt container
include /etc/nginx/bots.d/ddos.conf;
include /etc/nginx/bots.d/blockbots.conf;

View file

@ -1,3 +1,13 @@
## Start of configuration add by letsencrypt container
location ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request off;
allow all;
root /usr/share/nginx/html;
try_files $uri =404;
break;
}
## End of configuration add by letsencrypt container
# This is needed for legacy support
location = / {
rewrite ^ http://gitea.unboundedpress.org/code/mwinter/ redirect;

View file

@ -1,58 +0,0 @@
# CSP headers for Nextcloud - scoped to /cloud/ only
location ^~ /cloud {
proxy_pass http://nextcloud:80;
proxy_hide_header Content-Security-Policy;
proxy_hide_header X-Content-Security-Policy;
proxy_hide_header X-WebKit-CSP;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; frame-src 'self' https://localdev.unboundedpress.org https://localdev.unboundedpress.org/collab; img-src 'self' data: blob:; font-src 'self' data:; connect-src 'self' https://localdev.unboundedpress.org wss://localdev.unboundedpress.org; form-action 'self'; object-src 'none'; base-uri 'self'" always;
}
# Collabora routing for localdev.unboundedpress.org
# Redirect /collab to Collabora
location ^~ /collab {
proxy_pass http://collabora:9980;
proxy_set_header Host $http_host;
}
# static files
location ^~ /browser {
proxy_pass http://collabora:9980;
proxy_set_header Host $http_host;
}
# WOPI discovery URL
location ^~ /hosting/discovery {
proxy_pass http://collabora:9980;
proxy_set_header Host $http_host;
}
# Capabilities
location ^~ /hosting/capabilities {
proxy_pass http://collabora:9980;
proxy_set_header Host $http_host;
}
# main websocket
location ~ ^/cool/(.*)/ws$ {
proxy_pass http://collabora:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
# download, presentation and image upload
location ~ ^/(c|l)ool {
proxy_pass http://collabora:9980;
proxy_set_header Host $http_host;
}
# Admin Console websocket
location ^~ /cool/adminws {
proxy_pass http://collabora:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}

View file

@ -1,56 +1,53 @@
# CSP headers for Nextcloud - scoped to /cloud/ only
location ^~ /cloud {
proxy_pass http://nextcloud:80;
proxy_hide_header Content-Security-Policy;
proxy_hide_header X-Content-Security-Policy;
proxy_hide_header X-WebKit-CSP;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; frame-src 'self' https://unboundedpress.org https://unboundedpress.org/collab; img-src 'self' data: blob:; font-src 'self' data:; connect-src 'self' https://unboundedpress.org wss://unboundedpress.org; form-action 'self'; object-src 'none'; base-uri 'self'" always;
## Start of configuration add by letsencrypt container
location ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request off;
allow all;
root /usr/share/nginx/html;
try_files $uri =404;
break;
}
## End of configuration add by letsencrypt container
# Collabora routing for unboundedpress.org
# Redirect /collab to Collabora
location ^~ /collab {
proxy_pass http://collabora:9980;
proxy_set_header Host $http_host;
}
# The following are all for collabora routing
# static files
location ^~ /browser {
proxy_pass http://collabora:9980;
proxy_pass http://unboundedpress.org-cd15914db06db1d6722abd3bcfd0beaa541bbc60;
proxy_set_header Host $http_host;
}
# WOPI discovery URL
location ^~ /hosting/discovery {
proxy_pass http://collabora:9980;
proxy_pass http://unboundedpress.org-cd15914db06db1d6722abd3bcfd0beaa541bbc60;
proxy_set_header Host $http_host;
}
# Capabilities
location ^~ /hosting/capabilities {
proxy_pass http://collabora:9980;
proxy_pass http://unboundedpress.org-cd15914db06db1d6722abd3bcfd0beaa541bbc60;
proxy_set_header Host $http_host;
}
# main websocket
location ~ ^/cool/(.*)/ws$ {
proxy_pass http://collabora:9980;
proxy_pass http://unboundedpress.org-cd15914db06db1d6722abd3bcfd0beaa541bbc60;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
proxy_set_header Host $http_host;
proxy_read_timeout 36000s;
}
# download, presentation and image upload
location ~ ^/(c|l)ool {
proxy_pass http://collabora:9980;
proxy_pass http://unboundedpress.org-cd15914db06db1d6722abd3bcfd0beaa541bbc60;
proxy_set_header Host $http_host;
}
# Admin Console websocket
location ^~ /cool/adminws {
proxy_pass http://collabora:9980;
proxy_pass http://unboundedpress.org-cd15914db06db1d6722abd3bcfd0beaa541bbc60;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;

@ -1 +0,0 @@
Subproject commit 1284f1e080da0dc257e7a37d90feb4f55d5d731b

12
portfolio/.dockerignore Normal file
View file

@ -0,0 +1,12 @@
# Ignore everything
*
# Allow files and directories
!/src
# Ignore unnecessary files inside allowed directories
# This should go after the allowed directories
**/*~
**/*.log
**/.DS_Store
**/Thumbs.db

7
portfolio/Dockerfile Normal file
View file

@ -0,0 +1,7 @@
FROM node:19-bullseye-slim
WORKDIR /src
COPY src/package*.json ./
COPY . .

View file

@ -0,0 +1,26 @@
echo "**********************************************"
echo "Waiting for startup.."
sleep 15
echo "done"
echo SETUP.sh time now: `date +"%T" `
mongo --host mongo:27017 -u ${MONGO_INITDB_ROOT_USERNAME} -p ${MONGO_INITDB_ROOT_PASSWORD} <<EOF
var cfg = {
"_id": "rs0",
"protocolVersion": 1,
"version": 1,
"members": [
{
"_id": 0,
"host": "mongo:27017",
"priority": 2
}
]
};
rs.initiate(cfg, { force: true });
rs.secondaryOk();
db.getMongo().setReadPref('primary');
rs.status();
EOF

View file

@ -0,0 +1,26 @@
echo "**********************************************"
echo "Waiting for startup.."
sleep 15
echo "done"
echo SETUP.sh time now: `date +"%T" `
mongosh --host mongo:27017 -u ${MONGO_INITDB_ROOT_USERNAME} -p ${MONGO_INITDB_ROOT_PASSWORD} <<EOF
var cfg = {
"_id": "rs0",
"protocolVersion": 1,
"version": 1,
"members": [
{
"_id": 0,
"host": "mongo:27017",
"priority": 2
}
]
};
rs.initiate(cfg, { force: true });
rs.secondaryOk();
db.getMongo().setReadPref('primary');
rs.status();
EOF

View file

@ -0,0 +1,4 @@
USER=username
PASSWORD=really_strong_password
EMAIL=email
DOMAIN=your_domain.tld

105
portfolio/src/app.js Normal file
View file

@ -0,0 +1,105 @@
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var fs = require('fs');
var engines = require('consolidate')
var handlebars = require('handlebars');
var bibtexParse = require('bibtex-parse-js');
// note that this is the same env variables of the docker project,
// but you still need the .env file in both locations because everything is dockerized!!!
require('dotenv').config();
const port = process.env.PORT || 3000;
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://' + process.env.USER + ':' + process.env.PASSWORD + '@mongo:27017/portfolio?authSource=admin';
var dbName = "portfolio";
var assert = require('assert');
var client = MongoClient.connect(url, function (err, client) {
assert.equal(null, err);
console.log("Connected successfully to server");
// This runs on startup, which means bibtex entries are only updated when the server is restarted
db = client.db(dbName);
var pubdata = fs.readFileSync( path.join(__dirname, 'public/bibtex/bibtex.bib'), 'utf8');
var pubs = bibtexParse.toJSON(pubdata);
//pubs.sort(function(a, b){return a.entryTags.year-b.EntryTags.year})
// Create the collection
db.collection('publications').remove();
db.collection('publications').insert(pubs);
client
});
// close client when app closes
const cleanup = (event) => { // SIGINT is sent for example when you Ctrl+C a running process from the command line.
client.close(); // Close MongodDB Connection when Process ends
process.exit(); // Exit with default success-code '0'.
}
process.on('SIGINT', cleanup);
process.on('SIGTERM', cleanup);
var routes = require('./routes/index');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.set("view options", { layout: true });
app.engine('.template', engines.handlebars);
// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// Make our db accessible to our router
app.use(function(req,res,next){
req.db = db;
next();
});
app.use('/', routes);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
var server = app.listen(port);
module.exports = app;

7975
portfolio/src/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,32 @@
{
"name": "portfolio",
"version": "2.0.0",
"description": "node website for michael winter portfolio",
"main": "app.js",
"dependencies": {
"async": "^3.1.0",
"bibtex-parse-js": "0.0.24",
"consolidate": "^0.15.1",
"cookie-parser": "^1.4.4",
"express": "^4.17.1",
"handlebars": "^4.1.2",
"jade": "^1.11.0",
"moment": "^2.24.0",
"mongodb": "^3.2.7",
"morgan": "^1.9.1",
"request": "^2.88.0",
"serve-favicon": "^2.5.0",
"dotenv": "^8.2.0"
},
"devDependencies": {
"nodemon": "^1.18.3",
"prettier": "^2.0.5"
},
"scripts": {
"dev": "node app.js",
"serve": "nodemon app.js",
"format": "prettier app.js **/*.js --write"
},
"author": "michael winter",
"license": "GPL-3.0-or-later"
}

View file

@ -0,0 +1,212 @@
@article{Winter20c,
author = {with Dantas, P.},
title = {Evolving curricula: reflections on The Quarantine Seminars},
year = {forthcoming},
howpublished = {reflections_on_the_quarantine_seminars.pdf}
}
@misc{Winter20b,
author = {},
title = {Liner notes to the album "the yggdrasil-soli" by Ulrich Krieger},
publisher = {Winds Measures Recordings},
year = {2020},
howpublished = {krieger_yggdrasil_soli_liner_notes.pdf}
}
@incollection{Winter20a,
author = {},
title = {Meta+phenomenology: primer towards a phenomenology formally based on algorithmic information theory and metabiology},
editor = {Doria, F. & Wuppuluri, S.},
booktitle = {Unravelling Complexity: Life and Work of Gregory Chaitin},
publisher = {World Scientific},
year = {2020},
howpublished = {https://www.worldscientific.com/worldscibooks/10.1142/11270}
}
@incollection{Winter19c,
author = {},
title = {A few more thoughts about Leibniz: the prediction of harmonic distance in harmonic space (with text to preliminary thoughts)},
journal = {MusMat: Brazilian Journal of Music and Mathematics},
volume = {3},
number = {1},
pages = {7992},
year = {2019},
howpublished = {A_few_more_thoughts_about_Leibniz.pdf}
}
@incollection{Winter19b,
author = {},
title = {steady state: a study in taxation},
editor = {Vriezen, S.},
volume = {38},
journal = {nY},
year = {2019},
howpublished = {https://www.ny-web.be/tijdschrift/feb-2019/}
}
@misc{Winter19a,
author = {with Polansky, L.},
title = {liner notes to the album <em>"Changes"</em> by James Tenney},
publisher = {New World Records},
year = {2019},
howpublished = {tenney_changes_liner_notes.pdf}
}
@incollection{Winter17,
author = {},
title = {On minimal change musical morphologies},
editor = {Pareyon, G., Pina-Romero, S., Agustin-Aquino, O.A., and Lluis-Puebla, E.},
booktitle = {The Musical-Mathematical Mind},
publisher = {Springer},
year = {2017},
howpublished = {On_minimal_change_musical_morphologies.pdf}
}
@misc{Winter16,
author = {},
title = {Liner notes to the album "Three Pieces for Two Pianos" by Larry Polansky},
publisher = {New World Records},
year = {2016},
howpublished = {polansky_piano_liner_notes.pdf}
}
@Book{Tenney15,
author = {Tenney, J.},
title = {From Scratch: Writings in Music Theory},
editor = {Polansky, L., Pratt, L., Wannamaker, R., and Winter, M.},
publisher = {University of Illinois Press},
year = {2015},
howpublished = {https://www.press.uillinois.edu/books/catalog/78det5km.html}
}
@misc{grove,
author = {},
title = {Approximating Omega},
journal = {Carbono (online)},
volume = {7},
year = {2014},
howpublished = {https://revistacarbono.com/artigos/07-omega-michael-winter/}
}
@article{Winter10,
author = {with Akhmedov, A.},
title = {Chordal and timbral morphologies using Hamiltonian cycles},
journal = {Journal of Mathematics and Music},
volume = {8},
number = {1},
pages = {124},
year = {2014},
howpublished = {Chordal_and_timbral_morphologies_using_Hamiltonian_cycles.pdf}
}
@incollection{Winter12,
author = {},
title = {Relativity and scalability with respect to sound and silence},
editor = {Lely, J. & Saunders, M.},
booktitle = {Word Events: Perspectives on Verbal Notation},
publisher = {Bloomsbury},
year = {2012},
howpublished = {https://www.bloomsbury.com/us/word-events-9781441173102/}
}
@article{Polansky11,
author = {with Polansky, L. & Barnett, A.},
title = {A few more words about James Tenney: dissonant counterpoint and statistical feedback},
journal = {Journal of Mathematics and Music},
volume = {5},
number = {2},
pages = {6382},
year = {2011},
howpublished = {Dissonant_counterpoint_and_statistical_feedback.pdf}
}
@misc{emy,
author = {},
title = {Notes on a new economics for a new music},
journal = {Experimental Music Yearbook (online)},
volume = {2},
year = {2010},
howpublished = {https://experimentalmusicyearbook.com/filter/Michael-Winter/notes-on-a-new-economics-for-a-new-art}
}
@article{doi:10.1080/07494467.2010.509594,
author = {with Barrett, G.D.},
title = {LiveScore: realtime notation in the music of Harris Wulfson},
journal = {Contemporary Music Review},
volume = {29},
number = {1},
pages = {5562},
year = {2010},
howpublished = {Livescore.pdf}
}
@phdthesis{WinterDiss10,
type = {Dissertation},
title = {Structural Metrics: an epistemology},
author = {},
publisher = {Dissertation},
school = {University of California, Santa Barbara},
year = {2010},
howpublished = {Structural_Metrics.pdf}
}
@article{SAM:7914368,
author = {},
title = {James Tenney: Selected Works 19611969 (review)},
journal = {Journal of the Society for American Music},
volume = {4},
number = {Special Issue 04},
month = {11},
year = {2010},
pages = {531533}
}
@misc{grove,
author = {with Hanson, S., Streb, C., and Polansky, L.},
title = {James Tenney biographical entry},
booktitle = {Grove Dictionary of American Music},
publisher = {Oxford University Press},
year = {2009}
}
@article{doi:10.1080/07494460701671566,
author = {},
title = {On James Tenney's Arbor Vitae for string quartet},
journal = {Contemporary Music Review},
volume = {27},
number = {1},
pages = {131150},
year = {2008},
howpublished = {On_Arbor_Vitae.pdf}
}
@article{Winter07,
author = {},
title = {Mavericks on mavericks: James Tenneys last courses at CalArts},
journal = {MusikTexte},
volume = {112},
pages = {6669},
year = {2007},
howpublished = {https://musiktexte.de/epages/dc91cfee-4fdc-41fe-82da-0c2b88528c1e.sf/de_DE/?ObjectPath=/Shops/dc91cfee-4fdc-41fe-82da-0c2b88528c1e/Products/MT-112}
}
@inproceedings{Wulfson:2007,
author = {with Barrett, G.D. & Wulfson, H.},
title = {Automatic Notation Generators},
booktitle = {Proceedings of the 7th International NIME Conference},
series = {NIME '07},
year = {2007},
pages = {346351},
acmid = {1279817},
address = {New York, NY, USA},
howpublished = {Automatic_notation_generators.pdf}
}

View file

@ -0,0 +1,212 @@
@article{Winter20c,
author = {with Dantas, P.},
title = {Evolving curricula: reflections on The Quarantine Seminars},
year = {forthcoming},
howpublished = {reflections_on_the_quarantine_seminars.pdf}
}
@misc{Winter20b,
author = {},
title = {Liner notes to the album <em>the yggdrasil-soli</em> by Ulrich Krieger},
publisher = {Winds Measures Recordings},
year = {2020},
howpublished = {krieger_yggdrasil_soli_liner_notes.pdf}
}
@incollection{Winter20a,
author = {},
title = {Meta+phenomenology: primer towards a phenomenology formally based on algorithmic information theory and metabiology},
editor = {Doria, F. & Wuppuluri, S.},
booktitle = {Unravelling Complexity: Life and Work of Gregory Chaitin},
publisher = {World Scientific},
year = {2020},
howpublished = {https://www.worldscientific.com/worldscibooks/10.1142/11270}
}
@incollection{Winter19c,
author = {},
title = {A few more thoughts about Leibniz: the prediction of harmonic distance in harmonic space (with text to preliminary thoughts)},
journal = {MusMat: Brazilian Journal of Music and Mathematics},
volume = {3},
number = {1},
pages = {7992},
year = {2019},
howpublished = {A_few_more_thoughts_about_Leibniz.pdf}
}
@incollection{Winter19b,
author = {},
title = {steady state: a study in taxation},
editor = {Vriezen, S.},
volume = {38},
journal = {nY},
year = {2019},
howpublished = {https://www.ny-web.be/tijdschrift/feb-2019/}
}
@misc{Winter19a,
author = {with Polansky, L.},
title = {Liner notes to the album <em>Changes</em> by James Tenney},
publisher = {New World Records},
year = {2019},
howpublished = {tenney_changes_liner_notes.pdf}
}
@incollection{Winter17,
author = {},
title = {On minimal change musical morphologies},
editor = {Pareyon, G., Pina-Romero, S., Agustin-Aquino, O.A., and Lluis-Puebla, E.},
booktitle = {The Musical-Mathematical Mind},
publisher = {Springer},
year = {2017},
howpublished = {On_minimal_change_musical_morphologies.pdf}
}
@misc{Winter16,
author = {},
title = {Liner notes to the album <em>Three Pieces for Two Pianos</em> by Larry Polansky},
publisher = {New World Records},
year = {2016},
howpublished = {polansky_piano_liner_notes.pdf}
}
@Book{Tenney15,
author = {Tenney, J.},
title = {From Scratch: Writings in Music Theory},
editor = {Polansky, L., Pratt, L., Wannamaker, R., and Winter, M.},
publisher = {University of Illinois Press},
year = {2015},
howpublished = {https://www.press.uillinois.edu/books/catalog/78det5km.html}
}
@misc{grove,
author = {},
title = {Approximating Omega},
journal = {Carbono (online)},
volume = {7},
year = {2014},
howpublished = {https://revistacarbono.com/artigos/07-omega-michael-winter/}
}
@article{Winter10,
author = {with Akhmedov, A.},
title = {Chordal and timbral morphologies using Hamiltonian cycles},
journal = {Journal of Mathematics and Music},
volume = {8},
number = {1},
pages = {124},
year = {2014},
howpublished = {Chordal_and_timbral_morphologies_using_Hamiltonian_cycles.pdf}
}
@incollection{Winter12,
author = {},
title = {Relativity and scalability with respect to sound and silence},
editor = {Lely, J. & Saunders, M.},
booktitle = {Word Events: Perspectives on Verbal Notation},
publisher = {Bloomsbury},
year = {2012},
howpublished = {https://www.bloomsbury.com/us/word-events-9781441173102/}
}
@article{Polansky11,
author = {with Polansky, L. & Barnett, A.},
title = {A few more words about James Tenney: dissonant counterpoint and statistical feedback},
journal = {Journal of Mathematics and Music},
volume = {5},
number = {2},
pages = {6382},
year = {2011},
howpublished = {Dissonant_counterpoint_and_statistical_feedback.pdf}
}
@misc{emy,
author = {},
title = {Notes on a new economics for a new music},
journal = {Experimental Music Yearbook (online)},
volume = {2},
year = {2010},
howpublished = {https://experimentalmusicyearbook.com/filter/Michael-Winter/notes-on-a-new-economics-for-a-new-art}
}
@article{doi:10.1080/07494467.2010.509594,
author = {with Barrett, G.D.},
title = {LiveScore: realtime notation in the music of Harris Wulfson},
journal = {Contemporary Music Review},
volume = {29},
number = {1},
pages = {5562},
year = {2010},
howpublished = {Livescore.pdf}
}
@phdthesis{WinterDiss10,
type = {Dissertation},
title = {Structural Metrics: an epistemology},
author = {},
publisher = {Doctoral Dissertation},
school = {University of California, Santa Barbara},
year = {2010},
howpublished = {Structural_Metrics.pdf}
}
@article{SAM:7914368,
author = {},
title = {James Tenney: Selected Works 19611969 (review)},
journal = {Journal of the Society for American Music},
volume = {4},
number = {Special Issue 04},
month = {11},
year = {2010},
pages = {531533}
}
@misc{grove,
author = {with Hanson, S., Streb, C., and Polansky, L.},
title = {James Tenney biographical entry},
booktitle = {Grove Dictionary of American Music},
publisher = {Oxford University Press},
year = {2009}
}
@article{doi:10.1080/07494460701671566,
author = {},
title = {On James Tenney's <em>Arbor Vitae</em> for string quartet},
journal = {Contemporary Music Review},
volume = {27},
number = {1},
pages = {131150},
year = {2008},
howpublished = {On_Arbor_Vitae.pdf}
}
@article{Winter07,
author = {},
title = {Mavericks on mavericks: James Tenneys last courses at CalArts},
journal = {MusikTexte},
volume = {112},
pages = {6669},
year = {2007},
howpublished = {https://musiktexte.de/epages/dc91cfee-4fdc-41fe-82da-0c2b88528c1e.sf/de_DE/?ObjectPath=/Shops/dc91cfee-4fdc-41fe-82da-0c2b88528c1e/Products/MT-112}
}
@inproceedings{Wulfson:2007,
author = {with Barrett, G.D. & Wulfson, H.},
title = {Automatic Notation Generators},
booktitle = {Proceedings of the 7th International NIME Conference},
series = {NIME '07},
year = {2007},
pages = {346351},
acmid = {1279817},
address = {New York, NY, USA},
howpublished = {Automatic_notation_generators.pdf}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View file

@ -0,0 +1,46 @@
$(document).ready(function() {
var split, filename, grid;
split = window.location.href.split('/');
filename = split[split.length-1];
grid = split[split.length-2];
displayPDF(grid, filename);
});
function displayPDF(grid, filename) {
var BASE_URL='http://dev.unboundedpress.org';
$.getJSON(BASE_URL+"/unboundedpress/"+grid+".files?filter={'filename':'"+filename+"'}", function(data){
var score, details;
score = data._embedded['rh:file'];
console.log(score);
if (score) {
var details = $('<object>').attr({
data: BASE_URL + score[0]._links['rh:data'].href,
type: score.contentType,
width:'100%',
height:'100%'});
$('#pdfdiv').html(details);
} else {
$('#pdfdiv').html("file not found")
}
/*else {
$.getJSON(BASE_URL+"/unboundedpress/scores.files?filter={'legacy_filename':'"+filename+"'}", function(data){
var score, details;
score = data._embedded['rh:file'];
if (score) {
var details = $('<object>').attr({
data: BASE_URL + score[0]._links['rh:data'].href,
type:'application/pdf',
width:'100%',
height:'100%'});
$('#pdfdiv').html(details);
} else {
$('#pdfdiv').html("file not found")
}
});
}*/
});
}

View file

@ -0,0 +1,940 @@
// TODO: see why you can not seek soundcloud player
// TODO: make all file i/o rest independent
// TODO: ditch restheart completely???
// Userlist data array for filling in info box
upcomingCount = 0
upcomingLoadedCount = 0;
// DOM Ready =============================================================
$(document).ready(function() {
if (window.location.href.split('/').pop().split('.').pop() != "pdf") {
populatePieces('primary');
populatePieces('secondary');
populatePublications();
populateReleases();
populatePerformances(2023, 'composer', true);
populateTalks(2023, true);
populateAbout();
populateGallerySelector();
if (window.location.href.split('/').pop().substring(0,3) != "#lg") {
window.history.replaceState("object or string", "Title", "/");
}
}
$( window ).resize(function() {
resetDivHeights();
});
$(function() {
$( document ).tooltip();
});
$(document).on('click','.scroll-to-div', function(event) {
event.preventDefault();
var target = "#" + this.getAttribute('data-target');
$('html, body').animate({
scrollTop: $(target).offset().top - 210
}, 500);
//window.history.pushState("object or string", "Title", this.getAttribute('data-target'));
});
$(window).scroll(function(event) {
$(".header").css("margin-left", 0 - $(document).scrollLeft());
});
$('ul#piecesmiscworkslist').hide();
$('#pieces .btn_less').hide();
$('#pieces .btn_more').click(function(){
$('ul#piecesmiscworkslist').show();
$('#pieces .btn_more').hide();
$('#pieces .btn_less').show();
resetDivHeights();
});
$('#pieces .btn_less').click(function(){
$('ul#piecesmiscworkslist').hide();
$('#pieces .btn_less').hide();
$('#pieces .btn_more').show();
resetDivHeights();
});
embedAudioGallery(false);
for (i = new Date().getFullYear(); i > 2000; i--){
$('#yearpicker').append($('<option />').val(i).html(i));
}
$('#yearpicker').on('change', function() {
$("#performanceeventslist").empty();
//populatePerformances(parseInt(this.value), $('#eventtypepicker').val(), false);
populatePerformances(parseInt(this.value), 'composer', false);
});
/*
$('#eventtypepicker').append($('<option />').val('composer').html('as composer/artist'));
$('#eventtypepicker').append($('<option />').val('performer').html('as performer/guest'));
$('#eventtypepicker').on('change', function() {
$("#performanceeventslist").empty();
populatePerformances(parseInt($('#yearpicker').val()), this.value, false);
});
*/
$("img").load(function() {
alert($(this).height());
alert($(this).width());
});
});
// Functions =============================================================
BASE_URL = window.location.origin + '/api'
function resetDivHeights(){
//$('#pieces').height($('#writings').height() + 100);
//$('#pieces').height($('#releases').height());
//$('#releases').height($('#writings').height());
$('#pieces').css('height', '2900px');
//if($('#writings').height() >= $('#releases').height()){
// $('#pieces').height($('#writings').height());
//} else {
// $('#pieces').height($('#releases').height());
//}
$('#talks').css('height', 'auto');
$('#performances').css('height', 'auto');
if($('#talks').height() >= $('#performances').height()){
$('#events').height($('#talks').height());
$('#performances').css('height', '100%');
} else {
$('#events').height($('#performances').height());
$('#talks').css('height', '100%');
}
}
function openAudioPlayer(data){
$('#galleryPlayer').css('background-color', '#FDFDFD')
if (data.soundcloud_secret){
$('#galleryPlayer').html("<iframe id=sc_gallery width='325' height='110' scrolling='no' frameborder='no' src='https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+data.soundcloud_trackid+"?secret_token="+data.soundcloud_secret+"&show_artwork=true&auto_play=true&maxheight=110&'></iframe>");
} else {
$('#galleryPlayer').html("<iframe id=sc_gallery width='325' height='110' scrolling='no' frameborder='no' src='https://w.soundcloud.com/player/?url=https://api.soundcloud.com/tracks/"+data.soundcloud_trackid+"&show_artwork=true&auto_play=true&maxheight=110&'></iframe>");
}
var widget = SC.Widget('sc_gallery');
widget.bind(SC.Widget.Events.FINISH, function() {
embedAudioGallery(true);
});
}
function embedAudioGallery(autoplay) {
$('#galleryPlayer').css('background-color', '#FDFDFD')
var uniqueRandoms = [];
var numRandoms = 15;
function makeUniqueRandom() {
// refill the array if needed
if (!uniqueRandoms.length) {
for (var i = 0; i < numRandoms; i++) {
uniqueRandoms.push(i);
}
}
var index = Math.floor(Math.random() * uniqueRandoms.length);
var val = uniqueRandoms[index];
// now remove that value from the array
uniqueRandoms.splice(index, 1);
return val;
}
$('#galleryPlayer').html("<iframe id=sc_gallery class=audioGalleryFrame width='325' height='110' scrolling='yes' frameborder='no' src='https://w.soundcloud.com/player/?url=https://api.soundcloud.com/playlists/164294640&show_artwork=true&auto_play=true&maxheight=110&'></iframe>");
var widget = SC.Widget('sc_gallery');
widget.bind(SC.Widget.Events.READY, function() {
widget.skip(makeUniqueRandom());
if(!autoplay){
widget.pause();
widget.seekTo(0);
}
});
widget.bind(SC.Widget.Events.FINISH, function() {
widget.skip(makeUniqueRandom());
});
}
function embedVideoGallery() {
$.getScript('https://vimeo.com/api/v2/mwinter/videos.json?callback=embedVideoGallerySlider');
}
function embedVideoGallerySlider(videos) {
$('#galleryPlayer').css('background-color', 'black')
$('#galleryPlayer').html("");
$('#galleryPlayer').append("<ul id='videogallerylist'>");
for (var i = 0; i < videos.length; i++) {
var iframe = "<div class='video-inner'><iframe id=vimeo_gallery class=videoGalleryFrame src='https://player.vimeo.com/video/"+videos[i].id+"?color=44bbff&amp;background=000000&amp;slideshow=0&amp;video_title=true&amp;video_byline=1' width='300px' height='140px' frameborder='0' webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></div>";
var galleryli = $("<li id=videogallery_li_item_"+i+">").append(iframe);
$('ul#videogallerylist').prepend(galleryli);
}
$('ul#videogallerylist').lightSlider({
item:1,
loop:true,
pager: false,
enableDrag: false,
auto:true,
pauseOnHover: true
});
}
function openVideoPlayer(data){
$('#galleryPlayer').html("<iframe id=vimeo_gallery class=videoGalleryFrame src='//player.vimeo.com/video/"+data.vimeo_trackid+"?autoplay=1&portrait=0&color=44bbff&amp;background=000000&amp;video_title=1&amp;video_byline=1' width='325' height='140' frameborder='0' webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>");
}
function embedImageGallery() {
$('#galleryPlayer').css('background-color', 'black')
$('#galleryPlayer').html("");
$('#galleryPlayer').append("<ul id='imagegallerylist'>");
$.getJSON(BASE_URL + '/image_gallery/_aggrs/image_gallery?pagesize=200', function(data) {
var objCount = 0
var len=Object.keys(data).length;
$.each(data, function(index, data){
var galleryli;
var img, thumb, head;
img = data.img;
thumb = data.thumb;
if (typeof thumb === 'undefined' ) {
thumb = img;
} else if (thumb.length === 0 ) {
thumb = img;
}
if (img) {
var imgsrc = BASE_URL + "/images.files/" + img._id['$oid'] +"/binary";
var thumbsrc = BASE_URL + "/images.files/" + thumb._id['$oid'] +"/binary";
galleryli = $("<li id=imagegallery_li_item"+index+" href='"+imgsrc+"' data-download-url='/images/"+data.image+"'>'");
$('ul#imagegallerylist').prepend(galleryli);
galleryli.append($('<div>').addClass('video-inner').append($('<img>').attr({src: thumbsrc}).css('max-height','100%').css('max-width','100%')));
}
objCount++;
if(objCount == len){
$('ul#imagegallerylist').lightSlider({
item:1,
loop:true,
pager: false,
enableDrag: false,
auto:true,
pauseOnHover: true,
//adaptiveHeight:true,
onSliderLoad: function(el) {
el.lightGallery({
selector: '#imagegallerylist .lslide',
galleryId: 'images_gallery'
});
}
});
}
});
});
}
function alterDate(date) {
//this sets from given time
//var offset = new Date().getTimezoneOffset();
//date.setHours(date.getHours() + (offset / 60));
//this sets from end of day
date.setHours(23, 59, 0, 0);
//var offset = new Date().getTimezoneOffset();
//date.setHours(date.getHours() + (offset / 60));
return date;
}
function formatISODate(isoDate) {
var date = new Date(isoDate['$date']);
//date = alterDate(date);
return ("0" + (date.getMonth() + 1)).slice(-2) + "." + ("0" + date.getDate()).slice(-2) + "." + date.getFullYear();
}
function formatISOYear(isoDate) {
var date = new Date(isoDate['$date']);
return date.getFullYear();
}
function formatDate(date) {
var date = new Date(date);
var offset = new Date().getTimezoneOffset();
//not clear why we need to offet this one and not the other
date.setHours(date.getHours() + (offset / 60));
date = alterDate(date);
return ("0" + (date.getMonth() + 1)).slice(-2) + "." + ("0" + date.getDate()).slice(-2) + "." + date.getFullYear();
//return ("0" + (date.getMonth() + 1)).slice(-2) + "." + date.getFullYear();
}
function openToggle(toggle){
if(toggle){
toggle.text("-");
}
}
function closeToggle(toggle){
if(toggle){
toggle.text("+");
}
}
function populatePieces(type) {
var apiurl, listid, yearCount = 2100, imageGalleryCount = 0;
if(type == 'primary'){
apiurl = BASE_URL + "/works/_aggrs/high_priority_works?pagesize=200";
listid = 'ul#piecesworkslist'
} else {
apiurl = BASE_URL + "/works/_aggrs/low_priority_works?pagesize=200";
listid = 'ul#piecesmiscworkslist'
}
$.getJSON(apiurl, function(data) {
if(type != 'primary'){
$(listid).addClass('content-list').append($('<li>').append('miscellany').addClass('year_span'));
}
var objCount = 0;
var len=Object.keys(data).length;
$.each(data, function(index, data){
var head, year, workli, work_data, score_data, image_data;
work_data = data.work_data;
score_data = data.score_data;
image_data = data.image_data;
head = $('<div>').addClass('header_span').css('width','90%')
.append($('<span>').addClass('header_piece').append($('<h4>').append('<i>'+work_data.title+'</i>')));
year = formatISOYear(work_data.date);
if(type == 'primary' && yearCount > parseInt(year)) {
$(listid).addClass('content-list').append($('<li>').append(year).addClass('year_span'));
yearCount = parseInt(year);
};
workli = $('<li id=work_li_item'+index+'>');
$(listid).addClass('content-list').append(workli.append(head));
var audioButton, videoButton, documentButton, icons, doc;
if (data.score_data) {
documentButton = $('<button id=piece_document_button_'+index
+" data-iframe='true' data-src='/scores/" + score_data.filename + "' data-download-url=''/scores/" + score_data.filename + "'>")
.attr({title: "view"}).addClass('score_icon');
documentButton.lightGallery({
selector: 'this',
width: '90%',
hash: false,
galleryId: "score_viewer_"+index
});
if(typeof doc != 'undefined'){
} else{
documentButton.on('onSlideItemLoad.lg', function(event, index){
window.history.replaceState(null, null, "/scores/" + score_data.filename);
});
documentButton.on('onCloseAfter.lg', function(event, prevIndex, index){
window.history.replaceState("object or string", "Title", "/");
})
}
} else {
documentButton = $('<button id=piece_document_button_'+index+">").attr({title: "score"}).addClass('score_icon');
documentButton.css('visibility', 'hidden');
}
audioButton = $('<button id=piece_audio_button_'+index+'>').attr({title: "audio"}).addClass('audio_icon');
if (typeof work_data.soundcloud_trackid === 'undefined') {
audioButton.css('visibility', 'hidden')
} else {
audioButton.click(function() {
openAudioPlayer(work_data);
});
};
videoButton = $('<button id=piece_video_button_'+index+'>').attr({title: "video"}).addClass('video_icon');
if (typeof work_data.vimeo_trackid === 'undefined') {
videoButton.css('visibility', 'hidden')
} else {
videoButton.click(function() {
openVideoPlayer(work_data);
});
};
imageButton = $('<button id=piece_image_button_'+index+'>').attr({title: "images"}).addClass('photo_icon');
if (typeof work_data.images === 'undefined') {
imageButton.css('visibility', 'hidden')
} else {
imageButton.click(function() {
var objCount = 0;
var len=image_data.length;
var srcList=[];
$.each(image_data, function(index, image){
var src = BASE_URL + "/images.files/" + image._id['$oid'] +"/binary";
srcList.push({"src":src})
objCount++;
if(objCount == len){
$(this).lightGallery({
dynamic: true,
dynamicEl: srcList,
galleryId: 'work_image_gallery_'+parseInt(imageGalleryCount)
});
}
});
});
};
icons = $('<span>').addClass('icon_span_piece').append([documentButton, audioButton, videoButton, imageButton]);
head.append(icons);
objCount++;
if(objCount == len){
resetDivHeights();
}
});
});
}
function populateReleases() {
$.getJSON(BASE_URL + "/releases/_aggrs/releases?pagesize=200", function(data) {
var objCount = 0
var len=Object.keys(data).length;
$.each(data, function(index, data){
var releaseli;
releaseli = $('<li id=release_li_item'+index+'>');
$('ul#releaseslist').addClass('content-list').prepend(releaseli);
var img, thumb, head, title, caption, cartButton, infoButton, cartRef, infoRef;
img = data.img;
thumb = data.thumb;
if (typeof thumb === 'undefined' ) {
thumb = img;
} else if (thumb.length === 0 ) {
thumb = img;
}
if (img) {
var imgsrc = BASE_URL + "/album_art.files/" + img._id['$oid'] +"/binary";
var thumbsrc = BASE_URL + "/album_art.files/" + thumb._id['$oid'] +"/binary";
title = $('<div>').addClass('caption').append(data.title);
title.css('text-align', 'center');
caption = $('<div>').addClass('caption')
caption.css('text-align', 'center');
caption.css('padding-bottom', '25px');
if(data.discogs_id) {
infoRef = 'https://www.discogs.com/release/' + data.discogs_id;
infoButton = $('<button id=release_info_button_'+index+" data-iframe='true' data-src='"+ infoRef +"'>")
.attr({title: "discogs info"}).addClass('info_icon');
infoButton.click(function() {
window.open(infoRef);
});
}
if(data.buy_link) {
cartRef = data.buy_link;
cartButton = $('<button id=release_cart_button_'+index+" data-iframe='true' data-src='"+ cartRef +"'>")
.attr({title: "buy"}).addClass('cart_icon');
cartButton.click(function() {
window.open(cartRef);
});
}
caption.append([infoButton, cartButton]);
head = $('<h4>').append($("<a href='"+imgsrc+"' data-download-url='/album_art/"+data.album_art+"'>")
.append($('<img>').attr({src: thumbsrc}).css('width','100%')));
releaseli.append(title).append(head).append(caption);
}
objCount++;
if(objCount == len){
$('ul#releaseslist').lightGallery({
thumbnail:true,
selector: 'li h4 a ',
width: '70%',
galleryId: 'release_gallery'
});
resetDivHeights();
}
});
});
}
function programDetails(program, isDetailed) {
var text = "";
for (i = 0; i < program.length; i++) {
if(isDetailed){
text += "<div class=event-pieces><i>"+program[i].work + "</i></div>";
if(program[i].ensemble){
text +="<div class=event-ensemble>" + program[i].ensemble + "</div>";
};
text+="<div class=event-performers>";
var performers = program[i].performers;
for (j = 0; j < performers.length; j++) {
text += performers[j].name + " - ";
var instruments = performers[j].instrument_tags;
for (k = 0; k < instruments.length; k++) {
text += instruments[k];
if(k != instruments.length -1){
text += ", ";
}
}
if(j != performers.length -1){
text += "; ";
}
}
text += "</div>";
} else {
text += "<div class=upcoming-pieces><i>"+program[i].work + "</i>";
if(program[i].ensemble){
text += " - " + program[i].ensemble;
};
text += "</div>"
}
}
return text;
}
function sortList(list) {
var mylist = $(list);
var listitems = mylist.children('li').get();
listitems.sort(function(a, b) {
return $(a).text().trim().toUpperCase().localeCompare($(b).text().trim().toUpperCase());
})
$.each(listitems, function(idx, itm) { mylist.append(itm); });
return mylist;
}
function populatePerformances(year, eventType, loadUpcoming) {
var currentToggle, currentDetailsDiv, col;
if(eventType == 'composer'){
col ="events";
} else {
col ="performer_events";
}
$.getJSON(BASE_URL + "/"+col+"?filter={'$and':[{'start_date':{'$gte':{'$date':'2001-01-01T08:00:00Z'}}},{'start_date':{'$lte':{'$date':'"+(year+1).toString()+"-01-01T08:00:00Z'}}}]}&sort_by=-start_date&pagesize=55", function(data) {
var objCount = 0;
var len=Object.keys(data).length;
$.each(data, function(index, data){
var toggle, head, subHead, detailsdiv;
toggle = $('<span id=event_toggle_'+index+'>').addClass('toggle').text('+');
head = $('<span>').addClass('header_span')
.append($('<h4>').append([toggle, ' ' + formatISODate(data.start_date) + ': ' + data.venue.city + ', ' + data.venue.state]));
subHead = $('<div>').addClass('venue').append(data.venue.name);
detailsdiv = $('<div id=event_details_'+index+'>');
$('ul#performanceeventslist').addClass('content-list').append($('<li>').append(head).append([subHead, detailsdiv]));
if(loadUpcoming && alterDate(new Date(data.start_date['$date'])) >= new Date()){
//toggle.remove();
var clonedHead = head.clone(true);
clonedHead.find('#event_toggle_'+index).remove();
clonedHead.css('white-space', 'nowrap');
clonedHead.find('h4').append('<span style="color: #7F7F7F; margin-left: 10px;">(performance)</span>');
$('ul#upcominglist').css('width','100%').prepend($('<li>').append($('<div class=upcoming-inner>').append([clonedHead, subHead.clone(true), programDetails(data.program, true)])));
upcomingCount++;
}
toggle.css('cursor', 'pointer'); head.css('cursor', 'pointer');
head.click(function() {
if( toggle.text() == "-" ) {
closeToggle(toggle);
detailsdiv.html("");
resetDivHeights();
} else {
if(currentToggle){
closeToggle(currentToggle);
currentDetailsDiv.html("");
resetDivHeights();
}
currentDetailsDiv = detailsdiv;
currentToggle = toggle;
openToggle(toggle);
if(data.program){
detailsdiv.append(programDetails(data.program, true));
} else {
detailsdiv.append(['<i>'+data.legacy_program+'</i>','<br>',data.legacy_performers]).addClass('event-details');
}
resetDivHeights();
}
});
objCount++;
if(objCount == len){
resetDivHeights();
}
});
//$('ul#performanceeventslist').children('li:gt(15)').hide();
//resetDivHeights();
if(loadUpcoming){
upcomingLoadedCount++;
//console.log(upcomingCount);
if (upcomingLoadedCount==2) {
if(upcomingCount == 0 && year == 2023){
$('#upcoming').css('visibility', 'hidden')
} else {
$('#upcominglist').replaceWith(sortList('#upcominglist'));
var autoplaySlider = $('#upcominglist').lightSlider({
item:1,
adaptiveHeight:false,
auto:true,
loop:true,
pauseOnHover: true,
pager: true,
controls: false,
dropOnHover:false,
speed: 1000,
pause: 5000,
mode: 'fade'
});
$('#upcominglist').css('padding-bottom','0px')
}
}
}
});
}
function populateTalks(year, loadUpcoming) {
$.getJSON(BASE_URL + '/talks?sort_by=date&pagesize=200', function(data) {
var objCount = 0;
var len=Object.keys(data).length;
$.each(data, function(index, data){
var head, subHead;
head = $('<span>').addClass('header_span').append($('<h4>').append(formatDate(data.date) + ': ' + data.location));
if (typeof data.title === 'string') {
subHead = $('<div>').addClass('venue').append(data.title);
$('ul#talkeventslist').addClass('content-list').prepend($('<li>').append([head, subHead]));
} else {
//assuming I do not give more than two talks a day
subHead = $('<div>').addClass('venue').append(data.title[0]);
subSubHead = $('<div>').addClass('venue').append(data.title[1]);
$('ul#talkeventslist').addClass('content-list').prepend($('<li>').append([head, subHead, subSubHead]));
}
if(loadUpcoming && alterDate(new Date(data.date)) >= new Date()){
var clonedHead = head.clone(true);
clonedHead.css('white-space', 'nowrap');
clonedHead.find('h4').append('<span style="color: #7F7F7F; margin-left: 10px;">(talk)</span>');
$('ul#upcominglist').css('width','100%').prepend($('<li>').append($('<div class=upcoming-inner>').append([clonedHead, subHead.clone(true)])));
upcomingCount++;
}
objCount++;
if(objCount == len){
resetDivHeights();
}
});
if(loadUpcoming){
upcomingLoadedCount++;
if (upcomingLoadedCount==2) {
if(upcomingCount == 0 && year == 2016){
$('#upcoming').css('visibility', 'hidden')
} else {
//console.log(sortList('#upcominglist'));
$('#upcominglist').replaceWith(sortList('#upcominglist'));
var autoplaySlider = $('#upcominglist').lightSlider({
item:1,
adaptiveHeight:false,
auto:true,
loop:true,
pauseOnHover: true,
pager: true,
controls: false,
dropOnHover:false,
speed: 1000,
pause: 5000,
mode: 'fade'
});
$('#upcominglist').css('padding-bottom','0px')
}
}
}
});
}
function populatePublications() {
$.getJSON(BASE_URL + '/publications/_aggrs/publications?pagesize=200', function(data) {
var objCount = 0;
var len=Object.keys(data).length;
$.each(data, function(index, data){
var head, subHead, publi;
subHead = $('<div>').addClass('venue').append([data.entryTags.author, " "]);
if (data.entryTags.booktitle){ subHead.append([data.entryTags.booktitle, ". "]) }
if (data.entryTags.journal){ subHead.append([data.entryTags.journal, ". "]) }
if (data.entryTags.editor){ subHead.append(["editors ", data.entryTags.editor, " "]) }
if (data.entryTags.volume){ subHead.append(["volume ", data.entryTags.volume, ". "]) }
//if (data.entryTags.pages){ subHead.append([data.entryTags.pages, ". "]) }
if (data.entryTags.publisher){ subHead.append([data.entryTags.publisher, ". "]) }
subHead.append([data.entryTags.year, "."]);
head = $('<span>').addClass('header_span')
.append($('<span>').addClass('header_pub').append($('<h4>').append(data.entryTags.title)));
publi = $('<li id=pub_li_item'+index+'>');
$('ul#writingsworkslist').addClass('content-list').prepend(publi.append(head));
var documentButton, icons, doc;
doc = data.doc;
if (typeof data.entryTags.howpublished != 'undefined') {
var href = "";
var download = "";
if (typeof doc != 'undefined'){
href = "/pubs/"+data.entryTags.howpublished;
download = "' data-download-url='/pubs/"+data.entryTags.howpublished;
} else {
href = data.entryTags.howpublished;
}
if (false /*href.substring(0, 4) == "http"*/){
console.log(href);
documentButton = $('<button id=piece_document_button_'+index+" onclick=' window.open('" + href.replace(/\//g, '\/') + "','_blank')>")
.attr({title: "view"}).addClass('score_icon');
} else {
documentButton = $('<button id=piece_document_button_'+index+" data-iframe='true' data-src='"+href+download+"'>")
.attr({title: "view"}).addClass('score_icon');
if(typeof doc != 'undefined'){
documentButton.lightGallery({
selector: 'this',
width: '90%',
hash: false,
galleryId: 'pub_viewer_'+index
});
if(typeof doc != 'undefined'){
documentButton.on('onSlideItemLoad.lg', function(event, index){
window.history.replaceState(null, null, href);
});
documentButton.on('onCloseAfter.lg', function(event, prevIndex, index){
window.history.replaceState("object or string", "Title", "/");
})
} else{
documentButton.on('onBeforeSlide.lg', function(event, prevIndex, index){
$('.lg-inner').css('background-color', 'white')
});
documentButton.on('onSlideItemLoad.lg', function(event, index){
window.history.replaceState("object or string", "Title", "/redirect=" + href);
});
documentButton.on('onCloseAfter.lg', function(event, prevIndex, index){
window.history.replaceState("object or string", "Title", "/");
})
}
} else {
//documentButton = $('<button id=piece_document_button_'+index+">").attr({title: "view"}).addClass('score_icon');
documentButton.click(function() {
window.open(href);
});
}
}
} else {
documentButton = $('<button id=piece_document_button_'+index+">").attr({title: "view"}).addClass('score_icon');
documentButton.css('visibility', 'hidden');
}
icons = $('<span>').addClass('icon_span_pub').append(documentButton);
head.append(icons)
publi.append(subHead.css('width', '80%').css('margin-top', '-3px'))
objCount++;
if(objCount == len){
resetDivHeights();
}
});
});
}
function populateGallerySelector() {
audioButton = $('<button id=gallery_audio_button>').attr({title: "audio"}).addClass('audio_icon');
audioButton.click(function() {
embedAudioGallery(true);
});
videoButton = $('<button id=gallery_video_button>').attr({title: "video"}).addClass('video_icon');
videoButton.click(function() {
embedVideoGallery();
});
imageButton = $('<button id=gallery_image_button>').attr({title: "image"}).addClass('photo_icon');
imageButton.click(function() {
embedImageGallery();
});
$('#gallerySelector').append([audioButton, videoButton, imageButton]);
}
function populateAbout() {
var cvHead = $('<h4>').append($('<div>').css('width', '50px').css('min-width', '50px').append('CV'));
//var documentButton = $("<button id=cv_button data-iframe='true' data-src='/cv'>").attr({title: "CV"}).addClass('score_icon');
var cvButton = $("<button id=cv_button>").attr({title: "CV"}).addClass('score_icon');
var wlHead = $('<h4>').append($('<div>').css('width', '300px').css('min-width', '300px').append('Works List with Presentation History'));
var wlButton = $("<button id=cv_button>").attr({title: "Works List with Presentation History"}).addClass('score_icon');
cvButton.click(function() {
window.open('/cv');
});
wlButton.click(function() {
window.open('/works_list');
});
/*
cvButton.lightGallery({
selector: 'this',
width: '90%',
galleryId: 'cv'
});
*/
cvHead.append(cvButton).insertBefore('#mc_embed_signup');
wlHead.append(wlButton).insertBefore('#mc_embed_signup');
$('#my_image').html("");
$('#my_image').append("<ul id='myimagegallerylist'>");
$.getJSON(BASE_URL + '/my_image_gallery/_aggrs/my_image_gallery?pagesize=200', function(data) {
var objCount = 0
var len=Object.keys(data).length;
$.each(data, function(index, data){
var galleryli;
var img, thumb, head;
img = data.img;
thumb = data.thumb;
if (typeof thumb === 'undefined' ) {
thumb = img;
} else if (thumb.length === 0 ) {
thumb = img;
}
if (img) {
var imgsrc = BASE_URL + "/images.files/" + img._id['$oid'] +"/binary";
var thumbsrc = BASE_URL + "/images.files/" + thumb._id['$oid'] +"/binary";
var caption = "<div class='caption'><p>photo credit: "+ data.credit +"</p></div>";
galleryli = $("<li id=my_imagegallery_li_item"+index+" href='"+imgsrc+"' data-download-url='/images/"+data.image+"'>'");
$('ul#myimagegallerylist').prepend(galleryli);
galleryli.append($('<img>').attr({src: thumbsrc}).css('max-width','100%'))
if (data.credit) {
galleryli.append(caption);
}
}
objCount++;
if(objCount == len){
$('ul#myimagegallerylist').lightSlider({
item:1,
loop:true,
pager: false,
dropOnHover:false,
enableDrag: false,
adaptiveHeight:true,
//auto:true,
onSliderLoad: function(el) {
el.lightGallery({
selector: '#myimagegallerylist .lslide',
galleryId: 'portaits',
//subHtmlSelectorRelative: true
});
}
});
}
});
});
}

View file

@ -0,0 +1,433 @@
/* global define */
(function (root, pluralize) {
/* istanbul ignore else */
if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {
// Node.
module.exports = pluralize();
} else if (typeof define === 'function' && define.amd) {
// AMD, registers as an anonymous module.
define(function () {
return pluralize();
});
} else {
// Browser global.
root.pluralize = pluralize();
}
})(this, function () {
// Rule storage - pluralize and singularize need to be run sequentially,
// while other rules can be optimized using an object for instant lookups.
var pluralRules = [];
var singularRules = [];
var uncountables = {};
var irregularPlurals = {};
var irregularSingles = {};
/**
* Title case a string.
*
* @param {string} str
* @return {string}
*/
function toTitleCase (str) {
return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase();
}
/**
* Sanitize a pluralization rule to a usable regular expression.
*
* @param {(RegExp|string)} rule
* @return {RegExp}
*/
function sanitizeRule (rule) {
if (typeof rule === 'string') {
return new RegExp('^' + rule + '$', 'i');
}
return rule;
}
/**
* Pass in a word token to produce a function that can replicate the case on
* another word.
*
* @param {string} word
* @param {string} token
* @return {Function}
*/
function restoreCase (word, token) {
// Upper cased words. E.g. "HELLO".
if (word === word.toUpperCase()) {
return token.toUpperCase();
}
// Title cased words. E.g. "Title".
if (word[0] === word[0].toUpperCase()) {
return toTitleCase(token);
}
// Lower cased words. E.g. "test".
return token.toLowerCase();
}
/**
* Interpolate a regexp string.
*
* @param {string} str
* @param {Array} args
* @return {string}
*/
function interpolate (str, args) {
return str.replace(/\$(\d{1,2})/g, function (match, index) {
return args[index] || '';
});
}
/**
* Sanitize a word by passing in the word and sanitization rules.
*
* @param {String} token
* @param {String} word
* @param {Array} collection
* @return {String}
*/
function sanitizeWord (token, word, collection) {
// Empty string or doesn't need fixing.
if (!token.length || uncountables.hasOwnProperty(token)) {
return word;
}
var len = collection.length;
// Iterate over the sanitization rules and use the first one to match.
while (len--) {
var rule = collection[len];
// If the rule passes, return the replacement.
if (rule[0].test(word)) {
return word.replace(rule[0], function (match, index, word) {
var result = interpolate(rule[1], arguments);
if (match === '') {
return restoreCase(word[index - 1], result);
}
return restoreCase(match, result);
});
}
}
return word;
}
/**
* Replace a word with the updated word.
*
* @param {Object} replaceMap
* @param {Object} keepMap
* @param {Array} rules
* @return {Function}
*/
function replaceWord (replaceMap, keepMap, rules) {
return function (word) {
// Get the correct token and case restoration functions.
var token = word.toLowerCase();
// Check against the keep object map.
if (keepMap.hasOwnProperty(token)) {
return restoreCase(word, token);
}
// Check against the replacement map for a direct word replacement.
if (replaceMap.hasOwnProperty(token)) {
return restoreCase(word, replaceMap[token]);
}
// Run all the rules against the word.
return sanitizeWord(token, word, rules);
};
}
/**
* Pluralize or singularize a word based on the passed in count.
*
* @param {String} word
* @param {Number} count
* @param {Boolean} inclusive
* @return {String}
*/
function pluralize (word, count, inclusive) {
var pluralized = count === 1
? pluralize.singular(word) : pluralize.plural(word);
return (inclusive ? count + ' ' : '') + pluralized;
}
/**
* Pluralize a word.
*
* @type {Function}
*/
pluralize.plural = replaceWord(
irregularSingles, irregularPlurals, pluralRules
);
/**
* Singularize a word.
*
* @type {Function}
*/
pluralize.singular = replaceWord(
irregularPlurals, irregularSingles, singularRules
);
/**
* Add a pluralization rule to the collection.
*
* @param {(string|RegExp)} rule
* @param {string} replacement
*/
pluralize.addPluralRule = function (rule, replacement) {
pluralRules.push([sanitizeRule(rule), replacement]);
};
/**
* Add a singularization rule to the collection.
*
* @param {(string|RegExp)} rule
* @param {string} replacement
*/
pluralize.addSingularRule = function (rule, replacement) {
singularRules.push([sanitizeRule(rule), replacement]);
};
/**
* Add an uncountable word rule.
*
* @param {(string|RegExp)} word
*/
pluralize.addUncountableRule = function (word) {
if (typeof word === 'string') {
uncountables[word.toLowerCase()] = true;
return;
}
// Set singular and plural references for the word.
pluralize.addPluralRule(word, '$0');
pluralize.addSingularRule(word, '$0');
};
/**
* Add an irregular word definition.
*
* @param {String} single
* @param {String} plural
*/
pluralize.addIrregularRule = function (single, plural) {
plural = plural.toLowerCase();
single = single.toLowerCase();
irregularSingles[single] = plural;
irregularPlurals[plural] = single;
};
/**
* Irregular rules.
*/
[
// Pronouns.
['I', 'we'],
['me', 'us'],
['he', 'they'],
['she', 'they'],
['them', 'them'],
['myself', 'ourselves'],
['yourself', 'yourselves'],
['itself', 'themselves'],
['herself', 'themselves'],
['himself', 'themselves'],
['themself', 'themselves'],
['is', 'are'],
['this', 'these'],
['that', 'those'],
// Words ending in with a consonant and `o`.
['echo', 'echoes'],
['dingo', 'dingoes'],
['volcano', 'volcanoes'],
['tornado', 'tornadoes'],
['torpedo', 'torpedoes'],
// Ends with `us`.
['genus', 'genera'],
['viscus', 'viscera'],
// Ends with `ma`.
['stigma', 'stigmata'],
['stoma', 'stomata'],
['dogma', 'dogmata'],
['lemma', 'lemmata'],
['schema', 'schemata'],
['anathema', 'anathemata'],
// Other irregular rules.
['ox', 'oxen'],
['axe', 'axes'],
['die', 'dice'],
['yes', 'yeses'],
['foot', 'feet'],
['eave', 'eaves'],
['goose', 'geese'],
['tooth', 'teeth'],
['quiz', 'quizzes'],
['human', 'humans'],
['proof', 'proofs'],
['carve', 'carves'],
['valve', 'valves'],
['thief', 'thieves'],
['genie', 'genies'],
['groove', 'grooves'],
['pickaxe', 'pickaxes'],
['whiskey', 'whiskies']
].forEach(function (rule) {
return pluralize.addIrregularRule(rule[0], rule[1]);
});
/**
* Pluralization rules.
*/
[
[/s?$/i, 's'],
[/([^aeiou]ese)$/i, '$1'],
[/(ax|test)is$/i, '$1es'],
[/(alias|[^aou]us|tlas|gas|ris)$/i, '$1es'],
[/(e[mn]u)s?$/i, '$1s'],
[/([^l]ias|[aeiou]las|[emjzr]as|[iu]am)$/i, '$1'],
[/(alumn|syllab|octop|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],
[/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],
[/(seraph|cherub)(?:im)?$/i, '$1im'],
[/(her|at|gr)o$/i, '$1oes'],
[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],
[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],
[/sis$/i, 'ses'],
[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],
[/([^aeiouy]|qu)y$/i, '$1ies'],
[/([^ch][ieo][ln])ey$/i, '$1ies'],
[/(x|ch|ss|sh|zz)$/i, '$1es'],
[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],
[/(m|l)(?:ice|ouse)$/i, '$1ice'],
[/(pe)(?:rson|ople)$/i, '$1ople'],
[/(child)(?:ren)?$/i, '$1ren'],
[/eaux$/i, '$0'],
[/m[ae]n$/i, 'men'],
['thou', 'you']
].forEach(function (rule) {
return pluralize.addPluralRule(rule[0], rule[1]);
});
/**
* Singularization rules.
*/
[
[/s$/i, ''],
[/(ss)$/i, '$1'],
[/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(?:sis|ses)$/i, '$1sis'],
[/(^analy)(?:sis|ses)$/i, '$1sis'],
[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, '$1fe'],
[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],
[/([^aeiouy]|qu)ies$/i, '$1y'],
[/(^[pl]|zomb|^(?:neck)?t|[aeo][lt]|cut)ies$/i, '$1ie'],
[/(\b(?:mon|smil))ies$/i, '$1ey'],
[/(m|l)ice$/i, '$1ouse'],
[/(seraph|cherub)im$/i, '$1'],
[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|tlas|gas|(?:her|at|gr)o|ris)(?:es)?$/i, '$1'],
[/(e[mn]u)s?$/i, '$1'],
[/(movie|twelve)s$/i, '$1'],
[/(cris|test|diagnos)(?:is|es)$/i, '$1is'],
[/(alumn|syllab|octop|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],
[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],
[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],
[/(alumn|alg|vertebr)ae$/i, '$1a'],
[/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],
[/(matr|append)ices$/i, '$1ix'],
[/(pe)(rson|ople)$/i, '$1rson'],
[/(child)ren$/i, '$1'],
[/(eau)x?$/i, '$1'],
[/men$/i, 'man']
].forEach(function (rule) {
return pluralize.addSingularRule(rule[0], rule[1]);
});
/**
* Uncountable rules.
*/
[
// Singular words with no plurals.
'advice',
'agenda',
'bison',
'bream',
'buffalo',
'carp',
'chassis',
'cod',
'cooperation',
'corps',
'digestion',
'debris',
'diabetes',
'energy',
'equipment',
'elk',
'excretion',
'expertise',
'flounder',
'gallows',
'garbage',
'graffiti',
'headquarters',
'health',
'herpes',
'highjinks',
'homework',
'information',
'jeans',
'justice',
'kudos',
'labour',
'machinery',
'mackerel',
'media',
'mews',
'moose',
'news',
'pike',
'plankton',
'pliers',
'pollution',
'premises',
'rain',
'rice',
'salmon',
'scissors',
'series',
'sewage',
'shambles',
'shrimp',
'species',
'staff',
'swine',
'trout',
'tuna',
'whiting',
'wildebeest',
'wildlife',
'you',
// Regexes.
/pox$/i, // "chickpox", "smallpox"
/ois$/i,
/deer$/i, // "deer", "reindeer"
/fish$/i, // "fish", "blowfish", "angelfish"
/sheep$/i,
/measles$/i,
/[^aeiou]ese$/i // "chinese", "japanese"
].forEach(pluralize.addUncountableRule);
return pluralize;
});

View file

@ -0,0 +1,31 @@
.lg-outer.fb-comments .lg-img-wrap {
padding-right: 400px !important; }
.lg-outer.fb-comments .fb-comments {
height: 100%;
overflow-y: auto;
position: absolute;
right: 0;
top: 0;
width: 420px;
z-index: 99999;
background: #fff url("../img/loading.gif") no-repeat scroll center center; }
.lg-outer.fb-comments .fb-comments.fb_iframe_widget {
background-image: none; }
.lg-outer.fb-comments .fb-comments.fb_iframe_widget.fb_iframe_widget_loader {
background: #fff url("../img/loading.gif") no-repeat scroll center center; }
.lg-outer.fb-comments .lg-toolbar {
right: 420px;
width: auto; }
.lg-outer.fb-comments .lg-actions .lg-next {
right: 420px; }
.lg-outer.fb-comments .lg-item {
background-image: none; }
.lg-outer.fb-comments .lg-item.lg-complete .lg-img-wrap {
background-image: none; }
.lg-outer.fb-comments .lg-img-wrap {
background: url(../img/loading.gif) no-repeat scroll center center transparent; }
.lg-outer.fb-comments .lg-sub-html {
padding: 0;
position: static; }
/*# sourceMappingURL=lg-fb-comment-box.css.map */

View file

@ -0,0 +1,7 @@
{
"version": 3,
"mappings": "AAGI,kCAAa;EACT,aAAa,EAAE,gBAAgB;AAEnC,kCAAa;EACT,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,CAAC;EACR,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,6DAA6D;EACzE,mDAAmB;IACf,gBAAgB,EAAE,IAAI;IACtB,2EAAyB;MACrB,UAAU,EAAE,6DAA6D;AAIrF,iCAAY;EACR,KAAK,EAAE,KAAK;EACZ,KAAK,EAAE,IAAI;AAEf,0CAAqB;EACjB,KAAK,EAAE,KAAK;AAEhB,8BAAS;EACL,gBAAgB,EAAE,IAAI;EAElB,uDAAY;IACR,gBAAgB,EAAE,IAAI;AAIlC,kCAAa;EACT,UAAU,EAAE,kEAAkE;AAGlF,kCAAa;EACT,OAAO,EAAE,CAAC;EACV,QAAQ,EAAE,MAAM",
"sources": ["../sass/lg-fb-comment-box.scss"],
"names": [],
"file": "lg-fb-comment-box.css"
}

View file

@ -0,0 +1,776 @@
.lg-css3.lg-zoom-in .lg-item {
opacity: 0; }
.lg-css3.lg-zoom-in .lg-item.lg-prev-slide {
-webkit-transform: scale3d(1.3, 1.3, 1.3);
transform: scale3d(1.3, 1.3, 1.3); }
.lg-css3.lg-zoom-in .lg-item.lg-next-slide {
-webkit-transform: scale3d(1.3, 1.3, 1.3);
transform: scale3d(1.3, 1.3, 1.3); }
.lg-css3.lg-zoom-in .lg-item.lg-current {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1);
opacity: 1; }
.lg-css3.lg-zoom-in .lg-item.lg-prev-slide, .lg-css3.lg-zoom-in .lg-item.lg-next-slide, .lg-css3.lg-zoom-in .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-zoom-in-big .lg-item {
opacity: 0; }
.lg-css3.lg-zoom-in-big .lg-item.lg-prev-slide {
-webkit-transform: scale3d(2, 2, 2);
transform: scale3d(2, 2, 2); }
.lg-css3.lg-zoom-in-big .lg-item.lg-next-slide {
-webkit-transform: scale3d(2, 2, 2);
transform: scale3d(2, 2, 2); }
.lg-css3.lg-zoom-in-big .lg-item.lg-current {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1);
opacity: 1; }
.lg-css3.lg-zoom-in-big .lg-item.lg-prev-slide, .lg-css3.lg-zoom-in-big .lg-item.lg-next-slide, .lg-css3.lg-zoom-in-big .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-zoom-out .lg-item {
opacity: 0; }
.lg-css3.lg-zoom-out .lg-item.lg-prev-slide {
-webkit-transform: scale3d(0.7, 0.7, 0.7);
transform: scale3d(0.7, 0.7, 0.7); }
.lg-css3.lg-zoom-out .lg-item.lg-next-slide {
-webkit-transform: scale3d(0.7, 0.7, 0.7);
transform: scale3d(0.7, 0.7, 0.7); }
.lg-css3.lg-zoom-out .lg-item.lg-current {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1);
opacity: 1; }
.lg-css3.lg-zoom-out .lg-item.lg-prev-slide, .lg-css3.lg-zoom-out .lg-item.lg-next-slide, .lg-css3.lg-zoom-out .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-zoom-out-big .lg-item {
opacity: 0; }
.lg-css3.lg-zoom-out-big .lg-item.lg-prev-slide {
-webkit-transform: scale3d(0, 0, 0);
transform: scale3d(0, 0, 0); }
.lg-css3.lg-zoom-out-big .lg-item.lg-next-slide {
-webkit-transform: scale3d(0, 0, 0);
transform: scale3d(0, 0, 0); }
.lg-css3.lg-zoom-out-big .lg-item.lg-current {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1);
opacity: 1; }
.lg-css3.lg-zoom-out-big .lg-item.lg-prev-slide, .lg-css3.lg-zoom-out-big .lg-item.lg-next-slide, .lg-css3.lg-zoom-out-big .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-zoom-out-in .lg-item {
opacity: 0; }
.lg-css3.lg-zoom-out-in .lg-item.lg-prev-slide {
-webkit-transform: scale3d(0, 0, 0);
transform: scale3d(0, 0, 0); }
.lg-css3.lg-zoom-out-in .lg-item.lg-next-slide {
-webkit-transform: scale3d(2, 2, 2);
transform: scale3d(2, 2, 2); }
.lg-css3.lg-zoom-out-in .lg-item.lg-current {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1);
opacity: 1; }
.lg-css3.lg-zoom-out-in .lg-item.lg-prev-slide, .lg-css3.lg-zoom-out-in .lg-item.lg-next-slide, .lg-css3.lg-zoom-out-in .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-zoom-in-out .lg-item {
opacity: 0; }
.lg-css3.lg-zoom-in-out .lg-item.lg-prev-slide {
-webkit-transform: scale3d(2, 2, 2);
transform: scale3d(2, 2, 2); }
.lg-css3.lg-zoom-in-out .lg-item.lg-next-slide {
-webkit-transform: scale3d(0, 0, 0);
transform: scale3d(0, 0, 0); }
.lg-css3.lg-zoom-in-out .lg-item.lg-current {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1);
opacity: 1; }
.lg-css3.lg-zoom-in-out .lg-item.lg-prev-slide, .lg-css3.lg-zoom-in-out .lg-item.lg-next-slide, .lg-css3.lg-zoom-in-out .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-soft-zoom .lg-item {
opacity: 0; }
.lg-css3.lg-soft-zoom .lg-item.lg-prev-slide {
-webkit-transform: scale3d(1.1, 1.1, 1.1);
transform: scale3d(1.1, 1.1, 1.1); }
.lg-css3.lg-soft-zoom .lg-item.lg-next-slide {
-webkit-transform: scale3d(0.9, 0.9, 0.9);
transform: scale3d(0.9, 0.9, 0.9); }
.lg-css3.lg-soft-zoom .lg-item.lg-current {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1);
opacity: 1; }
.lg-css3.lg-soft-zoom .lg-item.lg-prev-slide, .lg-css3.lg-soft-zoom .lg-item.lg-next-slide, .lg-css3.lg-soft-zoom .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-scale-up .lg-item {
opacity: 0; }
.lg-css3.lg-scale-up .lg-item.lg-prev-slide {
-moz-transform: scale3d(0.8, 0.8, 0.8) translate3d(0%, 10%, 0);
-o-transform: scale3d(0.8, 0.8, 0.8) translate3d(0%, 10%, 0);
-ms-transform: scale3d(0.8, 0.8, 0.8) translate3d(0%, 10%, 0);
-webkit-transform: scale3d(0.8, 0.8, 0.8) translate3d(0%, 10%, 0);
transform: scale3d(0.8, 0.8, 0.8) translate3d(0%, 10%, 0); }
.lg-css3.lg-scale-up .lg-item.lg-next-slide {
-moz-transform: scale3d(0.8, 0.8, 0.8) translate3d(0%, 10%, 0);
-o-transform: scale3d(0.8, 0.8, 0.8) translate3d(0%, 10%, 0);
-ms-transform: scale3d(0.8, 0.8, 0.8) translate3d(0%, 10%, 0);
-webkit-transform: scale3d(0.8, 0.8, 0.8) translate3d(0%, 10%, 0);
transform: scale3d(0.8, 0.8, 0.8) translate3d(0%, 10%, 0); }
.lg-css3.lg-scale-up .lg-item.lg-current {
-moz-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-o-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-ms-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-webkit-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
opacity: 1; }
.lg-css3.lg-scale-up .lg-item.lg-prev-slide, .lg-css3.lg-scale-up .lg-item.lg-next-slide, .lg-css3.lg-scale-up .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-slide-circular .lg-item {
opacity: 0; }
.lg-css3.lg-slide-circular .lg-item.lg-prev-slide {
-moz-transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
-o-transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
-ms-transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
-webkit-transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0);
transform: scale3d(0, 0, 0) translate3d(-100%, 0, 0); }
.lg-css3.lg-slide-circular .lg-item.lg-next-slide {
-moz-transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
-o-transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
-ms-transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
-webkit-transform: scale3d(0, 0, 0) translate3d(100%, 0, 0);
transform: scale3d(0, 0, 0) translate3d(100%, 0, 0); }
.lg-css3.lg-slide-circular .lg-item.lg-current {
-moz-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-o-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-ms-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-webkit-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
opacity: 1; }
.lg-css3.lg-slide-circular .lg-item.lg-prev-slide, .lg-css3.lg-slide-circular .lg-item.lg-next-slide, .lg-css3.lg-slide-circular .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-slide-circular-up .lg-item {
opacity: 0; }
.lg-css3.lg-slide-circular-up .lg-item.lg-prev-slide {
-moz-transform: scale3d(0, 0, 0) translate3d(-100%, -100%, 0);
-o-transform: scale3d(0, 0, 0) translate3d(-100%, -100%, 0);
-ms-transform: scale3d(0, 0, 0) translate3d(-100%, -100%, 0);
-webkit-transform: scale3d(0, 0, 0) translate3d(-100%, -100%, 0);
transform: scale3d(0, 0, 0) translate3d(-100%, -100%, 0); }
.lg-css3.lg-slide-circular-up .lg-item.lg-next-slide {
-moz-transform: scale3d(0, 0, 0) translate3d(100%, -100%, 0);
-o-transform: scale3d(0, 0, 0) translate3d(100%, -100%, 0);
-ms-transform: scale3d(0, 0, 0) translate3d(100%, -100%, 0);
-webkit-transform: scale3d(0, 0, 0) translate3d(100%, -100%, 0);
transform: scale3d(0, 0, 0) translate3d(100%, -100%, 0); }
.lg-css3.lg-slide-circular-up .lg-item.lg-current {
-moz-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-o-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-ms-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-webkit-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
opacity: 1; }
.lg-css3.lg-slide-circular-up .lg-item.lg-prev-slide, .lg-css3.lg-slide-circular-up .lg-item.lg-next-slide, .lg-css3.lg-slide-circular-up .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-slide-circular-down .lg-item {
opacity: 0; }
.lg-css3.lg-slide-circular-down .lg-item.lg-prev-slide {
-moz-transform: scale3d(0, 0, 0) translate3d(-100%, 100%, 0);
-o-transform: scale3d(0, 0, 0) translate3d(-100%, 100%, 0);
-ms-transform: scale3d(0, 0, 0) translate3d(-100%, 100%, 0);
-webkit-transform: scale3d(0, 0, 0) translate3d(-100%, 100%, 0);
transform: scale3d(0, 0, 0) translate3d(-100%, 100%, 0); }
.lg-css3.lg-slide-circular-down .lg-item.lg-next-slide {
-moz-transform: scale3d(0, 0, 0) translate3d(100%, 100%, 0);
-o-transform: scale3d(0, 0, 0) translate3d(100%, 100%, 0);
-ms-transform: scale3d(0, 0, 0) translate3d(100%, 100%, 0);
-webkit-transform: scale3d(0, 0, 0) translate3d(100%, 100%, 0);
transform: scale3d(0, 0, 0) translate3d(100%, 100%, 0); }
.lg-css3.lg-slide-circular-down .lg-item.lg-current {
-moz-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-o-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-ms-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-webkit-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
opacity: 1; }
.lg-css3.lg-slide-circular-down .lg-item.lg-prev-slide, .lg-css3.lg-slide-circular-down .lg-item.lg-next-slide, .lg-css3.lg-slide-circular-down .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-slide-circular-vertical .lg-item {
opacity: 0; }
.lg-css3.lg-slide-circular-vertical .lg-item.lg-prev-slide {
-moz-transform: scale3d(0, 0, 0) translate3d(0, -100%, 0);
-o-transform: scale3d(0, 0, 0) translate3d(0, -100%, 0);
-ms-transform: scale3d(0, 0, 0) translate3d(0, -100%, 0);
-webkit-transform: scale3d(0, 0, 0) translate3d(0, -100%, 0);
transform: scale3d(0, 0, 0) translate3d(0, -100%, 0); }
.lg-css3.lg-slide-circular-vertical .lg-item.lg-next-slide {
-moz-transform: scale3d(0, 0, 0) translate3d(0, 100%, 0);
-o-transform: scale3d(0, 0, 0) translate3d(0, 100%, 0);
-ms-transform: scale3d(0, 0, 0) translate3d(0, 100%, 0);
-webkit-transform: scale3d(0, 0, 0) translate3d(0, 100%, 0);
transform: scale3d(0, 0, 0) translate3d(0, 100%, 0); }
.lg-css3.lg-slide-circular-vertical .lg-item.lg-current {
-moz-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-o-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-ms-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-webkit-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
opacity: 1; }
.lg-css3.lg-slide-circular-vertical .lg-item.lg-prev-slide, .lg-css3.lg-slide-circular-vertical .lg-item.lg-next-slide, .lg-css3.lg-slide-circular-vertical .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-slide-circular-vertical-left .lg-item {
opacity: 0; }
.lg-css3.lg-slide-circular-vertical-left .lg-item.lg-prev-slide {
-moz-transform: scale3d(0, 0, 0) translate3d(-100%, -100%, 0);
-o-transform: scale3d(0, 0, 0) translate3d(-100%, -100%, 0);
-ms-transform: scale3d(0, 0, 0) translate3d(-100%, -100%, 0);
-webkit-transform: scale3d(0, 0, 0) translate3d(-100%, -100%, 0);
transform: scale3d(0, 0, 0) translate3d(-100%, -100%, 0); }
.lg-css3.lg-slide-circular-vertical-left .lg-item.lg-next-slide {
-moz-transform: scale3d(0, 0, 0) translate3d(-100%, 100%, 0);
-o-transform: scale3d(0, 0, 0) translate3d(-100%, 100%, 0);
-ms-transform: scale3d(0, 0, 0) translate3d(-100%, 100%, 0);
-webkit-transform: scale3d(0, 0, 0) translate3d(-100%, 100%, 0);
transform: scale3d(0, 0, 0) translate3d(-100%, 100%, 0); }
.lg-css3.lg-slide-circular-vertical-left .lg-item.lg-current {
-moz-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-o-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-ms-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-webkit-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
opacity: 1; }
.lg-css3.lg-slide-circular-vertical-left .lg-item.lg-prev-slide, .lg-css3.lg-slide-circular-vertical-left .lg-item.lg-next-slide, .lg-css3.lg-slide-circular-vertical-left .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-slide-circular-vertical-down .lg-item {
opacity: 0; }
.lg-css3.lg-slide-circular-vertical-down .lg-item.lg-prev-slide {
-moz-transform: scale3d(0, 0, 0) translate3d(100%, -100%, 0);
-o-transform: scale3d(0, 0, 0) translate3d(100%, -100%, 0);
-ms-transform: scale3d(0, 0, 0) translate3d(100%, -100%, 0);
-webkit-transform: scale3d(0, 0, 0) translate3d(100%, -100%, 0);
transform: scale3d(0, 0, 0) translate3d(100%, -100%, 0); }
.lg-css3.lg-slide-circular-vertical-down .lg-item.lg-next-slide {
-moz-transform: scale3d(0, 0, 0) translate3d(100%, 100%, 0);
-o-transform: scale3d(0, 0, 0) translate3d(100%, 100%, 0);
-ms-transform: scale3d(0, 0, 0) translate3d(100%, 100%, 0);
-webkit-transform: scale3d(0, 0, 0) translate3d(100%, 100%, 0);
transform: scale3d(0, 0, 0) translate3d(100%, 100%, 0); }
.lg-css3.lg-slide-circular-vertical-down .lg-item.lg-current {
-moz-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-o-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-ms-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-webkit-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
opacity: 1; }
.lg-css3.lg-slide-circular-vertical-down .lg-item.lg-prev-slide, .lg-css3.lg-slide-circular-vertical-down .lg-item.lg-next-slide, .lg-css3.lg-slide-circular-vertical-down .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s; }
.lg-css3.lg-slide-vertical .lg-item {
opacity: 0; }
.lg-css3.lg-slide-vertical .lg-item.lg-prev-slide {
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0); }
.lg-css3.lg-slide-vertical .lg-item.lg-next-slide {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0); }
.lg-css3.lg-slide-vertical .lg-item.lg-current {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
opacity: 1; }
.lg-css3.lg-slide-vertical .lg-item.lg-prev-slide, .lg-css3.lg-slide-vertical .lg-item.lg-next-slide, .lg-css3.lg-slide-vertical .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-vertical-growth .lg-item {
opacity: 0; }
.lg-css3.lg-slide-vertical-growth .lg-item.lg-prev-slide {
-moz-transform: scale3d(0.5, 0.5, 0.5) translate3d(0, -150%, 0);
-o-transform: scale3d(0.5, 0.5, 0.5) translate3d(0, -150%, 0);
-ms-transform: scale3d(0.5, 0.5, 0.5) translate3d(0, -150%, 0);
-webkit-transform: scale3d(0.5, 0.5, 0.5) translate3d(0, -150%, 0);
transform: scale3d(0.5, 0.5, 0.5) translate3d(0, -150%, 0); }
.lg-css3.lg-slide-vertical-growth .lg-item.lg-next-slide {
-moz-transform: scale3d(0.5, 0.5, 0.5) translate3d(0, 150%, 0);
-o-transform: scale3d(0.5, 0.5, 0.5) translate3d(0, 150%, 0);
-ms-transform: scale3d(0.5, 0.5, 0.5) translate3d(0, 150%, 0);
-webkit-transform: scale3d(0.5, 0.5, 0.5) translate3d(0, 150%, 0);
transform: scale3d(0.5, 0.5, 0.5) translate3d(0, 150%, 0); }
.lg-css3.lg-slide-vertical-growth .lg-item.lg-current {
-moz-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-o-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-ms-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-webkit-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
opacity: 1; }
.lg-css3.lg-slide-vertical-growth .lg-item.lg-prev-slide, .lg-css3.lg-slide-vertical-growth .lg-item.lg-next-slide, .lg-css3.lg-slide-vertical-growth .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-skew-only .lg-item {
opacity: 0; }
.lg-css3.lg-slide-skew-only .lg-item.lg-prev-slide {
-moz-transform: skew(10deg, 0deg);
-o-transform: skew(10deg, 0deg);
-ms-transform: skew(10deg, 0deg);
-webkit-transform: skew(10deg, 0deg);
transform: skew(10deg, 0deg); }
.lg-css3.lg-slide-skew-only .lg-item.lg-next-slide {
-moz-transform: skew(10deg, 0deg);
-o-transform: skew(10deg, 0deg);
-ms-transform: skew(10deg, 0deg);
-webkit-transform: skew(10deg, 0deg);
transform: skew(10deg, 0deg); }
.lg-css3.lg-slide-skew-only .lg-item.lg-current {
-moz-transform: skew(0deg, 0deg);
-o-transform: skew(0deg, 0deg);
-ms-transform: skew(0deg, 0deg);
-webkit-transform: skew(0deg, 0deg);
transform: skew(0deg, 0deg);
opacity: 1; }
.lg-css3.lg-slide-skew-only .lg-item.lg-prev-slide, .lg-css3.lg-slide-skew-only .lg-item.lg-next-slide, .lg-css3.lg-slide-skew-only .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-skew-only-rev .lg-item {
opacity: 0; }
.lg-css3.lg-slide-skew-only-rev .lg-item.lg-prev-slide {
-moz-transform: skew(-10deg, 0deg);
-o-transform: skew(-10deg, 0deg);
-ms-transform: skew(-10deg, 0deg);
-webkit-transform: skew(-10deg, 0deg);
transform: skew(-10deg, 0deg); }
.lg-css3.lg-slide-skew-only-rev .lg-item.lg-next-slide {
-moz-transform: skew(-10deg, 0deg);
-o-transform: skew(-10deg, 0deg);
-ms-transform: skew(-10deg, 0deg);
-webkit-transform: skew(-10deg, 0deg);
transform: skew(-10deg, 0deg); }
.lg-css3.lg-slide-skew-only-rev .lg-item.lg-current {
-moz-transform: skew(0deg, 0deg);
-o-transform: skew(0deg, 0deg);
-ms-transform: skew(0deg, 0deg);
-webkit-transform: skew(0deg, 0deg);
transform: skew(0deg, 0deg);
opacity: 1; }
.lg-css3.lg-slide-skew-only-rev .lg-item.lg-prev-slide, .lg-css3.lg-slide-skew-only-rev .lg-item.lg-next-slide, .lg-css3.lg-slide-skew-only-rev .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-skew-only-y .lg-item {
opacity: 0; }
.lg-css3.lg-slide-skew-only-y .lg-item.lg-prev-slide {
-moz-transform: skew(0deg, 10deg);
-o-transform: skew(0deg, 10deg);
-ms-transform: skew(0deg, 10deg);
-webkit-transform: skew(0deg, 10deg);
transform: skew(0deg, 10deg); }
.lg-css3.lg-slide-skew-only-y .lg-item.lg-next-slide {
-moz-transform: skew(0deg, 10deg);
-o-transform: skew(0deg, 10deg);
-ms-transform: skew(0deg, 10deg);
-webkit-transform: skew(0deg, 10deg);
transform: skew(0deg, 10deg); }
.lg-css3.lg-slide-skew-only-y .lg-item.lg-current {
-moz-transform: skew(0deg, 0deg);
-o-transform: skew(0deg, 0deg);
-ms-transform: skew(0deg, 0deg);
-webkit-transform: skew(0deg, 0deg);
transform: skew(0deg, 0deg);
opacity: 1; }
.lg-css3.lg-slide-skew-only-y .lg-item.lg-prev-slide, .lg-css3.lg-slide-skew-only-y .lg-item.lg-next-slide, .lg-css3.lg-slide-skew-only-y .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-skew-only-y-rev .lg-item {
opacity: 0; }
.lg-css3.lg-slide-skew-only-y-rev .lg-item.lg-prev-slide {
-moz-transform: skew(0deg, -10deg);
-o-transform: skew(0deg, -10deg);
-ms-transform: skew(0deg, -10deg);
-webkit-transform: skew(0deg, -10deg);
transform: skew(0deg, -10deg); }
.lg-css3.lg-slide-skew-only-y-rev .lg-item.lg-next-slide {
-moz-transform: skew(0deg, -10deg);
-o-transform: skew(0deg, -10deg);
-ms-transform: skew(0deg, -10deg);
-webkit-transform: skew(0deg, -10deg);
transform: skew(0deg, -10deg); }
.lg-css3.lg-slide-skew-only-y-rev .lg-item.lg-current {
-moz-transform: skew(0deg, 0deg);
-o-transform: skew(0deg, 0deg);
-ms-transform: skew(0deg, 0deg);
-webkit-transform: skew(0deg, 0deg);
transform: skew(0deg, 0deg);
opacity: 1; }
.lg-css3.lg-slide-skew-only-y-rev .lg-item.lg-prev-slide, .lg-css3.lg-slide-skew-only-y-rev .lg-item.lg-next-slide, .lg-css3.lg-slide-skew-only-y-rev .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-skew .lg-item {
opacity: 0; }
.lg-css3.lg-slide-skew .lg-item.lg-prev-slide {
-moz-transform: skew(20deg, 0deg) translate3d(-100%, 0%, 0px);
-o-transform: skew(20deg, 0deg) translate3d(-100%, 0%, 0px);
-ms-transform: skew(20deg, 0deg) translate3d(-100%, 0%, 0px);
-webkit-transform: skew(20deg, 0deg) translate3d(-100%, 0%, 0px);
transform: skew(20deg, 0deg) translate3d(-100%, 0%, 0px); }
.lg-css3.lg-slide-skew .lg-item.lg-next-slide {
-moz-transform: skew(20deg, 0deg) translate3d(100%, 0%, 0px);
-o-transform: skew(20deg, 0deg) translate3d(100%, 0%, 0px);
-ms-transform: skew(20deg, 0deg) translate3d(100%, 0%, 0px);
-webkit-transform: skew(20deg, 0deg) translate3d(100%, 0%, 0px);
transform: skew(20deg, 0deg) translate3d(100%, 0%, 0px); }
.lg-css3.lg-slide-skew .lg-item.lg-current {
-moz-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-o-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-ms-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-webkit-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
opacity: 1; }
.lg-css3.lg-slide-skew .lg-item.lg-prev-slide, .lg-css3.lg-slide-skew .lg-item.lg-next-slide, .lg-css3.lg-slide-skew .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-skew-rev .lg-item {
opacity: 0; }
.lg-css3.lg-slide-skew-rev .lg-item.lg-prev-slide {
-moz-transform: skew(-20deg, 0deg) translate3d(-100%, 0%, 0px);
-o-transform: skew(-20deg, 0deg) translate3d(-100%, 0%, 0px);
-ms-transform: skew(-20deg, 0deg) translate3d(-100%, 0%, 0px);
-webkit-transform: skew(-20deg, 0deg) translate3d(-100%, 0%, 0px);
transform: skew(-20deg, 0deg) translate3d(-100%, 0%, 0px); }
.lg-css3.lg-slide-skew-rev .lg-item.lg-next-slide {
-moz-transform: skew(-20deg, 0deg) translate3d(100%, 0%, 0px);
-o-transform: skew(-20deg, 0deg) translate3d(100%, 0%, 0px);
-ms-transform: skew(-20deg, 0deg) translate3d(100%, 0%, 0px);
-webkit-transform: skew(-20deg, 0deg) translate3d(100%, 0%, 0px);
transform: skew(-20deg, 0deg) translate3d(100%, 0%, 0px); }
.lg-css3.lg-slide-skew-rev .lg-item.lg-current {
-moz-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-o-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-ms-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-webkit-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
opacity: 1; }
.lg-css3.lg-slide-skew-rev .lg-item.lg-prev-slide, .lg-css3.lg-slide-skew-rev .lg-item.lg-next-slide, .lg-css3.lg-slide-skew-rev .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-skew-cross .lg-item {
opacity: 0; }
.lg-css3.lg-slide-skew-cross .lg-item.lg-prev-slide {
-moz-transform: skew(0deg, 60deg) translate3d(-100%, 0%, 0px);
-o-transform: skew(0deg, 60deg) translate3d(-100%, 0%, 0px);
-ms-transform: skew(0deg, 60deg) translate3d(-100%, 0%, 0px);
-webkit-transform: skew(0deg, 60deg) translate3d(-100%, 0%, 0px);
transform: skew(0deg, 60deg) translate3d(-100%, 0%, 0px); }
.lg-css3.lg-slide-skew-cross .lg-item.lg-next-slide {
-moz-transform: skew(0deg, 60deg) translate3d(100%, 0%, 0px);
-o-transform: skew(0deg, 60deg) translate3d(100%, 0%, 0px);
-ms-transform: skew(0deg, 60deg) translate3d(100%, 0%, 0px);
-webkit-transform: skew(0deg, 60deg) translate3d(100%, 0%, 0px);
transform: skew(0deg, 60deg) translate3d(100%, 0%, 0px); }
.lg-css3.lg-slide-skew-cross .lg-item.lg-current {
-moz-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-o-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-ms-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-webkit-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
opacity: 1; }
.lg-css3.lg-slide-skew-cross .lg-item.lg-prev-slide, .lg-css3.lg-slide-skew-cross .lg-item.lg-next-slide, .lg-css3.lg-slide-skew-cross .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-skew-cross-rev .lg-item {
opacity: 0; }
.lg-css3.lg-slide-skew-cross-rev .lg-item.lg-prev-slide {
-moz-transform: skew(0deg, -60deg) translate3d(-100%, 0%, 0px);
-o-transform: skew(0deg, -60deg) translate3d(-100%, 0%, 0px);
-ms-transform: skew(0deg, -60deg) translate3d(-100%, 0%, 0px);
-webkit-transform: skew(0deg, -60deg) translate3d(-100%, 0%, 0px);
transform: skew(0deg, -60deg) translate3d(-100%, 0%, 0px); }
.lg-css3.lg-slide-skew-cross-rev .lg-item.lg-next-slide {
-moz-transform: skew(0deg, -60deg) translate3d(100%, 0%, 0px);
-o-transform: skew(0deg, -60deg) translate3d(100%, 0%, 0px);
-ms-transform: skew(0deg, -60deg) translate3d(100%, 0%, 0px);
-webkit-transform: skew(0deg, -60deg) translate3d(100%, 0%, 0px);
transform: skew(0deg, -60deg) translate3d(100%, 0%, 0px); }
.lg-css3.lg-slide-skew-cross-rev .lg-item.lg-current {
-moz-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-o-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-ms-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-webkit-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
opacity: 1; }
.lg-css3.lg-slide-skew-cross-rev .lg-item.lg-prev-slide, .lg-css3.lg-slide-skew-cross-rev .lg-item.lg-next-slide, .lg-css3.lg-slide-skew-cross-rev .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-skew-ver .lg-item {
opacity: 0; }
.lg-css3.lg-slide-skew-ver .lg-item.lg-prev-slide {
-moz-transform: skew(60deg, 0deg) translate3d(0, -100%, 0px);
-o-transform: skew(60deg, 0deg) translate3d(0, -100%, 0px);
-ms-transform: skew(60deg, 0deg) translate3d(0, -100%, 0px);
-webkit-transform: skew(60deg, 0deg) translate3d(0, -100%, 0px);
transform: skew(60deg, 0deg) translate3d(0, -100%, 0px); }
.lg-css3.lg-slide-skew-ver .lg-item.lg-next-slide {
-moz-transform: skew(60deg, 0deg) translate3d(0, 100%, 0px);
-o-transform: skew(60deg, 0deg) translate3d(0, 100%, 0px);
-ms-transform: skew(60deg, 0deg) translate3d(0, 100%, 0px);
-webkit-transform: skew(60deg, 0deg) translate3d(0, 100%, 0px);
transform: skew(60deg, 0deg) translate3d(0, 100%, 0px); }
.lg-css3.lg-slide-skew-ver .lg-item.lg-current {
-moz-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-o-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-ms-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-webkit-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
opacity: 1; }
.lg-css3.lg-slide-skew-ver .lg-item.lg-prev-slide, .lg-css3.lg-slide-skew-ver .lg-item.lg-next-slide, .lg-css3.lg-slide-skew-ver .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-skew-ver-rev .lg-item {
opacity: 0; }
.lg-css3.lg-slide-skew-ver-rev .lg-item.lg-prev-slide {
-moz-transform: skew(-60deg, 0deg) translate3d(0, -100%, 0px);
-o-transform: skew(-60deg, 0deg) translate3d(0, -100%, 0px);
-ms-transform: skew(-60deg, 0deg) translate3d(0, -100%, 0px);
-webkit-transform: skew(-60deg, 0deg) translate3d(0, -100%, 0px);
transform: skew(-60deg, 0deg) translate3d(0, -100%, 0px); }
.lg-css3.lg-slide-skew-ver-rev .lg-item.lg-next-slide {
-moz-transform: skew(-60deg, 0deg) translate3d(0, 100%, 0px);
-o-transform: skew(-60deg, 0deg) translate3d(0, 100%, 0px);
-ms-transform: skew(-60deg, 0deg) translate3d(0, 100%, 0px);
-webkit-transform: skew(-60deg, 0deg) translate3d(0, 100%, 0px);
transform: skew(-60deg, 0deg) translate3d(0, 100%, 0px); }
.lg-css3.lg-slide-skew-ver-rev .lg-item.lg-current {
-moz-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-o-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-ms-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-webkit-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
opacity: 1; }
.lg-css3.lg-slide-skew-ver-rev .lg-item.lg-prev-slide, .lg-css3.lg-slide-skew-ver-rev .lg-item.lg-next-slide, .lg-css3.lg-slide-skew-ver-rev .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-skew-ver-cross .lg-item {
opacity: 0; }
.lg-css3.lg-slide-skew-ver-cross .lg-item.lg-prev-slide {
-moz-transform: skew(0deg, 20deg) translate3d(0, -100%, 0px);
-o-transform: skew(0deg, 20deg) translate3d(0, -100%, 0px);
-ms-transform: skew(0deg, 20deg) translate3d(0, -100%, 0px);
-webkit-transform: skew(0deg, 20deg) translate3d(0, -100%, 0px);
transform: skew(0deg, 20deg) translate3d(0, -100%, 0px); }
.lg-css3.lg-slide-skew-ver-cross .lg-item.lg-next-slide {
-moz-transform: skew(0deg, 20deg) translate3d(0, 100%, 0px);
-o-transform: skew(0deg, 20deg) translate3d(0, 100%, 0px);
-ms-transform: skew(0deg, 20deg) translate3d(0, 100%, 0px);
-webkit-transform: skew(0deg, 20deg) translate3d(0, 100%, 0px);
transform: skew(0deg, 20deg) translate3d(0, 100%, 0px); }
.lg-css3.lg-slide-skew-ver-cross .lg-item.lg-current {
-moz-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-o-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-ms-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-webkit-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
opacity: 1; }
.lg-css3.lg-slide-skew-ver-cross .lg-item.lg-prev-slide, .lg-css3.lg-slide-skew-ver-cross .lg-item.lg-next-slide, .lg-css3.lg-slide-skew-ver-cross .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-slide-skew-ver-cross-rev .lg-item {
opacity: 0; }
.lg-css3.lg-slide-skew-ver-cross-rev .lg-item.lg-prev-slide {
-moz-transform: skew(0deg, -20deg) translate3d(0, -100%, 0px);
-o-transform: skew(0deg, -20deg) translate3d(0, -100%, 0px);
-ms-transform: skew(0deg, -20deg) translate3d(0, -100%, 0px);
-webkit-transform: skew(0deg, -20deg) translate3d(0, -100%, 0px);
transform: skew(0deg, -20deg) translate3d(0, -100%, 0px); }
.lg-css3.lg-slide-skew-ver-cross-rev .lg-item.lg-next-slide {
-moz-transform: skew(0deg, -20deg) translate3d(0, 100%, 0px);
-o-transform: skew(0deg, -20deg) translate3d(0, 100%, 0px);
-ms-transform: skew(0deg, -20deg) translate3d(0, 100%, 0px);
-webkit-transform: skew(0deg, -20deg) translate3d(0, 100%, 0px);
transform: skew(0deg, -20deg) translate3d(0, 100%, 0px); }
.lg-css3.lg-slide-skew-ver-cross-rev .lg-item.lg-current {
-moz-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-o-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-ms-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
-webkit-transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
transform: skew(0deg, 0deg) translate3d(0%, 0%, 0px);
opacity: 1; }
.lg-css3.lg-slide-skew-ver-cross-rev .lg-item.lg-prev-slide, .lg-css3.lg-slide-skew-ver-cross-rev .lg-item.lg-next-slide, .lg-css3.lg-slide-skew-ver-cross-rev .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-lollipop .lg-item {
opacity: 0; }
.lg-css3.lg-lollipop .lg-item.lg-prev-slide {
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0); }
.lg-css3.lg-lollipop .lg-item.lg-next-slide {
-moz-transform: translate3d(0, 0, 0) scale(0.5);
-o-transform: translate3d(0, 0, 0) scale(0.5);
-ms-transform: translate3d(0, 0, 0) scale(0.5);
-webkit-transform: translate3d(0, 0, 0) scale(0.5);
transform: translate3d(0, 0, 0) scale(0.5); }
.lg-css3.lg-lollipop .lg-item.lg-current {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
opacity: 1; }
.lg-css3.lg-lollipop .lg-item.lg-prev-slide, .lg-css3.lg-lollipop .lg-item.lg-next-slide, .lg-css3.lg-lollipop .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-lollipop-rev .lg-item {
opacity: 0; }
.lg-css3.lg-lollipop-rev .lg-item.lg-prev-slide {
-moz-transform: translate3d(0, 0, 0) scale(0.5);
-o-transform: translate3d(0, 0, 0) scale(0.5);
-ms-transform: translate3d(0, 0, 0) scale(0.5);
-webkit-transform: translate3d(0, 0, 0) scale(0.5);
transform: translate3d(0, 0, 0) scale(0.5); }
.lg-css3.lg-lollipop-rev .lg-item.lg-next-slide {
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0); }
.lg-css3.lg-lollipop-rev .lg-item.lg-current {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
opacity: 1; }
.lg-css3.lg-lollipop-rev .lg-item.lg-prev-slide, .lg-css3.lg-lollipop-rev .lg-item.lg-next-slide, .lg-css3.lg-lollipop-rev .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-rotate .lg-item {
opacity: 0; }
.lg-css3.lg-rotate .lg-item.lg-prev-slide {
-moz-transform: rotate(-360deg);
-o-transform: rotate(-360deg);
-ms-transform: rotate(-360deg);
-webkit-transform: rotate(-360deg);
transform: rotate(-360deg); }
.lg-css3.lg-rotate .lg-item.lg-next-slide {
-moz-transform: rotate(360deg);
-o-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
transform: rotate(360deg); }
.lg-css3.lg-rotate .lg-item.lg-current {
-moz-transform: rotate(0deg);
-o-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
opacity: 1; }
.lg-css3.lg-rotate .lg-item.lg-prev-slide, .lg-css3.lg-rotate .lg-item.lg-next-slide, .lg-css3.lg-rotate .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-rotate-rev .lg-item {
opacity: 0; }
.lg-css3.lg-rotate-rev .lg-item.lg-prev-slide {
-moz-transform: rotate(360deg);
-o-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
transform: rotate(360deg); }
.lg-css3.lg-rotate-rev .lg-item.lg-next-slide {
-moz-transform: rotate(-360deg);
-o-transform: rotate(-360deg);
-ms-transform: rotate(-360deg);
-webkit-transform: rotate(-360deg);
transform: rotate(-360deg); }
.lg-css3.lg-rotate-rev .lg-item.lg-current {
-moz-transform: rotate(0deg);
-o-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
opacity: 1; }
.lg-css3.lg-rotate-rev .lg-item.lg-prev-slide, .lg-css3.lg-rotate-rev .lg-item.lg-next-slide, .lg-css3.lg-rotate-rev .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
.lg-css3.lg-tube .lg-item {
opacity: 0; }
.lg-css3.lg-tube .lg-item.lg-prev-slide {
-moz-transform: scale3d(1, 0, 1) translate3d(-100%, 0, 0);
-o-transform: scale3d(1, 0, 1) translate3d(-100%, 0, 0);
-ms-transform: scale3d(1, 0, 1) translate3d(-100%, 0, 0);
-webkit-transform: scale3d(1, 0, 1) translate3d(-100%, 0, 0);
transform: scale3d(1, 0, 1) translate3d(-100%, 0, 0); }
.lg-css3.lg-tube .lg-item.lg-next-slide {
-moz-transform: scale3d(1, 0, 1) translate3d(100%, 0, 0);
-o-transform: scale3d(1, 0, 1) translate3d(100%, 0, 0);
-ms-transform: scale3d(1, 0, 1) translate3d(100%, 0, 0);
-webkit-transform: scale3d(1, 0, 1) translate3d(100%, 0, 0);
transform: scale3d(1, 0, 1) translate3d(100%, 0, 0); }
.lg-css3.lg-tube .lg-item.lg-current {
-moz-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-o-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-ms-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
-webkit-transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
transform: scale3d(1, 1, 1) translate3d(0, 0, 0);
opacity: 1; }
.lg-css3.lg-tube .lg-item.lg-prev-slide, .lg-css3.lg-tube .lg-item.lg-next-slide, .lg-css3.lg-tube .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s; }
/*# sourceMappingURL=lg-transitions.css.map */

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,818 @@
@font-face {
font-family: 'lg';
src: url("../fonts/lg.eot?n1z373");
src: url("../fonts/lg.eot?#iefixn1z373") format("embedded-opentype"), url("../fonts/lg.woff?n1z373") format("woff"), url("../fonts/lg.ttf?n1z373") format("truetype"), url("../fonts/lg.svg?n1z373#lg") format("svg");
font-weight: normal;
font-style: normal;
}
.lg-icon {
font-family: 'lg';
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.lg-actions .lg-next, .lg-actions .lg-prev {
background-color: rgba(0, 0, 0, 0.45);
border-radius: 2px;
color: #999;
cursor: pointer;
display: block;
font-size: 22px;
margin-top: -10px;
padding: 8px 10px 9px;
position: absolute;
top: 50%;
z-index: 1080;
}
.lg-actions .lg-next.disabled, .lg-actions .lg-prev.disabled {
pointer-events: none;
opacity: 0.5;
}
.lg-actions .lg-next:hover, .lg-actions .lg-prev:hover {
color: #FFF;
}
.lg-actions .lg-next {
right: 20px;
}
.lg-actions .lg-next:before {
content: "\e095";
}
.lg-actions .lg-prev {
left: 20px;
}
.lg-actions .lg-prev:after {
content: "\e094";
}
@-webkit-keyframes lg-right-end {
0% {
left: 0;
}
50% {
left: -30px;
}
100% {
left: 0;
}
}
@-moz-keyframes lg-right-end {
0% {
left: 0;
}
50% {
left: -30px;
}
100% {
left: 0;
}
}
@-ms-keyframes lg-right-end {
0% {
left: 0;
}
50% {
left: -30px;
}
100% {
left: 0;
}
}
@keyframes lg-right-end {
0% {
left: 0;
}
50% {
left: -30px;
}
100% {
left: 0;
}
}
@-webkit-keyframes lg-left-end {
0% {
left: 0;
}
50% {
left: 30px;
}
100% {
left: 0;
}
}
@-moz-keyframes lg-left-end {
0% {
left: 0;
}
50% {
left: 30px;
}
100% {
left: 0;
}
}
@-ms-keyframes lg-left-end {
0% {
left: 0;
}
50% {
left: 30px;
}
100% {
left: 0;
}
}
@keyframes lg-left-end {
0% {
left: 0;
}
50% {
left: 30px;
}
100% {
left: 0;
}
}
.lg-outer.lg-right-end .lg-object {
-webkit-animation: lg-right-end 0.3s;
-o-animation: lg-right-end 0.3s;
animation: lg-right-end 0.3s;
position: relative;
}
.lg-outer.lg-left-end .lg-object {
-webkit-animation: lg-left-end 0.3s;
-o-animation: lg-left-end 0.3s;
animation: lg-left-end 0.3s;
position: relative;
}
.lg-toolbar {
z-index: 1080;
left: 0;
position: absolute;
top: 0;
width: 100%;
background-color: rgba(0, 0, 0, 0.45);
}
.lg-toolbar .lg-icon {
color: #999;
cursor: pointer;
float: right;
font-size: 24px;
height: 47px;
line-height: 27px;
padding: 10px 0;
text-align: center;
width: 50px;
text-decoration: none !important;
outline: medium none;
}
.lg-toolbar .lg-icon:hover {
color: #FFF;
}
.lg-toolbar .lg-close:after {
content: "\e070";
}
.lg-toolbar .lg-download:after {
content: "\e0f2";
}
.lg-sub-html {
background-color: rgba(0, 0, 0, 0.45);
bottom: 0;
color: #EEE;
font-size: 16px;
left: 0;
padding: 10px 40px;
position: fixed;
right: 0;
text-align: center;
z-index: 1080;
}
.lg-sub-html h4 {
margin: 0;
font-size: 13px;
font-weight: bold;
}
.lg-sub-html p {
font-size: 12px;
margin: 5px 0 0;
}
#lg-counter {
color: #999;
display: inline-block;
font-size: 16px;
padding-left: 20px;
padding-top: 12px;
vertical-align: middle;
}
.lg-toolbar, .lg-prev, .lg-next {
opacity: 1;
-webkit-transition: -webkit-transform 0.35s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.35s cubic-bezier(0, 0, 0.25, 1) 0s;
-moz-transition: -moz-transform 0.35s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.35s cubic-bezier(0, 0, 0.25, 1) 0s;
-o-transition: -o-transform 0.35s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.35s cubic-bezier(0, 0, 0.25, 1) 0s;
transition: transform 0.35s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.35s cubic-bezier(0, 0, 0.25, 1) 0s;
}
.lg-hide-items .lg-prev {
opacity: 0;
-webkit-transform: translate3d(-10px, 0, 0);
transform: translate3d(-10px, 0, 0);
}
.lg-hide-items .lg-next {
opacity: 0;
-webkit-transform: translate3d(10px, 0, 0);
transform: translate3d(10px, 0, 0);
}
.lg-hide-items .lg-toolbar {
opacity: 0;
-webkit-transform: translate3d(0, -10px, 0);
transform: translate3d(0, -10px, 0);
}
body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-object {
-webkit-transform: scale3d(0.5, 0.5, 0.5);
transform: scale3d(0.5, 0.5, 0.5);
opacity: 0;
-webkit-transition: -webkit-transform 250ms ease 0s, opacity 250ms !important;
-moz-transition: -moz-transform 250ms ease 0s, opacity 250ms !important;
-o-transition: -o-transform 250ms ease 0s, opacity 250ms !important;
transition: transform 250ms ease 0s, opacity 250ms !important;
-webkit-transform-origin: 50% 50%;
-moz-transform-origin: 50% 50%;
-ms-transform-origin: 50% 50%;
transform-origin: 50% 50%;
}
body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-item.lg-complete .lg-object {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1);
opacity: 1;
}
.lg-outer .lg-thumb-outer {
background-color: #0D0A0A;
bottom: 0;
position: absolute;
width: 100%;
z-index: 1080;
max-height: 350px;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0, 0, 0.25, 1) 0s;
-moz-transition: -moz-transform 0.25s cubic-bezier(0, 0, 0.25, 1) 0s;
-o-transition: -o-transform 0.25s cubic-bezier(0, 0, 0.25, 1) 0s;
transition: transform 0.25s cubic-bezier(0, 0, 0.25, 1) 0s;
}
.lg-outer .lg-thumb-outer.lg-grab .lg-thumb-item {
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: -o-grab;
cursor: -ms-grab;
cursor: grab;
}
.lg-outer .lg-thumb-outer.lg-grabbing .lg-thumb-item {
cursor: move;
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: -o-grabbing;
cursor: -ms-grabbing;
cursor: grabbing;
}
.lg-outer .lg-thumb-outer.lg-dragging .lg-thumb {
-webkit-transition-duration: 0s !important;
transition-duration: 0s !important;
}
.lg-outer.lg-thumb-open .lg-thumb-outer {
-webkit-transform: translate3d(0, 0%, 0);
transform: translate3d(0, 0%, 0);
}
.lg-outer .lg-thumb {
padding: 10px 0;
height: 100%;
margin-bottom: -5px;
}
.lg-outer .lg-thumb-item {
border-radius: 5px;
cursor: pointer;
float: left;
overflow: hidden;
height: 100%;
border: 2px solid #FFF;
border-radius: 4px;
margin-bottom: 5px;
}
@media (min-width: 1025px) {
.lg-outer .lg-thumb-item {
-webkit-transition: border-color 0.25s ease;
-o-transition: border-color 0.25s ease;
transition: border-color 0.25s ease;
}
}
.lg-outer .lg-thumb-item.active, .lg-outer .lg-thumb-item:hover {
border-color: #a90707;
}
.lg-outer .lg-thumb-item img {
width: 100%;
height: 100%;
}
.lg-outer.lg-has-thumb .lg-item {
padding-bottom: 120px;
}
.lg-outer.lg-can-toggle .lg-item {
padding-bottom: 0;
}
.lg-outer.lg-pull-caption-up .lg-sub-html {
-webkit-transition: bottom 0.25s ease;
-o-transition: bottom 0.25s ease;
transition: bottom 0.25s ease;
}
.lg-outer.lg-pull-caption-up.lg-thumb-open .lg-sub-html {
bottom: 100px;
}
.lg-outer .lg-toogle-thumb {
background-color: #0D0A0A;
border-radius: 2px 2px 0 0;
color: #999;
cursor: pointer;
font-size: 24px;
height: 39px;
line-height: 27px;
padding: 5px 0;
position: absolute;
right: 20px;
text-align: center;
top: -39px;
width: 50px;
}
.lg-outer .lg-toogle-thumb:after {
content: "\e1ff";
}
.lg-outer .lg-toogle-thumb:hover {
color: #FFF;
}
.lg-outer .lg-video-cont {
display: inline-block;
vertical-align: middle;
max-width: 1140px;
max-height: 100%;
width: 100%;
padding: 0 5px;
}
.lg-outer .lg-video {
width: 100%;
height: 0;
padding-bottom: 56.25%;
overflow: hidden;
position: relative;
}
.lg-outer .lg-video .lg-object {
display: inline-block;
position: absolute;
top: 0;
left: 0;
width: 100% !important;
height: 100% !important;
}
.lg-outer .lg-video .lg-video-play {
width: 84px;
height: 59px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -42px;
margin-top: -30px;
z-index: 1080;
cursor: pointer;
}
.lg-outer .lg-has-vimeo .lg-video-play {
background: url("../img/vimeo-play.png") no-repeat scroll 0 0 transparent;
}
.lg-outer .lg-has-vimeo:hover .lg-video-play {
background: url("../img/vimeo-play.png") no-repeat scroll 0 -58px transparent;
}
.lg-outer .lg-has-html5 .lg-video-play {
background: transparent url("../img/video-play.png") no-repeat scroll 0 0;
height: 64px;
margin-left: -32px;
margin-top: -32px;
width: 64px;
opacity: 0.8;
}
.lg-outer .lg-has-html5:hover .lg-video-play {
opacity: 1;
}
.lg-outer .lg-has-youtube .lg-video-play {
background: url("../img/youtube-play.png") no-repeat scroll 0 0 transparent;
}
.lg-outer .lg-has-youtube:hover .lg-video-play {
background: url("../img/youtube-play.png") no-repeat scroll 0 -60px transparent;
}
.lg-outer .lg-video-object {
width: 100% !important;
height: 100% !important;
position: absolute;
top: 0;
left: 0;
}
.lg-outer .lg-has-video .lg-video-object {
visibility: hidden;
}
.lg-outer .lg-has-video.lg-video-palying .lg-object, .lg-outer .lg-has-video.lg-video-palying .lg-video-play {
display: none;
}
.lg-outer .lg-has-video.lg-video-palying .lg-video-object {
visibility: visible;
}
.lg-progress-bar {
background-color: #333;
height: 5px;
left: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 1080;
opacity: 0;
-webkit-transition: opacity 0.08s ease 0s;
-moz-transition: opacity 0.08s ease 0s;
-o-transition: opacity 0.08s ease 0s;
transition: opacity 0.08s ease 0s;
}
.lg-progress-bar .lg-progress {
background-color: #a90707;
height: 5px;
width: 0;
}
.lg-progress-bar.lg-start .lg-progress {
width: 100%;
}
.lg-show-autoplay .lg-progress-bar {
opacity: 1;
}
.lg-autoplay-button:after {
content: "\e01d";
}
.lg-show-autoplay .lg-autoplay-button:after {
content: "\e01a";
}
.lg-outer.lg-css3.lg-zoom-dragging .lg-item.lg-complete.lg-zoomable .lg-img-wrap, .lg-outer.lg-css3.lg-zoom-dragging .lg-item.lg-complete.lg-zoomable .lg-image {
-webkit-transition-duration: 0s;
transition-duration: 0s;
}
.lg-outer .lg-item.lg-complete.lg-zoomable .lg-img-wrap {
-webkit-transition: -webkit-transform 0.3s ease 0s;
-moz-transition: -moz-transform 0.3s ease 0s;
-o-transition: -o-transform 0.3s ease 0s;
transition: transform 0.3s ease 0s;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.lg-outer .lg-item.lg-complete.lg-zoomable .lg-image {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1);
-webkit-transition: -webkit-transform 0.3s ease 0s, opacity 0.15s !important;
-moz-transition: -moz-transform 0.3s ease 0s, opacity 0.15s !important;
-o-transition: -o-transform 0.3s ease 0s, opacity 0.15s !important;
transition: transform 0.3s ease 0s, opacity 0.15s !important;
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-ms-transform-origin: 0 0;
transform-origin: 0 0;
}
#lg-zoom-in:after {
content: "\e311";
}
#lg-zoom-out {
opacity: 0.5;
pointer-events: none;
}
#lg-zoom-out:after {
content: "\e312";
}
.lg-zoomed #lg-zoom-out {
opacity: 1;
pointer-events: auto;
}
.lg-outer .lg-pager-outer {
bottom: 60px;
left: 0;
position: absolute;
right: 0;
text-align: center;
z-index: 1080;
height: 10px;
}
.lg-outer .lg-pager-outer.lg-pager-hover .lg-pager-cont {
overflow: visible;
}
.lg-outer .lg-pager-cont {
cursor: pointer;
display: inline-block;
overflow: hidden;
position: relative;
vertical-align: top;
margin: 0 5px;
}
.lg-outer .lg-pager-cont:hover .lg-pager-thumb-cont {
opacity: 1;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
.lg-outer .lg-pager-cont.lg-pager-active .lg-pager {
box-shadow: 0 0 0 2px white inset;
}
.lg-outer .lg-pager-thumb-cont {
background-color: #fff;
color: #FFF;
bottom: 100%;
height: 83px;
left: 0;
margin-bottom: 20px;
margin-left: -60px;
opacity: 0;
padding: 5px;
position: absolute;
width: 120px;
border-radius: 3px;
-webkit-transition: opacity 0.15s ease 0s, -webkit-transform 0.15s ease 0s;
-moz-transition: opacity 0.15s ease 0s, -moz-transform 0.15s ease 0s;
-o-transition: opacity 0.15s ease 0s, -o-transform 0.15s ease 0s;
transition: opacity 0.15s ease 0s, transform 0.15s ease 0s;
-webkit-transform: translate3d(0, 5px, 0);
transform: translate3d(0, 5px, 0);
}
.lg-outer .lg-pager-thumb-cont img {
width: 100%;
height: 100%;
}
.lg-outer .lg-pager {
background-color: rgba(255, 255, 255, 0.5);
border-radius: 50%;
box-shadow: 0 0 0 8px rgba(255, 255, 255, 0.7) inset;
display: block;
height: 12px;
-webkit-transition: box-shadow 0.3s ease 0s;
-o-transition: box-shadow 0.3s ease 0s;
transition: box-shadow 0.3s ease 0s;
width: 12px;
}
.lg-outer .lg-pager:hover, .lg-outer .lg-pager:focus {
box-shadow: 0 0 0 8px white inset;
}
.lg-outer .lg-caret {
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 10px dashed;
bottom: -10px;
display: inline-block;
height: 0;
left: 50%;
margin-left: -5px;
position: absolute;
vertical-align: middle;
width: 0;
}
.lg-fullscreen:after {
content: "\e20c";
}
.lg-fullscreen-on .lg-fullscreen:after {
content: "\e20d";
}
.group {
*zoom: 1;
}
.group:before, .group:after {
display: table;
content: "";
line-height: 0;
}
.group:after {
clear: both;
}
.lg-outer {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 1050;
opacity: 0;
-webkit-transition: opacity 0.15s ease 0s;
-o-transition: opacity 0.15s ease 0s;
transition: opacity 0.15s ease 0s;
}
.lg-outer * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.lg-outer.lg-visible {
opacity: 1;
}
.lg-outer.lg-css3 .lg-item.lg-prev-slide, .lg-outer.lg-css3 .lg-item.lg-next-slide, .lg-outer.lg-css3 .lg-item.lg-current {
-webkit-transition-duration: inherit !important;
transition-duration: inherit !important;
-webkit-transition-timing-function: inherit !important;
transition-timing-function: inherit !important;
}
.lg-outer.lg-css3.lg-dragging .lg-item.lg-prev-slide, .lg-outer.lg-css3.lg-dragging .lg-item.lg-next-slide, .lg-outer.lg-css3.lg-dragging .lg-item.lg-current {
-webkit-transition-duration: 0s !important;
transition-duration: 0s !important;
opacity: 1;
}
.lg-outer.lg-grab img.lg-object {
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: -o-grab;
cursor: -ms-grab;
cursor: grab;
}
.lg-outer.lg-grabbing img.lg-object {
cursor: move;
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: -o-grabbing;
cursor: -ms-grabbing;
cursor: grabbing;
}
.lg-outer .lg {
height: 100%;
width: 100%;
position: relative;
overflow: hidden;
margin-left: auto;
margin-right: auto;
max-width: 100%;
max-height: 100%;
}
.lg-outer .lg-inner {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
white-space: nowrap;
}
.lg-outer .lg-item {
background: url(../img/loading.gif) no-repeat scroll center center transparent;
display: none !important;
}
.lg-outer.lg-css3 .lg-prev-slide, .lg-outer.lg-css3 .lg-current, .lg-outer.lg-css3 .lg-next-slide {
display: inline-block !important;
}
.lg-outer.lg-css .lg-current {
display: inline-block !important;
}
.lg-outer .lg-item, .lg-outer .lg-img-wrap {
display: inline-block;
text-align: center;
position: absolute;
width: 100%;
height: 100%;
}
.lg-outer .lg-item:before, .lg-outer .lg-img-wrap:before {
content: "";
display: inline-block;
height: 50%;
width: 1px;
margin-right: -1px;
}
.lg-outer .lg-img-wrap {
top: 0;
bottom: 0;
left: 0;
right: 0;
padding: 0 5px;
}
.lg-outer .lg-item.lg-complete {
background-image: none;
}
.lg-outer .lg-item.lg-current {
z-index: 1060;
}
.lg-outer .lg-image {
display: inline-block;
vertical-align: middle;
max-width: 100%;
max-height: 100%;
width: auto !important;
height: auto !important;
}
.lg-outer.lg-show-after-load .lg-item .lg-object, .lg-outer.lg-show-after-load .lg-item .lg-video-play {
opacity: 0;
-webkit-transition: opacity 0.15s ease 0s;
-o-transition: opacity 0.15s ease 0s;
transition: opacity 0.15s ease 0s;
}
.lg-outer.lg-show-after-load .lg-item.lg-complete .lg-object, .lg-outer.lg-show-after-load .lg-item.lg-complete .lg-video-play {
opacity: 1;
}
.lg-outer .lg-empty-html {
display: none;
}
.lg-backdrop {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1040;
background-color: #000;
opacity: 0;
-webkit-transition: opacity 0.15s ease 0s;
-o-transition: opacity 0.15s ease 0s;
transition: opacity 0.15s ease 0s;
}
.lg-backdrop.in {
opacity: 1;
}
.lg-css3.lg-no-trans .lg-prev-slide, .lg-css3.lg-no-trans .lg-next-slide, .lg-css3.lg-no-trans .lg-current {
-webkit-transition: none 0s ease 0s !important;
-moz-transition: none 0s ease 0s !important;
-o-transition: none 0s ease 0s !important;
transition: none 0s ease 0s !important;
}
.lg-css3.lg-use-css3 .lg-item {
will-change: transform, opacity;
}
.lg-css3.lg-use-left .lg-item {
will-change: left, opacity;
}
.lg-css3.lg-fade .lg-item {
opacity: 0;
}
.lg-css3.lg-fade .lg-item.lg-current {
opacity: 1;
}
.lg-css3.lg-fade .lg-item.lg-prev-slide, .lg-css3.lg-fade .lg-item.lg-next-slide, .lg-css3.lg-fade .lg-item.lg-current {
-webkit-transition: opacity 0.1s ease 0s;
-moz-transition: opacity 0.1s ease 0s;
-o-transition: opacity 0.1s ease 0s;
transition: opacity 0.1s ease 0s;
}
.lg-css3.lg-slide.lg-use-css3 .lg-item {
opacity: 0;
}
.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-prev-slide {
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
}
.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-next-slide {
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0);
}
.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-current {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
opacity: 1;
}
.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-prev-slide, .lg-css3.lg-slide.lg-use-css3 .lg-item.lg-next-slide, .lg-css3.lg-slide.lg-use-css3 .lg-item.lg-current {
-webkit-transition: -webkit-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: -moz-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: -o-transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
}
.lg-css3.lg-slide.lg-use-left .lg-item {
opacity: 0;
position: absolute;
left: 0;
}
.lg-css3.lg-slide.lg-use-left .lg-item.lg-prev-slide {
left: -100%;
}
.lg-css3.lg-slide.lg-use-left .lg-item.lg-next-slide {
left: 100%;
}
.lg-css3.lg-slide.lg-use-left .lg-item.lg-current {
left: 0;
opacity: 1;
}
.lg-css3.lg-slide.lg-use-left .lg-item.lg-prev-slide, .lg-css3.lg-slide.lg-use-left .lg-item.lg-next-slide, .lg-css3.lg-slide.lg-use-left .lg-item.lg-current {
-webkit-transition: left 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-moz-transition: left 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
-o-transition: left 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
transition: left 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s;
}
/*# sourceMappingURL=lightgallery.css.map */

File diff suppressed because one or more lines are too long

Binary file not shown.

View file

@ -0,0 +1,41 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
<json>
<![CDATA[
{
"fontFamily": "lg",
"majorVersion": 1,
"minorVersion": 0,
"fontURL": "https://github.com/sachinchoolur/lightGallery",
"copyright": "sachin",
"license": "MLT",
"licenseURL": "http://opensource.org/licenses/MIT",
"version": "Version 1.0",
"fontId": "lg",
"psName": "lg",
"subFamily": "Regular",
"fullName": "lg",
"description": "Font generated by IcoMoon."
}
]]>
</json>
</metadata>
<defs>
<font id="lg" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe01a;" glyph-name="pause_circle_outline" data-tags="pause_circle_outline" d="M554 256.667v340h86v-340h-86zM512 84.667q140 0 241 101t101 241-101 241-241 101-241-101-101-241 101-241 241-101zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125zM384 256.667v340h86v-340h-86z" />
<glyph unicode="&#xe01d;" glyph-name="play_circle_outline" data-tags="play_circle_outline" d="M512 84.667q140 0 241 101t101 241-101 241-241 101-241-101-101-241 101-241 241-101zM512 852.667q176 0 301-125t125-301-125-301-301-125-301 125-125 301 125 301 301 125zM426 234.667v384l256-192z" />
<glyph unicode="&#xe070;" glyph-name="clear" data-tags="clear" d="M810 664.667l-238-238 238-238-60-60-238 238-238-238-60 60 238 238-238 238 60 60 238-238 238 238z" />
<glyph unicode="&#xe094;" glyph-name="arrow-left" data-tags="arrow-left" d="M426.667 768q17.667 0 30.167-12.5t12.5-30.167q0-18-12.667-30.333l-225.667-225.667h665q17.667 0 30.167-12.5t12.5-30.167-12.5-30.167-30.167-12.5h-665l225.667-225.667q12.667-12.333 12.667-30.333 0-17.667-12.5-30.167t-30.167-12.5q-18 0-30.333 12.333l-298.667 298.667q-12.333 13-12.333 30.333t12.333 30.333l298.667 298.667q12.667 12.333 30.333 12.333z" />
<glyph unicode="&#xe095;" glyph-name="arrow-right" data-tags="arrow-right" d="M597.333 768q18 0 30.333-12.333l298.667-298.667q12.333-12.333 12.333-30.333t-12.333-30.333l-298.667-298.667q-12.333-12.333-30.333-12.333-18.333 0-30.5 12.167t-12.167 30.5q0 18 12.333 30.333l226 225.667h-665q-17.667 0-30.167 12.5t-12.5 30.167 12.5 30.167 30.167 12.5h665l-226 225.667q-12.333 12.333-12.333 30.333 0 18.333 12.167 30.5t30.5 12.167z" />
<glyph unicode="&#xe0f2;" glyph-name="vertical_align_bottom" data-tags="vertical_align_bottom" d="M170 128.667h684v-86h-684v86zM682 384.667l-170-172-170 172h128v426h84v-426h128z" />
<glyph unicode="&#xe1ff;" glyph-name="apps" data-tags="apps" d="M682 84.667v172h172v-172h-172zM682 340.667v172h172v-172h-172zM426 596.667v172h172v-172h-172zM682 768.667h172v-172h-172v172zM426 340.667v172h172v-172h-172zM170 340.667v172h172v-172h-172zM170 84.667v172h172v-172h-172zM426 84.667v172h172v-172h-172zM170 596.667v172h172v-172h-172z" />
<glyph unicode="&#xe20c;" glyph-name="fullscreen" data-tags="fullscreen" d="M598 724.667h212v-212h-84v128h-128v84zM726 212.667v128h84v-212h-212v84h128zM214 512.667v212h212v-84h-128v-128h-84zM298 340.667v-128h128v-84h-212v212h84z" />
<glyph unicode="&#xe20d;" glyph-name="fullscreen_exit" data-tags="fullscreen_exit" d="M682 596.667h128v-84h-212v212h84v-128zM598 128.667v212h212v-84h-128v-128h-84zM342 596.667v128h84v-212h-212v84h128zM214 256.667v84h212v-212h-84v128h-128z" />
<glyph unicode="&#xe311;" glyph-name="zoom_in" data-tags="zoom_in" d="M512 512.667h-86v-86h-42v86h-86v42h86v86h42v-86h86v-42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z" />
<glyph unicode="&#xe312;" glyph-name="zoom_out" data-tags="zoom_out" d="M298 554.667h214v-42h-214v42zM406 340.667q80 0 136 56t56 136-56 136-136 56-136-56-56-136 56-136 136-56zM662 340.667l212-212-64-64-212 212v34l-12 12q-76-66-180-66-116 0-197 80t-81 196 81 197 197 81 196-81 80-197q0-104-66-180l12-12h34z" />
</font></defs></svg>

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -0,0 +1,188 @@
/**
* Autoplay Plugin
* @version 1.2.0
* @author Sachin N - @sachinchoolur
* @license MIT License (MIT)
*/
(function($, window, document, undefined) {
'use strict';
var defaults = {
autoplay: false,
pause: 5000,
progressBar: true,
fourceAutoplay: false,
autoplayControls: true,
appendAutoplayControlsTo: '.lg-toolbar'
};
/**
* Creates the autoplay plugin.
* @param {object} element - lightGallery element
*/
var Autoplay = function(element) {
this.core = $(element).data('lightGallery');
this.$el = $(element);
// Exicute only if items are above 1
if (this.core.$items.length < 2) {
return false;
}
this.core.s = $.extend({}, defaults, this.core.s);
this.interval = false;
// Identify if slide happened from autoplay
this.fromAuto = true;
// Identify if autoplay canceled from touch/drag
this.canceledOnTouch = false;
// save fourceautoplay value
this.fourceAutoplayTemp = this.core.s.fourceAutoplay;
// do not allow progress bar if browser does not support css3 transitions
if (!this.core.doCss()) {
this.core.s.progressBar = false;
}
this.init();
return this;
};
Autoplay.prototype.init = function() {
var _this = this;
// append autoplay controls
if (_this.core.s.autoplayControls) {
_this.controls();
}
// Create progress bar
if (_this.core.s.progressBar) {
_this.core.$outer.find('.lg').append('<div class="lg-progress-bar"><div class="lg-progress"></div></div>');
}
// set progress
_this.progress();
// Start autoplay
if (_this.core.s.autoplay) {
_this.startlAuto();
}
// cancel interval on touchstart and dragstart
_this.$el.on('onDragstart.lg.tm touchstart.lg.tm', function() {
if (_this.interval) {
_this.cancelAuto();
_this.canceledOnTouch = true;
}
});
// restore autoplay if autoplay canceled from touchstart / dragstart
_this.$el.on('onDragend.lg.tm touchend.lg.tm onSlideClick.lg.tm', function() {
if (!_this.interval && _this.canceledOnTouch) {
_this.startlAuto();
_this.canceledOnTouch = false;
}
});
};
Autoplay.prototype.progress = function() {
var _this = this;
var _$progressBar;
var _$progress;
_this.$el.on('onBeforeSlide.lg.tm', function() {
// start progress bar animation
if (_this.core.s.progressBar && _this.fromAuto) {
_$progressBar = _this.core.$outer.find('.lg-progress-bar');
_$progress = _this.core.$outer.find('.lg-progress');
if (_this.interval) {
_$progress.removeAttr('style');
_$progressBar.removeClass('lg-start');
setTimeout(function() {
_$progress.css('transition', 'width ' + (_this.core.s.speed + _this.core.s.pause) + 'ms ease 0s');
_$progressBar.addClass('lg-start');
}, 20);
}
}
// Remove setinterval if slide is trigered manualy and fourceautoplay is false
if (!_this.fromAuto && !_this.core.s.fourceAutoplay) {
_this.cancelAuto();
}
_this.fromAuto = false;
});
};
// Manage autoplay via play/stop buttons
Autoplay.prototype.controls = function() {
var _this = this;
var _html = '<span class="lg-autoplay-button lg-icon"></span>';
// Append autoplay controls
$(this.core.s.appendAutoplayControlsTo).append(_html);
_this.core.$outer.find('.lg-autoplay-button').on('click.lg', function() {
if ($(_this.core.$outer).hasClass('lg-show-autoplay')) {
_this.cancelAuto();
_this.core.s.fourceAutoplay = false;
} else {
if (!_this.interval) {
_this.startlAuto();
_this.core.s.fourceAutoplay = _this.fourceAutoplayTemp;
}
}
});
};
// Autostart gallery
Autoplay.prototype.startlAuto = function() {
var _this = this;
_this.core.$outer.find('.lg-progress').css('transition', 'width ' + (_this.core.s.speed + _this.core.s.pause) + 'ms ease 0s');
_this.core.$outer.addClass('lg-show-autoplay');
_this.core.$outer.find('.lg-progress-bar').addClass('lg-start');
_this.interval = setInterval(function() {
if (_this.core.index + 1 < _this.core.$items.length) {
_this.core.index = _this.core.index;
} else {
_this.core.index = -1;
}
_this.core.index++;
_this.fromAuto = true;
_this.core.slide(_this.core.index, false, false);
}, _this.core.s.speed + _this.core.s.pause);
};
// cancel Autostart
Autoplay.prototype.cancelAuto = function() {
clearInterval(this.interval);
this.interval = false;
this.core.$outer.find('.lg-progress').removeAttr('style');
this.core.$outer.removeClass('lg-show-autoplay');
this.core.$outer.find('.lg-progress-bar').removeClass('lg-start');
};
Autoplay.prototype.destroy = function() {
this.cancelAuto();
this.core.$outer.find('.lg-progress-bar').remove();
};
$.fn.lightGallery.modules.autoplay = Autoplay;
})(jQuery, window, document);

View file

@ -0,0 +1,94 @@
(function($, window, document, undefined) {
'use strict';
var defaults = {
fullScreen: true
};
var Fullscreen = function(element) {
// get lightGallery core plugin data
this.core = $(element).data('lightGallery');
this.$el = $(element);
// extend module defalut settings with lightGallery core settings
this.core.s = $.extend({}, defaults, this.core.s);
this.init();
return this;
};
Fullscreen.prototype.init = function() {
var fullScreen = '';
if (this.core.s.fullScreen) {
// check for fullscreen browser support
if (!document.fullscreenEnabled && !document.webkitFullscreenEnabled &&
!document.mozFullScreenEnabled && !document.msFullscreenEnabled) {
return;
} else {
fullScreen = '<span class="lg-fullscreen lg-icon"></span>';
this.core.$outer.find('.lg-toolbar').append(fullScreen);
this.fullScreen();
}
}
};
Fullscreen.prototype.reuestFullscreen = function() {
var el = document.documentElement;
if (el.requestFullscreen) {
el.requestFullscreen();
} else if (el.msRequestFullscreen) {
el.msRequestFullscreen();
} else if (el.mozRequestFullScreen) {
el.mozRequestFullScreen();
} else if (el.webkitRequestFullscreen) {
el.webkitRequestFullscreen();
}
};
Fullscreen.prototype.exitFullscreen = function() {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
};
// https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Using_full_screen_mode
Fullscreen.prototype.fullScreen = function() {
var _this = this;
$(document).on('fullscreenchange.lg webkitfullscreenchange.lg mozfullscreenchange.lg MSFullscreenChange.lg', function() {
_this.core.$outer.toggleClass('lg-fullscreen-on');
});
this.core.$outer.find('.lg-fullscreen').on('click.lg', function() {
if (!document.fullscreenElement &&
!document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement) {
_this.reuestFullscreen();
} else {
_this.exitFullscreen();
}
});
};
Fullscreen.prototype.destroy = function() {
// exit from fullscreen if activated
this.exitFullscreen();
$(document).off('fullscreenchange.lg webkitfullscreenchange.lg mozfullscreenchange.lg MSFullscreenChange.lg');
};
$.fn.lightGallery.modules.fullscreen = Fullscreen;
})(jQuery, window, document);

View file

@ -0,0 +1,83 @@
(function($, window, document, undefined) {
'use strict';
var defaults = {
hash: true
};
var Hash = function(element) {
this.core = $(element).data('lightGallery');
this.core.s = $.extend({}, defaults, this.core.s);
if (this.core.s.hash) {
this.oldHash = window.location.hash;
this.init();
}
return this;
};
Hash.prototype.init = function() {
var _this = this;
var _hash;
// Change hash value on after each slide transition
_this.core.$el.on('onAfterSlide.lg.tm', function(event, prevIndex, index) {
window.location.hash = 'lg=' + _this.core.s.galleryId + '&slide=' + index;
});
// Listen hash change and change the slide according to slide value
$(window).on('hashchange', function() {
_hash = window.location.hash;
var _idx = parseInt(_hash.split('&slide=')[1], 10);
// it galleryId doesn't exist in the url close the gallery
if ((_hash.indexOf('lg=' + _this.core.s.galleryId) > -1)) {
_this.core.slide(_idx);
} else if (_this.core.lGalleryOn) {
_this.core.destroy();
}
});
};
Hash.prototype.destroy = function() {
// Reset to old hash value
if (this.oldHash && this.oldHash.indexOf('lg=' + this.core.s.galleryId) < 0) {
window.location.hash = this.oldHash;
} else {
if (history.pushState) {
history.pushState('', document.title, window.location.pathname + window.location.search);
} else {
window.location.hash = '';
}
}
// Reset to old hash value
/*
if (this.oldHash && this.oldHash.indexOf('lg=' + this.core.s.galleryId) < 0) {
if (history.replaceState) {
history.replaceState(null, null, this.oldHash);
} else {
window.location.hash = this.oldHash;
}
} else {
if (history.replaceState) {
history.replaceState(null, document.title, window.location.pathname + window.location.search);
} else {
window.location.hash = '';
}
}
this.core.$el.off('.lg.hash');
*/
};
$.fn.lightGallery.modules.hash = Hash;
})(jQuery, window, document);

View file

@ -0,0 +1,82 @@
(function($, window, document, undefined) {
'use strict';
var defaults = {
pager: false
};
var Pager = function(element) {
this.core = $(element).data('lightGallery');
this.$el = $(element);
this.core.s = $.extend({}, defaults, this.core.s);
if (this.core.s.pager && this.core.$items.length > 1) {
this.init();
}
return this;
};
Pager.prototype.init = function() {
var _this = this;
var pagerList = '';
var $pagerCont;
var $pagerOuter;
var timeout;
_this.core.$outer.find('.lg').append('<div class="lg-pager-outer"></div>');
if (_this.core.s.dynamic) {
for (var i = 0; i < _this.core.s.dynamicEl.length; i++) {
pagerList += '<span class="lg-pager-cont"> <span class="lg-pager"></span><div class="lg-pager-thumb-cont"><span class="lg-caret"></span> <img src="' + _this.core.s.dynamicEl[i].thumb + '" /></div></span>';
}
} else {
_this.core.$items.each(function() {
if (!_this.core.s.exThumbImage) {
pagerList += '<span class="lg-pager-cont"> <span class="lg-pager"></span><div class="lg-pager-thumb-cont"><span class="lg-caret"></span> <img src="' + $(this).find('img').attr('src') + '" /></div></span>';
} else {
pagerList += '<span class="lg-pager-cont"> <span class="lg-pager"></span><div class="lg-pager-thumb-cont"><span class="lg-caret"></span> <img src="' + $(this).attr(_this.core.s.exThumbImage) + '" /></div></span>';
}
});
}
$pagerOuter = _this.core.$outer.find('.lg-pager-outer');
$pagerOuter.html(pagerList);
$pagerCont = _this.core.$outer.find('.lg-pager-cont');
$pagerCont.on('click.lg touchend.lg', function() {
var _$this = $(this);
_this.core.index = _$this.index();
_this.core.slide(_this.core.index, false, false);
});
$pagerOuter.on('mouseover.lg', function() {
clearTimeout(timeout);
$pagerOuter.addClass('lg-pager-hover');
});
$pagerOuter.on('mouseout.lg', function() {
timeout = setTimeout(function() {
$pagerOuter.removeClass('lg-pager-hover');
});
});
_this.core.$el.on('onBeforeSlide.lg.tm', function(e, prevIndex, index) {
$pagerCont.removeClass('lg-pager-active');
$pagerCont.eq(index).addClass('lg-pager-active');
});
};
Pager.prototype.destroy = function() {
};
$.fn.lightGallery.modules.pager = Pager;
})(jQuery, window, document);

View file

@ -0,0 +1,448 @@
(function($, window, document, undefined) {
'use strict';
var defaults = {
thumbnail: true,
animateThumb: true,
currentPagerPosition: 'middle',
thumbWidth: 100,
thumbContHeight: 100,
thumbMargin: 5,
exThumbImage: false,
showThumbByDefault: true,
toogleThumb: true,
pullCaptionUp: true,
enableThumbDrag: true,
enableThumbSwipe: true,
swipeThreshold: 50,
loadYoutubeThumbnail: true,
youtubeThumbSize: 1,
loadVimeoThumbnail: true,
vimeoThumbSize: 'thumbnail_small',
loadDailymotionThumbnail: true
};
var Thumbnail = function(element) {
// get lightGallery core plugin data
this.core = $(element).data('lightGallery');
// extend module default settings with lightGallery core settings
this.core.s = $.extend({}, defaults, this.core.s);
this.$el = $(element);
this.$thumbOuter = null;
this.thumbOuterWidth = 0;
this.thumbTotalWidth = (this.core.$items.length * (this.core.s.thumbWidth + this.core.s.thumbMargin));
this.thumbIndex = this.core.index;
// Thumbnail animation value
this.left = 0;
this.init();
return this;
};
Thumbnail.prototype.init = function() {
if (this.core.s.thumbnail && this.core.$items.length > 1) {
if (this.core.s.showThumbByDefault) {
this.core.$outer.addClass('lg-thumb-open');
}
if (this.core.s.pullCaptionUp) {
this.core.$outer.addClass('lg-pull-caption-up');
}
this.build();
if (this.core.s.animateThumb) {
if (this.core.s.enableThumbDrag && !this.core.isTouch && this.core.doCss()) {
this.enableThumbDrag();
}
if (this.core.s.enableThumbSwipe && this.core.isTouch && this.core.doCss()) {
this.enableThumbSwipe();
}
this.thumbClickable = false;
} else {
this.thumbClickable = true;
}
this.toogle();
this.thumbkeyPress();
}
};
Thumbnail.prototype.build = function() {
var _this = this;
var thumbList = '';
var vimeoErrorThumbSize = '';
var $thumb;
var html = '<div class="lg-thumb-outer">' +
'<div class="lg-thumb group">' +
'</div>' +
'</div>';
switch (this.core.s.vimeoThumbSize) {
case 'thumbnail_large':
vimeoErrorThumbSize = '640';
break;
case 'thumbnail_medium':
vimeoErrorThumbSize = '200x150';
break;
case 'thumbnail_small':
vimeoErrorThumbSize = '100x75';
}
_this.core.$outer.addClass('lg-has-thumb');
_this.core.$outer.find('.lg').append(html);
_this.$thumbOuter = _this.core.$outer.find('.lg-thumb-outer');
_this.thumbOuterWidth = _this.$thumbOuter.width();
if (_this.core.s.animateThumb) {
_this.core.$outer.find('.lg-thumb').css({
width: _this.thumbTotalWidth + 'px',
position: 'relative'
});
}
if (this.core.s.animateThumb) {
_this.$thumbOuter.css('height', _this.core.s.thumbContHeight + 'px');
}
function getThumb(src, thumb, index) {
var isVideo = _this.core.isVideo(src, index) || {};
var thumbImg;
var vimeoId = '';
if (isVideo.youtube || isVideo.vimeo || isVideo.dailymotion) {
if (isVideo.youtube) {
if (_this.core.s.loadYoutubeThumbnail) {
thumbImg = '//img.youtube.com/vi/' + isVideo.youtube[1] + '/' + _this.core.s.youtubeThumbSize + '.jpg';
} else {
thumbImg = thumb;
}
} else if (isVideo.vimeo) {
if (_this.core.s.loadVimeoThumbnail) {
thumbImg = '//i.vimeocdn.com/video/error_' + vimeoErrorThumbSize + '.jpg';
vimeoId = isVideo.vimeo[1];
} else {
thumbImg = thumb;
}
} else if (isVideo.dailymotion) {
if (_this.core.s.loadDailymotionThumbnail) {
thumbImg = '//www.dailymotion.com/thumbnail/video/' + isVideo.dailymotion[1];
} else {
thumbImg = thumb;
}
}
} else {
thumbImg = thumb;
}
thumbList += '<div data-vimeo-id="' + vimeoId + '" class="lg-thumb-item" style="width:' + _this.core.s.thumbWidth + 'px; margin-right: ' + _this.core.s.thumbMargin + 'px"><img src="' + thumbImg + '" /></div>';
vimeoId = '';
}
if (_this.core.s.dynamic) {
for (var i = 0; i < _this.core.s.dynamicEl.length; i++) {
getThumb(_this.core.s.dynamicEl[i].src, _this.core.s.dynamicEl[i].thumb, i);
}
} else {
_this.core.$items.each(function(i) {
if (!_this.core.s.exThumbImage) {
getThumb($(this).attr('href') || $(this).attr('data-src'), $(this).find('img').attr('src'), i);
} else {
getThumb($(this).attr('href') || $(this).attr('data-src'), $(this).attr(_this.core.s.exThumbImage), i);
}
});
}
_this.core.$outer.find('.lg-thumb').html(thumbList);
$thumb = _this.core.$outer.find('.lg-thumb-item');
// Load vimeo thumbnails
$thumb.each(function() {
var $this = $(this);
var vimeoVideoId = $this.attr('data-vimeo-id');
if (vimeoVideoId) {
$.getJSON('http://www.vimeo.com/api/v2/video/' + vimeoVideoId + '.json?callback=?', {
format: 'json'
}, function(data) {
$this.find('img').attr('src', data[0][_this.core.s.vimeoThumbSize]);
});
}
});
// manage active class for thumbnail
$thumb.eq(_this.core.index).addClass('active');
_this.core.$el.on('onBeforeSlide.lg.tm', function() {
$thumb.removeClass('active');
$thumb.eq(_this.core.index).addClass('active');
});
$thumb.on('click.lg touchend.lg', function() {
var _$this = $(this);
setTimeout(function() {
// In IE9 and bellow touch does not support
// Go to slide if browser does not support css transitions
if ((_this.thumbClickable && !_this.core.lgBusy) || !_this.core.doCss()) {
_this.core.index = _$this.index();
_this.core.slide(_this.core.index, false, true);
}
}, 50);
});
_this.core.$el.on('onBeforeSlide.lg.tm', function() {
_this.animateThumb(_this.core.index);
});
$(window).on('resize.lg.thumb orientationchange.lg.thumb', function() {
setTimeout(function() {
_this.animateThumb(_this.core.index);
_this.thumbOuterWidth = _this.$thumbOuter.width();
}, 200);
});
};
Thumbnail.prototype.setTranslate = function(value) {
// jQuery supports Automatic CSS prefixing since jQuery 1.8.0
this.core.$outer.find('.lg-thumb').css({
transform: 'translate3d(-' + (value) + 'px, 0px, 0px)'
});
};
Thumbnail.prototype.animateThumb = function(index) {
var $thumb = this.core.$outer.find('.lg-thumb');
if (this.core.s.animateThumb) {
var position;
switch (this.core.s.currentPagerPosition) {
case 'left':
position = 0;
break;
case 'middle':
position = (this.thumbOuterWidth / 2) - (this.core.s.thumbWidth / 2);
break;
case 'right':
position = this.thumbOuterWidth - this.core.s.thumbWidth;
}
this.left = ((this.core.s.thumbWidth + this.core.s.thumbMargin) * index - 1) - position;
if (this.left > (this.thumbTotalWidth - this.thumbOuterWidth)) {
this.left = this.thumbTotalWidth - this.thumbOuterWidth;
}
if (this.left < 0) {
this.left = 0;
}
if (this.core.lGalleryOn) {
if (!$thumb.hasClass('on')) {
this.core.$outer.find('.lg-thumb').css('transition-duration', this.core.s.speed + 'ms');
}
if (!this.core.doCss()) {
$thumb.animate({
left: -this.left + 'px'
}, this.core.s.speed);
}
} else {
if (!this.core.doCss()) {
$thumb.css('left', -this.left + 'px');
}
}
this.setTranslate(this.left);
}
};
// Enable thumbnail dragging and swiping
Thumbnail.prototype.enableThumbDrag = function() {
var _this = this;
var startCoords = 0;
var endCoords = 0;
var isDraging = false;
var isMoved = false;
var tempLeft = 0;
_this.$thumbOuter.addClass('lg-grab');
_this.core.$outer.find('.lg-thumb').on('mousedown.lg.thumb', function(e) {
if (_this.thumbTotalWidth > _this.thumbOuterWidth) {
// execute only on .lg-object
e.preventDefault();
startCoords = e.pageX;
isDraging = true;
// ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723
_this.core.$outer.scrollLeft += 1;
_this.core.$outer.scrollLeft -= 1;
// *
_this.thumbClickable = false;
_this.$thumbOuter.removeClass('lg-grab').addClass('lg-grabbing');
}
});
$(window).on('mousemove.lg.thumb', function(e) {
if (isDraging) {
tempLeft = _this.left;
isMoved = true;
endCoords = e.pageX;
_this.$thumbOuter.addClass('lg-dragging');
tempLeft = tempLeft - (endCoords - startCoords);
if (tempLeft > (_this.thumbTotalWidth - _this.thumbOuterWidth)) {
tempLeft = _this.thumbTotalWidth - _this.thumbOuterWidth;
}
if (tempLeft < 0) {
tempLeft = 0;
}
// move current slide
_this.setTranslate(tempLeft);
}
});
$(window).on('mouseup.lg.thumb', function() {
if (isMoved) {
isMoved = false;
_this.$thumbOuter.removeClass('lg-dragging');
_this.left = tempLeft;
if (Math.abs(endCoords - startCoords) < _this.core.s.swipeThreshold) {
_this.thumbClickable = true;
}
} else {
_this.thumbClickable = true;
}
if (isDraging) {
isDraging = false;
_this.$thumbOuter.removeClass('lg-grabbing').addClass('lg-grab');
}
});
};
Thumbnail.prototype.enableThumbSwipe = function() {
var _this = this;
var startCoords = 0;
var endCoords = 0;
var isMoved = false;
var tempLeft = 0;
_this.core.$outer.find('.lg-thumb').on('touchstart.lg', function(e) {
if (_this.thumbTotalWidth > _this.thumbOuterWidth) {
e.preventDefault();
startCoords = e.originalEvent.targetTouches[0].pageX;
_this.thumbClickable = false;
}
});
_this.core.$outer.find('.lg-thumb').on('touchmove.lg', function(e) {
if (_this.thumbTotalWidth > _this.thumbOuterWidth) {
e.preventDefault();
endCoords = e.originalEvent.targetTouches[0].pageX;
isMoved = true;
_this.$thumbOuter.addClass('lg-dragging');
tempLeft = _this.left;
tempLeft = tempLeft - (endCoords - startCoords);
if (tempLeft > (_this.thumbTotalWidth - _this.thumbOuterWidth)) {
tempLeft = _this.thumbTotalWidth - _this.thumbOuterWidth;
}
if (tempLeft < 0) {
tempLeft = 0;
}
// move current slide
_this.setTranslate(tempLeft);
}
});
_this.core.$outer.find('.lg-thumb').on('touchend.lg', function() {
if (_this.thumbTotalWidth > _this.thumbOuterWidth) {
if (isMoved) {
isMoved = false;
_this.$thumbOuter.removeClass('lg-dragging');
if (Math.abs(endCoords - startCoords) < _this.core.s.swipeThreshold) {
_this.thumbClickable = true;
}
_this.left = tempLeft;
} else {
_this.thumbClickable = true;
}
} else {
_this.thumbClickable = true;
}
});
};
Thumbnail.prototype.toogle = function() {
var _this = this;
if (_this.core.s.toogleThumb) {
_this.core.$outer.addClass('lg-can-toggle');
_this.$thumbOuter.append('<span class="lg-toogle-thumb lg-icon"></span>');
_this.core.$outer.find('.lg-toogle-thumb').on('click.lg', function() {
_this.core.$outer.toggleClass('lg-thumb-open');
});
}
};
Thumbnail.prototype.thumbkeyPress = function() {
var _this = this;
$(window).on('keydown.lg.thumb', function(e) {
if (e.keyCode === 38) {
e.preventDefault();
_this.core.$outer.addClass('lg-thumb-open');
} else if (e.keyCode === 40) {
e.preventDefault();
_this.core.$outer.removeClass('lg-thumb-open');
}
});
};
Thumbnail.prototype.destroy = function() {
if (this.core.s.thumbnail && this.core.$items.length > 1) {
$(window).off('resize.lg.thumb orientationchange.lg.thumb keydown.lg.thumb');
this.$thumbOuter.remove();
this.core.$outer.removeClass('lg-has-thumb');
}
};
$.fn.lightGallery.modules.Thumbnail = Thumbnail;
})(jQuery, window, document);

View file

@ -0,0 +1,261 @@
(function($, window, document, undefined) {
'use strict';
var defaults = {
videoMaxWidth: '855px',
youtubePlayerParams: false,
vimeoPlayerParams: false,
dailymotionPlayerParams: false,
videojs: false
};
var Video = function(element) {
this.core = $(element).data('lightGallery');
this.$el = $(element);
this.core.s = $.extend({}, defaults, this.core.s);
this.videoLoaded = false;
this.init();
return this;
};
Video.prototype.init = function() {
var _this = this;
// Event triggered when video url found without poster
_this.core.$el.on('hasVideo.lg.tm', function(event, index, src, html) {
_this.core.$slide.eq(index).find('.lg-video').append(_this.loadVideo(src, 'lg-object', true, index, html));
if (html) {
if (_this.core.s.videojs) {
try {
videojs(_this.core.$slide.eq(index).find('.lg-html5').get(0), {}, function() {
if (!_this.videoLoaded) {
this.play();
}
});
} catch (e) {
console.error('Make sure you have included videojs');
}
} else {
_this.core.$slide.eq(index).find('.lg-html5').get(0).play();
}
}
});
// Set max width for video
_this.core.$el.on('onAferAppendSlide.lg.tm', function(event, index) {
_this.core.$slide.eq(index).find('.lg-video-cont').css('max-width', _this.core.s.videoMaxWidth);
_this.videoLoaded = true;
});
var loadOnClick = function($el) {
// check slide has poster
if ($el.find('.lg-object').hasClass('lg-has-poster')) {
// chack already video element present
if (!$el.hasClass('lg-has-video')) {
$el.addClass('lg-video-palying lg-has-video');
var _src;
var _html;
var _loadVideo = function(_src, _html) {
$el.find('.lg-video').append(_this.loadVideo(_src, '', false, _this.core.index, _html));
if (_html) {
if (_this.core.s.videojs) {
try {
videojs(_this.core.$slide.eq(_this.core.index).find('.lg-html5').get(0), {}, function() {
this.play();
});
} catch (e) {
console.error('Make sure you have included videojs');
}
} else {
_this.core.$slide.eq(_this.core.index).find('.lg-html5').get(0).play();
}
}
};
if (_this.core.s.dynamic) {
_src = _this.core.s.dynamicEl[_this.core.index].src;
_html = _this.core.s.dynamicEl[_this.core.index].html;
_loadVideo(_src, _html);
} else {
_src = _this.core.$items.eq(_this.core.index).attr('href') || _this.core.$items.eq(_this.core.index).attr('data-src');
_html = _this.core.$items.eq(_this.core.index).attr('data-html');
_loadVideo(_src, _html);
}
var $tempImg = $el.find('.lg-object');
$el.find('.lg-video').append($tempImg);
// @todo loading icon for html5 videos also
// for showing the loading indicator while loading video
if (!$el.find('.lg-video-object').hasClass('lg-html5')) {
$el.removeClass('lg-complete');
$el.find('.lg-video-object').on('load.lg error.lg', function() {
$el.addClass('lg-complete');
});
}
} else {
var youtubePlayer = $el.find('.lg-youtube').get(0);
var vimeoPlayer = $el.find('.lg-vimeo').get(0);
var dailymotionPlayer = $el.find('.lg-dailymotion').get(0);
var html5Player = $el.find('.lg-html5').get(0);
if (youtubePlayer) {
youtubePlayer.contentWindow.postMessage('{"event":"command","func":"playVideo","args":""}', '*');
} else if (vimeoPlayer) {
try {
$f(vimeoPlayer).api('play');
} catch (e) {
console.error('Make sure you have included froogaloop2 js');
}
} else if (dailymotionPlayer) {
dailymotionPlayer.contentWindow.postMessage('play', '*');
} else if (html5Player) {
if (_this.core.s.videojs) {
try {
videojs(html5Player).play();
} catch (e) {
console.error('Make sure you have included videojs');
}
} else {
html5Player.play();
}
}
$el.addClass('lg-video-palying');
}
}
};
if (_this.core.doCss() && _this.core.$items.length > 1 && ((_this.core.s.enableSwipe && _this.core.isTouch) || (_this.core.s.enableDrag && !_this.core.isTouch))) {
_this.core.$el.on('onSlideClick.lg.tm', function() {
var $el = _this.core.$slide.eq(_this.core.index);
loadOnClick($el);
});
} else {
// For IE 9 and bellow
_this.core.$slide.on('click.lg', function() {
loadOnClick($(this));
});
}
_this.core.$el.on('onBeforeSlide.lg.tm', function(event, prevIndex) {
var $videoSlide = _this.core.$slide.eq(prevIndex);
var youtubePlayer = $videoSlide.find('.lg-youtube').get(0);
var vimeoPlayer = $videoSlide.find('.lg-vimeo').get(0);
var dailymotionPlayer = $videoSlide.find('.lg-dailymotion').get(0);
var html5Player = $videoSlide.find('.lg-html5').get(0);
if (youtubePlayer) {
youtubePlayer.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}', '*');
} else if (vimeoPlayer) {
try {
$f(vimeoPlayer).api('pause');
} catch (e) {
console.error('Make sure you have included froogaloop2 js');
}
} else if (dailymotionPlayer) {
dailymotionPlayer.contentWindow.postMessage('pause', '*');
} else if (html5Player) {
if (_this.core.s.videojs) {
try {
videojs(html5Player).pause();
} catch (e) {
console.error('Make sure you have included videojs');
}
} else {
html5Player.pause();
}
}
//$videoSlide.addClass('lg-complete');
});
_this.core.$el.on('onAfterSlide.lg.tm', function(event, prevIndex) {
_this.core.$slide.eq(prevIndex).removeClass('lg-video-palying');
});
};
Video.prototype.loadVideo = function(src, addClass, noposter, index, html) {
var video = '';
var autoplay = 1;
var a = '';
var isVideo = this.core.isVideo(src, index) || {};
// Enable autoplay for first video if poster doesn't exist
if (noposter) {
if (this.videoLoaded) {
autoplay = 0;
} else {
autoplay = 1;
}
}
if (isVideo.youtube) {
a = '?wmode=opaque&autoplay=' + autoplay + '&enablejsapi=1';
if (this.core.s.youtubePlayerParams) {
a = a + '&' + $.param(this.core.s.youtubePlayerParams);
}
video = '<iframe class="lg-video-object lg-youtube ' + addClass + '" width="560" height="315" src="//www.youtube.com/embed/' + isVideo.youtube[1] + a + '" frameborder="0" allowfullscreen></iframe>';
} else if (isVideo.vimeo) {
a = '?autoplay=' + autoplay + '&api=1';
if (this.core.s.vimeoPlayerParams) {
a = a + '&' + $.param(this.core.s.vimeoPlayerParams);
}
video = '<iframe class="lg-video-object lg-vimeo ' + addClass + '" width="560" height="315" src="http://player.vimeo.com/video/' + isVideo.vimeo[1] + a + '" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>';
} else if (isVideo.dailymotion) {
a = '?wmode=opaque&autoplay=' + autoplay + '&api=postMessage';
if (this.core.s.dailymotionPlayerParams) {
a = a + '&' + $.param(this.core.s.dailymotionPlayerParams);
}
video = '<iframe class="lg-video-object lg-dailymotion ' + addClass + '" width="560" height="315" src="//www.dailymotion.com/embed/video/' + isVideo.dailymotion[1] + a + '" frameborder="0" allowfullscreen></iframe>';
} else if (isVideo.html5) {
var fL = html.substring(0, 1);
if (fL === '.' || fL === '#') {
html = $(html).html();
}
video = html;
}
return video;
};
Video.prototype.destroy = function() {
this.videoLoaded = false;
};
$.fn.lightGallery.modules.video = Video;
})(jQuery, window, document);

View file

@ -0,0 +1,423 @@
/**
* Zoom Plugin
* @version 1.2.0
* @author Sachin N - @sachinchoolur
* @license MIT License (MIT)
*/
(function($, window, document, undefined) {
'use strict';
var defaults = {
scale: 1,
zoom: true,
enableZoomAfter: 300
};
var Zoom = function(element) {
this.core = $(element).data('lightGallery');
this.core.s = $.extend({}, defaults, this.core.s);
if (this.core.s.zoom && this.core.doCss()) {
this.init();
// Store the zoomable timeout value just to clear it while closing
this.zoomabletimeout = false;
// Set the initial value center
this.pageX = $(window).width() / 2;
this.pageY = ($(window).height() / 2) + $(window).scrollTop();
}
return this;
};
Zoom.prototype.init = function() {
var _this = this;
var zoomIcons = '<span id="lg-zoom-in" class="lg-icon"></span><span id="lg-zoom-out" class="lg-icon"></span>';
this.core.$outer.find('.lg-toolbar').append(zoomIcons);
// Add zoomable class
_this.core.$el.on('onSlideItemLoad.lg.tm.zoom', function(event, index, delay) {
// delay will be 0 except first time
var _speed = _this.core.s.enableZoomAfter + delay;
// set _speed value 0 if gallery opened from direct url and if it is first slide
if ($('body').hasClass('lg-from-hash') && delay) {
// will execute only once
_speed = 0;
} else {
// Remove lg-from-hash to enable starting animation.
$('body').removeClass('lg-from-hash');
}
_this.zoomabletimeout = setTimeout(function() {
_this.core.$slide.eq(index).addClass('lg-zoomable');
}, _speed + 30);
});
var scale = 1;
/**
* @desc Image zoom
* Translate the wrap and scale the image to get better user experience
*
* @param {String} scaleVal - Zoom decrement/increment value
*/
var zoom = function(scaleVal) {
var $image = _this.core.$outer.find('.lg-current .lg-image');
var _x;
var _y;
// Find offset manually to avoid issue after zoom
var offsetX = ($(window).width() - $image.width()) / 2;
var offsetY = (($(window).height() - $image.height()) / 2) + $(window).scrollTop();
_x = _this.pageX - offsetX;
_y = _this.pageY - offsetY;
var x = (scaleVal - 1) * (_x);
var y = (scaleVal - 1) * (_y);
$image.css('transform', 'scale3d(' + scaleVal + ', ' + scaleVal + ', 1)').attr('data-scale', scaleVal);
$image.parent().css('transform', 'translate3d(-' + x + 'px, -' + y + 'px, 0)').attr('data-x', x).attr('data-y', y);
};
var callScale = function() {
if (scale > 1) {
_this.core.$outer.addClass('lg-zoomed');
} else {
_this.resetZoom();
}
if (scale < 1) {
scale = 1;
}
zoom(scale);
};
// event triggered after appending slide content
_this.core.$el.on('onAferAppendSlide.lg.tm.zoom', function(event, index) {
// Get the current element
var $image = _this.core.$slide.eq(index).find('.lg-image');
$image.dblclick(function(event) {
var w = $image.width();
var nw = _this.core.$items.eq(index).attr('data-width') || $image[0].naturalWidth || w;
var _scale;
if (_this.core.$outer.hasClass('lg-zoomed')) {
scale = 1;
} else {
if (nw > w) {
_scale = nw / w;
scale = _scale || 2;
}
}
_this.pageX = event.pageX;
_this.pageY = event.pageY;
callScale();
setTimeout(function() {
_this.core.$outer.removeClass('lg-grabbing').addClass('lg-grab');
}, 10);
});
});
// Update zoom on resize and orientationchange
$(window).on('resize.lg.zoom scroll.lg.zoom orientationchange.lg.zoom', function() {
_this.pageX = $(window).width() / 2;
_this.pageY = ($(window).height() / 2) + $(window).scrollTop();
zoom(scale);
});
$('#lg-zoom-out').on('click.lg', function() {
if (_this.core.$outer.find('.lg-current .lg-image').length) {
scale -= _this.core.s.scale;
callScale();
}
});
$('#lg-zoom-in').on('click.lg', function() {
if (_this.core.$outer.find('.lg-current .lg-image').length) {
scale += _this.core.s.scale;
callScale();
}
});
// Reset zoom on slide change
_this.core.$el.on('onBeforeSlide.lg.tm', function() {
_this.resetZoom();
});
// Drag option after zoom
if (!_this.core.isTouch) {
_this.zoomDrag();
}
if (_this.core.isTouch) {
_this.zoomSwipe();
}
};
// Reset zoom effect
Zoom.prototype.resetZoom = function() {
this.core.$outer.removeClass('lg-zoomed');
this.core.$slide.find('.lg-img-wrap').removeAttr('style data-x data-y');
this.core.$slide.find('.lg-image').removeAttr('style data-scale');
// Reset pagx pagy values to center
this.pageX = $(window).width() / 2;
this.pageY = ($(window).height() / 2) + $(window).scrollTop();
};
Zoom.prototype.zoomSwipe = function() {
var _this = this;
var startCoords = {};
var endCoords = {};
var isMoved = false;
// Allow x direction drag
var allowX = false;
// Allow Y direction drag
var allowY = false;
_this.core.$slide.on('touchstart.lg', function(e) {
if (_this.core.$outer.hasClass('lg-zoomed')) {
var $image = _this.core.$slide.eq(_this.core.index).find('.lg-object');
allowY = $image.outerHeight() * $image.attr('data-scale') > _this.core.$outer.find('.lg').height();
allowX = $image.outerWidth() * $image.attr('data-scale') > _this.core.$outer.find('.lg').width();
if ((allowX || allowY)) {
e.preventDefault();
startCoords = {
x: e.originalEvent.targetTouches[0].pageX,
y: e.originalEvent.targetTouches[0].pageY
};
}
}
});
_this.core.$slide.on('touchmove.lg', function(e) {
if (_this.core.$outer.hasClass('lg-zoomed')) {
var _$el = _this.core.$slide.eq(_this.core.index).find('.lg-img-wrap');
var distanceX;
var distanceY;
e.preventDefault();
isMoved = true;
endCoords = e.originalEvent.targetTouches[0].pageX;
endCoords = {
x: e.originalEvent.targetTouches[0].pageX,
y: e.originalEvent.targetTouches[0].pageY
};
// reset opacity and transition duration
_this.core.$outer.addClass('lg-zoom-dragging');
if (allowY) {
distanceY = (-Math.abs(_$el.attr('data-y'))) + (endCoords.y - startCoords.y);
} else {
distanceY = -Math.abs(_$el.attr('data-y'));
}
if (allowX) {
distanceX = (-Math.abs(_$el.attr('data-x'))) + (endCoords.x - startCoords.x);
} else {
distanceX = -Math.abs(_$el.attr('data-x'));
}
_$el.css('transform', 'translate3d(' + distanceX + 'px, ' + distanceY + 'px, 0)');
}
});
_this.core.$slide.on('touchend.lg', function() {
if (_this.core.$outer.hasClass('lg-zoomed')) {
if (isMoved) {
isMoved = false;
_this.core.$outer.removeClass('lg-zoom-dragging');
_this.touchendZoom(startCoords, endCoords, allowX, allowY);
}
}
});
};
Zoom.prototype.zoomDrag = function() {
var _this = this;
var startCoords = {};
var endCoords = {};
var isDraging = false;
var isMoved = false;
// Allow x direction drag
var allowX = false;
// Allow Y direction drag
var allowY = false;
_this.core.$slide.on('mousedown.lg.zoom', function(e) {
// execute only on .lg-object
var $image = _this.core.$slide.eq(_this.core.index).find('.lg-object');
allowY = $image.outerHeight() * $image.attr('data-scale') > _this.core.$outer.find('.lg').height();
allowX = $image.outerWidth() * $image.attr('data-scale') > _this.core.$outer.find('.lg').width();
if (_this.core.$outer.hasClass('lg-zoomed')) {
if ($(e.target).hasClass('lg-object') && (allowX || allowY)) {
e.preventDefault();
startCoords = {
x: e.pageX,
y: e.pageY
};
isDraging = true;
// ** Fix for webkit cursor issue https://code.google.com/p/chromium/issues/detail?id=26723
_this.core.$outer.scrollLeft += 1;
_this.core.$outer.scrollLeft -= 1;
_this.core.$outer.removeClass('lg-grab').addClass('lg-grabbing');
}
}
});
$(window).on('mousemove.lg.zoom', function(e) {
if (isDraging) {
var _$el = _this.core.$slide.eq(_this.core.index).find('.lg-img-wrap');
var distanceX;
var distanceY;
isMoved = true;
endCoords = {
x: e.pageX,
y: e.pageY
};
// reset opacity and transition duration
_this.core.$outer.addClass('lg-zoom-dragging');
if (allowY) {
distanceY = (-Math.abs(_$el.attr('data-y'))) + (endCoords.y - startCoords.y);
} else {
distanceY = -Math.abs(_$el.attr('data-y'));
}
if (allowX) {
distanceX = (-Math.abs(_$el.attr('data-x'))) + (endCoords.x - startCoords.x);
} else {
distanceX = -Math.abs(_$el.attr('data-x'));
}
_$el.css('transform', 'translate3d(' + distanceX + 'px, ' + distanceY + 'px, 0)');
}
});
$(window).on('mouseup.lg.zoom', function(e) {
if (isDraging) {
isDraging = false;
_this.core.$outer.removeClass('lg-zoom-dragging');
// Fix for chrome mouse move on click
if (isMoved && ((startCoords.x !== endCoords.x) || (startCoords.y !== endCoords.y))) {
endCoords = {
x: e.pageX,
y: e.pageY
};
_this.touchendZoom(startCoords, endCoords, allowX, allowY);
}
isMoved = false;
}
_this.core.$outer.removeClass('lg-grabbing').addClass('lg-grab');
});
};
Zoom.prototype.touchendZoom = function(startCoords, endCoords, allowX, allowY) {
var _this = this;
var _$el = _this.core.$slide.eq(_this.core.index).find('.lg-img-wrap');
var $image = _this.core.$slide.eq(_this.core.index).find('.lg-object');
var distanceX = (-Math.abs(_$el.attr('data-x'))) + (endCoords.x - startCoords.x);
var distanceY = (-Math.abs(_$el.attr('data-y'))) + (endCoords.y - startCoords.y);
var minY = (_this.core.$outer.find('.lg').height() - $image.outerHeight()) / 2;
var maxY = Math.abs(($image.outerHeight() * Math.abs($image.attr('data-scale'))) - _this.core.$outer.find('.lg').height() + minY);
var minX = (_this.core.$outer.find('.lg').width() - $image.outerWidth()) / 2;
var maxX = Math.abs(($image.outerWidth() * Math.abs($image.attr('data-scale'))) - _this.core.$outer.find('.lg').width() + minX);
if (allowY) {
if (distanceY <= -maxY) {
distanceY = -maxY;
} else if (distanceY >= -minY) {
distanceY = -minY;
}
}
if (allowX) {
if (distanceX <= -maxX) {
distanceX = -maxX;
} else if (distanceX >= -minX) {
distanceX = -minX;
}
}
if (allowY) {
_$el.attr('data-y', Math.abs(distanceY));
} else {
distanceY = -Math.abs(_$el.attr('data-y'));
}
if (allowX) {
_$el.attr('data-x', Math.abs(distanceX));
} else {
distanceX = -Math.abs(_$el.attr('data-x'));
}
_$el.css('transform', 'translate3d(' + distanceX + 'px, ' + distanceY + 'px, 0)');
};
Zoom.prototype.destroy = function() {
var _this = this;
// Unbind all events added by lightGallery zoom plugin
_this.core.$el.off('.lg.zoom');
$(window).off('.lg.zoom');
_this.core.$slide.off('.lg.zoom');
_this.core.$el.off('.lg.tm.zoom');
_this.resetZoom();
clearTimeout(_this.zoomabletimeout);
_this.zoomabletimeout = false;
};
$.fn.lightGallery.modules.zoom = Zoom;
})(jQuery, window, document);

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,714 @@
.lg-css3 {
// Remove all transition effects
&.lg-no-trans {
.lg-prev-slide, .lg-next-slide, .lg-current {
@include transitionCustom(none 0s ease 0s !important);
}
}
&.lg-use-css3 {
.lg-item {
will-change: transform, opacity;
}
}
&.lg-use-left {
.lg-item {
will-change: left, opacity;
}
}
&.lg-zoom-in {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include scale3d(2, 2, 2);
}
&.lg-next-slide {
@include scale3d(2, 2, 2);
}
&.lg-current {
@include scale3d(1, 1, 1);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-zoom-out {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include scale3d(0, 0, 0);
}
&.lg-next-slide {
@include scale3d(0, 0, 0);
}
&.lg-current {
@include scale3d(1, 1, 1);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-zoom-out-in {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include scale3d(0, 0, 0);
}
&.lg-next-slide {
@include scale3d(2, 2, 2);
}
&.lg-current {
@include scale3d(1, 1, 1);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-zoom-in-out {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include scale3d(2, 2, 2);
}
&.lg-next-slide {
@include scale3d(0, 0, 0);
}
&.lg-current {
@include scale3d(1, 1, 1);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-soft-zoom {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include scale3d(1.2, 1.2, 1.2);
}
&.lg-next-slide {
@include scale3d(0.8, 0.8, 0.8);
}
&.lg-current {
@include scale3d(1, 1, 1);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-slide-circular {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0, 0, 0) translate3d(-100%, 0, 0));
}
&.lg-next-slide {
@include transform(scale3d(0, 0, 0) translate3d(100%, 0, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
// sec
&.lg-slide-circular-up {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0, 0, 0) translate3d(-100%, -100%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0, 0, 0) translate3d(100%, -100%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
// sec
&.lg-slide-circular-down {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0, 0, 0) translate3d(-100%, 100%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0, 0, 0) translate3d(100%, 100%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-slide-circular-vertical {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0, 0, 0) translate3d(0, -100%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0, 0, 0) translate3d(0, 100%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
// sec
&.lg-slide-circular-vertical-left {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0, 0, 0) translate3d(-100%, -100%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0, 0, 0) translate3d(-100%, 100%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
// sec
&.lg-slide-circular-vertical-down {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0, 0, 0) translate3d(100%, -100%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0, 0, 0) translate3d(100%, 100%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-slide-vertical {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include translate3d(0, -100%, 0);
}
&.lg-next-slide {
@include translate3d(0, 100%, 0);
}
&.lg-current {
@include translate3d(0, 0, 0);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-vertical-growth {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0.5, 0.5, 0.5) translate3d(0, -150%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0.5, 0.5, 0.5) translate3d(0, 150%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-only {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(60deg, 0deg));
}
&.lg-next-slide {
@include transform(skew(60deg, 0deg));
}
&.lg-current {
@include transform(skew(0deg, 0deg));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-only-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(-60deg, 0deg));
}
&.lg-next-slide {
@include transform(skew(-60deg, 0deg));
}
&.lg-current {
@include transform(skew(0deg, 0deg));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-only-y {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(0deg, 60deg));
}
&.lg-next-slide {
@include transform(skew(0deg, 60deg));
}
&.lg-current {
@include transform(skew(0deg, 0deg));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-only-y-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(0deg, -60deg));
}
&.lg-next-slide {
@include transform(skew(0deg, -60deg));
}
&.lg-current {
@include transform(skew(0deg, 0deg));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(60deg, 0deg) translate3d(-100%, 0%, 0px));
}
&.lg-next-slide {
@include transform(skew(60deg, 0deg) translate3d(100%, 0%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(-60deg, 0deg) translate3d(-100%, 0%, 0px));
}
&.lg-next-slide {
@include transform(skew(-60deg, 0deg) translate3d(100%, 0%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-cross {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(0deg, 60deg) translate3d(-100%, 0%, 0px));
}
&.lg-next-slide {
@include transform(skew(0deg, 60deg) translate3d(100%, 0%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-cross-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(0deg, -60deg) translate3d(-100%, 0%, 0px));
}
&.lg-next-slide {
@include transform(skew(0deg, -60deg) translate3d(100%, 0%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-ver {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(60deg, 0deg) translate3d(0, -100%, 0px));
}
&.lg-next-slide {
@include transform(skew(60deg, 0deg) translate3d(0, 100%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-ver-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(-60deg, 0deg) translate3d(0, -100%, 0px));
}
&.lg-next-slide {
@include transform(skew(-60deg, 0deg) translate3d(0, 100%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-ver-cross {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(0deg, 60deg) translate3d(0, -100%, 0px));
}
&.lg-next-slide {
@include transform(skew(0deg, 60deg) translate3d(0, 100%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-ver-cross-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(0deg, -60deg) translate3d(0, -100%, 0px));
}
&.lg-next-slide {
@include transform(skew(0deg, -60deg) translate3d(0, 100%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-lollipop {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include translate3d(-100%, 0, 0);
}
&.lg-next-slide {
@include transform(translate3d(0, 0, 0) scale(0.5));
}
&.lg-current {
@include translate3d(0, 0, 0);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-lollipop-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(translate3d(0, 0, 0) scale(0.5));
}
&.lg-next-slide {
@include translate3d(100%, 0, 0);
}
&.lg-current {
@include translate3d(0, 0, 0);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-rotate {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(rotate(-360deg));
}
&.lg-next-slide {
@include transform(rotate(360deg));
}
&.lg-current {
@include transform(rotate(0deg));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-rotate-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(rotate(360deg));
}
&.lg-next-slide {
@include transform(rotate(-360deg));
}
&.lg-current {
@include transform(rotate(0deg));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-tube {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(1, 0, 1) translate3d(-100%, 0, 0));
}
&.lg-next-slide {
@include transform(scale3d(1, 0, 1) translate3d(100%, 0, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
}

View file

@ -0,0 +1,36 @@
.lg-progress-bar {
background-color: $lg-progress-bar-bg;
height: $lg-progress-bar-height;
left: 0;
position: absolute;
top: 0;
width: 100%;
z-index: $zindex-progressbar;
opacity: 0;
@include transitionCustom(opacity 0.08s ease 0s);
.lg-progress {
background-color: $lg-progress-bar-active-bg;
height: $lg-progress-bar-height;
width: 0;
}
&.lg-start {
.lg-progress {
width: 100%;
}
}
.lg-show-autoplay & {
opacity: 1;
}
}
.lg-autoplay-button {
&:after {
.lg-show-autoplay & {
content: "\e01a";
}
content: "\e01d";
}
}

View file

@ -0,0 +1,46 @@
@import "lg-variables";
@import "lg-mixins";
.lg-outer.fb-comments{
.lg-img-wrap {
padding-right: 400px !important;
}
.fb-comments {
height: 100%;
overflow-y: auto;
position: absolute;
right: 0;
top: 0;
width: 420px;
z-index: 99999;
background: #fff url("../img/loading.gif") no-repeat scroll center center;
&.fb_iframe_widget {
background-image: none;
&.fb_iframe_widget_loader{
background: #fff url("../img/loading.gif") no-repeat scroll center center;
}
}
}
.lg-toolbar {
right: 420px;
width: auto;
}
.lg-actions .lg-next {
right: 420px;
}
.lg-item {
background-image: none;
&.lg-complete{
.lg-img-wrap{
background-image: none;
}
}
}
.lg-img-wrap {
background: url(../img/loading.gif) no-repeat scroll center center transparent;
}
.lg-sub-html {
padding: 0;
position: static;
}
}

View file

@ -0,0 +1,22 @@
// font icons support
@font-face {
font-family: 'lg';
src: url("../fonts/lg.eot?n1z373");
src: url("../fonts/lg.eot?#iefixn1z373") format("embedded-opentype"), url("../fonts/lg.woff?n1z373") format("woff"), url("../fonts/lg.ttf?n1z373") format("truetype"), url("../fonts/lg.svg?n1z373#lg") format("svg");
font-weight: normal;
font-style: normal;
}
.lg-icon {
font-family: 'lg';
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

View file

@ -0,0 +1,9 @@
.lg-fullscreen {
&:after {
content: "\e20c";
.lg-fullscreen-on & {
content: "\e20d";
}
}
}

View file

@ -0,0 +1,346 @@
// Vendor Prefixes
//
// All vendor mixins are deprecated as of v3.2.0 due to the introduction of
// Autoprefixer in our Gruntfile. They will be removed in v4.
// - Animations
// - Backface visibility
// - Box shadow
// - Box sizing
// - Content columns
// - Hyphens
// - Placeholder text
// - Transformations
// - Transitions
// - User Select
// - cursor grab
// Animations
@mixin animation($animation) {
-webkit-animation: $animation;
-o-animation: $animation;
animation: $animation;
}
@mixin animation-name($name) {
-webkit-animation-name: $name;
animation-name: $name;
}
@mixin animation-duration($duration) {
-webkit-animation-duration: $duration;
animation-duration: $duration;
}
@mixin animation-timing-function($timing-function) {
-webkit-animation-timing-function: $timing-function;
animation-timing-function: $timing-function;
}
@mixin animation-delay($delay) {
-webkit-animation-delay: $delay;
animation-delay: $delay;
}
@mixin animation-iteration-count($iteration-count) {
-webkit-animation-iteration-count: $iteration-count;
animation-iteration-count: $iteration-count;
}
@mixin animation-direction($direction) {
-webkit-animation-direction: $direction;
animation-direction: $direction;
}
@mixin animation-fill-mode($fill-mode) {
-webkit-animation-fill-mode: $fill-mode;
animation-fill-mode: $fill-mode;
}
@mixin keyframes($name) {
@-webkit-keyframes #{$name} {
@content;
}
@-moz-keyframes #{$name} {
@content;
}
@-ms-keyframes #{$name} {
@content;
}
@keyframes #{$name} {
@content;
}
}
// Backface visibility
// Prevent browsers from flickering when using CSS 3D transforms.
// Default value is `visible`, but can be changed to `hidden`
@mixin backface-visibility($visibility) {
-webkit-backface-visibility: $visibility;
-moz-backface-visibility: $visibility;
backface-visibility: $visibility;
}
// Drop shadows
//
// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's
// supported browsers that have box shadow capabilities now support it.
@mixin box-shadow($shadow...) {
-webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1
box-shadow: $shadow;
}
// Box sizing
@mixin box-sizing($boxmodel) {
-webkit-box-sizing: $boxmodel;
-moz-box-sizing: $boxmodel;
box-sizing: $boxmodel;
}
// CSS3 Content Columns
@mixin content-columns($column-count, $column-gap: $grid-gutter-width) {
-webkit-column-count: $column-count;
-moz-column-count: $column-count;
column-count: $column-count;
-webkit-column-gap: $column-gap;
-moz-column-gap: $column-gap;
column-gap: $column-gap;
}
// Optional hyphenation
@mixin hyphens($mode: auto) {
word-wrap: break-word;
-webkit-hyphens: $mode;
-moz-hyphens: $mode;
-ms-hyphens: $mode; // IE10+
-o-hyphens: $mode;
hyphens: $mode;
}
// Placeholder text
@mixin placeholder($color: $input-color-placeholder) {
// Firefox
&::-moz-placeholder {
color: $color;
opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526
}
&:-ms-input-placeholder {
color: $color;
} // Internet Explorer 10+
&::-webkit-input-placeholder {
color: $color;
} // Safari and Chrome
}
// Transformations
@mixin scale($ratio...) {
-webkit-transform: scale($ratio);
-ms-transform: scale($ratio); // IE9 only
-o-transform: scale($ratio);
transform: scale($ratio);
}
@mixin scaleX($ratio) {
-webkit-transform: scaleX($ratio);
-ms-transform: scaleX($ratio); // IE9 only
-o-transform: scaleX($ratio);
transform: scaleX($ratio);
}
@mixin scaleY($ratio) {
-webkit-transform: scaleY($ratio);
-ms-transform: scaleY($ratio); // IE9 only
-o-transform: scaleY($ratio);
transform: scaleY($ratio);
}
@mixin skew($x, $y) {
-webkit-transform: skewX($x) skewY($y);
-ms-transform: skewX($x) skewY($y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
-o-transform: skewX($x) skewY($y);
transform: skewX($x) skewY($y);
}
@mixin translate($x, $y) {
-webkit-transform: translate($x, $y);
-ms-transform: translate($x, $y); // IE9 only
-o-transform: translate($x, $y);
transform: translate($x, $y);
}
@mixin translate3d($x, $y, $z) {
-webkit-transform: translate3d($x, $y, $z);
transform: translate3d($x, $y, $z);
}
@mixin scale3d($x, $y, $z) {
-webkit-transform: scale3d($x, $y, $z);
transform: scale3d($x, $y, $z);
}
@mixin rotate($degrees) {
-webkit-transform: rotate($degrees);
-ms-transform: rotate($degrees); // IE9 only
-o-transform: rotate($degrees);
transform: rotate($degrees);
}
@mixin rotateX($degrees) {
-webkit-transform: rotateX($degrees);
-ms-transform: rotateX($degrees); // IE9 only
-o-transform: rotateX($degrees);
transform: rotateX($degrees);
}
@mixin rotateY($degrees) {
-webkit-transform: rotateY($degrees);
-ms-transform: rotateY($degrees); // IE9 only
-o-transform: rotateY($degrees);
transform: rotateY($degrees);
}
@mixin perspective($perspective) {
-webkit-perspective: $perspective;
-moz-perspective: $perspective;
perspective: $perspective;
}
@mixin perspective-origin($perspective) {
-webkit-perspective-origin: $perspective;
-moz-perspective-origin: $perspective;
perspective-origin: $perspective;
}
@mixin transform-origin($origin) {
-webkit-transform-origin: $origin;
-moz-transform-origin: $origin;
-ms-transform-origin: $origin; // IE9 only
transform-origin: $origin;
}
@mixin transform($transforms) {
-moz-transform: $transforms;
-o-transform: $transforms;
-ms-transform: $transforms;
-webkit-transform: $transforms;
transform: $transforms;
}
// Transitions
@mixin transition($transition...) {
-webkit-transition: $transition;
-o-transition: $transition;
transition: $transition;
}
@mixin transition-property($transition-property...) {
-webkit-transition-property: $transition-property;
transition-property: $transition-property;
}
@mixin transition-delay($transition-delay) {
-webkit-transition-delay: $transition-delay;
transition-delay: $transition-delay;
}
@mixin transition-duration($transition-duration...) {
-webkit-transition-duration: $transition-duration;
transition-duration: $transition-duration;
}
@mixin transition-timing-function($timing-function) {
-webkit-transition-timing-function: $timing-function;
transition-timing-function: $timing-function;
}
@mixin transition-transform($transition...) {
-webkit-transition: -webkit-transform $transition;
-moz-transition: -moz-transform $transition;
-o-transition: -o-transform $transition;
transition: transform $transition;
}
// transition custom
@function prefix($property, $prefixes: webkit moz o ms) {
$vendor-prefixed-properties: transform background-clip background-size;
$result: ();
@each $prefix in $prefixes {
@if index($vendor-prefixed-properties, $property) {
$property: -#{$prefix}-#{$property};
}
$result: append($result, $property);
}
@return $result;
}
@function trans-prefix($transition, $prefix: moz) {
$prefixed: ();
@each $trans in $transition {
$prop-name: nth($trans, 1);
$vendor-prop-name: prefix($prop-name, $prefix);
$prop-vals: nth($trans, 2);
$prefixed: append($prefixed, $vendor-prop-name $prop-vals, comma);
}
@return $prefixed;
}
@mixin transitionCustom($values...) {
$transitions: ();
@each $declaration in $values {
$prop: nth($declaration, 1);
$prop-opts: ();
$length: length($declaration);
@for $i from 2 through $length {
$prop-opts: append($prop-opts, nth($declaration, $i));
}
$trans: $prop, $prop-opts;
$transitions: append($transitions, $trans, comma);
}
-webkit-transition: trans-prefix($transitions, webkit);
-moz-transition: trans-prefix($transitions, moz);
-o-transition: trans-prefix($transitions, o);
transition: $values;
}
// User select
// For selecting text on the page
@mixin user-select($select) {
-webkit-user-select: $select;
-moz-user-select: $select;
-ms-user-select: $select; // IE10+
user-select: $select;
}
// mouse grab
@mixin grab-cursor {
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: -o-grab;
cursor: -ms-grab;
cursor: grab;
}
@mixin grabbing-cursor {
cursor: move;
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: -o-grabbing;
cursor: -ms-grabbing;
cursor: grabbing;
}

View file

@ -0,0 +1,89 @@
.lg-outer {
.lg-pager-outer {
bottom: 60px;
left: 0;
position: absolute;
right: 0;
text-align: center;
z-index: $zindex-pager;
height: 10px;
&.lg-pager-hover {
.lg-pager-cont {
overflow: visible;
}
}
}
.lg-pager-cont {
cursor: pointer;
display: inline-block;
overflow: hidden;
position: relative;
vertical-align: top;
margin: 0 5px;
&:hover {
.lg-pager-thumb-cont {
opacity: 1;
@include translate3d(0, 0, 0);
}
}
&.lg-pager-active {
.lg-pager {
box-shadow: 0 0 0 2px white inset;
}
}
}
.lg-pager-thumb-cont {
background-color: #fff;
color: #FFF;
bottom: 100%;
height: 83px;
left: 0;
margin-bottom: 20px;
margin-left: -60px;
opacity: 0;
padding: 5px;
position: absolute;
width: 120px;
border-radius: 3px;
@include transitionCustom(opacity 0.15s ease 0s, transform 0.15s ease 0s);
@include translate3d(0, 5px, 0);
img {
width: 100%;
height: 100%;
}
}
.lg-pager {
background-color: rgba(255, 255, 255, 0.5);
border-radius: 50%;
box-shadow: 0 0 0 8px rgba(255, 255, 255, 0.7) inset;
display: block;
height: 12px;
@include transition(box-shadow 0.3s ease 0s);
width: 12px;
&:hover, &:focus {
box-shadow: 0 0 0 8px white inset;
}
}
.lg-caret {
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 10px dashed;
bottom: -10px;
display: inline-block;
height: 0;
left: 50%;
margin-left: -5px;
position: absolute;
vertical-align: middle;
width: 0;
}
}

View file

@ -0,0 +1,205 @@
// default theme
.lg-actions {
.lg-next, .lg-prev {
background-color: $lg-next-prev-bg;
border-radius: $lg-border-radius-base;
color: $lg-next-prev-color;
cursor: pointer;
display: block;
font-size: 22px;
margin-top: -10px;
padding: 8px 10px 9px;
position: absolute;
top: 50%;
z-index: $zindex-controls;
&.disabled {
pointer-events: none;
opacity: 0.5;
}
&:hover {
color: $lg-next-prev-hover-color;
}
}
.lg-next {
right: 20px;
&:before {
content: "\e095";
}
}
.lg-prev {
left: 20px;
&:after {
content: "\e094";
}
}
}
@include keyframes(lg-right-end) {
0% {
left: 0;
}
50% {
left: -30px;
}
100% {
left: 0;
}
}
@include keyframes(lg-left-end) {
0% {
left: 0;
}
50% {
left: 30px;
}
100% {
left: 0;
}
}
.lg-outer {
&.lg-right-end {
.lg-object {
@include animation(lg-right-end 0.3s);
position: relative;
}
}
&.lg-left-end {
.lg-object {
@include animation(lg-left-end 0.3s);
position: relative;
}
}
}
// lg toolbar
.lg-toolbar {
z-index: $zindex-toolbar;
left: 0;
position: absolute;
top: 0;
width: 100%;
background-color: $lg-toolbar-bg;
.lg-icon {
color: $lg-toolbar-icon-color;
cursor: pointer;
float: right;
font-size: 24px;
height: 47px;
line-height: 27px;
padding: 10px 0;
text-align: center;
width: 50px;
text-decoration: none !important;
outline: medium none;
&:hover {
color: $lg-toolbar-icon-hover-color;
}
}
.lg-close {
&:after {
content: "\e070";
}
}
.lg-download {
&:after {
content: "\e0f2";
}
}
}
// lightGallery title
.lg-sub-html {
background-color: $lg-sub-html-bg;
bottom: 0;
color: $lg-sub-html-color;
font-size: 16px;
left: 0;
padding: 10px 40px;
position: fixed;
right: 0;
text-align: center;
z-index: $zindex-subhtml;
h4 {
margin: 0;
font-size: 13px;
font-weight: bold;
}
p {
font-size: 12px;
margin: 5px 0 0;
}
}
// lg image counter
#lg-counter {
color: $lg-icon-color;
display: inline-block;
font-size: $lg-counter-font-size;
padding-left: 20px;
padding-top: 12px;
vertical-align: middle;
}
// for idle state
.lg-toolbar, .lg-prev, .lg-next {
opacity: 1;
@include transitionCustom(transform 0.35s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.35s cubic-bezier(0, 0, 0.25, 1) 0s);
}
.lg-hide-items {
.lg-prev {
opacity: 0;
@include translate3d(-10px, 0, 0);
}
.lg-next {
opacity: 0;
@include translate3d(10px, 0, 0);
}
.lg-toolbar {
opacity: 0;
@include translate3d(0, -10px, 0);
}
}
// Starting effect
body:not(.lg-from-hash){
.lg-outer {
&.lg-start-zoom{
.lg-object{
@include scale3d(0.5, 0.5, 0.5);
opacity: 0;
@include transitionCustom(transform 250ms ease 0s, opacity 250ms !important);
@include transform-origin(50% 50%);
}
.lg-item.lg-complete{
.lg-object{
@include scale3d(1, 1, 1);
opacity: 1;
}
}
}
}
}

View file

@ -0,0 +1,110 @@
.lg-outer {
.lg-thumb-outer {
background-color: $lg-thumb-bg;
bottom: 0;
position: absolute;
width: 100%;
z-index: $zindex-thumbnail;
max-height: 350px;
@include translate3d(0, 100%, 0);
@include transitionCustom(transform 0.25s cubic-bezier(0, 0, 0.25, 1) 0s);
&.lg-grab {
.lg-thumb-item {
@include grab-cursor;
}
}
&.lg-grabbing {
.lg-thumb-item {
@include grabbing-cursor;
}
}
&.lg-dragging {
.lg-thumb {
@include transition-duration(0s !important);
}
}
}
&.lg-thumb-open{
.lg-thumb-outer {
@include translate3d(0, 0%, 0);
}
}
.lg-thumb {
padding: 10px 0;
height: 100%;
margin-bottom: -5px;
}
.lg-thumb-item {
border-radius: 5px;
cursor: pointer;
float: left;
overflow: hidden;
height: 100%;
border: 2px solid #FFF;
border-radius: 4px;
margin-bottom: 5px;
@media (min-width: 1025px) {
@include transition(border-color 0.25s ease);
}
&.active, &:hover {
border-color: $lg-theme-highlight;
}
img {
width: 100%;
height: 100%;
}
}
&.lg-has-thumb {
.lg-item {
padding-bottom: 120px;
}
}
&.lg-can-toggle {
.lg-item {
padding-bottom: 0;
}
}
&.lg-pull-caption-up{
.lg-sub-html {
@include transition(bottom 0.25s ease);
}
&.lg-thumb-open{
.lg-sub-html {
bottom: 100px;
}
}
}
.lg-toogle-thumb {
background-color: $lg-thumb-toggle-bg;
border-radius: $lg-border-radius-base $lg-border-radius-base 0 0;
color: $lg-thumb-toggle-color;
cursor: pointer;
font-size: 24px;
height: 39px;
line-height: 27px;
padding: 5px 0;
position: absolute;
right: 20px;
text-align: center;
top: -39px;
width: 50px;
&:after {
content: "\e1ff";
}
&:hover {
color: $lg-thumb-toggle-hover-color;
}
}
}

View file

@ -0,0 +1,766 @@
@import "lg-variables";
@import "lg-mixins";
.lg-css3 {
&.lg-zoom-in {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include scale3d(1.3, 1.3, 1.3);
}
&.lg-next-slide {
@include scale3d(1.3, 1.3, 1.3);
}
&.lg-current {
@include scale3d(1, 1, 1);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-zoom-in-big {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include scale3d(2, 2, 2);
}
&.lg-next-slide {
@include scale3d(2, 2, 2);
}
&.lg-current {
@include scale3d(1, 1, 1);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-zoom-out {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include scale3d(0.7, 0.7, 0.7);
}
&.lg-next-slide {
@include scale3d(0.7, 0.7, 0.7);
}
&.lg-current {
@include scale3d(1, 1, 1);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-zoom-out-big {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include scale3d(0, 0, 0);
}
&.lg-next-slide {
@include scale3d(0, 0, 0);
}
&.lg-current {
@include scale3d(1, 1, 1);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-zoom-out-in {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include scale3d(0, 0, 0);
}
&.lg-next-slide {
@include scale3d(2, 2, 2);
}
&.lg-current {
@include scale3d(1, 1, 1);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-zoom-in-out {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include scale3d(2, 2, 2);
}
&.lg-next-slide {
@include scale3d(0, 0, 0);
}
&.lg-current {
@include scale3d(1, 1, 1);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-soft-zoom {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include scale3d(1.1, 1.1, 1.1);
}
&.lg-next-slide {
@include scale3d(0.9, 0.9, 0.9);
}
&.lg-current {
@include scale3d(1, 1, 1);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-scale-up {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0.8, 0.8, 0.8) translate3d(0%, 10%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0.8, 0.8, 0.8) translate3d(0%, 10%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-slide-circular {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0, 0, 0) translate3d(-100%, 0, 0));
}
&.lg-next-slide {
@include transform(scale3d(0, 0, 0) translate3d(100%, 0, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
// sec
&.lg-slide-circular-up {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0, 0, 0) translate3d(-100%, -100%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0, 0, 0) translate3d(100%, -100%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
// sec
&.lg-slide-circular-down {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0, 0, 0) translate3d(-100%, 100%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0, 0, 0) translate3d(100%, 100%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-slide-circular-vertical {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0, 0, 0) translate3d(0, -100%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0, 0, 0) translate3d(0, 100%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
// sec
&.lg-slide-circular-vertical-left {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0, 0, 0) translate3d(-100%, -100%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0, 0, 0) translate3d(-100%, 100%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
// sec
&.lg-slide-circular-vertical-down {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0, 0, 0) translate3d(100%, -100%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0, 0, 0) translate3d(100%, 100%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 1s ease 0s);
}
}
}
&.lg-slide-vertical {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include translate3d(0, -100%, 0);
}
&.lg-next-slide {
@include translate3d(0, 100%, 0);
}
&.lg-current {
@include translate3d(0, 0, 0);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-vertical-growth {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(0.5, 0.5, 0.5) translate3d(0, -150%, 0));
}
&.lg-next-slide {
@include transform(scale3d(0.5, 0.5, 0.5) translate3d(0, 150%, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-only {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(10deg, 0deg));
}
&.lg-next-slide {
@include transform(skew(10deg, 0deg));
}
&.lg-current {
@include transform(skew(0deg, 0deg));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-only-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(-10deg, 0deg));
}
&.lg-next-slide {
@include transform(skew(-10deg, 0deg));
}
&.lg-current {
@include transform(skew(0deg, 0deg));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-only-y {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(0deg, 10deg));
}
&.lg-next-slide {
@include transform(skew(0deg, 10deg));
}
&.lg-current {
@include transform(skew(0deg, 0deg));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-only-y-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(0deg, -10deg));
}
&.lg-next-slide {
@include transform(skew(0deg, -10deg));
}
&.lg-current {
@include transform(skew(0deg, 0deg));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(20deg, 0deg) translate3d(-100%, 0%, 0px));
}
&.lg-next-slide {
@include transform(skew(20deg, 0deg) translate3d(100%, 0%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(-20deg, 0deg) translate3d(-100%, 0%, 0px));
}
&.lg-next-slide {
@include transform(skew(-20deg, 0deg) translate3d(100%, 0%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-cross {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(0deg, 60deg) translate3d(-100%, 0%, 0px));
}
&.lg-next-slide {
@include transform(skew(0deg, 60deg) translate3d(100%, 0%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-cross-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(0deg, -60deg) translate3d(-100%, 0%, 0px));
}
&.lg-next-slide {
@include transform(skew(0deg, -60deg) translate3d(100%, 0%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-ver {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(60deg, 0deg) translate3d(0, -100%, 0px));
}
&.lg-next-slide {
@include transform(skew(60deg, 0deg) translate3d(0, 100%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-ver-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(-60deg, 0deg) translate3d(0, -100%, 0px));
}
&.lg-next-slide {
@include transform(skew(-60deg, 0deg) translate3d(0, 100%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-ver-cross {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(0deg, 20deg) translate3d(0, -100%, 0px));
}
&.lg-next-slide {
@include transform(skew(0deg, 20deg) translate3d(0, 100%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-slide-skew-ver-cross-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(skew(0deg, -20deg) translate3d(0, -100%, 0px));
}
&.lg-next-slide {
@include transform(skew(0deg, -20deg) translate3d(0, 100%, 0px));
}
&.lg-current {
@include transform(skew(0deg, 0deg) translate3d(0%, 0%, 0px));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-lollipop {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include translate3d(-100%, 0, 0);
}
&.lg-next-slide {
@include transform(translate3d(0, 0, 0) scale(0.5));
}
&.lg-current {
@include translate3d(0, 0, 0);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-lollipop-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(translate3d(0, 0, 0) scale(0.5));
}
&.lg-next-slide {
@include translate3d(100%, 0, 0);
}
&.lg-current {
@include translate3d(0, 0, 0);
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-rotate {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(rotate(-360deg));
}
&.lg-next-slide {
@include transform(rotate(360deg));
}
&.lg-current {
@include transform(rotate(0deg));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-rotate-rev {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(rotate(360deg));
}
&.lg-next-slide {
@include transform(rotate(-360deg));
}
&.lg-current {
@include transform(rotate(0deg));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-tube {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include transform(scale3d(1, 0, 1) translate3d(-100%, 0, 0));
}
&.lg-next-slide {
@include transform(scale3d(1, 0, 1) translate3d(100%, 0, 0));
}
&.lg-current {
@include transform(scale3d(1, 1, 1) translate3d(0, 0, 0));
opacity: 1;
}
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
}

View file

@ -0,0 +1,53 @@
$backdrop-opacity: 1;
$lg-toolbar-bg: rgba(0, 0, 0, 0.45);
$lg-border-radius-base: 2px;
$lg-theme-highlight: rgb(169, 7, 7);
$lg-theme: #0D0A0A;
// basic icon colours
$lg-icon-bg: rgba(0, 0, 0, 0.45);
$lg-icon-color: #999;
$lg-icon-hover-color: #FFF;
// counter
$lg-counter-color: #e6e6e6;
$lg-counter-font-size: 16px;
// Next prev icons
$lg-next-prev-bg: $lg-icon-bg;
$lg-next-prev-color: $lg-icon-color;
$lg-next-prev-hover-color: $lg-icon-hover-color;
// toolbar icons
$lg-toolbar-icon-color: $lg-icon-color;
$lg-toolbar-icon-hover-color: $lg-icon-hover-color;
// autoplay progress bar
$lg-progress-bar-bg: #333;
$lg-progress-bar-active-bg: $lg-theme-highlight;
$lg-progress-bar-height: 5px;
// Zoom plugin
$zoom-transition-duration: 0.3s;
// Sub html - titile
$lg-sub-html-bg: rgba(0, 0, 0, 0.45);
$lg-sub-html-color: #EEE;
// thumbnail toggle button
$lg-thumb-toggle-bg: #0D0A0A;
$lg-thumb-toggle-color: $lg-icon-color;
$lg-thumb-toggle-hover-color: $lg-icon-hover-color;
$lg-thumb-bg: #0D0A0A;
// z-index
$zindex-outer: 1050;
$zindex-progressbar: 1080;
$zindex-controls: 1080;
$zindex-toolbar: 1080;
$zindex-subhtml: 1080;
$zindex-thumbnail: 1080;
$zindex-pager: 1080;
$zindex-playbutton: 1080;
$zindex-item: 1060;
$zindex-backdrop: 1040;

View file

@ -0,0 +1,103 @@
.lg-outer {
.lg-video-cont {
display: inline-block;
vertical-align: middle;
max-width: 1140px;
max-height: 100%;
width: 100%;
padding: 0 5px;
}
.lg-video {
width: 100%;
height: 0;
padding-bottom: 56.25%;
overflow: hidden;
position: relative;
.lg-object {
display: inline-block;
position: absolute;
top: 0;
left: 0;
width: 100% !important;
height: 100% !important;
}
.lg-video-play {
width: 84px;
height: 59px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -42px;
margin-top: -30px;
z-index: $zindex-playbutton;
cursor: pointer;
}
}
.lg-has-vimeo{
.lg-video-play{
background: url("../img/vimeo-play.png") no-repeat scroll 0 0 transparent;
}
&:hover{
.lg-video-play{
background: url("../img/vimeo-play.png") no-repeat scroll 0 -58px transparent;
}
}
}
.lg-has-html5{
.lg-video-play{
background: transparent url("../img/video-play.png") no-repeat scroll 0 0;
height: 64px;
margin-left: -32px;
margin-top: -32px;
width: 64px;
opacity: 0.8;
}
&:hover{
.lg-video-play{
opacity: 1
}
}
}
.lg-has-youtube{
.lg-video-play{
background: url("../img/youtube-play.png") no-repeat scroll 0 0 transparent;
}
&:hover{
.lg-video-play{
background: url("../img/youtube-play.png") no-repeat scroll 0 -60px transparent;
}
}
}
.lg-video-object {
width: 100% !important;
height: 100% !important;
position: absolute;
top: 0;
left: 0;
}
.lg-has-video {
.lg-video-object {
visibility: hidden;
}
&.lg-video-palying {
.lg-object, .lg-video-play {
display: none;
}
.lg-video-object {
visibility: visible;
}
}
}
}

View file

@ -0,0 +1,47 @@
.lg-outer {
// reset transition duration
&.lg-css3.lg-zoom-dragging {
.lg-item.lg-complete.lg-zoomable {
.lg-img-wrap, .lg-image {
@include transition-duration(0s);
}
}
}
.lg-item.lg-complete.lg-zoomable{
.lg-img-wrap {
@include transitionCustom(transform $zoom-transition-duration ease 0s);
@include translate3d(0, 0, 0);
}
.lg-image {
// Translate required for zoom
@include scale3d(1, 1, 1);
@include transitionCustom(transform $zoom-transition-duration ease 0s, opacity 0.15s !important);
@include transform-origin(0 0);
}
}
}
// zoom buttons
#lg-zoom-in {
&:after {
content: "\e311";
}
}
#lg-zoom-out {
opacity: 0.5;
pointer-events: none;
&:after {
content: "\e312";
}
.lg-zoomed & {
opacity: 1;
pointer-events: auto;
}
}

View file

@ -0,0 +1,283 @@
// Core variables and mixins
@import "lg-variables";
@import "lg-mixins";
@import "lg-fonts";
@import "lg-theme-default";
@import "lg-thumbnail";
@import "lg-video";
@import "lg-autoplay";
@import "lg-zoom";
@import "lg-pager";
@import "lg-fullscreen";
// Clearfix
.group {
*zoom: 1;
}
.group:before, .group:after {
display: table;
content: "";
line-height: 0;
}
.group:after {
clear: both;
}
// lightgallery core
.lg-outer {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
z-index: $zindex-outer;
opacity: 0;
// For start/end transition
@include transition(opacity 0.15s ease 0s);
* {
@include box-sizing(border-box);
}
&.lg-visible {
opacity: 1;
}
// Set transition speed and timing function
&.lg-css3 {
.lg-item {
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transition-duration(inherit !important);
@include transition-timing-function(inherit !important);
}
}
}
// Remove transition while dragging
&.lg-css3.lg-dragging {
.lg-item {
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transition-duration(0s !important);
opacity: 1;
}
}
}
// Set cursor grab while dragging
&.lg-grab {
img.lg-object {
@include grab-cursor;
}
}
&.lg-grabbing {
img.lg-object {
@include grabbing-cursor;
}
}
.lg {
height: 100%;
width: 100%;
position: relative;
overflow: hidden;
margin-left: auto;
margin-right: auto;
max-width: 100%;
max-height: 100%;
}
.lg-inner {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
white-space: nowrap;
}
.lg-item {
background: url(../img/loading.gif) no-repeat scroll center center transparent;
display: none !important;
}
&.lg-css3{
.lg-prev-slide, .lg-current, .lg-next-slide{
display: inline-block !important;
}
}
&.lg-css{
.lg-current{
display: inline-block !important;
}
}
.lg-item, .lg-img-wrap {
display: inline-block;
text-align: center;
position: absolute;
width: 100%;
height: 100%;
&:before {
content: "";
display: inline-block;
height: 50%;
width: 1px;
margin-right: -1px;
}
}
.lg-img-wrap {
top: 0;
bottom: 0;
left: 0;
right: 0;
padding: 0 5px;
}
.lg-item {
&.lg-complete {
background-image: none;
}
&.lg-current {
z-index: $zindex-item;
}
}
.lg-image {
display: inline-block;
vertical-align: middle;
max-width: 100%;
max-height: 100%;
width: auto !important;
height: auto !important;
}
&.lg-show-after-load {
.lg-item {
.lg-object, .lg-video-play {
opacity: 0;
@include transition(opacity 0.15s ease 0s);
}
&.lg-complete {
.lg-object, .lg-video-play {
opacity: 1;
}
}
}
}
// Hide title div if empty
.lg-empty-html {
display: none;
}
}
.lg-backdrop{
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: $zindex-backdrop;
background-color: #000;
opacity: 0;
@include transition(opacity 0.15s ease 0s);
&.in{
opacity: $backdrop-opacity;
}
}
// Default slide animations. Should be placed at the bottom of the animation css
.lg-css3 {
// Remove all transition effects
&.lg-no-trans {
.lg-prev-slide, .lg-next-slide, .lg-current {
@include transitionCustom(none 0s ease 0s !important);
}
}
&.lg-use-css3 {
.lg-item {
will-change: transform, opacity;
}
}
&.lg-use-left {
.lg-item {
will-change: left, opacity;
}
}
// Fade mode
&.lg-fade {
.lg-item {
opacity: 0;
&.lg-current {
opacity: 1;
}
// transition timing property and duration will be over written from javascript
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(opacity 0.1s ease 0s);
}
}
}
&.lg-slide {
&.lg-use-css3 {
.lg-item {
opacity: 0;
&.lg-prev-slide {
@include translate3d(-100%, 0, 0);
}
&.lg-next-slide {
@include translate3d(100%, 0, 0);
}
&.lg-current {
@include translate3d(0, 0, 0);
opacity: 1;
}
// transition timing property and duration will be over written from javascript
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(transform 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
&.lg-use-left {
.lg-item {
opacity: 0;
position: absolute;
left: 0;
&.lg-prev-slide {
left: -100%;
}
&.lg-next-slide {
left: 100%;
}
&.lg-current {
left: 0;
opacity: 1;
}
// transition timing property and duration will be over written from javascript
&.lg-prev-slide, &.lg-next-slide, &.lg-current {
@include transitionCustom(left 1s cubic-bezier(0, 0, 0.25, 1) 0s, opacity 0.1s ease 0s);
}
}
}
}
}

View file

@ -0,0 +1,394 @@
/*! lightslider - v1.1.3 - 2015-04-14
* https://github.com/sachinchoolur/lightslider
* Copyright (c) 2015 Sachin N; Licensed MIT */
/** /!!! core css Should not edit !!!/**/
.lSSlideOuter {
overflow: hidden;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none
}
.lightSlider:before, .lightSlider:after {
content: " ";
display: table;
}
.lightSlider {
overflow: hidden;
margin: 0;
}
.lSSlideWrapper {
max-width: 100%;
overflow: hidden;
position: relative;
}
.lSSlideWrapper > .lightSlider:after {
clear: both;
}
.lSSlideWrapper .lSSlide {
-webkit-transform: translate(0px, 0px);
-ms-transform: translate(0px, 0px);
transform: translate(0px, 0px);
-webkit-transition: all 1s;
-webkit-transition-property: -webkit-transform,height;
-moz-transition-property: -moz-transform,height;
transition-property: transform,height;
-webkit-transition-duration: inherit !important;
transition-duration: inherit !important;
-webkit-transition-timing-function: inherit !important;
transition-timing-function: inherit !important;
cursor: pointer;
}
.lSSlideWrapper .lSFade {
position: relative;
}
.lSSlideWrapper .lSFade > * {
position: absolute !important;
top: 0;
left: 0;
z-index: 9;
margin-right: 0;
width: 100%;
}
.lSSlideWrapper.usingCss .lSFade > * {
opacity: 0;
-webkit-transition-delay: 0s;
transition-delay: 0s;
-webkit-transition-duration: inherit !important;
transition-duration: inherit !important;
-webkit-transition-property: opacity;
transition-property: opacity;
-webkit-transition-timing-function: inherit !important;
transition-timing-function: inherit !important;
}
.lSSlideWrapper .lSFade > *.active {
z-index: 10;
}
.lSSlideWrapper.usingCss .lSFade > *.active {
opacity: 1;
}
/** /!!! End of core css Should not edit !!!/**/
/* Pager */
.lSSlideOuter .lSPager.lSpg {
margin: 10px 0 0;
padding: 0;
text-align: center;
}
.lSSlideOuter .lSPager.lSpg > li {
cursor: pointer;
display: inline-block;
padding: 0 5px;
margin-bottom: 2px;
}
.lSSlideOuter .lSPager.lSpg > li a {
background-color: #222222;
border-radius: 30px;
display: inline-block;
height: 8px;
overflow: hidden;
text-indent: -999em;
width: 8px;
position: relative;
z-index: 99;
-webkit-transition: all 0.5s linear 0s;
transition: all 0.5s linear 0s;
}
.lSSlideOuter .lSPager.lSpg > li:hover a, .lSSlideOuter .lSPager.lSpg > li.active a {
background-color: #428bca;
}
.lSSlideOuter .media {
opacity: 0.8;
}
.lSSlideOuter .media.active {
opacity: 1;
}
/* End of pager */
/** Gallery */
.lSSlideOuter .lSPager.lSGallery {
list-style: none outside none;
padding-left: 0;
margin: 0;
overflow: hidden;
transform: translate3d(0px, 0px, 0px);
-moz-transform: translate3d(0px, 0px, 0px);
-ms-transform: translate3d(0px, 0px, 0px);
-webkit-transform: translate3d(0px, 0px, 0px);
-o-transform: translate3d(0px, 0px, 0px);
-webkit-transition-property: -webkit-transform;
-moz-transition-property: -moz-transform;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.lSSlideOuter .lSPager.lSGallery li {
overflow: hidden;
-webkit-transition: border-radius 0.12s linear 0s 0.35s linear 0s;
transition: border-radius 0.12s linear 0s 0.35s linear 0s;
}
.lSSlideOuter .lSPager.lSGallery li.active, .lSSlideOuter .lSPager.lSGallery li:hover {
border-radius: 5px;
}
.lSSlideOuter .lSPager.lSGallery img {
display: block;
height: auto;
max-width: 100%;
}
.lSSlideOuter .lSPager.lSGallery:before, .lSSlideOuter .lSPager.lSGallery:after {
content: " ";
display: table;
}
.lSSlideOuter .lSPager.lSGallery:after {
clear: both;
}
/* End of Gallery*/
/* slider actions */
.lSAction > a {
width: 32px;
display: block;
top: 25px;
height: 32px;
background-image: url('../img/controls.png');
cursor: pointer;
position: absolute;
z-index: 99;
margin-top: -16px;
opacity: 0.5;
-webkit-transition: opacity 0.35s linear 0s;
transition: opacity 0.35s linear 0s;
}
.lSAction > a:hover {
opacity: 1;
}
.lSAction > .lSPrev {
background-position: 0 0;
left: 10px;
}
.lSAction > .lSNext {
background-position: -32px 0;
right: 10px;
}
.lSAction > a.disabled {
pointer-events: none;
}
.cS-hidden {
height: 1px;
opacity: 0;
filter: alpha(opacity=0);
overflow: hidden;
}
/* vertical */
.lSSlideOuter.vertical {
position: relative;
}
.lSSlideOuter.vertical.noPager {
padding-right: 0px !important;
}
.lSSlideOuter.vertical .lSGallery {
position: absolute !important;
right: 0;
top: 0;
}
.lSSlideOuter.vertical .lightSlider > * {
width: 100% !important;
max-width: none !important;
}
/* vertical controlls */
.lSSlideOuter.vertical .lSAction > a {
left: 50%;
margin-left: -14px;
margin-top: 0;
}
.lSSlideOuter.vertical .lSAction > .lSNext {
background-position: 31px -31px;
bottom: 10px;
top: auto;
}
.lSSlideOuter.vertical .lSAction > .lSPrev {
background-position: 0 -31px;
bottom: auto;
top: 10px;
}
/* vertical */
/* Rtl */
.lSSlideOuter.lSrtl {
direction: rtl;
}
.lSSlideOuter .lightSlider, .lSSlideOuter .lSPager {
padding-left: 0;
list-style: none outside none;
}
.lSSlideOuter.lSrtl .lightSlider, .lSSlideOuter.lSrtl .lSPager {
padding-right: 0;
}
.lSSlideOuter .lightSlider > *, .lSSlideOuter .lSGallery li {
float: left;
}
.lSSlideOuter.lSrtl .lightSlider > *, .lSSlideOuter.lSrtl .lSGallery li {
float: right !important;
}
/* Rtl */
@-webkit-keyframes rightEnd {
0% {
left: 0;
}
50% {
left: -15px;
}
100% {
left: 0;
}
}
@keyframes rightEnd {
0% {
left: 0;
}
50% {
left: -15px;
}
100% {
left: 0;
}
}
@-webkit-keyframes topEnd {
0% {
top: 0;
}
50% {
top: -15px;
}
100% {
top: 0;
}
}
@keyframes topEnd {
0% {
top: 0;
}
50% {
top: -15px;
}
100% {
top: 0;
}
}
@-webkit-keyframes leftEnd {
0% {
left: 0;
}
50% {
left: 15px;
}
100% {
left: 0;
}
}
@keyframes leftEnd {
0% {
left: 0;
}
50% {
left: 15px;
}
100% {
left: 0;
}
}
@-webkit-keyframes bottomEnd {
0% {
bottom: 0;
}
50% {
bottom: -15px;
}
100% {
bottom: 0;
}
}
@keyframes bottomEnd {
0% {
bottom: 0;
}
50% {
bottom: -15px;
}
100% {
bottom: 0;
}
}
.lSSlideOuter .rightEnd {
-webkit-animation: rightEnd 0.3s;
animation: rightEnd 0.3s;
position: relative;
}
.lSSlideOuter .leftEnd {
-webkit-animation: leftEnd 0.3s;
animation: leftEnd 0.3s;
position: relative;
}
.lSSlideOuter.vertical .rightEnd {
-webkit-animation: topEnd 0.3s;
animation: topEnd 0.3s;
position: relative;
}
.lSSlideOuter.vertical .leftEnd {
-webkit-animation: bottomEnd 0.3s;
animation: bottomEnd 0.3s;
position: relative;
}
.lSSlideOuter.lSrtl .rightEnd {
-webkit-animation: leftEnd 0.3s;
animation: leftEnd 0.3s;
position: relative;
}
.lSSlideOuter.lSrtl .leftEnd {
-webkit-animation: rightEnd 0.3s;
animation: rightEnd 0.3s;
position: relative;
}
/*/ GRab lscursor */
.lightSlider.lsGrab > * {
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: -o-grab;
cursor: -ms-grab;
cursor: grab;
}
.lightSlider.lsGrabbing > * {
cursor: move;
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: -o-grabbing;
cursor: -ms-grabbing;
cursor: grabbing;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,189 @@
/* Resume styles */
body {
font-size: 12px;
width: 175mm;
margin-top: 30px;
margin-left:auto;
margin-right:auto;
}
hr {
margin-top: 5px;
margin-bottom: 10px;
border: 1px solid #000;
}
a {
color: black;
text-decoration: none; /* no underline */
}
h1 {
font-weight: bold;
}
h4 {
font-weight: bold;
}
.name {
margin-top: 0px;
margin-bottom: 0px;
font-size: 24px;
}
.title {
float: left;
margin-top: 0px;
margin-bottom: 0px;
font-weight: 200;
font-size: 18px;
}
.contact-info ul {
list-style-type: none;
}
.section-title {
font-size: 14px;
margin-left: -45px;
margin-top: 0px;
}
.section-subtitle {
font-size: 14px;
margin-left: -30px;
}
.skill {
font-weight: bold;
}
.skills-ul {
list-style-type: disc;
list-style-position: inside;
padding-left: 0;
margin-left: 0;
}
.skills-ul li {
float: left;
margin-right: 8px;
}
.company, .school {
font-size: 14px;
}
.section {
margin-left: 15px;
margin-bottom: 0px;
}
.entry {
margin-left: 10px;
}
.subsection {
margin-left: 1px;
}
.company-position {
padding-left: 30px
}
.company-summary {
font-size: 13px;
margin-bottom: -5px;
margin-bottom: 0px;
}
.company-description {
font-size: 13px;
margin-bottom: -3px;
padding-left: 30px;
text-indent: -15px;
}
.bib {
padding-left: 15px;
margin-bottom: 10px;
}
.company-description ul {
padding-left: 0px;
list-style-type: none;
}
.education-section {
margin-bottom: 5px;
}
.work-info {
margin-left: -30px;
}
.venue-info {
margin-left: 15px;
}
.education-gpa {
padding-left: 2px;
}
.education-gpa-text {
padding-left: 4px;
}
.pagebreak { page-break-before: always; }
.separator {
display: flex;
align-items: center;
text-align: center;
margin-top: 5px;
color: solid #000 !important;
-webkit-print-color-adjust: exact;//:For Chrome
color-adjust: exact;//:For Firefox
}
.separator::before {
content: '';
flex: 1;
border-bottom: 1px solid #000;
}
.separator:not(:empty)::before {
margin-right: .25em;
}
.separator:not(:empty)::after {
margin-left: .25em;
}
@media print {
@page {
margin: 15mm;
}
body {
margin-top: 0px;
margin-left:auto;
margin-right:auto;
}
.entry { page-break-inside: avoid;}
.h4 { page-break-after: avoid;}
.section { page-break-before: avoid;}
.section-subtitle { page-break-after: avoid;}
}
@page {
counter-increment: page;
counter-reset: page 1;
@bottom-middle {
content: counter(page);
}
}

View file

@ -0,0 +1,371 @@
body, html {
font: 14px Montserrat, sans-serif;
margin:0px;
padding:0px;
/*background-color: #ABABAB;*/
background-color: #FDFDFD;
min-width: 1000px;
}
h1 {
color: black;
font-size: 40px;
font-weight: 100;
margin-top: 10px;
margin-bottom: 0px;
}
h2 {
color: black;
font-size: 25px;
font-weight: 100;
margin-top: 0px;
margin-bottom: -20px;
margin-left: -25px;
padding:0px;
}
h3 {
margin-top: 5px;
margin-bottom: 0px;
}
h4 {
margin: 5px;
margin-bottom: 0;
display:inline-block;
padding:0px;
font-weight: 100;
width: 100%;
min-width: 100%;
}
a, a:link, a:visited, a:hover, a:active, a:focus{
color:black;
text-decoration: none;
outline: 0;
}
img {
display: block;
margin:auto;
max-width:400px;
}
li{
margin-bottom: 10px;
}
iframe.audioGalleryFrame:hover {height: 400px;}
iframe.videoGalleryFrame:hover {height: 190px; width:300px}
#gallery{
}
#gallerySelector {
float:left;
width: 20px;
vertical-align: top;
padding: 3px;
}
#galleryPlayer {
overflow-y: visible;
float:left;
}
#upcoming {
font: 14px Montserrat, sans-serif;
}
.video-inner {
text-align:center;
width:100%;
height:140px;
}
.video-inner:hover {height: 190px}
.header {
width:97%;
min-width:1075px;
position:fixed;
top:0px;
background-color: #FDFDFD;
z-index:100;
height: 130px;
max-height: 130px;
min-height: 130px;
font-family: Alegreya Sans, sans-serif;
overflow-y: visible;
padding:20px;
float:left;
}
.avgallery {
display: inline-block;
background-color: black;
vertical-align: top;
width: 325px;
max-width: 325px;
}
.header-section{
float:left;
width:33.2%;
}
.header-inner{
display: table;
margin: 0 auto;
}
.header-inner-right{
margin: 0 auto;
}
.upcoming-inner{
display: table;
margin: 0 auto;
height: 120px;
}
.center-header{
text-align:center;
}
.content{
min-width: 1075px;
width:97%;
margin:20px;
margin-top:160px;
}
.scrollable-content{
overflow-y: scroll;
overflow-x: hidden;
padding-right:10px;
height:98%;
}
#aboutme{
float:left;
width:70%;
}
#my_image{
float:right;
width:25%;
max-width:500px;
}
.css-table {
height:100%;
width:100%;
border-radius:15px;
padding: 5px;
display:table;
background-color:#F8F8F8;
}
.css-table .col3, .col2, .col1 {
width: 33.3%;
min-width: 240px;
padding:5px;
display:table-cell;
}
.css-table .col2 {
width: 49.9%;
min-width: 480px;
}
.css-table .col1 {
width: 99%;
min-width: 720px;
}
.vline {
color: blue;
display:table-cell;
max-width:1px;
border-left:thin solid black;
height:100%;
}
.contentpad {
height:30px;
padding-top:15px;
width:95%;
margin:auto;
}
.venue {
color: #7F7F7F;
display:block
padding:0px;
margin-left:30px;
margin-top:3px;
}
.event-details{
display:block
padding:0px;
margin-left:60px;
}
.upcoming-pieces{
display:block
padding:0px;
margin-left:40px;
}
.upcoming-ensemble{
display:block
padding:0px;
margin-left:50px;
}
.event-pieces{
display:block
padding:0px;
padding-top:3px;
margin-left:60px;
}
.event-performers{
display:block
padding:0px;
margin-left:90px;
/*margin-right:90px;*/
}
.event-ensemble{
display:block
padding:0px;
margin-left:80px;
margin-right:80px;
}
.inline-list li {
display: inline;
padding-left: 5px;
padding-right: 20px;
}
.content-list {
list-style: none;
padding-left: 5px;
margin-top: 5px;
margin-bottom: 0px;
}
.toggle {
display: inline-block;
width: 20px;
color: #7F7F7F;
vertical-align : top;
}
.header_span{
display: inline-block;
min-width: 200px;
width: 95%;
}
.header_piece{
width: 70%;
min-width: 70%;
padding-left: 5px;
float: left;
margin-top:-10px;
}
.icon_span_piece{
vertical-align : top;
float: right;
white-space: nowrap;
width: 25%;
min-width: 25%;
margin-top:-10px;
}
.header_pub{
width: 80%;
min-width: 80%;
padding-left: 5px;
float: left;
}
.icon_span_pub{
vertical-align : top;
float: right;
white-space: nowrap;
width: 10%;
min-width: 10%;
}
.year_span{
padding-top: 10px;
}
.score_icon, .audio_icon, .video_icon, .photo_icon, .download_icon, .cart_icon, .info_icon {
margin-right:10px;
width: 20px;
height: 20px;
background: transparent;
border: none;
background-image: url(../images/book_icon.png);
background-repeat: no-repeat;
background-size : 100% 100%;
cursor: pointer;
}
.audio_icon {
background-image: url(../images/audio_icon.png);
}
.video_icon {
background-image: url(../images/video_icon.png);
}
.photo_icon {
background-image: url(../images/photo_icon.png);
}
.download_icon {
background-image: url(../images/download_icon.png);
}
.cart_icon {
background-image: url(../images/cart_icon.png);
}
.info_icon {
background-image: url(../images/info_icon.png);
}
.lg-backdrop.in {
opacity: 1;
}
#mc_embed_signup form {text-align:left; padding:10px 0 10px 0;}
.mc-field-group { display: inline-block; } /* positions input field horizontally */
#mc_embed_signup input.email {border: 1px solid #ABB0B2; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; color: #343434; background-color: #fff; box-sizing:border-box; height:32px; padding: 0px 0.4em; display: inline-block; margin: 0; width:350px; vertical-align:top;}
#mc_embed_signup label {display:block; padding-bottom:10px; font-weight: 100;}
#mc_embed_signup .clear {display: inline-block;} /* positions button horizontally in line with input */
#mc_embed_signup .button {font-size: 13px; border: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; letter-spacing: .03em; color: #fff; background-color: #aaa; box-sizing:border-box; height:32px; line-height:32px; padding:0 18px; display: inline-block; margin: 0; transition: all 0.23s ease-in-out 0s;}
#mc_embed_signup .button:hover {background-color:#777; cursor:pointer;}
#mc_embed_signup div#mce-responses {float:left; top:-1.4em; padding:0em .5em 0em .5em; overflow:hidden; width:90%;margin: 0 5%; clear: both;}
#mc_embed_signup div.response {margin:1em 0; padding:1em .5em .5em 0; font-weight:bold; float:left; top:-1.5em; z-index:1; width:80%;}
#mc_embed_signup #mce-error-response {display:none;}
#mc_embed_signup #mce-success-response {color:#529214; display:none;}
#mc_embed_signup label.error {display:block; float:none; width:auto; margin-left:1.05em; text-align:left; padding:.5em 0;}
@media (max-width: 768px) {
#mc_embed_signup input.email {width:100%; margin-bottom:5px;}
#mc_embed_signup .clear {display: block; width: 100% }
#mc_embed_signup .button {width: 100%; margin:0; }
}
#mc_embed_signup{clear:left; width:100%;}

View file

@ -0,0 +1,272 @@
var express = require('express');
var mongo = require('mongodb')
var fs = require('fs');
var path = require('path');
var Handlebars = require('handlebars');
var Moment = require('moment');
var bibtexParse = require('bibtex-parse-js');
var request = require('request');
var async = require('async');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Michael Winter' });
});
/* GET cv. */
router.get('/cv', function(req, res, next) {
var css = fs.readFileSync( path.join(__dirname, '../public/stylesheets/resume_style.css'), 'utf8');
var pubdata = fs.readFileSync( path.join(__dirname, '../public/bibtex/bibtex_cv.bib'), 'utf8');
var db = req.db;
db.collection('resume').find().toArray(function (err, items) {
var pubs = bibtexParse.toJSON(pubdata);
var dict = items[0]
dict.publications = pubs;
db.collection('talks').aggregate(
[
{'$sort' : {'date' : -1}},
{'$group': {_id: { $substr: ['$date',0,4] }, talks: { $push: "$$ROOT" }}},
{'$sort' : {'_id' : -1}}
]).toArray(function (err, talks) {
dict.talks = talks;
res.render('cv.template', {resume: dict, css: css});
});
});
});
/* GET works_list. */
router.get('/works_list', function(req, res, next) {
var css = fs.readFileSync( path.join(__dirname, '../public/stylesheets/resume_style.css'), 'utf8');
var db = req.db;
db.collection('resume').find().toArray(function (err, items) {
var dict = items[0];
db.collection('works').find({}, function(err, works) {
function removeDuplicates(originalArray, objKey) {
if (originalArray.length == 1) {
return originalArray;
}
var trimmedArray = [];
var values = [];
var value;
for(var i = 0; i < originalArray.length; i++) {
value = originalArray[i][objKey];
if(values.map(Number).indexOf(+value) === -1) {
trimmedArray.push(originalArray[i]);
values.push(value);
}
}
trimmedArray.sort(function(a,b){
// Turn your strings into dates, and then subtract them
// to get a value that is either negative, positive, or zero.
return new Date(b.start_date) - new Date(a.start_date);
});
return trimmedArray
}
function processWork(err, work) {
if(work === null) {
db.collection('works').aggregate(
[
{'$sort' : {'date' : -1}},
{'$group': {_id: { $year: "$date" }, works: { $push: "$$ROOT" }}},
{'$sort' : {'_id' : -1}}]).toArray(function (err, worksCV) {
dict.works = worksCV;
res.render('workslist.template', {resume: dict, css: css});
db.collection('works').update({}, {$unset: {'events':1}}, {multi: true});
});
return; // All done!
}
var titleToSearch = work.title;
//the abstract will need to be handled better eventually
//the rule: abstract = total intersection in performance; redux = the non-redux version includes the redux version but not vice-versa
if( titleToSearch === 'minor third' ){
titleToSearch = '**********';
}
if( titleToSearch === 'seams' ){
titleToSearch = '**********';
}
if( titleToSearch === 'minor third abstract' ){
titleToSearch = 'minor third'
}
if( titleToSearch === 'to walk and ponder (abstract)' ){
titleToSearch = 'to walk and ponder'
}
if( titleToSearch === 'to converge (abstract)' ){
titleToSearch = 'to converge'
}
if( titleToSearch === 'pedal, triangle machine, and (perhaps) coda (abstract)' ){
titleToSearch = 'pedal, triangle machine, and (perhaps) coda'
}
/*
if( titleToSearch === 'Approximating Omega (redux)' ){
titleToSearch = 'Approximating Omega';
}
*/
if( titleToSearch == 'economy study (in one dimension)' ){
titleToSearch = 'economy study';
}
if( titleToSearch == '[___south america___] miscellany' ){
titleToSearch = 'miscellany';
}
if( (titleToSearch.indexOf('one') !== -1) && (titleToSearch.indexOf('two') !== -1)){
titleToSearch = 'two';
}
// bug: why is mercado san juan or first not updating?
db.collection('events').find( { $text: { $search: "\"" + titleToSearch + "\"" } } ).toArray(function (err, events1) {
db.collection('events').find( { 'program' : { "$elemMatch" : { 'work' : { $regex : titleToSearch.replace('(','\\(').replace(')','\\)'), $options : 'i' } } } } ).toArray(function (err, events2) {
if( titleToSearch !== '**********'){
db.collection('works').update({ 'title' : work.title }, { $set: { "events": removeDuplicates(events1.concat(events2), 'start_date') } });
}
works.next(processWork);
});
});
};
works.next(processWork);
});
});
});
//handle code releases
router.get('/code_releases/*.zip', function(req, res) {
var db = req.db;
var splitreq = req.url.split('/');
var filename = splitreq.pop();
var bucketName = splitreq.pop();
db.collection(bucketName + ".files").findOne({ filename: filename }, function (err, file) {
if (err) return res.status(400).send(err);
if (!file) return res.status(404).send('');
console.log(file.redirect);
res.redirect(file.redirect);
});
});
/* redirect catch */
router.get('/redirect=*', function(req, res, next) {
var link = req.url.split('=').pop();
request(link).pipe(res);
});
router.get('/*/*', function(req, res) {
var db = req.db;
var splitreq = req.url.split('/');
var filename = splitreq.pop();
var bucketName = splitreq.pop();
db.collection(bucketName + ".files").findOne({ filename: filename }, function (err, file) {
if (err) return res.status(400).send(err);
if (!file) return res.status(404).send('');
var bucket = new mongo.GridFSBucket(db, {
chunkSizeBytes: 1024,
bucketName: bucketName
});
bucket.openDownloadStreamByName(filename).
pipe(res).
on('error', function(error) {
//assert.ifError(error);
res.end();
}).
on('finish', function() {
console.log('done!');
});
});
});
/*
router.get('/album_art/*', function(req, res) {
res.render('file');
});
router.get('/pubs/*', function(req, res) {
res.render('file');
});
*/
//legacy file handler
/*
router.get('/*.*', function(req, res) {
var file = req.url.split('/').pop()
request("http://legacy.unboundedpress.org/"+file).pipe(res);
});
*/
/* catch all*/
router.get('/*', function(req, res, next) {
res.render('index', { title: 'Michael Winter' });
});
Handlebars.registerHelper("prettifyDayDate", function(resumeDate) {
if (!resumeDate) {
return 'present';
}
var newDate = Moment(resumeDate).format('MM.DD.YYYY');
//console.log('newDate: ' + newDate);
return newDate;
});
Handlebars.registerHelper("prettifyMonthDate", function(resumeDate) {
if (!resumeDate) {
return 'present';
}
var newDate = Moment(resumeDate).format('MMM YYYY');
//console.log('newDate: ' + newDate);
return newDate;
});
Handlebars.registerHelper("prettifyYearDate", function(resumeDate) {
if (!resumeDate) {
return 'present';
}
var newDate = Moment(resumeDate).format('YYYY');
//console.log('newDate: ' + newDate);
return newDate;
});
Handlebars.registerHelper('toLowerCase', function(str) {
return str.toLowerCase();
});
Handlebars.registerHelper('toArray', function(val) {
if (typeof val === 'string') {
return [val]
} else {
return val
}
});
Handlebars.registerHelper('unless_blank', function(item, block) {
return (item && item.replace(/\s/g,"").length) ? block.fn(this) : block.inverse(this);
});
Handlebars.registerHelper('equal', function(lvalue, rvalue, options) {
if (arguments.length < 3)
throw new Error("Handlebars Helper equal needs 2 parameters");
if( lvalue!=rvalue ) {
return options.inverse(this);
} else {
return options.fn(this);
}
});
module.exports = router;

View file

@ -0,0 +1,71 @@
var mongo = require('mongodb');
var db = new mongo.Db('unboundedpress', new mongo.Server("127.0.0.1", 27017), { safe : false });
var Grid = require('gridfs-stream');
var gfs = Grid(db, mongo);
var im = require('imagemagick-stream');
db.open(function(err, db) {
db.authenticate('USER', 'PASS', function(err, result) {
db.collection('album_art.files').find().forEach(function (file) {
var bucket = 'album_art';
gfs.remove({filename: 'thumb_'+file.filename, root: bucket}, function (err) {
if (err) return handleError(err);
console.log('success');
});
var rs = gfs.createReadStream({
_id: file._id,
root: bucket,
content_type: file.contextType
});
var ws = gfs.createWriteStream({
filename: 'thumb_'+file.filename,
root: bucket,
mode: 'w',
content_type: file.contentType
});
var resize = im().resize('1024x').quality(80);
rs.pipe(resize).pipe(ws);
});
db.collection('images.files').find().forEach(function (file) {
var bucket = 'images';
gfs.remove({filename: 'thumb_'+file.filename, root: bucket}, function (err) {
if (err) return handleError(err);
console.log('success');
});
var rs = gfs.createReadStream({
_id: file._id,
root: bucket,
content_type: file.contextType
});
var ws = gfs.createWriteStream({
filename: 'thumb_'+file.filename,
root: bucket,
mode: 'w',
content_type: file.contentType
});
var resize = im().resize('1024x').quality(80);
rs.pipe(resize).pipe(ws);
});
});
});

View file

@ -0,0 +1,445 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{#resume.basics}}{{name}}{{/resume.basics}}</title>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet" media="all">
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="http://bibtex-js.googlecode.com/svn/trunk/src/bibtex_js.js"></script>
<style>
{{{css}}}
</style>
</head>
<body>
<!-- header -->
<div class="container-fluid">
{{#resume.basics}}
<div class="row">
<div class="col-xs-6">
<h1 class="name"> {{name}}</h1>
<h3 class="title">{{label}}</h3>
</div>
<div class="col-xs-6 contact-info">
<ul class="pull-right">
<li>{{email}}</li>
<li>{{phone}}</li>
<li>{{website}}</li>
<li>
{{#each profiles}}
<i class="fa fa-{{toLowerCase network}}"></i> {{username}}
{{/each}}
</li>
</ul>
</div>
</div>
<hr style="margin-top: 0;" />
<!-- Profile/summary -->
<!--
<div class="row">
<div class="col-xs-2">
<h4 class="section-title"> Profile </h4>
</div>
<div class="col-xs-11">
{{summary}}
</div>
{{/resume.basics}}
</div>
-->
<!-- Education -->
<div class="row section">
<div class="col-xs-12">
{{#each resume.education}}
<div class="entry">
{{#if @first}}
<div class="col-xs-11">
<h4 class="section-title">Education</h4>
</div>
{{/if}}
<div class="row education-section">
<div class="col-xs-11">
<div class="school"> {{studyType}} in {{area}}, {{institution}}, {{prettifyYearDate endDate}}</div>
</div>
</div>
</div>
{{/each}}
</div>
</div>
<!-- Experience -->
<div class="row section">
<div class="col-xs-11">
{{#each resume.teaching}}
<div class="entry">
{{#if @first}}
<div class="col-xs-12">
<h4 class="section-title">
<hr/>
Teaching</h4>
</div>
{{/if}}
<div class="row">
<div class="col-xs-11">
<div class="company"> {{company}}, <em>{{position}}</em></div>
{{prettifyMonthDate startDate}} {{prettifyMonthDate endDate}}
</div>
</div>
<div class="row company-description">
<div class="col-xs-11">
<ul>
<li class="company-summary">{{summary}}</li>
{{#each highlights}}
<li> {{this}}</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{/each}}
</div>
</div>
<!-- Talks -->
<div class="row section">
{{#each resume.talks}}
{{#each this.talks}}
{{#if @first}}
<div class="row subsection">
{{/if}}
<div class="col-xs-11">
<div class="entry">
{{#if @../first}}
{{#if @first}}
<div class="col-xs-11">
<h4 class="section-title">
<hr/>
Lectures</h4>
</div>
{{/if}}
{{/if}}
{{#if @first}}
<div class="row">
<div class="divider"></div>
</div>
<div class="col-xs-7">
<div class="separator">{{prettifyYearDate date}}</div>
</div>
{{/if}}
<div class="row">
<div class="col-xs-11">
<div class="company"> {{location}} </div>
</div>
<div class="col-xs-12">
{{#each (toArray title)}}
<div class="company-description"><em>{{this}}</em></div>
{{/each}}
</div>
</div>
<div class="row company-description">
<div class="col-xs-11">
<ul>
<li class="company-summary">{{summary}}</li>
{{#each highlights}}
<li><i class="fa fa-chevron-circle-right"></i> {{this}}</li>
{{/each}}
</ul>
</div>
</div>
</div>
</div>
{{/each}}
</div>
{{/each}}
</div>
<div class="row section">
<div class="col-xs-11">
{{#each resume.work}}
<div class="entry">
{{#if @first}}
<div class="col-xs-12">
<h4 class="section-title">
<hr/>
Relevant Work</h4>
</div>
{{/if}}
<div class="row">
<div class="col-xs-11">
<div class="company"> {{company}}, <em>{{position}}</em></div>
{{prettifyMonthDate startDate}} {{prettifyMonthDate endDate}}
</div>
</div>
<div class="row company-description">
<div class="col-xs-11">
<ul>
<li class="company-summary">{{summary}}</li>
{{#each highlights}}
<li> {{this}}</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{/each}}
</div>
</div>
<!-- Coding -->
<div class="row section">
<div class="col-xs-11">
<div class="entry">
<div class="col-xs-11">
<h4 class="section-title">
<hr/>
Coding Skills</h4>
</div>
<div class="row">
<div class="col-xs-11">
<div class="company">
{{#each resume.skills}}
Expertise in:
{{#each keywords}}
{{#if @last}}
{{this}}
{{else}}
{{this}},
{{/if}}
{{/each}}
<br />
{{/each}}
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Languages -->
<div class="row section">
<div class="col-xs-11">
<div class="entry">
<div class="col-xs-11">
<h4 class="section-title">
<hr/>
Language Skills</h4>
</div>
<div class="row">
<div class="col-xs-11">
{{#each resume.languages}}
{{#if @last}}
{{language}} - {{fluency}}
{{else}}
{{language}} - {{fluency}},
{{/if}}
{{/each}}
</div>
</div>
</div>
</div>
</div>
<!-- Publications -->
<div class="row section">
<div class="col-xs-11">
{{#each resume.publications}}
<div class="entry">
{{#if @first}}
<div class="col-xs-11">
<h4 class="section-title">
<hr/>
Publications</h4>
</div>
{{/if}}
<div class="row">
<div class="col-xs-12">
<div class="company"> {{{entryTags.title}}} </div>
<div class="company">
<div class="bib">
{{#if entryTags.author}}{{entryTags.author}}{{/if}}
{{#if entryTags.editor}}{{entryTags.editor}}, editors.{{/if}}
{{#if entryTags.booktitle}}<em>{{entryTags.booktitle}}.</em>{{/if}}
{{#if entryTags.journal}}<em>{{entryTags.journal}}</em>,{{/if}}
{{#if entryTags.volume}}vol. {{entryTags.volume}}{{#if entryTags.number}}, no. {{entryTags.number}}{{/if}},{{/if}}
{{#if entryTags.publisher}}{{entryTags.publisher}},{{/if}} {{entryTags.year}}.</div>
</div>
</div>
</div>
</div>
{{/each}}
</div>
</div>
<!-- Releases -->
<div class="row section">
<div class="row subsection">
<div class="col-xs-11">
{{#each resume.solo_releases}}
<div class="entry">
{{#if @first}}
<div class="col-xs-11">
<h4 class="section-title">
<hr/>
Recordings</h4>
</div>
<div class="col-xs-11">
<div class="section-subtitle"><em>Solo Albums</em></div>
</div>
{{/if}}
<div class="row">
<div class="col-xs-12">
<div class="company"> {{title}}. {{publisher}}. {{media_type}}. {{date}}. </div>
</div>
</div>
<div class="row company-description">
<div class="col-xs-11">
<ul>
{{#if website}}
<li><a href="{{website}}">{{website}}</a></li>
{{/if}}
<li class="company-summary">{{summary}}</li>
{{#each highlights}}
<li><i class="fa fa-chevron-circle-right"></i> {{this}}</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{/each}}
</div>
</div>
<div class="row subsection">
<div class="col-xs-11">
{{#each resume.compilation_releases}}
{{#if @first}}
<div class="col-xs-11">
<div class="section-subtitle"><em>Compilation Albums</em></div>
</div>
{{/if}}
<div class="entry">
<div class="row">
<div class="col-xs-11">
<div class="company"> {{title}}. {{publisher}}. {{media_type}}. {{date}}. </div>
<div class="company">featuring <em>{{work}} </em></div>
</div>
</div>
<div class="row company-description">
<div class="col-xs-11">
<ul>
{{#if website}}
<li><a href="{{website}}">{{website}}</a></li>
{{/if}}
<li class="company-summary">{{summary}}</li>
{{#each highlights}}
<li><i class="fa fa-chevron-circle-right"></i> {{this}}</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{/each}}
</div>
</div>
</div>
<!-- Residencies -->
<div class="row section">
<div class="col-xs-11">
{{#each resume.residencies}}
<div class="entry">
{{#if @first}}
<div class="col-xs-11">
<h4 class="section-title">
<hr/>
Residencies and Awards</h4>
</div>
{{/if}}
<div class="row">
<div class="col-xs-11">
<div class="company"> {{org}}, {{ date }} </div>
</div>
</div>
<div class="row company-description">
<div class="col-xs-11">
<ul>
{{#if website}}
<li><a href="{{website}}">{{website}}</a></li>
{{/if}}
<li class="company-summary">{{summary}}</li>
{{#each highlights}}
<li><i class="fa fa-chevron-circle-right"></i> {{this}}</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{/each}}
</div>
</div>
<!-- References -->
<div class="row section">
<div class="col-xs-11">
{{#each resume.references}}
<div class="entry">
{{#if @first}}
<div class="col-xs-11">
<h4 class="section-title">
<hr/>
References</h4>
</div>
{{/if}}
<div class="row">
<div class="col-xs-11">
<div class="company"> {{name}} </div>
<div class="company-description">{{position}}</div>
<div class="company-description">{{email}}</div>
</div>
</div>
<div class="row company-description">
<div class="col-xs-11">
<ul>
{{#if website}}
<li><a href="{{website}}">{{website}}</a></li>
{{/if}}
<li class="company-summary">{{summary}}</li>
{{#each highlights}}
<li><i class="fa fa-chevron-circle-right"></i> {{this}}</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{/each}}
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,6 @@
extends layout
block content
h1= message
h2= error.status
pre #{error.stack}

View file

@ -0,0 +1,9 @@
extends layout
block content
h1.
Events
ul#events
li test

View file

@ -0,0 +1,5 @@
extends layout
block content
div#pdfdiv

View file

@ -0,0 +1,137 @@
extends layout
block content
div.header
div#nav.header-section
h1 michael winter
h2
ul.inline-list
li
a#worksbutton(class='scroll-to-div', href='#works', data-target='works') works
li
a#eventsbutton(class='scroll-to-div', href='#events', data-target='events') events
li
a#aboutbutton(class='scroll-to-div', href='#about', data-target='about') about
li
a(href='/code', target='_blank') code
div#gallery.header-section
div.header-inner
div#galleryPlayer.avgallery
div#gallerySelector
div#upcoming.header-section
div.header-inner-right
//h4.center-header upcoming
ul#upcominglist
div.content
div.contentpad
hr
div#works.css-table
div.col3
div#pieces
div
h3 pieces
div.scrollable-content
ul#piecesworkslist
ul#piecesmiscworkslist
button.btn_more show misc
button.btn_less hide misc
div.vline
div.vline-inner
div.col3
div#writings
div
h3 writings
div
ul#writingsworkslist
div.vline
div.vline-inner
div.col3
div#releases
div
h3 releases
div
ul#releaseslist
div.contentpad
hr
div#events(class='css-table')
div.col2
div#performances
div
h3 performances #[select#yearpicker]
//#[select#eventtypepicker]
div
ul#performanceeventslist
//button(class="btn_more") show more
//button(class="btn_less") show less
div.vline
div.vline-inner
div.col2
div#talks
div
h3 talks
div
ul#talkeventslist
//button(class="btn_more") show all
//button(class="btn_less") show less
//div.col3
// div#residencies
// div
// h3 residencies
// div
// ul#residencyeventslist
div.contentpad
hr
div#about.css-table
div.col1
div#bio
h3#abouthead about
div#aboutme
p My work often explores simple processes where dynamic systems, situations, and settings are realized in a variety of ways from performances to installations. To me, everything we experience is computable. Given this digital philosophy, I acknowledge even my most open works as algorithmic; and, while not always apparent on the surface of any given piece, the considerations of computability and epistemology are integral to my practice. I often reconcile epistemological limits with artistic practicality by considering and addressing the limits of computation from an artistic and experiential vantage point and by collaborating with other artists, mathematicians, and scientists in order to integrate objects, ideas, and texts from various domains as structural elements in my pieces.
p My work has been presented at venues and festivals throughout the world such as REDCAT, in Los Angeles; the Ostrava Festival of New Music in the Czech Republic; Tsonami Arte Sonoro Festival in Valparaiso, Chile; the Huddersfield New Music Festival in the United Kingdom; and Umbral Sesiones at the Museo de Arte Contemporáneo in Oaxaca, Mexico. Recordings of my music have been released by Another Timbre, New World Records, Edition Wandelweiser, Bahn Mi Verlag, Tsonami Records, and Pogus Productions. From 2018 to 2019, I was a fellow / artist-in-residence at the Akademie Schloss Solitude in Stuttgart, Germany. In 2008, I co-founded <em>the wulf.</em>, a Los Angeles-based organization dedicated to experimental performance and art. As a laboratory and hub for exploring new ideas, <em>the wulf.</em> has become an experiment in alternative communities and economies. Similarly, my work subverts discriminatory conventions and hierarchies by exploring alternative forms of presentation and interaction.
div#mc_embed_signup
br
form#mc-embedded-subscribe-form.validate(action='//unboundedpress.us12.list-manage.com/subscribe/post?u=bdadd25738fedf704641f3a80&amp;id=01c5761ebb', method='post', name='mc-embedded-subscribe-form', target='_blank', novalidate='')
label(for='mce-EMAIL') subscribe to my mailing list to know about upcoming events
input#mce-EMAIL.email(type='email', value='', name='EMAIL', placeholder='email address', required='')
div(style='position: absolute; left: -5000px;', aria-hidden='true')
input(type='text', name='b_bdadd25738fedf704641f3a80_01c5761ebb', tabindex='-1', value='')
div.clear
input#mc-embedded-subscribe.button(type='submit', value='subscribe', name='subscribe')
div#my_image
div(class='contentpad')
//div#education(class='col')
// h3 education
//div#jobs(class='col')
// h3 jobs/skills
div#dialog

View file

@ -0,0 +1,59 @@
doctype html
html
head
title=title
link(rel='stylesheet', href='lightslider/css/lightslider.css')
link(rel='stylesheet', href='lightgallery/css/lightgallery.css')
link(rel='stylesheet', href='/stylesheets/style.css')
link(rel='stylesheet', href='//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css')
link(rel="stylesheet", type="text/css", href="https://fonts.googleapis.com/css?family=Alegreya Sans SC")
link(rel="stylesheet", type="text/css", href="https://fonts.googleapis.com/css?family=Montserrat")
script(src='//code.jquery.com/jquery-2.1.4.min.js')
script(src='//code.jquery.com/ui/1.11.4/jquery-ui.min.js')
script(src='/javascripts/global.js')
script(src='/javascripts/file.js')
//script(src="http://bibtex-js.googlecode.com/svn/trunk/src/bibtex_js.js")
script(src="https://connect.soundcloud.com/sdk/sdk-3.0.0.js")
script(src="https://w.soundcloud.com/player/api.js")
script(src="lightslider/js/lightslider.js")
script(src="lightgallery/js/lightgallery.js")
script(src="lightgallery/js/lg-hash.js")
script(src="/javascripts/pluralize.js")
script.
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-37953980-1', 'unboundedpress.org');
ga('send', 'pageview');
script.
var clicky_site_ids = clicky_site_ids || [];
clicky_site_ids.push(100904688);
(function() {
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = '//static.getclicky.com/js';
( document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0] ).appendChild( s );
})();
body
block content

View file

@ -0,0 +1,132 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{#resume.basics}}{{name}}{{/resume.basics}}</title>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet" media="all">
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="http://bibtex-js.googlecode.com/svn/trunk/src/bibtex_js.js"></script>
<style>
{{{css}}}
</style>
</head>
<body>
<!-- header -->
<div class="container-fluid">
{{#resume.basics}}
<div class="row">
<div class="col-xs-6">
<h1 class="name"> {{name}}</h1>
<h3 class="title">Works List with Presentation History</h3>
</div>
<div class="col-xs-6 contact-info">
<ul class="pull-right">
<li>{{email}}</li>
<li>{{phone}}</li>
<li>{{website}}</li>
<li>
{{#each profiles}}
<i class="fa fa-{{toLowerCase network}}"></i> {{username}}
{{/each}}
</li>
</ul>
</div>
</div>
<hr style="margin-top: 0;" />
<!-- Profile/summary -->
<!--
<div class="row">
<div class="col-xs-2">
<h4 class="section-title"> Profile </h4>
</div>
<div class="col-xs-10">
{{summary}}
</div>
{{/resume.basics}}
</div>
<hr />
-->
<!-- Works -->
<div class="row section">
<div class="col-xs-11">
A chronological performance / exhibition history, scores, and recordings are available at
<br>
&lt;www.unboundedpress.org&gt;.
<br>
All scores are also published or forthcoming through Frog Peak at
<br>
&lt;www.frogpeak.org/fpartists/fpwinter.html&gt;.
<br>
<br>
</div>
{{#each resume.works}}
{{#each this.works}}
{{#if @first}}
<div class="row subsection">
{{/if}}
<div class="col-xs-12">
<div class="entry">
{{#if @../first}}
{{#if @first}}
{{/if}}
{{/if}}
{{#if @first}}
<div class="row">
<div class="divider"></div>
</div>
<div class="col-xs-7">
<div class="separator">{{prettifyYearDate date}}</div>
</div>
{{/if}}
<div class="row">
<div class="col-xs-10">
<div class="company"> {{location}} </div>
</div>
<div class="col-xs-10">
<div class="section-subtitle"> <em>{{title}}</em> </div>
<div class="work-info">
{{#each instrument_tags}}
<div class="company-description">{{this}}</div>
{{/each}}
{{#each events}}
<div class="venue-info">
<div class="company-description">{{ venue.name }}; {{ venue.city }}, {{ venue.state }} - {{prettifyDayDate start_date}}</div>
</div>
{{/each}}
</div>
</div>
</div>
<div class="row company-description">
<div class="col-xs-11">
<ul>
<li class="company-summary">{{summary}}</li>
{{#each highlights}}
<li><i class="fa fa-chevron-circle-right"></i> {{this}}</li>
{{/each}}
</ul>
</div>
</div>
</div>
</div>
{{/each}}
</div>
{{/each}}
</div>
</div> <!-- /end container-fluid -->
</body>
</html>