Merge branch '1.11.x' of https://github.com/chamilo/chamilo-lms into 1.11.x

remotes/angel/1.11.x
Alex Aragon 8 years ago
commit cd328a38e1
  1. 12
      app/Resources/public/assets/jquery/.bower.json
  2. 3
      app/Resources/public/assets/jquery/AUTHORS.txt
  3. 66
      app/Resources/public/assets/jquery/README.md
  4. 147
      app/Resources/public/assets/jquery/dist/jquery.js
  5. 8
      app/Resources/public/assets/jquery/dist/jquery.min.js
  6. 2
      app/Resources/public/assets/jquery/dist/jquery.min.map
  7. 36
      app/Resources/public/assets/jquery/external/sizzle/LICENSE.txt
  8. 2143
      app/Resources/public/assets/jquery/external/sizzle/dist/sizzle.js
  9. 3
      app/Resources/public/assets/jquery/external/sizzle/dist/sizzle.min.js
  10. 1
      app/Resources/public/assets/jquery/external/sizzle/dist/sizzle.min.map
  11. 2
      app/Resources/public/assets/jquery/src/ajax/load.js
  12. 16
      app/Resources/public/assets/jquery/src/attributes/prop.js
  13. 17
      app/Resources/public/assets/jquery/src/attributes/val.js
  14. 13
      app/Resources/public/assets/jquery/src/core.js
  15. 14
      app/Resources/public/assets/jquery/src/core/parseHTML.js
  16. 18
      app/Resources/public/assets/jquery/src/core/support.js
  17. 13
      app/Resources/public/assets/jquery/src/css.js
  18. 13
      app/Resources/public/assets/jquery/src/css/curCSS.js
  19. 2
      app/Resources/public/assets/jquery/src/css/var/getStyles.js
  20. 20
      app/Resources/public/assets/jquery/src/data/accepts.js
  21. 23
      app/Resources/public/assets/jquery/src/data/support.js
  22. 58
      app/Resources/public/assets/jquery/src/effects/support.js
  23. 9
      app/Resources/public/assets/jquery/src/event.js
  24. 18
      app/Resources/public/assets/jquery/src/event/trigger.js
  25. 12
      app/Resources/public/assets/jquery/src/manipulation.js
  26. 20
      app/Resources/public/assets/jquery/src/manipulation/createSafeFragment.js
  27. 5
      app/Resources/public/assets/jquery/src/manipulation/var/nodeNames.js
  28. 3
      app/Resources/public/assets/jquery/src/manipulation/var/rleadingWhitespace.js
  29. 7
      app/Resources/public/assets/jquery/src/offset.js
  30. 2
      app/Resources/public/assets/jquery/src/selector-sizzle.js
  31. 63
      app/Resources/public/assets/jquery/src/support.js
  32. 3
      app/Resources/public/assets/jquery/src/var/deletedIds.js
  33. 8
      app/Resources/public/assets/mediaelement/.bower.json
  34. 2
      app/Resources/public/assets/mediaelement/README.md
  35. BIN
      app/Resources/public/assets/mediaelement/build/flashmediaelement-cdn.swf
  36. BIN
      app/Resources/public/assets/mediaelement/build/flashmediaelement-debug.swf
  37. BIN
      app/Resources/public/assets/mediaelement/build/flashmediaelement.swf
  38. 323
      app/Resources/public/assets/mediaelement/build/mediaelement-and-player.js
  39. 6
      app/Resources/public/assets/mediaelement/build/mediaelement-and-player.min.js
  40. 9
      app/Resources/public/assets/mediaelement/build/mediaelement.js
  41. 2
      app/Resources/public/assets/mediaelement/build/mediaelement.min.js
  42. 9
      app/Resources/public/assets/mediaelement/build/mediaelementplayer.css
  43. 314
      app/Resources/public/assets/mediaelement/build/mediaelementplayer.js
  44. 2
      app/Resources/public/assets/mediaelement/build/mediaelementplayer.min.css
  45. 4
      app/Resources/public/assets/mediaelement/build/mediaelementplayer.min.js
  46. 10
      app/Resources/public/assets/mediaelement/changelog.md
  47. 8
      app/Resources/public/assets/webcamjs/.bower.json
  48. 1
      app/Resources/public/assets/webcamjs/README.md
  49. 2
      app/Resources/public/assets/webcamjs/bower.json
  50. 2
      app/Resources/public/assets/webcamjs/package.json
  51. 9
      app/Resources/public/assets/webcamjs/webcam.js
  52. 4
      app/Resources/public/assets/webcamjs/webcam.min.js
  53. 7
      main/admin/skill_list.php
  54. 15
      main/inc/lib/sessionmanager.lib.php
  55. 4
      main/template/default/layout/header.js.tpl
  56. 28
      main/template/default/layout/page.tpl
  57. 2
      main/template/default/layout/page_footer.tpl
  58. 134
      main/template/default/layout/sniff.tpl
  59. 29
      main/template/default/skill/list.tpl
  60. 11
      main/user/subscribe_user.php
  61. 52
      src/Chamilo/CoreBundle/Component/Editor/CkEditor/Toolbar/Basic.php

@ -12,14 +12,14 @@
"library"
],
"homepage": "https://github.com/jquery/jquery-dist",
"version": "2.2.0",
"_release": "2.2.0",
"version": "2.2.4",
"_release": "2.2.4",
"_resolution": {
"type": "version",
"tag": "2.2.0",
"commit": "6fc01e29bdad0964f62ef56d01297039cdcadbe5"
"tag": "2.2.4",
"commit": "c0185ab7c75aab88762c5aae780b9d83b80eda72"
},
"_source": "git://github.com/jquery/jquery-dist.git",
"_target": "2.2.0",
"_source": "https://github.com/jquery/jquery-dist.git",
"_target": "1.9.1 - 2",
"_originalSource": "jquery"
}

@ -273,3 +273,6 @@ Liza Ramo <liza.h.ramo@gmail.com>
Julian Alexander Murillo <julian.alexander.murillo@gmail.com>
Joelle Fleurantin <joasqueeniebee@gmail.com>
Jun Sun <klsforever@gmail.com>
Devin Wilson <dwilson6.github@gmail.com>
Todor Prikumov <tono_pr@abv.bg>
Zack Hall <zackhall@outlook.com>

