nitdoc: refactor Nitdoc.UI JS module into ui plugin
authorAlexandre Terrasa <alexandre@moz-code.org>
Fri, 7 Feb 2014 07:04:09 +0000 (02:04 -0500)
committerAlexandre Terrasa <alexandre@moz-code.org>
Thu, 20 Feb 2014 19:11:57 +0000 (14:11 -0500)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

share/nitdoc/js/nitdoc.js
share/nitdoc/js/plugins/ui.js [new file with mode: 0644]
share/nitdoc/scripts/Nitdoc.UI.js [deleted file]

index df3559d..4d12538 100644 (file)
@@ -12,5 +12,6 @@ require.config({
 
 // nitdoc main module
 define([
+       "plugins/ui",
 ], function() {});
 
diff --git a/share/nitdoc/js/plugins/ui.js b/share/nitdoc/js/plugins/ui.js
new file mode 100644 (file)
index 0000000..fe479e2
--- /dev/null
@@ -0,0 +1,208 @@
+/* This file is part of NIT ( http://www.nitlanguage.org ).\r
+\r
+   Licensed under the Apache License, Version 2.0 (the "License");\r
+   you may not use this file except in compliance with the License.\r
+   You may obtain a copy of the License at\r
+\r
+   http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+   Unless required by applicable law or agreed to in writing, software\r
+   distributed under the License is distributed on an "AS IS" BASIS,\r
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+   See the License for the specific language governing permissions and\r
+   limitations under the License.\r
+\r
+   Documentation generator for the nit language.\r
+   Generate API documentation in HTML format from nit source code.\r
+*/\r
+\r
+/*\r
+ * Nitdoc UI module\r
+ *\r
+ * Enhance nitdoc usability with JS features\r
+ */\r
+define([\r
+       "jquery",\r
+       "ZeroClipboard",\r
+       "plugins/utils"\r
+], function($, ZeroClipboard, utils) {\r
+\r
+       var UI = {\r
+\r
+               // Allow user to fold sidebar nav elements on click\r
+               enableFolding: function(containerSelector) {\r
+                       var container = $(containerSelector);\r
+                       var foldLink = $(document.createElement("a"))\r
+                       .addClass("nitdoc-ui-fold")\r
+                       .html("-");\r
+\r
+                       container.find("nav h3")\r
+                       .prepend(foldLink)\r
+                       .css("cursor", "pointer")\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
+                       );\r
+               },\r
+\r
+               // Allow user to copy signatures to clipboard with ZeroClipboard flahs plugin\r
+               // See: https://github.com/zeroclipboard/ZeroClipboard\r
+               enableCopyToClipboard: function(copySelector) {\r
+                       $(copySelector).each(function() {\r
+                               var btn = $(document.createElement("button"))\r
+                               .addClass("nitdoc-ui-copy")\r
+                               .attr("data-clipboard-text", $(this).attr("data-untyped-signature"))\r
+                               .append(\r
+                                       $(document.createElement("img"))\r
+                                       .attr("src", './resources/icons/copy.png')\r
+                               );\r
+                               $(this).append(btn);\r
+                       });\r
+\r
+                       var clip = new ZeroClipboard($("button.nitdoc-ui-copy"), {\r
+                               moviePath: "./ZeroClipboard.swf"\r
+                       });\r
+               },\r
+\r
+               // Allow user to filter sidebar box entries by name\r
+               enableSidebarTextFilters: function(filterSelector) {\r
+                       var div = $(document.createElement("div"))\r
+                       .addClass("nitdoc-ui-filter")\r
+                       .append(\r
+                               $(document.createElement("input"))\r
+                               .addClass("nitdoc-ui-filter-field")\r
+                               .addClass("nitdoc-ui-filter-field-notused")\r
+                               .attr("type", "text")\r
+                               .attr("value",  "filter...")\r
+                               .keyup(function() {\r
+                                       var box = $(this).parents("nav.filterable");\r
+                                       var value = $(this).val();\r
+                                       box.find("ul li:not(:icontains('" + value + "'))").hide();\r
+                                       box.find("ul li:icontains('" + value + "')").show();\r
+                               })\r
+                               .focusout(function() {\r
+                                       if($(this).val() == "") {\r
+                                               $(this).addClass("nitdoc-ui-filter-field-notused");\r
+                                               $(this).val("filter...");\r
+                                       }\r
+                               })\r
+                               .focusin(function() {\r
+                                       if($(this).val() == "filter...") {\r
+                                               $(this).removeClass("nitdoc-ui-filter-field-notused");\r
+                                               $(this).val("");\r
+                                       }\r
+                               })\r
+                       );\r
+                       $(filterSelector).after(div);\r
+                       this.preloadSidebarTextFilters();\r
+               },\r
+\r
+               // Prealod filters using search query\r
+               preloadSidebarTextFilters: function() {\r
+                       var anchor = utils.extractAnchor(document.location.hash);\r
+                       if(!anchor || anchor.indexOf("q=") == -1) return;\r
+\r
+                       var query = anchor.substring(2);\r
+                       if(!query) return;\r
+\r
+                       $(".nitdoc-ui-filter input:text")\r
+                       .val(query)\r
+                       .removeClass("nitdoc-ui-notused")\r
+                       .trigger("keyup");\r
+               },\r
+\r
+               // Allow user to filter side bar box entries by Introduced/Refined/inHerited type\r
+               enableSidebarTypeFilters: function(filterSelector) {\r
+                       var box = $(filterSelector);\r
+                       var types = {};\r
+\r
+                       box.find("li").each(function() {\r
+                               var span = $(this).find("span:first");\r
+                               if(!types[span.html()]) types[span.html()] = {\r
+                                       title: span.attr("title"),\r
+                                       class: $(this).attr("class")\r
+                               }\r
+                       });\r
+\r
+                       for(var type in types) {\r
+                               var a = $(document.createElement("a"))\r
+                               .addClass("nitdoc-ui-filter-link")\r
+                               .html(type)\r
+                               .attr("title", "Hide " + types[type].title)\r
+                               .attr("data-filter-class", types[type].class)\r
+                               .toggle(\r
+                                       function() {\r
+                                               var hclass = $(this).attr("data-filter-class");\r
+                                               $(this).parents(filterSelector).find("li." + hclass).hide();\r
+                                               $(this).addClass("nitdoc-ui-filter-hidden")\r
+                                       },\r
+                                       function() {\r
+                                               var hclass = $(this).attr("data-filter-class");\r
+                                               $(this).parents(filterSelector).find("li." + hclass).show();\r
+                                               $(this).removeClass("nitdoc-ui-filter-hidden")\r
+                                       }\r
+                               )\r
+                               $(filterSelector).find(".nitdoc-ui-filter").append(a);\r
+                       }\r
+               },\r
+\r
+               // Allow user to filter sidebar box entries by name\r
+               enableSearchPageField: function(filterSelector) {\r
+                       var div = $(document.createElement("div"))\r
+                       .addClass("nitdoc-ui-searchpage-filter")\r
+                       .append(\r
+                               $(document.createElement("input"))\r
+                               .addClass("nitdoc-ui-searchpage-field")\r
+                               .addClass("nitdoc-ui-filter-field-notused")\r
+                               .attr("type", "text")\r
+                               .attr("value",  "filter...")\r
+                               .keyup(function() {\r
+                                       var box = $(this).parents(".content.fullpage").find("article.filterable");\r
+                                       var value = $(this).val();\r
+                                       box.find("ul li:not(:icontains('" + value + "'))").hide();\r
+                                       box.find("ul li:icontains('" + value + "')").show();\r
+                               })\r
+                               .focusout(function() {\r
+                                       if($(this).val() == "") {\r
+                                               $(this).addClass("nitdoc-ui-filter-field-notused");\r
+                                               $(this).val("filter...");\r
+                                       }\r
+                               })\r
+                               .focusin(function() {\r
+                                       if($(this).val() == "filter...") {\r
+                                               $(this).removeClass("nitdoc-ui-filter-field-notused");\r
+                                               $(this).val("");\r
+                                       }\r
+                               })\r
+                       );\r
+                       $(filterSelector).after(div);\r
+                       this.preloadSearchPageField();\r
+               },\r
+\r
+               // Prealod filter using search query\r
+               preloadSearchPageField: function() {\r
+                       var anchor = utils.extractAnchor(document.location.hash);\r
+                       if(!anchor || anchor.indexOf("q=") == -1) return;\r
+\r
+                       var query = anchor.substring(2);\r
+                       if(!query) return;\r
+\r
+                       $(".nitdoc-ui-searchpage-field")\r
+                       .val(query)\r
+                       .removeClass("nitdoc-ui-notused")\r
+                       .trigger("keyup");\r
+               }\r
+       };\r
+\r
+       UI.enableFolding(".sidebar");\r
+       UI.enableCopyToClipboard(".signature");\r
+       UI.enableSidebarTextFilters("nav.filterable h3");\r
+       UI.enableSidebarTypeFilters("nav.filterable");\r
+       UI.enableSearchPageField(".content.fullpage h1:contains('Search')");\r
+});\r
diff --git a/share/nitdoc/scripts/Nitdoc.UI.js b/share/nitdoc/scripts/Nitdoc.UI.js
deleted file mode 100644 (file)
index 5b8d004..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-/* This file is part of NIT ( http://www.nitlanguage.org ).\r
-\r
-   Licensed under the Apache License, Version 2.0 (the "License");\r
-   you may not use this file except in compliance with the License.\r
-   You may obtain a copy of the License at\r
-\r
-   http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-   Unless required by applicable law or agreed to in writing, software\r
-   distributed under the License is distributed on an "AS IS" BASIS,\r
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-   See the License for the specific language governing permissions and\r
-   limitations under the License.\r
-\r
-   Documentation generator for the nit language.\r
-   Generate API documentation in HTML format from nit source code.\r
-*/\r
-\r
-var Nitdoc = Nitdoc || {};\r
-\r
-/*\r
- * Nitdoc UI module\r
- *\r
- * Enhance nitdoc usability with JS features\r
- */\r
-\r
-Nitdoc.UI = function() {\r
-\r
-       // Allow user to fold sidebar nav elements on click\r
-       var enableFolding = function(containerSelector) {\r
-               var container = $(containerSelector);\r
-               var foldLink = $(document.createElement("a"))\r
-               .addClass("nitdoc-ui-fold")\r
-               .html("-");\r
-\r
-               container.find("nav h3")\r
-               .prepend(foldLink)\r
-               .css("cursor", "pointer")\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
-               );\r
-       }\r
-\r
-       // Allow user to copy signatures to clipboard with ZeroClipboard flahs plugin\r
-       // See: https://github.com/zeroclipboard/ZeroClipboard\r
-       var enableCopyToClipboard = function(copySelector) {\r
-               $(copySelector).each(function() {\r
-                       var btn = $(document.createElement("button"))\r
-                       .addClass("nitdoc-ui-copy")\r
-                       .attr("data-clipboard-text", $(this).attr("data-untyped-signature"))\r
-                       .append(\r
-                               $(document.createElement("img"))\r
-                               .attr("src", './resources/icons/copy.png')\r
-                       );\r
-                       $(this).append(btn);\r
-               });\r
-\r
-               var clip = new ZeroClipboard($("button.nitdoc-ui-copy"), {\r
-                       moviePath: "./ZeroClipboard.swf"\r
-               });\r
-       }\r
-\r
-       // Allow user to filter sidebar box entries by name\r
-       var enableSidebarTextFilters = function(filterSelector) {\r
-               var div = $(document.createElement("div"))\r
-               .addClass("nitdoc-ui-filter")\r
-               .append(\r
-                       $(document.createElement("input"))\r
-                       .addClass("nitdoc-ui-filter-field")\r
-                       .addClass("nitdoc-ui-filter-field-notused")\r
-                       .attr("type", "text")\r
-                       .attr("value",  "filter...")\r
-                       .keyup(function() {\r
-                               var box = $(this).parents("nav.filterable");\r
-                               var value = $(this).val();\r
-                               box.find("ul li:not(:icontains('" + value + "'))").hide();\r
-                               box.find("ul li:icontains('" + value + "')").show();\r
-                       })\r
-                       .focusout(function() {\r
-                               if($(this).val() == "") {\r
-                                       $(this).addClass("nitdoc-ui-filter-field-notused");\r
-                                       $(this).val("filter...");\r
-                               }\r
-                       })\r
-                       .focusin(function() {\r
-                               if($(this).val() == "filter...") {\r
-                                       $(this).removeClass("nitdoc-ui-filter-field-notused");\r
-                                       $(this).val("");\r
-                               }\r
-                       })\r
-               );\r
-               $(filterSelector).after(div);\r
-               preloadSidebarTextFilters();\r
-       }\r
-\r
-       // Prealod filters using search query\r
-       var preloadSidebarTextFilters = function() {\r
-               var anchor = Nitdoc.Utils.extractAnchor(document.location.hash);\r
-               if(!anchor || anchor.indexOf("q=") == -1) return;\r
-\r
-               var query = anchor.substring(2);\r
-               if(!query) return;\r
-\r
-               $(".nitdoc-ui-filter input:text")\r
-               .val(query)\r
-               .removeClass("nitdoc-ui-notused")\r
-               .trigger("keyup");\r
-       }\r
-\r
-       // Allow user to filter side bar box entries by Introduced/Refined/inHerited type\r
-       var enableSidebarTypeFilters = function(filterSelector) {\r
-               var box = $(filterSelector);\r
-               var types = {};\r
-\r
-               box.find("li").each(function() {\r
-                       var span = $(this).find("span:first");\r
-                       if(!types[span.html()]) types[span.html()] = {\r
-                               title: span.attr("title"),\r
-                               class: $(this).attr("class")\r
-                       }\r
-               });\r
-\r
-               for(var type in types) {\r
-                       var a = $(document.createElement("a"))\r
-                       .addClass("nitdoc-ui-filter-link")\r
-                       .html(type)\r
-                       .attr("title", "Hide " + types[type].title)\r
-                       .attr("data-filter-class", types[type].class)\r
-                       .toggle(\r
-                               function() {\r
-                                       var hclass = $(this).attr("data-filter-class");\r
-                                       $(this).parents(filterSelector).find("li." + hclass).hide();\r
-                                       $(this).addClass("nitdoc-ui-filter-hidden")\r
-                               },\r
-                               function() {\r
-                                       var hclass = $(this).attr("data-filter-class");\r
-                                       $(this).parents(filterSelector).find("li." + hclass).show();\r
-                                       $(this).removeClass("nitdoc-ui-filter-hidden")\r
-                               }\r
-                       )\r
-                       $(filterSelector).find(".nitdoc-ui-filter").append(a);\r
-               }\r
-       }\r
-\r
-       // Allow user to filter sidebar box entries by name\r
-       var enableSearchPageField = function(filterSelector) {\r
-               var div = $(document.createElement("div"))\r
-               .addClass("nitdoc-ui-searchpage-filter")\r
-               .append(\r
-                       $(document.createElement("input"))\r
-                       .addClass("nitdoc-ui-searchpage-field")\r
-                       .addClass("nitdoc-ui-filter-field-notused")\r
-                       .attr("type", "text")\r
-                       .attr("value",  "filter...")\r
-                       .keyup(function() {\r
-                               var box = $(this).parents(".content.fullpage").find("article.filterable");\r
-                               var value = $(this).val();\r
-                               box.find("ul li:not(:icontains('" + value + "'))").hide();\r
-                               box.find("ul li:icontains('" + value + "')").show();\r
-                       })\r
-                       .focusout(function() {\r
-                               if($(this).val() == "") {\r
-                                       $(this).addClass("nitdoc-ui-filter-field-notused");\r
-                                       $(this).val("filter...");\r
-                               }\r
-                       })\r
-                       .focusin(function() {\r
-                               if($(this).val() == "filter...") {\r
-                                       $(this).removeClass("nitdoc-ui-filter-field-notused");\r
-                                       $(this).val("");\r
-                               }\r
-                       })\r
-               );\r
-               $(filterSelector).after(div);\r
-               preloadSearchPageField();\r
-       }\r
-\r
-       // Prealod filter using search query\r
-       var preloadSearchPageField = function() {\r
-               var anchor = Nitdoc.Utils.extractAnchor(document.location.hash);\r
-               if(!anchor || anchor.indexOf("q=") == -1) return;\r
-\r
-               var query = anchor.substring(2);\r
-               if(!query) return;\r
-\r
-               $(".nitdoc-ui-searchpage-field")\r
-               .val(query)\r
-               .removeClass("nitdoc-ui-notused")\r
-               .trigger("keyup");\r
-       }\r
-\r
-       // Public interface\r
-       var ui = {\r
-               enableFolding: enableFolding,\r
-               enableCopyToClipboard: enableCopyToClipboard,\r
-               enableSidebarTextFilters: enableSidebarTextFilters,\r
-               enableSidebarTypeFilters: enableSidebarTypeFilters,\r
-               enableSearchPageField: enableSearchPageField\r
-       };\r
-\r
-       return ui;\r
-}();\r
-\r
-// Init UI on page load\r
-$(document).ready(function() {\r
-       Nitdoc.UI.enableFolding(".sidebar");\r
-       Nitdoc.UI.enableCopyToClipboard(".signature");\r
-       Nitdoc.UI.enableSidebarTextFilters("nav.filterable h3");\r
-       Nitdoc.UI.enableSidebarTypeFilters("nav.filterable");\r
-       Nitdoc.UI.enableSearchPageField(".content.fullpage h1:contains('Search')");\r
-});\r
-\r
-/*\r
- * Utils module\r
- *\r
- * Utility functions\r
- */\r
-\r
-Nitdoc.Utils = function() {\r
-\r
-       // Extract anchor part (after #) from URL string\r
-       var extractAnchor = function(url) {\r
-           var index = url.indexOf("#");\r
-           if (index >= 0) {\r
-                       return url.substring(index + 1);\r
-               }\r
-               return null;\r
-       }\r
-\r
-       // Public interface\r
-       var utils = {\r
-               extractAnchor: extractAnchor\r
-       };\r
-\r
-       return utils;\r
-}();\r
-\r
-// JQuery Case Insensitive :icontains selector\r
-$.expr[':'].icontains = function(obj, index, meta, stack){\r
-       return (obj.textContent.replace(/\[[0-9]+\]/g, "") || obj.innerText.replace(/\[[0-9]+\]/g, "") || jQuery(obj).text().replace(/\[[0-9]+\]/g, "") || '').toLowerCase().indexOf(meta[3].toLowerCase()) >= 0;\r
-};\r
-\r