Add HTML5 features

This commit is contained in:
Romain Neutron
2012-05-30 16:34:28 +02:00
parent 63018a85cd
commit caf1e69370
33 changed files with 5780 additions and 299 deletions

View File

@@ -16,7 +16,7 @@ https://docs.phraseanet.com/3.6/
#Easy Installation #Easy Installation
Get the latests sources here https://github.com/alchemy-fr/Phraseanet/downloads Get the latest sources here https://github.com/alchemy-fr/Phraseanet/downloads
**Setup your webserver** **Setup your webserver**
@@ -24,15 +24,11 @@ Get the latests sources here https://github.com/alchemy-fr/Phraseanet/downloads
<pre> <pre>
server { server {
listen 80; listen 80;
server_name subdeomain.domain.tld; server_name subdomain.domain.tld;
root /path/to/Phraseanet/www; root /path/to/Phraseanet/www;
index index.php; index index.php;
location /web {
alias /path/to/Phraseanet/datas/web;
}
location /download { location /download {
internal; internal;
alias /path/to/Phraseanet/tmp/download; alias /path/to/Phraseanet/tmp/download;
@@ -52,3 +48,4 @@ Let's go !
Phraseanet is licensed under GPL-v3 license. Phraseanet is licensed under GPL-v3 license.
[1]: http://developer.phraseanet.com/ [1]: http://developer.phraseanet.com/

View File

@@ -23,7 +23,14 @@ use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Application; use Symfony\Component\Console\Application;
require_once dirname(__FILE__) . '/../lib/classes/bootstrap.class.php';
bootstrap::register_autoloads();
$configuration = Alchemy\Phrasea\Core\Configuration::build();
if ($configuration->isInstalled()) {
require_once dirname(__FILE__) . '/../lib/bootstrap.php'; require_once dirname(__FILE__) . '/../lib/bootstrap.php';
}
try { try {
$app = new Application(" $app = new Application("

32
composer.lock generated
View File

@@ -24,7 +24,7 @@
{ {
"package": "data-uri/data-uri", "package": "data-uri/data-uri",
"version": "dev-master", "version": "dev-master",
"source-reference": "34f587d4baf0e1127da23e78df0ebff9ff1d37a0" "source-reference": "f92fcef4f8f93c05d8cc86cbe8ef5f9f3fe428c5"
}, },
{ {
"package": "doctrine/common", "package": "doctrine/common",
@@ -85,7 +85,7 @@
{ {
"package": "php-xpdf/php-xpdf", "package": "php-xpdf/php-xpdf",
"version": "dev-master", "version": "dev-master",
"source-reference": "34ad2e4830a56f1378bba6e92f9e97795e56aa15" "source-reference": "f5b447a68a1f67a088290326e636494a8bfcbee9"
}, },
{ {
"package": "phpexiftool/exiftool", "package": "phpexiftool/exiftool",
@@ -108,6 +108,11 @@
"alias-pretty-version": "1.0.x-dev", "alias-pretty-version": "1.0.x-dev",
"alias-version": "1.0.9999999.9999999-dev" "alias-version": "1.0.9999999.9999999-dev"
}, },
{
"package": "silex/silex",
"version": "dev-master",
"source-reference": "410c1ddd14794e332edacbab4037584185529d2e"
},
{ {
"package": "silex/silex", "package": "silex/silex",
"version": "dev-master", "version": "dev-master",
@@ -117,7 +122,8 @@
{ {
"package": "silex/silex", "package": "silex/silex",
"version": "dev-master", "version": "dev-master",
"source-reference": "410c1ddd14794e332edacbab4037584185529d2e" "alias-pretty-version": "1.0.x-dev",
"alias-version": "1.0.9999999.9999999-dev"
}, },
{ {
"package": "swftools/swftools", "package": "swftools/swftools",
@@ -127,7 +133,8 @@
{ {
"package": "swiftmailer/swiftmailer", "package": "swiftmailer/swiftmailer",
"version": "dev-master", "version": "dev-master",
"source-reference": "d33d54cc8a081b0b85734744936ede1ba230dd64" "alias-pretty-version": "4.1.x-dev",
"alias-version": "4.1.9999999.9999999-dev"
}, },
{ {
"package": "swiftmailer/swiftmailer", "package": "swiftmailer/swiftmailer",
@@ -135,6 +142,17 @@
"alias-pretty-version": "4.1.x-dev", "alias-pretty-version": "4.1.x-dev",
"alias-version": "4.1.9999999.9999999-dev" "alias-version": "4.1.9999999.9999999-dev"
}, },
{
"package": "swiftmailer/swiftmailer",
"version": "dev-master",
"source-reference": "d33d54cc8a081b0b85734744936ede1ba230dd64"
},
{
"package": "symfony/symfony",
"version": "dev-master",
"alias-pretty-version": "2.1.x-dev",
"alias-version": "2.1.9999999.9999999-dev"
},
{ {
"package": "symfony/symfony", "package": "symfony/symfony",
"version": "dev-master", "version": "dev-master",
@@ -162,6 +180,12 @@
"alias-pretty-version": "1.8.x-dev", "alias-pretty-version": "1.8.x-dev",
"alias-version": "1.8.9999999.9999999-dev" "alias-version": "1.8.9999999.9999999-dev"
}, },
{
"package": "twig/twig",
"version": "dev-master",
"alias-pretty-version": "1.8.x-dev",
"alias-version": "1.8.9999999.9999999-dev"
},
{ {
"package": "twig/twig", "package": "twig/twig",
"version": "dev-master", "version": "dev-master",

View File

@@ -15,5 +15,5 @@ main_connexion:
#Define a connexion to a SQLite database named test_connexion #Define a connexion to a SQLite database named test_connexion
test_connexion: test_connexion:
driver: pdo_sqlite driver: pdo_sqlite
path: /PATH/TO/SQLITE/DATABASE path: :memory:
charset: UTF8 charset: UTF8

View File

@@ -8,5 +8,5 @@ main_connexion:
charset: UTF8 charset: UTF8
test_connexion: test_connexion:
driver: pdo_sqlite driver: pdo_sqlite
path: /tmp/tests.sqlite path: :memory:
charset: UTF8 charset: UTF8

View File

@@ -488,6 +488,7 @@ class Core extends \Pimple
ini_set('session.auto_start', '0'); ini_set('session.auto_start', '0');
ini_set('session.hash_function', '1'); ini_set('session.hash_function', '1');
ini_set('session.hash_bits_per_character', '6'); ini_set('session.hash_bits_per_character', '6');
ini_set('session.cache_limiter', '');
ini_set('allow_url_fopen', 'on'); ini_set('allow_url_fopen', 'on');
return; return;

View File

@@ -48,196 +48,168 @@ class Basket extends \Entities\Basket implements \Doctrine\ORM\Proxy\Proxy
return (int) $this->_identifier["id"]; return (int) $this->_identifier["id"];
} }
$this->__load(); $this->__load();
return parent::getId(); return parent::getId();
} }
public function setName($name) public function setName($name)
{ {
$this->__load(); $this->__load();
return parent::setName($name); return parent::setName($name);
} }
public function getName() public function getName()
{ {
$this->__load(); $this->__load();
return parent::getName(); return parent::getName();
} }
public function setDescription($description) public function setDescription($description)
{ {
$this->__load(); $this->__load();
return parent::setDescription($description); return parent::setDescription($description);
} }
public function getDescription() public function getDescription()
{ {
$this->__load(); $this->__load();
return parent::getDescription(); return parent::getDescription();
} }
public function setUsrId($usrId) public function setUsrId($usrId)
{ {
$this->__load(); $this->__load();
return parent::setUsrId($usrId); return parent::setUsrId($usrId);
} }
public function getUsrId() public function getUsrId()
{ {
$this->__load(); $this->__load();
return parent::getUsrId(); return parent::getUsrId();
} }
public function setPusherId($pusherId) public function setPusherId($pusherId)
{ {
$this->__load(); $this->__load();
return parent::setPusherId($pusherId); return parent::setPusherId($pusherId);
} }
public function getPusherId() public function getPusherId()
{ {
$this->__load(); $this->__load();
return parent::getPusherId(); return parent::getPusherId();
} }
public function setArchived($archived) public function setArchived($archived)
{ {
$this->__load(); $this->__load();
return parent::setArchived($archived); return parent::setArchived($archived);
} }
public function getArchived() public function getArchived()
{ {
$this->__load(); $this->__load();
return parent::getArchived(); return parent::getArchived();
} }
public function setCreated($created) public function setCreated($created)
{ {
$this->__load(); $this->__load();
return parent::setCreated($created); return parent::setCreated($created);
} }
public function getCreated() public function getCreated()
{ {
$this->__load(); $this->__load();
return parent::getCreated(); return parent::getCreated();
} }
public function setUpdated($updated) public function setUpdated($updated)
{ {
$this->__load(); $this->__load();
return parent::setUpdated($updated); return parent::setUpdated($updated);
} }
public function getUpdated() public function getUpdated()
{ {
$this->__load(); $this->__load();
return parent::getUpdated(); return parent::getUpdated();
} }
public function addBasketElement(\Entities\BasketElement $elements) public function addBasketElement(\Entities\BasketElement $elements)
{ {
$this->__load(); $this->__load();
return parent::addBasketElement($elements); return parent::addBasketElement($elements);
} }
public function getElements() public function getElements()
{ {
$this->__load(); $this->__load();
return parent::getElements(); return parent::getElements();
} }
public function getElementsByOrder($ordre) public function getElementsByOrder($ordre)
{ {
$this->__load(); $this->__load();
return parent::getElementsByOrder($ordre); return parent::getElementsByOrder($ordre);
} }
public function setPusher(\User_Adapter $user) public function setPusher(\User_Adapter $user)
{ {
$this->__load(); $this->__load();
return parent::setPusher($user); return parent::setPusher($user);
} }
public function getPusher() public function getPusher()
{ {
$this->__load(); $this->__load();
return parent::getPusher(); return parent::getPusher();
} }
public function setOwner(\User_Adapter $user) public function setOwner(\User_Adapter $user)
{ {
$this->__load(); $this->__load();
return parent::setOwner($user); return parent::setOwner($user);
} }
public function getOwner() public function getOwner()
{ {
$this->__load(); $this->__load();
return parent::getOwner(); return parent::getOwner();
} }
public function setValidation(\Entities\ValidationSession $validation) public function setValidation(\Entities\ValidationSession $validation)
{ {
$this->__load(); $this->__load();
return parent::setValidation($validation); return parent::setValidation($validation);
} }
public function getValidation() public function getValidation()
{ {
$this->__load(); $this->__load();
return parent::getValidation(); return parent::getValidation();
} }
public function setIsRead($isRead) public function setIsRead($isRead)
{ {
$this->__load(); $this->__load();
return parent::setIsRead($isRead); return parent::setIsRead($isRead);
} }
public function getIsRead() public function getIsRead()
{ {
$this->__load(); $this->__load();
return parent::getIsRead(); return parent::getIsRead();
} }
public function hasRecord(\record_adapter $record) public function hasRecord(\record_adapter $record)
{ {
$this->__load(); $this->__load();
return parent::hasRecord($record); return parent::hasRecord($record);
} }
public function getSize() public function getSize()
{ {
$this->__load(); $this->__load();
return parent::getSize(); return parent::getSize();
} }

View File

@@ -48,70 +48,60 @@ class LazaretSession extends \Entities\LazaretSession implements \Doctrine\ORM\P
return (int) $this->_identifier["id"]; return (int) $this->_identifier["id"];
} }
$this->__load(); $this->__load();
return parent::getId(); return parent::getId();
} }
public function setUsrId($usrId) public function setUsrId($usrId)
{ {
$this->__load(); $this->__load();
return parent::setUsrId($usrId); return parent::setUsrId($usrId);
} }
public function getUsrId() public function getUser()
{ {
$this->__load(); $this->__load();
return parent::getUser();
return parent::getUsrId();
} }
public function setCreated($created) public function setCreated($created)
{ {
$this->__load(); $this->__load();
return parent::setCreated($created); return parent::setCreated($created);
} }
public function getCreated() public function getCreated()
{ {
$this->__load(); $this->__load();
return parent::getCreated(); return parent::getCreated();
} }
public function setUpdated($updated) public function setUpdated($updated)
{ {
$this->__load(); $this->__load();
return parent::setUpdated($updated); return parent::setUpdated($updated);
} }
public function getUpdated() public function getUpdated()
{ {
$this->__load(); $this->__load();
return parent::getUpdated(); return parent::getUpdated();
} }
public function addLazaretFiles(\Entities\LazaretFile $files) public function addLazaretFiles(\Entities\LazaretFile $files)
{ {
$this->__load(); $this->__load();
return parent::addLazaretFiles($files); return parent::addLazaretFiles($files);
} }
public function getFiles() public function getFiles()
{ {
$this->__load(); $this->__load();
return parent::getFiles(); return parent::getFiles();
} }
public function addLazaretFile(\Entities\LazaretFile $files) public function addLazaretFile(\Entities\LazaretFile $files)
{ {
$this->__load(); $this->__load();
return parent::addLazaretFile($files); return parent::addLazaretFile($files);
} }

View File

@@ -48,98 +48,84 @@ class UsrList extends \Entities\UsrList implements \Doctrine\ORM\Proxy\Proxy
return (int) $this->_identifier["id"]; return (int) $this->_identifier["id"];
} }
$this->__load(); $this->__load();
return parent::getId(); return parent::getId();
} }
public function setName($name) public function setName($name)
{ {
$this->__load(); $this->__load();
return parent::setName($name); return parent::setName($name);
} }
public function getName() public function getName()
{ {
$this->__load(); $this->__load();
return parent::getName(); return parent::getName();
} }
public function setCreated($created) public function setCreated($created)
{ {
$this->__load(); $this->__load();
return parent::setCreated($created); return parent::setCreated($created);
} }
public function getCreated() public function getCreated()
{ {
$this->__load(); $this->__load();
return parent::getCreated(); return parent::getCreated();
} }
public function setUpdated($updated) public function setUpdated($updated)
{ {
$this->__load(); $this->__load();
return parent::setUpdated($updated); return parent::setUpdated($updated);
} }
public function getUpdated() public function getUpdated()
{ {
$this->__load(); $this->__load();
return parent::getUpdated(); return parent::getUpdated();
} }
public function addUsrListOwner(\Entities\UsrListOwner $owners) public function addUsrListOwner(\Entities\UsrListOwner $owners)
{ {
$this->__load(); $this->__load();
return parent::addUsrListOwner($owners); return parent::addUsrListOwner($owners);
} }
public function getOwners() public function getOwners()
{ {
$this->__load(); $this->__load();
return parent::getOwners(); return parent::getOwners();
} }
public function hasAccess(\User_Adapter $user) public function hasAccess(\User_Adapter $user)
{ {
$this->__load(); $this->__load();
return parent::hasAccess($user); return parent::hasAccess($user);
} }
public function getOwner(\User_Adapter $user) public function getOwner(\User_Adapter $user)
{ {
$this->__load(); $this->__load();
return parent::getOwner($user); return parent::getOwner($user);
} }
public function addUsrListEntry(\Entities\UsrListEntry $entry) public function addUsrListEntry(\Entities\UsrListEntry $entry)
{ {
$this->__load(); $this->__load();
return parent::addUsrListEntry($entry); return parent::addUsrListEntry($entry);
} }
public function getEntries() public function getEntries()
{ {
$this->__load(); $this->__load();
return parent::getEntries(); return parent::getEntries();
} }
public function has(\User_Adapter $user) public function has(\User_Adapter $user)
{ {
$this->__load(); $this->__load();
return parent::has($user); return parent::has($user);
} }

View File

@@ -48,91 +48,78 @@ class UsrListOwner extends \Entities\UsrListOwner implements \Doctrine\ORM\Proxy
return (int) $this->_identifier["id"]; return (int) $this->_identifier["id"];
} }
$this->__load(); $this->__load();
return parent::getId(); return parent::getId();
} }
public function setUsrId($usrId) public function setUsrId($usrId)
{ {
$this->__load(); $this->__load();
return parent::setUsrId($usrId); return parent::setUsrId($usrId);
} }
public function getUsrId() public function getUsrId()
{ {
$this->__load(); $this->__load();
return parent::getUsrId(); return parent::getUsrId();
} }
public function setRole($role) public function setRole($role)
{ {
$this->__load(); $this->__load();
return parent::setRole($role); return parent::setRole($role);
} }
public function getRole() public function getRole()
{ {
$this->__load(); $this->__load();
return parent::getRole(); return parent::getRole();
} }
public function setCreated($created) public function setCreated($created)
{ {
$this->__load(); $this->__load();
return parent::setCreated($created); return parent::setCreated($created);
} }
public function getCreated() public function getCreated()
{ {
$this->__load(); $this->__load();
return parent::getCreated(); return parent::getCreated();
} }
public function setUpdated($updated) public function setUpdated($updated)
{ {
$this->__load(); $this->__load();
return parent::setUpdated($updated); return parent::setUpdated($updated);
} }
public function getUpdated() public function getUpdated()
{ {
$this->__load(); $this->__load();
return parent::getUpdated(); return parent::getUpdated();
} }
public function setList(\Entities\UsrList $list) public function setList(\Entities\UsrList $list)
{ {
$this->__load(); $this->__load();
return parent::setList($list); return parent::setList($list);
} }
public function getList() public function getList()
{ {
$this->__load(); $this->__load();
return parent::getList(); return parent::getList();
} }
public function setUser(\User_Adapter $user) public function setUser(\User_Adapter $user)
{ {
$this->__load(); $this->__load();
return parent::setUser($user); return parent::setUser($user);
} }
public function getUser() public function getUser()
{ {
$this->__load(); $this->__load();
return parent::getUser(); return parent::getUser();
} }

