diff --git a/src/_h5ai/client/css/inc/preview-txt.less b/src/_h5ai/client/css/inc/preview-txt.less index bff27626..85c76ad3 100644 --- a/src/_h5ai/client/css/inc/preview-txt.less +++ b/src/_h5ai/client/css/inc/preview-txt.less @@ -1,35 +1,14 @@ -#pv-txt-overlay { - display: none; - position: fixed; - left: 0; - top: 0; - right: 0; - bottom: 0; - z-index: 100; - - background-color: rgba(0,0,0,0.5); - .transition(background-color 0.3s ease-in-out); - - text-align: center; -} - -#pv-txt-content { - max-width: 960px; - margin: 0 auto; - padding: 10px; - background-color: #fff; - border: 1px solid #fff; - text-align: left; - overflow: auto; - position: relative; -} - -#pv-txt-spinner { - position: fixed; -} - #pv-txt-text { + // position: absolute; + max-width: 800px; + max-height: 100%; + height: 100%; + text-align: left; + background-color: #fff; + margin: 0 auto; + padding: 8px; + overflow: auto; &.highlighted { word-break: break-all; @@ -143,90 +122,3 @@ } } } - -#pv-txt-close { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - cursor: pointer; -} - -#pv-txt-prev { - position: fixed; - cursor: pointer; -} - -#pv-txt-next { - position: fixed; - cursor: pointer; -} - -#pv-txt-buttons, #pv-txt-topbuttons { - list-style: none; - list-style-image: none; - margin: 0; - padding: 0; - - img { - position: relative; - top: -2px; - width: 16px; - height: 16px; - } - img + span, img + input { - margin-left: 6px; - } - input { - background-color: rgba(255,255,255,0.1); - border: none; - color: #ccc; - } - - .bar-label { - display: block; - color: #ccc; - height: 30px; - line-height: 30px; - padding: 0 10px; - opacity: 0.7; - .transition(all 0.2s ease-in-out); - } - - .bar-highlight { - background-color: rgba(255,255,255,0.1); - opacity: 1.0; - } - - @bar-sep-border: 1px solid rgba(255,255,255,0.05); - - .bar-button { - .bar-label; - cursor: pointer; - &:hover, &.hover { - .bar-highlight; - } - } - - .bar-left { - float: left; - border-right: @bar-sep-border; - } - - .bar-right { - float: right; - border-left: @bar-sep-border; - } -} - -#pv-txt-bottombar { - position: fixed; - z-index: 5; - width: 100%; - height: 32px; - left: 0; - bottom: 0; - background-color: rgb(27,27,27); - border-top: 1px solid rgb(45,45,45); -} diff --git a/src/_h5ai/client/js/inc/ext/preview-txt.js b/src/_h5ai/client/js/inc/ext/preview-txt.js index 508fd323..e93c77ed 100644 --- a/src/_h5ai/client/js/inc/ext/preview-txt.js +++ b/src/_h5ai/client/js/inc/ext/preview-txt.js @@ -1,5 +1,5 @@ -modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource', 'core/store', 'core/event', 'core/location'], function (_, $, allsettings, resource, store, event, location) { +modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/store', 'core/event', 'ext/preview'], function (_, $, allsettings, store, event, preview) { var settings = _.extend({ enabled: false, @@ -28,33 +28,9 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource', } }, allsettings['preview-txt']), - template = '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '' + - '
' + - '
' + - '
    ' + - '
  • ' + - '
  • ' + - '
  • ' + - '
  • ' + - '
  • ' + - '
  • ' + - '
  • ' + - '
' + - '
' + - '
', - templateText = '
',
 		templateMarkdown = '
