Commit fe6a9ca7 authored by JC Brand's avatar JC Brand

Merge converse-api and converse-core

Otherwise `require('converse-core')` can be called, exposing the inner converse
object.
parent d3bdcd86
......@@ -50,11 +50,10 @@ require.config({
"utils": "src/utils",
// Converse
"converse-api": "src/converse-api",
"converse-core": "src/converse-core",
"converse-bookmarks": "src/converse-bookmarks",
"converse-chatview": "src/converse-chatview",
"converse-controlbox": "src/converse-controlbox",
"converse-core": "src/converse-core",
"converse-dragresize": "src/converse-dragresize",
"converse-headline": "src/converse-headline",
"converse-mam": "src/converse-mam",
......
......@@ -53,8 +53,7 @@ Below is an example code that wraps converse.js as an angular.js service.
// Here we define the core components of converse.js that will be
// loaded and used.
define("converse", [
"converse-api",
define(["converse-core",
// START: Removable components
// --------------------
// Any of the following components may be removed if they're not needed.
......
......@@ -36,8 +36,6 @@ Separate code/data into public and private parts
1. Encapsulate Converse.js's data structures into a private closured object (named ``_converse``).
2. Split the API into public and private parts.
TODO: Merge ``converse-core.js`` and ``converse-api.js``, so that the ``_converse`` object can't be accessed outside of a plugin.
Restrict access to private code/data
------------------------------------
......
......@@ -55,7 +55,7 @@
</body>
<script>
require(['converse-api', 'converse-muc-embedded'], function (converse) {
require(['converse-core', 'converse-muc-embedded'], function (converse) {
converse.initialize({
allow_logout: false, // No point in logging out when we have auto_login as true.
allow_muc_invitations: false, // Doesn't make sense to allow because only
......
(function (root, factory) {
define([
"jquery",
"converse-api",
"converse-core",
"utils",
"mock",
"test_utils"
......
(function (root, factory) {
define([
"utils",
"converse-api",
"converse-core",
"mock",
"test_utils"
], factory);
......
(function (root, factory) {
define(["mock", "converse-api", "test_utils", "utils" ], factory);
define(["mock", "converse-core", "test_utils", "utils" ], factory);
} (this, function (mock, converse, test_utils, utils) {
var _ = converse.env._;
var $ = converse.env.jQuery;
......
(function (root, factory) {
define(["mock", "converse-api", "test_utils"], factory);
define(["mock", "converse-core", "test_utils"], factory);
} (this, function (mock, converse, test_utils) {
var _ = converse.env._;
var $ = converse.env.jQuery;
......
(function (root, factory) {
define([
"converse-api",
"converse-core",
"mock",
"test_utils"], factory);
} (this, function (converse, mock, test_utils) {
......
(function (root, factory) {
define([
"jquery",
"converse-api",
"converse-core",
"mock",
"test_utils"], factory);
} (this, function ($, converse, mock, test_utils) {
......
(function (root, factory) {
define(["mock", "converse-api", "test_utils"], factory);
define(["mock", "converse-core", "test_utils"], factory);
} (this, function (mock, converse, test_utils) {
return describe("The _converse Event Emitter", function() {
......
(function (root, factory) {
define([
"jquery",
"converse-api",
"converse-core",
"utils",
"mock",
"test_utils"
......
(function (root, factory) {
define(["mock", "converse-api", "test_utils"], factory);
define(["mock", "converse-core", "test_utils"], factory);
} (this, function (mock, converse, test_utils) {
"use strict";
var _ = converse.env._;
......
(function (root, factory) {
define(["mock", "converse-api", "test_utils"], factory);
define(["mock", "converse-core", "test_utils"], factory);
} (this, function (mock, converse, test_utils) {
var _ = converse.env._;
var $msg = converse.env.$msg;
......
(function (root, factory) {
define(["mock", "converse-api", "test_utils"], factory);
define(["mock", "converse-core", "test_utils"], factory);
} (this, function (mock, converse, test_utils) {
"use strict";
var $msg = converse.env.$msg;
......
(function (root, factory) {
define(["mock", "converse-api", "test_utils"], factory);
define(["mock", "converse-core", "test_utils"], factory);
} (this, function (mock, converse, test_utils) {
var $ = converse.env.jQuery;
var Strophe = converse.env.Strophe;
......
(function (root, factory) {
define(["mock", "converse-api", "test_utils", "converse-ping"], factory);
define(["mock", "converse-core", "test_utils", "converse-ping"], factory);
} (this, function (mock, test_utils) {
"use strict";
......
(function (root, factory) {
define(["mock", "converse-api", "test_utils"], factory);
define(["mock", "converse-core", "test_utils"], factory);
} (this, function (mock, converse, test_utils) {
var _ = converse.env._;
var $iq = converse.env.$iq;
......
(function (root, factory) {
define([
"jquery",
"converse-api",
"converse-core",
"mock",
"test_utils"], factory);
} (this, function ($, converse, mock, test_utils) {
......
(function (root, factory) {
define(["mock", "converse-api", "test_utils"], factory);
define(["mock", "converse-core", "test_utils"], factory);
} (this, function (mock, converse, test_utils) {
var $ = converse.env.jQuery;
var Strophe = converse.env.Strophe;
......
(function (root, factory) {
define(["converse-api"], factory);
define(["converse-core"], factory);
} (this, function (converse) {
var utils = converse.env.utils,
_ = converse.env._;
......
(function (root, factory) {
define(["mock", "converse-api", "test_utils"], factory);
define(["mock", "converse-core", "test_utils"], factory);
} (this, function (mock, converse, test_utils) {
var $ = converse.env.jQuery;
......
// Converse.js (A browser based XMPP chat client)
// http://conversejs.org
//
// Copyright (c) 2012-2017, Jan-Carel Brand <jc@opkode.com>
// Licensed under the Mozilla Public License (MPLv2)
//
/*global define */
(function (root, factory) {
define(["jquery",
"lodash",
"moment_with_locales",
"strophe",
"utils",
"converse-core"
],
factory);
}(this, function ($, _, moment, strophe, utils, _converse) {
var Strophe = strophe.Strophe;
// API methods only available to plugins
_converse.api = {
'connection': {
'connected': function () {
return _converse.connection && _converse.connection.connected || false;
},
'disconnect': function () {
_converse.connection.disconnect();
},
},
'user': {
'jid': function () {
return _converse.connection.jid;
},
'login': function (credentials) {
_converse.initConnection();
_converse.logIn(credentials);
},
'logout': function () {
_converse.logOut();
},
'status': {
'get': function () {
return _converse.xmppstatus.get('status');
},
'set': function (value, message) {
var data = {'status': value};
if (!_.includes(_.keys(_converse.STATUS_WEIGHTS), value)) {
throw new Error('Invalid availability value. See https://xmpp.org/rfcs/rfc3921.html#rfc.section.2.2.2.1');
}
if (_.isString(message)) {
data.status_message = message;
}
_converse.xmppstatus.sendPresence(value);
_converse.xmppstatus.save(data);
},
'message': {
'get': function () {
return _converse.xmppstatus.get('status_message');
},
'set': function (stat) {
_converse.xmppstatus.save({'status_message': stat});
}
}
},
},
'settings': {
'get': function (key) {
if (_.includes(_.keys(_converse.default_settings), key)) {
return _converse[key];
}
},
'set': function (key, val) {
var o = {};
if (_.isObject(key)) {
_.assignIn(_converse, _.pick(key, _.keys(_converse.default_settings)));
} else if (_.isString("string")) {
o[key] = val;
_.assignIn(_converse, _.pick(o, _.keys(_converse.default_settings)));
}
}
},
'contacts': {
'get': function (jids) {
var _transform = function (jid) {
var contact = _converse.roster.get(Strophe.getBareJidFromJid(jid));
if (contact) {
return contact.attributes;
}
return null;
};
if (_.isUndefined(jids)) {
jids = _converse.roster.pluck('jid');
} else if (_.isString(jids)) {
return _transform(jids);
}
return _.map(jids, _transform);
},
'add': function (jid, name) {
if (!_.isString(jid) || !_.includes(jid, '@')) {
throw new TypeError('contacts.add: invalid jid');
}
_converse.roster.addAndSubscribe(jid, _.isEmpty(name)? jid: name);
}
},
'chats': {
'open': function (jids, attrs) {
var chatbox;
if (_.isUndefined(jids)) {
_converse.log("chats.open: You need to provide at least one JID", "error");
return null;
} else if (_.isString(jids)) {
chatbox = _converse.wrappedChatBox(
_converse.chatboxes.getChatBox(jids, true, attrs).trigger('show')
);
return chatbox;
}
return _.map(jids, function (jid) {
chatbox = _converse.wrappedChatBox(
_converse.chatboxes.getChatBox(jid, true, attrs).trigger('show')
);
return chatbox;
});
},
'get': function (jids) {
if (_.isUndefined(jids)) {
var result = [];
_converse.chatboxes.each(function (chatbox) {
// FIXME: Leaky abstraction from MUC. We need to add a
// base type for chat boxes, and check for that.
if (chatbox.get('type') !== 'chatroom') {
result.push(_converse.wrappedChatBox(chatbox));
}
});
return result;
} else if (_.isString(jids)) {
return _converse.wrappedChatBox(_converse.chatboxes.getChatBox(jids));
}
return _.map(jids,
_.partial(
_.flow(
_converse.chatboxes.getChatBox.bind(_converse.chatboxes),
_converse.wrappedChatBox.bind(_converse)
), _, true
)
);
}
},
'tokens': {
'get': function (id) {
if (!_converse.expose_rid_and_sid || _.isUndefined(_converse.connection)) {
return null;
}
if (id.toLowerCase() === 'rid') {
return _converse.connection.rid || _converse.connection._proto.rid;
} else if (id.toLowerCase() === 'sid') {
return _converse.connection.sid || _converse.connection._proto.sid;
}
}
},
'listen': {
'once': _converse.once,
'on': _converse.on,
'not': _converse.off,
'stanza': function (name, options, handler) {
if (_.isFunction(options)) {
handler = options;
options = {};
} else {
options = options || {};
}
_converse.connection.addHandler(
handler,
options.ns,
name,
options.type,
options.id,
options.from,
options
);
},
},
'waitUntil': function (name) {
var promise = _converse.promises[name];
if (_.isUndefined(promise)) {
return null;
}
return _converse.promises[name].promise();
},
'send': function (stanza) {
_converse.connection.send(stanza);
},
};
// The public API
return {
'initialize': function (settings, callback) {
return _converse.initialize(settings, callback);
},
'plugins': {
'add': function (name, plugin) {
plugin.__name__ = name;
if (!_.isUndefined(_converse.pluggable.plugins[name])) {
throw new TypeError(
'Error: plugin with name "'+name+'" has already been '+
'registered!');
} else {
_converse.pluggable.plugins[name] = plugin;
}
}
},
'env': {
'$build': strophe.$build,
'$iq': strophe.$iq,
'$msg': strophe.$msg,
'$pres': strophe.$pres,
'Strophe': strophe.Strophe,
'b64_sha1': strophe.SHA1.b64_sha1,
'_': _,
'jQuery': $,
'moment': moment,
'utils': utils
}
};
}));
......@@ -16,7 +16,7 @@
"moment_with_locales",
"strophe",
"utils",
"converse-api",
"converse-core",
"converse-muc",
"tpl!chatroom_bookmark_form",
"tpl!chatroom_bookmark_toggle",
......
......@@ -8,7 +8,7 @@
(function (root, factory) {
define([
"converse-api",
"converse-core",
"tpl!chatbox",
"tpl!new_day",
"tpl!action",
......
......@@ -8,7 +8,7 @@
(function (root, factory) {
define([
"converse-api",
"converse-core",
"tpl!add_contact_dropdown",
"tpl!add_contact_form",
"tpl!change_status_message",
......
......@@ -5,23 +5,21 @@
// Licensed under the Mozilla Public License (MPLv2)
//
/*global Backbone, define, window, document */
(function (root, factory) {
define([
"sizzle",
"jquery",
"lodash",
"polyfill",
"locales",
"utils",
"moment_with_locales",
"strophe",
"pluggable",
"strophe.disco",
"backbone.browserStorage",
"backbone.overview",
define(["sizzle",
"jquery",
"lodash",
"polyfill",
"locales",
"utils",
"moment_with_locales",
"strophe",
"pluggable",
"strophe.disco",
"backbone.browserStorage",
"backbone.overview",
], factory);
}(this, function (sizzle, $, _, dummy, locales, utils, moment, Strophe, pluggable) {
}(this, function (sizzle, $, _, polyfill, locales, utils, moment, Strophe, pluggable) {
/*
* Cannot use this due to Safari bug.
* See https://github.com/jcbrand/converse.js/issues/196
......@@ -31,6 +29,7 @@
// Strophe globals
var $build = Strophe.$build;
var $iq = Strophe.$iq;
var $msg = Strophe.$msg;
var $pres = Strophe.$pres;
var b64_sha1 = Strophe.SHA1.b64_sha1;
Strophe = Strophe.Strophe;
......@@ -2034,5 +2033,209 @@
return init_deferred.promise();
}
};
return _converse;
// API methods only available to plugins
_converse.api = {
'connection': {
'connected': function () {
return _converse.connection && _converse.connection.connected || false;
},
'disconnect': function () {
_converse.connection.disconnect();
},
},
'user': {
'jid': function () {
return _converse.connection.jid;
},
'login': function (credentials) {
_converse.initConnection();
_converse.logIn(credentials);
},
'logout': function () {
_converse.logOut();
},
'status': {
'get': function () {
return _converse.xmppstatus.get('status');
},
'set': function (value, message) {
var data = {'status': value};
if (!_.includes(_.keys(_converse.STATUS_WEIGHTS), value)) {
throw new Error('Invalid availability value. See https://xmpp.org/rfcs/rfc3921.html#rfc.section.2.2.2.1');
}
if (_.isString(message)) {
data.status_message = message;
}
_converse.xmppstatus.sendPresence(value);
_converse.xmppstatus.save(data);
},
'message': {
'get': function () {
return _converse.xmppstatus.get('status_message');
},
'set': function (stat) {
_converse.xmppstatus.save({'status_message': stat});
}
}
},
},
'settings': {
'get': function (key) {
if (_.includes(_.keys(_converse.default_settings), key)) {
return _converse[key];
}
},
'set': function (key, val) {
var o = {};
if (_.isObject(key)) {
_.assignIn(_converse, _.pick(key, _.keys(_converse.default_settings)));
} else if (_.isString("string")) {
o[key] = val;
_.assignIn(_converse, _.pick(o, _.keys(_converse.default_settings)));
}
}
},
'contacts': {
'get': function (jids) {
var _transform = function (jid) {
var contact = _converse.roster.get(Strophe.getBareJidFromJid(jid));
if (contact) {
return contact.attributes;
}
return null;
};
if (_.isUndefined(jids)) {
jids = _converse.roster.pluck('jid');
} else if (_.isString(jids)) {
return _transform(jids);
}
return _.map(jids, _transform);
},
'add': function (jid, name) {
if (!_.isString(jid) || !_.includes(jid, '@')) {
throw new TypeError('contacts.add: invalid jid');
}
_converse.roster.addAndSubscribe(jid, _.isEmpty(name)? jid: name);
}
},
'chats': {
'open': function (jids, attrs) {
var chatbox;
if (_.isUndefined(jids)) {
_converse.log("chats.open: You need to provide at least one JID", "error");
return null;
} else if (_.isString(jids)) {
chatbox = _converse.wrappedChatBox(
_converse.chatboxes.getChatBox(jids, true, attrs).trigger('show')
);
return chatbox;
}
return _.map(jids, function (jid) {
chatbox = _converse.wrappedChatBox(
_converse.chatboxes.getChatBox(jid, true, attrs).trigger('show')
);
return chatbox;
});
},
'get': function (jids) {
if (_.isUndefined(jids)) {
var result = [];
_converse.chatboxes.each(function (chatbox) {
// FIXME: Leaky abstraction from MUC. We need to add a
// base type for chat boxes, and check for that.
if (chatbox.get('type') !== 'chatroom') {
result.push(_converse.wrappedChatBox(chatbox));
}
});
return result;
} else if (_.isString(jids)) {
return _converse.wrappedChatBox(_converse.chatboxes.getChatBox(jids));
}
return _.map(jids,
_.partial(
_.flow(
_converse.chatboxes.getChatBox.bind(_converse.chatboxes),
_converse.wrappedChatBox.bind(_converse)
), _, true
)
);
}
},
'tokens': {
'get': function (id) {
if (!_converse.expose_rid_and_sid || _.isUndefined(_converse.connection)) {
return null;
}
if (id.toLowerCase() === 'rid') {
return _converse.connection.rid || _converse.connection._proto.rid;
} else if (id.toLowerCase() === 'sid') {
return _converse.connection.sid || _converse.connection._proto.sid;
}
}
},
'listen': {
'once': _converse.once,
'on': _converse.on,
'not': _converse.off,
'stanza': function (name, options, handler) {
if (_.isFunction(options)) {
handler = options;
options = {};
} else {
options = options || {};
}
_converse.connection.addHandler(
handler,
options.ns,
name,
options.type,
options.id,
options.from,
options
);
},
},
'waitUntil': function (name) {
var promise = _converse.promises[name];
if (_.isUndefined(promise)) {
return null;
}
return _converse.promises[name].promise();
},
'send': function (stanza) {
_converse.connection.send(stanza);
},
};
// The public API
return {
'initialize': function (settings, callback) {
return _converse.initialize(settings, callback);
},
'plugins': {
'add': function (name, plugin) {
plugin.__name__ = name;
if (!_.isUndefined(_converse.pluggable.plugins[name])) {
throw new TypeError(
'Error: plugin with name "'+name+'" has already been '+
'registered!');
} else {
_converse.pluggable.plugins[name] = plugin;
}
}
},
'env': {
'$build': $build,
'$iq': $iq,
'$msg': $msg,
'$pres': $pres,
'Strophe': Strophe,
'b64_sha1': b64_sha1,
'_': _,
'jQuery': $,
'moment': moment,
'utils': utils
}
};
}));
......@@ -8,7 +8,7 @@
(function (root, factory) {
define([
"converse-api",
"converse-core",
"tpl!dragresize",
"converse-chatview",
"converse-muc", // XXX: would like to remove this
......
......@@ -8,7 +8,7 @@
(function (root, factory) {
define([
"converse-api",
"converse-core",
"converse-chatview"
], factory);
}(this, function (converse) {
......
......@@ -10,7 +10,7 @@
(function (root, factory) {
define([
"converse-api",
"converse-core",
"converse-chatview", // Could be made a soft dependency
"converse-muc", // Could be made a soft dependency
"strophe.rsm"
......
......@@ -8,7 +8,7 @@
(function (root, factory) {
define([
"converse-api",
"converse-core",
"tpl!chatbox_minimize",
"tpl!toggle_chats",
"tpl!trimmed_chat",
......
......@@ -6,7 +6,7 @@
//
/*global Backbone */
(function (root, factory) {
define(["converse-api", "converse-muc"], factory);
define(["converse-core", "converse-muc"], factory);
}(this, function (converse) {
"use strict";
......
......@@ -11,7 +11,7 @@
*/
(function (root, factory) {
define([
"converse-api",
"converse-core",
"tpl!chatarea",
"tpl!chatroom",
"tpl!chatroom_form",
......
......@@ -7,7 +7,7 @@
/*global define */
(function (root, factory) {
define(["converse-api"], factory);
define(["converse-core"], factory);
}(this, function (converse) {
"use strict";
var $ = converse.env.jQuery,
......
......@@ -10,7 +10,7 @@
* encryption of one-on-one chat messages.
*/
(function (root, factory) {
define(["otr", "converse-api", "tpl!toolbar_otr"], factory);
define(["otr", "converse-core", "tpl!toolbar_otr"], factory);
}(this, function (otr, converse, tpl_toolbar_otr) {
"use strict";
// Strophe methods for building stanzas
......
......@@ -10,7 +10,7 @@
* as specified in XEP-0199 XMPP Ping.
*/
(function (root, factory) {
define(["converse-api", "strophe.ping"], factory);
define(["converse-core", "strophe.ping"], factory);
}(this, function (converse) {
"use strict";
// Strophe methods for building stanzas
......
......@@ -10,7 +10,7 @@
* as specified in XEP-0077.
*/
(function (root, factory) {
define(["converse-api",
define(["converse-core",
"tpl!form_username",
"tpl!register_panel",
"tpl!register_tab",
......
......@@ -7,7 +7,7 @@
/*global Backbone, define */
(function (root, factory) {
define(["converse-api",
define(["converse-core",
"tpl!group_header",
"tpl!pending_contact",
"tpl!requesting_contact",
......
......@@ -7,7 +7,7 @@
/*global define */
(function (root, factory) {
define(["converse-api", "strophe.vcard"], factory);
define(["converse-core", "strophe.vcard"], factory);
}(this, function (converse) {
"use strict";
var Strophe = converse.env.Strophe,
......
......@@ -8,7 +8,7 @@
if (typeof define !== 'undefined') {
/* When running tests, define is not defined. */
define("converse", [
"converse-api",
"converse-core",
// PLEASE NOTE: By default all translations are included.
// You can modify the file src/locales.js to include only those
// translations that you care about.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment