]> git.ipfire.org Git - thirdparty/foundation/foundation-sites.git/commitdiff
Prevent Interchange from failing if its _init() method is called more than once,...
authorGeoff Kimball <geoff@zurb.com>
Wed, 2 Mar 2016 18:22:15 +0000 (10:22 -0800)
committerGeoff Kimball <geoff@zurb.com>
Wed, 2 Mar 2016 18:22:15 +0000 (10:22 -0800)
js/foundation.responsiveMenu.js
test/visual/responsive-menu/re-init.html [new file with mode: 0644]

index 559fe1fd7a5688194eb525f238c6f9a1a2a2fb51..a7bb389a80590e3ffb4cc559f085f78b8694985b 100644 (file)
@@ -38,25 +38,28 @@ class ResponsiveMenu {
    * @private
    */
   _init() {
-    var rulesTree = {};
-
-    // Parse rules from "classes" in data attribute
-    var rules = this.rules.split(' ');
-
-    // Iterate through every rule found
-    for (var i = 0; i < rules.length; i++) {
-      var rule = rules[i].split('-');
-      var ruleSize = rule.length > 1 ? rule[0] : 'small';
-      var rulePlugin = rule.length > 1 ? rule[1] : rule[0];
-
-      if (MenuPlugins[rulePlugin] !== null) {
-        rulesTree[ruleSize] = MenuPlugins[rulePlugin];
+    // The first time an Interchange plugin is initialized, this.rules is converted from a string of "classes" to an object of rules
+    if (typeof this.rules === 'string') {
+      let rulesTree = {};
+
+      // Parse rules from "classes" pulled from data attribute
+      let rules = this.rules.split(' ');
+
+      // Iterate through every rule found
+      for (let i = 0; i < rules.length; i++) {
+        let rule = rules[i].split('-');
+        let ruleSize = rule.length > 1 ? rule[0] : 'small';
+        let rulePlugin = rule.length > 1 ? rule[1] : rule[0];
+
+        if (MenuPlugins[rulePlugin] !== null) {
+          rulesTree[ruleSize] = MenuPlugins[rulePlugin];
+        }
       }
-    }
 
-    this.rules = rulesTree;
+      this.rules = rulesTree;
+    }
 
-    if (!$.isEmptyObject(rulesTree)) {
+    if (!$.isEmptyObject(this.rules)) {
       this._checkMediaQueries();
     }
   }
diff --git a/test/visual/responsive-menu/re-init.html b/test/visual/responsive-menu/re-init.html
new file mode 100644 (file)
index 0000000..b81c0f3
--- /dev/null
@@ -0,0 +1,55 @@
+<!doctype html>
+<!--[if IE 9]><html class="lt-ie10" lang="en" > <![endif]-->
+<html class="no-js" lang="en" dir="ltr">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>Foundation for Sites Testing</title>
+    <link href="../assets/css/foundation.css" rel="stylesheet" />
+  </head>
+  <body>
+    <div class="row column">
+      <h1>Responsive Menu: reInit</h1>
+
+      <ul id="menu" class="vertical menu" data-responsive-menu="drilldown medium-dropdown" style="width: 300px;">
+        <li>
+          <a href="#">Item 1</a>
+          <ul class="vertical menu">
+            <li>
+              <a href="#">Item 1A</a>
+              <ul class="vertical menu">
+                <li><a href="#">Item 1A</a></li>
+                <li><a href="#">Item 1B</a></li>
+                <li><a href="#">Item 1C</a></li>
+                <li><a href="#">Item 1D</a></li>
+                <li><a href="#">Item 1E</a></li>
+              </ul>
+            </li>
+            <li><a href="#">Item 1B</a></li>
+          </ul>
+        </li>
+        <li>
+          <a href="#">Item 2</a>
+          <ul class="vertical menu">
+            <li><a href="#">Item 2A</a></li>
+            <li><a href="#">Item 2B</a></li>
+          </ul>
+        </li>
+        <li>
+          <a href="#">Item 3</a>
+          <ul class="vertical menu">
+            <li><a href="#">Item 3A</a></li>
+            <li><a href="#">Item 3B</a></li>
+          </ul>
+        </li>
+      </ul>
+    </div>
+
+    <script src="../assets/js/vendor.js"></script>
+    <script src="../assets/js/foundation.js"></script>
+    <script>
+      $(document).foundation();
+      $('#menu').foundation('_init');
+    </script>
+  </body>
+</html>