Skip to content

Commit 1d8984f

Browse files
authored
Merge pull request #99 from karthik2804/enable_search
enable search on docs
2 parents 4b6fe67 + 6f12e07 commit 1d8984f

File tree

4 files changed

+118
-51
lines changed

4 files changed

+118
-51
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,12 @@
3939
"scripts": {
4040
"spin": "nodemon --watch content --watch static --watch templates --watch spin-up-hub --ext html,md,rhai,hbs,css,js --verbose --legacy-watch --signal SIGINT --exec 'npm run build-index && npm run build-hub-index && spin up --file spin.toml --quiet --env PREVIEW_MODE=$PREVIEW_MODE'",
4141
"bundle-scripts": "parcel watch static/js/src/main.js --dist-dir static/js --no-source-maps",
42+
"bundle-scripts-ci": "parcel build static/js/src/main.js --dist-dir static/js --no-source-maps",
4243
"styles": "parcel watch static/sass/styles.scss --dist-dir static/css",
4344
"lint-markdown": "npx markdownlint-cli2 content/**/*.md \"#node_modules\"",
4445
"test": "npm run check-broken-links",
4546
"build-index": "node md_parser.mjs --dir=content/ --out=./static/data.json --ignore=./content/api/**/*",
4647
"check-broken-links": ".build/check-broken-links.sh",
4748
"build-hub-index": "node hub_index_generator.mjs --dir=content/api/hub/ --out=./static/hub-index-data.json --ignore=./content/api/hub/get_list.md,"
4849
}
49-
}
50+
}

spin.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ watch = ["content/**/*", "templates/*"]
6262
[component.fileserver-static]
6363
source = "modules/spin_static_fs.wasm"
6464
files = [{ source = "static/", destination = "/" }]
65+
[component.fileserver-static.build]
66+
command = ["npm run bundle-scripts-ci"]
6567

6668
[component.fileserver-downloads]
6769
source = "modules/spin_static_fs.wasm"
@@ -121,4 +123,4 @@ route = "/kubernetes"
121123

122124
[component.redirect-kubernetes]
123125
source = "modules/redirect.wasm"
124-
environment = { DESTINATION = "/deploying", STATUSCODE = "301" }
126+
environment = { DESTINATION = "/deploying", STATUSCODE = "301" }

static/js/main.js

