Skip to content

Commit

Permalink
Remove Stimulus dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
elektronaut committed May 13, 2024
1 parent 050e498 commit 2241d5c
Show file tree
Hide file tree
Showing 11 changed files with 93 additions and 130 deletions.
2 changes: 1 addition & 1 deletion app/assets/builds/pages_core/admin-dist.js

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions app/assets/builds/pages_core/admin-dist.js.map

Large diffs are not rendered by default.

3 changes: 1 addition & 2 deletions app/helpers/pages_core/admin/content_tabs_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ def content_tab_tag(key, content)
class: "content-tab",
id: "content-tab-#{key}",
role: "tabpanel",
data: { tab: key,
"main-target" => "tab" })
data: { tab: key })
end
end
end
Expand Down
22 changes: 0 additions & 22 deletions app/javascript/controllers/EditPageController.ts

This file was deleted.

80 changes: 0 additions & 80 deletions app/javascript/controllers/MainController.ts

This file was deleted.

79 changes: 79 additions & 0 deletions app/javascript/features/contentTabs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import readyHandler from "../lib/readyHandler";

interface WindowState {
tabId: string;
}

function applyTabs() {
const tabLinks: HTMLAnchorElement[] = Array.from(
document.querySelectorAll(".content-tabs li a")
);
const tabs: HTMLDivElement[] = Array.from(
document.querySelectorAll(".content-tab")
);

const showTab = (tab: string | null) => {
tabLinks.forEach((l) => {
const parent = l.parentNode as HTMLUListElement | null;
if (parent) {
if (l.dataset.tab == tab) {
parent.classList.add("current");
} else {
parent.classList.remove("current");
}
}
});

tabs.forEach((t) => {
if (t.dataset.tab == tab) {
t.classList.remove("hidden");
} else {
t.classList.add("hidden");
}
});
};

const changeTab = (evt: MouseEvent) => {
evt.preventDefault();
const link = evt.target as HTMLAnchorElement;
if ("tab" in link.dataset) {
const tab = link.dataset.tab;
showTab(tab);
history.pushState(
{ tabId: tab },
"",
`${window.location.pathname}#${tab}`
);
}
};

const stateHandler = (evt: PopStateEvent) => {
if (evt.state && "tabId" in evt.state) {
const { tabId } = evt.state as WindowState;
showTab(tabId);
}
};

if (tabLinks.length > 0 && tabs.length > 0) {
const tabNames = tabs.map((t) => t.dataset.tab);

tabLinks.forEach((l) => l.addEventListener("click", changeTab));

let initTab: string = null;
const tabExpression = /#(.*)$/;

if (document.location.toString().match(tabExpression)) {
const id = document.location.toString().match(tabExpression)[1];
if (tabNames.indexOf(id) !== -1) {
initTab = id;
}
}

showTab(initTab || tabs[0].dataset.tab);
window.addEventListener("popstate", stateHandler);
}
}

export default function contentTabs() {
readyHandler.ready(applyTabs);
}
11 changes: 3 additions & 8 deletions app/javascript/index.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
import { start as startRails } from "@rails/ujs";
import { Application } from "@hotwired/stimulus";
import "react_ujs";
import { FC } from "react";

import * as Components from "./components";

import EditPageController from "./controllers/EditPageController";
import MainController from "./controllers/MainController";

import RichText from "./features/RichText";
import contentTabs from "./features/contentTabs";

export function registerComponent(name: string, component: FC) {
window[name] = component;
Expand All @@ -19,11 +16,9 @@ export default function startPages() {
for (const name in Components) {
registerComponent(name, Components[name] as FC);
}
RichText.start();

const application = Application.start();
application.register("edit-page", EditPageController);
application.register("main", MainController);
RichText.start();
contentTabs();
}

export * from "./components";
Expand Down
2 changes: 1 addition & 1 deletion app/views/layouts/admin.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
<%= yield :main_wrapper %>
<% else %>
<div class="main-wrapper">
<main data-controller="main">
<main>
<%= render(partial: "layouts/admin/page_header") %>
<%= yield %>
</main>
Expand Down
3 changes: 1 addition & 2 deletions app/views/layouts/admin/_page_header.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@
role="tablist">
<% content_tabs.map do |t| %>
<li id="content-tab-link-<%= t[:key] %>"
data-tab="<%= t[:key] %>"
data-main-target="link">
data-tab="<%= t[:key] %>">
<% if t[:options][:disabled] == true %>
<%= t[:name] %>
<% else %>
Expand Down
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@
},
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"files": ["/dist/**/*"],
"files": [
"/dist/**/*"
],
"dependencies": {
"@fortawesome/fontawesome-free": "^6.2.1",
"@hotwired/stimulus": "^3.2.2",
"@rails/ujs": "^6.1.4-1",
"@types/lodash": "^4.14.194",
"@types/rails__ujs": "^6.0.1",
Expand Down
8 changes: 0 additions & 8 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ __metadata:
resolution: "@anyone-oslo/pages@workspace:."
dependencies:
"@fortawesome/fontawesome-free": "npm:^6.2.1"
"@hotwired/stimulus": "npm:^3.2.2"
"@rails/ujs": "npm:^6.1.4-1"
"@types/lodash": "npm:^4.14.194"
"@types/rails__ujs": "npm:^6.0.1"
Expand Down Expand Up @@ -721,13 +720,6 @@ __metadata:
languageName: node
linkType: hard

"@hotwired/stimulus@npm:^3.2.2":
version: 3.2.2
resolution: "@hotwired/stimulus@npm:3.2.2"
checksum: 10/31b9dc3a36a73b87a30570d6e73d27b387a8f6c3caf934aedc4dc96e5b40dde8fc36d530e16056b3d590b1d31b8a13bc1fca002e83df838f1bf5148b188046de
languageName: node
linkType: hard

"@humanwhocodes/config-array@npm:^0.11.14":
version: 0.11.14
resolution: "@humanwhocodes/config-array@npm:0.11.14"
Expand Down

0 comments on commit 2241d5c

Please sign in to comment.