View File

@@ -606,59 +606,31 @@ class media_subdef extends media_abstract implements cache_cacheableInterface
$datas = array(); $datas = array();
if (method_exists($media, 'getWidth')) { $methods = array(
$datas[self::TC_DATA_WIDTH] = $media->getWidth(); self::TC_DATA_WIDTH => 'getWidth',
self::TC_DATA_HEIGHT => 'getHeight',
self::TC_DATA_FOCALLENGTH => 'getFocalLength',
self::TC_DATA_CHANNELS => 'getChannels',
self::TC_DATA_COLORDEPTH => 'getColorDepth',
self::TC_DATA_CAMERAMODEL => 'getCameraModel',
self::TC_DATA_FLASHFIRED => 'getFlashFired',
self::TC_DATA_APERTURE => 'getAperture',
self::TC_DATA_SHUTTERSPEED => 'getShutterSpeed',
self::TC_DATA_HYPERFOCALDISTANCE => 'getHyperfocalDistance',
self::TC_DATA_ISO => 'getISO',
self::TC_DATA_LIGHTVALUE => 'getLightValue',
self::TC_DATA_COLORSPACE => 'getColorSpace',
self::TC_DATA_DURATION => 'getDuration',
self::TC_DATA_FRAMERATE => 'getFrameRate',
self::TC_DATA_AUDIOSAMPLERATE => 'getAudioSampleRate',
self::TC_DATA_VIDEOCODEC => 'getVideoCodec',
self::TC_DATA_AUDIOCODEC => 'getAudioCodec',
);
foreach ($methods as $tc_name => $method) {
if (method_exists($media, $method)) {
$datas[$tc_name] = call_user_method($method, $media);
} }
if (method_exists($media, 'getHeight')) {
$datas[self::TC_DATA_HEIGHT] = $media->getHeight();
}
if (method_exists($media, 'getFocalLength')) {
$datas[self::TC_DATA_FOCALLENGTH] = $media->getFocalLength();
}
if (method_exists($media, 'getChannels')) {
$datas[self::TC_DATA_CHANNELS] = $media->getChannels();
}
if (method_exists($media, 'getColorDepth')) {
$datas[self::TC_DATA_COLORDEPTH] = $media->getColorDepth();
}
if (method_exists($media, 'getCameraModel')) {
$datas[self::TC_DATA_CAMERAMODEL] = $media->getCameraModel();
}
if (method_exists($media, 'getFlashFired')) {
$datas[self::TC_DATA_FLASHFIRED] = $media->getFlashFired();
}
if (method_exists($media, 'getAperture')) {
$datas[self::TC_DATA_APERTURE] = $media->getAperture();
}
if (method_exists($media, 'getShutterSpeed')) {
$datas[self::TC_DATA_SHUTTERSPEED] = $media->getShutterSpeed();
}
if (method_exists($media, 'getHyperfocalDistance')) {
$datas[self::TC_DATA_HYPERFOCALDISTANCE] = $media->getHyperfocalDistance();
}
if (method_exists($media, 'getISO')) {
$datas[self::TC_DATA_ISO] = $media->getISO();
}
if (method_exists($media, 'getLightValue')) {
$datas[self::TC_DATA_LIGHTVALUE] = $media->getLightValue();
}
if (method_exists($media, 'getColorSpace')) {
$datas[self::TC_DATA_COLORSPACE] = $media->getColorSpace();
}
if (method_exists($media, 'getDuration')) {
$datas[self::TC_DATA_DURATION] = $media->getDuration();
}
if (method_exists($media, 'getFrameRate')) {
$datas[self::TC_DATA_FRAMERATE] = $media->getFrameRate();
}
if (method_exists($media, 'getAudioSampleRate')) {
$datas[self::TC_DATA_AUDIOSAMPLERATE] = $media->getAudioSampleRate();
}
if (method_exists($media, 'getVideoCodec')) {
$datas[self::TC_DATA_VIDEOCODEC] = $media->getVideoCodec();
}
if (method_exists($media, 'getAudioCodec')) {
$datas[self::TC_DATA_AUDIOCODEC] = $media->getAudioCodec();
} }
$datas[self::TC_DATA_LONGITUDE] = $media->getLongitude(); $datas[self::TC_DATA_LONGITUDE] = $media->getLongitude();
@@ -689,8 +661,10 @@ class media_subdef extends media_abstract implements cache_cacheableInterface
':dispatched' => 1, ':dispatched' => 1,
); );
if (in_array($media->getType(), array(Media::TYPE_IMAGE, Media::TYPE_VIDEO))) { if (method_exists($media, 'getWidth') && null !== $media->getWidth()) {
$params[':width'] = $media->getWidth(); $params[':width'] = $media->getWidth();
}
if (method_exists($media, 'getHeight') && null !== $media->getHeight()) {
$params[':height'] = $media->getHeight(); $params[':height'] = $media->getHeight();
} }

View File