', - currentEntries = [], - currentIdx = 0, - // adapted from SyntaxHighlighter getHighlightedLines = function (sh, alias, content) { @@ -159,107 +135,74 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource', }); }, - onIndexChange = function (idx) { - - currentIdx = (idx + currentEntries.length) % currentEntries.length; - - var $container = $('#pv-txt-content'), - $text = $('#pv-txt-text'), - current = currentEntries[currentIdx], - spinnerTimeout = setTimeout(function () { $('#pv-txt-spinner').show(); }, 200); - - preloadText(current.absHref, function (content) { - - clearTimeout(spinnerTimeout); - $('#pv-txt-spinner').hide(); - - $text.fadeOut(100, function () { - - var $nText; - - if (current.type === 'markdown') { - $nText = $(templateMarkdown).hide().text(content); - $text.replaceWith($nText); - - loadMarkdown(function (md) { - - if (md) { - $nText.html(md.toHTML(content)); - } - }); - } else { - $nText = $(templateText).hide().text(content); - $text.replaceWith($nText); - - loadSyntaxhighlighter(function (sh) { - - if (sh) { - var $table = $(''); - - getHighlightedLines(sh, settings.types[current.type], content).each(function (i) { - $('') - .append($('
').addClass('nr').append(i + 1)) - .append($('').addClass('line').append(this)) - .appendTo($table); - }); - - $nText.empty().append($table); - } - }); - } - $nText.fadeIn(200); - - adjustSize(); - $('#pv-txt-bar-label').text(current.label); - $('#pv-txt-bar-size').text('' + current.size + ' bytes'); - $('#pv-txt-bar-idx').text('' + (currentIdx + 1) + ' / ' + currentEntries.length); - $('#pv-txt-bar-original').find('a').attr('href', current.absHref); - }); - }); - }, - onEnter = function (items, idx) { - $(window).on('keydown', onKeydown); - $('#pv-txt-overlay').stop(true, true).fadeIn(200); + var currentItems = items, + currentIdx = idx, + currentItem = items[idx], - currentEntries = items; - onIndexChange(idx); - }, + onIdxChange = function (rel) { - onNext = function () { + currentIdx = (currentIdx + rel + currentItems.length) % currentItems.length; + currentItem = currentItems[currentIdx]; - onIndexChange(currentIdx + 1); - }, + var spinnerTimeout = setTimeout(function () { preview.showSpinner(true); }, 200); - onPrevious = function () { + preloadText(currentItem.absHref, function (textContent) { - onIndexChange(currentIdx - 1); - }, + clearTimeout(spinnerTimeout); + preview.showSpinner(false); - onExit = function () { + $('#pv-content').fadeOut(100, function () { - $(window).off('keydown', onKeydown); - $('#pv-txt-overlay').stop(true, true).fadeOut(200); - }, + var $text; - onKeydown = function (event) { + if (currentItem.type === 'markdown') { + $text = $(templateMarkdown).text(textContent); + $text.replaceWith($text); - var key = event.which; + loadMarkdown(function (md) { - if (key === 27) { // esc - event.preventDefault(); - event.stopImmediatePropagation(); - onExit(); - } else if (key === 8 || key === 37 || key === 40) { // backspace, left, down - event.preventDefault(); - event.stopImmediatePropagation(); - onPrevious(); - } else if (key === 13 || key === 32 || key === 38 || key === 39) { // enter, space, up, right - event.preventDefault(); - event.stopImmediatePropagation(); - onNext(); - } + if (md) { + $text.html(md.toHTML(textContent)); + } + }); + } else { + $text = $(templateText).text(textContent); + $text.replaceWith($text); + + loadSyntaxhighlighter(function (sh) { + + if (sh) { + var $table = $(''); + + getHighlightedLines(sh, settings.types[currentItem.type], textContent).each(function (i) { + $('') + .append($('
').addClass('nr').append(i + 1)) + .append($('').addClass('line').append(this)) + .appendTo($table); + }); + + $text.empty().append($table); + } + }); + } + + $('#pv-content').empty().append($text).fadeIn(200); + + preview.setIndex(currentIdx + 1, currentItems.length); + preview.setLabels([ + currentItem.label, + '' + currentItem.size + ' bytes' + ]); + preview.setRawLink(currentItem.absHref); + }); + }); + }; + + onIdxChange(0); + preview.setOnIndexChange(onIdxChange); + preview.enter(); }, initItem = function (item) { @@ -296,31 +239,8 @@ modulejs.define('ext/preview-txt', ['_', '$', 'core/settings', 'core/resource', return; } - $(template).appendTo('body'); - $('#pv-txt-bar-prev').on('click', onPrevious); - $('#pv-txt-bar-next').on('click', onNext); - $('#pv-txt-bar-close, #pv-txt-close').on('click', onExit); - - $('#pv-txt-close') - .on('mouseenter', function () { - $('#pv-txt-bar-close').addClass('hover'); - }) - .on('mouseleave', function () { - $('#pv-txt-bar-close').removeClass('hover'); - }); - - - $('#pv-txt-overlay') - .on('keydown', onKeydown) - .on('click mousedown mousemove keydown keypress', function (event) { - - event.stopImmediatePropagation(); - }); - event.sub('location.changed', onLocationChanged); event.sub('location.refreshed', onLocationRefreshed); - - $(window).on('resize load', adjustSize); }; init();