You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lychee/src/scripts/view/main.js

204 lines
4.5 KiB

10 years ago
/**
* @description Used to view single photos with view.php
* @copyright 2015 by Tobias Reich
10 years ago
*/
8 years ago
// Sub-implementation of lychee -------------------------------------------------------------- //
let lychee = {}
lychee.content = $('.content')
lychee.getEventName = function() {
let touchendSupport = (/Android|iPhone|iPad|iPod/i).test(navigator.userAgent || navigator.vendor || window.opera) && ('ontouchend' in document.documentElement)
let eventName = (touchendSupport===true ? 'touchend' : 'click')
return eventName
}
lychee.escapeHTML = function(html = '') {
// Ensure that html is a string
html += ''
// Escape all critical characters
html = html.replace(/&/g, '&')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;')
.replace(/`/g, '&#96;')
return html
}
lychee.html = function(literalSections, ...substs) {
// Use raw literal sections: we dont want
// backslashes (\n etc.) to be interpreted
let raw = literalSections.raw
let result = ''
substs.forEach((subst, i) => {
// Retrieve the literal section preceding
// the current substitution
let lit = raw[i]
// If the substitution is preceded by a dollar sign,
// we escape special characters in it
if (lit.slice(-1)==='$') {
subst = lychee.escapeHTML(subst)
lit = lit.slice(0, -1)
}
result += lit
result += subst
})
// Take care of last literal section
// (Never fails, because an empty template string
// produces one literal section, an empty string)
result += raw[raw.length - 1]
return result
}
// Sub-implementation of photo -------------------------------------------------------------- //
let photo = {}
photo.share = function(photoID, service) {
let link = ''
let url = location.toString()
switch (service) {
case 'twitter':
link = `https://twitter.com/share?url=${ encodeURI(url) }`
break
case 'facebook':
link = `http://www.facebook.com/sharer.php?u=${ encodeURI(url) }`
break
case 'mail':
link = `mailto:?subject=&body=${ encodeURI(url) }`
break
default:
link = ''
break
}
if (link!=='') location.href = link
}
photo.getDirectLink = function() {
return $('#imageview img').attr('src').replace(/"/g,'').replace(/url\(|\)$/ig, '')
}
// Sub-implementation of contextMenu -------------------------------------------------------------- //
let contextMenu = {}
contextMenu.sharePhoto = function(photoID, e) {
let iconClass = 'ionicons'
let items = [
{ title: build.iconic('twitter', iconClass) + 'Twitter', fn: () => photo.share(photoID, 'twitter') },
{ title: build.iconic('facebook', iconClass) + 'Facebook', fn: () => photo.share(photoID, 'facebook') },
{ title: build.iconic('envelope-closed') + 'Mail', fn: () => photo.share(photoID, 'mail') },
{ title: build.iconic('link-intact') + 'Direct Link', fn: () => window.open(photo.getDirectLink(), '_newtab') }
]
basicContext.show(items, e.originalEvent)
}
// Main -------------------------------------------------------------- //
let loadingBar = { show() {}, hide() {} }
let imageview = $('#imageview')
10 years ago
9 years ago
$(document).ready(function() {
10 years ago
// Save ID of photo
let photoID = gup('p')
// Event Name
let eventName = lychee.getEventName()
10 years ago
// Set API error handler
api.onError = error
10 years ago
// Share
header.dom('#button_share').on(eventName, function(e) {
contextMenu.sharePhoto(photoID, e)
})
// Infobox
header.dom('#button_info').on(eventName, sidebar.toggle)
10 years ago
// Load photo
loadPhotoInfo(photoID)
10 years ago
})
10 years ago
const loadPhotoInfo = function(photoID) {
10 years ago
let params = {
9 years ago
photoID,
albumID : 0,
password : ''
9 years ago
}
10 years ago
9 years ago
api.post('Photo::get', params, function(data) {
10 years ago
if (data==='Warning: Photo private!' || data==='Warning: Wrong password!') {
$('body').append(build.no_content('question-mark'))
$('body').removeClass('view')
header.dom().remove()
return false
}
// Set title
if (!data.title) data.title = 'Untitled'
document.title = 'Lychee - ' + data.title
header.dom('.header__title').html(lychee.escapeHTML(data.title))
10 years ago
// Render HTML
imageview.html(build.imageview(data, true))
imageview.find('.arrow_wrapper').remove()
imageview.addClass('fadeIn').show()
10 years ago
// Render Sidebar
let structure = sidebar.createStructure.photo(data)
let html = sidebar.render(structure)
sidebar.dom('.sidebar__wrapper').html(html)
sidebar.bind()
10 years ago
})
10 years ago
}
const error = function(errorThrown, params, data) {
10 years ago
console.error({
description : errorThrown,
params : params,
response : data
})
10 years ago
loadingBar.show('error', errorThrown)
9 years ago
10 years ago
}