# HG changeset patch
# User cavaliet
# Date 1354020995 -3600
# Node ID 86be3b51a1fda3ac521dfbb1cb26458ecb15ffe9
# Parent fd6aa7d6c840d06beafb5e3e384833dd8d806632# Parent 293d6aee8964395a934b8d5dfb1943235fac8a6b
Merge with 293d6aee8964395a934b8d5dfb1943235fac8a6b
diff -r 293d6aee8964 -r 86be3b51a1fd .hgignore
--- a/.hgignore Tue Nov 27 13:40:59 2012 +0100
+++ b/.hgignore Tue Nov 27 13:56:35 2012 +0100
@@ -4,4 +4,6 @@
syntax: regexp
^\.hgcheck$
syntax: regexp
+^\.pydevproject$
+syntax: regexp
^integration/js/hashcut\.js$
\ No newline at end of file
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/common.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/common.css Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,965 @@
+/* fonts */
+@font-face {
+ font-family: 'Open Sans';
+ font-weight: normal;
+ font-style: normal;
+ src: local('Open Sans'), local('OpenSans'),
+ url("fonts/OpenSans-Regular.eot") format("eot"),
+ url("fonts/OpenSans-Regular.woff") format("woff"),
+ url("fonts/OpenSans-Regular.ttf") format("truetype"),
+ url("fonts/OpenSans-Regular.svg#OpenSans-Regular") format("svg");
+}
+@font-face {
+ font-family: 'Open Sans';
+ font-weight: normal;
+ font-style: italic;
+ src: local('Open Sans Italic'), local('OpenSans-Italic'),
+ url("fonts/OpenSans-Italic.eot") format("eot"),
+ url("fonts/OpenSans-Italic.woff") format("woff"),
+ url("fonts/OpenSans-Italic.ttf") format("truetype"),
+ url("fonts/OpenSans-Italic.svg#OpenSans-Italic") format("svg");
+}
+@font-face {
+ font-family: 'Open Sans';
+ font-weight: 300;
+ font-style: normal;
+ src: local('Open Sans Light'), local('OpenSans-Light'),
+ url("fonts/OpenSans-Light.eot") format("eot"),
+ url("fonts/OpenSans-Light.woff") format("woff"),
+ url("fonts/OpenSans-Light.ttf") format("truetype"),
+ url("fonts/OpenSans-Light.svg#OpenSans-Regular") format("svg");
+}
+@font-face {
+ font-family: 'Open Sans';
+ font-weight: 600;
+ font-style: normal;
+ src: local('Open Sans Semibold'), local('OpenSans-Semibold'),
+ url("fonts/OpenSans-Semibold.eot") format("eot"),
+ url("fonts/OpenSans-Semibold.woff") format("woff"),
+ url("fonts/OpenSans-Semibold.ttf") format("truetype"),
+ url("fonts/OpenSans-Semibold.svg#OpenSans-Semibold") format("svg");
+}
+@font-face {
+ font-family: 'Open Sans';
+ font-weight: 600;
+ font-style: italic;
+ src: local('Open Sans Semibold Italic'), local('OpenSans-SemiboldItalic'),
+ url("fonts/OpenSans-SemiboldItalic.eot") format("eot"),
+ url("fonts/OpenSans-SemiboldItalic.woff") format("woff"),
+ url("fonts/OpenSans-SemiboldItalic.ttf") format("truetype"),
+ url("fonts/OpenSans-SemiboldItalic.svg#OpenSans-SemiboldItalic") format("svg");
+}
+@font-face {
+ font-family: 'Open Sans';
+ font-weight: bold;
+ font-style: normal;
+ src: local('Open Sans Bold'), local('OpenSans-Bold'),
+ url("fonts/OpenSans-Bold.eot") format("eot"),
+ url("fonts/OpenSans-Bold.woff") format("woff"),
+ url("fonts/OpenSans-Bold.ttf") format("truetype"),
+ url("fonts/OpenSans-Bold.svg#OpenSans-Bold") format("svg");
+}
+/* custom reset */
+body{
+ height: 100%;
+ font-family: 'Open Sans';
+}
+a{
+ color:#000;
+ text-decoration: none;
+}
+textarea {
+ resize: none;
+}
+
+input, textarea {
+ font-family: 'Open Sans';
+}
+
+/* common */
+.wrapper{
+ background-color: #FFF;
+ background-image: url(../img/bg.png);
+ background-repeat: repeat-x;
+}
+.wrap{
+ min-height:100%;
+ width: 960px;
+ margin: 0 auto;
+ font-weight: 400;
+ color:#333333;
+ font-size: 13px;
+ height: 100%;
+}
+.wrap-header-top{
+ padding-top: 5px;
+ background-color: #370078;
+ height: 53px;
+ margin-bottom: 1px;
+}
+.wrap-header-top-content{
+ width: 960px;
+ margin: 0 auto;
+}
+/* header - title-video-wrap */
+.title-video-wrap{
+ width: 380px;
+}
+.title-video-wrap .title-video {
+ margin-top: 10px;
+ left: 0;
+ font-size: 18px;
+ font-weight: bold;
+ color: #30036d;
+ text-decoration: underline;
+}
+.title-video-wrap .title-video:hover {
+ text-decoration: none;
+}
+.title-video-wrap .open-popin {
+ color: #30036d;
+ background-image: url(../img/pencil-icon.png);
+ background-repeat: no-repeat;
+ background-position: right 6px;
+ padding-right: 20px;
+ min-height: 20px;
+}
+.title-header{
+ width: 460px;
+ float: left;
+ height: 60px;
+}
+
+.wrap-header{
+ background-color: #e2dbfd;
+}
+.header{
+ position: relative;
+ width: 960px;
+ margin: 0 auto;
+ height: 60px;
+}
+.header .title-video-wrap,
+.header h1,
+.header .profil-wrap{
+ position: relative;
+ float: left;
+ height: 60px;
+}
+.header h1{
+ display: inline-block;
+ height: 60px;
+ width: 250px;
+}
+.header h1 a img,
+.header h1 a span{
+ float: left;
+}
+.header h1 a{
+ padding-top: 8px;
+}
+.header h1 a span{
+ font-size: 20px;
+ text-align: center;
+ padding: 0px 0 0 6px;
+ font-weight: 300;
+}
+/* header - profil-wrap */
+.header .profil-wrap{
+ float: right;
+ width: 250px;
+}
+.header .profil-wrap a{
+ width: 160px;
+ display: block;
+ text-align: right;
+ position: absolute;
+ right: 0;
+ font-size: 14px;
+ color: #30036d;
+ padding-right: 18px;
+}
+.header .profil-wrap a:hover{
+ color: #FF00FC;
+}
+.header .profil-wrap a.all-hashcut{
+ top: 12px;
+ background: url(../img/arrow-top.png) right 2px no-repeat;
+}
+.header .profil-wrap a.my-profil{
+ top: 32px;
+ background: url(../img/arrow-bot.png) right 4px no-repeat;
+}
+/* content */
+.content{
+ width: 960px;
+ min-height: 750px;
+}
+/* popin */
+.popin{
+ padding-top: 12px;
+ position: absolute;
+ top: 0;
+ z-index: 10;
+}
+.pointer{
+ position: absolute;
+ top: 0;
+}
+.popin-content{
+ padding: 8px;
+ border: 1px solid #867a97;
+ background: url(../img/bg-jaune.png);
+}
+.popin-content input[type=text],
+.popin-content input[type=password],
+.popin-content textarea{
+ padding: 0 4px;
+ font-size: 12px;
+ border: 1px solid #867a97;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.popin-content input[type=text],
+.popin-content input[type=password] {
+ line-height: 20px;
+ height: 20px;
+}
+/* popin - user */
+
+.popin {
+ display: none;
+}
+
+.user.popin{
+ top: 48px;
+ right: 0;
+}
+.user.popin img.pointer{
+ right: 36px;
+}
+.button {
+ margin-top: 2px;
+ display: block;
+ font-size: 12px;
+ border: none;
+ padding: 0;
+ width: 150px;
+ background-color: #30036D;
+ color: #FFF;
+ text-align: center;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ cursor: pointer;
+ height: 22px;
+ line-height: 22px;
+}
+
+.button:hover{
+ background-color: #FF00FC
+}
+.user.login h2,
+.user.signup h2 {
+ color: #de2500;
+ font-size: 14px;
+ font-weight: 600;
+ margin-bottom: 12px;
+}
+
+.user.info h2 {
+ color: #7628df;
+ font-size: 18px;
+ font-weight: 600;margin-bottom: 2px;
+}
+
+.user label{
+ width: 84px;
+ font-size: 12px;
+ display: inline-block;
+ line-height: 10px;
+}
+.user p {
+ display: block;
+ line-height: 18px;
+ margin-bottom: 8px;
+ overflow: hidden;
+}
+.user input[type=text],
+.user input[type=password] {
+ position: relative;
+ width: 110px;
+ padding: 0 5px;
+ height: 18px;
+ display: inline-block;
+}
+.user .button {
+ float: right;
+}
+/* popin - user - info */
+.user.info {
+ text-align: right;
+}
+.user h3{
+ color: #30036d;
+ font-size: 14px;
+ margin-bottom: 10px;
+}
+.user .nb-hashcut{
+ color: #de2500;
+ font-size: 14px;
+ text-decoration: underline;
+ display: block;
+ margin-bottom: 12px;
+}
+.user .nb-hashcut:hover{
+ text-decoration: none;
+}
+.user.popin.info .popin-content a.change-account:hover{
+ background-color: #FF00FC;
+}
+/* popin - user - signup */
+.signup-button{
+ background-color: #de2500;
+}
+.user .popin-content{
+ min-width: 205px;
+}
+/* footer */
+.footer{
+ border-top: 1px solid black;
+ width: 100%;
+ padding-top: 8px;
+}
+.footer .links-left{
+ float: left;
+}
+.footer .links-left li{
+ margin-bottom: 4px;
+}
+.footer .links-left li a{
+ border-bottom: 1px solid #cccccc;
+}
+.footer .links-left li a:hover{
+ border-bottom: none;
+}
+.footer .links-right{
+ float: right;
+}
+.footer .links-right li{
+ line-height: 40px;
+ float: right;
+ margin-left: 8px;
+}
+.footer .links-right li img {
+ vertical-align: middle;
+}
+/* video-item */
+.hashcut-video-wrap{
+ padding-left: 10px;
+ overflow: hidden;
+ margin-bottom: 16px;
+}
+.video-item{
+ width: 300px;
+ float: left;
+ margin-right: 20px;
+}
+
+.video-item h3{
+ font-size: 12px;
+}
+.video-item h3 strong{
+ font-weight: 600;
+}
+.video-item h3 span{
+ color: #de2500;
+}
+.video-item .screenshot{
+ display: inline-block;
+ margin-bottom: 8px;
+}
+.video-item h3 a{
+ border-bottom: 1px solid #bababa;
+ display: inline-block;
+ line-height: 12px;
+}
+.video-item h3 a:hover{
+ border-bottom: none;
+}
+.pagination{
+ text-align: center;
+}
+.pagination a{
+ font-size: 14px;
+ color: #7628df;
+ text-decoration: underline;
+}
+.pagination a:hover{
+ text-decoration: none;
+}
+.pagination a.active{
+ color: #de2500;
+ text-decoration: none;
+}
+
+/* content */
+.left-content,
+.right-content{
+ float: left;
+}
+.left-content h2,
+.right-content h2{
+ padding: 6px 0;
+ margin: 8px 0 14px;
+ border-bottom: 1px solid #333333;
+ color: #30036d;
+ font-size: 18px;
+ font-weight: 600;
+ clear: both;
+}
+/* left-content */
+.left-content{
+ width: 630px;
+ margin-right: 20px;
+}
+/* right-content */
+.right-content{
+ width: 310px;
+}
+/* list-video */
+.list-video {
+ overflow: hidden;
+ overflow-y: auto;
+ height: 680px;
+}
+.item-video {
+ margin-bottom: 1px;
+ padding: 5px 10px 5px 10px;
+ clear: both;
+ width: auto;
+ min-height: 62px;
+ display: block;
+ position: relative;
+}
+.item-video .thumbnail{
+ float: left;
+ margin-right: 4px;
+ max-width: 80px;
+ max-height: 60px;
+ box-shadow: 2px 2px 2px #333333;
+}
+.item-video .video-info{
+ margin-left: 88px;
+}
+.item-video .title-video{
+ font-size: 13px;
+ font-weight: 600;
+ color: #30036d;
+ margin-bottom: 1px;
+}
+.item-video .description{
+ font-size: 11px;
+ margin-bottom: 1px;
+}
+.item-video .time-length{
+ font-size: 12px;
+ font-weight: 600;
+}
+.item-video .time-length span{
+ color: #de2500;
+}
+.item-video .media-count-wrap {
+ width: 30px;
+ text-align: center;
+ position: absolute;
+ top: 45px;
+ left: 75px;
+ height: 15px;
+ display: none;
+}
+.item-video .media-count{
+ color: #FFF;
+ font-size: 10px;
+ line-height: 15px;
+ background-color: #ff00fc;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ padding: 0 3px;
+ border: 1px solid #DE2500;
+}
+.item-video .subtitle{
+ margin-bottom: 2px;
+ color: #de2500;
+ font-size: 11px;
+}
+.item-video .duration{
+ color: #7628df;
+ font-size: 12px;
+ font-weight: 600;
+}
+/* frise */
+.frise{
+ height: 22px;
+ position: relative;
+ border: 1px solid #333333;
+}
+
+.mashup-frise {
+ cursor: pointer;
+}
+
+.frise-overflow {
+ position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden;
+}
+.bloc-pvw .frise {
+ margin: 7px 5px 2px;
+}
+
+.aucun-segment{
+ font-weight: 600;
+ font-style: italic;
+ text-align: center;
+ line-height: 20px;
+ width: 100%;
+ z-index:0;
+ background: #CCCCCC;
+}
+.frise-segment{
+ position: absolute;
+ height: 100%;
+}
+.mashup-frise .frise-segment {
+ -moz-box-shadow: inset 1px 1px 1px #333333;
+ -webkit-box-shadow: inset 1px 1px 1px #333333;
+ box-shadow: inset 1px 1px 1px #333333;
+}
+.frise-segment.active, .mashup-frise .frise-segment.active {
+ background-image: url(../img/pinstripe-purple.png);
+ background-repeat: repeat;
+}
+.frise-indication{
+ height: 100%;
+ line-height: 22px;
+ display: inline-block;
+ position: absolute;
+ color: #FFF;
+ top:0;
+ left: 0px;
+ font-size: 10px;
+ width: 30px;
+ text-align: center;
+ background: url(../img/bg-indication.png) 15px 0 no-repeat;
+ margin-left: -15px;
+ text-shadow: 1px 1px 1px #000000;
+}
+.frise-position {
+ width: 1px; top: -8px; bottom: 0; margin-left: -0.5px; position: absolute;
+ z-index: 3; background: #FF00FC;
+}
+/* col-middle - bloc-segmentation - popin.segmentation */
+
+.pointer-padder {
+ left: 5px;
+ position: absolute;
+ right: 5px;
+ top: 0;
+}
+
+.pointer-padder .pointer {
+ top: 0; margin-left: -10px;
+}
+
+.segment-info {
+ padding-top: 12px;
+ overflow: hidden;
+ position: relative;
+}
+
+/* popin - frise-description */
+
+.annotation-title {
+ color: #de2500;
+ font-size: 14px;
+ font-weight: bold;
+}
+.annotation-time {
+ color: #7628DF;
+}
+.mashup-description table{
+ font-size: 12px;
+}
+.mashup-description th{
+ text-align: left;
+ font-weight: 600;
+ display: block;
+ min-width: 75px;
+}
+.mashup-description td{
+ line-height: 15px;
+ padding-left: 2px;
+}
+.mashup-description th,
+.mashup-description td,
+.mashup-description h2{
+ padding-bottom: 8px;
+}
+.mashup-description .tools{
+ float: right;
+}
+
+.video {
+ background: #333333;
+ position: relative;
+}
+.video-wait {
+ display: none;
+ position: absolute; left: 0; top: 0; width: 100%; height: 100%;
+ background-color: rgba(120, 120, 140, .6);
+ background-image: url(../img/reel.gif);
+ background-position: center;
+ background-repeat: no-repeat;
+ z-index: 3;
+}
+.widget {
+ position: relative;
+}
+
+.segment-tooltip-wrapper {
+ position: absolute; height: 0; width: 0;
+ top: 0; z-index: 7; display: none; left: 50%;
+}
+
+.segment-tooltip {
+ padding: 4px; border: 1px solid #867a97; background: url(../img/bg-jaune.png);
+ width: 130px; position: absolute; bottom: 14px; left: -70px;
+ font-size: 12px; font-weight: 600; text-align: center; color: #DE2500;
+}
+
+.segment-tooltip-tip {
+ position: absolute; top: -15px; left: -10px; background: url(../img/inv-triangle.png);
+ width: 20px; height: 13px;
+}
+
+/* Styles from Metadataplayer */
+
+/* Slider Widget */
+
+.Ldt-Slider-Container {
+ background: #969696;
+ background: -moz-linear-gradient(left, #747474 50%, #B6B8B8 50%);
+ background: -webkit-linear-gradient(left, #747474 50%, #B6B8B8 50%);
+ border-top: 1px solid #969696;
+ height: 4px;
+ position: relative; z-index: 5;
+}
+
+.Ldt-Slider {
+ border: none; border-radius: 0; padding: 0; height: 100%; background: #B6B8B8;
+}
+
+.Ldt-Slider .ui-slider-handle {
+ border-radius: 8px; top: -2px; background: #ff00fc; border: 1px solid #ffffff;
+}
+
+.Ldt-Slider .ui-slider-range {
+ background: #747474;
+}
+
+.Ldt-Slider-Time {
+ position: absolute; top: -16px; background: #ffffc0; color: #000000; border-radius: 3px; z-index: 8;
+ font-size: 10px; width: 34px; border: 1px solid #999999; padding: 1px; margin-left: -14px;
+ display: none; text-align: center; font-weight: bold;
+}
+
+/* Controller Widget */
+
+.Ldt-Ctrl {
+ font-size: 10px;
+ background:url('../img/player_gradient.png') repeat-x transparent ;
+ height: 25px;
+ border: 1px solid #969696;
+ position: relative;
+}
+
+.Ldt-Ctrl-Left {
+ float:left; width: 300px;
+}
+
+.Ldt-Ctrl-Right {
+ float: right;
+}
+
+.Ldt-Ctrl-button {
+ float: left;
+ width: 30px; height: 25px;
+ background: url('../img/player-sprites.png');
+ cursor: pointer;
+}
+
+.Ldt-Ctrl-spacer {
+ float: left; width: 1px; height: 25px; background: #969696;
+}
+
+.Ldt-Ctrl-Play {
+ margin: 0 15px;
+}
+
+.Ldt-Ctrl-Play-PlayState {
+ background-position: 0 0;
+}
+
+.Ldt-Ctrl-Play-PlayState:hover {
+ background-position: 0 -25px;
+}
+
+.Ldt-Ctrl-Play-PlayState:active {
+ background-position: 0 -50px;
+}
+
+.Ldt-Ctrl-Play-PauseState {
+ background-position: -30px 0;
+}
+
+.Ldt-Ctrl-Play-PauseState:hover {
+ background-position: -30px -25px;
+}
+
+.Ldt-Ctrl-Play-PauseState:active {
+ background-position: -30px -50px;
+}
+
+.Ldt-Ctrl-InOutBlock {
+ display: none;
+}
+
+.segment-mode .Ldt-Ctrl-InOutBlock {
+ display: block;
+}
+
+.Ldt-Ctrl-SetIn, .Ldt-Ctrl-SetOut {
+ margin: 0 2px;
+}
+
+.Ldt-Ctrl-SetIn {
+ background-position: -60px 0;
+}
+
+.Ldt-Ctrl-SetIn:hover {
+ background-position: -60px -25px;
+}
+
+.Ldt-Ctrl-SetIn:active {
+ background-position: -60px -50px;
+}
+
+.Ldt-Ctrl-SetOut {
+ background-position: -90px 0;
+}
+
+.Ldt-Ctrl-SetOut:hover {
+ background-position: -90px -25px;
+}
+
+.Ldt-Ctrl-SetOut:active {
+ background-position: -90px -50px;
+}
+
+.Ldt-Ctrl-Time {
+ float: left;
+ margin: 7px 5px 0;
+ font-size: 12px;
+ font-family: Arial, Verdana, sans-serif;
+}
+
+.Ldt-Ctrl-Time-Elapsed {
+ float: left;
+ color: #4a4a4a;
+}
+
+.Ldt-Ctrl-Time-Separator {
+ margin: 0 4px;
+ float: left;
+}
+
+.Ldt-Ctrl-Time-Total {
+ float: left;
+ color: #b2b2b2;
+}
+
+.Ldt-Ctrl-Sound {
+ margin: 0 2px;
+}
+
+.Ldt-Ctrl-Sound-Full {
+ background-position: -120px 0;
+}
+
+.Ldt-Ctrl-Sound-Full:hover {
+ background-position: -120px -25px;
+}
+
+.Ldt-Ctrl-Sound-Full:active {
+ background-position: -120px -50px;
+}
+
+.Ldt-Ctrl-Sound-Mute {
+ background-position: -150px 0;
+}
+
+.Ldt-Ctrl-Sound-Mute:hover {
+ background-position: -150px -25px;
+}
+
+.Ldt-Ctrl-Sound-Mute:active {
+ background-position: -150px -50px;
+}
+
+.Ldt-Ctrl-Sound-Half {
+ background-position: -180px 0;
+}
+
+.Ldt-Ctrl-Sound-Half:hover {
+ background-position: -180px -25px;
+}
+
+.Ldt-Ctrl-Sound-Half:active {
+ background-position: -180px -50px;
+}
+
+.Ldt-Ctrl-Volume-Control {
+ display: none;
+ position: absolute;
+ background:url('../img/player_gradient.png') repeat-x transparent ;
+ height: 25px;
+ width: 100px; top: 25px; right: -1px; z-index: 100;
+ padding: 0 2px;
+ border: 1px solid #b6b8b8;
+}
+
+.Ldt-Ctrl-Volume-Bar {
+ height: 5px; margin: 9px 3px 0; background: #cccccc; border: 1px solid #999999; border-radius: 2px;
+}
+
+.Ldt-Ctrl-Volume-Control .ui-slider-handle {
+ width: 6px; height: 19px; background: #a8a8a8; border: 1px solid #999999; border-radius: 2px; top: -8px; margin-left: -4px;
+ cursor: pointer;
+}
+
+.Ldt-Ctrl-Volume-Control:hover .ui-slider-handle {
+ background: #F7268E;
+}
+
+/* Social Share Widget */
+
+.Ldt-Social {
+ float: right; margin-top: 10px;
+}
+
+.Ldt-Social a {
+ float: left; width: 24px; height: 24px; background: url(../img/socialbuttons.png);
+}
+
+.Ldt-Social-Url-Container {
+ float: left; width: 24px; height: 24px; position: relative;
+}
+
+a.Ldt-Social-Url {
+ margin: 0; background-position: -96px 0;
+}
+
+a.Ldt-Social-Url:hover {
+ background-position: -96px -24px;
+}
+
+.Ldt-Social-UrlPop {
+ position: absolute; left: 20px; top: -2px; background: url(../img/socialcopy.png);
+ padding: 3px 0 0 12px; width: 218px; height: 27px;
+ display: none;
+}
+
+.Ldt-Social-Input, .Ldt-Social-CopyBtn {
+ font-size: 11px; margin: 1px; border: 1px solid #ccc; height: 16px;
+ padding: 1px; border-radius: 2px; display: inline-block;
+}
+
+.Ldt-Social-Input:hover, .Ldt-Social-CopyBtn.hover {
+ border-color: #8080ff;
+}
+
+.Ldt-Social-Input {
+ width: 150px;
+}
+
+.Ldt-Social-CopyBtn {
+ font-weight: bold; width: 50px; text-align: center; background: #f0f0ff; line-height: 16px; width: 46px;
+}
+
+.Ldt-Social-CopyBtn.hover {
+ background: #ffe0a0;
+}
+
+.Ldt-Social-CopyBtn.active {
+ background: #ff8000;
+}
+
+a.Ldt-Social-Twitter {
+ background-position: 0 0;
+}
+
+a.Ldt-Social-Twitter:hover {
+ background-position: 0 -24px;
+}
+
+a.Ldt-Social-Fb {
+ background-position: -24px 0;
+}
+
+a.Ldt-Social-Fb:hover {
+ background-position: -24px -24px;
+}
+
+a.Ldt-Social-Gplus {
+ background-position: -48px 0;
+}
+
+a.Ldt-Social-Gplus:hover {
+ background-position: -48px -24px;
+}
+
+a.Ldt-Social-Mail {
+ background-position: -72px 0;
+}
+
+a.Ldt-Social-Mail:hover {
+ background-position: -72px -24px;
+}
+
+
+.media-segment-list-inner {
+ position: absolute; width: 100%; height: 100%; top: 0; left: 0; background: url(../img/bg-segments.png);
+}
+
+.media-segment-section {
+ position: absolute; height: 8px; cursor: pointer;
+ -moz-box-shadow: inset 1px 1px 1px #808080;
+ -webkit-box-shadow: inset 1px 1px 1px #808080;
+ box-shadow: inset 1px 1px 1px #808080;
+}
+
+.media-segment-popin h3, .media-found-popin h3{
+ padding: 0;
+ color: #de2500;
+ margin-bottom: 4px;
+ font-weight: 600;
+}
+
+.media-segment-popin p{
+ font-size: 12px;
+}
+
+.media-segment-popin span{
+ color: #7628df;
+}
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/edition.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/edition.css Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,526 @@
+/* Block modes */
+
+.empty-mode .bloc-pvw,
+.empty-mode .bloc-segmentation,
+.segment-mode .bloc-pvw,
+.pvw-mode .bloc-segmentation {
+ display: none;
+}
+
+/* header - title-video-wrap */
+.title-video-wrap{
+ width: 460px;
+}
+.title-video-wrap .time-length{
+ margin-top: 5px;
+ color: #333333;
+ font-size: 14px;
+}
+.mashup-total-duration {
+ color: #de2500;
+}
+/* popin - update-title */
+.update-title {
+ top: 34px;
+ left: 220px;
+}
+.update-title .pointer{
+ left: 50px;
+}
+/* col */
+.col-middle,
+.col-left,
+.col-right{
+ float: left;
+}
+/* col-middle */
+.col-middle{
+ width: 460px;
+ min-height: 1px;
+}
+.col-middle-header{
+ height: 35px;
+ font-size: 16px;
+ clear: both;
+}
+/* Tabs */
+.tab {
+ height: 35px;
+ line-height: 35px;
+ color: #30036d;
+ padding: 0 10px;
+ width: 210px;
+ float: left;
+ background-position: 0 -35px;
+}
+.tab:hover{
+ color: #FF00FC;
+}
+.tab.disable,
+.tab.disable:hover{
+ color: #796891;
+}
+.tab-segment {
+ background-image: url(../img/bg-segmenter.png);
+}
+.tab-pvw {
+ background-image: url(../img/bg-previsualiser.png); text-align: right;
+}
+
+.pvw-mode .tab-pvw, .segment-mode .tab-segment {
+ width: 250px; background-position: 0 0; font-weight: 600;
+}
+
+.segment-mode .tab-pvw, .pvw-mode .tab-segment {
+ width: 170px; color: #796891;
+}
+
+.tab-media-title {
+ font-style: italic; font-weight: normal;
+}
+
+.empty-mode .tab-media-title, .pvw-mode .tab-media-title {
+ display: none;
+}
+
+/* col-middle - bloc-segmentation */
+.bloc-segmentation{
+ position: relative;
+}
+
+/* col-middle - bloc-segmentation - popin.segmentation */
+
+.segmentation {
+ position: relative;
+ overflow: hidden;
+ padding-top: 12px;
+}
+
+.segmentation h2{
+ font-size: 14px;
+ font-weight: 600;
+ color:#de2500;
+ margin: 5px 0 2px;
+}
+
+.time-tangle {
+ color: #7628df; cursor: w-resize; position: relative;
+}
+.time-tangle:hover,
+.time-tangle.active {
+ color: #FF00FC; border-bottom: 1px dashed #7628df;
+}
+.time-tangle:hover:after,
+.time-tangle.active:after {
+ color: #7628DF; position: absolute; top: 18px; left: 50%; width: 160px;
+ margin-left: -80px; font-size: 12px; text-align: center;
+ content: "glisser pour modifier"
+}
+
+.time-tangle.deactivate:hover {
+ border: none; color: #7628DF;
+}
+
+.time-tangle.deactivate:hover:after {
+ display: none;
+}
+
+.segmentation form{
+ overflow: hidden;
+}
+.form-segment-left,
+.form-segment-right{
+ float: left;
+}
+.segmentation .form-segment-left{
+ width: 230px;
+}
+
+.segmentation label, .update-title label {
+ display: block;
+ font-size: 12px;
+ font-weight: 600;
+ margin: 8px 0 4px;
+}
+.segmentation textarea, .update-title textarea {
+ width: 200px;
+ height: 69px;
+ max-width: 200px;
+ font-size: 12px;
+}
+
+.segmentation textarea {
+ margin-bottom: 32px;
+}
+
+.segmentation input[type=text], .update-title input[type=text]{
+ font-size: 12px;
+ width: 200px;
+ height: 20px;
+}
+
+.add-segment {
+ position: absolute; right: 10px; bottom: 10px;
+}
+
+.media-segments h2{
+ color: #30036d;
+ font-size: 14px;
+ font-weight: 600;
+ margin: 10px 8px 2px;
+}
+
+.media-segment-list {
+ margin: 8px 5px 0 6px;
+ padding-bottom: 1px;
+ position: relative;
+}
+
+.media-segment-popin .pointer{
+ margin-left: 140px
+}
+
+.media-segment-popin {
+ padding-top: 12px; overflow: hidden;
+ top: 2px; width: 300px; margin-left: -151px;
+ display: none;
+}
+
+.media-segment-popin p{
+ margin-right: 155px;
+ font-size: 12px;
+}
+
+.media-found-segments {
+ clear: both; padding-top: 5px;
+}
+
+.media-found-segments .media-segment-list {
+ margin: 0;
+}
+
+.media-found-list {
+ padding-bottom: 1px; position: relative;
+}
+
+.media-current-section {
+ background: url(../img/pinstripe-purple.png);
+ top: -2px; bottom: -2px; margin-left: -1px; padding: 2px 1px;
+ position: absolute;
+}
+
+.media-found-popin {
+ padding-top: 12px; overflow: hidden;
+ top: 2px; width: 170px; display: none;
+ margin-left: -86px;
+}
+
+.media-found-popin .pointer {
+ margin-left: 75px;
+}
+
+.reprendre-segment{
+ float: right;
+ display: block;
+}
+/* col-middle - bloc-vide */
+.tutorial{
+ padding: 0 10px;
+ color: #FFF;
+ font-weight: 600;
+ display: none;
+}
+.empty-mode .tutorial {
+ display: block;
+}
+.tutorial h2{
+ padding-top: 16px;
+ font-size: 18px;
+ margin-bottom: 20px;
+}
+.tutorial ol{
+ padding-left: 22px;
+}
+.tutorial li:first-child{
+ width: 324px;
+}
+.tutorial li{
+ list-style: decimal;
+ font-size: 14px;
+ margin-bottom: 16px;
+ padding-left: 20px;
+}
+/* col-left */
+.col-left,
+.col-right{
+ width: 250px;
+ min-height: 750px;
+ background: url(../img/bg-col.png) repeat-x 0 0 #e6e6e6;
+}
+.left-head {
+ background: url(../img/bg-video-search.png) 0 0 repeat-x #906ebe;
+ height: 70px;
+ padding-left: 10px;
+ margin-bottom: 1px;
+}
+.left-head h2{
+ padding-top: 8px;
+ margin-bottom: 12px;
+ color: #30036d;
+ font-size: 16px;
+ font-weight: 600;
+}
+.left-head input {
+ width: 222px;
+ font-size: 14px;
+ border: none;
+ height: 20px;
+ padding: 0 4px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ background: #FFF url(../img/zoom-icon.png) 214px 3px no-repeat;
+}
+
+.col-left input::-webkit-input-placeholder{
+ color: #b48aed;
+ font-style: italic;
+}
+.col-left input:-moz-placeholder {
+ color: #b48aed;
+ font-style: italic;
+}
+
+.col-left .item-video:hover,
+.col-left .item-video.active{
+ background: url(../img/arrow-item-video-sprite.png) right center no-repeat;
+}
+/* col-right */
+.col-right{
+ width: 250px;
+}
+.col-right .liste-segment{
+ height: 70px;
+ background: url(../img/bg-liste-segment.png) repeat-x 0 0;
+ padding: 0 10px;
+ width: 230px;
+}
+.col-right .liste-segment h2{
+ text-align: right;
+ color: #30036D;
+ font-weight: 600;
+ font-size: 16px;
+ margin-bottom: 12px;
+ padding-top: 8px;
+}
+.col-right .frise{
+ width: 228px;
+ position: relative;
+ height: 20px;
+}
+
+.col-right .frise-indication{
+ line-height: 20px;
+}
+
+.col-right .item-video:hover,
+.col-right .item-video.active{
+ background: url(../img/arrow-item-video-sprite.png) left center no-repeat;
+}
+
+.item-video {
+ cursor: pointer;
+}
+
+/* tools */
+.tools {
+ height: 17px;
+}
+.tools li{
+ float: left;
+}
+.tools a{
+ display: block;
+ width: 17px;
+ height: 17px;
+ background: url(../img/tools-sprite.png) no-repeat 0 0;
+}
+.tools a.edit{
+ background-position: 2px 0;
+}
+.tools a.edit:hover{
+ background-position: 2px -32px;
+}
+.tools a.edit.disable:hover,
+.tools a.edit.disable{
+ background-position: 2px -16px;
+}
+.tools a.bottom{
+ background-position: -19px 0;
+}
+.tools a.bottom:hover{
+ background-position: -19px -32px;
+}
+.tools a.bottom.disable:hover,
+.tools a.bottom.disable{
+ background-position: -19px -16px;
+}
+.tools a.top{
+ background-position: -40px 0;
+}
+.tools a.top:hover{
+ background-position: -40px -32px;
+}
+.tools a.top.disable:hover,
+.tools a.top.disable{
+ background-position: -40px -16px;
+}
+.tools a.delete{
+ background-position: -61px 0;
+}
+.tools a.delete:hover{
+ background-position: -61px -32px;
+}
+.tools a.delete.disable:hover,
+.tools a.delete.disable{
+ background-position: -61px -16px;
+}
+
+
+/* Video */
+
+.video{
+ width: 460px;
+ height: 300px;
+}
+.publier-button{
+ position: absolute;
+ width: 69px;
+ height: 67px;
+ background: url(../img/publier-button-sprite.png) 0 0 no-repeat;
+ left: 382px;
+ top: 10px;
+ z-index: 4;
+}
+.publier-button:hover{
+ background-position: 0 -67px;
+}
+.publier-button.disable, .publier-button.disable:hover{
+ background-position: 0 -134px;
+}
+
+/* Slice Widget */
+
+.Ldt-Slice {
+ border-radius: 0; border: none; padding: 0; margin: 12px 6px; background: #B6B8B8; height: 8px;
+}
+
+.Ldt-Slice .ui-slider-handle {
+ width: 7px; height: 20px; top: 0; border: none; margin: 0; padding: 0;
+ background: url(../img/slice-handles.png); border-radius: 0; cursor: pointer;
+}
+
+.ui-slider-handle.Ldt-Slice-left-handle {
+ margin-left: -7px;
+}
+
+.ui-slider-handle.Ldt-Slice-left-handle.ui-state-hover, .ui-slider-handle.Ldt-Slice-left-handle.ui-state-active {
+ background-position: 0 -20px;
+}
+
+.ui-slider-handle.Ldt-Slice-right-handle {
+ margin-left: 0; background-position: -7px 0;
+}
+
+.ui-slider-handle.Ldt-Slice-right-handle.ui-state-hover, .ui-slider-handle.Ldt-Slice-right-handle.ui-state-active {
+ background-position: -7px -20px;
+}
+
+.Ldt-Slider {
+ margin: 0 6px;
+}
+
+.Ldt-Slice .ui-slider-range {
+ background: url(../img/pinstripe-purple.png);
+}
+
+/* Validate */
+
+.validate {
+ float: right; width: 20px; height: 20px; cursor: pointer; background: url(../img/helpwarn.png);
+ position: relative;
+}
+
+.validate:hover {
+ background-position: -20px 0;
+}
+
+.validate.warning {
+ background-position: 0 -20px;
+}
+
+.validate.warning:hover {
+ background-position: -20px -20px;
+}
+
+.validate.critical {
+ background-position: 0 -40px;
+}
+
+.validate.critical:hover {
+ background-position: -20px -40px;
+}
+
+.item-video .validate {
+ margin-right: -5px;
+}
+
+.liste-segment .validate {
+ margin: 6px -1px 0 2px;
+}
+
+.validate-tooltip {
+ position: absolute; top: 16px; left: -225px; width: 235px; padding: 16px 8px 0;
+ background: url(../img/tooltip.png) top no-repeat; z-index: 6; min-height: 30px;
+ color: #FFFFFF; display: none; cursor: auto;
+}
+
+.validate-tooltip ul {
+ padding-left: 14px; list-style: disc; font-size: 12px;
+}
+
+.validate-tooltip li {
+ margin: 2px 0;
+}
+
+.validate:hover .validate-tooltip {
+ display: block;
+}
+
+.validate:hover .validate-tooltip:hover {
+ display: none;
+}
+
+.validate-tooltip:after {
+ bottom: -10px; content: ""; height: 10px;
+ left: 0; position: absolute; width: 100%;
+ background: url(../img/tooltip.png) bottom no-repeat;
+}
+
+.tagit {
+ border: 1px solid #867A97;
+ padding: 0 4px; width: 200px;
+ font-size: 12px; font-family: 'Open Sans';
+}
+
+ul.tagit li.tagit-choice {
+ padding: 3px 18px 3px 3px;
+}
+
+ul.tagit li.tagit-new {
+ padding: 0;
+}
+
+ul.tagit input[type="text"] {
+ width: 100px;
+}
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Bold.eot
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Bold.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Bold.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Bold.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,587 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Bold.ttf
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Bold.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Bold.woff
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Bold.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-BoldItalic.eot
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-BoldItalic.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-BoldItalic.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-BoldItalic.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,600 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-BoldItalic.ttf
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-BoldItalic.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-BoldItalic.woff
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-BoldItalic.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Italic.eot
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Italic.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Italic.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Italic.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,612 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Italic.ttf
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Italic.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Italic.woff
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Italic.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Light.eot
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Light.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Light.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Light.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,581 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Light.ttf
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Light.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Light.woff
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Light.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Regular.eot
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Regular.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Regular.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Regular.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,592 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Regular.ttf
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Regular.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Regular.woff
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Regular.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Semibold.eot
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Semibold.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Semibold.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Semibold.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,587 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Semibold.ttf
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Semibold.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Semibold.woff
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-Semibold.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-SemiboldItalic.eot
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-SemiboldItalic.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-SemiboldItalic.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-SemiboldItalic.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,609 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-SemiboldItalic.ttf
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-SemiboldItalic.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-SemiboldItalic.woff
Binary file src/hashcut/static/hashcut/bpi/css/fonts/OpenSans-SemiboldItalic.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/home.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/home.css Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,87 @@
+/* header */
+.title-header h2{
+ width: 100%;
+ text-align: center;
+ line-height: 60px;
+}
+.title-header h2 a{
+ color: #de2500;
+ font-size: 24px;
+ text-decoration: underline;
+ font-weight: bold;
+}
+.title-header h2 a:hover{
+ text-decoration: none;
+}
+
+/* left-content */
+
+.news .video-item:nth-child(2n+2){
+ margin-right: 0;
+}
+
+
+
+.last .video-item:nth-child(4n+4){
+ margin-right: 0;
+}
+.last .video-item{
+ width: 140px;
+ height: 130px;
+ float: left;
+ margin: 0 20px 12px 0;
+}
+
+/* right-content */
+
+.definition p{
+ font-size: 12px;
+ line-height: 14px;
+ margin-bottom: 12px;
+}
+.definition p strong{
+ font-weight: bold;
+}
+.definition p a{
+ color: #7628df;
+ text-decoration: underline;
+}
+.definition p a:hover{
+ text-decoration: none;
+}
+.how-to li{
+ background-image: url(../img/how-to-sprite.png);
+ background-repeat: no-repeat;
+ margin-bottom: 2px;
+}
+.how-to li h3{
+ color: #de2500;
+ font-size: 18px;
+ font-weight: bold;
+ margin-bottom: 12px;
+}
+.how-to li p{
+ font-size: 12px;
+ word-wrap: break-word;
+ width: 210px;
+}
+.how-to li.inscription{
+ height: 84px;
+ background-position: 212px 0;
+}
+.how-to li.creation{
+ height: 100px;
+ background-position: 212px -128px;
+}
+.how-to li.creation{
+ height: 100px;
+ background-position: 212px -128px;
+}
+.how-to li.publier{
+ height: 90px;
+ background-position: 212px -266px;
+}
+.how-to li.next-step{
+ height: 24px;
+ background-position: 212px -377px;
+}
\ No newline at end of file
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/players.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/players.css Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,128 @@
+.more-info-wrap{
+ padding-right: 10px;
+}
+.more-info{
+ text-align: left;
+}
+.more-info th{
+ font-weight: 600;
+ font-style: normal;
+ font-size: 12px;
+ width: 78px;
+}
+.more-info td{
+ padding-bottom: 12px;
+ font-size: 12px;
+}
+.more-info a{
+ text-decoration: underline;
+}
+.more-info a:hover{
+ text-decoration: none;
+}
+.info-title a{
+ color:#30036d;
+ font-size: 14px;
+ font-weight: bold;
+}
+.info-duration td{
+ color: #de2500;
+}
+.info-author a{
+ color: #7628df;
+}
+.cloner{
+ float: right; margin-bottom: 8px;
+}
+.list-video{
+ height: auto;
+ margin-left: -10px;
+ max-height: 450px;
+}
+.item-video:hover,
+.item-video.active{
+ background: url(../img/arrow-item-video-sprite.png) left center no-repeat;
+}
+.time-length{
+ margin-bottom: 5px;
+}
+.item-video .frise{
+ width: 100%;
+ height: 8px;
+ background-color: #999999;
+ display: block;
+}
+.title-video a {
+ color: #30036d;
+}
+.item-video .title-video a:hover {
+ text-decoration: underline;
+}
+.item-video .frise{
+ border:none;
+}
+.bloc-video{
+ padding-left: 10px;
+}
+.video {
+ height: 400px;
+ width: 620px;
+}
+.bloc-pvw{
+ margin-top: 7px;
+}
+.popin-content h2{
+ margin: 0;
+ border:none;
+}
+.Ldt-Ctrl {
+ margin-bottom: 6px;
+}
+.Ldt-Slider {
+ margin: 0;
+}
+.frise-segment {
+ cursor: pointer;
+}
+.segment-info .pointer {
+ margin-left: -10px;
+}
+
+.media-segment-popin .pointer{
+ margin-left: 105px
+}
+
+.media-segment-popin {
+ padding-top: 12px; overflow: hidden;
+ top: 2px; width: 230px; margin-left: -116px;
+ display: none;
+}
+
+.media-segment-list {
+ margin: 8px 0 0;
+ padding-bottom: 1px;
+ position: relative;
+}
+
+.active .media-segment-section, .media-segment:hover .media-segment-section {
+ -moz-box-shadow: inset 0 0 2px 2px #fc00ff, 0 0 2px #fc00ff;
+ -webkit-box-shadow: inset 0 0 2px 2px #fc00ff, 0 0 2px #fc00ff;
+ box-shadow: inset 0 0 2px 2px #fc00ff, 0 0 2px #fc00ff;
+}
+
+.mashup-link {
+ display: none;
+ font-size: 13px;
+ color: #30036D;
+ margin-top: 5px;
+}
+
+.mashup-link a {
+ color: #30036D;
+ font-weight: 600;
+ text-decoration: underline;
+}
+
+.mashup-link a:hover {
+ text-decoration: none;
+}
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/profil.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/profil.css Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,17 @@
+.title-content{
+ padding: 20px 0 6px;
+ border-bottom: 1px solid #333333;
+ color: #30036d;
+ font-size: 18px;
+ font-weight: 600;
+ margin-bottom: 14px;
+}
+.title-content a{
+ color: #ff00fc;
+}
+.profil .video-item{
+ margin-bottom: 16px;
+}
+.profil .video-item:nth-child(3n+3){
+ margin-right: 0;
+}
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/css/reset.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/bpi/css/reset.css Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,77 @@
+/* http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+*/
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+.clearfix:after {
+ content: ".";
+ display: block;
+ clear: both;
+ visibility: hidden;
+ line-height: 0;
+ height: 0;
+}
+
+.clearfix {
+ display: inline-block;
+}
+
+html[xmlns] .clearfix {
+ display: block;
+}
+
+* html .clearfix {
+ height: 1%;
+}
+.clear{
+ clear: both;
+}
+
+input::-moz-focus-inner {
+ border: 0 none;
+ padding: 0;
+}
\ No newline at end of file
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/apercu-video.jpg
Binary file src/hashcut/static/hashcut/bpi/img/apercu-video.jpg has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/arrow-bot.png
Binary file src/hashcut/static/hashcut/bpi/img/arrow-bot.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/arrow-item-video-sprite.png
Binary file src/hashcut/static/hashcut/bpi/img/arrow-item-video-sprite.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/arrow-top.png
Binary file src/hashcut/static/hashcut/bpi/img/arrow-top.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/bg-col.png
Binary file src/hashcut/static/hashcut/bpi/img/bg-col.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/bg-degrade.png
Binary file src/hashcut/static/hashcut/bpi/img/bg-degrade.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/bg-indication.png
Binary file src/hashcut/static/hashcut/bpi/img/bg-indication.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/bg-jaune.png
Binary file src/hashcut/static/hashcut/bpi/img/bg-jaune.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/bg-liste-segment.png
Binary file src/hashcut/static/hashcut/bpi/img/bg-liste-segment.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/bg-previsualiser.png
Binary file src/hashcut/static/hashcut/bpi/img/bg-previsualiser.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/bg-segmenter.png
Binary file src/hashcut/static/hashcut/bpi/img/bg-segmenter.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/bg-segments.png
Binary file src/hashcut/static/hashcut/bpi/img/bg-segments.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/bg-video-search.png
Binary file src/hashcut/static/hashcut/bpi/img/bg-video-search.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/bg.png
Binary file src/hashcut/static/hashcut/bpi/img/bg.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/border-right-segment.png
Binary file src/hashcut/static/hashcut/bpi/img/border-right-segment.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/hashcut-logo.png
Binary file src/hashcut/static/hashcut/bpi/img/hashcut-logo.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/helpwarn.png
Binary file src/hashcut/static/hashcut/bpi/img/helpwarn.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/how-to-sprite.png
Binary file src/hashcut/static/hashcut/bpi/img/how-to-sprite.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/inv-triangle.png
Binary file src/hashcut/static/hashcut/bpi/img/inv-triangle.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/logo-cinecast.png
Binary file src/hashcut/static/hashcut/bpi/img/logo-cinecast.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/logo-iri.png
Binary file src/hashcut/static/hashcut/bpi/img/logo-iri.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/pencil-icon.png
Binary file src/hashcut/static/hashcut/bpi/img/pencil-icon.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/pinstripe-purple.png
Binary file src/hashcut/static/hashcut/bpi/img/pinstripe-purple.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/player-sprites.png
Binary file src/hashcut/static/hashcut/bpi/img/player-sprites.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/player_gradient.png
Binary file src/hashcut/static/hashcut/bpi/img/player_gradient.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/pompidou-logo.png
Binary file src/hashcut/static/hashcut/bpi/img/pompidou-logo.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/popin-triangle.png
Binary file src/hashcut/static/hashcut/bpi/img/popin-triangle.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/publier-button-sprite.png
Binary file src/hashcut/static/hashcut/bpi/img/publier-button-sprite.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/reel.gif
Binary file src/hashcut/static/hashcut/bpi/img/reel.gif has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/slice-handles.png
Binary file src/hashcut/static/hashcut/bpi/img/slice-handles.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/socialbuttons.png
Binary file src/hashcut/static/hashcut/bpi/img/socialbuttons.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/socialcopy.png
Binary file src/hashcut/static/hashcut/bpi/img/socialcopy.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/tools-sprite.png
Binary file src/hashcut/static/hashcut/bpi/img/tools-sprite.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/tooltip.png
Binary file src/hashcut/static/hashcut/bpi/img/tooltip.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/visuel-home-last.jpg
Binary file src/hashcut/static/hashcut/bpi/img/visuel-home-last.jpg has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/visuel-home-news.jpg
Binary file src/hashcut/static/hashcut/bpi/img/visuel-home-news.jpg has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/visuel-player-bar.jpg
Binary file src/hashcut/static/hashcut/bpi/img/visuel-player-bar.jpg has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/visuel-segment.png
Binary file src/hashcut/static/hashcut/bpi/img/visuel-segment.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/bpi/img/zoom-icon.png
Binary file src/hashcut/static/hashcut/bpi/img/zoom-icon.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/common.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/common.css Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,965 @@
+/* fonts */
+@font-face {
+ font-family: 'Open Sans';
+ font-weight: normal;
+ font-style: normal;
+ src: local('Open Sans'), local('OpenSans'),
+ url("fonts/OpenSans-Regular.eot") format("eot"),
+ url("fonts/OpenSans-Regular.woff") format("woff"),
+ url("fonts/OpenSans-Regular.ttf") format("truetype"),
+ url("fonts/OpenSans-Regular.svg#OpenSans-Regular") format("svg");
+}
+@font-face {
+ font-family: 'Open Sans';
+ font-weight: normal;
+ font-style: italic;
+ src: local('Open Sans Italic'), local('OpenSans-Italic'),
+ url("fonts/OpenSans-Italic.eot") format("eot"),
+ url("fonts/OpenSans-Italic.woff") format("woff"),
+ url("fonts/OpenSans-Italic.ttf") format("truetype"),
+ url("fonts/OpenSans-Italic.svg#OpenSans-Italic") format("svg");
+}
+@font-face {
+ font-family: 'Open Sans';
+ font-weight: 300;
+ font-style: normal;
+ src: local('Open Sans Light'), local('OpenSans-Light'),
+ url("fonts/OpenSans-Light.eot") format("eot"),
+ url("fonts/OpenSans-Light.woff") format("woff"),
+ url("fonts/OpenSans-Light.ttf") format("truetype"),
+ url("fonts/OpenSans-Light.svg#OpenSans-Regular") format("svg");
+}
+@font-face {
+ font-family: 'Open Sans';
+ font-weight: 600;
+ font-style: normal;
+ src: local('Open Sans Semibold'), local('OpenSans-Semibold'),
+ url("fonts/OpenSans-Semibold.eot") format("eot"),
+ url("fonts/OpenSans-Semibold.woff") format("woff"),
+ url("fonts/OpenSans-Semibold.ttf") format("truetype"),
+ url("fonts/OpenSans-Semibold.svg#OpenSans-Semibold") format("svg");
+}
+@font-face {
+ font-family: 'Open Sans';
+ font-weight: 600;
+ font-style: italic;
+ src: local('Open Sans Semibold Italic'), local('OpenSans-SemiboldItalic'),
+ url("fonts/OpenSans-SemiboldItalic.eot") format("eot"),
+ url("fonts/OpenSans-SemiboldItalic.woff") format("woff"),
+ url("fonts/OpenSans-SemiboldItalic.ttf") format("truetype"),
+ url("fonts/OpenSans-SemiboldItalic.svg#OpenSans-SemiboldItalic") format("svg");
+}
+@font-face {
+ font-family: 'Open Sans';
+ font-weight: bold;
+ font-style: normal;
+ src: local('Open Sans Bold'), local('OpenSans-Bold'),
+ url("fonts/OpenSans-Bold.eot") format("eot"),
+ url("fonts/OpenSans-Bold.woff") format("woff"),
+ url("fonts/OpenSans-Bold.ttf") format("truetype"),
+ url("fonts/OpenSans-Bold.svg#OpenSans-Bold") format("svg");
+}
+/* custom reset */
+body{
+ height: 100%;
+ font-family: 'Open Sans';
+}
+a{
+ color:#000;
+ text-decoration: none;
+}
+textarea {
+ resize: none;
+}
+
+input, textarea {
+ font-family: 'Open Sans';
+}
+
+/* common */
+.wrapper{
+ background-color: #FFF;
+ background-image: url(../img/bg.png);
+ background-repeat: repeat-x;
+}
+.wrap{
+ min-height:100%;
+ width: 960px;
+ margin: 0 auto;
+ font-weight: 400;
+ color:#333333;
+ font-size: 13px;
+ height: 100%;
+}
+.wrap-header-top{
+ padding-top: 5px;
+ background-color: #370078;
+ height: 53px;
+ margin-bottom: 1px;
+}
+.wrap-header-top-content{
+ width: 960px;
+ margin: 0 auto;
+}
+/* header - title-video-wrap */
+.title-video-wrap{
+ width: 380px;
+}
+.title-video-wrap .title-video {
+ margin-top: 10px;
+ left: 0;
+ font-size: 18px;
+ font-weight: bold;
+ color: #30036d;
+ text-decoration: underline;
+}
+.title-video-wrap .title-video:hover {
+ text-decoration: none;
+}
+.title-video-wrap .open-popin {
+ color: #30036d;
+ background-image: url(../img/pencil-icon.png);
+ background-repeat: no-repeat;
+ background-position: right 6px;
+ padding-right: 20px;
+ min-height: 20px;
+}
+.title-header{
+ width: 460px;
+ float: left;
+ height: 60px;
+}
+
+.wrap-header{
+ background-color: #e2dbfd;
+}
+.header{
+ position: relative;
+ width: 960px;
+ margin: 0 auto;
+ height: 60px;
+}
+.header .title-video-wrap,
+.header h1,
+.header .profil-wrap{
+ position: relative;
+ float: left;
+ height: 60px;
+}
+.header h1{
+ display: inline-block;
+ height: 60px;
+ width: 250px;
+}
+.header h1 a img,
+.header h1 a span{
+ float: left;
+}
+.header h1 a{
+ padding-top: 8px;
+}
+.header h1 a span{
+ font-size: 20px;
+ text-align: center;
+ padding: 0px 0 0 6px;
+ font-weight: 300;
+}
+/* header - profil-wrap */
+.header .profil-wrap{
+ float: right;
+ width: 250px;
+}
+.header .profil-wrap a{
+ width: 160px;
+ display: block;
+ text-align: right;
+ position: absolute;
+ right: 0;
+ font-size: 14px;
+ color: #30036d;
+ padding-right: 18px;
+}
+.header .profil-wrap a:hover{
+ color: #FF00FC;
+}
+.header .profil-wrap a.all-hashcut{
+ top: 12px;
+ background: url(../img/arrow-top.png) right 2px no-repeat;
+}
+.header .profil-wrap a.my-profil{
+ top: 32px;
+ background: url(../img/arrow-bot.png) right 4px no-repeat;
+}
+/* content */
+.content{
+ width: 960px;
+ min-height: 750px;
+}
+/* popin */
+.popin{
+ padding-top: 12px;
+ position: absolute;
+ top: 0;
+ z-index: 10;
+}
+.pointer{
+ position: absolute;
+ top: 0;
+}
+.popin-content{
+ padding: 8px;
+ border: 1px solid #867a97;
+ background: url(../img/bg-jaune.png);
+}
+.popin-content input[type=text],
+.popin-content input[type=password],
+.popin-content textarea{
+ padding: 0 4px;
+ font-size: 12px;
+ border: 1px solid #867a97;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.popin-content input[type=text],
+.popin-content input[type=password] {
+ line-height: 20px;
+ height: 20px;
+}
+/* popin - user */
+
+.popin {
+ display: none;
+}
+
+.user.popin{
+ top: 48px;
+ right: 0;
+}
+.user.popin img.pointer{
+ right: 36px;
+}
+.button {
+ margin-top: 2px;
+ display: block;
+ font-size: 12px;
+ border: none;
+ padding: 0;
+ width: 150px;
+ background-color: #30036D;
+ color: #FFF;
+ text-align: center;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ cursor: pointer;
+ height: 22px;
+ line-height: 22px;
+}
+
+.button:hover{
+ background-color: #FF00FC
+}
+.user.login h2,
+.user.signup h2 {
+ color: #de2500;
+ font-size: 14px;
+ font-weight: 600;
+ margin-bottom: 12px;
+}
+
+.user.info h2 {
+ color: #7628df;
+ font-size: 18px;
+ font-weight: 600;margin-bottom: 2px;
+}
+
+.user label{
+ width: 84px;
+ font-size: 12px;
+ display: inline-block;
+ line-height: 10px;
+}
+.user p {
+ display: block;
+ line-height: 18px;
+ margin-bottom: 8px;
+ overflow: hidden;
+}
+.user input[type=text],
+.user input[type=password] {
+ position: relative;
+ width: 110px;
+ padding: 0 5px;
+ height: 18px;
+ display: inline-block;
+}
+.user .button {
+ float: right;
+}
+/* popin - user - info */
+.user.info {
+ text-align: right;
+}
+.user h3{
+ color: #30036d;
+ font-size: 14px;
+ margin-bottom: 10px;
+}
+.user .nb-hashcut{
+ color: #de2500;
+ font-size: 14px;
+ text-decoration: underline;
+ display: block;
+ margin-bottom: 12px;
+}
+.user .nb-hashcut:hover{
+ text-decoration: none;
+}
+.user.popin.info .popin-content a.change-account:hover{
+ background-color: #FF00FC;
+}
+/* popin - user - signup */
+.signup-button{
+ background-color: #de2500;
+}
+.user .popin-content{
+ min-width: 205px;
+}
+/* footer */
+.footer{
+ border-top: 1px solid black;
+ width: 100%;
+ padding-top: 8px;
+}
+.footer .links-left{
+ float: left;
+}
+.footer .links-left li{
+ margin-bottom: 4px;
+}
+.footer .links-left li a{
+ border-bottom: 1px solid #cccccc;
+}
+.footer .links-left li a:hover{
+ border-bottom: none;
+}
+.footer .links-right{
+ float: right;
+}
+.footer .links-right li{
+ line-height: 40px;
+ float: right;
+ margin-left: 8px;
+}
+.footer .links-right li img {
+ vertical-align: middle;
+}
+/* video-item */
+.hashcut-video-wrap{
+ padding-left: 10px;
+ overflow: hidden;
+ margin-bottom: 16px;
+}
+.video-item{
+ width: 300px;
+ float: left;
+ margin-right: 20px;
+}
+
+.video-item h3{
+ font-size: 12px;
+}
+.video-item h3 strong{
+ font-weight: 600;
+}
+.video-item h3 span{
+ color: #de2500;
+}
+.video-item .screenshot{
+ display: inline-block;
+ margin-bottom: 8px;
+}
+.video-item h3 a{
+ border-bottom: 1px solid #bababa;
+ display: inline-block;
+ line-height: 12px;
+}
+.video-item h3 a:hover{
+ border-bottom: none;
+}
+.pagination{
+ text-align: center;
+}
+.pagination a{
+ font-size: 14px;
+ color: #7628df;
+ text-decoration: underline;
+}
+.pagination a:hover{
+ text-decoration: none;
+}
+.pagination a.active{
+ color: #de2500;
+ text-decoration: none;
+}
+
+/* content */
+.left-content,
+.right-content{
+ float: left;
+}
+.left-content h2,
+.right-content h2{
+ padding: 6px 0;
+ margin: 8px 0 14px;
+ border-bottom: 1px solid #333333;
+ color: #30036d;
+ font-size: 18px;
+ font-weight: 600;
+ clear: both;
+}
+/* left-content */
+.left-content{
+ width: 630px;
+ margin-right: 20px;
+}
+/* right-content */
+.right-content{
+ width: 310px;
+}
+/* list-video */
+.list-video {
+ overflow: hidden;
+ overflow-y: auto;
+ height: 680px;
+}
+.item-video {
+ margin-bottom: 1px;
+ padding: 5px 10px 5px 10px;
+ clear: both;
+ width: auto;
+ min-height: 62px;
+ display: block;
+ position: relative;
+}
+.item-video .thumbnail{
+ float: left;
+ margin-right: 4px;
+ max-width: 80px;
+ max-height: 60px;
+ box-shadow: 2px 2px 2px #333333;
+}
+.item-video .video-info{
+ margin-left: 88px;
+}
+.item-video .title-video{
+ font-size: 13px;
+ font-weight: 600;
+ color: #30036d;
+ margin-bottom: 1px;
+}
+.item-video .description{
+ font-size: 11px;
+ margin-bottom: 1px;
+}
+.item-video .time-length{
+ font-size: 12px;
+ font-weight: 600;
+}
+.item-video .time-length span{
+ color: #de2500;
+}
+.item-video .media-count-wrap {
+ width: 30px;
+ text-align: center;
+ position: absolute;
+ top: 45px;
+ left: 75px;
+ height: 15px;
+ display: none;
+}
+.item-video .media-count{
+ color: #FFF;
+ font-size: 10px;
+ line-height: 15px;
+ background-color: #ff00fc;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ padding: 0 3px;
+ border: 1px solid #DE2500;
+}
+.item-video .subtitle{
+ margin-bottom: 2px;
+ color: #de2500;
+ font-size: 11px;
+}
+.item-video .duration{
+ color: #7628df;
+ font-size: 12px;
+ font-weight: 600;
+}
+/* frise */
+.frise{
+ height: 22px;
+ position: relative;
+ border: 1px solid #333333;
+}
+
+.mashup-frise {
+ cursor: pointer;
+}
+
+.frise-overflow {
+ position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden;
+}
+.bloc-pvw .frise {
+ margin: 7px 5px 2px;
+}
+
+.aucun-segment{
+ font-weight: 600;
+ font-style: italic;
+ text-align: center;
+ line-height: 20px;
+ width: 100%;
+ z-index:0;
+ background: #CCCCCC;
+}
+.frise-segment{
+ position: absolute;
+ height: 100%;
+}
+.mashup-frise .frise-segment {
+ -moz-box-shadow: inset 1px 1px 1px #333333;
+ -webkit-box-shadow: inset 1px 1px 1px #333333;
+ box-shadow: inset 1px 1px 1px #333333;
+}
+.frise-segment.active, .mashup-frise .frise-segment.active {
+ background-image: url(../img/pinstripe-purple.png);
+ background-repeat: repeat;
+}
+.frise-indication{
+ height: 100%;
+ line-height: 22px;
+ display: inline-block;
+ position: absolute;
+ color: #FFF;
+ top:0;
+ left: 0px;
+ font-size: 10px;
+ width: 30px;
+ text-align: center;
+ background: url(../img/bg-indication.png) 15px 0 no-repeat;
+ margin-left: -15px;
+ text-shadow: 1px 1px 1px #000000;
+}
+.frise-position {
+ width: 1px; top: -8px; bottom: 0; margin-left: -0.5px; position: absolute;
+ z-index: 3; background: #FF00FC;
+}
+/* col-middle - bloc-segmentation - popin.segmentation */
+
+.pointer-padder {
+ left: 5px;
+ position: absolute;
+ right: 5px;
+ top: 0;
+}
+
+.pointer-padder .pointer {
+ top: 0; margin-left: -10px;
+}
+
+.segment-info {
+ padding-top: 12px;
+ overflow: hidden;
+ position: relative;
+}
+
+/* popin - frise-description */
+
+.annotation-title {
+ color: #de2500;
+ font-size: 14px;
+ font-weight: bold;
+}
+.annotation-time {
+ color: #7628DF;
+}
+.mashup-description table{
+ font-size: 12px;
+}
+.mashup-description th{
+ text-align: left;
+ font-weight: 600;
+ display: block;
+ min-width: 75px;
+}
+.mashup-description td{
+ line-height: 15px;
+ padding-left: 2px;
+}
+.mashup-description th,
+.mashup-description td,
+.mashup-description h2{
+ padding-bottom: 8px;
+}
+.mashup-description .tools{
+ float: right;
+}
+
+.video {
+ background: #333333;
+ position: relative;
+}
+.video-wait {
+ display: none;
+ position: absolute; left: 0; top: 0; width: 100%; height: 100%;
+ background-color: rgba(120, 120, 140, .6);
+ background-image: url(../img/reel.gif);
+ background-position: center;
+ background-repeat: no-repeat;
+ z-index: 3;
+}
+.widget {
+ position: relative;
+}
+
+.segment-tooltip-wrapper {
+ position: absolute; height: 0; width: 0;
+ top: 0; z-index: 7; display: none; left: 50%;
+}
+
+.segment-tooltip {
+ padding: 4px; border: 1px solid #867a97; background: url(../img/bg-jaune.png);
+ width: 130px; position: absolute; bottom: 14px; left: -70px;
+ font-size: 12px; font-weight: 600; text-align: center; color: #DE2500;
+}
+
+.segment-tooltip-tip {
+ position: absolute; top: -15px; left: -10px; background: url(../img/inv-triangle.png);
+ width: 20px; height: 13px;
+}
+
+/* Styles from Metadataplayer */
+
+/* Slider Widget */
+
+.Ldt-Slider-Container {
+ background: #969696;
+ background: -moz-linear-gradient(left, #747474 50%, #B6B8B8 50%);
+ background: -webkit-linear-gradient(left, #747474 50%, #B6B8B8 50%);
+ border-top: 1px solid #969696;
+ height: 4px;
+ position: relative; z-index: 5;
+}
+
+.Ldt-Slider {
+ border: none; border-radius: 0; padding: 0; height: 100%; background: #B6B8B8;
+}
+
+.Ldt-Slider .ui-slider-handle {
+ border-radius: 8px; top: -2px; background: #ff00fc; border: 1px solid #ffffff;
+}
+
+.Ldt-Slider .ui-slider-range {
+ background: #747474;
+}
+
+.Ldt-Slider-Time {
+ position: absolute; top: -16px; background: #ffffc0; color: #000000; border-radius: 3px; z-index: 8;
+ font-size: 10px; width: 34px; border: 1px solid #999999; padding: 1px; margin-left: -14px;
+ display: none; text-align: center; font-weight: bold;
+}
+
+/* Controller Widget */
+
+.Ldt-Ctrl {
+ font-size: 10px;
+ background:url('../img/player_gradient.png') repeat-x transparent ;
+ height: 25px;
+ border: 1px solid #969696;
+ position: relative;
+}
+
+.Ldt-Ctrl-Left {
+ float:left; width: 300px;
+}
+
+.Ldt-Ctrl-Right {
+ float: right;
+}
+
+.Ldt-Ctrl-button {
+ float: left;
+ width: 30px; height: 25px;
+ background: url('../img/player-sprites.png');
+ cursor: pointer;
+}
+
+.Ldt-Ctrl-spacer {
+ float: left; width: 1px; height: 25px; background: #969696;
+}
+
+.Ldt-Ctrl-Play {
+ margin: 0 15px;
+}
+
+.Ldt-Ctrl-Play-PlayState {
+ background-position: 0 0;
+}
+
+.Ldt-Ctrl-Play-PlayState:hover {
+ background-position: 0 -25px;
+}
+
+.Ldt-Ctrl-Play-PlayState:active {
+ background-position: 0 -50px;
+}
+
+.Ldt-Ctrl-Play-PauseState {
+ background-position: -30px 0;
+}
+
+.Ldt-Ctrl-Play-PauseState:hover {
+ background-position: -30px -25px;
+}
+
+.Ldt-Ctrl-Play-PauseState:active {
+ background-position: -30px -50px;
+}
+
+.Ldt-Ctrl-InOutBlock {
+ display: none;
+}
+
+.segment-mode .Ldt-Ctrl-InOutBlock {
+ display: block;
+}
+
+.Ldt-Ctrl-SetIn, .Ldt-Ctrl-SetOut {
+ margin: 0 2px;
+}
+
+.Ldt-Ctrl-SetIn {
+ background-position: -60px 0;
+}
+
+.Ldt-Ctrl-SetIn:hover {
+ background-position: -60px -25px;
+}
+
+.Ldt-Ctrl-SetIn:active {
+ background-position: -60px -50px;
+}
+
+.Ldt-Ctrl-SetOut {
+ background-position: -90px 0;
+}
+
+.Ldt-Ctrl-SetOut:hover {
+ background-position: -90px -25px;
+}
+
+.Ldt-Ctrl-SetOut:active {
+ background-position: -90px -50px;
+}
+
+.Ldt-Ctrl-Time {
+ float: left;
+ margin: 7px 5px 0;
+ font-size: 12px;
+ font-family: Arial, Verdana, sans-serif;
+}
+
+.Ldt-Ctrl-Time-Elapsed {
+ float: left;
+ color: #4a4a4a;
+}
+
+.Ldt-Ctrl-Time-Separator {
+ margin: 0 4px;
+ float: left;
+}
+
+.Ldt-Ctrl-Time-Total {
+ float: left;
+ color: #b2b2b2;
+}
+
+.Ldt-Ctrl-Sound {
+ margin: 0 2px;
+}
+
+.Ldt-Ctrl-Sound-Full {
+ background-position: -120px 0;
+}
+
+.Ldt-Ctrl-Sound-Full:hover {
+ background-position: -120px -25px;
+}
+
+.Ldt-Ctrl-Sound-Full:active {
+ background-position: -120px -50px;
+}
+
+.Ldt-Ctrl-Sound-Mute {
+ background-position: -150px 0;
+}
+
+.Ldt-Ctrl-Sound-Mute:hover {
+ background-position: -150px -25px;
+}
+
+.Ldt-Ctrl-Sound-Mute:active {
+ background-position: -150px -50px;
+}
+
+.Ldt-Ctrl-Sound-Half {
+ background-position: -180px 0;
+}
+
+.Ldt-Ctrl-Sound-Half:hover {
+ background-position: -180px -25px;
+}
+
+.Ldt-Ctrl-Sound-Half:active {
+ background-position: -180px -50px;
+}
+
+.Ldt-Ctrl-Volume-Control {
+ display: none;
+ position: absolute;
+ background:url('../img/player_gradient.png') repeat-x transparent ;
+ height: 25px;
+ width: 100px; top: 25px; right: -1px; z-index: 100;
+ padding: 0 2px;
+ border: 1px solid #b6b8b8;
+}
+
+.Ldt-Ctrl-Volume-Bar {
+ height: 5px; margin: 9px 3px 0; background: #cccccc; border: 1px solid #999999; border-radius: 2px;
+}
+
+.Ldt-Ctrl-Volume-Control .ui-slider-handle {
+ width: 6px; height: 19px; background: #a8a8a8; border: 1px solid #999999; border-radius: 2px; top: -8px; margin-left: -4px;
+ cursor: pointer;
+}
+
+.Ldt-Ctrl-Volume-Control:hover .ui-slider-handle {
+ background: #F7268E;
+}
+
+/* Social Share Widget */
+
+.Ldt-Social {
+ float: right; margin-top: 10px;
+}
+
+.Ldt-Social a {
+ float: left; width: 24px; height: 24px; background: url(../img/socialbuttons.png);
+}
+
+.Ldt-Social-Url-Container {
+ float: left; width: 24px; height: 24px; position: relative;
+}
+
+a.Ldt-Social-Url {
+ margin: 0; background-position: -96px 0;
+}
+
+a.Ldt-Social-Url:hover {
+ background-position: -96px -24px;
+}
+
+.Ldt-Social-UrlPop {
+ position: absolute; left: 20px; top: -2px; background: url(../img/socialcopy.png);
+ padding: 3px 0 0 12px; width: 218px; height: 27px;
+ display: none;
+}
+
+.Ldt-Social-Input, .Ldt-Social-CopyBtn {
+ font-size: 11px; margin: 1px; border: 1px solid #ccc; height: 16px;
+ padding: 1px; border-radius: 2px; display: inline-block;
+}
+
+.Ldt-Social-Input:hover, .Ldt-Social-CopyBtn.hover {
+ border-color: #8080ff;
+}
+
+.Ldt-Social-Input {
+ width: 150px;
+}
+
+.Ldt-Social-CopyBtn {
+ font-weight: bold; width: 50px; text-align: center; background: #f0f0ff; line-height: 16px; width: 46px;
+}
+
+.Ldt-Social-CopyBtn.hover {
+ background: #ffe0a0;
+}
+
+.Ldt-Social-CopyBtn.active {
+ background: #ff8000;
+}
+
+a.Ldt-Social-Twitter {
+ background-position: 0 0;
+}
+
+a.Ldt-Social-Twitter:hover {
+ background-position: 0 -24px;
+}
+
+a.Ldt-Social-Fb {
+ background-position: -24px 0;
+}
+
+a.Ldt-Social-Fb:hover {
+ background-position: -24px -24px;
+}
+
+a.Ldt-Social-Gplus {
+ background-position: -48px 0;
+}
+
+a.Ldt-Social-Gplus:hover {
+ background-position: -48px -24px;
+}
+
+a.Ldt-Social-Mail {
+ background-position: -72px 0;
+}
+
+a.Ldt-Social-Mail:hover {
+ background-position: -72px -24px;
+}
+
+
+.media-segment-list-inner {
+ position: absolute; width: 100%; height: 100%; top: 0; left: 0; background: url(../img/bg-segments.png);
+}
+
+.media-segment-section {
+ position: absolute; height: 8px; cursor: pointer;
+ -moz-box-shadow: inset 1px 1px 1px #808080;
+ -webkit-box-shadow: inset 1px 1px 1px #808080;
+ box-shadow: inset 1px 1px 1px #808080;
+}
+
+.media-segment-popin h3, .media-found-popin h3{
+ padding: 0;
+ color: #de2500;
+ margin-bottom: 4px;
+ font-weight: 600;
+}
+
+.media-segment-popin p{
+ font-size: 12px;
+}
+
+.media-segment-popin span{
+ color: #7628df;
+}
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/edition.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/edition.css Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,526 @@
+/* Block modes */
+
+.empty-mode .bloc-pvw,
+.empty-mode .bloc-segmentation,
+.segment-mode .bloc-pvw,
+.pvw-mode .bloc-segmentation {
+ display: none;
+}
+
+/* header - title-video-wrap */
+.title-video-wrap{
+ width: 460px;
+}
+.title-video-wrap .time-length{
+ margin-top: 5px;
+ color: #333333;
+ font-size: 14px;
+}
+.mashup-total-duration {
+ color: #de2500;
+}
+/* popin - update-title */
+.update-title {
+ top: 34px;
+ left: 220px;
+}
+.update-title .pointer{
+ left: 50px;
+}
+/* col */
+.col-middle,
+.col-left,
+.col-right{
+ float: left;
+}
+/* col-middle */
+.col-middle{
+ width: 460px;
+ min-height: 1px;
+}
+.col-middle-header{
+ height: 35px;
+ font-size: 16px;
+ clear: both;
+}
+/* Tabs */
+.tab {
+ height: 35px;
+ line-height: 35px;
+ color: #30036d;
+ padding: 0 10px;
+ width: 210px;
+ float: left;
+ background-position: 0 -35px;
+}
+.tab:hover{
+ color: #FF00FC;
+}
+.tab.disable,
+.tab.disable:hover{
+ color: #796891;
+}
+.tab-segment {
+ background-image: url(../img/bg-segmenter.png);
+}
+.tab-pvw {
+ background-image: url(../img/bg-previsualiser.png); text-align: right;
+}
+
+.pvw-mode .tab-pvw, .segment-mode .tab-segment {
+ width: 250px; background-position: 0 0; font-weight: 600;
+}
+
+.segment-mode .tab-pvw, .pvw-mode .tab-segment {
+ width: 170px; color: #796891;
+}
+
+.tab-media-title {
+ font-style: italic; font-weight: normal;
+}
+
+.empty-mode .tab-media-title, .pvw-mode .tab-media-title {
+ display: none;
+}
+
+/* col-middle - bloc-segmentation */
+.bloc-segmentation{
+ position: relative;
+}
+
+/* col-middle - bloc-segmentation - popin.segmentation */
+
+.segmentation {
+ position: relative;
+ overflow: hidden;
+ padding-top: 12px;
+}
+
+.segmentation h2{
+ font-size: 14px;
+ font-weight: 600;
+ color:#de2500;
+ margin: 5px 0 2px;
+}
+
+.time-tangle {
+ color: #7628df; cursor: w-resize; position: relative;
+}
+.time-tangle:hover,
+.time-tangle.active {
+ color: #FF00FC; border-bottom: 1px dashed #7628df;
+}
+.time-tangle:hover:after,
+.time-tangle.active:after {
+ color: #7628DF; position: absolute; top: 18px; left: 50%; width: 160px;
+ margin-left: -80px; font-size: 12px; text-align: center;
+ content: "glisser pour modifier"
+}
+
+.time-tangle.deactivate:hover {
+ border: none; color: #7628DF;
+}
+
+.time-tangle.deactivate:hover:after {
+ display: none;
+}
+
+.segmentation form{
+ overflow: hidden;
+}
+.form-segment-left,
+.form-segment-right{
+ float: left;
+}
+.segmentation .form-segment-left{
+ width: 230px;
+}
+
+.segmentation label, .update-title label {
+ display: block;
+ font-size: 12px;
+ font-weight: 600;
+ margin: 8px 0 4px;
+}
+.segmentation textarea, .update-title textarea {
+ width: 200px;
+ height: 69px;
+ max-width: 200px;
+ font-size: 12px;
+}
+
+.segmentation textarea {
+ margin-bottom: 32px;
+}
+
+.segmentation input[type=text], .update-title input[type=text]{
+ font-size: 12px;
+ width: 200px;
+ height: 20px;
+}
+
+.add-segment {
+ position: absolute; right: 10px; bottom: 10px;
+}
+
+.media-segments h2{
+ color: #30036d;
+ font-size: 14px;
+ font-weight: 600;
+ margin: 10px 8px 2px;
+}
+
+.media-segment-list {
+ margin: 8px 5px 0 6px;
+ padding-bottom: 1px;
+ position: relative;
+}
+
+.media-segment-popin .pointer{
+ margin-left: 140px
+}
+
+.media-segment-popin {
+ padding-top: 12px; overflow: hidden;
+ top: 2px; width: 300px; margin-left: -151px;
+ display: none;
+}
+
+.media-segment-popin p{
+ margin-right: 155px;
+ font-size: 12px;
+}
+
+.media-found-segments {
+ clear: both; padding-top: 5px;
+}
+
+.media-found-segments .media-segment-list {
+ margin: 0;
+}
+
+.media-found-list {
+ padding-bottom: 1px; position: relative;
+}
+
+.media-current-section {
+ background: url(../img/pinstripe-purple.png);
+ top: -2px; bottom: -2px; margin-left: -1px; padding: 2px 1px;
+ position: absolute;
+}
+
+.media-found-popin {
+ padding-top: 12px; overflow: hidden;
+ top: 2px; width: 170px; display: none;
+ margin-left: -86px;
+}
+
+.media-found-popin .pointer {
+ margin-left: 75px;
+}
+
+.reprendre-segment{
+ float: right;
+ display: block;
+}
+/* col-middle - bloc-vide */
+.tutorial{
+ padding: 0 10px;
+ color: #FFF;
+ font-weight: 600;
+ display: none;
+}
+.empty-mode .tutorial {
+ display: block;
+}
+.tutorial h2{
+ padding-top: 16px;
+ font-size: 18px;
+ margin-bottom: 20px;
+}
+.tutorial ol{
+ padding-left: 22px;
+}
+.tutorial li:first-child{
+ width: 324px;
+}
+.tutorial li{
+ list-style: decimal;
+ font-size: 14px;
+ margin-bottom: 16px;
+ padding-left: 20px;
+}
+/* col-left */
+.col-left,
+.col-right{
+ width: 250px;
+ min-height: 750px;
+ background: url(../img/bg-col.png) repeat-x 0 0 #e6e6e6;
+}
+.left-head {
+ background: url(../img/bg-video-search.png) 0 0 repeat-x #906ebe;
+ height: 70px;
+ padding-left: 10px;
+ margin-bottom: 1px;
+}
+.left-head h2{
+ padding-top: 8px;
+ margin-bottom: 12px;
+ color: #30036d;
+ font-size: 16px;
+ font-weight: 600;
+}
+.left-head input {
+ width: 222px;
+ font-size: 14px;
+ border: none;
+ height: 20px;
+ padding: 0 4px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ background: #FFF url(../img/zoom-icon.png) 214px 3px no-repeat;
+}
+
+.col-left input::-webkit-input-placeholder{
+ color: #b48aed;
+ font-style: italic;
+}
+.col-left input:-moz-placeholder {
+ color: #b48aed;
+ font-style: italic;
+}
+
+.col-left .item-video:hover,
+.col-left .item-video.active{
+ background: url(../img/arrow-item-video-sprite.png) right center no-repeat;
+}
+/* col-right */
+.col-right{
+ width: 250px;
+}
+.col-right .liste-segment{
+ height: 70px;
+ background: url(../img/bg-liste-segment.png) repeat-x 0 0;
+ padding: 0 10px;
+ width: 230px;
+}
+.col-right .liste-segment h2{
+ text-align: right;
+ color: #30036D;
+ font-weight: 600;
+ font-size: 16px;
+ margin-bottom: 12px;
+ padding-top: 8px;
+}
+.col-right .frise{
+ width: 228px;
+ position: relative;
+ height: 20px;
+}
+
+.col-right .frise-indication{
+ line-height: 20px;
+}
+
+.col-right .item-video:hover,
+.col-right .item-video.active{
+ background: url(../img/arrow-item-video-sprite.png) left center no-repeat;
+}
+
+.item-video {
+ cursor: pointer;
+}
+
+/* tools */
+.tools {
+ height: 17px;
+}
+.tools li{
+ float: left;
+}
+.tools a{
+ display: block;
+ width: 17px;
+ height: 17px;
+ background: url(../img/tools-sprite.png) no-repeat 0 0;
+}
+.tools a.edit{
+ background-position: 2px 0;
+}
+.tools a.edit:hover{
+ background-position: 2px -32px;
+}
+.tools a.edit.disable:hover,
+.tools a.edit.disable{
+ background-position: 2px -16px;
+}
+.tools a.bottom{
+ background-position: -19px 0;
+}
+.tools a.bottom:hover{
+ background-position: -19px -32px;
+}
+.tools a.bottom.disable:hover,
+.tools a.bottom.disable{
+ background-position: -19px -16px;
+}
+.tools a.top{
+ background-position: -40px 0;
+}
+.tools a.top:hover{
+ background-position: -40px -32px;
+}
+.tools a.top.disable:hover,
+.tools a.top.disable{
+ background-position: -40px -16px;
+}
+.tools a.delete{
+ background-position: -61px 0;
+}
+.tools a.delete:hover{
+ background-position: -61px -32px;
+}
+.tools a.delete.disable:hover,
+.tools a.delete.disable{
+ background-position: -61px -16px;
+}
+
+
+/* Video */
+
+.video{
+ width: 460px;
+ height: 300px;
+}
+.publier-button{
+ position: absolute;
+ width: 69px;
+ height: 67px;
+ background: url(../img/publier-button-sprite.png) 0 0 no-repeat;
+ left: 382px;
+ top: 10px;
+ z-index: 4;
+}
+.publier-button:hover{
+ background-position: 0 -67px;
+}
+.publier-button.disable, .publier-button.disable:hover{
+ background-position: 0 -134px;
+}
+
+/* Slice Widget */
+
+.Ldt-Slice {
+ border-radius: 0; border: none; padding: 0; margin: 12px 6px; background: #B6B8B8; height: 8px;
+}
+
+.Ldt-Slice .ui-slider-handle {
+ width: 7px; height: 20px; top: 0; border: none; margin: 0; padding: 0;
+ background: url(../img/slice-handles.png); border-radius: 0; cursor: pointer;
+}
+
+.ui-slider-handle.Ldt-Slice-left-handle {
+ margin-left: -7px;
+}
+
+.ui-slider-handle.Ldt-Slice-left-handle.ui-state-hover, .ui-slider-handle.Ldt-Slice-left-handle.ui-state-active {
+ background-position: 0 -20px;
+}
+
+.ui-slider-handle.Ldt-Slice-right-handle {
+ margin-left: 0; background-position: -7px 0;
+}
+
+.ui-slider-handle.Ldt-Slice-right-handle.ui-state-hover, .ui-slider-handle.Ldt-Slice-right-handle.ui-state-active {
+ background-position: -7px -20px;
+}
+
+.Ldt-Slider {
+ margin: 0 6px;
+}
+
+.Ldt-Slice .ui-slider-range {
+ background: url(../img/pinstripe-purple.png);
+}
+
+/* Validate */
+
+.validate {
+ float: right; width: 20px; height: 20px; cursor: pointer; background: url(../img/helpwarn.png);
+ position: relative;
+}
+
+.validate:hover {
+ background-position: -20px 0;
+}
+
+.validate.warning {
+ background-position: 0 -20px;
+}
+
+.validate.warning:hover {
+ background-position: -20px -20px;
+}
+
+.validate.critical {
+ background-position: 0 -40px;
+}
+
+.validate.critical:hover {
+ background-position: -20px -40px;
+}
+
+.item-video .validate {
+ margin-right: -5px;
+}
+
+.liste-segment .validate {
+ margin: 6px -1px 0 2px;
+}
+
+.validate-tooltip {
+ position: absolute; top: 16px; left: -225px; width: 235px; padding: 16px 8px 0;
+ background: url(../img/tooltip.png) top no-repeat; z-index: 6; min-height: 30px;
+ color: #FFFFFF; display: none; cursor: auto;
+}
+
+.validate-tooltip ul {
+ padding-left: 14px; list-style: disc; font-size: 12px;
+}
+
+.validate-tooltip li {
+ margin: 2px 0;
+}
+
+.validate:hover .validate-tooltip {
+ display: block;
+}
+
+.validate:hover .validate-tooltip:hover {
+ display: none;
+}
+
+.validate-tooltip:after {
+ bottom: -10px; content: ""; height: 10px;
+ left: 0; position: absolute; width: 100%;
+ background: url(../img/tooltip.png) bottom no-repeat;
+}
+
+.tagit {
+ border: 1px solid #867A97;
+ padding: 0 4px; width: 200px;
+ font-size: 12px; font-family: 'Open Sans';
+}
+
+ul.tagit li.tagit-choice {
+ padding: 3px 18px 3px 3px;
+}
+
+ul.tagit li.tagit-new {
+ padding: 0;
+}
+
+ul.tagit input[type="text"] {
+ width: 100px;
+}
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Bold.eot
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Bold.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Bold.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Bold.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,587 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Bold.ttf
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Bold.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Bold.woff
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Bold.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-BoldItalic.eot
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-BoldItalic.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-BoldItalic.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/fonts/OpenSans-BoldItalic.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,600 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-BoldItalic.ttf
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-BoldItalic.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-BoldItalic.woff
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-BoldItalic.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Italic.eot
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Italic.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Italic.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Italic.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,612 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Italic.ttf
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Italic.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Italic.woff
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Italic.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Light.eot
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Light.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Light.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Light.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,581 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Light.ttf
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Light.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Light.woff
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Light.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Regular.eot
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Regular.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Regular.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Regular.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,592 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Regular.ttf
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Regular.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Regular.woff
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Regular.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Semibold.eot
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Semibold.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Semibold.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Semibold.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,587 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Semibold.ttf
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Semibold.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Semibold.woff
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-Semibold.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-SemiboldItalic.eot
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-SemiboldItalic.eot has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-SemiboldItalic.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/fonts/OpenSans-SemiboldItalic.svg Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,609 @@
+
+
+
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-SemiboldItalic.ttf
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-SemiboldItalic.ttf has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/fonts/OpenSans-SemiboldItalic.woff
Binary file src/hashcut/static/hashcut/iri/css/fonts/OpenSans-SemiboldItalic.woff has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/home.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/home.css Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,87 @@
+/* header */
+.title-header h2{
+ width: 100%;
+ text-align: center;
+ line-height: 60px;
+}
+.title-header h2 a{
+ color: #de2500;
+ font-size: 24px;
+ text-decoration: underline;
+ font-weight: bold;
+}
+.title-header h2 a:hover{
+ text-decoration: none;
+}
+
+/* left-content */
+
+.news .video-item:nth-child(2n+2){
+ margin-right: 0;
+}
+
+
+
+.last .video-item:nth-child(4n+4){
+ margin-right: 0;
+}
+.last .video-item{
+ height: 130px;
+ width: 140px;
+ float: left;
+ margin: 0 20px 12px 0;
+}
+
+/* right-content */
+
+.definition p{
+ font-size: 12px;
+ line-height: 14px;
+ margin-bottom: 12px;
+}
+.definition p strong{
+ font-weight: bold;
+}
+.definition p a{
+ color: #7628df;
+ text-decoration: underline;
+}
+.definition p a:hover{
+ text-decoration: none;
+}
+.how-to li{
+ background-image: url(../img/how-to-sprite.png);
+ background-repeat: no-repeat;
+ margin-bottom: 2px;
+}
+.how-to li h3{
+ color: #de2500;
+ font-size: 18px;
+ font-weight: bold;
+ margin-bottom: 12px;
+}
+.how-to li p{
+ font-size: 12px;
+ word-wrap: break-word;
+ width: 210px;
+}
+.how-to li.inscription{
+ height: 84px;
+ background-position: 212px 0;
+}
+.how-to li.creation{
+ height: 100px;
+ background-position: 212px -128px;
+}
+.how-to li.creation{
+ height: 100px;
+ background-position: 212px -128px;
+}
+.how-to li.publier{
+ height: 90px;
+ background-position: 212px -266px;
+}
+.how-to li.next-step{
+ height: 24px;
+ background-position: 212px -377px;
+}
\ No newline at end of file
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/players.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/players.css Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,128 @@
+.more-info-wrap{
+ padding-right: 10px;
+}
+.more-info{
+ text-align: left;
+}
+.more-info th{
+ font-weight: 600;
+ font-style: normal;
+ font-size: 12px;
+ width: 78px;
+}
+.more-info td{
+ padding-bottom: 12px;
+ font-size: 12px;
+}
+.more-info a{
+ text-decoration: underline;
+}
+.more-info a:hover{
+ text-decoration: none;
+}
+.info-title a{
+ color:#30036d;
+ font-size: 14px;
+ font-weight: bold;
+}
+.info-duration td{
+ color: #de2500;
+}
+.info-author a{
+ color: #7628df;
+}
+.cloner{
+ float: right; margin-bottom: 8px;
+}
+.list-video{
+ height: auto;
+ margin-left: -10px;
+ max-height: 450px;
+}
+.item-video:hover,
+.item-video.active{
+ background: url(../img/arrow-item-video-sprite.png) left center no-repeat;
+}
+.time-length{
+ margin-bottom: 5px;
+}
+.item-video .frise{
+ width: 100%;
+ height: 8px;
+ background-color: #999999;
+ display: block;
+}
+.title-video a {
+ color: #30036d;
+}
+.item-video .title-video a:hover {
+ text-decoration: underline;
+}
+.item-video .frise{
+ border:none;
+}
+.bloc-video{
+ padding-left: 10px;
+}
+.video {
+ height: 400px;
+ width: 620px;
+}
+.bloc-pvw{
+ margin-top: 7px;
+}
+.popin-content h2{
+ margin: 0;
+ border:none;
+}
+.Ldt-Ctrl {
+ margin-bottom: 6px;
+}
+.Ldt-Slider {
+ margin: 0;
+}
+.frise-segment {
+ cursor: pointer;
+}
+.segment-info .pointer {
+ margin-left: -10px;
+}
+
+.media-segment-popin .pointer{
+ margin-left: 105px
+}
+
+.media-segment-popin {
+ padding-top: 12px; overflow: hidden;
+ top: 2px; width: 230px; margin-left: -116px;
+ display: none;
+}
+
+.media-segment-list {
+ margin: 8px 0 0;
+ padding-bottom: 1px;
+ position: relative;
+}
+
+.active .media-segment-section, .media-segment:hover .media-segment-section {
+ -moz-box-shadow: inset 0 0 2px 2px #fc00ff, 0 0 2px #fc00ff;
+ -webkit-box-shadow: inset 0 0 2px 2px #fc00ff, 0 0 2px #fc00ff;
+ box-shadow: inset 0 0 2px 2px #fc00ff, 0 0 2px #fc00ff;
+}
+
+.mashup-link {
+ display: none;
+ font-size: 13px;
+ color: #30036D;
+ margin-top: 5px;
+}
+
+.mashup-link a {
+ color: #30036D;
+ font-weight: 600;
+ text-decoration: underline;
+}
+
+.mashup-link a:hover {
+ text-decoration: none;
+}
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/profil.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/profil.css Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,17 @@
+.title-content{
+ padding: 20px 0 6px;
+ border-bottom: 1px solid #333333;
+ color: #30036d;
+ font-size: 18px;
+ font-weight: 600;
+ margin-bottom: 14px;
+}
+.title-content a{
+ color: #ff00fc;
+}
+.profil .video-item{
+ margin-bottom: 16px;
+}
+.profil .video-item:nth-child(3n+3){
+ margin-right: 0;
+}
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/css/reset.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/iri/css/reset.css Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,77 @@
+/* http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+*/
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+.clearfix:after {
+ content: ".";
+ display: block;
+ clear: both;
+ visibility: hidden;
+ line-height: 0;
+ height: 0;
+}
+
+.clearfix {
+ display: inline-block;
+}
+
+html[xmlns] .clearfix {
+ display: block;
+}
+
+* html .clearfix {
+ height: 1%;
+}
+.clear{
+ clear: both;
+}
+
+input::-moz-focus-inner {
+ border: 0 none;
+ padding: 0;
+}
\ No newline at end of file
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/apercu-video.jpg
Binary file src/hashcut/static/hashcut/iri/img/apercu-video.jpg has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/arrow-bot.png
Binary file src/hashcut/static/hashcut/iri/img/arrow-bot.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/arrow-item-video-sprite.png
Binary file src/hashcut/static/hashcut/iri/img/arrow-item-video-sprite.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/arrow-top.png
Binary file src/hashcut/static/hashcut/iri/img/arrow-top.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/bg-col.png
Binary file src/hashcut/static/hashcut/iri/img/bg-col.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/bg-degrade.png
Binary file src/hashcut/static/hashcut/iri/img/bg-degrade.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/bg-indication.png
Binary file src/hashcut/static/hashcut/iri/img/bg-indication.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/bg-jaune.png
Binary file src/hashcut/static/hashcut/iri/img/bg-jaune.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/bg-liste-segment.png
Binary file src/hashcut/static/hashcut/iri/img/bg-liste-segment.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/bg-previsualiser.png
Binary file src/hashcut/static/hashcut/iri/img/bg-previsualiser.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/bg-segmenter.png
Binary file src/hashcut/static/hashcut/iri/img/bg-segmenter.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/bg-segments.png
Binary file src/hashcut/static/hashcut/iri/img/bg-segments.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/bg-video-search.png
Binary file src/hashcut/static/hashcut/iri/img/bg-video-search.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/bg.png
Binary file src/hashcut/static/hashcut/iri/img/bg.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/border-right-segment.png
Binary file src/hashcut/static/hashcut/iri/img/border-right-segment.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/hashcut-logo.png
Binary file src/hashcut/static/hashcut/iri/img/hashcut-logo.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/helpwarn.png
Binary file src/hashcut/static/hashcut/iri/img/helpwarn.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/how-to-sprite.png
Binary file src/hashcut/static/hashcut/iri/img/how-to-sprite.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/inv-triangle.png
Binary file src/hashcut/static/hashcut/iri/img/inv-triangle.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/logo-cinecast.png
Binary file src/hashcut/static/hashcut/iri/img/logo-cinecast.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/logo-iri.png
Binary file src/hashcut/static/hashcut/iri/img/logo-iri.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/pencil-icon.png
Binary file src/hashcut/static/hashcut/iri/img/pencil-icon.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/pinstripe-purple.png
Binary file src/hashcut/static/hashcut/iri/img/pinstripe-purple.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/player-sprites.png
Binary file src/hashcut/static/hashcut/iri/img/player-sprites.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/player_gradient.png
Binary file src/hashcut/static/hashcut/iri/img/player_gradient.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/pompidou-logo.png
Binary file src/hashcut/static/hashcut/iri/img/pompidou-logo.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/popin-triangle.png
Binary file src/hashcut/static/hashcut/iri/img/popin-triangle.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/publier-button-sprite.png
Binary file src/hashcut/static/hashcut/iri/img/publier-button-sprite.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/reel.gif
Binary file src/hashcut/static/hashcut/iri/img/reel.gif has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/slice-handles.png
Binary file src/hashcut/static/hashcut/iri/img/slice-handles.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/socialbuttons.png
Binary file src/hashcut/static/hashcut/iri/img/socialbuttons.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/socialcopy.png
Binary file src/hashcut/static/hashcut/iri/img/socialcopy.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/tools-sprite.png
Binary file src/hashcut/static/hashcut/iri/img/tools-sprite.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/tooltip.png
Binary file src/hashcut/static/hashcut/iri/img/tooltip.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/visuel-home-last.jpg
Binary file src/hashcut/static/hashcut/iri/img/visuel-home-last.jpg has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/visuel-home-news.jpg
Binary file src/hashcut/static/hashcut/iri/img/visuel-home-news.jpg has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/visuel-player-bar.jpg
Binary file src/hashcut/static/hashcut/iri/img/visuel-player-bar.jpg has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/visuel-segment.png
Binary file src/hashcut/static/hashcut/iri/img/visuel-segment.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/iri/img/zoom-icon.png
Binary file src/hashcut/static/hashcut/iri/img/zoom-icon.png has changed
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/js/common.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/js/common.js Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,26 @@
+$(function(){
+
+ $(".open-popin").click(function(){
+ var target = $(this).attr("href");
+ if($(target).is(':visible')){
+ $(".popin").hide();
+ }else{
+ $(".popin").hide();
+ $(target).show();
+ }
+ return false;
+ });
+
+ $(".change-account").click(function() {
+ $(".user").hide();
+ $(".user.login").show();
+ });
+ $(".signup-button").click(function() {
+ $(".user").hide();
+ $(".user.signup").show();
+ });
+ $(".login-form, .signup-form").submit(function() {
+ $(".user").hide();
+ });
+
+});
\ No newline at end of file
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/js/compile.bat
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/js/compile.bat Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,9 @@
+@echo off
+
+type init.js > hashcut.js
+
+set jsfiles=i18n model ldt-serializer segmentapi-serializer contentapi-serializer mashupcore editor mashupplayer mediaplayer social
+
+FOR %%f IN (%jsfiles%) DO (type %%f.js >> hashcut.js)
+
+echo Hashcut.js compiled successfully!
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/js/compile.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/js/compile.sh Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+cat init.js > hashcut.js
+
+jsfiles="i18n model ldt-serializer segmentapi-serializer contentapi-serializer mashupcore editor mashupplayer mediaplayer social"
+
+for jsfile in $jsfiles
+do
+ cat $jsfile.js >> hashcut.js
+done
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/js/contentapi-serializer.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/js/contentapi-serializer.js Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,27 @@
+IriSP.serializers.content = {
+ deSerialize : function(_data, _source) {
+ var _medialist = new IriSP.Model.List(_source.directory);
+
+ function deserializeObject(_m, i) {
+ var _media = new IriSP.Model.Media(_m.iri_id, _source);
+ _media.video = _m.media_url;
+ _media.title = _m.title;
+ _media.description = _m.description;
+ _media.setDuration(_m.duration);
+ _media.thumbnail = _m.image;
+ _media.color = IriSP.vizcolors[i % IriSP.vizcolors.length];
+ _media.keywords = _m.tags;
+ _medialist.push(_media);
+ }
+
+ if (typeof _data.objects !== "undefined") {
+ IriSP._(_data.objects).each(deserializeObject);
+ } else {
+ deserializeObject(_data, 0);
+ }
+
+ _source.addList("media", _medialist);
+ }
+};
+
+/* END contentapi-serializer.js */
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/js/editor.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/js/editor.js Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,875 @@
+IriSP.editor = function(options) {
+
+ /* Load Media List */
+
+ var directory = new IriSP.Model.Directory(),
+ apidirectory = new IriSP.Model.Directory(),
+ project = directory.remoteSource({
+ url: IriSP.endpoints.content,
+ url_params: _({}).extend(options.filter),
+ serializer: IriSP.serializers.content
+ }),
+/* project = directory.remoteSource({
+ url: options.url,
+ serializer: IriSP.serializers.medialist
+ }),
+*/
+ mashup = new IriSP.Model.Mashup(false, project),
+ mediatemplate = _.template(
+ '
'
+ + '
'
+ + '<%= title %>
<%= description %>
'
+ + '
<%= IriSP.translate("Duration:") %> <%= duration.toString() %>
'
+ ),
+ segmenttemplate = _.template(
+ ''
+ + '
'
+ + '<%= annotation.getMedia().title %>
'
+ + '
<%= annotation.title %>
<%= annotation.begin.toString() %> - <%= annotation.end.toString() %> (<%= annotation.getDuration().toString() %>)
'
+ + '
'
+ ),
+ mediasegmenttemplate = _.template(
+ ''
+ ),
+ mediasegmentlisttemplate = _.template(
+ ''
+ ),
+ mediafoundtemplate = _.template(
+ ''
+ ),
+ mediafoundlisttemplate = _.template(
+ ''
+ ),
+ mashupstatus = '',
+ addMode, currentMedia, currentSegment;
+
+ IriSP.mashupcore(project, mashup);
+
+ /* Validation of segments and mashup */
+
+ var segmentcritical = [
+ {
+ validate: function(_s) {
+ return (_s.getDuration() >= 1000);
+ },
+ message: "A segment must be at least one second long"
+ },
+ {
+ validate: function(_s) {
+ return (_s.getDuration() < 180000);
+ },
+ message: "A segment must be at most three minutes long"
+ },
+ {
+ validate: function(_s) {
+ return (!!_s.title && _s.title !== IriSP.translate("Untitled segment"));
+ },
+ message: "A segment must have a title"
+ }
+ ];
+ var segmentwarning = [
+ {
+ validate: function(_s) {
+ return (!!_s.description);
+ },
+ message: "A segment should have a description"
+ },
+ {
+ validate: function(_s) {
+ return (!!_s.keywords.length);
+ },
+ message: "A segment should have tags"
+ }
+ ];
+
+ var mashupcritical = [
+ {
+ validate: function(_m) {
+ return _m.segments.length > 2;
+ },
+ message: "A hashcut must be made from at least three segments"
+ },
+ {
+ validate: function(_m) {
+ return (!!_m.title && _m.title !== IriSP.translate("Untitled Hashcut"));
+ },
+ message: "A hashcut must have a title"
+ }
+ ];
+ var mashupwarning = [
+ {
+ validate: function(_m) {
+ return !!_m.description
+ },
+ message: "A hashcut should have a description"
+ }
+ ];
+
+ /* Fill left column with Media List */
+
+ project.onLoad(function() {
+ var html = '';
+ project.getMedias().forEach(function(_m) {
+ html += mediatemplate(_m);
+ });
+ $(".col-left .list-video").html(html);
+ project.getMedias().forEach(function(_m) {
+ apidirectory.remoteSource({
+ url: IriSP.endpoints.segment,
+ url_params: {
+ iri_id: _m.id,
+ limit: 0
+ },
+ serializer: IriSP.serializers.segmentapi
+ }).onLoad(function() {
+ var medias = this.getMedias(),
+ annotations = this.getAnnotations();
+ if (medias && medias.length) {
+ var mediaid = medias[0].id;
+ el = $(".item-video[data-media-id='" + mediaid + "'] .media-count");
+ el.text(annotations.length).parent().show();
+ mediasegmentscache[mediaid] = annotations;
+ if (currentMedia && mediaid === currentMedia.id && currentSegment) {
+ showOtherSegments();
+ }
+ }
+ });
+ });
+ });
+
+ /* Search Media with left column form */
+
+ $(".col-left input").on("keyup change input paste", function() {
+ var val = $(this).val();
+ if (val) {
+ var find = IriSP.Model.regexpFromTextOrArray(val, true),
+ replace = IriSP.Model.regexpFromTextOrArray(val, false);
+ }
+ $(".col-left .item-video").each(function() {
+ var li = $(this),
+ mediaid = li.attr("data-media-id"),
+ media = directory.getElement(mediaid);
+ if (!val) {
+ li.find(".title-video").text(media.title);
+ li.find(".description").text(media.description);
+ li.find(".media-found-segments").html("");
+ li.show();
+ } else {
+ var apimedia = apidirectory.getElement(mediaid);
+ if (apimedia) {
+ var annotations = apimedia.getAnnotations().searchByTextFields(val);
+ } else {
+ var annotations = [];
+ }
+ var found = find.test(media.title) || find.test(media.description) || annotations.length;
+ if (found) {
+ li.find(".title-video").html(media.title.replace(replace, '$1'));
+ li.find(".description").html(media.description.replace(replace, '$1'));
+ var html = '',
+ k = 230 / media.duration,
+ lines = [];
+ _(annotations).each(function(_a, i) {
+ var pos = k * (_a.begin + _a.end) / 2,
+ corrpos = Math.max(76, Math.min(156, pos)),
+ line = IriSP._(lines).find(function(line) {
+ return !IriSP._(line.annotations).find(function(ann) {
+ return ann.begin < _a.end && ann.end > _a.begin
+ });
+ });
+ if (!line) {
+ line = { index: lines.length, annotations: []};
+ lines.push(line);
+ }
+ line.annotations.push(_a);
+ vizdata = {
+ annotation : _a,
+ left : k * _a.begin,
+ width : k * _a.getDuration(),
+ top: 8 * line.index,
+ color: IriSP.vizcolors[i % IriSP.vizcolors.length],
+ title: _a.title.replace(replace, '$1'),
+ popleft : corrpos,
+ pointerpos : (pos - corrpos),
+ }
+ html += mediafoundtemplate(vizdata);
+ });
+ html = mediafoundlisttemplate({
+ height: 8 * lines.length,
+ segments: html
+ });
+ li.find(".media-found-segments").html(html);
+ li.show();
+ } else {
+ li.hide();
+ }
+ }
+ })
+ });
+
+ /* Fill right column when mashup is updated */
+
+ function updateMashupUI() {
+ var listhtml = '', critical = false, warning = false, messages = [];
+ mashup.segments.forEach(function(_s) {
+ listhtml += segmenttemplate(_s);
+ if (_s.annotation.status === "critical") {
+ critical = true;
+ }
+ });
+ if (critical) {
+ messages.push("One or more segments are invalid");
+ }
+
+ _(mashupcritical).each(function(sc) {
+ if (!sc.validate(mashup)) {
+ critical = true;
+ messages.push(sc.message);
+ }
+ });
+ _(mashupwarning).each(function(sc) {
+ if (!sc.validate(mashup)) {
+ warning = true;
+ messages.push(sc.message);
+ }
+ });
+ mashup.status = critical ? "critical" : (warning ? "warning" : "valid");
+ if (!messages.length) {
+ messages.push("Your hashcut is valid!");
+ }
+ mashupstatus = ' - ' + _(messages).map(IriSP.translate).join('\n - ');
+
+ $(".publier-button").toggleClass("disable", critical);
+
+ $(".liste-segment .validate").removeClass("critical warning valid").addClass(mashup.status);
+ $(".liste-segment .validate-tooltip").html("");
+
+ $(".col-right .list-video").html(listhtml).find(".item-video:last-child .bottom, .item-video:first-child .top").addClass("disable");
+
+ project.trigger("mouseout-annotation");
+ }
+
+ mashup.on("setcurrent", function() {
+ currentMedia = mashup;
+ });
+
+ mashup.on("change",updateMashupUI);
+
+ /* Slice Widget */
+
+ var sliceSlider = $(".Ldt-Slice"),
+ sliceStartTime,
+ slidersRange = 920;
+
+ sliceSlider.slider({
+ range: true,
+ values: [0, slidersRange],
+ min: 0,
+ max: slidersRange,
+ start: function() {
+ if (currentMedia) {
+ if (!currentMedia.getPaused()) {
+ currentMedia.pause();
+ }
+ }
+ },
+ slide: function(event, ui) {
+ if (currentMedia && currentSegment) {
+ var t = currentMedia.duration * ui.value / slidersRange;
+ if (ui.value === ui.values[0]) {
+ currentSegment.setBegin(t);
+ } else {
+ currentSegment.setEnd(t);
+ }
+ }
+ }
+ });
+
+ sliceSlider.find(".ui-slider-handle:first")
+ .addClass("Ldt-Slice-left-handle")
+ .click(function() {
+ if (currentMedia && currentSegment) {
+ currentMedia.setCurrentTime(currentSegment.begin);
+ }
+ });
+ sliceSlider.find(".ui-slider-handle:last")
+ .addClass("Ldt-Slice-right-handle")
+ .click(function() {
+ if (currentMedia && currentSegment) {
+ currentMedia.setCurrentTime(currentSegment.end);
+ }
+ });
+
+
+ /* Update Segment UI */
+
+ function updateSegmentUI() {
+ if (currentMedia && currentSegment) {
+ var start = currentSegment.begin,
+ end = currentSegment.end,
+ dur = currentSegment.getDuration(),
+ f = slidersRange / currentMedia.duration,
+ tangleStart = $(".tangle-start"),
+ tangleEnd = $(".tangle-end"),
+ tangleDuration = $(".tangle-duration"),
+ k = 100 / currentMedia.duration,
+ p = k * (start + end) / 2;
+ sliceSlider.slider( "values", [ f * start, f * end ] );
+ tangleStart.text(start.toString(tangleStart.hasClass("active"))).attr("data-milliseconds",start.milliseconds);
+ tangleEnd.text(end.toString(tangleEnd.hasClass("active"))).attr("data-milliseconds",end.milliseconds);
+ tangleDuration.text(dur.toString(tangleDuration.hasClass("active"))).attr("data-milliseconds",dur.milliseconds);
+ $(".segmentation .pointer").css("left", p + "%");
+ $(".media-current-section").css({
+ left: (k * start) + "%",
+ width: (k * dur) + "%"
+ });
+ var messages = [],
+ critical = false,
+ warning = false;
+ _(segmentcritical).each(function(sc) {
+ if (!sc.validate(currentSegment)) {
+ critical = true;
+ messages.push(sc.message);
+ }
+ });
+ _(segmentwarning).each(function(sc) {
+ if (!sc.validate(currentSegment)) {
+ warning = true;
+ messages.push(sc.message);
+ }
+ });
+ currentSegment.status = critical ? "critical" : (warning ? "warning" : "valid");
+ if (!messages.length) {
+ messages.push("This segment is valid!")
+ }
+ currentSegment.status_messages = _(messages).map(IriSP.translate);
+
+ $(".segmentation .validate").removeClass("critical warning valid").addClass(currentSegment.status);
+ $(".segmentation .validate-tooltip").html("- " + currentSegment.status_messages.join("
- ")+"
");
+ }
+ }
+
+ var mediasegmentscache = {};
+
+ function setMedia(media) {
+ if (currentMedia) {
+ currentMedia.pause();
+ }
+ currentMedia = media;
+ project.trigger("set-current", media);
+ if (currentMedia.elementType == "media") {
+ showSegmentation();
+ $(".tab-media-title").text(currentMedia.title);
+
+ addMode = !(currentSegment && mashup.hasAnnotation(currentSegment));
+
+ if (!currentSegment) {
+ currentSegment = new IriSP.Model.Annotation(false, project);
+ currentSegment.setMedia(currentMedia.id);
+ currentSegment.setBegin(currentMedia.getCurrentTime());
+ currentSegment.setEnd(Math.min(currentMedia.getCurrentTime() + 180000, currentMedia.duration));
+ currentSegment.title = IriSP.translate("Untitled segment");
+ currentSegment.color = currentMedia.color;
+ currentSegment.thumbnail = currentMedia.thumbnail;
+ currentSegment.created = new Date();
+ currentSegment.keywords = [];
+ currentSegment.description = "";
+ currentSegment.on("change-begin", function() {
+ if (currentMedia && currentSegment === this) {
+ currentMedia.setCurrentTime(this.begin);
+ updateSegmentUI();
+ }
+ });
+ currentSegment.on("change-end", function() {
+ if (currentMedia && currentSegment === this) {
+ currentMedia.setCurrentTime(this.end);
+ updateSegmentUI();
+ }
+ });
+ }
+ if (currentMedia.loaded) {
+ currentMedia.setCurrentTime(currentSegment.begin);
+ }
+ $(".add-segment").val(IriSP.translate(addMode ? "Add segment to hashcut" : "Save segment"));
+ $(".create-or-edit").text(IriSP.translate(addMode ? "Create new segment" : "Edit existing segment"));
+ media.show();
+ $("#segment-title").val(currentSegment.title);
+ $("#segment-description").val(currentSegment.description);
+ var segment_tags = $("#segment-tags");
+ segment_tags.tagit("option","onTagRemoved",function(){});
+ segment_tags.tagit("option","onTagAdded",function(){});
+ segment_tags.tagit("removeAll");
+ _(currentSegment.keywords).each(function(tag) {
+ segment_tags.tagit("createTag",tag);
+ });
+ segment_tags.tagit("option","onTagRemoved",updateSegmentTags);
+ segment_tags.tagit("option","onTagAdded",updateSegmentTags);
+ updateSegmentUI();
+ var relatedSegments = mashup.segments.filter(function(_s) {
+ return _s.getMedia() === currentMedia && _s.annotation !== currentSegment;
+ });
+ if (relatedSegments.length) {
+ $(".self-media-segments").show();
+ } else {
+ $(".self-media-segments").hide();
+ }
+ $(".self-media-segments .media-segments-list").html(mediaSegmentList(_(relatedSegments).pluck("annotation")));
+ showOtherSegments();
+ project.trigger("mouseout-annotation");
+ }
+ if (currentMedia.elementType === "mashup") {
+ showPreview();
+ }
+ }
+
+ function mediaSegmentList(_annotations) {
+ var html = '',
+ k = $(".Ldt-Slider").width() / currentMedia.duration,
+ lines = [];
+ _(_annotations).each(function(_a, i) {
+ var pos = k * (_a.begin + _a.end) / 2,
+ corrpos = Math.max(145, Math.min(305, pos)),
+ line = IriSP._(lines).find(function(line) {
+ return !IriSP._(line.annotations).find(function(ann) {
+ return ann.begin < _a.end && ann.end > _a.begin
+ });
+ });
+ if (!line) {
+ line = { index: lines.length, annotations: []};
+ lines.push(line);
+ }
+ line.annotations.push(_a);
+ vizdata = {
+ annotation : _a,
+ popleft : corrpos,
+ left : k * _a.begin,
+ width : k * _a.getDuration(),
+ height: 8,
+ top: 8 * line.index,
+ pointerpos : (pos - corrpos),
+ color: IriSP.vizcolors[i % IriSP.vizcolors.length]
+ }
+ html += mediasegmenttemplate(vizdata);
+ });
+ return mediasegmentlisttemplate({
+ height: 8 * lines.length,
+ left: k * currentSegment.begin,
+ width: k * currentSegment.getDuration(),
+ segments: html
+ });
+ }
+
+ /* Show Related Segments */
+
+ function showOtherSegments() {
+ var annotations = mediasegmentscache[currentMedia.id];
+ $(".other-media-segments .media-segments-list").html(mediaSegmentList(annotations));
+ if (annotations && annotations.length) {
+ $(".other-media-segments").show();
+ }
+ else {
+ $(".other-media-segments").hide();
+ }
+ }
+ /* Set In, Out */
+
+ $(".Ldt-Ctrl-SetIn").click(function() {
+ if (currentMedia && currentSegment) {
+ currentSegment.setBegin(currentMedia.getCurrentTime());
+ }
+ });
+ $(".Ldt-Ctrl-SetOut").click(function() {
+ if (currentMedia && currentSegment) {
+ currentSegment.setEnd(currentMedia.getCurrentTime());
+ }
+ });
+
+ /* Segment Form interaction */
+
+ $("#segment-title").on("keyup change input paste", function() {
+ if (currentMedia && currentSegment) {
+ currentSegment.title = $(this).val();
+ updateSegmentUI();
+ mashup.trigger("change");
+ }
+ });
+ $("#segment-title").on("focus click", function() {
+ if ($(this).val() === IriSP.translate("Untitled segment")) {
+ $(this).val("");
+ }
+ });
+ $("#segment-description").on("keyup change input paste", function() {
+ if (currentMedia && currentSegment) {
+ currentSegment.description = $(this).val();
+ mashup.trigger("change");
+ }
+ });
+ $("#segment-form").submit(function() {
+ if (addMode) {
+ mashup.addAnnotation(currentSegment);
+ currentSegment = undefined;
+ setMedia(currentMedia);
+ } else {
+ mashup.trigger("change");
+ var segment = mashup.getAnnotation(currentSegment);
+ currentSegment = undefined;
+ setMedia(mashup);
+ if (segment) {
+ mashup.setCurrentTime(segment.begin);
+ mashup.trigger("enter-annotation",segment);
+ }
+ }
+ return false;
+ });
+
+ $("#segment-tags").tagit();
+
+
+ /* We have to defer this function because the tagit events
+ * are triggered before the data are updated */
+ function updateSegmentTags() {
+ window.setTimeout(function() {
+ if (currentMedia && currentSegment) {
+ currentSegment.keywords = $("#segment-tags").tagit("assignedTags");
+ }
+ }, 0);
+ }
+
+ /* Click on media items */
+
+ $(".col-left").on("click", ".item-video", function() {
+ currentSegment = undefined;
+ setMedia(project.getElement($(this).attr("data-media-id")));
+ });
+
+ /* Click on Tabs */
+
+ function showSegmentation() {
+ $(".col-middle").removeClass("empty-mode pvw-mode").addClass("segment-mode");
+ return false;
+ }
+ function showPreview() {
+ $(".col-middle").removeClass("empty-mode segment-mode").addClass("pvw-mode");
+ return false;
+ }
+ function showEmpty() {
+ $("video").hide();
+ $(".col-middle").removeClass("pvw-mode segment-mode").addClass("empty-mode");
+ return false;
+ }
+
+ $(".tab-pvw").click(function() {
+ if (mashup.segments.length) {
+ setMedia(mashup);
+ }
+ });
+
+ /* Click on segments */
+
+ function reorganizeMashup() {
+ var ids = $(".organize-segments .item-video").map(function(){return $(this).attr("data-segment-id")});
+ mashup.setAnnotationsById(ids);
+ }
+
+ project.on("mouseover-annotation", function(annotation) {
+ var mediaid = annotation.getMedia().id;
+ $(".media").removeClass("active");
+ $(".media[data-media-id='" + mediaid + "']").addClass("active");
+ });
+
+ project.on("mouseout-annotation", function() {
+ $(".media").removeClass("active");
+ var mediaid = undefined;
+ if (currentMedia && currentMedia.elementType === "media") {
+ mediaid = currentMedia.id;
+ if (currentSegment) {
+ $(".annotation").removeClass("active");
+ $(".annotation[data-segment-id='" + currentSegment.id + "']").addClass("active");
+ }
+ }
+ if (currentMedia === mashup && mashup.currentMedia) {
+ mediaid = mashup.currentMedia.id
+ }
+ $(".media[data-media-id='" + mediaid + "']").addClass("active");
+ });
+
+ $(".organize-segments")
+ .sortable({
+ stop : reorganizeMashup
+ })
+ .on("mouseover", ".item-video", function() {
+ project.trigger("mouseover-annotation", project.getElement($(this).attr("data-segment-id")));
+ })
+ .on("mouseout", ".item-video", function() {
+ project.trigger("mouseout-annotation");
+ })
+ .on("click", ".item-video", function() {
+ project.trigger("click-annotation", project.getElement($(this).attr("data-segment-id")));
+ })
+ .on("click", ".edit", function(e) {
+ var currentItem = $(this).parents(".item-video"),
+ media = project.getElement(currentItem.attr("data-media-id")),
+ segment = project.getElement(currentItem.attr("data-segment-id"));
+ currentSegment = segment;
+ setMedia(media);
+ return false;
+ })
+ .on("click", ".top", function(e){
+ var currentItem = $(this).parents(".item-video");
+ currentItem.insertBefore(currentItem.prev());
+ reorganizeMashup();
+ return false;
+ })
+ .on("click", ".bottom", function(e){
+ var currentItem = $(this).parents(".item-video");
+ currentItem.insertAfter(currentItem.next());
+ reorganizeMashup();
+ return false;
+ })
+ .on("click", ".delete", function(e){
+ var id = $(this).parents(".item-video").attr("data-segment-id");
+ mashup.removeAnnotationById(id);
+ if (!mashup.segments.length) {
+ showEmpty();
+ }
+ return false;
+ });
+
+ /* Tangles */
+ var tangleMsPerPixel = 100,
+ activeTangle,
+ tangleStartX,
+ tangleStartVal,
+ tangleHasMoved;
+
+ $(".time-tangle").mousedown(function(evt) {
+ activeTangle = $(this);
+ activeTangle.addClass("active");
+ tangleStartVal = +activeTangle.attr("data-milliseconds");
+ tangleStartX = evt.pageX;
+ tangleHasMoved = false;
+ $(this).siblings(".time-tangle").addClass("deactivate");
+ return false;
+ });
+ $(document)
+ .mousemove(function(evt) {
+ if (activeTangle) {
+ tangleHasMoved = true;
+ var newval = new IriSP.Model.Time(tangleMsPerPixel * (evt.pageX - tangleStartX) + tangleStartVal);
+ activeTangle.trigger("valuechange", newval);
+ return false;
+ }
+ })
+ .mouseup(function() {
+ if (activeTangle) {
+ activeTangle.text(activeTangle.text().replace(/\.\d+$/,''));
+ $(".time-tangle").removeClass("active deactivate");
+ activeTangle = undefined;
+ }
+ });
+
+ $(".tangle-start")
+ .mouseup(function(evt) {
+ if (!tangleHasMoved && currentMedia && currentSegment) {
+ currentMedia.setCurrentTime(currentSegment.begin);
+ }
+ })
+ .on("valuechange", function(evt, val) {
+ if (currentMedia && currentSegment) {
+ currentSegment.setBegin(val);
+ }
+ });
+ $(".tangle-end")
+ .mouseup(function(evt) {
+ if (!tangleHasMoved && currentMedia && currentSegment) {
+ currentMedia.setCurrentTime(currentSegment.end);
+ }
+ })
+ .on("valuechange", function(evt, val) {
+ if (currentMedia && currentSegment) {
+ currentSegment.setEnd(val);
+ }
+ });
+ $(".tangle-duration").on("valuechange", function(evt, val) {
+ if (currentMedia && currentSegment) {
+ currentSegment.setDuration(val);
+ }
+ });
+
+ /* Click on current segment in Preview */
+
+ $(".mashup-description .edit").click(function() {
+ if (mashup.currentAnnotation) {
+ currentSegment = mashup.currentAnnotation.annotation;
+ setMedia(mashup.currentAnnotation.getMedia());
+ }
+ return false;
+ });
+
+ /* Handling related segments */
+
+ function cloneSegment(sid) {
+ var s = directory.getElement(sid) || apidirectory.getElement(sid),
+ media = directory.getElement(s.getMedia().id);
+
+ currentSegment = new IriSP.Model.Annotation(false, project);
+ currentSegment.setMedia(media.id);
+ currentSegment.setBegin(s.begin);
+ currentSegment.setEnd(s.end);
+ currentSegment.title = IriSP.translate("Copy of ") + s.title;
+ currentSegment.description = s.description;
+ currentSegment.keywords = s.keywords;
+ currentSegment.color = media.color;
+ currentSegment.thumbnail = media.thumbnail;
+ currentSegment.created = new Date();
+ currentSegment.on("change-begin", function() {
+ if (currentMedia && currentSegment === this) {
+ currentMedia.setCurrentTime(this.begin);
+ updateSegmentUI();
+ }
+ });
+ currentSegment.on("change-end", function() {
+ if (currentMedia && currentSegment === this) {
+ currentMedia.setCurrentTime(this.end);
+ updateSegmentUI();
+ }
+ });
+ setMedia(media);
+ }
+
+ $(".media-segments-list").on("mouseover", ".media-segment", function() {
+ $(this).find(".media-segment-popin").show();
+ }).on("mouseout", ".media-segment", function() {
+ $(this).find(".media-segment-popin").hide();
+ }).on("click", ".reprendre-segment", function() {
+ cloneSegment($(this).attr("data-segment-id"));
+ return false;
+ }).on("click", ".media-segment-section", function() {
+ var sid = $(this).attr("data-segment-id"),
+ s = directory.getElement(sid) || apidirectory.getElement(sid);
+ if (s.media.id === currentMedia.id) {
+ currentMedia.setCurrentTime(s.begin);
+ }
+ });
+
+ $(".col-left").on("mouseover", ".media-segment", function() {
+ $(this).find(".media-found-popin").show();
+ }).on("mouseout", ".media-segment", function() {
+ $(this).find(".media-found-popin").hide();
+ }).on("click", ".clone-segment", function() {
+ cloneSegment($(this).attr("data-segment-id"));
+ return false;
+ });
+ /* Changing Hashcut Title and description */
+
+ mashup.title = IriSP.translate("Untitled Hashcut");
+ $(".title-video-wrap a").text(mashup.title);
+ $("#hashcut-title").val(mashup.title);
+
+ $("#hashcut-title").on("keyup change input paste", function() {
+ mashup.title = $(this).val();
+ $(".title-video-wrap a").text(mashup.title);
+ mashup.trigger("change");
+ });
+ $("#hashcut-title").on("focus click", function() {
+ if ($(this).val() === IriSP.translate("Untitled Hashcut")) {
+ $(this).val("");
+ }
+ });
+
+ $("#hashcut-description").on("keyup change input paste", function() {
+ mashup.description = $(this).val();
+ mashup.trigger("change");
+ });
+
+ $("#hashcut-form").submit(function() {
+ $(".update-title").hide();
+ return false;
+ })
+
+ /* Publication */
+
+ function onLeave() {
+ return IriSP.translate("You haven't published your hashcut yet.\nIf you leave this page, it will be lost");
+ }
+
+ $(window).on("beforeunload", onLeave);
+
+ $(".publier-button").click(function() {
+ if ($(this).hasClass("disable")) {
+ alert(IriSP.translate("The mashup can't be published because:")+"\n\n"+mashupstatus);
+ return false;
+ }
+ var postproject = directory.newLocalSource(),
+ medias = mashup.getMedias()
+ annotations = mashup.getOriginalAnnotations();
+ postproject.addList("annotationType");
+ postproject.addList("tag");
+ medias.forEach(function(_m) {
+ var anntype = new IriSP.Model.AnnotationType(false, postproject);
+ anntype.title = "Segments from " + _m.title;
+ anntype.media = _m;
+ postproject.getAnnotationTypes().push(anntype);
+ });
+ annotations.forEach(function(_a) {
+ _a.setAnnotationType(
+ postproject.getAnnotationTypes().filter(
+ function(_at) { return _at.media === _a.getMedia() }
+ )[0].id);
+ var tagids = [];
+ _(_a.keywords).each(function(keyword) {
+ var tags = postproject.getTags().searchByTitle(keyword);
+ if (tags.length) {
+ tagids.push(tags[0].id);
+ } else {
+ var tag = new IriSP.Model.Tag(false, postproject);
+ tag.title = tag.description = keyword;
+ postproject.getTags().push(tag);
+ tagids.push(tag.id);
+ }
+ });
+ _a.setTags(tagids);
+ });
+ postproject.addList("annotation",annotations);
+ postproject.addList("media",medias);
+ postproject.addList("mashup",[mashup]);
+ postproject.creator = "admin";
+ postproject.created = new Date();
+ postproject.modified = new Date();
+ postproject.title = mashup.title;
+ postproject.description = mashup.description;
+ $.ajax({
+ type: "POST",
+ url: IriSP.endpoints.project,
+ data: IriSP.serializers.ldt.serialize(postproject),
+ contentType: "application/cinelab",
+// headers: {"X-CSRFToken": "{{csrf_token}}"},
+ success: function(data, status, request){
+ var location = request.getResponseHeader("Location"),
+ projid = location.match(/([^/]+)\/?$/)[1],
+ destination = IriSP.endpoints.hashcut_page + projid;
+ $(window).off("beforeunload", onLeave);
+ document.location.href = destination;
+ },
+ error: function(jqXHR, textStatus, errorThrown){
+ console.log(arguments);
+ alert(IriSP.translate("Server error\nYour hashcut couldn't be published"));
+ }
+ });
+ //TODO: ADD WAITING SCREEN
+
+ return false;
+ });
+
+ mashup.trigger("change");
+}
+
+/* END editor.js */
diff -r 293d6aee8964 -r 86be3b51a1fd src/hashcut/static/hashcut/js/hashcut.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hashcut/static/hashcut/js/hashcut.js Tue Nov 27 13:56:35 2012 +0100
@@ -0,0 +1,3411 @@
+/*
+ * Copyright 2012 Institut de recherche et d'innovation
+ * contributor(s) : Raphael Velt, Karim Hamidou, Samuel Huron, Thibaut Cavalie, Anthony Ly
+ *
+ * contact@iri.centrepompidou.fr
+ * http://www.iri.centrepompidou.fr
+ *
+ * This software is a computer program whose purpose is to show and add annotations on a video .
+ * This software is governed by the CeCILL-C license under French law and
+ * abiding by the rules of distribution of free software. You can use,
+ * modify and/ or redistribute the software under the terms of the CeCILL-C
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ *
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL-C license and that you accept its terms.
+*/
+
+var IriSP = {
+ serializers: {}
+};
+
+IriSP._ = _;
+
+IriSP.jQuery = jQuery;
+
+/* COLOR SCHEMES
+ * Color Brewer Set1 (9 classes): [ "#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#FFFF33", "#A65628", "#F781BF", "#999999" ]
+ * Color Brewer Set3 (12 classes): ["#8DD3C7", "#FFFFB3", "#BEBADA", "#FB8072", "#80B1D3", "#FDB462", "#B3DE69", "#FCCDE5", "#D9D9D9", "#BC80BD", "#CCEBC5", "#FFED6F"]
+ * Color Brewer Paired (11 classes): ["#A6CEE3", "#1F78B4", "#B2DF8A", "#33A02C", "#FB9A99", "#E31A1C", "#FDBF6F", "#FF7F00", "#CAB2D6", "#6A3D9A", "#FFFF99" ]
+ * d3 Category10: ["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"];
+ * d3 Category20: ["#1f77b4 ", "#aec7e8 ", "#ff7f0e ", "#ffbb78 ", "#2ca02c ", "#98df8a ", "#d62728 ", "#ff9896 ", "#9467bd ", "#c5b0d5 ", "#8c564b ", "#c49c94 ", "#e377c2 ", "#f7b6d2 ", "#7f7f7f ", "#c7c7c7 ", "#bcbd22 ", "#dbdb8d ", "#17becf ", "#9edae5"];
+ * d3 Category20b: ["#393b79 ", "#5254a3 ", "#6b6ecf ", "#9c9ede ", "#637939 ", "#8ca252 ", "#b5cf6b ", "#cedb9c ", "#8c6d31 ", "#bd9e39 ", "#e7ba52 ", "#e7cb94 ", "#843c39 ", "#ad494a ", "#d6616b ", "#e7969c ", "#7b4173 ", "#a55194 ", "#ce6dbd ", "#de9ed6"];
+ * d3 Category20c: ["#3182bd ", "#6baed6 ", "#9ecae1 ", "#c6dbef ", "#e6550d ", "#fd8d3c ", "#fdae6b ", "#fdd0a2 ", "#31a354 ", "#74c476 ", "#a1d99b ", "#c7e9c0 ", "#756bb1 ", "#9e9ac8 ", "#bcbddc ", "#dadaeb ", "#636363 ", "#969696 ", "#bdbdbd ", "#d9d9d9"];
+ */
+
+IriSP.vizcolors = ["#1f77b4 ", "#aec7e8 ", "#ff7f0e ", "#ffbb78 ", "#2ca02c ", "#98df8a ", "#d62728 ", "#ff9896 ", "#9467bd ", "#c5b0d5 ", "#8c564b ", "#c49c94 ", "#e377c2 ", "#f7b6d2 ", "#7f7f7f ", "#c7c7c7 ", "#bcbd22 ", "#dbdb8d ", "#17becf ", "#9edae5"];
+
+/* END init.js */
+IriSP.messages = {
+ fr: {
+ "Duration:" : "Durée :",
+ "duration:" : "durée :",
+ "Edit segment": "Éditer le segment",
+ "Move segment down": "Descendre le segment",
+ "Move segment up": "Remonter le segment",
+ "Delete segment": "Supprimer le segment",
+ "Clone segment": "Cloner le segment",
+ "From:": "De :",
+ "to:": "à :",
+ "Untitled segment": "Segment sans titre",
+ "Untitled Hashcut": "Hashcut sans titre",
+ "Copy of ": "Copie de ",
+ "A segment must be at least one second long": "Le segment doit durer au moins une seconde",
+ "A segment must be at most three minutes long": "Le segment doit durer moins de trois minutes",
+ "A segment must have a title": "Le segment doit avoir un titre",
+ "A segment should have a description": "Il est recommandé de donner une description au segment",
+ "A segment should have tags": "Il est recommandé de taguer le segment",
+ "A hashcut must be made from at least three segments": "Un hashcut doit être composé d'au moins trois segments",
+ "A hashcut must have a title": "Un titre doit être donné au hashcut",
+ "A hashcut should have a description": "Il est recommandé de donner une description au hashcut",
+ "One or more segments are invalid": "Un ou plusieurs segments ne sont pas valides",
+ "Your hashcut is valid!": "Votre hashcut est valide !",
+ "This segment is valid!": "Ce segment est valide !",
+ "Add segment to hashcut": "Ajouter au Hashcut",
+ "Save segment": "Sauvegarder",
+ "Create new segment": "Créer un nouveau segment",
+ "Edit existing segment": "Modifier le segment",
+ "The hashcut can't be published because:": "Le Hashcut ne peut pas être publié pour les raisons suivantes :",
+ "Server error\nYour hashcut couldn't be published": "Erreur serveur\nVotre hashcut n'a pas pu être publié",
+ "You haven't published your hashcut yet.\nIf you leave this page, it will be lost": "Vous n'avez pas encore publié votre Hashcut.\nSi vous quittez cette page, il sera perdu.",
+ "From hashcut:": "Du hashcut :"
+ }
+};
+
+((function() {
+ var lang = IriSP.language || navigator.language || navigator.userLanguage || "en",
+ srcs = [ ];
+ if (typeof IriSP.messages[lang] === "object") {
+ srcs.push(IriSP.messages[lang])
+ }
+ if (lang.substr(0,2) !== lang && typeof IriSP.messages[lang.substr(0,2)] === "object") {
+ srcs.push(IriSP.messages[lang.substr(0,2)])
+ }
+ srcs.push({});
+ var l = srcs.length;
+
+ IriSP.translate = function(_str) {
+ for (var i = 0; i < l; i++) {
+ if (typeof srcs[i][_str] !== "undefined") {
+ return srcs[i][_str];
+ }
+ }
+ return _str;
+ }
+
+}) ());
+
+/* END i18n.js */
+/* TODO: Separate Project-specific data from Source */
+
+/* model.js is where data is stored in a standard form, whatever the serializer */
+IriSP.Model = (function (ns) {
+
+ function pad(n, x, b) {
+ b = b || 10;
+ var s = (x).toString(b);
+ while (s.length < n) {
+ s = "0" + s;
+ }
+ return s;
+ }
+
+ function rand16(n) {
+ return pad(n, Math.floor(Math.random()*Math.pow(16,n)), 16);
+ }
+
+ var uidbase = rand16(8) + "-" + rand16(4) + "-", uidincrement = Math.floor(Math.random()*0x10000);
+
+var Model = {
+ _SOURCE_STATUS_EMPTY : 0,
+ _SOURCE_STATUS_WAITING : 1,
+ _SOURCE_STATUS_READY : 2,
+ getUID : function() {
+ return uidbase + pad(4, (++uidincrement % 0x10000), 16) + "-" + rand16(4) + "-" + rand16(6) + rand16(6);
+ },
+ isLocalURL : function(url) {
+ var matches = url.match(/^(\w+:)\/\/([^/]+)/);
+ if (matches) {
+ return(matches[1] === document.location.protocol && matches[2] === document.location.host)
+ }
+ return true;
+ },
+ regexpFromTextOrArray : function(_textOrArray, _testOnly, _iexact) {
+ var _testOnly = _testOnly || false,
+ _iexact = _iexact || false;
+ function escapeText(_text) {
+ return _text.replace(/([\\\*\+\?\|\{\[\}\]\(\)\^\$\.\#\/])/gm, '\\$1');
+ }
+ var _source =
+ typeof _textOrArray === "string"
+ ? escapeText(_textOrArray)
+ : ns._(_textOrArray).map(escapeText).join("|"),
+ _flags = 'im';
+ if (!_testOnly) {
+ _source = '(' + _source + ')';
+ _flags += 'g';
+ }
+ if (_iexact) {
+ _source = '^' + _source + '$';
+ }
+ return new RegExp( _source, _flags);
+ },
+ isoToDate : function(_str) {
+ // http://delete.me.uk/2005/03/iso8601.html
+ var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
+ var d = _str.match(new RegExp(regexp));
+
+ var offset = 0;
+ var date = new Date(d[1], 0, 1);
+
+ if (d[3]) { date.setMonth(d[3] - 1); }
+ if (d[5]) { date.setDate(d[5]); }
+ if (d[7]) { date.setHours(d[7]); }
+ if (d[8]) { date.setMinutes(d[8]); }
+ if (d[10]) { date.setSeconds(d[10]); }
+ if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
+ if (d[14]) {
+ offset = (Number(d[16]) * 60) + Number(d[17]);
+ offset *= ((d[15] == '-') ? 1 : -1);
+ }
+
+ offset -= date.getTimezoneOffset();
+ time = (Number(date) + (offset * 60 * 1000));
+ var _res = new Date();
+ _res.setTime(Number(time));
+ return _res;
+ },
+ dateToIso : function(_d) {
+ var d = _d ? new Date(_d) : new Date();
+ return d.getUTCFullYear()+'-'
+ + pad(2, d.getUTCMonth()+1)+'-'
+ + pad(2, d.getUTCDate())+'T'
+ + pad(2, d.getUTCHours())+':'
+ + pad(2, d.getUTCMinutes())+':'
+ + pad(2, d.getUTCSeconds())+'Z'
+ }
+}
+
+/*
+ * Model.List is a class for a list of elements (e.g. annotations, medias, etc. that each have a distinct ID)
+ */
+Model.List = function(_directory) {
+ Array.call(this);
+ this.directory = _directory;
+ this.idIndex = [];
+ this.__events = {};
+ if (typeof _directory == "undefined") {
+ console.trace();
+ throw "Error : new Model.List(directory): directory is undefined";
+ }
+}
+
+Model.List.prototype = new Array();
+
+Model.List.prototype.hasId = function(_id) {
+ return ns._(this.idIndex).include(_id);
+}
+
+/* On recent browsers, forEach and map are defined and do what we want.
+ * Otherwise, we'll use the Underscore.js functions
+ */
+if (typeof Array.prototype.forEach === "undefined") {
+ Model.List.prototype.forEach = function(_callback) {
+ var _this = this;
+ ns._(this).forEach(function(_value, _key) {
+ _callback(_value, _key, _this);
+ });
+ }
+}
+
+if (typeof Array.prototype.map === "undefined") {
+ Model.List.prototype.map = function(_callback) {
+ var _this = this;
+ return ns._(this).map(function(_value, _key) {
+ return _callback(_value, _key, _this);
+ });
+ }
+}
+
+Model.List.prototype.pluck = function(_key) {
+ return this.map(function(_value) {
+ return _value[_key];
+ });
+}
+
+/* We override Array's filter function because it doesn't return an Model.List
+ */
+Model.List.prototype.filter = function(_callback) {
+ var _this = this,
+ _res = new Model.List(this.directory);
+ _res.addElements(ns._(this).filter(function(_value, _key) {
+ return _callback(_value, _key, _this);
+ }));
+ return _res;
+}
+
+Model.List.prototype.slice = function(_start, _end) {
+ var _res = new Model.List(this.directory);
+ _res.addElements(Array.prototype.slice.call(this, _start, _end));
+ return _res;
+}
+
+Model.List.prototype.splice = function(_start, _end) {
+ var _res = new Model.List(this.directory);
+ _res.addElements(Array.prototype.splice.call(this, _start, _end));
+ this.idIndex.splice(_start, _end);
+ return _res;
+}
+
+/* Array has a sort function, but it's not as interesting as Underscore.js's sortBy
+ * and won't return a new Model.List
+ */
+Model.List.prototype.sortBy = function(_callback) {
+ var _this = this,
+ _res = new Model.List(this.directory);
+ _res.addElements(ns._(this).sortBy(function(_value, _key) {
+ return _callback(_value, _key, _this);
+ }));
+ return _res;
+}
+
+/* Title and Description are basic information for (almost) all element types,
+ * here we can search by these criteria
+ */
+Model.List.prototype.searchByTitle = function(_text, _iexact) {
+ var _iexact = _iexact || false,
+ _rgxp = Model.regexpFromTextOrArray(_text, true);
+ return this.filter(function(_element) {
+ return _rgxp.test(_element.title);
+ });
+}
+
+Model.List.prototype.searchByDescription = function(_text, _iexact) {
+ var _iexact = _iexact || false,
+ _rgxp = Model.regexpFromTextOrArray(_text, true);
+ return this.filter(function(_element) {
+ return _rgxp.test(_element.description);
+ });
+}
+
+Model.List.prototype.searchByTextFields = function(_text, _iexact) {
+ var _iexact = _iexact || false,
+ _rgxp = Model.regexpFromTextOrArray(_text, true);
+ return this.filter(function(_element) {
+ return _rgxp.test(_element.description) || _rgxp.test(_element.title);
+ });
+}
+
+Model.List.prototype.getTitles = function() {
+ return this.map(function(_el) {
+ return _el.title;
+ });
+}
+
+Model.List.prototype.addId = function(_id) {
+ var _el = this.directory.getElement(_id)
+ if (!this.hasId(_id) && typeof _el !== "undefined") {
+ this.idIndex.push(_id);
+ Array.prototype.push.call(this, _el);
+ }
+}
+
+Model.List.prototype.push = function(_el) {
+ if (typeof _el === "undefined") {
+ return;
+ }
+ var _index = (ns._(this.idIndex).indexOf(_el.id));
+ if (_index === -1) {
+ this.idIndex.push(_el.id);
+ Array.prototype.push.call(this, _el);
+ } else {
+ this[_index] = _el;
+ }
+}
+
+Model.List.prototype.addIds = function(_array) {
+ var _l = _array.length,
+ _this = this;
+ ns._(_array).forEach(function(_id) {
+ _this.addId(_id);
+ });
+}
+
+Model.List.prototype.addElements = function(_array) {
+ var _this = this;
+ ns._(_array).forEach(function(_el) {
+ _this.push(_el);
+ });
+}
+
+Model.List.prototype.removeId = function(_id, _deleteFromDirectory) {
+ var _deleteFromDirectory = _deleteFromDirectory || false,
+ _index = (ns._(this.idIndex).indexOf(_id));
+ if (_index !== -1) {
+ this.splice(_index,1);
+ }
+ if (_deleteFromDirectory) {
+ delete this.directory.elements[_id];
+ }
+}
+
+Model.List.prototype.removeElement = function(_el, _deleteFromDirectory) {
+ var _deleteFromDirectory = _deleteFromDirectory || false;
+ this.removeId(_el.id);
+}
+
+Model.List.prototype.removeIds = function(_list, _deleteFromDirectory) {
+ var _deleteFromDirectory = _deleteFromDirectory || false,
+ _this = this;
+ ns._(_list).forEach(function(_id) {
+ _this.removeId(_id);
+ });
+}
+
+Model.List.prototype.removeElements = function(_list, _deleteFromDirectory) {
+ var _deleteFromDirectory = _deleteFromDirectory || false,
+ _this = this;
+ ns._(_list).forEach(function(_el) {
+ _this.removeElement(_el);
+ });
+}
+
+Model.List.prototype.on = function(_event, _callback) {
+ if (typeof this.__events[_event] === "undefined") {
+ this.__events[_event] = [];
+ }
+ this.__events[_event].push(_callback);
+}
+
+Model.List.prototype.off = function(_event, _callback) {
+ if (typeof this.__events[_event] !== "undefined") {
+ this.__events[_event] = ns._(this.__events[_event]).reject(function(_fn) {
+ return _fn === _callback;
+ });
+ }
+}
+
+Model.List.prototype.trigger = function(_event, _data) {
+ var _list = this;
+ ns._(this.__events[_event]).each(function(_callback) {
+ _callback.call(_list, _data);
+ });
+}
+
+/* A simple time management object, that helps converting millisecs to seconds and strings,
+ * without the clumsiness of the original Date object.
+ */
+
+Model.Time = function(_milliseconds) {
+ this.milliseconds = 0;
+ this.setMilliseconds(_milliseconds);
+}
+
+Model.Time.prototype.setMilliseconds = function(_milliseconds) {
+ var _ante = this.milliseconds;
+ switch(typeof _milliseconds) {
+ case "string":
+ this.milliseconds = parseInt(_milliseconds);
+ break;
+ case "number":
+ this.milliseconds = Math.floor(_milliseconds);
+ break;
+ case "object":
+ this.milliseconds = parseInt(_milliseconds.valueOf());
+ break;
+ default:
+ this.milliseconds = 0;
+ }
+ if (this.milliseconds === NaN) {
+ this.milliseconds = _ante;
+ }
+}
+
+Model.Time.prototype.setSeconds = function(_seconds) {
+ this.milliseconds = 1000 * _seconds;
+}
+
+Model.Time.prototype.getSeconds = function() {
+ return this.milliseconds / 1000;
+}
+
+Model.Time.prototype.getHMS = function() {
+ var _totalSeconds = Math.abs(Math.floor(this.getSeconds()));
+ return {
+ hours : Math.floor(_totalSeconds / 3600),
+ minutes : (Math.floor(_totalSeconds / 60) % 60),
+ seconds : _totalSeconds % 60,
+ milliseconds: this.milliseconds % 1000
+ }
+}
+
+Model.Time.prototype.add = function(_milliseconds) {
+ this.milliseconds += new Model.Time(_milliseconds).milliseconds;
+}
+
+Model.Time.prototype.valueOf = function() {
+ return this.milliseconds;
+}
+
+Model.Time.prototype.toString = function(showCs) {
+ var _hms = this.getHMS(),
+ _res = '';
+ if (_hms.hours) {
+ _res += _hms.hours + ':'
+ }
+ _res += pad(2, _hms.minutes) + ':' + pad(2, _hms.seconds);
+ if (showCs) {
+ _res += "." + Math.round(_hms.milliseconds / 100)
+ }
+ return _res;
+}
+
+/* Model.Reference handles references between elements
+ */
+
+Model.Reference = function(_source, _idRef) {
+ this.source = _source;
+ this.id = _idRef;
+ if (typeof _idRef === "object") {
+ this.isList = true;
+ } else {
+ this.isList = false;
+ }
+ this.refresh();
+}
+
+Model.Reference.prototype.refresh = function() {
+ if (this.isList) {
+ this.contents = new Model.List(this.source.directory);
+ this.contents.addIds(this.id);
+ } else {
+ this.contents = this.source.getElement(this.id);
+ }
+
+}
+
+Model.Reference.prototype.getContents = function() {
+ if (typeof this.contents === "undefined" || (this.isList && this.contents.length != this.id.length)) {
+ this.refresh();
+ }
+ return this.contents;
+}
+
+Model.Reference.prototype.isOrHasId = function(_idRef) {
+ if (this.isList) {
+ return (ns._(this.id).indexOf(_idRef) !== -1)
+ } else {
+ return (this.id == _idRef);
+ }
+}
+
+/* */
+
+Model.Element = function(_id, _source) {
+ this.elementType = 'element';
+ this.title = "";
+ this.description = "";
+ this.__events = {}
+ if (typeof _source === "undefined") {
+ return;
+ }
+ if (typeof _id === "undefined" || !_id) {
+ _id = Model.getUID();
+ }
+ this.id = _id;
+ this.source = _source;
+ if (_source !== this) {
+ this.source.directory.addElement(this);
+ }
+}
+
+Model.Element.prototype.toString = function() {
+ return this.elementType + (this.elementType !== 'element' ? ', id=' + this.id + ', title="' + this.title + '"' : '');
+}
+
+Model.Element.prototype.setReference = function(_elementType, _idRef) {
+ this[_elementType] = new Model.Reference(this.source, _idRef);
+}
+
+Model.Element.prototype.getReference = function(_elementType) {
+ if (typeof this[_elementType] !== "undefined") {
+ return this[_elementType].getContents();
+ }
+}
+
+Model.Element.prototype.getRelated = function(_elementType, _global) {
+ _global = (typeof _global !== "undefined" && _global);
+ var _this = this;
+ return this.source.getList(_elementType, _global).filter(function(_el) {
+ var _ref = _el[_this.elementType];
+ return _ref && _ref.isOrHasId(_this.id);
+ });
+}
+
+Model.Element.prototype.on = function(_event, _callback) {
+ if (typeof this.__events[_event] === "undefined") {
+ this.__events[_event] = [];
+ }
+ this.__events[_event].push(_callback);
+}
+
+Model.Element.prototype.off = function(_event, _callback) {
+ if (typeof this.__events[_event] !== "undefined") {
+ this.__events[_event] = ns._(this.__events[_event]).reject(function(_fn) {
+ return _fn === _callback;
+ });
+ }
+}
+
+Model.Element.prototype.trigger = function(_event, _data) {
+ var _element = this;
+ ns._(this.__events[_event]).each(function(_callback) {
+ _callback.call(_element, _data);
+ });
+}
+
+/* */
+
+Model.Playable = function(_id, _source) {
+ Model.Element.call(this, _id, _source);
+ if (typeof _source === "undefined") {
+ return;
+ }
+ this.elementType = 'playable';
+ this.currentTime = new Model.Time();
+ this.volume = .5;
+ this.paused = true;
+ this.muted = false;
+ var _this = this;
+ this.on("play", function() {
+ _this.paused = false;
+ });
+ this.on("pause", function() {
+ _this.paused = true;
+ });
+ this.on("timeupdate", function(_time) {
+ _this.currentTime = _time;
+ _this.getAnnotations().filter(function(_a) {
+ return (_a.end <= _time || _a.begin > _time) && _a.playing
+ }).forEach(function(_a) {
+ _a.playing = false;
+ _a.trigger("leave");
+ _this.trigger("leave-annotation",_a);
+ });
+ _this.getAnnotations().filter(function(_a) {
+ return _a.begin <= _time && _a.end > _time && !_a.playing
+ }).forEach(function(_a) {
+ _a.playing = true;
+ _a.trigger("enter");
+ _this.trigger("enter-annotation",_a);
+ });
+ });
+}
+
+Model.Playable.prototype = new Model.Element();
+
+Model.Playable.prototype.getCurrentTime = function() {
+ return this.currentTime;
+}
+
+Model.Playable.prototype.getVolume = function() {
+ return this.volume;
+}
+
+Model.Playable.prototype.getPaused = function() {
+ return this.paused;
+}
+
+Model.Playable.prototype.getMuted = function() {
+ return this.muted;
+}
+
+Model.Playable.prototype.setCurrentTime = function(_time) {
+ this.trigger("setcurrenttime",_time);
+}
+
+Model.Playable.prototype.setVolume = function(_vol) {
+ this.trigger("setvolume",_vol);
+}
+
+Model.Playable.prototype.setMuted = function(_muted) {
+ this.trigger("setmuted",_muted);
+}
+
+Model.Playable.prototype.play = function() {
+ this.trigger("setplay");
+}
+
+Model.Playable.prototype.pause = function() {
+ this.trigger("setpause");
+}
+
+Model.Playable.prototype.show = function() {}
+
+Model.Playable.prototype.hide = function() {}
+
+/* */
+
+Model.Media = function(_id, _source) {
+ Model.Playable.call(this, _id, _source);
+ this.elementType = 'media';
+ this.duration = new Model.Time();
+ this.video = '';
+ var _this = this;
+}
+
+Model.Media.prototype = new Model.Playable();
+
+/* Default functions to be overriden by players */
+
+Model.Media.prototype.setDuration = function(_durationMs) {
+ this.duration.setMilliseconds(_durationMs);
+}
+
+Model.Media.prototype.getAnnotations = function() {
+ return this.getRelated("annotation");
+}
+
+Model.Media.prototype.getAnnotationsByTypeTitle = function(_title) {
+ var _annTypes = this.source.getAnnotationTypes().searchByTitle(_title).pluck("id");
+ if (_annTypes.length) {
+ return this.getAnnotations().filter(function(_annotation) {
+ return ns._(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1;
+ });
+ } else {
+ return new Model.List(this.source.directory)
+ }
+}
+
+/* */
+
+Model.Tag = function(_id, _source) {
+ Model.Element.call(this, _id, _source);
+ this.elementType = 'tag';
+}
+
+Model.Tag.prototype = new Model.Element();
+
+Model.Tag.prototype.getAnnotations = function() {
+ return this.getRelated("annotation");
+}
+
+/* */
+Model.AnnotationType = function(_id, _source) {
+ Model.Element.call(this, _id, _source);
+ this.elementType = 'annotationType';
+}
+
+Model.AnnotationType.prototype = new Model.Element();
+
+Model.AnnotationType.prototype.getAnnotations = function() {
+ return this.getRelated("annotation");
+}
+
+/* Annotation
+ * */
+
+Model.Annotation = function(_id, _source) {
+ Model.Element.call(this, _id, _source);
+ this.elementType = 'annotation';
+ this.begin = new Model.Time();
+ this.end = new Model.Time();
+ this.tag = new Model.Reference(_source, []);
+ this.playing = false;
+ var _this = this;
+ this.on("click", function() {
+ _this.getMedia().setCurrentTime(_this.begin);
+ });
+}
+
+Model.Annotation.prototype = new Model.Element();
+
+Model.Annotation.prototype.setBegin = function(_beginMs) {
+ this.begin.setMilliseconds(Math.max(0,_beginMs));
+ this.trigger("change-begin");
+ if (this.end < this.begin) {
+ this.setEnd(this.begin);
+ }
+}
+
+Model.Annotation.prototype.setEnd = function(_endMs) {
+ this.end.setMilliseconds(Math.min(_endMs, this.getMedia().duration.milliseconds));
+ this.trigger("change-end");
+ if (this.end < this.begin) {
+ this.setBegin(this.end);
+ }
+}
+
+Model.Annotation.prototype.setDuration = function(_durMs) {
+ this.setEnd(_durMs + this.begin.milliseconds);
+}
+
+Model.Annotation.prototype.setMedia = function(_idRef) {
+ this.setReference("media", _idRef);
+}
+
+Model.Annotation.prototype.getMedia = function() {
+ return this.getReference("media");
+}
+
+Model.Annotation.prototype.setAnnotationType = function(_idRef) {
+ this.setReference("annotationType", _idRef);
+}
+
+Model.Annotation.prototype.getAnnotationType = function() {
+ return this.getReference("annotationType");
+}
+
+Model.Annotation.prototype.setTags = function(_idRefs) {
+ this.setReference("tag", _idRefs);
+}
+
+Model.Annotation.prototype.getTags = function() {
+ return this.getReference("tag");
+}
+
+Model.Annotation.prototype.getTagTexts = function() {
+ return this.getTags().getTitles();
+}
+
+Model.Annotation.prototype.getDuration = function() {
+ return new Model.Time(this.end.milliseconds - this.begin.milliseconds)
+}
+
+/* */
+
+Model.MashedAnnotation = function(_mashup, _annotation) {
+ Model.Element.call(this, _mashup.id + "_" + _annotation.id, _annotation.source);
+ this.elementType = 'mashedAnnotation';
+ this.annotation = _annotation;
+ this.begin = new Model.Time();
+ this.end = new Model.Time();
+ this.duration = new Model.Time();
+ this.title = this.annotation.title;
+ this.description = this.annotation.description;
+ this.color = this.annotation.color;
+ var _this = this;
+ this.on("click", function() {
+ _mashup.setCurrentTime(_this.begin);
+ });
+ this.on("enter", function() {
+ _this.annotation.trigger("enter");
+ });
+ this.on("leave", function() {
+ _this.annotation.trigger("leave");
+ });
+}
+
+Model.MashedAnnotation.prototype = new Model.Element(null);
+
+Model.MashedAnnotation.prototype.getMedia = function() {
+ return this.annotation.getReference("media");
+}
+
+Model.MashedAnnotation.prototype.getAnnotationType = function() {
+ return this.annotation.getReference("annotationType");
+}
+
+Model.MashedAnnotation.prototype.getTags = function() {
+ return this.annotation.getReference("tag");
+}
+
+Model.MashedAnnotation.prototype.getTagTexts = function() {
+ return this.annotation.getTags().getTitles();
+}
+
+Model.MashedAnnotation.prototype.getDuration = function() {
+ return this.annotation.getDuration();
+}
+
+Model.MashedAnnotation.prototype.setBegin = function(_begin) {
+ this.begin.setMilliseconds(_begin);
+ this.duration.setMilliseconds(this.annotation.getDuration());
+ this.end.setMilliseconds(_begin + this.duration);
+}
+
+/* */
+
+Model.Mashup = function(_id, _source) {
+ Model.Playable.call(this, _id, _source);
+ this.elementType = 'mashup';
+ this.duration = new Model.Time();
+ this.segments = new Model.List(_source.directory);
+ this.loaded = false;
+ var _this = this;
+ this._updateTimes = function() {
+ _this.updateTimes();
+ _this.trigger("change");
+ }
+ this.on("add", this._updateTimes);
+ this.on("remove", this._updateTimes);
+}
+
+Model.Mashup.prototype = new Model.Playable();
+
+Model.Mashup.prototype.checkLoaded = function() {
+ var loaded = !!this.segments.length;
+ this.getMedias().forEach(function(_m) {
+ loaded = loaded && _m.loaded;
+ });
+ this.loaded = loaded;
+ if (loaded) {
+ this.trigger("loadedmetadata");
+ }
+}
+
+Model.Mashup.prototype.updateTimes = function() {
+ var _time = 0;
+ this.segments.forEach(function(_segment) {
+ _segment.setBegin(_time);
+ _time = _segment.end;
+ });
+ this.duration.setMilliseconds(_time);
+}
+
+Model.Mashup.prototype.addAnnotation = function(_annotation, _defer) {
+ var _mashedAnnotation = new Model.MashedAnnotation(this, _annotation),
+ _defer = _defer || false;
+ this.segments.push(_mashedAnnotation);
+ _annotation.on("change-begin", this._updateTimes);
+ _annotation.on("change-end", this._updateTimes);
+ if (!_defer) {
+ this.trigger("add");
+ }
+}
+
+Model.Mashup.prototype.addAnnotationById = function(_elId, _defer) {
+ var _annotation = this.source.getElement(_elId),
+ _defer = _defer || false;
+ if (typeof _annotation !== "undefined") {
+ this.addAnnotation(_annotation, _defer);
+ }
+}
+
+Model.Mashup.prototype.addAnnotations = function(_segments) {
+ var _this = this;
+ ns._(_segments).forEach(function(_segment) {
+ _this.addAnnotation(_segment, true);
+ });
+ this.trigger("add");
+}
+
+Model.Mashup.prototype.addAnnotationsById = function(_segments) {
+ var _this = this;
+ ns._(_segments).forEach(function(_segment) {
+ _this.addAnnotationById(_segment, true);
+ });
+ this.trigger("add");
+}
+
+Model.Mashup.prototype.removeAnnotation = function(_annotation, _defer) {
+ var _defer = _defer || false;
+ _annotation.off("change-begin", this._updateTimes);
+ _annotation.off("change-end", this._updateTimes);
+ this.segments.removeId(this.id + "_" + _annotation.id);
+ if (!_defer) {
+ this.trigger("remove");
+ }
+}
+
+Model.Mashup.prototype.removeAnnotationById = function(_annId, _defer) {
+ var _defer = _defer || false;
+ var _annotation = this.source.getElement(_annId);
+
+ if (_annotation) {
+ this.removeAnnotation(_annotation, _defer);
+ }
+ if (!_defer) {
+ this.trigger("remove");
+ }
+}
+
+Model.Mashup.prototype.setAnnotations = function(_segments) {
+ while (this.segments.length) {
+ this.removeAnnotation(this.segments[0].annotation, true);
+ }
+ this.addAnnotations(_segments);
+}
+
+Model.Mashup.prototype.setAnnotationsById = function(_segments) {
+ while (this.segments.length) {
+ this.removeAnnotation(this.segments[0].annotation, true);
+ }
+ this.addAnnotationsById(_segments);
+}
+
+Model.Mashup.prototype.hasAnnotation = function(_annotation) {
+ return !!ns._(this.segments).find(function(_s) {
+ return _s.annotation === _annotation
+ });
+}
+
+Model.Mashup.prototype.getAnnotation = function(_annotation) {
+ return ns._(this.segments).find(function(_s) {
+ return _s.annotation === _annotation
+ });
+}
+
+Model.Mashup.prototype.getAnnotationById = function(_id) {
+ return ns._(this.segments).find(function(_s) {
+ return _s.annotation.id === _id
+ });
+}
+
+Model.Mashup.prototype.getAnnotations = function() {
+ return this.segments;
+}
+
+Model.Mashup.prototype.getOriginalAnnotations = function() {
+ var annotations = new Model.List(this.source.directory);
+ this.segments.forEach(function(_s) {
+ annotations.push(_s.annotation);
+ });
+ return annotations;
+}
+
+Model.Mashup.prototype.getMedias = function() {
+ var medias = new Model.List(this.source.directory);
+ this.segments.forEach(function(_annotation) {
+ medias.push(_annotation.getMedia())
+ })
+ return medias;
+}
+
+Model.Mashup.prototype.getAnnotationsByTypeTitle = function(_title) {
+ var _annTypes = this.source.getAnnotationTypes().searchByTitle(_title).pluck("id");
+ if (_annTypes.length) {
+ return this.getAnnotations().filter(function(_annotation) {
+ return ns._(_annTypes).indexOf(_annotation.getAnnotationType().id) !== -1;
+ });
+ } else {
+ return new Model.List(this.source.directory)
+ }
+}
+
+Model.Mashup.prototype.getAnnotationAtTime = function(_time) {
+ var _list = this.segments.filter(function(_annotation) {
+ return _annotation.begin <= _time && _annotation.end > _time;
+ });
+ if (_list.length) {
+ return _list[0];
+ } else {
+ return undefined;
+ }
+}
+
+Model.Mashup.prototype.getMediaAtTime = function(_time) {
+ var _annotation = this.getAnnotationAtTime(_time);
+ if (typeof _annotation !== "undefined") {
+ return _annotation.getMedia();
+ } else {
+ return undefined;
+ }
+}
+
+/* */
+
+Model.Source = function(_config) {
+ Model.Element.call(this, false, this);
+ this.status = Model._SOURCE_STATUS_EMPTY;
+ this.elementType = "source";
+ if (typeof _config !== "undefined") {
+ var _this = this;
+ ns._(_config).forEach(function(_v, _k) {
+ _this[_k] = _v;
+ })
+ this.callbackQueue = [];
+ this.contents = {};
+ this.get();
+ }
+}
+
+Model.Source.prototype = new Model.Element();
+
+Model.Source.prototype.addList = function(_listId, _contents) {
+ if (typeof this.contents[_listId] === "undefined") {
+ this.contents[_listId] = new Model.List(this.directory);
+ }
+ this.contents[_listId].addElements(_contents);
+}
+
+Model.Source.prototype.getList = function(_listId, _global) {
+ _global = (typeof _global !== "undefined" && _global);
+ if (_global || typeof this.contents[_listId] === "undefined") {
+ return this.directory.getGlobalList().filter(function(_e) {
+ return (_e.elementType === _listId);
+ });
+ } else {
+ return this.contents[_listId];
+ }
+}
+
+Model.Source.prototype.forEach = function(_callback) {
+ var _this = this;
+ ns._(this.contents).forEach(function(_value, _key) {
+ _callback.call(_this, _value, _key);
+ })
+}
+
+Model.Source.prototype.getElement = function(_elId) {
+ return this.directory.getElement(_elId);
+}
+
+Model.Source.prototype.get = function() {
+ this.status = Model._SOURCE_STATUS_WAITING;
+ this.handleCallbacks();
+}
+
+/* We defer the callbacks calls so they execute after the queue is cleared */
+Model.Source.prototype.deferCallback = function(_callback) {
+ var _this = this;
+ ns._.defer(function() {
+ _callback.call(_this);
+ });
+}
+
+Model.Source.prototype.handleCallbacks = function() {
+ this.status = Model._SOURCE_STATUS_READY;
+ while (this.callbackQueue.length) {
+ this.deferCallback(this.callbackQueue.splice(0,1)[0]);
+ }
+}
+Model.Source.prototype.onLoad = function(_callback) {
+ if (this.status === Model._SOURCE_STATUS_READY) {
+ this.deferCallback(_callback);
+ } else {
+ this.callbackQueue.push(_callback);
+ }
+}
+
+Model.Source.prototype.serialize = function() {
+ return this.serializer.serialize(this);
+}
+
+Model.Source.prototype.deSerialize = function(_data) {
+ this.serializer.deSerialize(_data, this);
+}
+
+Model.Source.prototype.getAnnotations = function(_global) {
+ _global = (typeof _global !== "undefined" && _global);
+ return this.getList("annotation", _global);
+}
+
+Model.Source.prototype.getMedias = function(_global) {
+ _global = (typeof _global !== "undefined" && _global);
+ return this.getList("media", _global);
+}
+
+Model.Source.prototype.getTags = function(_global) {
+ _global = (typeof _global !== "undefined" && _global);
+ return this.getList("tag", _global);
+}
+
+Model.Source.prototype.getMashups = function(_global) {
+ _global = (typeof _global !== "undefined" && _global);
+ return this.getList("mashup", _global);
+}
+
+Model.Source.prototype.getAnnotationTypes = function(_global) {
+ _global = (typeof _global !== "undefined" && _global);
+ return this.getList("annotationType", _global);
+}
+
+Model.Source.prototype.getAnnotationsByTypeTitle = function(_title, _global) {
+ _global = (typeof _global !== "undefined" && _global);
+ var _res = new Model.List(this.directory),
+ _annTypes = this.getAnnotationTypes(_global).searchByTitle(_title);
+ _annTypes.forEach(function(_annType) {
+ _res.addElements(_annType.getAnnotations(_global));
+ })
+ return _res;
+}
+
+Model.Source.prototype.getDuration = function() {
+ var _m = this.currentMedia;
+ if (typeof _m !== "undefined") {
+ return this.currentMedia.duration;
+ }
+}
+
+Model.Source.prototype.getCurrentMedia = function(_opts) {
+ if (typeof this.currentMedia === "undefined") {
+ if (_opts.is_mashup) {
+ var _mashups = this.getMashups();
+ if (_mashups.length) {
+ this.currentMedia = _mashups[0];
+ }
+ } else {
+ var _medias = this.getMedias();
+ if (_medias.length) {
+ this.currentMedia = _medias[0];
+ }
+ }
+ }
+ return this.currentMedia;
+}
+
+Model.Source.prototype.merge = function(_source) {
+ var _this = this;
+ _source.forEach(function(_value, _key) {
+ _this.getList(_key).addElements(_value);
+ });
+}
+
+/* */
+
+Model.RemoteSource = function(_config) {
+ Model.Source.call(this, _config);
+}
+
+Model.RemoteSource.prototype = new Model.Source();
+
+Model.RemoteSource.prototype.get = function() {
+ this.status = Model._SOURCE_STATUS_WAITING;
+ var _this = this,
+ urlparams = this.url_params || {},
+ dataType = (Model.isLocalURL(this.url) ? "json" : "jsonp");
+ urlparams.format = dataType;
+ ns.jQuery.ajax({
+ url: this.url,
+ dataType: dataType,
+ data: urlparams,
+ traditional: true,
+ success: function(_result) {
+ _this.deSerialize(_result);
+ _this.handleCallbacks();
+ }
+ });
+}
+
+/* */
+
+Model.Directory = function() {
+ this.remoteSources = {};
+ this.elements = {};
+}
+
+Model.Directory.prototype.remoteSource = function(_properties) {
+ if (typeof _properties !== "object" || typeof _properties.url === "undefined") {
+ throw "Error : Model.Directory.remoteSource(configuration): configuration.url is undefined";
+ }
+ var _config = ns._({ directory: this }).extend(_properties);
+ _config.url_params = _config.url_params || {};
+ var _hash = _config.url + "?" + ns.jQuery.param(_config.url_params);
+ if (typeof this.remoteSources[_hash] === "undefined") {
+ this.remoteSources[_hash] = new Model.RemoteSource(_config);
+ }
+ return this.remoteSources[_hash];
+}
+
+Model.Directory.prototype.newLocalSource = function(_properties) {
+ var _config = ns._({ directory: this }).extend(_properties),
+ _res = new Model.Source(_config);
+ return _res;
+}
+
+Model.Directory.prototype.getElement = function(_id) {
+ return this.elements[_id];
+}
+
+Model.Directory.prototype.addElement = function(_element) {
+ this.elements[_element.id] = _element;
+}
+
+Model.Directory.prototype.getGlobalList = function() {
+ var _res = new Model.List(this);
+ _res.addIds(ns._(this.elements).keys());
+ return _res;
+}
+
+return Model;
+
+})(IriSP);
+
+/* END model.js */
+
+/* LDT Platform Serializer */
+
+if (typeof IriSP.serializers === "undefined") {
+ IriSP.serializers = {}
+}
+
+IriSP.serializers.ldt = {
+ types : {
+ media : {
+ serialized_name : "medias",
+ deserializer : function(_data, _source) {
+ var _res = new IriSP.Model.Media(_data.id, _source);
+ _res.video = (
+ typeof _data.url !== "undefined"
+ ? _data.url
+ : (
+ typeof _data.href !== "undefined"
+ ? _data.href
+ : null
+ )
+ );
+ if (typeof _data.meta.item !== "undefined" && _data.meta.item.name === "streamer") {
+ _res.streamer = _data.meta.item.value;
+ }
+ _res.title = _data.meta["dc:title"];
+ _res.description = _data.meta["dc:description"];
+ _res.setDuration(_data.meta["dc:duration"]);
+ _res.url = _data.meta.url;
+ if (typeof _data.meta.img !== "undefined" && _data.meta.img.src !== "undefined") {
+ _res.thumbnail = _data.meta.img.src;
+ }
+ return _res;
+ },
+ serializer : function(_data, _source, _dest) {
+ var _res = {
+ id : _data.id,
+ url : _data.video,
+ meta : {
+ "dc:title": _data.title || "",
+ "dc:description": _data.description || "",
+ "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
+ "dc:creator" : _data.creator || _source.creator,
+ "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
+ "dc:duration" : _data.duration.milliseconds
+ }
+ }
+ _dest.medias.push(_res);
+ var _list = {
+ id: IriSP.Model.getUID(),
+ meta : {
+ "dc:title": _data.title || "",
+ "dc:description": _data.description || "",
+ "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
+ "dc:creator" : _data.creator || _source.creator,
+ "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
+ "id-ref": _data.id
+ },
+ items: _source.getAnnotationTypes().filter(function(_at) {
+ return _at.media === _data;
+ }).map(function(_at) {
+ return {
+ "id-ref": _at.id
+ }
+ })
+ }
+ _dest.lists.push(_list);
+ _dest.views[0].contents.push(_data.id);
+ }
+ },
+ tag : {
+ serialized_name : "tags",
+ model_name : "tag",
+ deserializer : function(_data, _source) {
+ var _res = new IriSP.Model.Tag(_data.id, _source);
+ _res.title = _data.meta["dc:title"];
+ return _res;
+ },
+ serializer : function(_data, _source, _dest) {
+ var _res = {
+ id : _data.id,
+ meta : {
+ "dc:title": _data.title || "",
+ "dc:description": _data.description || "",
+ "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
+ "dc:creator" : _data.creator || _source.creator,
+ "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
+ }
+ }
+ _dest.tags.push(_res);
+ }
+ },
+ annotationType : {
+ serialized_name : "annotation-types",
+ deserializer : function(_data, _source) {
+ var _res = new IriSP.Model.AnnotationType(_data.id, _source);
+ _res.title = _data["dc:title"];
+ _res.description = _data["dc:description"];
+ return _res;
+ },
+ serializer : function(_data, _source, _dest) {
+ var _res = {
+ id : _data.id,
+ "dc:title": _data.title || "",
+ "dc:description": _data.description || "",
+ "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
+ "dc:creator" : _data.creator || _source.creator,
+ "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
+ }
+ _dest["annotation-types"].push(_res);
+ _dest.views[0].annotation_types.push(_data.id);
+ }
+ },
+ annotation : {
+ serialized_name : "annotations",
+ deserializer : function(_data, _source) {
+ var _res = new IriSP.Model.Annotation(_data.id, _source);
+ _res.title = _data.content.title || "";
+ _res.description = _data.content.description || "";
+ if (typeof _data.content.img !== "undefined" && _data.content.img.src !== "undefined") {
+ _res.thumbnail = _data.content.img.src;
+ }
+ _res.created = IriSP.Model.isoToDate(_data.meta["dc:created"]);
+ if (typeof _data.color !== "undefined") {
+ var _c = parseInt(_data.color).toString(16);
+ while (_c.length < 6) {
+ _c = '0' + _c;
+ }
+ _res.color = '#' + _c;
+ }
+ _res.setMedia(_data.media);
+ _res.setAnnotationType(_data.meta["id-ref"]);
+ _res.setTags(IriSP._(_data.tags).pluck("id-ref"));
+ _res.keywords = _res.getTagTexts();
+ _res.setBegin(_data.begin);
+ _res.setEnd(_data.end);
+ _res.creator = _data.meta["dc:creator"] || "";
+ _res.project = _data.meta.project || "";
+ if (typeof _data.meta["dc:source"] !== "undefined" && typeof _data.meta["dc:source"].content !== "undefined") {
+ _res.source = JSON.parse(_data.meta["dc:source"].content);
+ }
+ if (typeof _data.content.audio !== "undefined" && _data.content.audio.href) {
+ _res.audio = _data.content.audio;
+ }
+ return _res;
+ },
+ serializer : function(_data, _source, _dest) {
+ var _color = parseInt(_data.color.replace(/^#/,''),16).toString();
+ var _res = {
+ id : _data.id,
+ begin : _data.begin.milliseconds,
+ end : _data.end.milliseconds,
+ content : {
+ title : _data.title || "",
+ description : _data.description || "",
+ audio : _data.audio,
+ img: {
+ src: _data.thumbnail
+ }
+ },
+ color: _color,
+ media : _data.media.id,
+ meta : {
+ "id-ref" : _data.getAnnotationType().id,
+ "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
+ "dc:creator" : _data.creator || _source.creator,
+ "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
+// project : _source.projectId
+ },
+ tags : IriSP._(_data.tag.id).map(function(_id) {
+ return {
+ "id-ref" : _id
+ }
+ })
+ }
+ _dest.annotations.push(_res);
+ }
+ },
+ mashup : {
+ serialized_name : "lists",
+ deserializer : function(_data, _source) {
+ if (typeof _data.meta !== "object" || typeof _data.meta.listtype !== "string" || _data.meta.listtype !== "mashup") {
+ return undefined;
+ }
+ var _res = new IriSP.Model.Mashup(_data.id, _source);
+ _res.title = _data.meta["dc:title"];
+ _res.description = _data.meta["dc:description"];
+ _res.creator = _data.meta["dc:creator"];
+ _res.setAnnotationsById(_data.items);
+ return _res;
+ },
+ serializer : function(_data, _source, _dest) {
+ var _res = {
+ meta : {
+ "dc:title": _data.title || "",
+ "dc:description": _data.description || "",
+ "dc:created" : IriSP.Model.dateToIso(_data.created || _source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_data.modified || _source.modified),
+ "dc:creator" : _data.creator || _source.creator,
+ "dc:contributor" : _data.contributor || _source.contributor || _data.creator || _source.creator,
+ listtype: "mashup"
+ },
+ items: _data.segments.map(function(_annotation) {
+ return _annotation.annotation.id;
+ }),
+ id: _data.id
+ }
+ _dest.lists.push(_res);
+ }
+ }
+ },
+ serialize : function(_source) {
+ var _res = {
+ meta: {
+ "dc:creator": _source.creator,
+ "dc:contributor" : _source.contributor || _source.creator,
+ "dc:created": IriSP.Model.dateToIso(_source.created),
+ "dc:modified" : IriSP.Model.dateToIso(_source.modified),
+ "dc:title": _source.title || "",
+ "dc:description": _source.description || "",
+ id: _source.projectId || _source.id
+ },
+ views: [
+ {
+ id: IriSP.Model.getUID(),
+ contents: [],
+ annotation_types: []
+ }
+ ],
+ lists: [],
+ "annotation-types": [],
+ medias: [],
+ tags: [],
+ annotations: []
+ },
+ _this = this;
+ _source.forEach(function(_list, _typename) {
+ if (typeof _this.types[_typename] !== "undefined") {
+ _list.forEach(function(_el) {
+ _this.types[_typename].serializer(_el, _source, _res);
+ });
+ }
+ });
+ return JSON.stringify(_res);
+ },
+ deSerialize : function(_data, _source) {
+ if (typeof _data !== "object" || _data === null) {
+ return;
+ }
+ IriSP._(this.types).forEach(function(_type, _typename) {
+ var _listdata = _data[_type.serialized_name],
+ _list = new IriSP.Model.List(_source.directory);
+ if (typeof _listdata !== "undefined" && _listdata !== null) {
+ if (_listdata.hasOwnProperty("length")) {
+ var _l = _listdata.length;
+ for (var _i = 0; _i < _l; _i++) {
+ var _element = _type.deserializer(_listdata[_i], _source);
+ if (typeof _element !== "undefined" && _element) {
+ _list.push(_element);
+ }
+ }
+ } else {
+ var _element = _type.deserializer(_listdata, _source);
+ if (typeof _element !== "undefined" && _element) {
+ _list.push(_element);
+ }
+ }
+ }
+ _source.addList(_typename, _list);
+ });
+
+ if (typeof _data.meta !== "undefined") {
+ _source.projectId = _data.meta.id;
+ }
+
+ if (typeof _data.meta !== "undefined" && typeof _data.meta.main_media !== "undefined" && typeof _data.meta.main_media["id-ref"] !== "undefined") {
+ _source.currentMedia = _source.getElement(_data.meta.main_media["id-ref"]);
+ }
+ }
+}
+
+/* END ldt-serializer.js */
+
+IriSP.serializers.segmentapi = {
+ deSerialize : function(_data, _source) {
+ var _annotationlist = new IriSP.Model.List(_source.directory),
+ _medialist = new IriSP.Model.List(_source.directory);
+ _source.addList("media", _medialist);
+
+ function deserializeObject(_s) {
+ var _ann = new IriSP.Model.Annotation(_s.element_id, _source),
+ _media = _source.getElement(_s.iri_id);
+ if (!_media) {
+ _media = new IriSP.Model.Media(_s.iri_id, _source);
+ _source.getMedias().push(_media);
+ }
+ _ann.setMedia(_s.iri_id);
+ _ann.title = _s.title;
+ _ann.description = _s.abstract;
+ _ann.begin = new IriSP.Model.Time(_s.start_ts);
+ _ann.end = new IriSP.Model.Time(_s.start_ts + _s.duration);
+ _ann.keywords = _s.tags.split(",");
+ _ann.project_id = _s.project_id;
+ _annotationlist.push(_ann);
+ }
+
+ if (typeof _data.objects !== "undefined") {
+ IriSP._(_data.objects).each(deserializeObject);
+ } else {
+ deserializeObject(_data);
+ }
+ _source.addList("annotation", _annotationlist);
+ }
+}
+
+/* END segmentapi-serializer.js */
+IriSP.serializers.content = {
+ deSerialize : function(_data, _source) {
+ var _medialist = new IriSP.Model.List(_source.directory);
+
+ function deserializeObject(_m, i) {
+ var _media = new IriSP.Model.Media(_m.iri_id, _source);
+ _media.video = _m.media_url;
+ _media.title = _m.title;
+ _media.description = _m.description;
+ _media.setDuration(_m.duration);
+ _media.thumbnail = _m.image;
+ _media.color = IriSP.vizcolors[i % IriSP.vizcolors.length];
+ _media.keywords = _m.tags;
+ _medialist.push(_media);
+ }
+
+ if (typeof _data.objects !== "undefined") {
+ IriSP._(_data.objects).each(deserializeObject);
+ } else {
+ deserializeObject(_data, 0);
+ }
+
+ _source.addList("media", _medialist);
+ }
+};
+
+/* END contentapi-serializer.js */
+IriSP.mashupcore = function(project, mashup) {
+
+ var currentMedia,
+ intervaltemplate = _.template('<%= time.toString() %>'),
+ viztemplate = _.template('');
+
+ function updateMashupUI() {
+ var vizhtml = '', t = 0, k = mashup.duration ? (100 / mashup.duration) : 0;
+ mashup.segments.forEach(function(_s) {
+ var vizdata = {
+ left: k * t,
+ width: k * _s.duration,
+ color: _s.color,
+ segmentid: _s.annotation.id
+ }
+ vizhtml += viztemplate(vizdata);
+ t += _s.duration.milliseconds;
+ });
+
+ var intervals = [ 1000, 2000, 5000, 10000, 30000, 60000, 120000, 300000, 600000, 900000, 1800000, 3600000, 7200000 ];
+
+ function createIntervals(maxn) {
+ for (var i = 0; i < intervals.length; i++) {
+ if (mashup.duration / intervals[i] <= maxn) {
+ var html = '';
+ for (var j = intervals[i]; j < mashup.duration; j += intervals[i]) {
+ html += intervaltemplate({ left: k * j, time: new IriSP.Model.Time(j) });
+ }
+ return html;
+ }
+ }
+ return "";
+ }
+
+ $(".mashup-total-duration").text(mashup.duration.toString());
+ $(".mashup-frise .frise-segments").html(vizhtml);
+ $(".mashup-frise .frise-indications").html(createIntervals(6));
+
+ if (currentMedia === mashup) {
+ $(".Ldt-Ctrl-Time-Total").text(currentMedia.duration.toString());
+ if (mashupTimecode > mashup.duration) {
+ mashup.setCurrentTime(mashup.duration);
+ }
+ changeCurrentAnnotation();
+ mashup.trigger("enter-annotation",mashup.currentAnnotation);
+ }
+
+ }
+
+ /* Slider */
+
+ var timeSlider = $(".Ldt-Slider"),
+ timeSliderContainer = $(".Ldt-Slider-Container"),
+ slidersRange = 920;
+ timeSlider.slider({
+ range: "min",
+ value: 0,
+ min: 0,
+ max: slidersRange,
+ slide: function(event, ui) {
+ if (currentMedia) {
+ var t = currentMedia.duration * ui.value / slidersRange;
+ currentMedia.setCurrentTime(t);
+ }
+ }
+ });
+
+ var timeSliderHandle = timeSlider.find('.ui-slider-handle'),
+ timeSliderMaximized = false,
+ timeSliderTimeoutId = false,
+ timeSliderMinimizedHeight = 4,
+ timeSliderMaximizedHeight = 10,
+ timeSliderTimeoutDuration = 1500,
+ timeTooltip = $(".Ldt-Slider-Time");
+
+ timeSliderContainer.css(calculateSliderCss(timeSliderMinimizedHeight));
+ timeSliderHandle.css(calculateHandleCss(timeSliderMinimizedHeight));
+
+ function timeSliderMouseOver() {
+ if (timeSliderTimeoutId) {
+ window.clearTimeout(timeSliderTimeoutId);
+ timeSliderTimeoutId = false;
+ }
+ if (!timeSliderMaximized) {
+ timeSliderAnimateToHeight(timeSliderMaximizedHeight);
+ timeSliderMaximized = true;
+ }
+ }
+
+ function timeSliderMouseOut() {
+ timeTooltip.hide();
+ if (timeSliderTimeoutId) {
+ clearTimeout(timeSliderTimeoutId);
+ timeSliderTimeoutId = false;
+ }
+ timeSliderTimeoutId = setTimeout(function() {
+ if (timeSliderMaximized) {
+ timeSliderAnimateToHeight(timeSliderMinimizedHeight);
+ timeSliderMaximized = false;
+ }
+ timeSliderTimeoutId = false;
+ }, timeSliderTimeoutDuration);
+ }
+
+ timeSliderContainer
+ .mouseover(function() {
+ timeTooltip.show();
+ timeSliderMouseOver();
+ })
+ .mouseout(timeSliderMouseOut);
+ timeSlider.mousemove(function(_e) {
+ if (!currentMedia) {
+ return;
+ }
+ var _x = _e.pageX - timeSlider.offset().left,
+ _t = new IriSP.Model.Time(
+ Math.max(0, currentMedia.duration * Math.min(1, _x / timeSlider.width()))
+ );
+ timeTooltip.text(_t.toString()).css("left",_x);
+ });
+
+ $(".Ldt-Ctrl").mouseover(timeSliderMouseOver).mouseout(timeSliderMouseOut);
+
+ function timeSliderAnimateToHeight(_height) {
+ timeSliderContainer.stop().animate(
+ calculateSliderCss(_height),
+ 500,
+ function() {
+ IriSP.jQuery(this).css("overflow","visible");
+ });
+ timeSliderHandle.stop().animate(
+ calculateHandleCss(_height),
+ 500,
+ function() {
+ IriSP.jQuery(this).css("overflow","visible");
+ });
+ }
+
+ function calculateSliderCss(_size) {
+ return {
+ height: _size + "px",
+ "margin-top": (timeSliderMinimizedHeight - _size) + "px"
+ };
+ }
+
+ function calculateHandleCss(_size) {
+ return {
+ height: (2 + _size) + "px",
+ width: (2 + _size) + "px",
+ "margin-left": -Math.ceil(2 + _size / 2) + "px"
+ }
+ }
+
+ /* Controller Widget */
+
+ var volBlock = $(".Ldt-Ctrl-Volume-Control");
+
+ $('.Ldt-Ctrl-Sound')
+ .click(function() {
+ if (currentMedia) {
+ currentMedia.setMuted(!currentMedia.getMuted());
+ }
+ })
+ .mouseover(function() {
+ volBlock.show();
+ })
+ .mouseout(function() {
+ volBlock.hide();
+ });
+ volBlock.mouseover(function() {
+ volBlock.show();
+ }).mouseout(function() {
+ volBlock.hide();
+ });
+
+ var volBar = $(".Ldt-Ctrl-Volume-Bar");
+
+ function ctrlVolumeUpdater() {
+ if (currentMedia) {
+ var _muted = currentMedia.getMuted(),
+ _vol = currentMedia.getVolume();
+ if (_vol === false) {
+ _vol = .5;
+ }
+ var _soundCtl = $(".Ldt-Ctrl-Sound");
+ _soundCtl.removeClass("Ldt-Ctrl-Sound-Mute Ldt-Ctrl-Sound-Half Ldt-Ctrl-Sound-Full");
+ if (_muted) {
+ _soundCtl.attr("title", "Activer le son")
+ .addClass("Ldt-Ctrl-Sound-Mute");
+ } else {
+ _soundCtl.attr("title", "Couper le son")
+ .addClass(_vol < .5 ? "Ldt-Ctrl-Sound-Half" : "Ldt-Ctrl-Sound-Full" )
+ }
+ volBar.slider("value", _muted ? 0 : 100 * _vol);
+ volBar.attr("title",'Volume : ' + Math.floor(100 * _vol) + '%');
+ }
+ }
+
+ volBar.slider({
+ slide: function(event, ui) {
+ if (currentMedia) {
+ currentMedia.setVolume(ui.value / 100);
+ }
+ }
+ });
+
+ $(".Ldt-Ctrl-Play").click(function() {
+ if (currentMedia) {
+ if (currentMedia.getPaused()) {
+ currentMedia.play();
+ } else {
+ currentMedia.pause();
+ }
+ }
+ });
+
+ /* UI Events */
+
+ function onCurrentMediaPlay() {
+ $(".Ldt-Ctrl-Play")
+ .attr("title", "Pause")
+ .removeClass("Ldt-Ctrl-Play-PlayState")
+ .addClass("Ldt-Ctrl-Play-PauseState")
+ }
+
+ function onCurrentMediaPause() {
+ $(".Ldt-Ctrl-Play")
+ .attr("title", "Lecture")
+ .removeClass("Ldt-Ctrl-Play-PauseState")
+ .addClass("Ldt-Ctrl-Play-PlayState")
+ }
+
+ function onCurrentMediaTimeupdate(_time) {
+ $(".Ldt-Ctrl-Time-Elapsed").text(_time.toString());
+ timeSlider.slider("value",slidersRange * _time / currentMedia.duration);
+ }
+
+ /* Mashup Player */
+
+ mashup.currentMedia = null;
+ mashup.currentAnnotation = null;
+ mashup.seeking = false;
+ var mashupSegmentBegin,
+ mashupSegmentEnd,
+ mashupTimecode = 0,
+ seekdiv = $(".video-wait"),
+ mashupTimedelta;
+
+ function showSeek() {
+ if (currentMedia.seeking) {
+ seekdiv.show();
+ }
+ }
+
+ function changeCurrentAnnotation() {
+ if (mashupTimecode >= mashup.duration) {
+ if (!mashup.paused) {
+ mashup.paused = true;
+ mashup.trigger("pause");
+ }
+ mashupTimecode = 0;
+ }
+ var _annotation = mashup.getAnnotationAtTime( mashupTimecode );
+ if (typeof _annotation === "undefined") {
+ if (mashup.currentMedia) {
+ mashup.currentMedia.pause();
+ if (!mashup.paused) {
+ mashup.paused = true;
+ mashup.trigger("pause");
+ }
+ }
+ return;
+ }
+ mashup.currentAnnotation = _annotation;
+ mashupSegmentBegin = mashup.currentAnnotation.annotation.begin.milliseconds;
+ mashupSegmentEnd = mashup.currentAnnotation.annotation.end.milliseconds;
+ mashupTimedelta = mashupSegmentBegin - mashup.currentAnnotation.begin.milliseconds;
+ mashup.currentMedia = mashup.currentAnnotation.getMedia();
+
+ project.getMedias().forEach(function(_media) {
+ if (_media !== mashup.currentMedia) {
+ _media.hide();
+ _media.pause();
+ } else {
+ _media.show();
+ }
+ });
+
+ mashup.currentMedia.setCurrentTime( mashupTimecode + mashupTimedelta);
+ mashup.currentMedia.seeking = true;
+
+ if (!mashup.paused) {
+ mashup.currentMedia.play();
+ mashup.seeking = true;
+ setTimeout(showSeek,200);
+ }
+ mashup.trigger("timeupdate", new IriSP.Model.Time(mashupTimecode));
+
+ }
+
+ function addMedia(media) {
+ if (media.has_player) {
+ return;
+ }
+ media.has_player = true;
+ var videoid = "video_" + media.id,
+ videoEl = $('