From be2a9499c61615df757e433d9c4e187332d59ad5 Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Sat, 2 Mar 2024 20:50:35 +0300 Subject: [PATCH] Some fixes for magprog --- data/magprog/assets/js/main.js | 27 +++---------- data/magprog/assets/js/util.js | 40 +++++++++---------- src/main/kotlin/center/sciprog/Application.kt | 3 +- src/main/kotlin/center/sciprog/spcMasters.kt | 19 +++++---- 4 files changed, 40 insertions(+), 49 deletions(-) diff --git a/data/magprog/assets/js/main.js b/data/magprog/assets/js/main.js index 7e4aecb..6dbd82d 100644 --- a/data/magprog/assets/js/main.js +++ b/data/magprog/assets/js/main.js @@ -20,7 +20,7 @@ }); // Hack: Enable IE flexbox workarounds. - if (browser.name === 'ie') + if (browser.name == 'ie') $body.addClass('is-ie'); // Play initial animations on page load. @@ -57,7 +57,7 @@ var $this = $(this); // External link? Bail. - if ($this.attr('href').charAt(0) !== '#') + if ($this.attr('href').charAt(0) != '#') return; // Deactivate all links. @@ -96,7 +96,7 @@ $section.removeClass('inactive'); // No locked links? Deactivate all links and activate this section's one. - if ($sidebar_a.filter('.active-locked').length === 0) { + if ($sidebar_a.filter('.active-locked').length == 0) { $sidebar_a.removeClass('active'); $this.addClass('active'); @@ -139,7 +139,7 @@ initialize: function () { // Deactivate section. - $(this).addClass('inactive'); + // $(this).addClass('inactive'); }, enter: function () { @@ -160,7 +160,7 @@ $image.css('background-image', 'url(' + $img.attr('src') + ')'); // Set background position. - if (x === $img.data('position')) + if (x = $img.data('position')) $image.css('background-position', x); // Hide . @@ -187,20 +187,5 @@ } }); -})(jQuery); -//From https://www.w3schools.com/howto/howto_js_collapsible.asp -const coll = document.getElementsByClassName("collapsible"); -let i; - -for (i = 0; i < coll.length; i++) { - coll[i].addEventListener("click", function() { - this.classList.toggle("active"); - const content = this.nextElementSibling; - if (content.style.maxHeight){ - content.style.maxHeight = null; - } else { - content.style.maxHeight = content.scrollHeight + "px"; - } - }); -} \ No newline at end of file +})(jQuery); \ No newline at end of file diff --git a/data/magprog/assets/js/util.js b/data/magprog/assets/js/util.js index 75c6f7c..ecf7b37 100644 --- a/data/magprog/assets/js/util.js +++ b/data/magprog/assets/js/util.js @@ -20,8 +20,8 @@ b.push( '' + '' + $this.text() + @@ -42,7 +42,7 @@ $.fn.panel = function(userConfig) { // No elements? - if (this.length === 0) + if (this.length == 0) return $this; // Multiple elements? @@ -153,7 +153,7 @@ href = $a.attr('href'), target = $a.attr('target'); - if (!href || href === '#' || href === '' || href === '#' + id) + if (!href || href == '#' || href == '' || href == '#' + id) return; // Cancel original event. @@ -166,7 +166,7 @@ // Redirect to href. window.setTimeout(function() { - if (target === '_blank') + if (target == '_blank') window.open(href); else window.location.href = href; @@ -287,7 +287,7 @@ if (config.hideOnEscape) $window.on('keydown', function(event) { - if (event.keyCode === 27) + if (event.keyCode == 27) $this._hide(event); }); @@ -307,7 +307,7 @@ return $(this); // No elements? - if (this.length === 0) + if (this.length == 0) return $this; // Multiple elements? @@ -329,8 +329,8 @@ var i = $(this); - if (i.val() === '' - || i.val() === i.attr('placeholder')) + if (i.val() == '' + || i.val() == i.attr('placeholder')) i .addClass('polyfill-placeholder') .val(i.attr('placeholder')); @@ -343,7 +343,7 @@ if (i.attr('name').match(/-polyfill-field$/)) return; - if (i.val() === '') + if (i.val() == '') i .addClass('polyfill-placeholder') .val(i.attr('placeholder')); @@ -356,7 +356,7 @@ if (i.attr('name').match(/-polyfill-field$/)) return; - if (i.val() === i.attr('placeholder')) + if (i.val() == i.attr('placeholder')) i .removeClass('polyfill-placeholder') .val(''); @@ -377,16 +377,16 @@ .replace(/type=password/i, 'type=text') ); - if (i.attr('id') !== '') + if (i.attr('id') != '') x.attr('id', i.attr('id') + '-polyfill-field'); - if (i.attr('name') !== '') + if (i.attr('name') != '') x.attr('name', i.attr('name') + '-polyfill-field'); x.addClass('polyfill-placeholder') .val(x.attr('placeholder')).insertAfter(i); - if (i.val() === '') + if (i.val() == '') i.hide(); else x.hide(); @@ -398,7 +398,7 @@ var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]'); - if (i.val() === '') { + if (i.val() == '') { i.hide(); x.show(); @@ -442,7 +442,7 @@ if (i.attr('name').match(/-polyfill-field$/)) i.attr('name', ''); - if (i.val() === i.attr('placeholder')) { + if (i.val() == i.attr('placeholder')) { i.removeClass('polyfill-placeholder'); i.val(''); @@ -478,7 +478,7 @@ x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]'); - if (i.val() === '') { + if (i.val() == '') { i.hide(); x.show(); } @@ -498,7 +498,7 @@ case 'textarea': i.val(i.attr('defaultValue')); - if (i.val() === '') { + if (i.val() == '') { i.addClass('polyfill-placeholder'); i.val(i.attr('placeholder')); } @@ -538,7 +538,7 @@ $parent = $e.parent(); // No parent? Bail. - if ($parent.length === 0) + if ($parent.length == 0) return; // Not moved? Move it. @@ -552,7 +552,7 @@ $p = $e.prev(); // Couldn't find anything? Means this element's already at the top, so bail. - if ($p.length === 0) + if ($p.length == 0) return; // Move element to top of parent. diff --git a/src/main/kotlin/center/sciprog/Application.kt b/src/main/kotlin/center/sciprog/Application.kt index e156f69..3d6035d 100644 --- a/src/main/kotlin/center/sciprog/Application.kt +++ b/src/main/kotlin/center/sciprog/Application.kt @@ -3,6 +3,7 @@ package center.sciprog import io.ktor.server.application.Application import io.ktor.server.application.call import io.ktor.server.application.install +import io.ktor.server.application.log import io.ktor.server.plugins.forwardedheaders.ForwardedHeaders import io.ktor.server.plugins.forwardedheaders.XForwardedHeaders import io.ktor.server.response.respondRedirect @@ -46,7 +47,7 @@ fun Application.spcModule() { } siteData.forEach { namedData -> - println("${namedData.name}: ${namedData.meta[FileData.FILE_PATH_KEY]}") + log.debug("Loading data {} from {}", namedData.name, namedData.meta[FileData.FILE_PATH_KEY]) } routing { diff --git a/src/main/kotlin/center/sciprog/spcMasters.kt b/src/main/kotlin/center/sciprog/spcMasters.kt index 6595864..e8266f7 100644 --- a/src/main/kotlin/center/sciprog/spcMasters.kt +++ b/src/main/kotlin/center/sciprog/spcMasters.kt @@ -5,6 +5,9 @@ import kotlinx.html.* import space.kscience.dataforge.data.Data import space.kscience.dataforge.data.await import space.kscience.dataforge.data.getByType +import space.kscience.dataforge.io.Binary +import space.kscience.dataforge.io.readWith +import space.kscience.dataforge.io.yaml.YamlMetaFormat import space.kscience.dataforge.meta.Meta import space.kscience.dataforge.meta.get import space.kscience.dataforge.meta.getIndexed @@ -45,7 +48,7 @@ private fun wrapSection( id: String, title: String, sectionContent: FlowContent.() -> Unit, -): MagProgSection = MagProgSection(id, title, "wrapper style1 fullscreen fade-up") { +): MagProgSection = MagProgSection(id, title, "wrapper style1 fullscreen") { div("inner") { h2 { +title } sectionContent() @@ -69,7 +72,7 @@ private val ENROLL_PATH: Name = CONTENT_NODE_NAME + "enroll" private val CONTACTS_PATH: Name = CONTENT_NODE_NAME + "contacts" private val PROGRAM_PATH: Name = CONTENT_NODE_NAME + "program" private val RECOMMENDED_COURSES_PATH: Name = CONTENT_NODE_NAME + "recommendedCourses" -private val PARTNERS_PATH: Name = CONTENT_NODE_NAME + "partners" +private val PARTNERS_PATH: Name = CONTENT_NODE_NAME + "partners.yaml".asName() private val programSection = PageFragment { val programBlock = data.resolveHtmlOrNull(PROGRAM_PATH)!! @@ -90,8 +93,10 @@ private val programSection = PageFragment { private val partners = PageFragment { - //val partnersData: Meta = resolve(PARTNERS_PATH)?.meta ?: Meta.EMPTY - val partnersData: Meta = runBlocking { data.getByType(PARTNERS_PATH)?.await() } ?: Meta.EMPTY + val partnersData: Meta = runBlocking { + //TODO add meta reading step to data preparation + data.getByType(PARTNERS_PATH)?.await()?.readWith(YamlMetaFormat) + } ?: Meta.EMPTY div("inner") { h2 { +"Партнеры" } div("features") { @@ -311,13 +316,13 @@ internal val spcMasters = HtmlSite { static("images") static("common", "") - page{ + page { val sections = listOf( wrapSection(data.resolveHtmlOrNull(INTRO_PATH)!!, "intro"), MagProgSection( id = "partners", title = "Партнеры", - style = "wrapper style3 fullscreen fade-up" + style = "wrapper style3 fullscreen" ) { fragment(partners) }, @@ -332,7 +337,7 @@ internal val spcMasters = HtmlSite { MagProgSection( id = "program", title = "Учебная программа", - style = "wrapper style3 fullscreen fade-up" + style = "wrapper style3 fullscreen" ) { fragment(programSection) },