nitdoc: migrate folding to jQuery.UI widget
authorAlexandre Terrasa <alexandre@moz-code.org>
Wed, 12 Feb 2014 05:02:36 +0000 (00:02 -0500)
committerAlexandre Terrasa <alexandre@moz-code.org>
Thu, 20 Feb 2014 19:11:58 +0000 (14:11 -0500)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

share/nitdoc/js/plugins/folding.js

index 6205e47..9d58e3b 100644 (file)
  * Allow user to fold sidebar blocks\r
  */\r
 define([\r
-       "jquery"\r
+       'jquery',\r
+       'jQueryUI'\r
 ], function($) {\r
+       $.widget("nitdoc.folding", {\r
 \r
-       var Folding = {\r
-               enable: function(containerSelector) {\r
-                       var container = $(containerSelector);\r
-                       var foldLink = $(document.createElement("a"))\r
-                       .addClass("nitdoc-ui-fold")\r
-                       .html("-");\r
+               options: {\r
+                       foldText: "-",\r
+                       unfoldText: "+",\r
+                       linkHolder: "h3",\r
+                       linkClass: "nitdoc-ui-fold",\r
+                       linkCSS: {\r
+                               "cursor": "pointer"\r
+                       }\r
+               },\r
 \r
-                       container.find("nav h3")\r
-                       .prepend(foldLink)\r
-                       .css("cursor", "pointer")\r
+               _create: function() {\r
+                       this._foldLink = $("<a/>")\r
+                               .addClass(this.options.linkClass)\r
+                               .text(this.options.foldText);\r
+\r
+                       this.element.find(this.options.linkHolder)\r
+                       .prepend(this._foldLink)\r
+                       .css(this.options.linkCSS)\r
                        .toggle(\r
-                               function() {\r
-                                       $(this).find("a.nitdoc-ui-fold").html("+");\r
-                                       $(this).nextAll().toggle();\r
-                               },\r
-                               function() {\r
-                                       $(this).find("a.nitdoc-ui-fold").html("-");\r
-                                       $(this).nextAll().toggle();\r
-                               }\r
+                               $.proxy(this._fold, this),\r
+                               $.proxy(this._unfold, this)\r
                        );\r
-               }\r
-       };\r
+               },\r
 \r
-       Folding.enable(".sidebar");\r
+               _fold: function(event) {\r
+                       this._foldLink.text(this.options.unfoldText);\r
+                       this.element.find(this.options.linkHolder).nextAll().toggle();\r
+               },\r
+\r
+               _unfold: function() {\r
+                       this._foldLink.text(this.options.foldText);\r
+                       this.element.find(this.options.linkHolder).nextAll().toggle();\r
+               }\r
+       });\r
 \r
-       return Folding;\r
+       $(".sidebar nav").folding();\r
 });\r