Skip to content

Commit ca75352

Browse files
committed
* responsive-nav: add support for fixed items in ResponsiveNavHelper and update README to reflect changes.
1 parent 55278d7 commit ca75352

3 files changed

Lines changed: 16 additions & 6 deletions

File tree

lib/responsive-nav/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<li class="item nav-item"><a><span class="text">Forum</span></a></li>
2121
<li class="item nav-item"><a><span class="text">Q&A</span></a></li>
2222
<li class="item nav-item"><input type="search" class="form-control mx-2" placeholder="Search"></li>
23-
<li class="item nav-item"><a><span class="text">Feedback</span></a></li>
23+
<li class="item nav-item is-rsh-fixed"><a><span class="text">Feedback</span></a></li>
2424
<li class="item nav-item"><button type="button" class="btn mx-2">Lucky</button></li>
2525
<li class="item nav-item">
2626
<a data-toggle="dropdown" data-items='[{"text":"Life"},{"text":"Share"},{"text":"Feed"}]'><span class="text">Blog</span><span class="caret"></span></a>

lib/responsive-nav/src/types/responsive-nav-helper-props.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export interface ResponsiveNavHelperProps {
99
container?: Selector;
1010
items?: Comparator;
1111
ignoreItems?: Comparator;
12+
fixedItems?: Comparator;
1213
moreDropdown?: Partial<DropdownOptions>;
1314
getContainerSize?: (container: HTMLElement) => number;
1415
getItemSize?: (item: HTMLElement) => number;

lib/responsive-nav/src/vanilla/responsive-nav-helper.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,20 +92,29 @@ export class ResponsiveNavHelper extends Component<ResponsiveNavHelperProps> {
9292
let overflow = false;
9393
this._moreItems = undefined;
9494
this._moreElements = [];
95+
const {fixedItems = '.is-rsh-fixed'} = this.options;
96+
const $fixedItems = fixedItems ? $items.filter(fixedItems) : null;
97+
const fixedItemSet = $fixedItems?.length ? new Set($fixedItems) : null;
98+
if ($fixedItems?.length) {
99+
for (const item of $fixedItems) {
100+
size += this.getItemSize(item);
101+
}
102+
}
95103
for (const item of $items) {
96104
const $item = $(item);
97-
if ($item.hasClass('rsh-more')) {
98-
return;
105+
if ($item.hasClass('rsh-more') || fixedItemSet?.has(item)) {
106+
continue;
99107
}
100108

101109
const opacity = $item.css('opacity');
102110
if (!overflow) {
103111
$item.css({display: 'flex', opacity: 0});
104112
const itemSize = this.getItemSize($item[0] as HTMLElement);
105113
size += itemSize;
106-
if (size > containerSize) {
107-
overflow = true;
108-
}
114+
}
115+
116+
if (size > containerSize) {
117+
overflow = true;
109118
}
110119

111120
if (overflow) {

0 commit comments

Comments
 (0)