Add a clear button to the tag / branch filter input fields; simplify
the jQuery code a bit.
This commit is contained in:
		| @@ -8,29 +8,35 @@ | ||||
| {literal} | ||||
| $(document).ready(function() { | ||||
|   $("input.filter-list").each(function() { | ||||
|     var lists = $("ul#" + $(this).attr("rel")); | ||||
|     var input = $(this); | ||||
|     var lists = $("ul#" + input.attr("rel")); | ||||
|     if (lists.length == 0) | ||||
|       return; | ||||
|     var list = $(lists[0]); | ||||
|     var wrapper = input.parent(); | ||||
|  | ||||
|     // a list should contain a reasonable amount of items | ||||
|     // to be filterable - we also give the filter input a | ||||
|     // special class here so we recognize it later in case | ||||
|     // we have to hide it when the list view is collapsed | ||||
|     if (list.children("li").length > 10) { | ||||
|       $(this).addClass("activated"); | ||||
|       $(this).focus(function() { | ||||
|       wrapper.addClass("activated"); | ||||
|       input.focus(function() { | ||||
|         // ensure that the parent of the list keeps activated / opened | ||||
|         list.parent().addClass("activated"); | ||||
|         if ($(this)[0].value == $(this).attr("title")) | ||||
|           $(this).attr("value", "").removeClass("default"); | ||||
|         if (input.attr("value") == input.attr("title")) { | ||||
|           input.attr("value", ""); | ||||
|           wrapper.removeClass("default"); | ||||
|         } | ||||
|       }); | ||||
|       $(this).blur(function() { | ||||
|       input.blur(function() { | ||||
|         list.parent().removeClass("activated"); | ||||
|         if ($(this)[0].value.length == 0) | ||||
|           $(this).attr("value", $(this).attr("title")).addClass("default"); | ||||
|         if (input.attr("value").length == 0) { | ||||
|           input.attr("value", input.attr("title")); | ||||
|           wrapper.addClass("default"); | ||||
|         } | ||||
|       }); | ||||
|       $(this).keyup(function(ev) { | ||||
|       input.keyup(function(ev) { | ||||
|         var filter = $(this)[0]; | ||||
|         list.children("li").css('display', 'block'); | ||||
|         list.children("li").filter(function(index) { | ||||
| @@ -41,9 +47,11 @@ $(document).ready(function() { | ||||
|           return true; | ||||
|         }).css('display', 'none'); | ||||
|       }); | ||||
|       wrapper.children('span').click(function() { | ||||
|         input.val('').keyup().blur(); | ||||
|       }); | ||||
|       // initialize it with the default | ||||
|       $(this)[0].value = ""; | ||||
|       $(this).blur(); | ||||
|       input.val('').blur(); | ||||
|     } | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -4,7 +4,10 @@ | ||||
| <div class="gradient"></div> | ||||
| <h1> | ||||
|   {trans 'Branches'} | ||||
|   <input type="text" rel="branch-list" class="filter-list"  title="{trans 'filter branches'}" /> | ||||
|   <div class="input-with-delete"> | ||||
|     <input type="text" rel="branch-list" class="filter-list"  title="{trans 'filter branches'}" /> | ||||
|     <span></span> | ||||
|   </div> | ||||
| </h1> | ||||
| <ul id="branch-list"> | ||||
| {foreach $branches as $selector => $branch} | ||||
| @@ -17,7 +20,10 @@ | ||||
| {if $tags} | ||||
| <h1> | ||||
|   {trans 'Tags'} | ||||
|   <input type="text" rel="tag-list" class="filter-list" title="{trans 'filter tags'}" /> | ||||
|   <div class="input-with-delete"> | ||||
|     <input type="text" rel="tag-list" class="filter-list"  title="{trans 'filter tags'}" /> | ||||
|     <span></span> | ||||
|   </div> | ||||
| </h1> | ||||
| <ul id="tag-list"> | ||||
| {foreach $tags as $selector => $tag} | ||||
|   | ||||
| @@ -4,12 +4,15 @@ | ||||
| <div class="gradient"></div> | ||||
| <h1> | ||||
|   {trans 'Branches'} | ||||
|   <input type="text" rel="branch-list" class="filter-list"  title="{trans 'filter branches'}" /> | ||||
|   <div class="input-with-delete"> | ||||
|     <input type="text" rel="branch-list" class="filter-list"  title="{trans 'filter branches'}" /> | ||||
|     <span></span> | ||||
|   </div> | ||||
| </h1> | ||||
| <ul id="branch-list"> | ||||
| {foreach $branches as $selector => $branch} | ||||
| {aurl 'url', 'IDF_Views_Source::treeBase', array($project.shortname, $selector)} | ||||
| <li class="{if in_array($branch, $tree_in)}active{/if}"> | ||||
| <li class="{if in_array($selector, $tree_in)}active{/if}"> | ||||
|   <a href="{$url}" class="label">{$branch}</a> | ||||
| </li> | ||||
| {/foreach} | ||||
| @@ -17,12 +20,15 @@ | ||||
| {if $tags} | ||||
| <h1> | ||||
|   {trans 'Tags'} | ||||
|   <input type="text" rel="tag-list" class="filter-list" title="{trans 'filter tags'}" /> | ||||
|   <div class="input-with-delete"> | ||||
|     <input type="text" rel="tag-list" class="filter-list"  title="{trans 'filter tags'}" /> | ||||
|     <span></span> | ||||
|   </div> | ||||
| </h1> | ||||
| <ul id="tag-list"> | ||||
| {foreach $tags as $selector => $tag} | ||||
| {aurl 'url', 'IDF_Views_Source::treeBase', array($project.shortname, $selector)} | ||||
| <li class="{if in_array($tag, $tags_in)}active{/if}"> | ||||
| <li class="{if in_array($selector, $tags_in)}active{/if}"> | ||||
|   <a href="{$url}" class="label">{$tag}</a> | ||||
| </li> | ||||
| {/foreach} | ||||
|   | ||||
| @@ -19,33 +19,46 @@ | ||||
| </table> | ||||
| {aurl 'url', 'IDF_Views_Source::getFile', array($project.shortname, $commit, $fullpath)} | ||||
| <p class="right soft"><a href="{$url}"><img style="vertical-align: text-bottom;" src="{media '/idf/img/package-grey.png'}" alt="{trans 'Archive'}" align="bottom" /></a> <a href="{$url}">{trans 'Download this file'}</a></p> | ||||
|  | ||||
| {/block} | ||||
| {block context} | ||||
| <p><strong>{trans 'Branches:'}</strong><br/> | ||||
| {foreach $branches as $selector => $branch} | ||||
| {aurl 'url', 'IDF_Views_Source::treeBase', array($project.shortname, $selector)} | ||||
| <span class="label{if in_array($branch, $tree_in)} active{/if}"> | ||||
|     <a href="{$url}" class="label" title="{$branch}"> | ||||
|         {$branch|shorten:25} | ||||
|     </a> | ||||
| </span><br/> | ||||
| {/foreach} | ||||
| </p> | ||||
| {if $tags} | ||||
| <p><strong>{trans 'Tags:'}</strong><br/> | ||||
| {foreach $tags as $selector => $tag} | ||||
| {aurl 'url', 'IDF_Views_Source::treeBase', array($project.shortname, $selector)} | ||||
| <span class="label{if in_array($tag, $tags_in)} active{/if}"> | ||||
|     <a href="{$url}" class="label" title="{$tag}"> | ||||
|         {$tag|shorten:25} | ||||
|     </a> | ||||
| </span><br/> | ||||
| {/foreach} | ||||
| </p> | ||||
| {/if} | ||||
| {/block} | ||||
| {block javascript} | ||||
| <script type="text/javascript" src="{media '/idf/js/prettify.js'}"></script> | ||||
| <script type="text/javascript">prettyPrint();</script> | ||||
| {/block} | ||||
| {block context} | ||||
| <div class="expander"> | ||||
| <div class="gradient"></div> | ||||
| <h1> | ||||
|   {trans 'Branches'} | ||||
|   <div class="input-with-delete"> | ||||
|     <input type="text" rel="branch-list" class="filter-list"  title="{trans 'filter branches'}" /> | ||||
|     <span></span> | ||||
|   </div> | ||||
| </h1> | ||||
| <ul id="branch-list"> | ||||
| {foreach $branches as $selector => $branch} | ||||
| {aurl 'url', 'IDF_Views_Source::treeBase', array($project.shortname, $selector)} | ||||
| <li class="{if in_array($selector, $tree_in)}active{/if}"> | ||||
|   <a href="{$url}" class="label">{$branch}</a> | ||||
| </li> | ||||
| {/foreach} | ||||
| </ul> | ||||
| {if $tags} | ||||
| <h1> | ||||
|   {trans 'Tags'} | ||||
|   <div class="input-with-delete"> | ||||
|     <input type="text" rel="tag-list" class="filter-list"  title="{trans 'filter tags'}" /> | ||||
|     <span></span> | ||||
|   </div> | ||||
| </h1> | ||||
| <ul id="tag-list"> | ||||
| {foreach $tags as $selector => $tag} | ||||
| {aurl 'url', 'IDF_Views_Source::treeBase', array($project.shortname, $selector)} | ||||
| <li class="{if in_array($selector, $tags_in)}active{/if}"> | ||||
|   <a href="{$url}" class="label">{$tag}</a> | ||||
| </li> | ||||
| {/foreach} | ||||
| </ul> | ||||
| {/if} | ||||
| </div> | ||||
| {/block} | ||||
|  | ||||
|   | ||||
| @@ -51,15 +51,16 @@ | ||||
| <a href="{$url}"><img style="vertical-align: text-bottom;" src="{media '/idf/img/package-grey.png'}" alt="{trans 'Archive'}" align="bottom" /></a> <a href="{$url}">{trans 'Download this version'}</a> {trans 'or'} | ||||
| <kbd>mtn clone {$project.getSourceAccessUrl($user, $commit)}</kbd> <a href="{url 'IDF_Views_Source::help', array($project.shortname)}"><img style="vertical-align: text-bottom;" src="{media '/idf/img/help.png'}" alt="{trans 'Help'}" /></a> | ||||
| </p> | ||||
|  | ||||
|  | ||||
| {/block} | ||||
| {block context} | ||||
| <div class="expander"> | ||||
| <div class="gradient"></div> | ||||
| <h1> | ||||
|   {trans 'Branches'} | ||||
|   <input type="text" rel="branch-list" class="filter-list"  title="{trans 'filter branches'}" /> | ||||
|   <div class="input-with-delete"> | ||||
|     <input type="text" rel="branch-list" class="filter-list"  title="{trans 'filter branches'}" /> | ||||
|     <span></span> | ||||
|   </div> | ||||
| </h1> | ||||
| <ul id="branch-list"> | ||||
| {foreach $branches as $selector => $branch} | ||||
| @@ -72,7 +73,10 @@ | ||||
| {if $tags} | ||||
| <h1> | ||||
|   {trans 'Tags'} | ||||
|   <input type="text" rel="tag-list" class="filter-list"  title="{trans 'filter tags'}" /> | ||||
|   <div class="input-with-delete"> | ||||
|     <input type="text" rel="tag-list" class="filter-list"  title="{trans 'filter tags'}" /> | ||||
|     <span></span> | ||||
|   </div> | ||||
| </h1> | ||||
| <ul id="tag-list"> | ||||
| {foreach $tags as $selector => $tag} | ||||
| @@ -85,3 +89,4 @@ | ||||
| {/if} | ||||
| </div> | ||||
| {/block} | ||||
|  | ||||
|   | ||||
| @@ -918,24 +918,41 @@ ol > li { | ||||
|   display: none; | ||||
| } | ||||
|  | ||||
| .context > .expander input.filter-list { | ||||
| .context > .expander div.input-with-delete { | ||||
|   padding: 1px; | ||||
|   border: 1px dotted #474747; | ||||
|   display: none; | ||||
|   float: right; | ||||
|   margin-left: 10px; | ||||
|   margin-top: -3px; | ||||
| } | ||||
|  | ||||
| .context > .expander div.input-with-delete * { | ||||
|   vertical-align: middle; | ||||
| } | ||||
|  | ||||
| .context > .expander div.input-with-delete span { | ||||
|   display: inline-block; | ||||
|   width: 13px; | ||||
|   height: 12px; | ||||
|   background: url(../img/clear.png) left top no-repeat; | ||||
|   cursor: pointer; | ||||
| } | ||||
|  | ||||
| .context > .expander div.input-with-delete input.filter-list { | ||||
|   font-size: 11px; | ||||
|   font-weight: normal; | ||||
|   color: #333; | ||||
|   border: 1px dotted #474747; | ||||
|   margin-left: 10px; | ||||
|   padding: 2px; | ||||
|   width: 80px; | ||||
|   display: none; | ||||
|   float: right; | ||||
|   border: 0; | ||||
|   width: 100px; | ||||
|   height: 11px; | ||||
| } | ||||
|  | ||||
| .context > .expander:hover input.filter-list.activated, | ||||
| .context > .expander.activated input.filter-list.activated { | ||||
| .context > .expander:hover div.input-with-delete.activated, | ||||
| .context > .expander.activated div.input-with-delete.activated { | ||||
|   display: block; | ||||
| } | ||||
|  | ||||
| .context > .expander input.filter-list.default { | ||||
|   color: #aaa; | ||||
|   border-color: #aaa; | ||||
| .context > .expander div.input-with-delete.default { | ||||
|   opacity: 0.5; | ||||
| } | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								www/media/idf/img/clear.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								www/media/idf/img/clear.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 636 B | 
		Reference in New Issue
	
	Block a user