@@ -28,12 +28,88 @@ $( document ).ready(function() {
2828 $ ( this ) . addClass ( 'selected' ) ;
2929 } ) ;
3030
31+ $ ( document ) . on ( "click" , "#addb-query-history-toggle" , function ( ) {
32+ renderQueryHistoryMenu ( ) ;
33+ } ) ;
34+
35+ $ ( document ) . on ( "click" , ".addb-query-history-item" , function ( e ) {
36+ e . preventDefault ( ) ;
37+ var query = $ ( this ) . data ( "query" ) ;
38+ if ( query != null ) {
39+ $ ( "#query" ) . val ( query ) . focus ( ) ;
40+ }
41+ } ) ;
3142
3243} ) ;
3344
3445var isDatabaseSelected = true ;
3546var isDemoModeEnabled = false ;
3647
48+ var QUERY_HISTORY_STORAGE_KEY = "addb.queryHistory.v1" ;
49+ var QUERY_HISTORY_MAX_ITEMS = 10 ;
50+
51+ function loadQueryHistory ( ) {
52+ try {
53+ if ( ! window . localStorage ) return [ ] ;
54+ var raw = window . localStorage . getItem ( QUERY_HISTORY_STORAGE_KEY ) ;
55+ if ( ! raw ) return [ ] ;
56+ var parsed = JSON . parse ( raw ) ;
57+ if ( ! Array . isArray ( parsed ) ) return [ ] ;
58+ return parsed . filter ( function ( item ) { return typeof item === "string" && item . trim ( ) . length > 0 ; } ) ;
59+ } catch ( e ) {
60+ return [ ] ;
61+ }
62+ }
63+
64+ function saveQueryHistory ( history ) {
65+ try {
66+ if ( ! window . localStorage ) return ;
67+ window . localStorage . setItem ( QUERY_HISTORY_STORAGE_KEY , JSON . stringify ( history ) ) ;
68+ } catch ( e ) {
69+ // ignore (e.g. storage disabled)
70+ }
71+ }
72+
73+ function addQueryToHistory ( query ) {
74+ var normalizedQuery = ( query == null ? "" : String ( query ) ) . trim ( ) ;
75+ if ( ! normalizedQuery ) return ;
76+
77+ var history = loadQueryHistory ( ) ;
78+
79+ for ( var i = history . length - 1 ; i >= 0 ; i -- ) {
80+ if ( history [ i ] === normalizedQuery ) {
81+ history . splice ( i , 1 ) ;
82+ }
83+ }
84+
85+ history . unshift ( normalizedQuery ) ;
86+ if ( history . length > QUERY_HISTORY_MAX_ITEMS ) {
87+ history = history . slice ( 0 , QUERY_HISTORY_MAX_ITEMS ) ;
88+ }
89+ saveQueryHistory ( history ) ;
90+ }
91+
92+ function renderQueryHistoryMenu ( ) {
93+ var menu = $ ( "#addb-query-history-menu" ) ;
94+ if ( ! menu . length ) return ;
95+
96+ menu . empty ( ) ;
97+
98+ var history = loadQueryHistory ( ) ;
99+ if ( ! history . length ) {
100+ menu . append ( $ ( "<li>" , { "class" : "disabled" } ) . append ( $ ( "<a>" , { href : "#" , tabindex : - 1 } ) . text ( "No recent queries" ) ) ) ;
101+ return ;
102+ }
103+
104+ for ( var i = 0 ; i < history . length ; i ++ ) {
105+ menu . append (
106+ $ ( "<li>" ) . append (
107+ $ ( "<a>" , { href : "#" , "class" : "addb-query-history-item" } ) . text ( history [ i ] ) . data ( "query" , history [ i ] )
108+ )
109+ ) ;
110+ }
111+ }
112+
37113function shouldUseDemoData ( ) {
38114 try {
39115 var search = window . location . search || "" ;
@@ -197,6 +273,8 @@ function queryFunction() {
197273 return ;
198274 }
199275
276+ addQueryToHistory ( query ) ;
277+
200278 $ . ajax ( { url : "query?query=" + escape ( query ) , success : function ( result ) {
201279
202280 result = JSON . parse ( result ) ;
0 commit comments