blazy-8.x-2.x-dev/js/src/base/blazy.base.js
js/src/base/blazy.base.js
/**
* @file
* Provides base methods to bridge drupal-related codes with generic ones.
*
* @todo watch out for Drupal namespace removal, likely becomes under window.
*/
(function ($, Drupal, _win) {
'use strict';
$.debounce = function (cb, arg, scope, delay) {
var _cb = function () {
cb.call(scope, arg);
};
if (scope) {
return Drupal.debounce(_cb, delay || 201, true);
}
return Drupal.debounce.call(this, cb);
};
$.matchMedia = function (width, minmax) {
if (_win.matchMedia) {
if ($.isUnd(minmax)) {
minmax = 'max';
}
var mq = _win.matchMedia('(' + minmax + '-device-width: ' + width + ')');
return mq.matches;
}
return false;
};
function real(el) {
return el.target || el;
}
function is(el, name) {
return $.hasClass(real(el), name);
}
$.isBg = function (el, opts) {
return is(el, opts && opts.bgClass || 'b-bg');
};
$.isBlur = function (el) {
return is(el, 'b-blur');
};
$.isGrid = function (el) {
return $.isElm($.closest(real(el), '.grid'));
};
$.isHtml = function (el) {
return is(el, 'b-html');
};
$.image = {
alt: function (el, fallback) {
var img = $.find(el, 'img:not(.b-blur)');
var alt = $.attr(img, 'alt');
fallback = fallback || 'Video preview';
// If using BG.
if (!alt) {
var cn = $.find(el, '.media');
alt = $.attr(cn, 'title');
}
// If nobody put the important info, add a fallback.
return alt ? Drupal.checkPlain(alt) : Drupal.t(fallback);
},
ratio: function (data) {
var width = $.toInt(data.width, 640);
var height = $.toInt(data.height, 360);
return ((height / width) * 100).toFixed(2);
},
// https://stackoverflow.com/questions/3971841
scale: function (srcWidth, srcHeight, maxWidth, maxHeight) {
var ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight);
return {
width: srcWidth * ratio,
height: srcHeight * ratio,
ratio: ratio
};
},
dimension: function (w, h) {
return {
width: w,
height: h
};
},
hack: function (a, b) {
return {
paddingBottom: a,
height: b
};
}
};
})(dBlazy, Drupal, this);
