Skip to content

Commit eff100b

Browse files
author
Andrej Grlica
committed
For release 2.1 changes
1 parent 017d9e2 commit eff100b

File tree

4 files changed

+274
-219
lines changed

4 files changed

+274
-219
lines changed

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,19 @@ https://apex.oracle.com/pls/apex/f?p=111583
99
![](https://raw.githubusercontent.com/grlicaa/SearchNavigationMenu/master/docs/Preview2.gif)
1010

1111
## Change log
12+
V 2.1.
13+
<ul>
14+
<li>Fixed FocusOnLoad problem <a href="https://github.com/grlicaa/SearchNavigationMenu/issues/3" target="_blank">#3</a>.</li>
15+
<li>Fixed sub menus problem (Hide/Show child) <a href="https://github.com/grlicaa/SearchNavigationMenu/issues/7" target="_blank">#7</a>.</li>
16+
<li>Fixed bug on IE ".startsWidth" <a href="https://github.com/grlicaa/SearchNavigationMenu/issues/4" target="_blank">#4</a>.</li>
17+
<li>On IE now users can use clear imput property.</li>
18+
</ul>
19+
For upgrading to new version of SNM 2.1, please add next two following lines to your "Options"<br>
20+
<pre>
21+
"OnSearchShowChildren":true,
22+
"UseFocus":true,
23+
</pre>
24+
1225
V 2.0.
1326
<ul>
1427
<li>Added "Shortcuts": URL based search</li>

apexplugin.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name" : "Search Navigation Menu",
3-
"version" : "2.0",
3+
"version" : "2.1",
44
"description" : "Oracle Application Express item Plug-in for search on Navigation Menu.",
55
"keywords" : ["search", "navigation", "menu", "list", "shortcut", "shortcuts"],
66
"homepage" : "https://github.com/grlicaa/SearchNavigationMenu",
@@ -17,7 +17,7 @@
1717
"oracle" : {
1818
"versions" : ["12.2.0.1", "12.1.0.1", "11.2.0.1"],
1919
"apex" : {
20-
"versions" : ["5.0.0", "5.0.1", "5.0.2", "5.0.3", "5.0.4", "5.1.0", "5.1.1", "5.1.2", "5.1.3"],
20+
"versions" : ["5.0.0", "5.0.1", "5.0.2", "5.0.3", "5.0.4", "5.1.0", "5.1.1", "5.1.2", "5.1.3", "5.1.4", "18.1", "18.2"],
2121
"plugin" : {
2222
"internalName" : "si.abakus.searchnavigationmenu",
2323
"type" : "item",

docs/searchNavMenu.js

Lines changed: 73 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
/*! searchNavMenu.js v2.0 | ABAKUS PLUS d.o.o. | Andrej Grlica | andrej.grlica@abakus.si */
2-
1+
/*! searchNavMenu.js v2.1 | ABAKUS PLUS d.o.o. | Andrej Grlica | andrej.grlica@abakus.si */
32
/* ==========================================================================
43
54
Description:
@@ -24,6 +23,8 @@ var SNMOptions =
2423
"SaveSS": true,
2524
"ShortcutSaveSS": false,
2625
"ShrtCaseSensitive": true,
26+
"OnSearchShowChildren": true,
27+
"UseFocus":true,
2728
"Shortcuts": []
2829
};
2930

@@ -39,39 +40,56 @@ function openModalSNMHelp() {
3940
openModalSNM("SNM_Help", getHelpSNM());
4041
}
4142

43+
function openSNMChildrenIfExists() {
44+
if (SNMOptions.OnSearchShowChildren)
45+
$('li[id^="t_TreeNav"].is-expandable[style="display: block;"]').children("ul").children("li").each(function () {
46+
if ($(this).has( "strong" ).length || ($(this).has( "ul" ).length == false && $(this).has( "strong" ).length == false))
47+
$(this).css("display", "block");
48+
});
49+
$('li[id^="t_TreeNav"].is-collapsible[style="display: block;"]').children("ul").children("li").each(function () {
50+
if ($(this).has( "strong" ).length || ($(this).has( "ul" ).length == false && $(this).has( "strong" ).length == false))
51+
$(this).css("display", "block");
52+
});
53+
}
54+
4255
function LoadSearchNavMenu(item_id, menuOptions, ajaxIdentifier, l_skey, elmVal) {
4356
if (menuOptions)
4457
SNMOptions = menuOptions;
4558

46-
SNMOptions.ajaxId = ajaxIdentifier;
47-
SNMOptions.ItemId = item_id;
59+
SNMOptions.ajaxId = ajaxIdentifier;
60+
SNMOptions.ItemId = item_id;
4861
if (SNMOptions.MenuClickOpenClose)
4962
$("#t_Body_nav #t_TreeNav").on("click", "ul li.a-TreeView-node div.a-TreeView-content:not(:has(a))", function() {
5063
$(this).prev("span.a-TreeView-toggle").click();
51-
});
64+
});
5265

5366
if (SNMOptions.SaveSS)
54-
$("input.srch_input").val(elmVal);
67+
$("input.srch_input").val(elmVal);
5568

56-
// Add events on items
69+
//Add events on items
5770
//----- KeyDOWN
5871
$("input.srch_input").keydown(function(e) {
5972
keyDownSearchNav($(this), e);
60-
// Display children under parent node. This can be removed.
61-
$('li[id^="t_TreeNav"].is-expandable[style="display: block;"]').children("ul").children("li").each(function () {$(this).css("display", "block"); });
73+
//openSNMChildrenIfExists();
6274
});
6375

6476
//----- KeyUP
6577
$("input.srch_input").keyup(function(e, pageEvent) {
6678
keyUpSearchNav($(this), e, pageEvent);
67-
// Display children under parent node. This can be removed.
68-
$('li[id^="t_TreeNav"].is-expandable[style="display: block;"]').children("ul").children("li").each(function () {$(this).css("display", "block"); });
69-
});
79+
});
7080

81+
82+
//----- Clear field IE problem, it's not on KEYUP
83+
$("input.srch_input").bind('input propertychange', function(e, pageEvent) {
84+
if (this.value == "") {
85+
setCurrentNav(item_id);
86+
if (!pageEvent)
87+
saveSesSateNav("");
88+
}
89+
});
90+
7191
//----- Click on input bar, prevent default "Chrome problem".
72-
$("input.srch_input").on("click", function(e) {
73-
e.preventDefault(); return false;
74-
});
92+
$("input.srch_input").on("click", function(e){e.preventDefault(); return false;});
7593

7694
apex.jQuery(window).on("apexwindowresized", function(e) {
7795
onResizeWinSearchNav();
@@ -84,7 +102,7 @@ function LoadSearchNavMenu(item_id, menuOptions, ajaxIdentifier, l_skey, elmVal)
84102
shortCutSearchNav(e, l_skey);
85103
});
86104

87-
addModalSNM("SNM_Help", "Search Navigation Menu Help");
105+
addModalSNM("SNM_Help", "Search Navigation Menu HELP");
88106

89107
//---- On document ready
90108
$(function() {
@@ -93,14 +111,14 @@ function LoadSearchNavMenu(item_id, menuOptions, ajaxIdentifier, l_skey, elmVal)
93111
SNMClosed=true;
94112
openAllNavSubmenus();
95113
$('li[id^="t_TreeNav"].is-collapsible').find('span.a-TreeView-toggle').click();
96-
//Because all list were open and last one closed, we need to open current list
114+
//Because all list were open and last one closed we need to open current list
97115
setCurrentNav(item_id);
98-
116+
99117
if (SNMOptions.MenuOpen)
100118
showAllSublistsSearchNav();
101-
102-
currItem.focus();
103-
119+
120+
if (SNMOptions.UseFocus)
121+
currItem.focus();
104122
});
105123
}
106124

@@ -116,13 +134,16 @@ function openAllNavSubmenus(elm) {
116134

117135
function setCurrentNav(item_id) {
118136
$('li[id^="t_TreeNav"]').each( function(){
119-
if ($(this).find("div.a-TreeView-content").hasClass("is-current")) {
120-
$(this).find("div.a-TreeView-row").addClass("is-selected");
137+
if ($(this).find("div.a-TreeView-content:first").hasClass("is-current")) {
138+
$(this).find("div.a-TreeView-row:first").addClass("is-selected");
121139
if ($(this).hasClass("is-expandable"))
122-
$(this).find("span.a-TreeView-toggle").click();
140+
$(this).find("span.a-TreeView-toggle:first").click();
123141
}
142+
else if ($(this).find("div.a-TreeView-content:first").hasClass("is-current--top")) {
143+
$(this).find("span.a-TreeView-toggle:first").click();
144+
}
124145
else
125-
$(this).find("div.a-TreeView-row").removeClass("is-selected");
146+
$(this).find("div.a-TreeView-row:first").removeClass("is-selected");
126147
});
127148
if (SNMClosed)
128149
$('#t_Button_navControl').click();
@@ -144,7 +165,7 @@ function isNavTreeOpen() {
144165
function redirectUrlSNM(redirectURL, pNewWindow) {
145166
if (redirectURL && !pNewWindow) {
146167
window.location.href = redirectURL;
147-
if (!SNMOptions.ShortcutSaveSS && redirectURL.toLowerCase().startsWith('javascript:')) {
168+
if (!SNMOptions.ShortcutSaveSS && redirectURL.toLowerCase().indexOf("javascript:") == 0) {
148169
$("input.srch_input").val("");
149170
setCurrentNav(SNMOptions.ItemId);
150171
}
@@ -170,7 +191,7 @@ function saveSesSateNav(newVal, redirectURL, pNewWindow) {
170191
redirectUrlSNM(redirectURL, pNewWindow);
171192
}
172193
else
173-
apex.debug.error("Saving the session state for Search Navigation failed: "+JSON.stringify(pData) );
194+
apex.debug.error("Saving the session state for Search Navigation failed: "+JSON.stringify(pData) );
174195
},
175196
error: function( pData ) {
176197
apex.debug.error("Saving the session state for Search Navigation failed: "+JSON.stringify(pData) );
@@ -255,7 +276,7 @@ function parseSNMShortcut(obj, elmVal) {
255276
l_clearCache = l_page_id;
256277

257278
if (obj.action.toLowerCase() == "page" && !elmVal)
258-
retURL = "f?p="+$v("pFlowId")+":"+l_page_id+":"+$v("pInstance")+"::NO:"+l_clearCache+"::"
279+
retURL = "f?p="+$v("pFlowId")+":"+l_page_id+":"+$v("pInstance")+":::"+l_clearCache+"::"
259280
else if (obj.action.toLowerCase() == "url" && !elmVal) {
260281
if (obj.url)
261282
retURL = obj.url;
@@ -285,19 +306,19 @@ function parseSNMShortcut(obj, elmVal) {
285306
l_clearCache = obj.IR_clearCache;
286307
}
287308
if (elmVal)
288-
retURL = "f?p="+$v("pFlowId")+":"+l_page_id+":"+$v("pInstance")+"::NO:"+l_clearCache+":"+ir_link+":"+elmVal;
309+
retURL = "f?p="+$v("pFlowId")+":"+l_page_id+":"+$v("pInstance")+":::"+l_clearCache+":"+ir_link+":"+elmVal;
289310
else
290311
if ("IR_value" in obj)
291-
retURL = "f?p="+$v("pFlowId")+":"+l_page_id+":"+$v("pInstance")+"::NO:"+l_clearCache+":"+ir_link+":"+obj.IR_value;
312+
retURL = "f?p="+$v("pFlowId")+":"+l_page_id+":"+$v("pInstance")+":::"+l_clearCache+":"+ir_link+":"+obj.IR_value;
292313
}
293314
else if (obj.action.toLowerCase() == "item") {
294315
if (elmVal) {
295316
if ("item_name" in obj)
296-
retURL = "f?p="+$v("pFlowId")+":"+l_page_id+":"+$v("pInstance")+"::NO:"+l_clearCache+":"+obj.item_name+":"+elmVal;
317+
retURL = "f?p="+$v("pFlowId")+":"+l_page_id+":"+$v("pInstance")+":::"+l_clearCache+":"+obj.item_name+":"+elmVal;
297318
}
298319
else
299320
if ("item_name" in obj && "item_value" in obj)
300-
retURL = "f?p="+$v("pFlowId")+":"+l_page_id+":"+$v("pInstance")+"::NO:"+l_clearCache+":"+obj.item_name+":"+obj.item_value;
321+
retURL = "f?p="+$v("pFlowId")+":"+l_page_id+":"+$v("pInstance")+":::"+l_clearCache+":"+obj.item_name+":"+obj.item_value;
301322
}
302323
}
303324
if (retURL)
@@ -341,8 +362,8 @@ function checkAndRedirectSNM(elm) {
341362
if ((SNMOptions.Shortcuts[i].name == elmVal && caseSensitive) || (SNMOptions.Shortcuts[i].name.toLowerCase() == elmVal.toLowerCase() && !caseSensitive)) {
342363
find_shortcut = redirectSNM(SNMOptions.Shortcuts[i]);
343364
}
344-
else if ((elmVal.startsWith(SNMOptions.Shortcuts[i].name+":") && caseSensitive) ||
345-
(elmVal.toLowerCase().startsWith(SNMOptions.Shortcuts[i].name.toLowerCase()+":") && !caseSensitive)) {
365+
else if ((elmVal.indexOf(SNMOptions.Shortcuts[i].name+":") == 0 && caseSensitive) ||
366+
(elmVal.toLowerCase().indexOf(SNMOptions.Shortcuts[i].name.toLowerCase()+":") == 0 && !caseSensitive)) {
346367
find_shortcut = redirectSNM(SNMOptions.Shortcuts[i], true, elmVal);
347368
}
348369
if (find_shortcut) { break; }
@@ -352,22 +373,21 @@ function checkAndRedirectSNM(elm) {
352373
find_shortcut = redirectSNM();
353374
}
354375

355-
/* EVENTS */
376+
/* EVENTS........ */
356377

357378
function addModalSNM(name, title) {
358379
$('body').append('<div id="'+name+'" />')
359380

360381
$("#"+name).dialog(
361-
{
362-
"modal" : true,
363-
"title" : title,
364-
"autoOpen":false,
365-
"resizable":true,
366-
"dialogClass": "no-close srch_modal",
367-
"width" : '500px',
368-
"closeOnEscape" : true,
369-
buttons: {
370-
"Close": function () {
382+
{"modal":true
383+
,"title":title
384+
,"autoOpen":false
385+
,"resizable":true
386+
,"dialogClass":"no-close srch_modal"
387+
,"width":'500px'
388+
,"closeOnEscape":true
389+
,buttons : {
390+
"Close" : function () {
371391
$(this).dialog("close");
372392
}
373393
}
@@ -385,11 +405,11 @@ function openModalSNM(name, p_msg) {
385405
function getHelpSNM() {
386406
var l_return = "<h3>Shortcuts :</h3>";
387407
l_return +="<table>";
388-
l_return +="<tr><td class=\"td_right\"><strong>CTRL+"+SNMOptions.skey+" :</strong></td><td colspan=\"4\">Focus on Search Box</td></tr>";
389-
l_return +="<tr><td class=\"td_right\"><strong>F1:</strong></td><td colspan=\"4\">Opens the Search Navigation Menu help.</td></tr>";
408+
l_return +="<tr><td class=\"td_right\"><strong>CTRL+"+SNMOptions.skey+" :</strong></td><td colspan=\"4\">Focus on search box item</td></tr>";
409+
l_return +="<tr><td class=\"td_right\"><strong>F1 :</strong></td><td colspan=\"4\">Opens search navigation menu help page</td></tr>";
390410

391411
if (!jQuery.isEmptyObject(SNMOptions.Shortcuts)) {
392-
l_return +="<tr class=\"tr_bg\"><td>Shortcut Label</td><td>Type</td><td>Condition</td><td>Example (type in)</td></tr>";
412+
l_return +="<tr class=\"tr_bg\"><td>Shortcut label</td><td>Type</td><td>Condition</td><td>Example (type in)</td></tr>";
393413
for(var i=0; i<SNMOptions.Shortcuts.length; i++) {
394414
l_return +="<tr><td><strong>"+SNMOptions.Shortcuts[i].name+"</strong></td><td>"+SNMOptions.Shortcuts[i].action+"</td>";
395415
l_return +="<td>";
@@ -505,7 +525,10 @@ function keyUpSearchNav(elm, e, pageEvent) {
505525
if (!pageEvent)
506526
saveSesSateNav(elmVal);
507527
hoverSearchNav();
508-
$f_First_field();
528+
openSNMChildrenIfExists();
529+
if (SNMOptions.UseFocus)
530+
$f_First_field();
531+
509532
}
510533
}
511534

@@ -527,4 +550,4 @@ function onResizeWinSearchNav() {
527550
if (!isNavTreeOpen())
528551
hideAllSublistsSearchNav();
529552
}
530-
}
553+
}

0 commit comments

Comments
 (0)