@@ -86,7 +86,7 @@ class module_console_systemConfigCheck extends Command
{ {
$hasError = false; $hasError = false;
foreach ($constraints as $constraint) { foreach ($constraints as $constraint) {
if ( ! $hasError && ! $this->processConstraint($constraint, $output)) { if ( ! $this->processConstraint($constraint, $output)) {
$hasError = true; $hasError = true;
} }
} }

4
lib/classes/module/console/taskrun.class.php Executable file → Normal file
View File

@@ -97,7 +97,9 @@ class module_console_taskrun extends Command
} }
} }
$logger = new Logger('Task logger'); $core = \bootstrap::getCore();
$logger = $core['monolog'];
if ($input->getOption('verbose')) { if ($input->getOption('verbose')) {
$handler = new Handler\StreamHandler(fopen('php://stdout', 'a')); $handler = new Handler\StreamHandler(fopen('php://stdout', 'a'));

View File

@@ -53,6 +53,22 @@ class patch_370a6 implements patchInterface
public function apply(base &$databox) public function apply(base &$databox)
{ {
$structure = $databox->get_structure();
$DOM = new DOMDocument();
$DOM->loadXML($structure);
$xpath = new DOMXpath($DOM);
foreach($xpath->query('/record/subdefs/subdefgroup[@name="video"]/subdef[@name="preview"]/acodec') as $node){
$node->nodeValue = 'libfaac';
}
foreach($xpath->query('/record/subdefs/subdefgroup[@name="video"]/subdef[@name="preview"]/vcodec') as $node){
$node->nodeValue = 'libx264';
}
$databox->saveStructure($DOM);
$subdefgroups = $databox->get_subdef_structure(); $subdefgroups = $databox->get_subdef_structure();

View File

@@ -1003,51 +1003,17 @@ class record_adapter implements record_Interface, cache_cacheableInterface
$core['file-system']->chmod($subdefFile->getRealPath(), 0760); $core['file-system']->chmod($subdefFile->getRealPath(), 0760);
try { media_subdef::create($this, $name, $media);
$appbox = \appbox::get_instance(\bootstrap::getCore()); $appbox = \appbox::get_instance(\bootstrap::getCore());
$session = $appbox->get_session(); $session = $appbox->get_session();
$connbas = connection::getPDOConnection($this->get_sbas_id());
$sql = 'UPDATE subdef
SET file = :filename,
width = :width,
height = :height,
mime = :mime,
path = :path,
size = :size,
substit = 1
updated_on = now()
WHERE name = :name AND record_id = :record_id';
$params = array(
':record_id' => $this->record_id,
':name' => $name,
':filename' => $subdefFile->getFilename(),
':mime' => $subdefFile->getMimeType(),
':path' => $subdefFile->getPath(),
':filesize' => $subdefFile->getSize(),
);
if (method_exists($media, 'getWidth')) {
$params[':width'] = $media->getWidth();
}
if (method_exists($media, 'getHeight')) {
$params[':height'] = $media->getHeight();
}
$stmt = $connbas->prepare($sql);
$stmt->execute($params);
$subdef = $this->get_subdef($name);
$subdef->delete_data_from_cache();
$this->delete_data_from_cache(self::CACHE_SUBDEFS); $this->delete_data_from_cache(self::CACHE_SUBDEFS);
if ($meta_writable) { if ($meta_writable) {
$this->write_metas(); $this->write_metas();
} }
if ($name == 'document') { if ($name == 'document') {
$this->rebuild_subdefs(); $this->rebuild_subdefs();
} }
@@ -1056,9 +1022,6 @@ class record_adapter implements record_Interface, cache_cacheableInterface
$session->get_logger($this->get_databox()) $session->get_logger($this->get_databox())
->log($this, Session_Logger::EVENT_SUBSTITUTE, $type, ''); ->log($this, Session_Logger::EVENT_SUBSTITUTE, $type, '');
} catch (Exception $e) {
}
return $this; return $this;
} }
@@ -1380,7 +1343,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface
} }
$pathhd = databox::dispatch(trim($databox->get_sxml_structure()->path)); $pathhd = databox::dispatch(trim($databox->get_sxml_structure()->path));
$newname = $record->get_record_id() . "_document." . $file->getFile()->getExtension(); $newname = $record->get_record_id() . "_document." . pathinfo($file->getOriginalName(), PATHINFO_EXTENSION);
$core['file-system']->copy($file->getFile()->getRealPath(), $pathhd . $newname, true); $core['file-system']->copy($file->getFile()->getRealPath(), $pathhd . $newname, true);
@@ -1657,14 +1620,8 @@ class record_adapter implements record_Interface, cache_cacheableInterface
{ {
$subdefs = $databox->get_subdef_structure()->getSubdefGroup($this->get_type()); $subdefs = $databox->get_subdef_structure()->getSubdefGroup($this->get_type());
$Core = bootstrap::getCore();
if ( ! $logger) {
$logger = $Core['monolog'];
}
if ( ! $subdefs) { if ( ! $subdefs) {
$Core['monolog']->addInfo(sprintf('Nothing to do for %s', $this->get_type())); $logger->addInfo(sprintf('Nothing to do for %s', $this->get_type()));
return; return;
} }
@@ -1680,15 +1637,15 @@ class record_adapter implements record_Interface, cache_cacheableInterface
$pathdest = null; $pathdest = null;
if ($this->has_subdef($subdefname) && $this->get_subdef($subdefname)->is_physically_present()) { if ($this->has_subdef($subdefname) && $this->get_subdef($subdefname)->is_physically_present()) {
$pathdest = $this->get_subdef($subdefname)->get_pathfile(); $pathdest = $this->get_subdef($subdefname)->get_pathfile();
$this->get_subdef($subdefname)->remove_file(); $this->get_subdef($subdefname)->remove_file();
$logger->addInfo(sprintf('Removed old file for %s', $subdefname));
$this->clearSubdefCache($subdefname); $this->clearSubdefCache($subdefname);
} }
$pathdest = $this->generateSubdefPathname($subdef, $pathdest); $pathdest = $this->generateSubdefPathname($subdef, $pathdest);
$logger->addInfo(sprintf('Generating subdef to %s', $pathdest));
$this->generate_subdef($subdef, $pathdest, $logger); $this->generate_subdef($subdef, $pathdest, $logger);
if (file_exists($pathdest)) { if (file_exists($pathdest)) {
@@ -1732,6 +1689,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface
try { try {
if (null === $this->get_hd_file()) { if (null === $this->get_hd_file()) {
$logger->addInfo('No HD file found, aborting');
return; return;
} }

View File

@@ -39,6 +39,7 @@ class setup
, "phrasea2" , "phrasea2"
, "SimpleXML" , "SimpleXML"
, "sockets" , "sockets"
, "sqlite3"
, "xml" , "xml"
, "zip" , "zip"
, "zlib" , "zlib"
@@ -49,22 +50,23 @@ class setup
); );
protected static $PHP_CONF = array( protected static $PHP_CONF = array(
'output_buffering' => '4096' //INI_ALL 'output_buffering' => '4096' //INI_ALL
, 'memory_limit' => '1024M' //INI_ALL , 'memory_limit' => '2048M' //INI_ALL
, 'error_reporting' => '6143' //INI_ALL , 'error_reporting' => '6143' //INI_ALL
, 'default_charset' => 'UTF-8' //INI_ALL , 'default_charset' => 'UTF-8' //INI_ALL
, 'session.use_cookies' => '1' //INI_ALL , 'session.use_cookies' => 'on' //INI_ALL
, 'session.use_only_cookies' => '1' //INI_ALL , 'session.use_only_cookies' => 'on' //INI_ALL
, 'session.auto_start' => '0' //INI_ALL , 'session.auto_start' => 'off' //INI_ALL
, 'session.hash_function' => '1' //INI_ALL , 'session.hash_function' => 'on' //INI_ALL
, 'session.hash_bits_per_character' => '6' //INI_ALL , 'session.hash_bits_per_character' => '6' //INI_ALL
, 'allow_url_fopen' => 'on' //INI_ALL , 'allow_url_fopen' => 'on' //INI_ALL
, 'display_errors' => 'off' //INI_ALL , 'display_errors' => 'off' //INI_ALL
, 'display_startup_errors' => 'off' //INI_ALL , 'display_startup_errors' => 'off' //INI_ALL
, 'log_errors' => 'off' //INI_ALL , 'log_errors' => 'off' //INI_ALL
, 'session.cache_limiter' => '' //INI_ALL
); );
protected static $PHP_REQ = array( protected static $PHP_REQ = array(
'safe_mode' => 'off' 'safe_mode' => 'off'
, 'file_uploads' => '1' , 'file_uploads' => 'on'
, 'magic_quotes_runtime' => 'off' //INI_ALL , 'magic_quotes_runtime' => 'off' //INI_ALL
, 'magic_quotes_gpc' => 'off' //INI_PER_DIR -- just for check , 'magic_quotes_gpc' => 'off' //INI_PER_DIR -- just for check
); );
@@ -191,17 +193,21 @@ class setup
public static function check_binaries(registryInterface $registry) public static function check_binaries(registryInterface $registry)
{ {
$finder = new \Symfony\Component\Process\ExecutableFinder();
$binaries = array( $binaries = array(
'PHP CLI' => $registry->get('GV_cli'), 'PHP CLI' => $registry->get('GV_cli', $finder->find('php')),
'ImageMagick (convert)' => $registry->get('GV_imagick'), 'ImageMagick (convert)' => $registry->get('GV_imagick', $finder->find('convert')),
'PDF 2 SWF' => $registry->get('GV_pdf2swf'), 'PDF 2 SWF' => $registry->get('GV_pdf2swf', $finder->find('pdf2swf')),
'Unoconv' => $registry->get('GV_unoconv'), 'Unoconv' => $registry->get('GV_unoconv', $finder->find('unoconv')),
'SWFextract' => $registry->get('GV_swf_extract'), 'SWFextract' => $registry->get('GV_swf_extract', $finder->find('swfextract')),
'SWFrender' => $registry->get('GV_swf_render'), 'SWFrender' => $registry->get('GV_swf_render', $finder->find('swfrender')),
'MP4Box' => $registry->get('GV_mp4box'), 'MP4Box' => $registry->get('GV_mp4box', $finder->find('MP4Box')),
'xpdf (pdf2text)' => $registry->get('GV_pdftotext'), 'xpdf (pdf2text)' => $registry->get('GV_pdftotext', $finder->find('pdftotext')),
'ImageMagick (composite)' => $registry->get('GV_pathcomposite'), 'ImageMagick (composite)' => $registry->get('GV_pathcomposite', $finder->find('composite')),
'FFmpeg' => $registry->get('GV_ffmpeg'), 'FFmpeg' => $registry->get('GV_ffmpeg', $finder->find('ffmpeg')),
'FFprobe' => $registry->get('GV_ffprobe', $finder->find('ffprobe')),
'phraseanet_indexer' => $finder->find('phraseanet_indexer'),
); );
$constraints = array(); $constraints = array();
@@ -601,21 +607,21 @@ class setup
public static function check_php_configuration() public static function check_php_configuration()
{ {
$nonblockers = array('log_errors', 'display_startup_errors', 'display_errors'); $nonblockers = array('log_errors', 'display_startup_errors', 'display_errors', 'output_buffering');
$constraints = array(); $constraints = array();
foreach (self::$PHP_REQ as $conf => $value) { foreach (self::$PHP_REQ as $conf => $value) {
if (($tmp = self::test_php_conf($conf, $value)) === false) { if (($tmp = self::test_php_conf($conf, $value)) !== $value) {
$constraints[] = new Setup_Constraint($conf, false, sprintf(_('setup::Configuration mauvaise : pour la variable %1$s, configuration donnee : %2$s ; attendue : %3$s'), $conf, $tmp, $value), true); $constraints[] = new Setup_Constraint($conf, false, sprintf(_('setup::Configuration mauvaise : pour la variable %1$s, configuration donnee : %2$s ; attendue : %3$s'), $conf, $tmp, $value), true);
} else { } else {
$constraints[] = new Setup_Constraint($conf, true, sprintf('%s = %s => OK', $conf, $value), true); $constraints[] = new Setup_Constraint($conf, true, sprintf('%s = `%s` => OK', $conf, $value), true);
} }
} }
foreach (self::$PHP_CONF as $conf => $value) { foreach (self::$PHP_CONF as $conf => $value) {
if (($tmp = self::test_php_conf($conf, $value)) === false) { if (($tmp = self::test_php_conf($conf, $value)) !== $value) {
$constraints[] = new Setup_Constraint($conf, false, sprintf('Bad configuration for %1$s var ; %2$s given - %3$s supposed', $conf, $tmp, $value), ! in_array($conf, $nonblockers)); $constraints[] = new Setup_Constraint($conf, false, sprintf('Bad configuration for %1$s, found `%2$s`, required `%3$s`', $conf, $tmp, $value), ! in_array($conf, $nonblockers));
} else { } else {
$constraints[] = new Setup_Constraint($conf, true, sprintf('%s = %s => OK', $conf, $value), ! in_array($conf, $nonblockers)); $constraints[] = new Setup_Constraint($conf, true, sprintf('%s = `%s` => OK', $conf, $value), ! in_array($conf, $nonblockers));
} }
} }
@@ -674,7 +680,7 @@ class setup
private static function test_php_conf($conf, $value) private static function test_php_conf($conf, $value)
{ {
$is_flag = false; $is_flag = false;
$flags = array('on', 'off', '1', '0', ''); $flags = array('on', 'off', '1', '0');
if (in_array(strtolower($value), $flags)) if (in_array(strtolower($value), $flags))
$is_flag = true; $is_flag = true;
$current = ini_get($conf); $current = ini_get($conf);
@@ -683,18 +689,17 @@ class setup
if (($current === '' || $current === 'off' || $current === '0') && $is_flag) { if (($current === '' || $current === 'off' || $current === '0') && $is_flag) {
if ($value === 'off' || $value === '0' || $value === '') { if ($value === 'off' || $value === '0' || $value === '') {
return $current; return 'off';
} }
} }
if (($current === '1' || $current === 'on') && $is_flag) { if (($current === '1' || $current === 'on') && $is_flag) {
if ($value === 'on' || $value === '1') { if ($value === 'on' || $value === '1') {
return 'on';
}
}
return $current; return $current;
} }
}
if ($current === $value) {
return $current;
}
}
public static function rollback(connection_pdo $conn, connection_pdo $connbas = null) public static function rollback(connection_pdo $conn, connection_pdo $connbas = null)
{ {

View File

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<record> <record>
<path>{{datapathnoweb}}{{basename}}/documents</path> <path>{{datapathnoweb}}{{basename}}/documents</path>
<subdefs> <subdefs>
<subdefgroup name="image"> <subdefgroup name="image">
<subdef class="preview" name="preview" downloadable="true"> <subdef class="preview" name="preview" downloadable="true">
@@ -12,6 +11,7 @@
<strip>no</strip> <strip>no</strip>
<quality>75</quality> <quality>75</quality>
<meta>yes</meta> <meta>yes</meta>
<devices>screen</devices>
<mediatype>image</mediatype> <mediatype>image</mediatype>
<label lang="fr">Prévisualisation</label> <label lang="fr">Prévisualisation</label>
<label lang="en">Preview</label> <label lang="en">Preview</label>
@@ -24,13 +24,119 @@
<strip>yes</strip> <strip>yes</strip>
<quality>75</quality> <quality>75</quality>
<meta>no</meta> <meta>no</meta>
<devices>screen</devices>
<mediatype>image</mediatype> <mediatype>image</mediatype>
<label lang="fr">Imagette</label> <label lang="fr">Imagette</label>
<label lang="en">Thumbnail</label> <label lang="en">Thumbnail</label>
</subdef> </subdef>
<subdef class="preview" name="preview_mobile" downloadable="false">
<size>480</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Prévisualisation Mobile</label>
<label lang="en">Mobile Preview</label>
</subdef>
<subdef class="thumbnail" name="thumbnail_mobile" downloadable="false">
<size>150</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Imagette mobile</label>
<label lang="en">Mobile Thumbnail</label>
</subdef>
</subdefgroup> </subdefgroup>
<subdefgroup name="video"> <subdefgroup name="video">
<subdef class="preview" name="preview_mobile_webm" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>video</mediatype>
<bitrate>300</bitrate>
<threads>2</threads>
<GOPsize>25</GOPsize>
<size>480</size>
<fps>15</fps>
<devices>handheld</devices>
<vcodec>libvpx</vcodec>
<acodec>libvorbis</acodec>
<label lang="fr">Prévisualisation mobile WebM</label>
<label lang="en">WebM mobile Preview</label>
</subdef>
<subdef class="preview" name="preview_mobile_ogg" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>video</mediatype>
<bitrate>300</bitrate>
<threads>2</threads>
<GOPsize>25</GOPsize>
<size>480</size>
<fps>15</fps>
<devices>handheld</devices>
<vcodec>libtheora</vcodec>
<acodec>libvorbis</acodec>
<label lang="fr">Prévisualisation mobile Ogg</label>
<label lang="en">Ogg mobile Preview</label>
</subdef>
<subdef class="preview" name="preview_mobile_x264" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>video</mediatype>
<bitrate>300</bitrate>
<threads>2</threads>
<GOPsize>25</GOPsize>
<size>480</size>
<fps>15</fps>
<devices>handheld</devices>
<acodec>libfaac</acodec>
<vcodec>libx264</vcodec>
<label lang="fr">Prévisualisation X264</label>
<label lang="en">X264 Preview</label>
</subdef>
<subdef class="preview" name="preview_webm" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>video</mediatype>
<devices>screen</devices>
<bitrate>1000</bitrate>
<threads>1</threads>
<acodec>libvorbis</acodec>
<GOPsize>25</GOPsize>
<size>800</size>
<fps>15</fps>
<vcodec>libvpx</vcodec>
<label lang="fr">Prévisualisation WebM</label>
<label lang="en">WebM Preview</label>
</subdef>
<subdef class="preview" name="preview_ogg" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>video</mediatype>
<devices>screen</devices>
<bitrate>1000</bitrate>
<threads>1</threads>
<acodec>libvorbis</acodec>
<GOPsize>25</GOPsize>
<size>800</size>
<fps>15</fps>
<vcodec>libtheora</vcodec>
<label lang="fr">Prévisualisation Ogg</label>
<label lang="en">Ogg Preview</label>
</subdef>
<subdef class="thumbnail" name="thumbnail_mobile" downloadable="false">
<size>150</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Imagette mobile</label>
<label lang="en">Mobile Thumbnail</label>
</subdef>
<subdef class="preview" name="preview" downloadable="true"> <subdef class="preview" name="preview" downloadable="true">
<path>{{datapathnoweb}}{{basename}}/subdefs</path> <path>{{datapathnoweb}}{{basename}}/subdefs</path>
<size>800</size> <size>800</size>
@@ -38,6 +144,7 @@
<writeDatas>yes</writeDatas> <writeDatas>yes</writeDatas>
<acodec>libfaac</acodec> <acodec>libfaac</acodec>
<vcodec>libx264</vcodec> <vcodec>libx264</vcodec>
<devices>screen</devices>
<bitrate>1000</bitrate> <bitrate>1000</bitrate>
<threads>8</threads> <threads>8</threads>
<fps>15</fps> <fps>15</fps>
@@ -49,6 +156,7 @@
<size>200</size> <size>200</size>
<mediatype>gif</mediatype> <mediatype>gif</mediatype>
<delay>500</delay> <delay>500</delay>
<devices>screen</devices>
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<label lang="fr">Animation GIF</label> <label lang="fr">Animation GIF</label>
<label lang="en">GIF Animation</label> <label lang="en">GIF Animation</label>
@@ -56,34 +164,57 @@
<subdef class="thumbnail" name="thumbnail" downloadable="true"> <subdef class="thumbnail" name="thumbnail" downloadable="true">
<path>{{datapathnoweb}}{{basename}}/subdefs</path> <path>{{datapathnoweb}}{{basename}}/subdefs</path>
<size>200</size> <size>200</size>
<devices>screen</devices>
<mediatype>image</mediatype> <mediatype>image</mediatype>
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<label lang="fr">Imagette</label> <label lang="fr">Imagette</label>
<label lang="en">Thumbnail</label> <label lang="en">Thumbnail</label>
</subdef> </subdef>
</subdefgroup> </subdefgroup>
<subdefgroup name="audio"> <subdefgroup name="audio">
<subdef class="preview" name="preview" downloadable="true"> <subdef class="preview" name="preview" downloadable="true">
<path>{{datapathnoweb}}{{basename}}/subdefs</path> <path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>audio</mediatype> <mediatype>audio</mediatype>
<writeDatas>yes</writeDatas> <writeDatas>yes</writeDatas>
<devices>screen</devices>
<label lang="fr">Prévisualisation</label> <label lang="fr">Prévisualisation</label>
<label lang="en">Preview</label> <label lang="en">Preview</label>
</subdef> </subdef>
<subdef class="thumbnail" name="thumbnail" downloadable="true"> <subdef class="thumbnail" name="thumbnail" downloadable="true">
<path>{{datapathnoweb}}{{basename}}/subdefs</path> <path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype> <mediatype>image</mediatype>
<size>200</size>
<devices>screen</devices>
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<label lang="fr">Imagette</label> <label lang="fr">Imagette</label>
<label lang="en">Thumbnail</label> <label lang="en">Thumbnail</label>
</subdef> </subdef>
<subdef class="preview" name="preview_mobile" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>audio</mediatype>
<devices>handheld</devices>
<label lang="fr">Prévisualisation Mobile</label>
<label lang="en">Mobile Preview</label>
</subdef>
<subdef class="thumbnail" name="thumbnail_mobile" downloadable="false">
<size>150</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Imagette mobile</label>
<label lang="en">Mobile Thumbnail</label>
</subdef>
</subdefgroup> </subdefgroup>
<subdefgroup name="document"> <subdefgroup name="document">
<subdef class="preview" name="preview" downloadable="false"> <subdef class="preview" name="preview" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path> <path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>flexpaper</mediatype> <mediatype>flexpaper</mediatype>
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<devices>screen</devices>
<label lang="fr">Prévisualisation</label> <label lang="fr">Prévisualisation</label>
<label lang="en">Preview</label> <label lang="en">Preview</label>
</subdef> </subdef>
@@ -94,9 +225,29 @@
<dpi>72</dpi> <dpi>72</dpi>
<size>200</size> <size>200</size>
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<devices>screen</devices>
<label lang="fr">Imagette</label> <label lang="fr">Imagette</label>
<label lang="en">Thumbnail</label> <label lang="en">Thumbnail</label>
</subdef> </subdef>
<subdef class="preview" name="preview_mobile" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>flexpaper</mediatype>
<devices>handheld</devices>
<label lang="fr">Prévisualisation Mobile</label>
<label lang="en">Mobile Preview</label>
</subdef>
<subdef class="thumbnail" name="thumbnail_mobile" downloadable="false">
<size>150</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Imagette mobile</label>
<label lang="en">Mobile Thumbnail</label>
</subdef>
</subdefgroup> </subdefgroup>
<subdefgroup name="flash"> <subdefgroup name="flash">
<subdef class="preview" name="preview" downloadable="false"> <subdef class="preview" name="preview" downloadable="false">
@@ -106,6 +257,7 @@
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<method>resample</method> <method>resample</method>
<dpi>72</dpi> <dpi>72</dpi>
<devices>screen</devices>
<label lang="fr">Prévisualisation</label> <label lang="fr">Prévisualisation</label>
<label lang="en">Preview</label> <label lang="en">Preview</label>
</subdef> </subdef>
@@ -115,9 +267,34 @@
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<method>resample</method> <method>resample</method>
<dpi>72</dpi> <dpi>72</dpi>
<devices>screen</devices>
<label lang="fr">Imagette</label> <label lang="fr">Imagette</label>
<label lang="en">Thumbnail</label> <label lang="en">Thumbnail</label>
</subdef> </subdef>
<subdef class="preview" name="preview_mobile" downloadable="false">
<size>480</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Prévisualisation Mobile</label>
<label lang="en">Mobile Preview</label>
</subdef>
<subdef class="thumbnail" name="thumbnail_mobile" downloadable="false">
<size>150</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Imagette mobile</label>
<label lang="en">Mobile Thumbnail</label>
</subdef>
</subdefgroup> </subdefgroup>
</subdefs> </subdefs>

View File

@@ -11,6 +11,7 @@
<strip>no</strip> <strip>no</strip>
<quality>75</quality> <quality>75</quality>
<meta>yes</meta> <meta>yes</meta>
<devices>screen</devices>
<mediatype>image</mediatype> <mediatype>image</mediatype>
<label lang="fr">Prévisualisation</label> <label lang="fr">Prévisualisation</label>
<label lang="en">Preview</label> <label lang="en">Preview</label>
@@ -23,12 +24,119 @@
<strip>yes</strip> <strip>yes</strip>
<quality>75</quality> <quality>75</quality>
<meta>no</meta> <meta>no</meta>
<devices>screen</devices>
<mediatype>image</mediatype> <mediatype>image</mediatype>
<label lang="fr">Imagette</label> <label lang="fr">Imagette</label>
<label lang="en">Thumbnail</label> <label lang="en">Thumbnail</label>
</subdef> </subdef>
<subdef class="preview" name="preview_mobile" downloadable="false">
<size>480</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Prévisualisation Mobile</label>
<label lang="en">Mobile Preview</label>
</subdef>
<subdef class="thumbnail" name="thumbnail_mobile" downloadable="false">
<size>150</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Imagette mobile</label>
<label lang="en">Mobile Thumbnail</label>
</subdef>
</subdefgroup> </subdefgroup>
<subdefgroup name="video"> <subdefgroup name="video">
<subdef class="preview" name="preview_mobile_webm" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>video</mediatype>
<bitrate>300</bitrate>
<threads>2</threads>
<GOPsize>25</GOPsize>
<size>480</size>
<fps>15</fps>
<devices>handheld</devices>
<vcodec>libvpx</vcodec>
<acodec>libvorbis</acodec>
<label lang="fr">Prévisualisation mobile WebM</label>
<label lang="en">WebM mobile Preview</label>
</subdef>
<subdef class="preview" name="preview_mobile_ogg" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>video</mediatype>
<bitrate>300</bitrate>
<threads>2</threads>
<GOPsize>25</GOPsize>
<size>480</size>
<fps>15</fps>
<devices>handheld</devices>
<vcodec>libtheora</vcodec>
<acodec>libvorbis</acodec>
<label lang="fr">Prévisualisation mobile Ogg</label>
<label lang="en">Ogg mobile Preview</label>
</subdef>
<subdef class="preview" name="preview_mobile_x264" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>video</mediatype>
<bitrate>300</bitrate>
<threads>2</threads>
<GOPsize>25</GOPsize>
<size>480</size>
<fps>15</fps>
<devices>handheld</devices>
<acodec>libfaac</acodec>
<vcodec>libx264</vcodec>
<label lang="fr">Prévisualisation X264</label>
<label lang="en">X264 Preview</label>
</subdef>
<subdef class="preview" name="preview_webm" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>video</mediatype>
<devices>screen</devices>
<bitrate>1000</bitrate>
<threads>1</threads>
<acodec>libvorbis</acodec>
<GOPsize>25</GOPsize>
<size>800</size>
<fps>15</fps>
<vcodec>libvpx</vcodec>
<label lang="fr">Prévisualisation WebM</label>
<label lang="en">WebM Preview</label>
</subdef>
<subdef class="preview" name="preview_ogg" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>video</mediatype>
<devices>screen</devices>
<bitrate>1000</bitrate>
<threads>1</threads>
<acodec>libvorbis</acodec>
<GOPsize>25</GOPsize>
<size>800</size>
<fps>15</fps>
<vcodec>libtheora</vcodec>
<label lang="fr">Prévisualisation Ogg</label>
<label lang="en">Ogg Preview</label>
</subdef>
<subdef class="thumbnail" name="thumbnail_mobile" downloadable="false">
<size>150</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Imagette mobile</label>
<label lang="en">Mobile Thumbnail</label>
</subdef>
<subdef class="preview" name="preview" downloadable="true"> <subdef class="preview" name="preview" downloadable="true">
<path>{{datapathnoweb}}{{basename}}/subdefs</path> <path>{{datapathnoweb}}{{basename}}/subdefs</path>
<size>800</size> <size>800</size>
@@ -36,6 +144,7 @@
<writeDatas>yes</writeDatas> <writeDatas>yes</writeDatas>
<acodec>libfaac</acodec> <acodec>libfaac</acodec>
<vcodec>libx264</vcodec> <vcodec>libx264</vcodec>
<devices>screen</devices>
<bitrate>1000</bitrate> <bitrate>1000</bitrate>
<threads>8</threads> <threads>8</threads>
<fps>15</fps> <fps>15</fps>
@@ -47,6 +156,7 @@
<size>200</size> <size>200</size>
<mediatype>gif</mediatype> <mediatype>gif</mediatype>
<delay>500</delay> <delay>500</delay>
<devices>screen</devices>
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<label lang="fr">Animation GIF</label> <label lang="fr">Animation GIF</label>
<label lang="en">GIF Animation</label> <label lang="en">GIF Animation</label>
@@ -54,6 +164,7 @@
<subdef class="thumbnail" name="thumbnail" downloadable="true"> <subdef class="thumbnail" name="thumbnail" downloadable="true">
<path>{{datapathnoweb}}{{basename}}/subdefs</path> <path>{{datapathnoweb}}{{basename}}/subdefs</path>
<size>200</size> <size>200</size>
<devices>screen</devices>
<mediatype>image</mediatype> <mediatype>image</mediatype>
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<label lang="fr">Imagette</label> <label lang="fr">Imagette</label>
@@ -65,6 +176,7 @@
<path>{{datapathnoweb}}{{basename}}/subdefs</path> <path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>audio</mediatype> <mediatype>audio</mediatype>
<writeDatas>yes</writeDatas> <writeDatas>yes</writeDatas>
<devices>screen</devices>
<label lang="fr">Prévisualisation</label> <label lang="fr">Prévisualisation</label>
<label lang="en">Preview</label> <label lang="en">Preview</label>
</subdef> </subdef>
@@ -72,16 +184,37 @@
<path>{{datapathnoweb}}{{basename}}/subdefs</path> <path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype> <mediatype>image</mediatype>
<size>200</size> <size>200</size>
<devices>screen</devices>
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<label lang="fr">Imagette</label> <label lang="fr">Imagette</label>
<label lang="en">Thumbnail</label> <label lang="en">Thumbnail</label>
</subdef> </subdef>
<subdef class="preview" name="preview_mobile" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>audio</mediatype>
<devices>handheld</devices>
<label lang="fr">Prévisualisation Mobile</label>
<label lang="en">Mobile Preview</label>
</subdef>
<subdef class="thumbnail" name="thumbnail_mobile" downloadable="false">
<size>150</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Imagette mobile</label>
<label lang="en">Mobile Thumbnail</label>
</subdef>
</subdefgroup> </subdefgroup>
<subdefgroup name="document"> <subdefgroup name="document">
<subdef class="preview" name="preview" downloadable="false"> <subdef class="preview" name="preview" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path> <path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>flexpaper</mediatype> <mediatype>flexpaper</mediatype>
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<devices>screen</devices>
<label lang="fr">Prévisualisation</label> <label lang="fr">Prévisualisation</label>
<label lang="en">Preview</label> <label lang="en">Preview</label>
</subdef> </subdef>
@@ -92,9 +225,29 @@
<dpi>72</dpi> <dpi>72</dpi>
<size>200</size> <size>200</size>
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<devices>screen</devices>
<label lang="fr">Imagette</label> <label lang="fr">Imagette</label>
<label lang="en">Thumbnail</label> <label lang="en">Thumbnail</label>
</subdef> </subdef>
<subdef class="preview" name="preview_mobile" downloadable="false">
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>flexpaper</mediatype>
<devices>handheld</devices>
<label lang="fr">Prévisualisation Mobile</label>
<label lang="en">Mobile Preview</label>
</subdef>
<subdef class="thumbnail" name="thumbnail_mobile" downloadable="false">
<size>150</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Imagette mobile</label>
<label lang="en">Mobile Thumbnail</label>
</subdef>
</subdefgroup> </subdefgroup>
<subdefgroup name="flash"> <subdefgroup name="flash">
<subdef class="preview" name="preview" downloadable="false"> <subdef class="preview" name="preview" downloadable="false">
@@ -104,6 +257,7 @@
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<method>resample</method> <method>resample</method>
<dpi>72</dpi> <dpi>72</dpi>
<devices>screen</devices>
<label lang="fr">Prévisualisation</label> <label lang="fr">Prévisualisation</label>
<label lang="en">Preview</label> <label lang="en">Preview</label>
</subdef> </subdef>
@@ -113,14 +267,37 @@
<writeDatas>no</writeDatas> <writeDatas>no</writeDatas>
<method>resample</method> <method>resample</method>
<dpi>72</dpi> <dpi>72</dpi>
<devices>screen</devices>
<label lang="fr">Imagette</label> <label lang="fr">Imagette</label>
<label lang="en">Thumbnail</label> <label lang="en">Thumbnail</label>
</subdef> </subdef>
<subdef class="preview" name="preview_mobile" downloadable="false">
<size>480</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Prévisualisation Mobile</label>
<label lang="en">Mobile Preview</label>
</subdef>
<subdef class="thumbnail" name="thumbnail_mobile" downloadable="false">
<size>150</size>
<resolution>72</resolution>
<strip>yes</strip>
<quality>75</quality>
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
<mediatype>image</mediatype>
<meta>no</meta>
<devices>handheld</devices>
<label lang="fr">Imagette mobile</label>
<label lang="en">Mobile Thumbnail</label>
</subdef>
</subdefgroup> </subdefgroup>
</subdefs> </subdefs>
<description> <description>
<Objet src="IPTC:ObjectName" /> <Objet src="IPTC:ObjectName" />
<Categorie src="IPTC:Category"/> <Categorie src="IPTC:Category"/>

View File

@@ -0,0 +1,37 @@
{% macro format(arraySubdefs, displayWidth, displayHeight, extraclass, session, wrap)%}
{% set displayWidth = displayWidth %}
{% set displayHeight = displayHeight|default(displayWidth) %}
{% if wrap %}
<div style="width:{{ displayWidth | round }}px;height:{{ displayHeight | round }}px;" class="thumb_wrapper {{ extraclass | default('') }}">
{% endif %}
<div class="record record_video imgTips" style="position:relative;width:{{ displayWidth | round }}px;height:{{ displayHeight | round }}px;">
<video id="video_preview_tooltip" class="videoTips video-js vjs-default-skin" controls
preload="auto" xposter="my_video_poster.png" width="{{ displayWidth|round }}" height="{{ displayHeight | round }}"
data-setup="{}">
{% for name, subdef in arraySubdefs %}
{% if session.is_authenticated() == true %}
{% set url = subdef.get_url() %}
{% else %}
{% set url = subdef.get_permalink().get_url() %}
{% endif %}
<source src="{{ url }}" type='{{ subdef.get_mime() }}'>
{% endfor %}
</video>
</div>
<script type="text/javascript">
_V_("video_preview_tooltip", {}, function(){
});
</script>
{% if wrap %}
</div>
{% endif %}
{% endmacro %}

View File

@@ -1,5 +1,6 @@
{% import 'common/thumbnail.html' as thumbnail %} {% import 'common/thumbnail.html' as thumbnail %}
{% import 'common/HTML5Video.html.twig' as thumbnailHTML5 %}
{% if not_wrapped is defined and not_wrapped %} {% if not_wrapped is defined and not_wrapped %}
{% set wrap = false %} {% set wrap = false %}
@@ -7,10 +8,27 @@
{% set wrap = true %} {% set wrap = true %}
{% endif %} {% endif %}
{% set previewHtml5 = null %}
{% if user.ACL().has_access_to_subdef(record, 'preview') %} {% if user.ACL().has_access_to_subdef(record, 'preview') %}
{% if record.get_type() == 'video' %}
{% set previewHtml5 = record.getSubdfefByDeviceAndMime(constant('\\databox_subdef::DEVICE_SCREEN'), ['video/ogg', 'video/mp4', 'video/webm']) %}
{% if previewHtml5|length < 3 %}
{% set previewHtml5 = null %}
{% endif %}
{% endif %}
{% set preview_obj = record.get_preview() %} {% set preview_obj = record.get_preview() %}
{% else %} {% else %}
{% set preview_obj = record.get_thumbnail() %} {% set preview_obj = record.get_thumbnail() %}
{% endif %} {% endif %}
{% set width = preview_obj.get_width() %}
{% set height = preview_obj.get_height() %}
{% if previewHtml5 %}
{{ thumbnailHTML5.format(previewHtml5, preview_obj.get_width(), preview_obj.get_height(), '', session, wrap) }}
{% else %}
{{ thumbnail.format(preview_obj, preview_obj.get_width(), preview_obj.get_height(), '', session, wrap) }} {{ thumbnail.format(preview_obj, preview_obj.get_width(), preview_obj.get_height(), '', session, wrap) }}
{% endif %}

View File

@@ -92,7 +92,7 @@
{% if record.get_formated_duration() %} {% if record.get_formated_duration() %}
{% trans 'Duree' %} : {% trans 'Duree' %} :
{{record.get_formated_duration() | round(2) }} {{ record.get_formated_duration() }}
<br /> <br />
{% endif %} {% endif %}
{% if record.get_technical_infos(constant('media_subdef::TC_DATA_FRAMERATE')) is not empty %} {% if record.get_technical_infos(constant('media_subdef::TC_DATA_FRAMERATE')) is not empty %}

View File

@@ -121,10 +121,13 @@
</div> </div>
<div class="PNB frame_video"> <div class="PNB frame_video">
{% set previewHtml5 = record.getSubdfefByDeviceAndMime(constant('\\databox_subdef::DEVICE_SCREEN'), ['video/ogg', 'video/mp4', 'video/webm']) %}
<video id="thumb_video" controls="" preload="auto"> <video id="thumb_video" controls="" preload="auto">
<source id="mp4" type="video/mp4" src="/web//db_install/ThemeFromShaftb-boyRemix_512kb.mp4" /> {% for subdef in previewHtml5 %}
<source id="ogv" type="video/ogg" src="/web//db_install/ThemeFromShaftb-boyRemix.ogv" /> <source type="{{ subdef.get_mime() }}" src="{{ subdef.get_url() }}" />
<p>No HTML5.</p> {% endfor %}
</video> </video>
</div> </div>

View File

@@ -8,6 +8,7 @@ use Symfony\Component\HttpFoundation\Response;
class ApplicationOverviewTest extends PhraseanetWebTestCaseAuthenticatedAbstract class ApplicationOverviewTest extends PhraseanetWebTestCaseAuthenticatedAbstract
{ {
public function setUp() public function setUp()
{ {
parent::setUp(); parent::setUp();
@@ -37,6 +38,45 @@ class ApplicationOverviewTest extends PhraseanetWebTestCaseAuthenticatedAbstract
$this->assertEquals(404, $response->getStatusCode()); $this->assertEquals(404, $response->getStatusCode());
} }
function testEtag()
{
$tmp = tempnam(sys_get_temp_dir(), 'testEtag');
copy(__DIR__ . '/../../../testfiles/cestlafete.jpg', $tmp);
$media = \MediaVorus\MediaVorus::guess(new \SplFileInfo($tmp));
$file = new Alchemy\Phrasea\Border\File($media, self::$collection);
$record = record_adapter::createFromFile($file);
$crawler = $this->client->request('GET', '/datafiles/' . $record->get_sbas_id() . '/' . $record->get_record_id() . '/preview/');
$response = $this->client->getResponse();
/* @var $response \Symfony\Component\HttpFoundation\Response */
$this->assertTrue($response->isOk());
$this->assertNull($response->getEtag());
$this->assertNull($response->getLastModified());
$this->assertNull($response->getMaxAge());
$this->assertNull($response->getTtl());
$this->assertEquals(0, $response->getAge());
$this->assertNull($response->getExpires());
$record->generate_subdefs($record->get_databox(), self::$core['monolog']);
$crawler = $this->client->request('GET', '/datafiles/' . $record->get_sbas_id() . '/' . $record->get_record_id() . '/preview/');
$response = $this->client->getResponse();
/* @var $response \Symfony\Component\HttpFoundation\Response */
$this->assertTrue($response->isOk());
$this->assertNotNull($response->getEtag());
$this->assertInstanceOf('DateTime', $response->getLastModified());
$this->assertNull($response->getMaxAge());
$this->assertNull($response->getTtl());
$this->assertGreaterThanOrEqual(0, $response->getAge());
$this->assertNull($response->getExpires());
unlink($tmp);
}
function testDatafilesRouteNotAuthenticated() function testDatafilesRouteNotAuthenticated()
{ {
$appbox = appbox::get_instance(\bootstrap::getCore()); $appbox = appbox::get_instance(\bootstrap::getCore());

View File

@@ -29,7 +29,7 @@ if ( ! is_executable($composer)) {
} }
system($composer . ' self-update'); system($composer . ' self-update');
system($composer . ' update'); system($composer . ' install');
system('git submodule init'); system('git submodule init');
system('git submodule update'); system('git submodule update');

View File

@@ -33,7 +33,7 @@ if ( ! file_exists($composer)) {
} }
system($phpDir . 'php ' . $composer . ' self-update'); system($phpDir . 'php ' . $composer . ' self-update');
system($phpDir . 'php ' . $composer . ' update'); system($phpDir . 'php ' . $composer . ' install');
system($gitDir . 'git submodule init'); system($gitDir . 'git submodule init');
system($gitDir . 'git submodule update'); system($gitDir . 'git submodule update');

View File

@@ -228,8 +228,9 @@
var width = 'auto'; var width = 'auto';
var height = 'auto'; var height = 'auto';
var ratio = 1; var ratio = 1;
var resizeImgTips = false; var resizeImgTips = resizeVideoTips = false;
var $imgTips = $('#' + settings($.tooltip.current).id + ' .imgTips'); var $imgTips = $('#' + settings($.tooltip.current).id + ' .imgTips');
var $videoTips = $('#' + settings($.tooltip.current).id + ' .videoTips');
if ($imgTips[0] && $('#' + settings($.tooltip.current).id + ' .noToolTipResize').length === 0) { if ($imgTips[0] && $('#' + settings($.tooltip.current).id + ' .noToolTipResize').length === 0) {
resizeImgTips = true; resizeImgTips = true;
@@ -239,6 +240,14 @@
$imgTips.css({top:'0px',left:'0px'}); $imgTips.css({top:'0px',left:'0px'});
} }
if ($videoTips[0] && $('#' + settings($.tooltip.current).id + ' .noToolTipResize').length === 0) {
resizeVideoTips = true;
width = parseInt($videoTips.attr('width'));
height = parseInt($videoTips.attr('height'));
ratio = width/height;
$videoTips.css({top:'0px',left:'0px'});
}
var v = viewport(), var v = viewport(),
h = helper.parent; h = helper.parent;
helper.parent.css({ helper.parent.css({
@@ -415,8 +424,8 @@
height += 20; height += 20;
helper.parent.css({ helper.parent.css({
width: width, width: Math.round(width),
height: height, height: Math.round(height),
left: left, left: left,
top: top top: top
}); });
@@ -424,10 +433,17 @@
if(resizeImgTips) if(resizeImgTips)
{ {
$imgTips.css({ $imgTips.css({
maxWidth: width, maxWidth: Math.round(width - 50),
maxHeight: height, maxHeight: Math.round(height-70)
width: '100%', });
height: '100%' }
if(resizeVideoTips)
{
console.log($videoTips, width, height, Math.round(width - 50), Math.round(height-70));
$videoTips.css({
width: Math.round(width - 50),
height: Math.round(height-70)
}); });
} }

View File

@@ -0,0 +1,499 @@
/*
VideoJS Default Styles (http://videojs.com)
Version 3.2.0
*/
/*
REQUIRED STYLES (be careful overriding)
================================================================================ */
/* When loading the player, the video tag is replaced with a DIV,
that will hold the video tag or object tag for other playback methods.
The div contains the video playback element (Flash or HTML5) and controls, and sets the width and height of the video.
** If you want to add some kind of border/padding (e.g. a frame), or special positioning, use another containing element.
Otherwise you risk messing up control positioning and full window mode. **
*/
.video-js {
background-color: #000; position: relative; padding: 0;
/* Start with 10px for base font size so other dimensions can be em based and easily calculable. */
font-size: 10px;
/* Allow poster to be vertially aligned. */
vertical-align: middle;
/* display: table-cell; */ /*This works in Safari but not Firefox.*/
}
/* Playback technology elements expand to the width/height of the containing div. <video> or <object> */
.video-js .vjs-tech { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
/* Fix for Firefox 9 fullscreen (only if it is enabled). Not needed when checking fullScreenEnabled. */
.video-js:-moz-full-screen { position: absolute; }
/* Fullscreen Styles */
body.vjs-full-window {
padding: 0; margin: 0;
height: 100%; overflow-y: auto; /* Fix for IE6 full-window. http://www.cssplay.co.uk/layouts/fixed.html */
}
.video-js.vjs-fullscreen {
position: fixed; overflow: hidden; z-index: 1000; left: 0; top: 0; bottom: 0; right: 0; width: 100% !important; height: 100% !important;
_position: absolute; /* IE6 Full-window (underscore hack) */
}
.video-js:-webkit-full-screen {
width: 100% !important; height: 100% !important;
}
/* Poster Styles */
.vjs-poster {
margin: 0 auto; padding: 0; cursor: pointer;
/* Scale with the size of the player div. Works when poster is vertically shorter, but stretches when it's less wide. */
position: relative; width: 100%; max-height: 100%;
}
/* Text Track Styles */
/* Overall track holder for both captions and subtitles */
.video-js .vjs-text-track-display { text-align: center; position: absolute; bottom: 4em; left: 1em; right: 1em; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }
/* Individual tracks */
.video-js .vjs-text-track {
display: none; color: #fff; font-size: 1.4em; text-align: center; margin-bottom: 0.1em;
/* Transparent black background, or fallback to all black (IE6) */
background: rgb(0, 0, 0); background: rgba(0, 0, 0, 0.50);
}
.video-js .vjs-subtitles { color: #fff; }
.video-js .vjs-captions { color: #fc6; }
.vjs-tt-cue { display: block; }
/* Fading sytles, used to fade control bar. */
.vjs-fade-in {
visibility: visible !important; /* Needed to make sure things hide in older browsers too. */
opacity: 1 !important;
-webkit-transition: visibility 0s linear 0s, opacity 0.3s linear;
-moz-transition: visibility 0s linear 0s, opacity 0.3s linear;
-ms-transition: visibility 0s linear 0s, opacity 0.3s linear;
-o-transition: visibility 0s linear 0s, opacity 0.3s linear;
transition: visibility 0s linear 0s, opacity 0.3s linear;
}
.vjs-fade-out {
visibility: hidden !important;
opacity: 0 !important;
-webkit-transition: visibility 0s linear 1.5s,opacity 1.5s linear;
-moz-transition: visibility 0s linear 1.5s,opacity 1.5s linear;
-ms-transition: visibility 0s linear 1.5s,opacity 1.5s linear;
-o-transition: visibility 0s linear 1.5s,opacity 1.5s linear;
transition: visibility 0s linear 1.5s,opacity 1.5s linear;
}
/* DEFAULT SKIN (override in another file to create new skins)
================================================================================
Instead of editing this file, I recommend creating your own skin CSS file to be included after this file,
so you can upgrade to newer versions easier. You can remove all these styles by removing the 'vjs-default-skin' class from the tag. */
/* The default control bar. Created by bar.js */
.vjs-default-skin .vjs-controls {
position: absolute;
bottom: 0; /* Distance from the bottom of the box/video. Keep 0. Use height to add more bottom margin. */
left: 0; right: 0; /* 100% width of div */
margin: 0; padding: 0; /* Controls are absolutely position, so no padding necessary */
height: 2.6em; /* Including any margin you want above or below control items */
color: #fff; border-top: 1px solid #404040;
/* CSS Gradient */
/* Can use the Ultimate CSS Gradient Generator: http://www.colorzilla.com/gradient-editor/ */
background: #242424; /* Old browsers */
background: -moz-linear-gradient(top, #242424 50%, #1f1f1f 50%, #171717 100%); /* FF3.6+ */
background: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(50%,#242424), color-stop(50%,#1f1f1f), color-stop(100%,#171717)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #242424 50%,#1f1f1f 50%,#171717 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #242424 50%,#1f1f1f 50%,#171717 100%); /* Opera11.10+ */
background: -ms-linear-gradient(top, #242424 50%,#1f1f1f 50%,#171717 100%); /* IE10+ */
/* Filter was causing a lot of weird issues in IE. Elements would stop showing up, or other styles would break. */
/*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#242424', endColorstr='#171717',GradientType=0 );*/ /* IE6-9 */
background: linear-gradient(top, #242424 50%,#1f1f1f 50%,#171717 100%); /* W3C */
/* Start hidden and with 0 opacity. Opacity is used to fade in modern browsers. */
/* Can't use display block to hide initially because widths of slider handles aren't calculated and avaialbe for positioning correctly. */
visibility: hidden;
opacity: 0;
}
/* General styles for individual controls. */
.vjs-default-skin .vjs-control {
position: relative; float: left;
text-align: center; margin: 0; padding: 0;
height: 2.6em; width: 2.6em;
}
.vjs-default-skin .vjs-control:focus {
outline: 0;
/* background-color: #555;*/
}
/* Hide control text visually, but have it available for screenreaders: h5bp.com/v */
.vjs-default-skin .vjs-control-text { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
/* Play/Pause
-------------------------------------------------------------------------------- */
.vjs-default-skin .vjs-play-control { width: 5em; cursor: pointer !important; }
/* Play Icon */
.vjs-default-skin.vjs-paused .vjs-play-control div { width: 15px; height: 17px; background: url('video-js.png'); margin: 0.5em auto 0; }
.vjs-default-skin.vjs-playing .vjs-play-control div { width: 15px; height: 17px; background: url('video-js.png') -25px 0; margin: 0.5em auto 0; }
/* Rewind
-------------------------------------------------------------------------------- */
.vjs-default-skin .vjs-rewind-control { width: 5em; cursor: pointer !important; }
.vjs-default-skin .vjs-rewind-control div { width: 19px; height: 16px; background: url('video-js.png'); margin: 0.5em auto 0; }
/* Volume/Mute
-------------------------------------------------------------------------------- */
.vjs-default-skin .vjs-mute-control { width: 3.8em; cursor: pointer !important; float: right; }
.vjs-default-skin .vjs-mute-control div { width: 22px; height: 16px; background: url('video-js.png') -75px -25px; margin: 0.5em auto 0; }
.vjs-default-skin .vjs-mute-control.vjs-vol-0 div { background: url('video-js.png') 0 -25px; }
.vjs-default-skin .vjs-mute-control.vjs-vol-1 div { background: url('video-js.png') -25px -25px; }
.vjs-default-skin .vjs-mute-control.vjs-vol-2 div { background: url('video-js.png') -50px -25px; }
.vjs-default-skin .vjs-volume-control { width: 5em; float: right; }
.vjs-default-skin .vjs-volume-bar {
position: relative; width: 5em; height: 0.6em; margin: 1em auto 0; cursor: pointer !important;
-moz-border-radius: 0.3em; -webkit-border-radius: 0.3em; border-radius: 0.3em;
background: #666;
background: -moz-linear-gradient(top, #333, #666);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#333), to(#666));
background: -webkit-linear-gradient(top, #333, #666);
background: -o-linear-gradient(top, #333, #666);
background: -ms-linear-gradient(top, #333, #666);
background: linear-gradient(top, #333, #666);
}
.vjs-default-skin .vjs-volume-level {
position: absolute; top: 0; left: 0; height: 0.6em;
-moz-border-radius: 0.3em; -webkit-border-radius: 0.3em; border-radius: 0.3em;
background: #fff;
background: -moz-linear-gradient(top, #fff, #ccc);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#ccc));
background: -webkit-linear-gradient(top, #fff, #ccc);
background: -o-linear-gradient(top, #fff, #ccc);
background: -ms-linear-gradient(top, #fff, #ccc);
background: linear-gradient(top, #fff, #ccc);
}
.vjs-default-skin .vjs-volume-handle {
position: absolute; top: -0.2em; width: 0.8em; height: 0.8em; background: #ccc; left: 0;
border: 1px solid #fff;
-moz-border-radius: 0.6em; -webkit-border-radius: 0.6em; border-radius: 0.6em;
}
/* Progress
-------------------------------------------------------------------------------- */
.vjs-default-skin div.vjs-progress-control {
position: absolute;
left: 4.8em; right: 4.8em; /* Leave room for time displays. */
height: 1.0em; width: auto;
top: -1.3em; /* Set above the rest of the controls. And leave room for 2px of borders (progress bottom and controls top). */
border-bottom: 1px solid #1F1F1F;
border-top: 1px solid #222;
/* CSS Gradient */
background: #333;
background: -moz-linear-gradient(top, #222, #333);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#222), to(#333));
background: -webkit-linear-gradient(top, #222, #333);
background: -o-linear-gradient(top, #333, #222);
background: -ms-linear-gradient(top, #333, #222);
background: linear-gradient(top, #333, #222);
/* 1px top shadow */
/* -webkit-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.15); -moz-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.15); box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.15);*/
}
/* Box containing play and load progresses. Also acts as seek scrubber. */
.vjs-default-skin .vjs-progress-holder {
position: relative; cursor: pointer !important; /*overflow: hidden;*/
padding: 0; margin: 0; /* Placement within the progress control item */
height: 1.0em;
-moz-border-radius: 0.6em; -webkit-border-radius: 0.6em; border-radius: 0.6em;
/* CSS Gradient */
background: #111;
background: -moz-linear-gradient(top, #111, #262626);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#111), to(#262626));
background: -webkit-linear-gradient(top, #111, #262626);
background: -o-linear-gradient(top, #111, #262626);
background: -ms-linear-gradient(top, #111, #262626);
background: linear-gradient(top, #111, #262626);
}
.vjs-default-skin .vjs-progress-holder .vjs-play-progress,
.vjs-default-skin .vjs-progress-holder .vjs-load-progress { /* Progress Bars */
position: absolute; display: block; height: 1.0em; margin: 0; padding: 0;
left: 0; top: 0; /*Needed for IE6*/
-moz-border-radius: 0.6em; -webkit-border-radius: 0.6em; border-radius: 0.6em;
/*width: 0;*/
}
.vjs-default-skin .vjs-play-progress {
/* CSS Gradient. */
background: #fff; /* Old browsers */
background: -moz-linear-gradient(top, #fff 0%, #d6d6d6 50%, #fff 100%);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%,#fff), color-stop(50%,#d6d6d6), color-stop(100%,#fff));
background: -webkit-linear-gradient(top, #fff 0%,#d6d6d6 50%,#fff 100%);
background: -o-linear-gradient(top, #fff 0%,#d6d6d6 50%,#fff 100%);
background: -ms-linear-gradient(top, #fff 0%,#d6d6d6 50%,#fff 100%);
background: linear-gradient(top, #fff 0%,#d6d6d6 50%,#fff 100%);
background: #efefef;
background: -moz-linear-gradient(top, #efefef 0%, #f5f5f5 50%, #dbdbdb 50%, #f1f1f1 100%);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%,#efefef), color-stop(50%,#f5f5f5), color-stop(50%,#dbdbdb), color-stop(100%,#f1f1f1));
background: -webkit-linear-gradient(top, #efefef 0%,#f5f5f5 50%,#dbdbdb 50%,#f1f1f1 100%);
background: -o-linear-gradient(top, #efefef 0%,#f5f5f5 50%,#dbdbdb 50%,#f1f1f1 100%);
background: -ms-linear-gradient(top, #efefef 0%,#f5f5f5 50%,#dbdbdb 50%,#f1f1f1 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efefef', endColorstr='#f1f1f1',GradientType=0 );
background: linear-gradient(top, #efefef 0%,#f5f5f5 50%,#dbdbdb 50%,#f1f1f1 100%);
}
.vjs-default-skin .vjs-load-progress {
opacity: 0.8;
/* CSS Gradient */
background: #666;
background: -moz-linear-gradient(top, #666, #333);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#666), to(#333));
background: -webkit-linear-gradient(top, #666, #333);
background: -o-linear-gradient(top, #666, #333);
background: -ms-linear-gradient(top, #666, #333);
background: linear-gradient(top, #666, #333);
}
.vjs-default-skin div.vjs-seek-handle {
position: absolute;
width: 16px; height: 16px; /* Match img pixles */
margin-top: -0.3em;
left: 0; top: 0; /*Needed for IE6*/
background: url('video-js.png') 0 -50px;
/* CSS Curved Corners. Needed to make shadows curved. */
-moz-border-radius: 0.8em; -webkit-border-radius: 0.8em; border-radius: 0.8em;
/* CSS Shadows */
-webkit-box-shadow: 0 2px 4px 0 #000; -moz-box-shadow: 0 2px 4px 0 #000; box-shadow: 0 2px 4px 0 #000;
}
/* Time Display
-------------------------------------------------------------------------------- */
.vjs-default-skin .vjs-time-controls {
position: absolute;
right: 0;
height: 1.0em; width: 4.8em;
top: -1.3em;
border-bottom: 1px solid #1F1F1F;
border-top: 1px solid #222;
background-color: #333;
font-size: 1em; line-height: 1.0em; font-weight: normal; font-family: Helvetica, Arial, sans-serif;
background: #333;
background: -moz-linear-gradient(top, #222, #333);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#222), to(#333));
background: -webkit-linear-gradient(top, #222, #333);
background: -o-linear-gradient(top, #333, #222);
background: -ms-linear-gradient(top, #333, #222);
background: linear-gradient(top, #333, #222);
/* 1px top shadow */
/* -webkit-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.15); -moz-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.15); box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.15);*/
}
.vjs-default-skin .vjs-current-time { left: 0; }
.vjs-default-skin .vjs-duration { right: 0; display: none; }
.vjs-default-skin .vjs-remaining-time { right: 0; }
.vjs-time-divider { display:none; }
.vjs-default-skin .vjs-time-control { font-size: 1em; line-height: 1; font-weight: normal; font-family: Helvetica, Arial, sans-serif; }
.vjs-default-skin .vjs-time-control span { line-height: 25px; /* Centering vertically */ }
/* Fullscreen
-------------------------------------------------------------------------------- */
.vjs-secondary-controls { float: right; }
.vjs-default-skin .vjs-fullscreen-control { width: 3.8em; cursor: pointer !important; float: right; }
.vjs-default-skin .vjs-fullscreen-control div { width: 16px; height: 16px; background: url('video-js.png') -50px 0; margin: 0.5em auto 0; }
.vjs-default-skin.vjs-fullscreen .vjs-fullscreen-control div { background: url('video-js.png') -75px 0; }
/* Big Play Button (at start)
---------------------------------------------------------*/
.vjs-default-skin .vjs-big-play-button {
display: block; /* Start hidden */ z-index: 2;
position: absolute; top: 50%; left: 50%; width: 8.0em; height: 8.0em; margin: -42px 0 0 -42px; text-align: center; vertical-align: center; cursor: pointer !important;
border: 0.2em solid #fff; opacity: 0.95;
-webkit-border-radius: 25px; -moz-border-radius: 25px; border-radius: 25px;
background: #454545;
background: -moz-linear-gradient(top, #454545 0%, #232323 50%, #161616 50%, #3f3f3f 100%);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%,#454545), color-stop(50%,#232323), color-stop(50%,#161616), color-stop(100%,#3f3f3f));
background: -webkit-linear-gradient(top, #454545 0%,#232323 50%,#161616 50%,#3f3f3f 100%);
background: -o-linear-gradient(top, #454545 0%,#232323 50%,#161616 50%,#3f3f3f 100%);
background: -ms-linear-gradient(top, #454545 0%,#232323 50%,#161616 50%,#3f3f3f 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#454545', endColorstr='#3f3f3f',GradientType=0 );
background: linear-gradient(top, #454545 0%,#232323 50%,#161616 50%,#3f3f3f 100%);
/* CSS Shadows */
-webkit-box-shadow: 4px 4px 8px #000; -moz-box-shadow: 4px 4px 8px #000; box-shadow: 4px 4px 8px #000;
}
.vjs-default-skin div.vjs-big-play-button:hover {
-webkit-box-shadow: 0 0 80px #fff; -moz-box-shadow: 0 0 80px #fff; box-shadow: 0 0 80px #fff;
}
.vjs-default-skin div.vjs-big-play-button span {
position: absolute; top: 50%; left: 50%;
display: block; width: 35px; height: 42px;
margin: -20px 0 0 -15px; /* Using negative margin to center image. */
background: url('video-js.png') -100px 0;
}
/* Loading Spinner
---------------------------------------------------------*/
/* CSS Spinners by Kilian Valkhof - http://kilianvalkhof.com/2010/css-xhtml/css3-loading-spinners-without-images/ */
.vjs-loading-spinner {
display: none;
position: absolute; top: 50%; left: 50%; width: 55px; height: 55px;
margin: -28px 0 0 -28px;
-webkit-animation-name: rotatethis;
-webkit-animation-duration:1s;
-webkit-animation-iteration-count:infinite;
-webkit-animation-timing-function:linear;
-moz-animation-name: rotatethis;
-moz-animation-duration:1s;
-moz-animation-iteration-count:infinite;
-moz-animation-timing-function:linear;
}
@-webkit-keyframes rotatethis {
0% {-webkit-transform:scale(0.6) rotate(0deg); }
12.5% {-webkit-transform:scale(0.6) rotate(0deg); }
12.51% {-webkit-transform:scale(0.6) rotate(45deg); }
25% {-webkit-transform:scale(0.6) rotate(45deg); }
25.01% {-webkit-transform:scale(0.6) rotate(90deg);}
37.5% {-webkit-transform:scale(0.6) rotate(90deg);}
37.51% {-webkit-transform:scale(0.6) rotate(135deg);}
50% {-webkit-transform:scale(0.6) rotate(135deg);}
50.01% {-webkit-transform:scale(0.6) rotate(180deg);}
62.5% {-webkit-transform:scale(0.6) rotate(180deg);}
62.51% {-webkit-transform:scale(0.6) rotate(225deg);}
75% {-webkit-transform:scale(0.6) rotate(225deg);}
75.01% {-webkit-transform:scale(0.6) rotate(270deg);}
87.5% {-webkit-transform:scale(0.6) rotate(270deg);}
87.51% {-webkit-transform:scale(0.6) rotate(315deg);}
100% {-webkit-transform:scale(0.6) rotate(315deg);}
}
@-moz-keyframes rotatethis {
0% {-moz-transform:scale(0.6) rotate(0deg);}
12.5% {-moz-transform:scale(0.6) rotate(0deg);}
12.51% {-moz-transform:scale(0.6) rotate(45deg);}
25% {-moz-transform:scale(0.6) rotate(45deg);}
25.01% {-moz-transform:scale(0.6) rotate(90deg);}
37.5% {-moz-transform:scale(0.6) rotate(90deg);}
37.51% {-moz-transform:scale(0.6) rotate(135deg);}
50% {-moz-transform:scale(0.6) rotate(135deg);}
50.01% {-moz-transform:scale(0.6) rotate(180deg);}
62.5% {-moz-transform:scale(0.6) rotate(180deg);}
62.51% {-moz-transform:scale(0.6) rotate(225deg);}
75% {-moz-transform:scale(0.6) rotate(225deg);}
75.01% {-moz-transform:scale(0.6) rotate(270deg);}
87.5% {-moz-transform:scale(0.6) rotate(270deg);}
87.51% {-moz-transform:scale(0.6) rotate(315deg);}
100% {-moz-transform:scale(0.6) rotate(315deg);}
}
/* Each circle */
div.vjs-loading-spinner .ball1 { opacity: 0.12; position:absolute; left: 20px; top: 0px; width: 13px; height: 13px; background: #fff;
border-radius: 13px; -webkit-border-radius: 13px; -moz-border-radius: 13px; border: 1px solid #ccc; }
div.vjs-loading-spinner .ball2 { opacity: 0.25; position:absolute; left: 34px; top: 6px; width: 13px; height: 13px; background: #fff;
border-radius: 13px; -webkit-border-radius: 13px; -moz-border-radius: 13px; border: 1px solid #ccc; }
div.vjs-loading-spinner .ball3 { opacity: 0.37; position:absolute; left: 40px; top: 20px; width: 13px; height: 13px; background: #fff;
border-radius: 13px; -webkit-border-radius: 13px; -moz-border-radius: 13px; border: 1px solid #ccc; }
div.vjs-loading-spinner .ball4 { opacity: 0.50; position:absolute; left: 34px; top: 34px; width: 13px; height: 13px; background: #fff;
border-radius: 10px; -webkit-border-radius: 10px; -moz-border-radius: 15px; border: 1px solid #ccc; }
div.vjs-loading-spinner .ball5 { opacity: 0.62; position:absolute; left: 20px; top: 40px; width: 13px; height: 13px; background: #fff;
border-radius: 13px; -webkit-border-radius: 13px; -moz-border-radius: 13px; border: 1px solid #ccc; }
div.vjs-loading-spinner .ball6 { opacity: 0.75; position:absolute; left: 6px; top: 34px; width: 13px; height: 13px; background: #fff;
border-radius: 13px; -webkit-border-radius: 13px; -moz-border-radius: 13px; border: 1px solid #ccc; }
div.vjs-loading-spinner .ball7 { opacity: 0.87; position:absolute; left: 0px; top: 20px; width: 13px; height: 13px; background: #fff;
border-radius: 13px; -webkit-border-radius: 13px; -moz-border-radius: 13px; border: 1px solid #ccc; }
div.vjs-loading-spinner .ball8 { opacity: 1.00; position:absolute; left: 6px; top: 6px; width: 13px; height: 13px; background: #fff;
border-radius: 13px; -webkit-border-radius: 13px; -moz-border-radius: 13px; border: 1px solid #ccc; }
/* Menu Buttons (Captions/Subtitles/etc.)
-------------------------------------------------------------------------------- */
.vjs-default-skin .vjs-menu-button {
float: right; margin: 0.2em 0.5em 0 0; padding: 0; width: 3em; height: 2em; cursor: pointer !important;
border: 1px solid #111; -moz-border-radius: 0.3em; -webkit-border-radius: 0.3em; border-radius: 0.3em;
background: #4d4d4d;
background: -moz-linear-gradient(top, #4d4d4d 0%, #3f3f3f 50%, #333333 50%, #252525 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#4d4d4d), color-stop(50%,#3f3f3f), color-stop(50%,#333333), color-stop(100%,#252525));
background: -webkit-linear-gradient(top, #4d4d4d 0%,#3f3f3f 50%,#333333 50%,#252525 100%);
background: -o-linear-gradient(top, #4d4d4d 0%,#3f3f3f 50%,#333333 50%,#252525 100%);
background: -ms-linear-gradient(top, #4d4d4d 0%,#3f3f3f 50%,#333333 50%,#252525 100%);
background: linear-gradient(top, #4d4d4d 0%,#3f3f3f 50%,#333333 50%,#252525 100%);
}
/* Button Icon */
.vjs-default-skin .vjs-menu-button div { background: url('video-js.png') 0px -75px no-repeat; width: 16px; height: 16px; margin: 0.2em auto 0; padding: 0; }
/* Button Pop-up Menu */
.vjs-default-skin .vjs-menu-button ul {
display: none; /* Start hidden. Hover will show. */
opacity: 0.8;
padding: 0; margin: 0;
position: absolute; width: 10em; bottom: 2em; max-height: 15em;
left: -3.5em; /* Width of menu - width of button / 2 */
background-color: #111;
border: 2px solid #333;
-moz-border-radius: 0.7em; -webkit-border-radius: 1em; border-radius: .5em;
-webkit-box-shadow: 0 2px 4px 0 #000; -moz-box-shadow: 0 2px 4px 0 #000; box-shadow: 0 2px 4px 0 #000;
overflow: auto;
}
.vjs-default-skin .vjs-menu-button:focus ul,
.vjs-default-skin .vjs-menu-button:hover ul { display: block; list-style: none; }
.vjs-default-skin .vjs-menu-button ul li { list-style: none; margin: 0; padding: 0.3em 0 0.3em 20px; line-height: 1.4em; font-size: 1.2em; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; text-align: left; }
.vjs-default-skin .vjs-menu-button ul li.vjs-selected { text-decoration: underline; background: url('video-js.png') -125px -50px no-repeat; }
.vjs-default-skin .vjs-menu-button ul li:focus,
.vjs-default-skin .vjs-menu-button ul li:hover,
.vjs-default-skin .vjs-menu-button ul li.vjs-selected:focus,
.vjs-default-skin .vjs-menu-button ul li.vjs-selected:hover { background-color: #ccc; color: #111; outline: 0; }
.vjs-default-skin .vjs-menu-button ul li.vjs-menu-title {
text-align: center; text-transform: uppercase; font-size: 1em; line-height: 2em; padding: 0; margin: 0 0 0.3em 0;
color: #fff; font-weight: bold;
cursor: default;
background: #4d4d4d;
background: -moz-linear-gradient(top, #4d4d4d 0%, #3f3f3f 50%, #333333 50%, #252525 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#4d4d4d), color-stop(50%,#3f3f3f), color-stop(50%,#333333), color-stop(100%,#252525));
background: -webkit-linear-gradient(top, #4d4d4d 0%,#3f3f3f 50%,#333333 50%,#252525 100%);
background: -o-linear-gradient(top, #4d4d4d 0%,#3f3f3f 50%,#333333 50%,#252525 100%);
background: -ms-linear-gradient(top, #4d4d4d 0%,#3f3f3f 50%,#333333 50%,#252525 100%);
background: linear-gradient(top, #4d4d4d 0%,#3f3f3f 50%,#333333 50%,#252525 100%);
}
/* Subtitles Button */
.vjs-default-skin .vjs-captions-button div { background-position: -25px -75px; }
.vjs-default-skin .vjs-chapters-button div { background-position: -100px -75px; }
.vjs-default-skin .vjs-chapters-button ul { width: 20em; left: -8.5em; /* Width of menu - width of button / 2 */ }

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -22,6 +22,7 @@ $groups = array(
, '//include/jquery.tooltip.js' , '//include/jquery.tooltip.js'
, '//include/jquery.p4.preview.js' , '//include/jquery.p4.preview.js'
, '//include/jquery.image_enhancer.js' , '//include/jquery.image_enhancer.js'
, '//include/jslibs/video-js/video.js'
, '//include/jslibs/jquery.contextmenu_scroll.js'), , '//include/jslibs/jquery.contextmenu_scroll.js'),
'admin' => array( 'admin' => array(
'//include/jslibs/jquery.cookie.js' '//include/jslibs/jquery.cookie.js'
@@ -76,6 +77,7 @@ $groups = array(
, '//include/vendor/jquery-file-upload/js/vendor/jquery.ui.widget.js' , '//include/vendor/jquery-file-upload/js/vendor/jquery.ui.widget.js'
, '//include/vendor/jquery-file-upload/js/jquery.iframe-transport.js' , '//include/vendor/jquery-file-upload/js/jquery.iframe-transport.js'
, '//include/vendor/jquery-file-upload/js/jquery.fileupload.js' , '//include/vendor/jquery-file-upload/js/jquery.fileupload.js'
, '//include/jslibs/video-js/video.js'
, '//login/geonames.js' , '//login/geonames.js'
, '//include/jslibs/jquery.form.2.49.js' , '//include/jslibs/jquery.form.2.49.js'
, '//include/jslibs/jquery.vertical.buttonset.js' , '//include/jslibs/jquery.vertical.buttonset.js'
@@ -135,6 +137,7 @@ $groups = array(
, '//include/jslibs/jquery.contextmenu_scroll.js' , '//include/jslibs/jquery.contextmenu_scroll.js'
, '//include/jquery.common.js' , '//include/jquery.common.js'
, '//skins/lightbox/jquery.lightbox.js' , '//skins/lightbox/jquery.lightbox.js'
, '//include/jslibs/video-js/video.js'
, '//include/jslibs/flowplayer/flowplayer-3.2.6.min.js' , '//include/jslibs/flowplayer/flowplayer-3.2.6.min.js'
), ),
'lightboxie6' => array( 'lightboxie6' => array(
@@ -147,6 +150,7 @@ $groups = array(
, '//include/jslibs/jquery.contextmenu_scroll.js' , '//include/jslibs/jquery.contextmenu_scroll.js'
, '//include/jquery.common.js' , '//include/jquery.common.js'
, '//skins/lightbox/jquery.lightbox.ie6.js' , '//skins/lightbox/jquery.lightbox.ie6.js'
, '//include/jslibs/video-js/video.js'
, '//include/jslibs/flowplayer/flowplayer-3.2.6.min.js' , '//include/jslibs/flowplayer/flowplayer-3.2.6.min.js'
) )
); );