瀏覽代碼

Use sizzle for tricky selector queries

Specifically involving querying by the 'xmlns' attribute, where I've had issues
in the past.
JC Brand 8 年之前
父節點
當前提交
4b22c8ba7b
共有 2 個文件被更改,包括 6 次插入4 次删除
  1. 1 0
      config.js
  2. 5 4
      src/converse-core.js

+ 1 - 0
config.js

@@ -27,6 +27,7 @@ require.config({
         "moment":                   "node_modules/moment/moment",
         "pluggable":                "node_modules/pluggable.js/pluggable",
         "polyfill":                 "src/polyfill",
+        "sizzle":                   "node_modules/jquery/sizzle/dist/sizzle",
         "strophe":                  "node_modules/strophe.js/src/wrapper",
         "strophe-base64":           "node_modules/strophe.js/src/base64",
         "strophe-bosh":             "node_modules/strophe.js/src/bosh",

+ 5 - 4
src/converse-core.js

@@ -8,6 +8,7 @@
 
 (function (root, factory) {
     define("converse-core", [
+        "sizzle",
         "jquery",
         "lodash",
         "polyfill",
@@ -19,7 +20,7 @@
         "backbone.browserStorage",
         "backbone.overview",
     ], factory);
-}(this, function ($, _, dummy, utils, moment, Strophe, pluggable) {
+}(this, function (sizzle, $, _, dummy, utils, moment, Strophe, pluggable) {
     /*
      * Cannot use this due to Safari bug.
      * See https://github.com/jcbrand/converse.js/issues/196
@@ -1094,7 +1095,7 @@
                 }
                 converse.connection.send($iq({type: 'result', id: id, from: converse.connection.jid}));
 
-                var items = iq.querySelectorAll('query[xmlns="'+Strophe.NS.ROSTER+'"] item');
+                var items = sizzle('query[xmlns="'+Strophe.NS.ROSTER+'"] item', iq);
                 _.each(items, this.updateContact.bind(this));
                 converse.emit('rosterPush', iq);
                 return true;
@@ -1114,7 +1115,7 @@
                 /* An IQ stanza containing the roster has been received from
                  * the XMPP server.
                  */
-                var items = iq.querySelectorAll('query[xmlns="'+Strophe.NS.ROSTER+'"] item');
+                var items = sizzle('query[xmlns="'+Strophe.NS.ROSTER+'"] item', iq);
                 _.each(items, this.updateContact.bind(this));
                 converse.emit('roster', iq);
             },
@@ -1228,7 +1229,7 @@
                         }
                     }
                     return;
-                } else if (presence.querySelectorAll('x[xmlns="'+Strophe.NS.MUC+'"]').length) {
+                } else if (sizzle('query[xmlns="'+Strophe.NS.MUC+'"]', presence).length) {
                     return; // Ignore MUC
                 }
                 if (contact && (status_message !== contact.get('status'))) {