Lines changed: 108 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,6 @@ var _utils = require("./modules/utils");
601601
var _multiTab = require("./modules/multiTab");
602602
var _feedback = require("./modules/feedback");
603603
const { mount } = redom;
604-
605604
document.querySelectorAll('.modal-button').forEach(function(el) {
606605
el.addEventListener('click', function() {
607606
var target = document.querySelector(el.getAttribute('data-target'));
@@ -628,6 +627,7 @@ document.addEventListener("DOMContentLoaded", function() {
628627
(0, _utils.header).init();
629628
hljs.highlightAll();
630629
if (navigator && navigator.clipboard) (0, _utils.addCopyButtons)(navigator.clipboard);
630+
(0, _utils.removeExpiredEvents)();
631631
(0, _utils.addAnchorLinks)();
632632
(0, _utils.scrollSideMenu)();
633633
// changelogFilter()
@@ -638,30 +638,30 @@ document.addEventListener("DOMContentLoaded", function() {
638638
}, 150);
639639
(0, _utils.header).unpin();
640640
}
641-
// (async function() {
642-
// try {
643-
// await (0, _search.setupSearch)();
644-
// mount(document.getElementById("search-button-container"), (0, _search.searchButton));
645-
// mount(document.getElementById("search-modal-container"), (0, _search.searchModal));
646-
// document.onkeydown = function(e) {
647-
// if (e.key == "Escape") (0, _search.searchModal).close();
648-
// if ((e.key == "k" || e.key == "K") && (e.metaKey || e.ctrlKey)) {
649-
// e.preventDefault();
650-
// e.stopPropagation();
651-
// (0, _search.searchModal).open();
652-
// }
653-
// if (e.key == "s" || e.key == "S") {
654-
// let searchBar = document.getElementById("hub-search-input");
655-
// if (searchBar && document.activeElement != searchBar) {
656-
// e.preventDefault();
657-
// searchBar.focus();
658-
// }
659-
// }
660-
// };
661-
// } catch (err) {
662-
// console.error("Could not setup search");
663-
// }
664-
// })();
641+
(async function() {
642+
try {
643+
await (0, _search.setupSearch)();
644+
mount(document.getElementById("search-button-container"), (0, _search.searchButton));
645+
mount(document.getElementById("search-modal-container"), (0, _search.searchModal));
646+
document.onkeydown = function(e) {
647+
if (e.key == "Escape") (0, _search.searchModal).close();
648+
if ((e.key == "k" || e.key == "K") && (e.metaKey || e.ctrlKey)) {
649+
e.preventDefault();
650+
e.stopPropagation();
651+
(0, _search.searchModal).open();
652+
}
653+
if (e.key == "s" || e.key == "S") {
654+
let searchBar = document.getElementById("hub-search-input");
655+
if (searchBar && document.activeElement != searchBar) {
656+
e.preventDefault();
657+
searchBar.focus();
658+
}
659+
}
660+
};
661+
} catch (err) {
662+
console.error("Could not setup search");
663+
}
664+
})();
665665
// Init feedback on docs pages
666666
let feedback = document.getElementById("feedback-wrapper");
667667
if (feedback) (0, _feedback.createFeedbackElement)(feedback);
@@ -912,25 +912,25 @@ class ModalSuggest {
912912
project: "Spin",
913913
link1: [
914914
"Install",
915-
"/spin/install"
915+
"/install"
916916
],
917917
link2: [
918918
"Quickstart",
919-
"/spin/quickstart/"
919+
"/quickstart"
920920
],
921921
link3: [
922922
"Develop",
923-
"/spin/developing"
923+
"/writing-apps"
924924
],
925925
link4: [
926926
"Deploy",
927-
"/spin/deploying-to-fermyon/"
927+
"/deploying"
928928
]
929929
}
930930
];
931931
this.projectRecommendations = list("div.result-section", ProjectRecommendations);
932932
this.projectRecommendations.update(this.projectData);
933-
this.el = el("div.result-section-container", "Suggested Projects", this.projectRecommendations);
933+
this.el = el("div.result-section-container", this.projectRecommendations);
934934
}
935935
}
936936
class SearchModal {
@@ -939,7 +939,7 @@ class SearchModal {
939939
this.modalSearchBar = el("input.modal-search-bar", {
940940
type: "text",
941941
spellcheck: false,
942-
placeholder: "Search Fermyon Developer Home",
942+
placeholder: "Search Spin Docs",
943943
oninput: (function(e) {
944944
this.updateSearch();
945945
}).bind(this)
@@ -1069,15 +1069,18 @@ parcelHelpers.defineInteropFlag(exports);
10691069
parcelHelpers.export(exports, "scrollSideMenu", ()=>scrollSideMenu);
10701070
parcelHelpers.export(exports, "addCopyButtons", ()=>addCopyButtons);
10711071
parcelHelpers.export(exports, "addAnchorLinks", ()=>addAnchorLinks);
1072+
parcelHelpers.export(exports, "changelogFilter", ()=>changelogFilter);
1073+
parcelHelpers.export(exports, "removeExpiredEvents", ()=>removeExpiredEvents);
10721074
parcelHelpers.export(exports, "header", ()=>header);
1073-
1074-
// init headroom for sticky menu on upscroll
1075+
parcelHelpers.export(exports, "blogAd", ()=>blogAd);
10751076
var header = new Headroom(document.querySelector("#topbar"), {
10761077
tolerance: 5,
10771078
offset: 80
10781079
});
1079-
1080-
// init side menu accordions
1080+
var blogAd = new Headroom(document.querySelector("#blogSlogan"), {
1081+
tolerance: 5,
1082+
offset: 300
1083+
});
10811084
function scrollSideMenu() {
10821085
let sidemenu = document.querySelector("aside.menu");
10831086
if (sidemenu) {
@@ -1095,8 +1098,6 @@ function scrollSideMenu() {
10951098
}
10961099
}
10971100
}
1098-
1099-
// copy to clipboard
11001101
const svgCopy = '<svg xmlns="http://www.w3.org/2000/svg" height="24" width="24"viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg>';
11011102
const svgCheck = '<svg aria-hidden="true" height="24" viewBox="0 0 16 16" version="1.1" width="24" data-view-component="true"><path fill-rule="evenodd" fill="#18d1a5" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path></svg>';
11021103
const addCopyButtons = (clipboard)=>{
@@ -1139,8 +1140,6 @@ const addCopyButtons = (clipboard)=>{
11391140
pre.appendChild(button);
11401141
});
11411142
};
1142-
1143-
// add clickable #anchors to markdown titles
11441143
const addAnchorLinks = ()=>{
11451144
const elementsToProcess = document.querySelectorAll(".content h1, .content h2, .content h3, .content h4, .content tr");
11461145
elementsToProcess.forEach((element)=>{
@@ -1173,9 +1172,77 @@ const addAnchorLinks = ()=>{
11731172
});
11741173
});
11751174
};
1175+
function removeExpiredEvents() {
1176+
let events = document.querySelectorAll(".community-highlight .carousel-cell");
1177+
let eventsNumber = events.length;
1178+
if (eventsNumber) events.forEach((k)=>{
1179+
if (k.dataset.expirydate) {
1180+
let eventExpiryDate = new Date(k.dataset.expirydate);
1181+
if (eventExpiryDate < Date.now()) {
1182+
k.remove();
1183+
eventsNumber--;
1184+
}
1185+
}
1186+
});
1187+
else return;
1188+
if (eventsNumber) {
1189+
var elem = document.querySelector('.main-carousel');
1190+
var flkty = new Flickity(elem, {
1191+
// options
1192+
cellAlign: 'left',
1193+
contain: true
1194+
});
1195+
// element argument can be a selector string
1196+
// for an individual element
1197+
var flkty = new Flickity('.main-carousel', {
1198+
});
1199+
} else {
1200+
let eventsCarousel = document.querySelector(".community-highlight");
1201+
eventsCarousel.innerHTML = `
1202+
<article class="community-highlight carousel-cell">
1203+
<a href="#">
1204+
<event>
1205+
<date>
1206+
</date>
1207+
<eventtitle>No upcoming Events
1208+
</eventtitle>
1209+
<p></p>
1210+
<img class="event-logo" />
1211+
</event>
1212+
</a>
1213+
</article>
1214+
`;
1215+
}
1216+
}
1217+
function changelogFilter() {
1218+
let changelogItems = Array.from(document.querySelectorAll(".changelog-item-title"));
1219+
if (changelogItems.length) {
1220+
let changelogTags = new Set([
1221+
"all_features"
1222+
]);
1223+
changelogItems.map((k)=>{
1224+
JSON.parse(k.dataset.tags).forEach((item)=>changelogTags.add(item));
1225+
});
1226+
changelogTags = Array.from(changelogTags);
1227+
let changelogSelect = document.getElementById("changelog-select");
1228+
changelogTags.map((k)=>{
1229+
let opt = document.createElement('option');
1230+
opt.value = k;
1231+
opt.innerHTML = k;
1232+
changelogSelect.appendChild(opt);
1233+
});
1234+
changelogSelect.addEventListener("change", ()=>{
1235+
let selected = changelogSelect.value;
1236+
changelogItems.map((k)=>{
1237+
if (selected != "all_features" && !k.dataset.tags.includes(selected)) {
1238+
console.log(k.parentElement);
1239+
k.parentElement.style.display = "none";
1240+
} else k.parentElement.style.display = "flex";
1241+
});
1242+
});
1243+
}
1244+
}
11761245

1177-
1178-
// tabs for multiple languages
11791246
},{"@parcel/transformer-js/src/esmodule-helpers.js":"j7FRh"}],"1bdXi":[function(require,module,exports,__globalThis) {
11801247
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
11811248
parcelHelpers.defineInteropFlag(exports);
@@ -1318,8 +1385,6 @@ function filterMultitabQuery() {
13181385
return multitabQuery;
13191386
}
13201387

1321-
1322-
// user feedback thumbsup/down vote
13231388
},{"@parcel/transformer-js/src/esmodule-helpers.js":"j7FRh"}],"c5ZDr":[function(require,module,exports,__globalThis) {
13241389
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
13251390
parcelHelpers.defineInteropFlag(exports);

static/js/src/modules/search.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -272,10 +272,10 @@ class ModalSuggest {
272272
this.projectData = [
273273
{
274274
project: "Spin",
275-
link1: ["Install", "/spin/install"],
276-
link2: ["Quickstart", "/spin/quickstart/"],
277-
link3: ["Develop", "/spin/developing"],
278-
link4: ["Deploy", "/spin/deploying-to-fermyon/"],
275+
link1: ["Install", "/install"],
276+
link2: ["Quickstart", "/quickstart"],
277+
link3: ["Develop", "/writing-apps"],
278+
link4: ["Deploy", "/deploying"],
279279
}
280280
];
281281
this.projectRecommendations = list(
@@ -285,7 +285,6 @@ class ModalSuggest {
285285
this.projectRecommendations.update(this.projectData);
286286
this.el = el(
287287
"div.result-section-container",
288-
"Suggested Projects",
289288
this.projectRecommendations,
290289
);
291290
}
@@ -297,7 +296,7 @@ class SearchModal {
297296
this.modalSearchBar = el("input.modal-search-bar", {
298297
type: "text",
299298
spellcheck: false,
300-
placeholder: "Search Fermyon Developer Home",
299+
placeholder: "Search Spin Docs",
301300
oninput: function (e) {
302301
this.updateSearch();
303302
}.bind(this),

0 commit comments

Comments
 (0)