awesome-cordova-plugins/dist/plugins/plugin.js

61 lines
2.1 KiB
JavaScript
Raw Normal View History

2015-11-29 08:26:55 +08:00
var util_1 = require('../util');
exports.wrap = function (pluginObj, methodName, opts) {
if (opts === void 0) { opts = {}; }
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i - 0] = arguments[_i];
}
return new Promise(function (resolve, reject) {
2015-11-30 06:30:15 +08:00
if (!window.cordova) {
console.warn('Native: tried calling ' + pluginObj.name + '.' + methodName + ', but Cordova is not available. Make sure to include cordova.js or run in a device/simulator');
reject({
error: 'cordova_not_available'
});
}
2015-11-29 08:26:55 +08:00
if (typeof opts.successIndex !== 'undefined') {
args[opts.successIndex] = resolve;
}
if (typeof opts.errorIndex !== 'undefined') {
args[opts.errorIndex] = reject;
}
var pluginInstance = util_1.get(window, pluginObj.pluginRef);
if (!pluginInstance) {
console.warn('Native: tried calling ' + pluginObj.name + '.' + methodName + ', but the ' + pluginObj.name + ' plugin is not installed. Install the ' + pluginObj.plugin + ' plugin');
reject({
error: 'plugin_not_installed'
});
return;
}
util_1.get(window, pluginObj.pluginRef)[methodName].apply(pluginObj, args);
});
};
};
var PluginDecotor = (function () {
function PluginDecotor(cls, config) {
this.cls = cls;
this.config = config;
}
return PluginDecotor;
})();
function Plugin(config) {
return function (cls) {
// Add these fields to the class
for (var k in config) {
cls[k] = config[k];
}
return cls;
};
}
exports.Plugin = Plugin;
function Cordova(opts) {
if (opts === void 0) { opts = {}; }
return function (obj, methodName) {
if (opts.promise) {
console.log('TODO: Promise');
}
2015-11-29 08:36:38 +08:00
obj[methodName] = exports.wrap(obj, methodName, opts).bind(obj);
2015-11-29 08:26:55 +08:00
};
}
exports.Cordova = Cordova;