You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

146 lines
5.2 KiB
JavaScript

// TODO
// glyphs
// what buttons where
// colophone
// a bit more interface
// DONE
// Open window icon (on background 'desktop')
// Close window button (on 'window' itself)
// random position
let corpi = {
0: {
id:'xpub',
glyph: '🖨️',
title: 'var xpub',
content: 'window.open() at PNF will be an interface for our XPUB program to speak/communicate to/with the public inside and outside of the physical space. We adjust, using windows in the street and in the browser in order to be able to communicate. This frames it as a "discursive/dialogical interface" through which attitudes, perspectives, backgrounds and situations are explored together in a program consisting of: presentations, workshops, publication launches, conversations and performances; both online and offline.'
},
1: {
id:'interface',
glyph: '📀',
title: 'const interface',
content: 'A window is a framing device, an interface through which we can look inside, to spaces where small groups meet, and outside to the world beyond. Screens and windows delineate boundaries between public and private. Working with(in) a limitation, a frame(work), a situation, a context means adjusting our work to the state of affairs; it changes our way of thinking/framing it. We adjust, in order to be able to communicate within a temporary window of time, reframing our intentions and seeking opportunities to share some real-time realness.'
},
2: {
id:'greetings',
glyph: '📌',
title: 'let greetings',
content: 'We are pleased to invite you to window.open(), a day-long festival, held by students and alumni of the Master of Experimental Publishing (XPUB) at Page Not Found.'
},
}
$(document).ready(function(){
// Generate divs
Object.values(corpi).forEach(corpus => {
$('#dragZone' ).append(`
<div class="ui-widget-content draggable resizable" id="${corpus['id']}">
<h1>${corpus['title']}</h1>
<p>${corpus['content']}</p>
<button class="closable">X</button>
</div>
`)
$('#icons').append(`<button onclick="$(${corpus['id']}).fadeIn()" class="icon">${corpus["glyph"]}</button>`)
});
// Start mouse UI
const dragResize = new DragResizeClose();
});
class DragResizeClose {
constructor() {
this.drag();
this.setDraggables();
this.setZindex();
this.handleCursor();
this.closeBtn();
}
drag() {
$('.draggable').draggable({ containment: "window" });
}
setDraggables() {
//size window
const getWidth = () => {
return Math.max(
document.body.scrollWidth,
document.documentElement.scrollWidth,
document.body.offsetWidth,
document.documentElement.offsetWidth,
document.documentElement.clientWidth
);
}
$( ".draggable" ).each(function() {
let rw = getRndInteger((getWidth())/2-500,(getWidth())/2)
//let rh = getRndInteger(heightDrag-200, heightDrag)
//setDimension
$(this).css("width",rw);
$(this).css("height", 'auto');
//setPosition
let w = window.innerWidth;
let h = window.innerHeight;
if (this.id != 'program'){
let wBox = $(this).css('width');
let hBox = $(this).css('height');
let rX = randomCorrectedHeight(h, hBox);
let rY = randomCorrectedWidth(w, wBox);
$(this).css("top", rX);
$(this).css("left", rY);
} else {
$(this).css("top", '20px');
$(this).css("right", '20px');
}
});
}
setZindex() {
let zIndex = 3;
$('#dragZone div').mousedown(function() { // Setup z-index handler
$(this).addClass('top').removeClass('bottom');
$(this).siblings().removeClass('top').addClass('bottom');
$(this).css("z-index", zIndex++);
});
}
handleCursor() {
$('.draggable')
.on("mousedown", () => $('.draggable').css('cursor', 'grabbing'))
.on("mouseup mouseleave", () => $('.draggable').css('cursor', 'grab'));
}
resize() {
$(".resizable").resizable({ aspectRatio: true, maxHeight: 900, minHeight: 10 });
$(".resizableOriz").resizable({ aspectRatio: true, maxHeight: 500, minHeight: 10 });
}
closeBtn() {
$(".closable").click(function() {
$(this).parent().fadeOut();
})
.hover(
function() { $( this ).addClass( "hover" ); },
function() { $( this ).removeClass( "hover");}
);
}
}
const randomCorrectedWidth = (sizeWindow, sizeBox) => {
var corrected = sizeWindow - parseInt(sizeBox);
return Math.floor(Math.random() * corrected)
}
const randomCorrectedHeight = (sizeWindow, sizeBox) => {
var corrected = sizeWindow - parseInt(sizeBox);
return getRndInteger(105, corrected)
}
const getRndInteger = (min, max) => Math.floor(Math.random() * (max - min + 1) ) + min;