'use strict'; pandora.ui.textPanel = function() { var that = Ox.SplitPanel({ elements: [ {element: Ox.Element(), size: 24}, {element: Ox.Element()}, {element: Ox.Element(), size: 16} ], orientation: 'vertical' }), embedURLs, selected = -1, selectedURL; pandora.api.getText({id: pandora.user.ui.text}, function(result) { var text = result.data; embedURLs = text.type == 'html' ? getEmbedURLs(text.text) : []; var $toolbar = Ox.Bar({size: 24}), $editMenu, $uploadButton, $find = Ox.Input({ clear: true, placeholder: Ox._('Find in Texts'), value: pandora.user.ui.textFind, width: 188 }) .css({ float: 'right', margin: '4px 4px 4px 2px' }) .bindEvent({ submit: function(data) { Ox.print('SUBMIT', data); } }) .appendTo($toolbar), $nextButton = Ox.Button({ disabled: embedURLs.length < 2, title: 'arrowRight', tooltip: Ox._('Next Clip'), type: 'image' }) .css({ float: 'right', margin: '4px 2px 4px 2px' }) .bindEvent({ click: function() { that.selectEmbed( selected < embedURLs.length - 1 ? selected + 1 : 0 ); } }) .appendTo($toolbar), $currentButton = Ox.Button({ disabled: embedURLs.length < 1, title: 'center', tooltip: Ox._('Current Reference'), type: 'image' }) .css({ float: 'right', margin: '4px 2px 4px 2px' }) .appendTo($toolbar), $previousButton = Ox.Button({ disabled: embedURLs.length < 2, title: 'arrowLeft', tooltip: Ox._('Previous Clip'), type: 'image' }) .css({ float: 'right', margin: '4px 2px 4px 2px' }) .bindEvent({ click: function() { that.selectEmbed( selected ? selected - 1 : embedURLs.length - 1 ); } }) .appendTo($toolbar), $statusbar = Ox.Bar({size: 16}), $panel = Ox.SplitPanel({ elements: [ { element: pandora.$ui.text = text.type == 'html' ? pandora.ui.textHTML(text) : pandora.ui.textPDF(text) }, { element: pandora.$ui.textEmbed = pandora.ui.textEmbed(), //fixme: at some point pdf will also have a sidebar size: text.type == 'html' ? pandora.user.ui.embedSize : 0, resizable: text.type == 'html', resize: [192, 256, 320, 384, 448, 512] } ], orientation: 'horizontal' }); if (text.editable) { if (text.type == 'html') { $editMenu = Ox.MenuButton({ items: [ {id: 'insertHTML', title: Ox._('Insert HTML...')}, {id: 'insertEmbed', title: Ox._('Insert Embed...')} ], title: 'edit', tooltip: Ox._('Editing Options'), type: 'image' }) .css({ float: 'left', margin: '4px 2px 4px 4px' }) .bindEvent({ click: function(data) { if (data.id == 'insertEmbed') { pandora.$ui.insertEmbedDialog = pandora.ui.insertEmbedDialog(function() { // ... }).open(); } } }) .appendTo($toolbar); } else { $uploadButton = Ox.FileButton({ image: 'upload', tooltip: Ox._('Upload PDF'), type: 'image' }) .css({ float: 'left', margin: '4px 2px 4px 4px' }) .bindEvent({ click: function(data) { if (data.files.length) { pandora.$ui.uploadPDFDialog = pandora.ui.uploadPDFDialog({ file: data.files[0], id: pandora.user.ui.text }).open(); } } }) .appendTo($toolbar); } } that.replaceElement(0, $toolbar); that.replaceElement(1, $panel); that.replaceElement(2, $statusbar); embedURLs.length && that.selectEmbed(0); }); function getEmbedURLs(text) { var matches = text.match(/]*?href="(.+?)".*?>/gi), urls = []; if (matches) { matches.forEach(function(match) { var url = match.match(/"(.+?)"/)[1]; if (pandora.isEmbedURL(url)) { urls.push(url); } }); } return urls; } that.selectEmbed = function(index) { if (index != selected) { selected = index; selectedURL = embedURLs[selected] $('.OxSpecialLink').removeClass('OxActive'); selected > -1 && $('#embed' + selected).addClass('OxActive'); pandora.$ui.textEmbed.update(selectedURL); } }; that.update = function(text) { embedURLs = getEmbedURLs(text); selected = embedURLs.indexOf(selectedURL); if (selected == -1 && embedURLs.length) { selected = 0; } that.selectEmbed(selected); }; return that; }; pandora.ui.textHTML = function(text) { var height = getHeight(), width = getWidth(), that = Ox.Element() .css({ 'overflow-y': 'auto' }), $content = Ox.Element().css({ margin: '16px', }).appendTo(that), $title = Ox.Editable({ editable: text.name ? text.editable : false, height: 32, placeholder: text.editable ? Ox._('Doubleclick to edit title') : Ox._('Untitled'), tooltip: text.editable ? pandora.getEditTooltip('title') : '', value: text.name || Ox._('{0} Texts', [pandora.site.site.name]), width: width }) .css({ //position: 'absolute', //width: width + 'px', height: '32px', fontSize: '18px', }) .bindEvent({ submit: function(data) { Ox.Request.clearCache('getText'); pandora.api.editText({ id: pandora.user.ui.text, name: data.value }, function(result) { Ox.print('RESULT.DATA:', result.data); }); } }) .appendTo($content), $spaceTop = Ox.Element() .css({height: '16px'}) .appendTo($content), $text = Ox.Editable({ clickLink: pandora.clickLink, editable: text.editable, format: function(text) { var index = 0; return text.replace( /]*?href="(.+?)".*?>/gi, function() { var link = arguments[0], ret, url = arguments[1]; if (pandora.isEmbedURL(url)) { ret = '' index++; } else { ret = link; } return ret; } ); }, maxHeight: height - 1, placeholder: text.editable ? Ox._('Doubleclick to edit text') : '', tooltip: text.editable ? pandora.getEditTooltip('text') : '', type: 'textarea', width: width, value: text.text }) .css({ //position: 'absolute', //height: height + 'px', width: width + 'px', //marginTop: '48px', fontSize: '12px' }) .bindEvent({ submit: function(data) { Ox.print('SUBMIT', data.value); Ox.Request.clearCache('getText'); pandora.api.editText({ id: pandora.user.ui.text, text: data.value }); pandora.$ui.textPanel.update(data.value); } }) .appendTo($content); function getHeight() { // 24 menu + 24 toolbar + 16 statusbar + 32 title + 32 margins // + 1px to ge trid of scrollbar return window.innerHeight - 128 -1; } function getWidth() { return window.innerWidth - pandora.user.ui.showSidebar * pandora.user.ui.sidebarSize - 1 - pandora.user.ui.embedSize - 1 - 32; } that.update = function() { $text.options({ maxHeight: getHeight(), width: getWidth() }); return that; }; return that; }; pandora.ui.textPDF = function(text) { var that = Ox.Element(), $iframe, page = pandora.user.ui.texts[pandora.user.ui.text].position ? pandora.user.ui.texts[pandora.user.ui.text].position[0] : 1, url = '/texts/' + pandora.user.ui.text + '/text.pdf.html#page=' + page; if (text.uploaded) { $iframe = Ox.Element('