{"version":3,"sources":["node_modules/nodebb-plugin-composer-default/static/lib/composer/resize.js"],"names":["define","taskbar","resize","oldRatio","minimumRatio","snapMargin","mediumMin","$body","$","$window","window","$headerMenu","html","document","documentElement","body","header","getSavedRatio","localStorage","getItem","saveRatio","ratio","setItem","Math","min","getBounds","headerRect","getBoundingClientRect","bottom","headerBottom","max","rect","top","left","right","innerWidth","innerHeight","width","height","boundedTop","boundedHeight","doResize","postContainer","bounds","elem","style","getComputedStyle","minHeight","parseInt","getPropertyValue","adjustedMinimum","toString","paddingBottom","removeAttr","visibility","updateActive","attr","resizeIt","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","setTimeout","trigger","reposition","addClass","maximize","state","handleResize","resizeOffset","resizeBegin","resizeEnd","$resizer","find","resizer","resizeStart","e","resizeRect","resizeCenterY","clientY","on","resizeAction","resizeStop","resizeTouchAction","position","preventDefault","focus","off","hasClass","removeClass","touches"],"mappings":"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","file":"node_modules/nodebb-plugin-composer-default/static/lib/composer/resize.js","sourcesContent":["\r\n'use strict';\r\n\r\n/* globals define */\r\n\r\ndefine('composer/resize', ['taskbar'], function(taskbar) {\r\n\tvar resize = {};\r\n\tvar oldRatio = 0;\r\n\tvar minimumRatio = 0.3;\r\n\tvar snapMargin = 0.05;\r\n\tvar mediumMin = 992;\r\n\r\n\tvar $body = $('body');\r\n\tvar $window = $(window);\r\n\tvar $headerMenu = $('[component=\"navbar\"]');\r\n\r\n\tvar html = document.documentElement;\r\n\tvar body = document.body;\r\n\tvar header = $headerMenu[0];\r\n\r\n\tfunction getSavedRatio() {\r\n\t\treturn localStorage.getItem('composer:resizeRatio') || 0.5;\r\n\t}\r\n\r\n\tfunction saveRatio(ratio) {\r\n\t\tlocalStorage.setItem('composer:resizeRatio', Math.min(ratio, 1));\r\n\t}\r\n\r\n\tfunction getBounds() {\r\n\t\tvar headerRect;\r\n\t\tif (header) {\r\n\t\t\theaderRect = header.getBoundingClientRect();\r\n\t\t} else {\r\n\t\t\t// Mock data\r\n\t\t\theaderRect = { bottom: 0 };\r\n\t\t}\r\n\r\n\t\tvar headerBottom = Math.max(headerRect.bottom, 0);\r\n\r\n\t\tvar rect = {\r\n\t\t\ttop: 0,\r\n\t\t\tleft: 0,\r\n\t\t\tright: window.innerWidth,\r\n\t\t\tbottom: window.innerHeight,\r\n\t\t};\r\n\r\n\t\trect.width = rect.right;\r\n\t\trect.height = rect.bottom;\r\n\r\n\t\trect.boundedTop = headerBottom;\r\n\t\trect.boundedHeight = rect.bottom - headerBottom;\r\n\r\n\t\treturn rect;\r\n\t}\r\n\r\n\tfunction doResize(postContainer, ratio) {\r\n\t\tvar bounds = getBounds();\r\n\t\tvar elem = postContainer[0];\r\n\t\tvar style = window.getComputedStyle(elem);\r\n\r\n\t\t// Adjust minimumRatio for shorter viewports\r\n\t\tvar minHeight = parseInt(style.getPropertyValue('min-height'), 10);\r\n\t\tvar adjustedMinimum = Math.max(minHeight / window.innerHeight, minimumRatio);\r\n\r\n\t\tif (bounds.width >= mediumMin) {\r\n\t\t\tratio = Math.min(Math.max(ratio, adjustedMinimum), 1);\r\n\r\n\t\t\tvar top = ratio * bounds.boundedHeight / bounds.height;\r\n\t\t\telem.style.top = ((1 - top) * 100).toString() + '%';\r\n\r\n\t\t\t// Add some extra space at the bottom of the body so that\r\n\t\t\t// the user can still scroll to the last post w/ composer open\r\n\t\t\tvar rect = elem.getBoundingClientRect();\r\n\t\t\tbody.style.paddingBottom = (rect.bottom - rect.top).toString() + 'px';\r\n\t\t} else {\r\n\t\t\tpostContainer.removeAttr('style');\r\n\t\t\tbody.style.paddingBottom = 0;\r\n\t\t}\r\n\r\n\t\tpostContainer.ratio = ratio;\r\n\t\telem.style.visibility = 'visible';\r\n\r\n\t\ttaskbar.updateActive(postContainer.attr('data-uuid'));\r\n\t}\r\n\r\n\tvar resizeIt = doResize;\r\n\tvar raf = window.requestAnimationFrame ||\r\n\t\twindow.webkitRequestAnimationFrame ||\r\n\t\twindow.mozRequestAnimationFrame;\r\n\r\n\tif (raf) {\r\n\t\tresizeIt = function(postContainer, ratio) {\r\n\t\t\traf(function() {\r\n\t\t\t\tdoResize(postContainer, ratio);\r\n\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t$window.trigger('action:composer.resize');\r\n\t\t\t\t\tpostContainer.trigger('action:composer.resize');\r\n\t\t\t\t}, 0);\r\n\t\t\t});\r\n\t\t};\r\n\t}\r\n\r\n\tresize.reposition = function(postContainer) {\r\n\t\tvar\tratio = getSavedRatio();\r\n\r\n\t\tif (ratio >= 1 - snapMargin) {\r\n\t\t\tratio = 1;\r\n\t\t\tpostContainer.addClass('maximized');\r\n\t\t}\r\n\r\n\t\tresizeIt(postContainer, ratio);\r\n\t};\r\n\r\n\tresize.maximize = function(postContainer, state) {\r\n\t\tif (state) {\r\n\t\t\tresizeIt(postContainer, 1);\r\n\t\t} else {\r\n\t\t\tresize.reposition(postContainer);\r\n\t\t}\r\n\t};\r\n\r\n\tresize.handleResize = function(postContainer) {\r\n\t\tvar resizeOffset = 0;\r\n\t\tvar resizeBegin = 0;\r\n\t\tvar resizeEnd = 0;\r\n\t\tvar $resizer = postContainer.find('.resizer');\r\n\t\tvar resizer = $resizer[0];\r\n\r\n\t\tfunction resizeStart(e) {\r\n\t\t\tvar resizeRect = resizer.getBoundingClientRect();\r\n\t\t\tvar resizeCenterY = (resizeRect.top + resizeRect.bottom) / 2;\r\n\r\n\t\t\tresizeOffset = (resizeCenterY - e.clientY) / 2;\r\n\t\t\tresizeBegin = e.clientY;\r\n\r\n\t\t\t$window.on('mousemove', resizeAction);\r\n\t\t\t$window.on('mouseup', resizeStop);\r\n\t\t\t$body.on('touchmove', resizeTouchAction);\r\n\t\t}\r\n\r\n\t\tfunction resizeAction(e) {\r\n\t\t\tvar position = e.clientY - resizeOffset;\r\n\t\t\tvar bounds = getBounds();\r\n\t\t\tvar ratio = (bounds.height - position) / (bounds.boundedHeight);\r\n\r\n\t\t\tresizeIt(postContainer, ratio);\r\n\t\t}\r\n\r\n\t\tfunction resizeStop(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tresizeEnd = e.clientY;\r\n\r\n\t\t\tpostContainer.find('textarea').focus();\r\n\t\t\t$window.off('mousemove', resizeAction);\r\n\t\t\t$window.off('mouseup', resizeStop);\r\n\t\t\t$body.off('touchmove', resizeTouchAction);\r\n\r\n\t\t\tvar position = resizeEnd - resizeOffset;\r\n\t\t\tvar bounds = getBounds();\r\n\t\t\tvar ratio = (bounds.height - position) / (bounds.boundedHeight);\r\n\r\n\t\t\tif (resizeEnd - resizeBegin === 0 && postContainer.hasClass('maximized')) {\r\n\t\t\t\tpostContainer.removeClass('maximized');\r\n\t\t\t\tratio = (!oldRatio || oldRatio >= 1 - snapMargin) ? 0.5 : oldRatio;\r\n\t\t\t\tresizeIt(postContainer, ratio);\r\n\t\t\t} else if (resizeEnd - resizeBegin === 0 || ratio >= 1 - snapMargin) {\r\n\t\t\t\tresizeIt(postContainer, 1);\r\n\t\t\t\tpostContainer.addClass('maximized');\r\n\t\t\t\toldRatio = ratio;\r\n\t\t\t} else {\r\n\t\t\t\tpostContainer.removeClass('maximized');\r\n\t\t\t}\r\n\r\n\t\t\tsaveRatio(ratio);\r\n\t\t}\r\n\r\n\t\tfunction resizeTouchAction(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tresizeAction(e.touches[0]);\r\n\t\t}\r\n\r\n\t\t$resizer\r\n\t\t\t.on('mousedown', function(e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tresizeStart(e);\r\n\t\t\t})\r\n\t\t\t.on('touchstart', function(e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tresizeStart(e.touches[0]);\r\n\t\t\t})\r\n\t\t\t.on('touchend', resizeStop);\r\n\t};\r\n\r\n\treturn resize;\r\n});\r\n"]}