%PDF- %PDF-
| Direktori : /www/varak.net/wiki.varak.net/extensions/MobileFrontend/src/mobile.startup/ |
| Current File : //www/varak.net/wiki.varak.net/extensions/MobileFrontend/src/mobile.startup/util.js |
/* global $ */
/**
* Utility library
* @class util
* @singleton
*/
module.exports = {
/**
* Escape a string for use as a css selector
* @memberof util
* @instance
* @param {string} selector
* @return {string}
*/
escapeSelector: function ( selector ) {
return $.escapeSelector( selector );
},
/**
* Wrapper class for the $.grep
* @memberof util
* @instance
* @return {jQuery.Deferred}
*/
grep: function () {
return $.grep.apply( $, arguments );
},
/**
* Run method when document is ready.
* @memberof util
* @instance
* @param {Function} fn
* @return {jQuery.Object}
*/
docReady: function ( fn ) {
return $( fn );
},
/**
* Wrapper class for the $.when
* @memberof util
* @instance
* @return {jQuery.Deferred}
*/
when: function () {
return $.when.apply( $, arguments );
},
/**
* Wrapper class for the Deferred method
* @memberof util
* @instance
* @return {jQuery.Deferred}
*/
Deferred: function () {
var d = $.Deferred(),
warning = 'Use Promise compatible methods `then` and `catch` instead.';
/* eslint-disable no-restricted-properties */
mw.log.deprecate( d, 'fail', d.fail, warning );
mw.log.deprecate( d, 'always', d.always, warning );
mw.log.deprecate( d, 'done', d.done, warning );
/* eslint-enable no-restricted-properties */
return d;
},
/**
* Adds a class to the document
* @memberof util
* @instance
* @return {jQuery.Object} element representing the documentElement
*/
getDocument: function () {
return $( document.documentElement );
},
/**
* Get the window object
* @memberof util
* @instance
* @return {jQuery.Object}
*/
getWindow: function () {
return $( window );
},
/**
* Given some html, create new element(s).
* Unlike jQuery.parseHTML this will return a jQuery object
* not an array.
* @memberof util
* @instance
* @param {string} html
* @param {Element} [ctx] Document element to serve as the context
* in which the HTML fragment will be created
* @return {jQuery.Object}
*/
parseHTML: function ( html, ctx ) {
return $( $.parseHTML( html, ctx ) );
},
/**
* wrapper for jQuery util function to check if something is numeric
* @memberof util
* @instance
* @return {boolean}
*/
isNumeric: function () {
return $.isNumeric.apply( $, arguments );
},
/**
* Wrapper for jQuery.extend method. In future this can be bound to Object.assign
* when support allows.
* @memberof util
* @instance
* @return {Object}
*/
extend: function () {
return $.extend.apply( $, arguments );
},
/**
* Escape dots and colons in a hash, jQuery doesn't like them because they
* look like CSS classes and pseudoclasses. See
* http://bugs.jquery.com/ticket/5241
* http://stackoverflow.com/questions/350292/how-do-i-get-jquery-to-select-elements-with-a-period-in-their-id
* @memberof util
* @instance
* @param {string} hash A hash to escape
* @return {string}
*/
escapeHash: function ( hash ) {
return hash.replace( /(:|\.)/g, '\\$1' );
},
/**
* Heuristic for determining whether an Event should be handled by
* MobileFrontend or allowed to bubble to the browser.
* @memberof util
* @instance
* @param {Event} ev
* @return {boolean} True if event is modified with control, alt, meta, or
* shift keys and should probably be handled by the
* browser.
*
* todo: move this function to a ClickUtil file once bundling and code
* splitting is supported.
*/
isModifiedEvent: function ( ev ) {
return ev.altKey || ev.ctrlKey || ev.metaKey || ev.shiftKey;
},
/**
* Pipe event emitted by source through proxy. Subscribers to proxy will receive the event as
* though proxy was the originator.
*
* @param {OO.EventEmitter} src
* @param {OO.EventEmitter} proxy
* @param {string} event Event type to listen for.
* @param {any[]} [args] Arguments to pass to
* subscribers, will be prepended to emitted arguments.
* @return {OO.EventEmitter} The source.
*/
repeatEvent: function ( src, proxy, event, args ) {
return src.on( event, function ( args ) { return proxy.emit( event, args ); }, args );
}
};