123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- /**
- * @description Select multiple albums or photos.
- * @copyright 2015 by Tobias Reich
- */
- multiselect = {}
- multiselect.position = {
- top : null,
- right : null,
- bottom : null,
- left : null
- }
- multiselect.bind = function() {
- $('.content').on('mousedown', (e) => { if (e.which===1) multiselect.show(e) })
- return true
- }
- multiselect.show = function(e) {
- if (lychee.publicMode) return false
- if (!visible.albums() && !visible.album()) return false
- if ($('.album:hover, .photo:hover').length!==0) return false
- if (visible.search()) return false
- if (visible.multiselect()) $('#multiselect').remove()
- sidebar.setSelectable(false)
- multiselect.position.top = e.pageY
- multiselect.position.right = -1 * (e.pageX - $(document).width())
- multiselect.position.bottom = -1 * (multiselect.position.top - $(window).height())
- multiselect.position.left = e.pageX
- $('body').append(build.multiselect(multiselect.position.top, multiselect.position.left))
- $(document)
- .on('mousemove', multiselect.resize)
- .on('mouseup', (e) => { if (e.which===1) multiselect.getSelection(e) })
- }
- multiselect.selectAll = function() {
- if (lychee.publicMode) return false
- if (visible.search()) return false
- if (!visible.albums() && !visible.album) return false
- if (visible.multiselect()) $('#multiselect').remove()
- sidebar.setSelectable(false)
- multiselect.position.top = 70
- multiselect.position.right = 40
- multiselect.position.bottom = 90
- multiselect.position.left = 20
- $('body').append(build.multiselect(multiselect.position.top, multiselect.position.left))
- let documentSize = {
- width : $(document).width(),
- height : $(document).height()
- }
- let newSize = {
- width : documentSize.width - multiselect.position.right + 2,
- height : documentSize.height - multiselect.position.bottom
- }
- let e = {
- pageX : documentSize.width - (multiselect.position.right / 2),
- pageY : documentSize.height - multiselect.position.bottom
- }
- $('#multiselect').css(newSize)
- multiselect.getSelection(e)
- }
- multiselect.resize = function(e) {
- if (multiselect.position.top === null ||
- multiselect.position.right === null ||
- multiselect.position.bottom === null ||
- multiselect.position.left === null) return false
- let newSize = {}
- let documentSize = {}
- // Get the position of the mouse
- let mousePos = {
- x : e.pageX,
- y : e.pageY
- }
- // Default CSS
- let newCSS = {
- top : null,
- bottom : null,
- height : null,
- left : null,
- right : null,
- width : null
- }
- if (mousePos.y>=multiselect.position.top) {
- documentSize.height = $(document).height()
- // Do not leave the screen
- newSize.height = mousePos.y - multiselect.position.top
- if ((multiselect.position.top + newSize.height)>=documentSize.height) {
- newSize.height -= (multiselect.position.top + newSize.height) - documentSize.height + 2
- }
- newCSS.top = multiselect.position.top
- newCSS.bottom = 'inherit'
- newCSS.height = newSize.height
- } else {
- newCSS.top = 'inherit'
- newCSS.bottom = multiselect.position.bottom
- newCSS.height = multiselect.position.top - e.pageY
- }
- if (mousePos.x>=multiselect.position.left) {
- documentSize.width = $(document).width()
- // Do not leave the screen
- newSize.width = mousePos.x - multiselect.position.left
- if ((multiselect.position.left + newSize.width)>=documentSize.width) {
- newSize.width -= (multiselect.position.left + newSize.width) - documentSize.width + 2
- }
- newCSS.right = 'inherit'
- newCSS.left = multiselect.position.left
- newCSS.width = newSize.width
- } else {
- newCSS.right = multiselect.position.right
- newCSS.left = 'inherit'
- newCSS.width = multiselect.position.left - e.pageX
- }
- // Updated all CSS properties at once
- $('#multiselect').css(newCSS)
- }
- multiselect.stopResize = function() {
- $(document).off('mousemove mouseup')
- }
- multiselect.getSize = function() {
- if (!visible.multiselect()) return false
- let $elem = $('#multiselect')
- let offset = $elem.offset()
- return {
- top : offset.top,
- left : offset.left,
- width : parseInt($elem.css('width').replace('px', '')),
- height : parseInt($elem.css('height').replace('px', ''))
- }
- }
- multiselect.getSelection = function(e) {
- let tolerance = 150
- let ids = []
- let size = multiselect.getSize()
- if (visible.contextMenu()) return false
- if (!visible.multiselect()) return false
- $('.photo, .album').each(function() {
- let offset = $(this).offset()
- if (offset.top>=(size.top - tolerance) &&
- offset.left>=(size.left - tolerance) &&
- (offset.top + 206)<=(size.top + size.height + tolerance) &&
- (offset.left + 206)<=(size.left + size.width + tolerance)) {
- let id = $(this).data('id')
- if (id!=='0' && id!==0 && id!=='f' && id!=='s' && id!=='r' && id!=null) {
- ids.push(id)
- $(this).addClass('active')
- }
- }
- })
- if (ids.length!==0 && visible.album()) contextMenu.photoMulti(ids, e)
- else if (ids.length!==0 && visible.albums()) contextMenu.albumMulti(ids, e)
- else multiselect.close()
- }
- multiselect.close = function() {
- sidebar.setSelectable(true)
- multiselect.stopResize()
- multiselect.position.top = null
- multiselect.position.right = null
- multiselect.position.bottom = null
- multiselect.position.left = null
- lychee.animate('#multiselect', 'fadeOut')
- setTimeout(() => $('#multiselect').remove(), 300)
- }
|