You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2013/07/23 01:57:32 UTC

[5/8] git commit: Add a text field for dynamic filtering of the floating console messages

Add a text field for dynamic filtering of the floating console messages


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/01cfeb1d
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/01cfeb1d
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/01cfeb1d

Branch: refs/heads/master
Commit: 01cfeb1d188ffb775abc4b6b04f39e39770ba71e
Parents: 36de838
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Mon Jul 22 09:36:17 2013 -0700
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Mon Jul 22 09:36:17 2013 -0700

----------------------------------------------------------------------
 .../META-INF/modules/t5/core/console.coffee     | 62 ++++++++++++++++----
 1 file changed, 49 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/01cfeb1d/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/console.coffee
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/console.coffee b/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/console.coffee
index f5ebb69..fcc6bf8 100644
--- a/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/console.coffee
+++ b/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core/console.coffee
@@ -20,7 +20,23 @@ define ["./dom", "underscore"],
 
     nativeConsole = {}
     floatingConsole = null
-    alertContainer = null
+    messages = null
+
+    noFilter = -> true
+
+    filter = noFilter
+
+    updateFilter = (text) ->
+      if text is ""
+        filter = noFilter
+        return
+
+      text = text.toLowerCase()
+
+      filter = (e) ->
+        e.element.innerText.toLowerCase().indexOf(text) >= 0
+
+      return
 
     forceFloating = (dom.body.attribute "data-floating-console") == "true"
 
@@ -41,25 +57,28 @@ define ["./dom", "underscore"],
             class: "tapestry-console",
             """
               <div class="message-container"></div>
-              <button data-action="clear" class="btn btn-mini"><i class="icon-remove"></i> Clear Console</button>
-              <button data-action="enable" class="btn btn-mini" disabled="true"><i class="icon-play"></i> Enable Console</button>
-              <button data-action="disable" class="btn btn-mini"><i class="icon-pause"></i> Disable Console</button>
+              <div class="row-fluid">
+                <button data-action="clear" class="btn btn-mini"><i class="icon-remove"></i> Clear Console</button>
+                <button data-action="enable" class="btn btn-mini" disabled="true"><i class="icon-play"></i> Enable Console</button>
+                <button data-action="disable" class="btn btn-mini"><i class="icon-pause"></i> Disable Console</button>
+                <input class="search-query input-xlarge" size="40" placeholder="Filter console content">
+              </div>
               """
 
           dom.body.prepend floatingConsole
 
-          alertContainer = floatingConsole.findFirst ".message-container"
+          messages = floatingConsole.findFirst ".message-container"
 
           floatingConsole.on "click", "[data-action=clear]", ->
             floatingConsole.hide()
-            alertContainer.update ""
+            messages.update ""
 
           floatingConsole.on "click", "[data-action=disable]", ->
 
             @attribute "disabled", true
             floatingConsole.findFirst("[data-action=enable]").attribute "disabled", false
 
-            alertContainer.hide()
+            messages.hide()
 
             return false
 
@@ -68,19 +87,36 @@ define ["./dom", "underscore"],
             @attribute "disabled", true
             floatingConsole.findFirst("[data-action=disable]").attribute "disabled", false
 
-            alertContainer.show()
+            messages.show()
 
             return false
 
-        alertContainer.append """
-          <div class="#{className}">#{_.escape message}</div>
-          """
+          floatingConsole.on "change keyup", ".search-query", ->
+            updateFilter @value()
+
+            for e in messages.children()
+              visible = filter e
+
+              e[if visible then "show" else "hide"]()
+
+            return false
+
+        div = dom.create
+          class: className,
+          _.escape message
+
+          # Should really filter on original message, not escaped.
+
+        unless filter div
+          div.hide()
+
+        messages.append div
 
-        # Make sure the console is visible, even if disabled.
+        # Make sure the console is visible, even if disabled (and even if the new content is hidden).
         floatingConsole.show()
 
         # A slightly clumsy way to ensure that the container is scrolled to the bottom.
-        _.delay -> alertContainer.element.scrollTop = alertContainer.element.scrollHeight
+        _.delay -> messages.element.scrollTop = messages.element.scrollHeight
 
     level = (className, consolefn) ->
       (message) ->