PublishingJS:TheNewSocial: Difference between revisions

From H&D Publishing Wiki
No edit summary
No edit summary
 
(23 intermediate revisions by the same user not shown)
Line 1: Line 1:
const origin = window.location.origin
const origin = window.location.origin
const title = "TheNewSocial"
const title = "TheNewSocial"
const wikilink_rel = "mw:WikiLink"


document.onreadystatechange = function () {
document.onreadystatechange = function () {
Line 6: Line 7:
console.log( 'Hello from PublishingJS namespace!' )
console.log( 'Hello from PublishingJS namespace!' )
make_case_studies_header()
make_case_studies_collapsible()
make_case_studies_collapsible()
make_principles_collapsible()
make_principles_collapsible()
hashify_all_wikilinks()
shuffle_worker_ants()
give_galleries_buttons()


}
}


Line 21: Line 25:
}
}


function make_case_studies_header() {
const toctitle = document.querySelector( '.toctitle h2' )
if ( toctitle ) {
toctitle.innerText = 'Case Studies'
}
}


function make_case_studies_collapsible() {
function make_case_studies_collapsible() {
const nav_links = $('#toc a');
const nav_links = $('#toc a, #Principles a')
window.onhashchange = function() {
window.onhashchange = function() {
    for (let i = 0; i < nav_links.length; i++) {
    for (let i = 0; i < nav_links.length; i++) {
        if (nav_links[i].href.match(/(#.*)/)[1] == window.location.hash) {
        if (nav_links[i].href.match(/(#.*)/)[1] == window.location.hash) {
            nav_links[i].className = 'selected';
            nav_links[i].className = 'selected'
        } else {
        } else {
            nav_links[i].className = '';
            nav_links[i].className = ''
        }
        }
    }
    }
}
}
}
function hashify_all_wikilinks() {
const wikilinks = $( `a[rel="${ wikilink_rel }"]` )
for ( const wikilink of wikilinks ) {
if ( !wikilink.href.includes('#') ) {
if ( wikilink.href.includes('/html/') ) {
wikilink.href = wikilink.href.replace( `${ origin }/html/`, '#' )
} else {
wikilink.href = wikilink.href.replace( `${ origin }/`, '#' )
}
}
}
}
}


function make_principles_collapsible() {
function make_principles_collapsible() {
const principles = $( '#Principles > section > h3 > a' )
const principles = $( '#Principles > section' )
for ( const principle of principles ) {
for ( const principle of principles ) {
if ( !principle.href.includes('#') ) {
const header = principle.querySelector( 'h3' )
principle.href = principle.href.replace( `${ origin }/html/`, '#' )
if (!header.onclick) {
header.onclick = function() {
const p_array = Array.from( principles )
for ( let i=0; i < p_array.length; i++ ) {
if ( principle != p_array[i] ) {
p_array[i].classList.remove('selected')
}
}
principle.classList.toggle( 'selected' )
}
}
}
}
}
function shuffle_worker_ants() {
const ants = $( '.clippy_ant' )
for ( const ant of ants ) {
ant.style.setProperty( '--index', Math.floor(Math.random() * 21 ) )
}
}
function give_galleries_buttons() {
    const galleries = $( 'ul.gallery' )
    for ( const gallery of galleries ) {
      if ( gallery.querySelector( '.controls' ) ) {
      return
      }
  const controls = document.createElement( 'div' )
  controls.classList.add( 'controls' )
  controls.innerHTML = `<span class="left"><</span><span class="right">></span>`
  gallery.prepend( controls )
      const left = gallery.querySelector( '.left' )
      const right = gallery.querySelector( '.right' )
      const rem = parseFloat(getComputedStyle(document.documentElement).fontSize)
      right.onclick = () => { gallery.scroll({
        left: gallery.scrollLeft + gallery.offsetWidth - 1 * rem,
        behavior: "smooth"
      })}
      left.onclick = () => { gallery.scroll({
        left: gallery.scrollLeft - gallery.offsetWidth + 1 * rem,
        behavior: "smooth"
      })}
}
}
}
}

Latest revision as of 11:53, 15 June 2023

const origin = window.location.origin
const title = "TheNewSocial"
const wikilink_rel = "mw:WikiLink"

document.onreadystatechange = function () {

	console.log( 'Hello from PublishingJS namespace!' )
	
	make_case_studies_header()
	make_case_studies_collapsible()
	make_principles_collapsible()
	hashify_all_wikilinks()
	shuffle_worker_ants()
	give_galleries_buttons()

	
}





function $( selector ) {
	return document.querySelectorAll( selector )
}


function make_case_studies_header() {
	const toctitle = document.querySelector( '.toctitle h2' )
	if ( toctitle ) {
		toctitle.innerText = 'Case Studies'
	}
}

function make_case_studies_collapsible() {
	const nav_links = $('#toc a, #Principles a')
	window.onhashchange = function() {
	    for (let i = 0; i < nav_links.length; i++) {
	        if (nav_links[i].href.match(/(#.*)/)[1] == window.location.hash) {
	            nav_links[i].className = 'selected'
	        } else {
	            nav_links[i].className = ''
	        }
	    }
	}
	
}

function hashify_all_wikilinks() {
	const wikilinks = $( `a[rel="${ wikilink_rel }"]` )
	for ( const wikilink of wikilinks ) {
		if ( !wikilink.href.includes('#') ) {
			if ( wikilink.href.includes('/html/') ) {
				wikilink.href = wikilink.href.replace( `${ origin }/html/`, '#' )
			} else {
				wikilink.href = wikilink.href.replace( `${ origin }/`, '#' )
			}
		}
	}
}

function make_principles_collapsible() {
	const principles = $( '#Principles > section' )
	for ( const principle of principles ) {
		const header = principle.querySelector( 'h3' )
		if (!header.onclick) {
			header.onclick = function() {
				const p_array = Array.from( principles )
				for ( let i=0; i < p_array.length; i++ ) {
					if ( principle != p_array[i] ) {
						p_array[i].classList.remove('selected')
					}
				}
				principle.classList.toggle( 'selected' )
			}	
		}
	}
}

function shuffle_worker_ants() {
	const ants = $( '.clippy_ant' )
	for ( const ant of ants ) {
		ant.style.setProperty( '--index', Math.floor(Math.random() * 21 ) )
	}
}

function give_galleries_buttons() {
 
    const galleries = $( 'ul.gallery' )

    for ( const gallery of galleries ) {
      if ( gallery.querySelector( '.controls' ) ) {
      	return
      }
	  const controls = document.createElement( 'div' )
	  controls.classList.add( 'controls' )
	  controls.innerHTML = `<span class="left"><</span><span class="right">></span>`
	  gallery.prepend( controls )
      const left = gallery.querySelector( '.left' )
      const right = gallery.querySelector( '.right' )
      const rem = parseFloat(getComputedStyle(document.documentElement).fontSize)

      right.onclick = () => { gallery.scroll({
        left: gallery.scrollLeft + gallery.offsetWidth - 1 * rem,
        behavior: "smooth"
      })}

      left.onclick = () => { gallery.scroll({
        left: gallery.scrollLeft - gallery.offsetWidth + 1 * rem,
        behavior: "smooth"
      })}

	}
}