@atlassian/aui
Version:
Atlassian User Interface Framework
123 lines (103 loc) • 3.91 kB
JavaScript
(function (global, factory) {
if (typeof define === "function" && define.amd) {
define(['module', 'exports', './jquery', './internal/deprecation', './internal/log', './internal/globalize'], factory);
} else if (typeof exports !== "undefined") {
factory(module, exports, require('./jquery'), require('./internal/deprecation'), require('./internal/log'), require('./internal/globalize'));
} else {
var mod = {
exports: {}
};
factory(mod, mod.exports, global.jquery, global.deprecation, global.log, global.globalize);
global.binder = mod.exports;
}
})(this, function (module, exports, _jquery, _deprecation, _log, _globalize) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _jquery2 = _interopRequireDefault(_jquery);
var deprecate = _interopRequireWildcard(_deprecation);
var logger = _interopRequireWildcard(_log);
var _globalize2 = _interopRequireDefault(_globalize);
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule) {
return obj;
} else {
var newObj = {};
if (obj != null) {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
}
}
newObj.default = obj;
return newObj;
}
}
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
/**
* Support for markup based binder components. Binder components must be objects with the following "interface":
*
* <pre>
* {
* selector: "input.foo",
* run: function(element) {
* //do stuff on given element
* }
* }
* </pre>
*/
var Binder = function () {
'use strict';
var binders = {};
return {
/**
* Runs all the binder components for the given scope, or the document body if none specified.
*
* @method runBinders
* @param scope {Element} element scope to run the binders in
*/
runBinders: function runBinders(scope) {
if (_jquery2.default.isEmptyObject(binders)) {
logger.log('No binders to run');
return;
}
scope = scope || document.body;
(0, _jquery2.default)('*:not(link, script)', scope).each(function (i, element) {
var $element = (0, _jquery2.default)(element);
_jquery2.default.each(binders, function (id, binder) {
if (!$element.data(id) && $element.is(binder.selector)) {
logger.log('Running binder component: ' + id + ' on element ' + element);
$element.data(id, true); // so we don't bind to the same element again later
binder.run(element);
}
});
});
},
/**
* Register a binder component with the given id.
* @method register
*/
register: function register(id, binder) {
binders[id] = binder;
},
/**
* Unregister a binder component for the given id.
* @method unregister
*/
unregister: function unregister(id) {
binders[id] = null;
}
};
}();
Binder = deprecate.construct(Binder, 'Binder', {
sinceVersion: '5.8.0'
});
(0, _globalize2.default)('Binder', Binder);
exports.default = Binder;
module.exports = exports['default'];
});
//# sourceMappingURL=binder.js.map