소스 검색

Add new option strict_plugin_dependencies

JC Brand 9 년 전
부모
커밋
80c26e708c
2개의 변경된 파일28개의 추가작업 그리고 4개의 파일을 삭제
  1. 17 3
      docs/source/configuration.rst
  2. 11 1
      src/converse-core.js

+ 17 - 3
docs/source/configuration.rst

@@ -417,7 +417,7 @@ state. The only defined states are:
 * dnd -- The entity or resource is busy (dnd = "Do Not Disturb").
 * xa -- The entity or resource is away for an extended period (xa = "eXtended Away").
 
-Read the [relevant section in the XMPP spec](https://xmpp.org/rfcs/rfc6121.html#presence-syntax-children-show) for more info. 
+Read the [relevant section in the XMPP spec](https://xmpp.org/rfcs/rfc6121.html#presence-syntax-children-show) for more info.
 
 What used to happen in converse.js when the `offline` state was chosen, is
 that a presence stanza with a `type` of `unavailable` was sent out.
@@ -717,6 +717,20 @@ Data in localStorage on the other hand is kept indefinitely.
     roster contact statuses will not become out of sync in a single session,
     only across more than one session.
 
+strict_plugin_dependencies
+--------------------------
+
+* Default: ``false``
+
+When set to ``true`` and a plugin tries to override an object which doesn't
+exist (for example because the plugin which provides that object is not
+loaded), then an error will be raised.
+
+Otherwise a message will simply be logged and the override instruction ignored.
+
+This allows plugins to have "soft" dependencies which aren't declared as
+as dependencies.
+
 synchronize_availability
 --------------------
 
@@ -789,7 +803,7 @@ websocket_url
 
 * Default: ``undefined``
 
-This option is used to specify a 
+This option is used to specify a
 `websocket <https://developer.mozilla.org/en/docs/WebSockets>`_ URI to which
 converse.js can connect to.
 
@@ -805,7 +819,7 @@ support.
     Please note that not older browsers do not support websockets. For older
     browsers you'll want to specify a BOSH URL. See the :ref:`bosh-service-url`
     configuration setting).
-    
+
 .. note::
     Converse.js does not yet support "keepalive" with websockets.
 

+ 11 - 1
src/converse-core.js

@@ -279,6 +279,7 @@
             show_only_online_users: false,
             sid: undefined,
             storage: 'session',
+            strict_plugin_dependencies: false,
             synchronize_availability: true, // Set to false to not sync with other clients or with resource name of the particular client that it should synchronize with
             use_vcards: true,
             visible_toolbar_buttons: {
@@ -1875,8 +1876,17 @@
                     /* We automatically override all methods and Backbone views and
                      * models that are in the "overrides" namespace.
                      */
-                    var override = plugin.overrides[key];
+                    var msg,
+                        override = plugin.overrides[key];
                     if (typeof override === "object") {
+                        if (typeof converse[key] === 'undefined') {
+                            msg = "Error: Plugin tried to override "+key+" but it's not found.";
+                            if (converse.strict_plugin_dependencies) {
+                                throw msg;
+                            } else {
+                                converse.log(msg);
+                            }
+                        }
                         this._extendObject(converse[key], override);
                     } else {
                         this._overrideAttribute(key, plugin);