@ -1,5 +1,65 @@
# jQuery Dist
# jQuery
This repo only contains package distribution files for jQuery Core.
> jQuery is a fast, small, and feature-rich JavaScript library.
For source files and issues, visit the [jQuery repo](https://github.com/jquery/jquery).
For information on how to get started and how to use jQuery, please see [jQuery's documentation](http://api.jquery.com/).
For source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery).
## Including jQuery
Below are some of the most common ways to include jQuery.
### Browser
#### Script tag
```html
<script src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
```
#### Babel
[Babel](http://babeljs.io/) is a next generation JavaScript compiler. One of the features is the ability to use ES6/ES2015 modules now, even though browsers do not yet support this feature natively.
```js
import $ from "jquery";
```
#### Browserify/Webpack
There are several ways to use [Browserify](http://browserify.org/) and [Webpack](https://webpack.github.io/). For more information on using these tools, please refer to the corresponding project's documention. In the script, including jQuery will usually look like this...
```js
var $ = require("jquery");
```
#### AMD (Asynchronous Module Definition)
AMD is a module format built for the browser. For more information, we recommend [require.js' documentation](http://requirejs.org/docs/whyamd.html).
```js
define(["jquery"], function($) {
});
```
### Node
To include jQuery in [Node](nodejs.org), first install with npm.
```sh
npm install jquery
```
For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/tmpvar/jsdom). This can be useful for testing purposes.
```js
require("jsdom").env("", function(err, window) {
if (err) {
console.error(err);
return;
}
var $ = require("jquery")(window);
});
```

@ -1,5 +1,5 @@
/*!
* jQuery JavaScript Library v2.2.0
* jQuery JavaScript Library v2.2.4
* http://jquery.com/
*
* Includes Sizzle.js
@ -9,7 +9,7 @@
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2016-01-08T20:02Z
* Date: 2016-05-20T17:23Z
*/
(function( global, factory ) {
@ -65,7 +65,7 @@ var support = {};
var
version = "2.2.0",
version = "2.2.4",
// Define a local copy of jQuery
jQuery = function( selector, context ) {
@ -276,6 +276,7 @@ jQuery.extend( {
},
isPlainObject: function( obj ) {
var key;
// Not plain objects:
// - Any object or value whose internal [[Class]] property is not "[object Object]"
@ -285,14 +286,18 @@ jQuery.extend( {
return false;
}
// Not own constructor property must be Object
if ( obj.constructor &&
!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
!hasOwn.call( obj, "constructor" ) &&
!hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) {
return false;
}
// If the function hasn't returned already, we're confident that
// |obj| is a plain object, created by {} or constructed with new Object
return true;
// Own properties are enumerated firstly, so to speed up,
// if last one is own, then all properties are own
for ( key in obj ) {}
return key === undefined || hasOwn.call( obj, key );
},
isEmptyObject: function( obj ) {
@ -4479,7 +4484,7 @@ function on( elem, types, selector, data, fn, one ) {
if ( fn === false ) {
fn = returnFalse;
} else if ( !fn ) {
return this;
return elem;
}
if ( one === 1 ) {
@ -5001,13 +5006,14 @@ jQuery.Event.prototype = {
isDefaultPrevented: returnFalse,
isPropagationStopped: returnFalse,
isImmediatePropagationStopped: returnFalse,
isSimulated: false,
preventDefault: function() {
var e = this.originalEvent;
this.isDefaultPrevented = returnTrue;
if ( e ) {
if ( e && !this.isSimulated ) {
e.preventDefault();
}
},
@ -5016,7 +5022,7 @@ jQuery.Event.prototype = {
this.isPropagationStopped = returnTrue;
if ( e ) {
if ( e && !this.isSimulated ) {
e.stopPropagation();
}
},
@ -5025,7 +5031,7 @@ jQuery.Event.prototype = {
this.isImmediatePropagationStopped = returnTrue;
if ( e ) {
if ( e && !this.isSimulated ) {
e.stopImmediatePropagation();
}
@ -5128,14 +5134,14 @@ var
rscriptTypeMasked = /^true\/(.*)/,
rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
// Manipulating tables requires a tbody
function manipulationTarget( elem, content ) {
if ( jQuery.nodeName( elem, "table" ) &&
jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
return jQuery.nodeName( elem, "table" ) &&
jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
return elem.getElementsByTagName( "tbody" )[ 0 ] || elem;
}
return elem;
elem.getElementsByTagName( "tbody" )[ 0 ] ||
elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) :
elem;
}
// Replace/restore the type attribute of script elements for safe DOM manipulation
@ -5642,7 +5648,7 @@ var getStyles = function( elem ) {
// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
var view = elem.ownerDocument.defaultView;
if ( !view.opener ) {
if ( !view || !view.opener ) {
view = window;
}
@ -5791,15 +5797,18 @@ function curCSS( elem, name, computed ) {
style = elem.style;
computed = computed || getStyles( elem );
ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
// Support: Opera 12.1x only
// Fall back to style even without computed
// computed is undefined for elems on document fragments
if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {
ret = jQuery.style( elem, name );
}
// Support: IE9
// getPropertyValue is only needed for .css('filter') (#12537)
if ( computed ) {
ret = computed.getPropertyValue( name ) || computed[ name ];
if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
ret = jQuery.style( elem, name );
}
// A tribute to the "awesome hack by Dean Edwards"
// Android Browser returns percentage for some values,
@ -5953,19 +5962,6 @@ function getWidthOrHeight( elem, name, extra ) {
styles = getStyles( elem ),
isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
// Support: IE11 only
// In IE 11 fullscreen elements inside of an iframe have
// 100x too small dimensions (gh-1764).
if ( document.msFullscreenElement && window.top !== window ) {
// Support: IE11 only
// Running getBoundingClientRect on a disconnected node
// in IE throws an error.
if ( elem.getClientRects().length ) {
val = Math.round( elem.getBoundingClientRect()[ name ] * 100 );
}
}
// Some non-html elements return undefined for offsetWidth, so check for null/undefined
// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
@ -7322,6 +7318,12 @@ jQuery.extend( {
}
} );
// Support: IE <=11 only
// Accessing the selectedIndex property
// forces the browser to respect setting selected
// on the option
// The getter ensures a default option is selected
// when in an optgroup
if ( !support.optSelected ) {
jQuery.propHooks.selected = {
get: function( elem ) {
@ -7330,6 +7332,16 @@ if ( !support.optSelected ) {
parent.parentNode.selectedIndex;
}
return null;
},
set: function( elem ) {
var parent = elem.parentNode;
if ( parent ) {
parent.selectedIndex;
if ( parent.parentNode ) {
parent.parentNode.selectedIndex;
}
}
}
};
}
@ -7524,7 +7536,8 @@ jQuery.fn.extend( {
var rreturn = /\r/g;
var rreturn = /\r/g,
rspaces = /[\x20\t\r\n\f]+/g;
jQuery.fn.extend( {
val: function( value ) {
@ -7600,9 +7613,15 @@ jQuery.extend( {
option: {
get: function( elem ) {
// Support: IE<11
// option.value not trimmed (#14858)
return jQuery.trim( elem.value );
var val = jQuery.find.attr( elem, "value" );
return val != null ?
val :
// Support: IE10-11+
// option.text throws exceptions (#14686, #14858)
// Strip and collapse whitespace
// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
}
},
select: {
@ -7655,7 +7674,7 @@ jQuery.extend( {
while ( i-- ) {
option = options[ i ];
if ( option.selected =
jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
) {
optionSet = true;
}
@ -7833,6 +7852,7 @@ jQuery.extend( jQuery.event, {
},
// Piggyback on a donor event to simulate a different one
// Used only for `focus(in | out)` events
simulate: function( type, elem, event ) {
var e = jQuery.extend(
new jQuery.Event(),
@ -7840,27 +7860,10 @@ jQuery.extend( jQuery.event, {
{
type: type,
isSimulated: true
// Previously, `originalEvent: {}` was set here, so stopPropagation call
// would not be triggered on donor event, since in our own
// jQuery.event.stopPropagation function we had a check for existence of
// originalEvent.stopPropagation method, so, consequently it would be a noop.
//
// But now, this "simulate" function is used only for events
// for which stopPropagation() is noop, so there is no need for that anymore.
//
// For the compat branch though, guard for "click" and "submit"
// events is still used, but was moved to jQuery.event.stopPropagation function
// because `originalEvent` should point to the original event for the constancy
// with other events and for more focused logic
}
);
jQuery.event.trigger( e, null, elem );
if ( e.isDefaultPrevented() ) {
event.preventDefault();
}
}
} );
@ -9350,18 +9353,6 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
// Support: Safari 8+
// In Safari 8 documents created via document.implementation.createHTMLDocument
// collapse sibling forms: the second one becomes a child of the first one.
// Because of that, this security measure has to be disabled in Safari 8.
// https://bugs.webkit.org/show_bug.cgi?id=137337
support.createHTMLDocument = ( function() {
var body = document.implementation.createHTMLDocument( "" ).body;
body.innerHTML = "<form></form><form></form>";
return body.childNodes.length === 2;
} )();
// Argument "data" should be string of html
// context (optional): If specified, the fragment will be created in this context,
// defaults to document
@ -9374,12 +9365,7 @@ jQuery.parseHTML = function( data, context, keepScripts ) {
keepScripts = context;
context = false;
}
// Stop scripts or inline event handlers from being executed immediately
// by using document.implementation
context = context || ( support.createHTMLDocument ?
document.implementation.createHTMLDocument( "" ) :
document );
context = context || document;
var parsed = rsingleTag.exec( data ),
scripts = !keepScripts && [];
@ -9461,7 +9447,7 @@ jQuery.fn.load = function( url, params, callback ) {
// If it fails, this function gets "jqXHR", "status", "error"
} ).always( callback && function( jqXHR, status ) {
self.each( function() {
callback.apply( self, response || [ jqXHR.responseText, status, jqXHR ] );
callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
} );
} );
}
@ -9619,11 +9605,8 @@ jQuery.fn.extend( {
}
// Add offsetParent borders
// Subtract offsetParent scroll positions
parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ) -
offsetParent.scrollTop();
parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ) -
offsetParent.scrollLeft();
parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
}
// Subtract parent offsets and element margins

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,36 @@
Copyright jQuery Foundation and other contributors, https://jquery.org/
This software consists of voluntary contributions made by many
individuals. For exact contribution history, see the revision history
available at https://github.com/jquery/sizzle
The following license applies to all parts of this software except as
documented below:
====
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
====
All files located in the node_modules and external directories are
externally maintained libraries used by this software which have their
own licenses; we recommend you read them, as their terms may differ from
the terms above.

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -72,7 +72,7 @@ jQuery.fn.load = function( url, params, callback ) {
// If it fails, this function gets "jqXHR", "status", "error"
} ).always( callback && function( jqXHR, status ) {
self.each( function() {
callback.apply( self, response || [ jqXHR.responseText, status, jqXHR ] );
callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
} );
} );
}

@ -79,6 +79,12 @@ jQuery.extend( {
}
} );
// Support: IE <=11 only
// Accessing the selectedIndex property
// forces the browser to respect setting selected
// on the option
// The getter ensures a default option is selected
// when in an optgroup
if ( !support.optSelected ) {
jQuery.propHooks.selected = {
get: function( elem ) {
@ -87,6 +93,16 @@ if ( !support.optSelected ) {
parent.parentNode.selectedIndex;
}
return null;
},
set: function( elem ) {
var parent = elem.parentNode;
if ( parent ) {
parent.selectedIndex;
if ( parent.parentNode ) {
parent.parentNode.selectedIndex;
}
}
}
};
}

@ -4,7 +4,8 @@ define( [
"../core/init"
], function( jQuery, support ) {
var rreturn = /\r/g;
var rreturn = /\r/g,
rspaces = /[\x20\t\r\n\f]+/g;
jQuery.fn.extend( {
val: function( value ) {
@ -80,9 +81,15 @@ jQuery.extend( {
option: {
get: function( elem ) {
// Support: IE<11
// option.value not trimmed (#14858)
return jQuery.trim( elem.value );
var val = jQuery.find.attr( elem, "value" );
return val != null ?
val :
// Support: IE10-11+
// option.text throws exceptions (#14686, #14858)
// Strip and collapse whitespace
// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
}
},
select: {
@ -135,7 +142,7 @@ jQuery.extend( {
while ( i-- ) {
option = options[ i ];
if ( option.selected =
jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
) {
optionSet = true;
}

@ -223,6 +223,7 @@ jQuery.extend( {
},
isPlainObject: function( obj ) {
var key;
// Not plain objects:
// - Any object or value whose internal [[Class]] property is not "[object Object]"
@ -232,14 +233,18 @@ jQuery.extend( {
return false;
}
// Not own constructor property must be Object
if ( obj.constructor &&
!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
!hasOwn.call( obj, "constructor" ) &&
!hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) {
return false;
}
// If the function hasn't returned already, we're confident that
// |obj| is a plain object, created by {} or constructed with new Object
return true;
// Own properties are enumerated firstly, so to speed up,
// if last one is own, then all properties are own
for ( key in obj ) {}
return key === undefined || hasOwn.call( obj, key );
},
isEmptyObject: function( obj ) {

@ -2,11 +2,8 @@ define( [
"../core",
"../var/document",
"./var/rsingleTag",
"../manipulation/buildFragment",
// This is the only module that needs core/support
"./support"
], function( jQuery, document, rsingleTag, buildFragment, support ) {
"../manipulation/buildFragment"
], function( jQuery, document, rsingleTag, buildFragment ) {
// Argument "data" should be string of html
// context (optional): If specified, the fragment will be created in this context,
@ -20,12 +17,7 @@ jQuery.parseHTML = function( data, context, keepScripts ) {
keepScripts = context;
context = false;
}
// Stop scripts or inline event handlers from being executed immediately
// by using document.implementation
context = context || ( support.createHTMLDocument ?
document.implementation.createHTMLDocument( "" ) :
document );
context = context || document;
var parsed = rsingleTag.exec( data ),
scripts = !keepScripts && [];

@ -1,18 +0,0 @@
define( [
"../var/document",
"../var/support"
], function( document, support ) {
// Support: Safari 8+
// In Safari 8 documents created via document.implementation.createHTMLDocument
// collapse sibling forms: the second one becomes a child of the first one.
// Because of that, this security measure has to be disabled in Safari 8.
// https://bugs.webkit.org/show_bug.cgi?id=137337
support.createHTMLDocument = ( function() {
var body = document.implementation.createHTMLDocument( "" ).body;
body.innerHTML = "<form></form><form></form>";
return body.childNodes.length === 2;
} )();
return support;
} );

@ -123,19 +123,6 @@ function getWidthOrHeight( elem, name, extra ) {
styles = getStyles( elem ),
isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
// Support: IE11 only
// In IE 11 fullscreen elements inside of an iframe have
// 100x too small dimensions (gh-1764).
if ( document.msFullscreenElement && window.top !== window ) {
// Support: IE11 only
// Running getBoundingClientRect on a disconnected node
// in IE throws an error.
if ( elem.getClientRects().length ) {
val = Math.round( elem.getBoundingClientRect()[ name ] * 100 );
}
}
// Some non-html elements return undefined for offsetWidth, so check for null/undefined
// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668

@ -12,15 +12,18 @@ function curCSS( elem, name, computed ) {
style = elem.style;
computed = computed || getStyles( elem );
ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
// Support: Opera 12.1x only
// Fall back to style even without computed
// computed is undefined for elems on document fragments
if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {
ret = jQuery.style( elem, name );
}
// Support: IE9
// getPropertyValue is only needed for .css('filter') (#12537)
if ( computed ) {
ret = computed.getPropertyValue( name ) || computed[ name ];
if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
ret = jQuery.style( elem, name );
}
// A tribute to the "awesome hack by Dean Edwards"
// Android Browser returns percentage for some values,

@ -6,7 +6,7 @@ define( function() {
// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
var view = elem.ownerDocument.defaultView;
if ( !view.opener ) {
if ( !view || !view.opener ) {
view = window;
}

@ -1,20 +0,0 @@
define([
"../core"
], function( jQuery ) {
/**
* Determines whether an object can have data
*/
jQuery.acceptData = function( owner ) {
// Accepts only:
// - Node
// - Node.ELEMENT_NODE
// - Node.DOCUMENT_NODE
// - Object
// - Any
/* jshint -W018 */
return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
};
return jQuery.acceptData;
});

@ -1,23 +0,0 @@
define( [
"../var/document",
"../var/support"
], function( document, support ) {
( function() {
var div = document.createElement( "div" );
// Support: IE<9
support.deleteExpando = true;
try {
delete div.test;
} catch ( e ) {
support.deleteExpando = false;
}
// Null elements to avoid leaks in IE.
div = null;
} )();
return support;
} );

@ -1,58 +0,0 @@
define( [
"../var/support",
"../var/document"
], function( support, document ) {
( function() {
var shrinkWrapBlocksVal;
support.shrinkWrapBlocks = function() {
if ( shrinkWrapBlocksVal != null ) {
return shrinkWrapBlocksVal;
}
// Will be changed later if needed.
shrinkWrapBlocksVal = false;
// Minified: var b,c,d
var div, body, container;
body = document.getElementsByTagName( "body" )[ 0 ];
if ( !body || !body.style ) {
// Test fired too early or in an unsupported environment, exit.
return;
}
// Setup
div = document.createElement( "div" );
container = document.createElement( "div" );
container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
body.appendChild( container ).appendChild( div );
// Support: IE6
// Check if elements with layout shrink-wrap their children
if ( typeof div.style.zoom !== "undefined" ) {
// Reset CSS: box-sizing; display; margin; border
div.style.cssText =
// Support: Firefox<29, Android 2.3
// Vendor-prefix box-sizing
"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
"box-sizing:content-box;display:block;margin:0;border:0;" +
"padding:1px;width:1px;zoom:1";
div.appendChild( document.createElement( "div" ) ).style.width = "5px";
shrinkWrapBlocksVal = div.offsetWidth !== 3;
}
body.removeChild( container );
return shrinkWrapBlocksVal;
};
} )();
return support;
} );

@ -71,7 +71,7 @@ function on( elem, types, selector, data, fn, one ) {
if ( fn === false ) {
fn = returnFalse;
} else if ( !fn ) {
return this;
return elem;
}
if ( one === 1 ) {
@ -593,13 +593,14 @@ jQuery.Event.prototype = {
isDefaultPrevented: returnFalse,
isPropagationStopped: returnFalse,
isImmediatePropagationStopped: returnFalse,
isSimulated: false,
preventDefault: function() {
var e = this.originalEvent;
this.isDefaultPrevented = returnTrue;
if ( e ) {
if ( e && !this.isSimulated ) {
e.preventDefault();
}
},
@ -608,7 +609,7 @@ jQuery.Event.prototype = {
this.isPropagationStopped = returnTrue;
if ( e ) {
if ( e && !this.isSimulated ) {
e.stopPropagation();
}
},
@ -617,7 +618,7 @@ jQuery.Event.prototype = {
this.isImmediatePropagationStopped = returnTrue;
if ( e ) {
if ( e && !this.isSimulated ) {
e.stopImmediatePropagation();
}

@ -148,6 +148,7 @@ jQuery.extend( jQuery.event, {
},
// Piggyback on a donor event to simulate a different one
// Used only for `focus(in | out)` events
simulate: function( type, elem, event ) {
var e = jQuery.extend(
new jQuery.Event(),
@ -155,27 +156,10 @@ jQuery.extend( jQuery.event, {
{
type: type,
isSimulated: true
// Previously, `originalEvent: {}` was set here, so stopPropagation call
// would not be triggered on donor event, since in our own
// jQuery.event.stopPropagation function we had a check for existence of
// originalEvent.stopPropagation method, so, consequently it would be a noop.
//
// But now, this "simulate" function is used only for events
// for which stopPropagation() is noop, so there is no need for that anymore.
//
// For the compat branch though, guard for "click" and "submit"
// events is still used, but was moved to jQuery.event.stopPropagation function
// because `originalEvent` should point to the original event for the constancy
// with other events and for more focused logic
}
);
jQuery.event.trigger( e, null, elem );
if ( e.isDefaultPrevented() ) {
event.preventDefault();
}
}
} );

@ -38,14 +38,14 @@ var
rscriptTypeMasked = /^true\/(.*)/,
rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
// Manipulating tables requires a tbody
function manipulationTarget( elem, content ) {
if ( jQuery.nodeName( elem, "table" ) &&
jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
return jQuery.nodeName( elem, "table" ) &&
jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
return elem.getElementsByTagName( "tbody" )[ 0 ] || elem;
}
return elem;
elem.getElementsByTagName( "tbody" )[ 0 ] ||
elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) :
elem;
}
// Replace/restore the type attribute of script elements for safe DOM manipulation

@ -1,20 +0,0 @@
define( [
"./var/nodeNames"
], function( nodeNames ) {
function createSafeFragment( document ) {
var list = nodeNames.split( "|" ),
safeFrag = document.createDocumentFragment();
if ( safeFrag.createElement ) {
while ( list.length ) {
safeFrag.createElement(
list.pop()
);
}
}
return safeFrag;
}
return createSafeFragment;
} );

@ -1,5 +0,0 @@
define( function() {
return "abbr|article|aside|audio|bdi|canvas|data|datalist|" +
"details|dialog|figcaption|figure|footer|header|hgroup|main|" +
"mark|meter|nav|output|picture|progress|section|summary|template|time|video";
} );

@ -1,3 +0,0 @@
define( function() {
return ( /^\s+/ );
} );

@ -134,11 +134,8 @@ jQuery.fn.extend( {
}
// Add offsetParent borders
// Subtract offsetParent scroll positions
parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ) -
offsetParent.scrollTop();
parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ) -
offsetParent.scrollLeft();
parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
}
// Subtract parent offsets and element margins

@ -1,6 +1,6 @@
define( [
"./core",
"sizzle"
"../external/sizzle/dist/sizzle"
], function( jQuery, Sizzle ) {
jQuery.find = Sizzle;

@ -1,63 +0,0 @@
define( [
"./core",
"./var/support",
"./var/document",
"./core/init", // Needed for hasOwn support test
// This is listed as a dependency for build order, but it's still optional in builds
"./core/ready"
], function( jQuery, support, document ) {
// Support: IE<9
// Iteration over object's inherited properties before its own
var i;
for ( i in jQuery( support ) ) {
break;
}
support.ownFirst = i === "0";
// Note: most support tests are defined in their respective modules.
// false until the test is run
support.inlineBlockNeedsLayout = false;
// Execute ASAP in case we need to set body.style.zoom
jQuery( function() {
// Minified: var a,b,c,d
var val, div, body, container;
body = document.getElementsByTagName( "body" )[ 0 ];
if ( !body || !body.style ) {
// Return for frameset docs that don't have a body
return;
}
// Setup
div = document.createElement( "div" );
container = document.createElement( "div" );
container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
body.appendChild( container ).appendChild( div );
if ( typeof div.style.zoom !== "undefined" ) {
// Support: IE<8
// Check if natively block-level elements act like inline-block
// elements when setting their display to 'inline' and giving
// them layout
div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
if ( val ) {
// Prevent IE 6 from affecting layout for positioned elements #11048
// Prevent IE from shrinking the body in IE 7 mode #12869
// Support: IE<8
body.style.zoom = 1;
}
}
body.removeChild( container );
} );
return support;
} );

@ -1,3 +0,0 @@
define( function() {
return [];
} );

@ -23,12 +23,12 @@
"./build/mediaelement-and-player.js",
"./build/mediaelementplayer.css"
],
"version": "2.21.2",
"_release": "2.21.2",
"version": "2.22.0",
"_release": "2.22.0",
"_resolution": {
"type": "version",
"tag": "2.21.2",
"commit": "47e85a3cb8f7d0a61d99c8d36b151b1a16b01112"
"tag": "2.22.0",
"commit": "c8ab5f4c70f3ea1655bb36ef6af20976c940f65a"
},
"_source": "https://github.com/johndyer/mediaelement.git",
"_target": "2.*",

@ -7,7 +7,7 @@ One file. Any browser. Same UI.
* License: [MIT](http://johndyer.mit-license.org/)
* Meaning: Use everywhere, keep copyright, it'd be swell if you'd link back here.
* Thanks: my employer, [Dallas Theological Seminary](http://www.dts.edu/)
* Contributors: [mikesten](https://github.com/mikesten), [sylvinus](https://github.com/sylvinus), [mattfarina](https://github.com/mattfarina), [romaninsh](https://github.com/romaninsh), [fmalk](https://github.com/fmalk), [jeffrafter](https://github.com/jeffrafter), [sompylasar](https://github.com/sompylasar), [andyfowler](https://github.com/andyfowler), [RobRoy](https://github.com/RobRoy), [jakearchibald](https://github.com/jakearchibald), [seanhellwig](https://github.com/seanhellwig), [CJ-Jackson](https://github.com/CJ-Jackson), [kaichen](https://github.com/kaichen), [gselva](https://github.com/gselva), [erktime](https://github.com/erktime), [bradleyboy](https://github.com/bradleyboy), [kristerkari](https://github.com/kristerkari), [rmhall](https://github.com/rmhall), [tantalic](https://github.com/tantalic), [madesign](http://github.com/madesign), [aschempp](http://github.com/aschempp), [gavinlynch](https://github.com/gavinlynch), [Birol2010](http://github.com/Birol2010), tons of others (see [pulls](https://github.com/johndyer/mediaelement/pulls))
* Contributors: [all contributors](https://github.com/johndyer/mediaelement/graphs/contributors)
## Installation and Usage

@ -16,7 +16,7 @@
var mejs = mejs || {};
// version number
mejs.version = '2.21.2';
mejs.version = '2.22.0';
// player number (for missing, same id attr)
@ -891,7 +891,6 @@ mejs.PluginMediaElement.prototype = {
remove: function() {
mejs.Utility.removeSwf(this.pluginElement.id);
mejs.MediaPluginBridge.unregisterPluginElement(this.pluginElement.id);
}
};
@ -1491,7 +1490,11 @@ mejs.HtmlMediaElementShim = {
}
}
else {
videoId = playback.url.substr(playback.url.lastIndexOf('=')+1);
// https://www.youtube.com/watch?v=
var videoIdMatch = playback.url.match( /[?&]v=([^&#]+)|&|#|$/ );
if ( videoIdMatch ) {
videoId = videoIdMatch[1];
}
}
youtubeSettings = {
container: container,
@ -2134,7 +2137,7 @@ if (typeof jQuery != 'undefined') {
// useful for <audio> player loops
loop: false,
// rewind to beginning when media ends
autoRewind: true,
autoRewind: true,
// resize to media dimensions
enableAutosize: true,
@ -2179,6 +2182,9 @@ if (typeof jQuery != 'undefined') {
features: ['playpause','current','progress','duration','tracks','volume','fullscreen'],
// only for dynamic
isVideo: true,
// stretching modes (auto, fill, responsive, none)
stretching: 'auto',
// turns keyboard support on and off for this instance
enableKeyboard: true,
@ -2192,7 +2198,7 @@ if (typeof jQuery != 'undefined') {
keys: [
32, // SPACE
179 // GOOGLE play/pause button
],
],
action: function(player, media) {
if (media.paused || media.ended) {
media.play();
@ -2389,7 +2395,7 @@ if (typeof jQuery != 'undefined') {
// attempt to fix iOS 3 bug
//t.$media.removeAttr('poster');
// no Issue found on iOS3 -ttroxell
// no Issue found on iOS3 -ttroxell
// override Apple's autoplay override for iPads
if (mf.isiPad && t.media.getAttribute('autoplay') !== null) {
@ -2424,12 +2430,23 @@ if (typeof jQuery != 'undefined') {
.addClass(t.$media[0].className)
.insertBefore(t.$media)
.focus(function ( e ) {
if( !t.controlsAreVisible ) {
if( !t.controlsAreVisible && !t.hasFocus ) {
t.showControls(true);
var playButton = t.container.find('.mejs-playpause-button > button');
playButton.focus();
// In versions older than IE11, the focus causes the playbar to be displayed
// if user clicks on the Play/Pause button in the control bar once it attempts
// to hide it
if (!t.hasMsNativeFullScreen) {
var playButton = t.container.find('.mejs-playpause-button > button');
playButton.focus();
}
}
});
if (t.options.stretching === 'fill' && !t.container.parent('mejs-fill-container').length) {
// outer container
t.outerContainer = t.$media.parent();
t.container.wrap('<div class="mejs-fill-container"/>');
}
// add classes for user and content
t.container.addClass(
@ -2629,7 +2646,6 @@ if (typeof jQuery != 'undefined') {
t.controlsEnabled = true;
},
// Sets up all controls and events
meReady: function(media, domNode) {
@ -2693,7 +2709,6 @@ if (typeof jQuery != 'undefined') {
t.$media.bind('touchstart', function() {
// toggle controls
if (t.controlsAreVisible) {
t.hideControls(false);
@ -2779,7 +2794,7 @@ if (typeof jQuery != 'undefined') {
// EVENTS
// FOCUS: when a video starts playing, it takes focus from other players (possibily pausing them)
media.addEventListener('play', function() {
t.media.addEventListener('play', function() {
var playerIndex;
// go through all other players
@ -2800,10 +2815,10 @@ if (typeof jQuery != 'undefined') {
if(t.options.autoRewind) {
try{
t.media.setCurrentTime(0);
// Fixing an Android stock browser bug, where "seeked" isn't fired correctly after ending the video and jumping to the beginning
window.setTimeout(function(){
$(t.container).find('.mejs-overlay-loading').parent().hide();
}, 20);
// Fixing an Android stock browser bug, where "seeked" isn't fired correctly after ending the video and jumping to the beginning
window.setTimeout(function(){
$(t.container).find('.mejs-overlay-loading').parent().hide();
}, 20);
} catch (exp) {
}
@ -2887,11 +2902,11 @@ if (typeof jQuery != 'undefined') {
});
// This is a work-around for a bug in the YouTube iFrame player, which means
// we can't use the play() API for the initial playback on iOS or Android;
// user has to start playback directly by tapping on the iFrame.
// we can't use the play() API for the initial playback on iOS or Android;
// user has to start playback directly by tapping on the iFrame.
if (t.media.pluginType == 'youtube' && ( mf.isiOS || mf.isAndroid ) ) {
t.container.find('.mejs-overlay-play').hide();
t.container.find('.mejs-poster').hide();
t.container.find('.mejs-poster').hide();
}
}
@ -2938,92 +2953,177 @@ if (typeof jQuery != 'undefined') {
if (typeof height != 'undefined') {
t.height = height;
}
// detect 100% mode - use currentStyle for IE since css() doesn't return percentages
if (t.height.toString().indexOf('%') > 0 || (t.$node.css('max-width') !== 'none' && t.$node.css('max-width') !== 't.width') || (t.$node[0].currentStyle && t.$node[0].currentStyle.maxWidth === '100%')) {
// do we have the native dimensions yet?
var nativeWidth = (function() {
// check stretching modes
switch (t.options.stretching) {
case 'fill':
// The 'fill' effect only makes sense on video; for audio we will set the dimensions
if (t.isVideo) {
if (t.media.videoWidth && t.media.videoWidth > 0) {
return t.media.videoWidth;
} else if (t.media.getAttribute('width') !== null) {
return t.media.getAttribute('width');
} else {
return t.options.defaultVideoWidth;
}
this.setFillMode();
} else {
return t.options.defaultAudioWidth;
this.setDimensions(t.width, t.height);
}
})();
var nativeHeight = (function() {
if (t.isVideo) {
if (t.media.videoHeight && t.media.videoHeight > 0) {
return t.media.videoHeight;
} else if (t.media.getAttribute('height') !== null) {
return t.media.getAttribute('height');
} else {
return t.options.defaultVideoHeight;
}
break;
case 'responsive':
this.setResponsiveMode();
break;
case 'none':
this.setDimensions(t.width, t.height);
break;
// This is the 'auto' mode
default:
if (this.hasFluidMode() === true) {
this.setResponsiveMode();
} else {
return t.options.defaultAudioHeight;
this.setDimensions(t.width, t.height);
}
})();
var
parentWidth = t.container.parent().closest(':visible').width(),
parentHeight = t.container.parent().closest(':visible').height(),
newHeight = t.isVideo || !t.options.autosizeProgress ? parseInt(parentWidth * nativeHeight/nativeWidth, 10) : nativeHeight;
// When we use percent, the newHeight can't be calculated so we get the container height
if (isNaN(newHeight)) {
newHeight = parentHeight;
}
if (t.container.parent().length > 0 && t.container.parent()[0].tagName.toLowerCase() === 'body') { // && t.container.siblings().count == 0) {
parentWidth = $(window).width();
newHeight = $(window).height();
break;
}
},
hasFluidMode: function() {
var t = this;
// detect 100% mode - use currentStyle for IE since css() doesn't return percentages
return (t.height.toString().indexOf('%') > 0 || (t.$node.css('max-width') !== 'none' && t.$node.css('max-width') !== 't.width') || (t.$node[0].currentStyle && t.$node[0].currentStyle.maxWidth === '100%'));
},
setResponsiveMode: function() {
var t = this;
// do we have the native dimensions yet?
var nativeWidth = (function() {
if (t.isVideo) {
if (t.media.videoWidth && t.media.videoWidth > 0) {
return t.media.videoWidth;
} else if (t.media.getAttribute('width') !== null) {
return t.media.getAttribute('width');
} else {
return t.options.defaultVideoWidth;
}
} else {
return t.options.defaultAudioWidth;
}
if ( newHeight && parentWidth ) {
// set outer container size
t.container
.width(parentWidth)
.height(newHeight);
// set native <video> or <audio> and shims
t.$media.add(t.container.find('.mejs-shim'))
.width('100%')
.height('100%');
// if shim is ready, send the size to the embeded plugin
if (t.isVideo) {
if (t.media.setVideoSize) {
t.media.setVideoSize(parentWidth, newHeight);
}
})();
var nativeHeight = (function() {
if (t.isVideo) {
if (t.media.videoHeight && t.media.videoHeight > 0) {
return t.media.videoHeight;
} else if (t.media.getAttribute('height') !== null) {
return t.media.getAttribute('height');
} else {
return t.options.defaultVideoHeight;
}
// set the layers
t.layers.children('.mejs-layer')
.width('100%')
.height('100%');
} else {
return t.options.defaultAudioHeight;
}
} else {
})();
var parentWidth = t.container.parent().closest(':visible').width(),
parentHeight = t.container.parent().closest(':visible').height(),
newHeight = t.isVideo || !t.options.autosizeProgress ? parseInt(parentWidth * nativeHeight/nativeWidth, 10) : nativeHeight;
// When we use percent, the newHeight can't be calculated so we get the container height
if (isNaN(newHeight) || ( parentHeight !== 0 && newHeight > parentHeight && parentHeight > nativeHeight)) {
newHeight = parentHeight;
}
if (t.container.parent().length > 0 && t.container.parent()[0].tagName.toLowerCase() === 'body') { // && t.container.siblings().count == 0) {
parentWidth = $(window).width();
newHeight = $(window).height();
}
if ( newHeight && parentWidth ) {
// set outer container size
t.container
.width(t.width)
.height(t.height);
.width(parentWidth)
.height(newHeight);
// set native <video> or <audio> and shims
t.$media.add(t.container.find('.mejs-shim'))
.width('100%')
.height('100%');
// if shim is ready, send the size to the embeded plugin
if (t.isVideo) {
if (t.media.setVideoSize) {
t.media.setVideoSize(parentWidth, newHeight);
}
}
// set the layers
t.layers.children('.mejs-layer')
.width(t.width)
.height(t.height);
.width('100%')
.height('100%');
}
},
setFillMode: function() {
var t = this,
parent = t.outerContainer;
if (!parent.width()) {
parent.height(t.$media.width());
}
if (!parent.height()) {
parent.height(t.$media.height());
}
var parentWidth = parent.width(),
parentHeight = parent.height();
t.setDimensions('100%', '100%');
// This prevents an issue when displaying poster
t.container.find('.mejs-poster img').css('display', 'block');
targetElement = t.container.find('object, embed, iframe, video');
// calculate new width and height
var initHeight = t.height,
initWidth = t.width,
// scale to the target width
scaleX1 = parentWidth,
scaleY1 = (initHeight * parentWidth) / initWidth,
// scale to the target height
scaleX2 = (initWidth * parentHeight) / initHeight,
scaleY2 = parentHeight,
// now figure out which one we should use
bScaleOnWidth = !(scaleX2 > parentWidth),
finalWidth = bScaleOnWidth ? Math.floor(scaleX1) : Math.floor(scaleX2),
finalHeight = bScaleOnWidth ? Math.floor(scaleY1) : Math.floor(scaleY2);
if (bScaleOnWidth) {
targetElement.height(finalHeight).width(parentWidth);
if (t.media.setVideoSize) {
t.media.setVideoSize(parentWidth, finalHeight);
}
} else {
targetElement.height(parentHeight).width(finalWidth);
if (t.media.setVideoSize) {
t.media.setVideoSize(finalWidth, parentHeight);
}
}
targetElement.css({
'margin-left': Math.floor((parentWidth - finalWidth) / 2),
'margin-top': 0
});
},
setDimensions: function(width, height) {
var t = this;
t.container
.width(width)
.height(height);
t.layers.children('.mejs-layer')
.width(width)
.height(height);
},
setControlsSize: function() {
@ -3041,7 +3141,6 @@ if (typeof jQuery != 'undefined') {
return;
}
// allow the size to come from custom CSS
if (t.options && !t.options.autosizeProgress) {
// Also, frontends devs can be more flexible
@ -3128,7 +3227,7 @@ if (typeof jQuery != 'undefined') {
},
buildoverlays: function(player, controls, layers, media) {
var t = this;
var t = this;
if (!player.isVideo)
return;
@ -3151,7 +3250,7 @@ if (typeof jQuery != 'undefined') {
'<div class="mejs-overlay-button"></div>'+
'</div>')
.appendTo(layers)
.bind('click', function() { // Removed 'touchstart' due issues on Samsung Android devices where a tap on bigPlay started and immediately stopped the video
.bind('click', function() { // Removed 'touchstart' due issues on Samsung Android devices where a tap on bigPlay started and immediately stopped the video
if (t.options.clickToPlayPause) {
if (media.paused) {
media.play();
@ -3212,23 +3311,23 @@ if (typeof jQuery != 'undefined') {
loading.show();
controls.find('.mejs-time-buffering').show();
// Firing the 'canplay' event after a timeout which isn't getting fired on some Android 4.1 devices (https://github.com/johndyer/mediaelement/issues/1305)
if (mejs.MediaFeatures.isAndroid) {
media.canplayTimeout = window.setTimeout(
function() {
if (document.createEvent) {
var evt = document.createEvent('HTMLEvents');
evt.initEvent('canplay', true, true);
return media.dispatchEvent(evt);
}
}, 300
);
}
// Firing the 'canplay' event after a timeout which isn't getting fired on some Android 4.1 devices (https://github.com/johndyer/mediaelement/issues/1305)
if (mejs.MediaFeatures.isAndroid) {
media.canplayTimeout = window.setTimeout(
function() {
if (document.createEvent) {
var evt = document.createEvent('HTMLEvents');
evt.initEvent('canplay', true, true);
return media.dispatchEvent(evt);
}
}, 300
);
}
}, false);
media.addEventListener('canplay',function() {
loading.hide();
controls.find('.mejs-time-buffering').hide();
clearTimeout(media.canplayTimeout); // Clear timeout inside 'loadeddata' to prevent 'canplay' to fire twice
clearTimeout(media.canplayTimeout); // Clear timeout inside 'loadeddata' to prevent 'canplay' to fire twice
}, false);
// error handling
@ -3370,7 +3469,7 @@ if (typeof jQuery != 'undefined') {
t.$media.prop('controls', true);
// detach events from the video
// TODO: detach event listeners better than this;
// also detach ONLY the events attached by this plugin!
// also detach ONLY the events attached by this plugin!
t.$node.clone().insertBefore(t.container).show();
t.$node.remove();
} else {
@ -3428,7 +3527,7 @@ if (typeof jQuery != 'undefined') {
}
mejs.MediaElementPlayer.prototype.globalBind = function(events, data, callback) {
var t = this;
var t = this;
var doc = t.node ? t.node.ownerDocument : document;
events = splitEvents(events, t.id);

File diff suppressed because one or more lines are too long

@ -16,7 +16,7 @@
var mejs = mejs || {};
// version number
mejs.version = '2.21.2';
mejs.version = '2.22.0';
// player number (for missing, same id attr)
@ -891,7 +891,6 @@ mejs.PluginMediaElement.prototype = {
remove: function() {
mejs.Utility.removeSwf(this.pluginElement.id);
mejs.MediaPluginBridge.unregisterPluginElement(this.pluginElement.id);
}
};
@ -1491,7 +1490,11 @@ mejs.HtmlMediaElementShim = {
}
}
else {
videoId = playback.url.substr(playback.url.lastIndexOf('=')+1);
// https://www.youtube.com/watch?v=
var videoIdMatch = playback.url.match( /[?&]v=([^&#]+)|&|#|$/ );
if ( videoIdMatch ) {
videoId = videoIdMatch[1];
}
}
youtubeSettings = {
container: container,

File diff suppressed because one or more lines are too long

@ -18,6 +18,15 @@
text-indent: 0;
}
.mejs-fill-container,.mejs-fill-container .mejs-container{
width: 100%;
height: 100%;
}
.mejs-fill-container{
overflow: hidden;
}
.mejs-container:focus {
outline: none;
}

@ -70,7 +70,7 @@ if (typeof jQuery != 'undefined') {
// useful for <audio> player loops
loop: false,
// rewind to beginning when media ends
autoRewind: true,
autoRewind: true,
// resize to media dimensions
enableAutosize: true,
@ -115,6 +115,9 @@ if (typeof jQuery != 'undefined') {
features: ['playpause','current','progress','duration','tracks','volume','fullscreen'],
// only for dynamic
isVideo: true,
// stretching modes (auto, fill, responsive, none)
stretching: 'auto',
// turns keyboard support on and off for this instance
enableKeyboard: true,
@ -128,7 +131,7 @@ if (typeof jQuery != 'undefined') {
keys: [
32, // SPACE
179 // GOOGLE play/pause button
],
],
action: function(player, media) {
if (media.paused || media.ended) {
media.play();
@ -325,7 +328,7 @@ if (typeof jQuery != 'undefined') {
// attempt to fix iOS 3 bug
//t.$media.removeAttr('poster');
// no Issue found on iOS3 -ttroxell
// no Issue found on iOS3 -ttroxell
// override Apple's autoplay override for iPads
if (mf.isiPad && t.media.getAttribute('autoplay') !== null) {
@ -360,12 +363,23 @@ if (typeof jQuery != 'undefined') {
.addClass(t.$media[0].className)
.insertBefore(t.$media)
.focus(function ( e ) {
if( !t.controlsAreVisible ) {
if( !t.controlsAreVisible && !t.hasFocus ) {
t.showControls(true);
var playButton = t.container.find('.mejs-playpause-button > button');
playButton.focus();
// In versions older than IE11, the focus causes the playbar to be displayed
// if user clicks on the Play/Pause button in the control bar once it attempts
// to hide it
if (!t.hasMsNativeFullScreen) {
var playButton = t.container.find('.mejs-playpause-button > button');
playButton.focus();
}
}
});
if (t.options.stretching === 'fill' && !t.container.parent('mejs-fill-container').length) {
// outer container
t.outerContainer = t.$media.parent();
t.container.wrap('<div class="mejs-fill-container"/>');
}
// add classes for user and content
t.container.addClass(
@ -565,7 +579,6 @@ if (typeof jQuery != 'undefined') {
t.controlsEnabled = true;
},
// Sets up all controls and events
meReady: function(media, domNode) {
@ -629,7 +642,6 @@ if (typeof jQuery != 'undefined') {
t.$media.bind('touchstart', function() {
// toggle controls
if (t.controlsAreVisible) {
t.hideControls(false);
@ -715,7 +727,7 @@ if (typeof jQuery != 'undefined') {
// EVENTS
// FOCUS: when a video starts playing, it takes focus from other players (possibily pausing them)
media.addEventListener('play', function() {
t.media.addEventListener('play', function() {
var playerIndex;
// go through all other players
@ -736,10 +748,10 @@ if (typeof jQuery != 'undefined') {
if(t.options.autoRewind) {
try{
t.media.setCurrentTime(0);
// Fixing an Android stock browser bug, where "seeked" isn't fired correctly after ending the video and jumping to the beginning
window.setTimeout(function(){
$(t.container).find('.mejs-overlay-loading').parent().hide();
}, 20);
// Fixing an Android stock browser bug, where "seeked" isn't fired correctly after ending the video and jumping to the beginning
window.setTimeout(function(){
$(t.container).find('.mejs-overlay-loading').parent().hide();
}, 20);
} catch (exp) {
}
@ -823,11 +835,11 @@ if (typeof jQuery != 'undefined') {
});
// This is a work-around for a bug in the YouTube iFrame player, which means
// we can't use the play() API for the initial playback on iOS or Android;
// user has to start playback directly by tapping on the iFrame.
// we can't use the play() API for the initial playback on iOS or Android;
// user has to start playback directly by tapping on the iFrame.
if (t.media.pluginType == 'youtube' && ( mf.isiOS || mf.isAndroid ) ) {
t.container.find('.mejs-overlay-play').hide();
t.container.find('.mejs-poster').hide();
t.container.find('.mejs-poster').hide();
}
}
@ -874,92 +886,177 @@ if (typeof jQuery != 'undefined') {
if (typeof height != 'undefined') {
t.height = height;
}
// detect 100% mode - use currentStyle for IE since css() doesn't return percentages
if (t.height.toString().indexOf('%') > 0 || (t.$node.css('max-width') !== 'none' && t.$node.css('max-width') !== 't.width') || (t.$node[0].currentStyle && t.$node[0].currentStyle.maxWidth === '100%')) {
// do we have the native dimensions yet?
var nativeWidth = (function() {
// check stretching modes
switch (t.options.stretching) {
case 'fill':
// The 'fill' effect only makes sense on video; for audio we will set the dimensions
if (t.isVideo) {
if (t.media.videoWidth && t.media.videoWidth > 0) {
return t.media.videoWidth;
} else if (t.media.getAttribute('width') !== null) {
return t.media.getAttribute('width');
} else {
return t.options.defaultVideoWidth;
}
this.setFillMode();
} else {
return t.options.defaultAudioWidth;
this.setDimensions(t.width, t.height);
}
})();
var nativeHeight = (function() {
if (t.isVideo) {
if (t.media.videoHeight && t.media.videoHeight > 0) {
return t.media.videoHeight;
} else if (t.media.getAttribute('height') !== null) {
return t.media.getAttribute('height');
} else {
return t.options.defaultVideoHeight;
}
break;
case 'responsive':
this.setResponsiveMode();
break;
case 'none':
this.setDimensions(t.width, t.height);
break;
// This is the 'auto' mode
default:
if (this.hasFluidMode() === true) {
this.setResponsiveMode();
} else {
return t.options.defaultAudioHeight;
this.setDimensions(t.width, t.height);
}
})();
var
parentWidth = t.container.parent().closest(':visible').width(),
parentHeight = t.container.parent().closest(':visible').height(),
newHeight = t.isVideo || !t.options.autosizeProgress ? parseInt(parentWidth * nativeHeight/nativeWidth, 10) : nativeHeight;
// When we use percent, the newHeight can't be calculated so we get the container height
if (isNaN(newHeight)) {
newHeight = parentHeight;
}
if (t.container.parent().length > 0 && t.container.parent()[0].tagName.toLowerCase() === 'body') { // && t.container.siblings().count == 0) {
parentWidth = $(window).width();
newHeight = $(window).height();
break;
}
},
hasFluidMode: function() {
var t = this;
// detect 100% mode - use currentStyle for IE since css() doesn't return percentages
return (t.height.toString().indexOf('%') > 0 || (t.$node.css('max-width') !== 'none' && t.$node.css('max-width') !== 't.width') || (t.$node[0].currentStyle && t.$node[0].currentStyle.maxWidth === '100%'));
},
setResponsiveMode: function() {
var t = this;
// do we have the native dimensions yet?
var nativeWidth = (function() {
if (t.isVideo) {
if (t.media.videoWidth && t.media.videoWidth > 0) {
return t.media.videoWidth;
} else if (t.media.getAttribute('width') !== null) {
return t.media.getAttribute('width');
} else {
return t.options.defaultVideoWidth;
}
} else {
return t.options.defaultAudioWidth;
}
if ( newHeight && parentWidth ) {
// set outer container size
t.container
.width(parentWidth)
.height(newHeight);
// set native <video> or <audio> and shims
t.$media.add(t.container.find('.mejs-shim'))
.width('100%')
.height('100%');
// if shim is ready, send the size to the embeded plugin
if (t.isVideo) {
if (t.media.setVideoSize) {
t.media.setVideoSize(parentWidth, newHeight);
}
})();
var nativeHeight = (function() {
if (t.isVideo) {
if (t.media.videoHeight && t.media.videoHeight > 0) {
return t.media.videoHeight;
} else if (t.media.getAttribute('height') !== null) {
return t.media.getAttribute('height');
} else {
return t.options.defaultVideoHeight;
}
// set the layers
t.layers.children('.mejs-layer')
.width('100%')
.height('100%');
} else {
return t.options.defaultAudioHeight;
}
} else {
})();
var parentWidth = t.container.parent().closest(':visible').width(),
parentHeight = t.container.parent().closest(':visible').height(),
newHeight = t.isVideo || !t.options.autosizeProgress ? parseInt(parentWidth * nativeHeight/nativeWidth, 10) : nativeHeight;
// When we use percent, the newHeight can't be calculated so we get the container height
if (isNaN(newHeight) || ( parentHeight !== 0 && newHeight > parentHeight && parentHeight > nativeHeight)) {
newHeight = parentHeight;
}
if (t.container.parent().length > 0 && t.container.parent()[0].tagName.toLowerCase() === 'body') { // && t.container.siblings().count == 0) {
parentWidth = $(window).width();
newHeight = $(window).height();
}
if ( newHeight && parentWidth ) {
// set outer container size
t.container
.width(t.width)
.height(t.height);
.width(parentWidth)
.height(newHeight);
// set native <video> or <audio> and shims
t.$media.add(t.container.find('.mejs-shim'))
.width('100%')
.height('100%');
// if shim is ready, send the size to the embeded plugin
if (t.isVideo) {
if (t.media.setVideoSize) {
t.media.setVideoSize(parentWidth, newHeight);
}
}
// set the layers
t.layers.children('.mejs-layer')
.width(t.width)
.height(t.height);
.width('100%')
.height('100%');
}
},
setFillMode: function() {
var t = this,
parent = t.outerContainer;
if (!parent.width()) {
parent.height(t.$media.width());
}
if (!parent.height()) {
parent.height(t.$media.height());
}
var parentWidth = parent.width(),
parentHeight = parent.height();
t.setDimensions('100%', '100%');
// This prevents an issue when displaying poster
t.container.find('.mejs-poster img').css('display', 'block');
targetElement = t.container.find('object, embed, iframe, video');
// calculate new width and height
var initHeight = t.height,
initWidth = t.width,
// scale to the target width
scaleX1 = parentWidth,
scaleY1 = (initHeight * parentWidth) / initWidth,
// scale to the target height
scaleX2 = (initWidth * parentHeight) / initHeight,
scaleY2 = parentHeight,
// now figure out which one we should use
bScaleOnWidth = !(scaleX2 > parentWidth),
finalWidth = bScaleOnWidth ? Math.floor(scaleX1) : Math.floor(scaleX2),
finalHeight = bScaleOnWidth ? Math.floor(scaleY1) : Math.floor(scaleY2);
if (bScaleOnWidth) {
targetElement.height(finalHeight).width(parentWidth);
if (t.media.setVideoSize) {
t.media.setVideoSize(parentWidth, finalHeight);
}
} else {
targetElement.height(parentHeight).width(finalWidth);
if (t.media.setVideoSize) {
t.media.setVideoSize(finalWidth, parentHeight);
}
}
targetElement.css({
'margin-left': Math.floor((parentWidth - finalWidth) / 2),
'margin-top': 0
});
},
setDimensions: function(width, height) {
var t = this;
t.container
.width(width)
.height(height);
t.layers.children('.mejs-layer')
.width(width)
.height(height);
},
setControlsSize: function() {
@ -977,7 +1074,6 @@ if (typeof jQuery != 'undefined') {
return;
}
// allow the size to come from custom CSS
if (t.options && !t.options.autosizeProgress) {
// Also, frontends devs can be more flexible
@ -1064,7 +1160,7 @@ if (typeof jQuery != 'undefined') {
},
buildoverlays: function(player, controls, layers, media) {
var t = this;
var t = this;
if (!player.isVideo)
return;
@ -1087,7 +1183,7 @@ if (typeof jQuery != 'undefined') {
'<div class="mejs-overlay-button"></div>'+
'</div>')
.appendTo(layers)
.bind('click', function() { // Removed 'touchstart' due issues on Samsung Android devices where a tap on bigPlay started and immediately stopped the video
.bind('click', function() { // Removed 'touchstart' due issues on Samsung Android devices where a tap on bigPlay started and immediately stopped the video
if (t.options.clickToPlayPause) {
if (media.paused) {
media.play();
@ -1148,23 +1244,23 @@ if (typeof jQuery != 'undefined') {
loading.show();
controls.find('.mejs-time-buffering').show();
// Firing the 'canplay' event after a timeout which isn't getting fired on some Android 4.1 devices (https://github.com/johndyer/mediaelement/issues/1305)
if (mejs.MediaFeatures.isAndroid) {
media.canplayTimeout = window.setTimeout(
function() {
if (document.createEvent) {
var evt = document.createEvent('HTMLEvents');
evt.initEvent('canplay', true, true);
return media.dispatchEvent(evt);
}
}, 300
);
}
// Firing the 'canplay' event after a timeout which isn't getting fired on some Android 4.1 devices (https://github.com/johndyer/mediaelement/issues/1305)
if (mejs.MediaFeatures.isAndroid) {
media.canplayTimeout = window.setTimeout(
function() {
if (document.createEvent) {
var evt = document.createEvent('HTMLEvents');
evt.initEvent('canplay', true, true);
return media.dispatchEvent(evt);
}
}, 300
);
}
}, false);
media.addEventListener('canplay',function() {
loading.hide();
controls.find('.mejs-time-buffering').hide();
clearTimeout(media.canplayTimeout); // Clear timeout inside 'loadeddata' to prevent 'canplay' to fire twice
clearTimeout(media.canplayTimeout); // Clear timeout inside 'loadeddata' to prevent 'canplay' to fire twice
}, false);
// error handling
@ -1306,7 +1402,7 @@ if (typeof jQuery != 'undefined') {
t.$media.prop('controls', true);
// detach events from the video
// TODO: detach event listeners better than this;
// also detach ONLY the events attached by this plugin!
// also detach ONLY the events attached by this plugin!
t.$node.clone().insertBefore(t.container).show();
t.$node.remove();
} else {
@ -1364,7 +1460,7 @@ if (typeof jQuery != 'undefined') {
}
mejs.MediaElementPlayer.prototype.globalBind = function(events, data, callback) {
var t = this;
var t = this;
var doc = t.node ? t.node.ownerDocument : document;
events = splitEvents(events, t.id);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,5 +1,15 @@
### Version History
*2.22.0 (2016/07/17)*
* Introduce new stretching models (stretching: 'fill','responsive') (https://github.com/johndyer/mediaelement/pull/1760) @ron666
* Fix for IE9-10 fullscreen control hover issues (https://github.com/johndyer/mediaelement/pull/1760) @ron666
* Update Flash HLS to v0.4.4.21 (https://github.com/johndyer/mediaelement/pull/1762) @ale-grosselle
* Update Flash HLS to accept audio (https://github.com/johndyer/mediaelement/pull/1763) @ale-grosselle
* Updated Korean translation (#1743) @Jinkwon
* Improve video ID parsing for YouTube URLs (https://github.com/johndyer/mediaelement/pull/1774) @ocean90
* Removed extrainous call to removePlugin @johndyer
*2.21.2 (2016/05/08)*
* Fixed IE8 compatibility with new security update

@ -1,6 +1,6 @@
{
"name": "webcamjs",
"version": "1.0.9",
"version": "1.0.10",
"homepage": "https://github.com/jhuckaby/webcamjs",
"authors": [
"Joseph Huckaby <jhuckaby@gmail.com>"
@ -21,11 +21,11 @@
"demos",
"flash"
],
"_release": "1.0.9",
"_release": "1.0.10",
"_resolution": {
"type": "version",
"tag": "v1.0.9",
"commit": "95609edd8390da09e3cf808ab2b48d7996a155bb"
"tag": "v1.0.10",
"commit": "ce37c5f028c18a8a66ce1d031069ea613b061eed"
},
"_source": "https://github.com/jhuckaby/webcamjs.git",
"_target": "1.0.*",

@ -109,6 +109,7 @@ If you want to override the default settings, just call `Webcam.set()` and pass
| `fps` | 30 | Set the desired fps (frames per second) capture rate. |
| `swfURL` | "./webcam.swf" | Set an alternate location for the Adobe Flash fallback SWF file
| `flashNotDetectedText` | "ERROR: No Adobe Flash Player detected. Webcam.js relies on Flash for browsers that do not support getUserMedia (like yours)." | text/html for flash player not detected.
| `unfreeze_snap` | true | Whether to unfreeze the camera after snap (defaults to true)
Here is an example of overriding some parameters. Remember to call this *before* you attach the viewer.
```javascript

@ -1,6 +1,6 @@
{
"name": "webcamjs",
"version": "1.0.9",
"version": "1.0.10",
"homepage": "https://github.com/jhuckaby/webcamjs",
"authors": [
"Joseph Huckaby <jhuckaby@gmail.com>"

@ -1,6 +1,6 @@
{
"name": "webcamjs",
"version": "1.0.9",
"version": "1.0.10",
"description": "HTML5 Webcam Image Capture Library with Flash Fallback",
"author": "Joseph Huckaby <jhuckaby@gmail.com>",
"homepage": "https://github.com/jhuckaby/webcamjs",

@ -1,4 +1,4 @@
// WebcamJS v1.0.9
// WebcamJS v1.0.10
// Webcam library for capturing JPEG/PNG images in JavaScript
// Attempts getUserMedia, falls back to Flash
// Author: Joseph Huckaby: http://github.com/jhuckaby
@ -34,7 +34,7 @@ FlashError.prototype = new IntermediateInheritor();
WebcamError.prototype = new IntermediateInheritor();
var Webcam = {
version: '1.0.8',
version: '1.0.10',
// globals
protocol: location.protocol.match(/https/i) ? 'https' : 'http',
@ -55,7 +55,8 @@ var Webcam = {
upload_name: 'webcam', // name of file in upload post data
constraints: null, // custom user media constraints,
swfURL: '', // URI to webcam.swf movie (defaults to the js location)
flashNotDetectedText: 'ERROR: No Adobe Flash Player detected. Webcam.js relies on Flash for browsers that do not support getUserMedia (like yours).'
flashNotDetectedText: 'ERROR: No Adobe Flash Player detected. Webcam.js relies on Flash for browsers that do not support getUserMedia (like yours).',
unfreeze_snap: true // Whether to unfreeze the camera after snap (defaults to true)
},
errors: {
@ -551,7 +552,7 @@ var Webcam = {
);
// remove preview
this.unfreeze();
if (this.params.unfreeze_snap) this.unfreeze();
},
snap: function(user_callback, user_canvas) {

File diff suppressed because one or more lines are too long

@ -150,8 +150,11 @@ switch ($action) {
$extraField = new ExtraField('skill');
$arrayVals = $extraField->get_handler_field_info_by_tags('tags');
$tags = [];
foreach ($arrayVals['options'] as $value) {
$tags[] = $value;
if (isset($arrayVals['options'])) {
foreach ($arrayVals['options'] as $value) {
$tags[] = $value;
}
}
/* View */

@ -2,6 +2,7 @@
/* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\SessionRelCourseRelUser;
use \ExtraField as ExtraFieldModel;
use Chamilo\CoreBundle\Entity\ExtraField;
/**
@ -411,7 +412,7 @@ class SessionManager
$where .=" AND s.id_coach = $user_id ";
}
$extra_field = new ExtraField('session');
$extra_field = new ExtraFieldModel('session');
$conditions = $extra_field->parseConditions($options);
$inject_joins = $conditions['inject_joins'];
$where .= $conditions['where'];
@ -2349,7 +2350,7 @@ class SessionManager
*/
public static function create_session_extra_field($variable, $fieldType, $displayText)
{
$extraField = new ExtraField('session');
$extraField = new ExtraFieldModel('session');
$params = [
'variable' => $variable,
'field_type' => $fieldType,
@ -6148,7 +6149,7 @@ class SessionManager
$whereFieldIds = 'field_id IN ( ' . $whereParams . ' )';
}
// Get session fields
$extraField = new ExtraField('session');
$extraField = new ExtraFieldModel('session');
$questionMarks = substr(str_repeat('?, ', count($fieldsArray)), 0, -2);
$fieldsList = $extraField->get_all(array(
' variable IN ( ' . $questionMarks . ' )' => $fieldsArray,
@ -6461,7 +6462,7 @@ class SessionManager
$variables[] = Database::escape_string($sessionExtraField);
}
$sessionExtraField = new ExtraField('session');
$sessionExtraField = new ExtraFieldModel('session');
$fieldList = $sessionExtraField->get_all(array(
"variable IN ( " . implode(", ", $variablePlaceHolders) . " ) " => $variables,
));
@ -6904,7 +6905,7 @@ class SessionManager
);
// Extra fields
$extra_field = new ExtraField('session');
$extra_field = new ExtraFieldModel('session');
$extra = $extra_field->addElements($form, $sessionId);
$form->addElement('html', '</div>');
@ -7075,7 +7076,7 @@ class SessionManager
}
// Inject extra session fields
$session_field = new ExtraField('session');
$session_field = new ExtraFieldModel('session');
$rules = $session_field->getRules($columns, $column_model);
$column_model[] = array('name'=>'actions', 'index'=>'actions', 'width'=>'80', 'align'=>'left','formatter'=>'action_formatter','sortable'=>'false', 'search' => 'false');
@ -7189,7 +7190,7 @@ class SessionManager
$extra_fields_info = array();
//for now only sessions
$extra_field = new ExtraField('session');
$extra_field = new ExtraFieldModel('session');
$double_fields = array();
$extra_field_option = new ExtraFieldOption('session');

@ -243,13 +243,13 @@ $(window).resize(function() {
$(document).scroll(function() {
var valor = $('body').outerHeight() - 700;
if ($(this).scrollTop() > 100) {
$('.bottom_actions').addClass('bottom_actions_fixed');
} else {
$('.bottom_actions').removeClass('bottom_actions_fixed');
}
if ($(this).scrollTop() > valor) {
$('.bottom_actions').removeClass('bottom_actions_fixed');
} else {

@ -11,7 +11,7 @@
</head>
<body dir="{{ text_direction }}" class="{{ section_name }} {{ login_class }}">
<noscript>{{ "NoJavascript"|get_lang }}</noscript>
<div class="wrap">
<div class="wrap">
{% if displayCookieUsageWarning == true %}
<!-- Display Cookies validation -->
<div class="toolbar-cookie alert-warning">
@ -32,22 +32,20 @@
</form>
</div>
{% endif %}
{% include template ~ "/layout/page_header.tpl" %}
{% include template ~ "/layout/page_header.tpl" %}
<section id="content-section">
<div class="container">
{% block breadcrumb %}
{{ breadcrumb }}
{% endblock %}
{% include template ~ "/layout/course_navigation.tpl" %}
{% block body %}
{{ content }}
{% endblock %}
</div>
<div class="container">
{% block breadcrumb %}
{{ breadcrumb }}
{% endblock %}
{% include template ~ "/layout/course_navigation.tpl" %}
{% block body %}
{{ content }}
{% endblock %}
</div>
</section>
{% if show_sniff == 1 %}
{% include template ~ "/layout/sniff.tpl" %}
{% endif %}
{% include template ~ "/layout/page_footer.tpl" %}
{% include template ~ "/layout/page_footer.tpl" %}
</div>
</body>
</html>

@ -85,7 +85,7 @@
</div>
</div>
</div>
{% include template ~ '/layout/footer.js.tpl' %}
{{ execution_stats }}

@ -1,134 +0,0 @@
{% raw %}
<script LANGUAGE="JavaScript">
var nav ="";
var screen_size_w;
var screen_size_h;
var java="";
var type_mimetypes="";
var suffixes_mimetypes="";
var list_plugins="";
var check_some_activex="";
var check_some_plugins="";
var java_sun_ver="";
<!-- check Microsoft Internet Explorer -->
if (navigator.userAgent.indexOf("MSIE") != -1) { var nav="ie";}
<!-- check Screen Size -->
screen_size_w=screen.width;
screen_size_h=screen.height;
<!-- list mimetypes types, suffixes and plugins (no for IE) -->
if (nav!="ie"){
if (navigator.mimeTypes && navigator.mimeTypes.length > 0) {
for (i=0; i < navigator.mimeTypes.length; i++) {
type_mimetypes=type_mimetypes+" "+navigator.mimeTypes[i].type;
suffixes_mimetypes=suffixes_mimetypes+" "+navigator.mimeTypes[i].suffixes;
if (navigator.mimeTypes[i].enabledPlugin!=null) {
list_plugins=list_plugins+" "+navigator.mimeTypes[i].enabledPlugin.name;
}
}
}
}
<!-- check some activex for IE -->
if (nav=="ie"){
//TODO:check wmediaplayer are too aggressive. Then we can assume that if there Windows, there Wmediaplayer?
var check_some_activex =
DetectActiveXObject("ShockwaveFlash.ShockwaveFlash.1", "flash_yes")+
DetectActiveXObject("QuickTime.QTElementBehavior", "quicktime_yes")+
//DetectActiveXObject("MediaPlayer.MediaPlayer.1","wmediaplayer_yes")+
DetectActiveXObject("acroPDF.PDF.1","acrobatreader_yes");
function DetectActiveXObject(ObjectName, name) {
result = false;
document.write('<SCRIPT LANGUAGE=VBScript\> \n');
document.write('on error resume next \n');
document.write('result = IsObject(CreateObject("' + ObjectName + '")) \n');
document.write('</SCRIPT\> \n');
if (result) return name+' , '; else return '';
}
}
<!-- check some plugins for not IE -->
if (nav!="ie"){
if (list_plugins.indexOf("Shockwave Flash")!=-1){
check_some_plugins=check_some_plugins+', flash_yes';
}
if (list_plugins.indexOf("QuickTime")!=-1){
check_some_plugins=check_some_plugins+', quicktime_yes';
}
if (list_plugins.indexOf("Windows Media Player")!=-1){
check_some_plugins=check_some_plugins+', wmediaplayer_yes';
}
if (list_plugins.indexOf("Adobe Acrobat")!=-1){
check_some_plugins=check_some_plugins+',acrobatreader_yes';
}
}
<!-- java -->
if(navigator.javaEnabled()==true){java="java_yes";}else{java="java_no";}
<!-- check java Sun ver -->
//for not IE
if (nav!="ie"){
if (navigator.mimeTypes["application/x-java-applet"]){ java_sun_ver="javasun_yes";}
if (navigator.mimeTypes["application/x-java-applet;jpi-version=1.6.0_24"]){ java_sun_ver=java_sun_ver+" , javasun_ver_1.6_24_yes"; }//This java version 1.6.0_24 is problematic, the user should be updated
}
//for IE
if (nav=="ie"){
//1.5->end nov 2009
//TODO:extract minor version
var java_sun_ver =
DetectActiveXObject("JavaWebStart.isInstalled","javasun_yes")+
DetectActiveXObject("JavaWebStart.isInstalled.1.4.2.0","javasun_ver_1.4_yes")+
DetectActiveXObject("JavaWebStart.isInstalled.1.5.0.0","javasun_ver_1.5_yes")+
DetectActiveXObject("JavaWebStart.isInstalled.1.6.0.0","javasun_ver_1.6_yes")+
DetectActiveXObject("JavaWebStart.isInstalled.1.7.0.0","javasun_ver_1.7_yes");
function DetectActiveXObject(ObjectName, name) {
result = false;
document.write('<SCRIPT LANGUAGE=VBScript\> \n');
document.write('on error resume next \n');
document.write('result = IsObject(CreateObject("' + ObjectName + '")) \n');
document.write('</SCRIPT\> \n');
if (result) return name+' , '; else return '';
}
}
<!-- Send to server -->
function sendSniff(){
document.forms.sniff_nav_form.sniff_navigator.value="checked";
document.forms.sniff_nav_form.sniff_navigator_screen_size_w.value=screen_size_w;
document.forms.sniff_nav_form.sniff_navigator_screen_size_h.value=screen_size_h;
document.forms.sniff_nav_form.sniff_navigator_type_mimetypes.value=type_mimetypes;
document.forms.sniff_nav_form.sniff_navigator_suffixes_mimetypes.value=suffixes_mimetypes;
document.forms.sniff_nav_form.sniff_navigator_list_plugins.value=list_plugins;
document.forms.sniff_nav_form.sniff_navigator_check_some_activex.value=check_some_activex;
document.forms.sniff_nav_form.sniff_navigator_check_some_plugins.value=check_some_plugins;
document.forms.sniff_nav_form.sniff_navigator_java.value=java;
document.forms.sniff_nav_form.sniff_navigator_java_sun_ver.value=java_sun_ver;
document.sniff_nav_form.submit();
}
</script>
{% endraw %}
<form name="sniff_nav_form" method="POST">
<input type="hidden" name="sniff_navigator">
<input type="hidden" name="sniff_navigator_screen_size_w">
<input type="hidden" name="sniff_navigator_screen_size_h">
<input type="hidden" name="sniff_navigator_type_mimetypes">
<input type="hidden" name="sniff_navigator_suffixes_mimetypes">
<input type="hidden" name="sniff_navigator_list_plugins">
<input type="hidden" name="sniff_navigator_check_some_activex">
<input type="hidden" name="sniff_navigator_check_some_plugins">
<input type="hidden" name="sniff_navigator_java">
<input type="hidden" name="sniff_navigator_java_sun_ver">
</form>
{#
<script>
sendSniff();
</script>
#}

@ -1,20 +1,23 @@
<legend>
<h1>{{ "ManageSkills" | get_lang }}</h1>
</legend>
<div class="row">
<div class="col-md-3" >
<select id="tag-filter" class="form-control">
<option value="0">{{ 'PleaseSelectAChoice' | get_lang }}</option>
{% for tag in tags %}
<option value="{{ tag.id }}">{{ tag.tag }}</option>
{% endfor %}
</select>
</div>
<div class="col-md-3">
<a id="filter-button" class="btn btn-default">{{ 'FilterByTags' | get_lang }}</a>
{% if tags %}
<div class="row">
<div class="col-md-3" >
<select id="tag-filter" class="form-control">
<option value="0">{{ 'PleaseSelectAChoice' | get_lang }}</option>
{% for tag in tags %}
<option value="{{ tag.id }}">{{ tag.tag }}</option>
{% endfor %}
</select>
</div>
<div class="col-md-3">
<a id="filter-button" class="btn btn-default">{{ 'FilterByTags' | get_lang }}</a>
</div>
</div>
</div>
<br />
<br />
{% endif %}
<div class="table table-responsive">
<table class="table table-hover table-striped">
<thead>

@ -1,6 +1,7 @@
<?php
/* For licensing terms, see /license.txt*/
use \ExtraField as ExtraFieldModel;
use Chamilo\CoreBundle\Entity\ExtraField;
/**
@ -888,14 +889,14 @@ function display_extra_profile_fields_filter()
// $field_details[2] contains the type of the additional user profile field
switch ($field_details[2]) {
// text fields cannot be used as a filter
case ExtraField::FIELD_TYPE_TEXT:
case ExtraFieldModel::FIELD_TYPE_TEXT:
break;
// text area fields cannot be used as a filter
case ExtraField::FIELD_TYPE_TEXTAREA:
case ExtraFieldModel::FIELD_TYPE_TEXTAREA:
break;
case ExtraField::FIELD_TYPE_RADIO:
case ExtraField::FIELD_TYPE_SELECT:
case ExtraField::FIELD_TYPE_SELECT_MULTIPLE:
case ExtraFieldModel::FIELD_TYPE_RADIO:
case ExtraFieldModel::FIELD_TYPE_SELECT:
case ExtraFieldModel::FIELD_TYPE_SELECT_MULTIPLE:
$return .= '<optgroup label="'.$field_details[3].'">';
foreach($field_details[9] as $option_id => $option_details) {
if ($_GET['subscribe_user_filter_value'] == $field_details[0].'*'.$option_details[1]) {

@ -17,7 +17,7 @@ class Basic extends Toolbar
* @var array
*/
public $defaultPlugins = array(
'adobeair',
'adobeair',
'ajax',
'audio',
'image2',
@ -36,30 +36,30 @@ class Basic extends Toolbar
'iframe',
'iframedialog',
'indentblock',
'justify',
'language',
'lineutils',
'liststyle',
'newpage',
'oembed',
'pagebreak',
'preview',
'print',
'save',
'selectall',
'sharedspace',
'showblocks',
'smiley',
'sourcedialog',
'stylesheetparser',
'tableresize',
'templates',
'uicolor',
'video',
'widget',
'wikilink',
'wordcount',
'xml'
'justify',
'language',
'lineutils',
'liststyle',
'newpage',
'oembed',
'pagebreak',
'preview',
'print',
'save',
'selectall',
'sharedspace',
'showblocks',
'smiley',
'sourcedialog',
'stylesheetparser',
'tableresize',
'templates',
'uicolor',
'video',
'widget',
'wikilink',
'wordcount',
'xml',
);
/**
@ -202,7 +202,7 @@ class Basic extends Toolbar
return [
['Save', 'NewPage', 'Templates', '-', 'PasteFromWord'],
['Undo', 'Redo'],
['Link', 'Image', 'Video', 'Flash', 'Youtube', 'Audio', 'Table', 'Asciimath', 'Asciisvg'],
['Link', 'Image', 'Video', 'Oembed','Flash', 'Youtube', 'Audio', 'Table', 'Asciimath', 'Asciisvg'],
['BulletedList', 'NumberedList', 'HorizontalRule'],
['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'],
['Styles', 'Format', 'Font', 'FontSize', 'Bold', 'Italic', 'Underline', 'TextColor', 'BGColor', 'Source'],

Loading…
Cancel
Save