Refine your search:

I noticed that some stuff doesn't show up on your view until after the search has been started. For example, the ViewRedirectorLink module doesn't show the "View results" link until the search has been kicked off. Is it possible to do this with other modules too?

I'm specifically trying to hide some test in an HTML module (which is part of the Sideview Utils app). I'd like it to only show up after the search starts.

I'm looking for something fairly easy, if at all possible.

asked 11 Aug '11, 15:40

Lowell's gravatar image

Lowell ♦
9.6k637
accept rate: 40%

edited 19 Aug '11, 23:55

nick's gravatar image

nick ♦
14.2k1318


One Answer:

I'm afraid there's nothing that will be fairly easy, except for people who have a very good understanding of how the module framework methods work. Since these methods are only just beginning to have public documentation, I'm afraid there's not a lot of those people. Nonetheless, by reading the new docs and digging through the source code, it's certainly possible to become one of them and many have. http://dev.splunk.com/view/SP-CAAADQM#onContextChange

But this is the sort of thing I use what Sideview Utils calls a "custom behavior" for. In Sideview Utils there is a CustomBehavior module, and there is also a customBehavior param on every module. The former is safe to use if you know the basic methods of AbstractModule somewhat well. The latter is only safe to use if you know the specific Sideview module's methods very well.

The docs for custom behaviors are somewhat hidden but you can find a link to them on the 'Tools' page in Sideview Utils. However again, the key prerequisite for success concerns the workings of the module framework methods.

But pressing on, the simplest way I can think of is to nest your HTML module inside a CustomBehavior module, give that CustomBehavior module a 'customBehavior' param value of "onlyShowAfterSearchStarts", and then put the following code into application.js. Whether that's simple enough to be worth using, I dont know - It's certainly up to you.

// avoid throwing exceptions on views that dont have the SideviewUtils module.
if (typeof(Sideview)!="undefined") {
    // need to wait for all the modules to be initialized before we do it.
    $(document).bind("allModulesInitialized",function() {
        // iterates through all modules that specify the given custom behavior.
        Sideview.utils.forEachModuleWithCustomBehavior("onlyShowAfterSearchStarts", function(i,customBehaviorModule) {
            // modules can be shown or hidden by more than one piece of logic. 
            // in the end they are only actually shown if all the 'reasons' say they 
            // can be shown.  This is done by always passing args to show/hide methods.
            var ourReason = "onlyWhenSearchRunning"
            customBehaviorModule.onContextChange = function() {
                this.showDescendants(ourReason);
            }
            // hide it again when something dispatches the next search.
            customBehaviorModule.onBeforeJobDispatched = function() {
                this.hideDescendants(ourReason);
            }
        });
    }
}
link

answered 19 Aug '11, 23:54

nick's gravatar image

nick ♦
14.2k1318
accept rate: 47%

edited 19 Aug '11, 23:59

I'm having some trouble getting this to work; because "application.js" isn't being loaded by my view. Do I have to do something special to get that script to load?

(29 Aug '11, 07:36) Lowell ♦

Doh! I needed a splunkweb restart. (http://splunk-base.splunk.com/answers/24407/applicationjs-not-loading) Now "application.js" is loading, but it doesn't appear to be doing anything. I actually found different workaround that suites my needs; so I'm just going to assume that I'm doing something wrong and just walk away from this for now. (All the warnings with the custom behavior docs have scared me off.) Thanks for your help.

(29 Aug '11, 07:52) Lowell ♦
Post your answer
toggle preview

Copyright © 2005-2012 Splunk, Inc. All rights reserved.