X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/825884d5336fece8448c24c002ddae8a93dca50d..a1f864eeb12aacf2d2c094c2bcb8add8b10c4e48:/platforma/static/js/main.js diff --git a/platforma/static/js/main.js b/platforma/static/js/main.js index edd92c59..cf89c293 100644 --- a/platforma/static/js/main.js +++ b/platforma/static/js/main.js @@ -58,151 +58,303 @@ function serialize(element) { return result; }; +function highlight(colour) { + var range, sel; + if (window.getSelection) { + // Non-IE case + sel = window.getSelection(); + if (sel.getRangeAt) { + range = sel.getRangeAt(0); + } + document.designMode = "on"; + if (range) { + sel.removeAllRanges(); + sel.addRange(range); + } + // Use HiliteColor since some browsers apply BackColor to the whole block + if ( !document.execCommand("HiliteColor", false, colour) ) { + document.execCommand("BackColor", false, colour); + } + document.designMode = "off"; + } else if (document.selection && document.selection.createRange) { + // IE case + range = document.selection.createRange(); + range.execCommand("BackColor", false, colour); + } +} + +function selectTheme(themeId) +{ + var selection = window.getSelection(); + + // remove current selection + selection.removeAllRanges(); + + var range = document.createRange(); + var s = $(".motyw[theme-class='"+themeId+"']")[0]; + var e = $(".end[theme-class='"+themeId+"']")[0]; + // console.log('Selecting range:', themeId, range, s, e); + + if(s && e) { + range.setStartAfter(s); + range.setEndBefore(e); + selection.addRange(range); + // highlight('yellow'); + // selection.removeAllRanges(); + } +}; + +// function unselectThemes(themeId) { +// $('.Apple-style-span').each(function() { +// $(this).after($(this).html()); +// $(this).remove(); +// }); +// } + +function gallery(element) { + var element = $(element); + + function changePage(pageNumber) { + $('img', element).attr('src', element.data('images')[pageNumber - 1]); + } + + function normalizeNumber(pageNumber) { + // Numer strony musi być pomiędzy 1 a najwyższym numerem + var pageCount = element.data('images').length; + pageNumber = parseInt(pageNumber, 10); + + if (!pageNumber || pageNumber == NaN || pageNumber == Infinity || pageNumber == -Infinity) { + return 1; + } else if (pageNumber < 1) { + return 1; + } else if (pageNumber > pageCount) { + return pageCount; + } else { + return pageNumber; + } + } + + $.ajax({ + url: '/gallery/sample', + type: 'GET', + dataType: 'json', + + success: function(data) { + element.data('images', data); + var pn = $('.page-number', element); + pn.change(function(event) { + console.log('change!', $(this).val()); + event.preventDefault(); + var n = normalizeNumber(pn.val()); + pn.val(n); + changePage(n); + }); + $('.previous-page', element).click(function() { + pn.val(normalizeNumber(pn.val()) - 1); + pn.change(); + }); + $('.next-page', element).click(function() { + pn.val(normalizeNumber(pn.val()) + 1); + pn.change(); + }); + + var image = $('img', element).attr('unselectable', 'on'); + var origin = {}; + var imageOrigin = {}; + var imageDimensions = {}; + + function onMouseMove(event) { + var delta = { + x: event.clientX - origin.x, + y: event.clientY - origin.y + }; + + var newTop = Math.min(0, Math.max(imageOrigin.top + delta.y, imageDimensions.galleryHeight - imageDimensions.height)); + var newLeft = Math.min(0, Math.max(imageOrigin.left + delta.x, imageDimensions.galleryWidth - imageDimensions.width)); + image.css({position: 'absolute', top: newTop, left: newLeft}); + return false; + } + + function onMouseUp(event) { + $(document) + .unbind('mousemove.gallery') + .unbind('mouseup.gallery'); + return false; + } + + image.bind('mousedown', function(event) { + origin = { + x: event.clientX, + y: event.clientY + }; + imageOrigin = image.position(); + imageDimensions = { + width: image.width(), + height: image.height(), + galleryWidth: image.parent().width(), + galleryHeight: image.parent().height() + }; + $(document) + .bind('mousemove.gallery', onMouseMove) + .bind('mouseup.gallery', onMouseUp); + return false; + }); + } + }); +} $(function() { - var editor = CodeMirror.fromTextArea('id_text', { + gallery('#sidebar'); + + CodeMirror.fromTextArea('id_text', { parserfile: 'parsexml.js', path: "/static/js/lib/codemirror/", stylesheet: "/static/css/xmlcolors.css", parserConfig: { useHTMLKludges: false }, + iframeClass: 'xml-iframe', textWrapping: true, tabMode: 'spaces', indentUnit: 0, - }); - - $('#splitter').splitter({ - type: "v", - outline: true, - minLeft: 480, - sizeRight: 0, - anchorToWindow: true, - resizeToWidth: true, + initCallback: function(editor) { + + function createXSLT(xsl) { + var p = new XSLTProcessor(); + p.importStylesheet(xsl); + return p; + } + + function transform() { + $.ajax({ + url: '/static/xsl/wl2html_client.xsl', + dataType: 'xml', + success: function(data) { + var doc = null; + var parser = new DOMParser(); + var serializer = new XMLSerializer(); + var htmlXSL = createXSLT(data); + + doc = editor.getCode().replace(/\/\s+/g, '
'); + doc = parser.parseFromString(doc, 'text/xml'); + console.log('xml', doc); + doc = htmlXSL.transformToFragment(doc, document); + console.log('after transform', doc); + $('#html-view').html(doc.firstChild); + }, + error: function() {alert('Error loading XSL!')} + }); + }; + + function reverseTransform () { + $.ajax({ + url: '/static/xsl/html2wl_client.xsl', + dataType: 'xml', + success: function(data) { + var doc = null; + var parser = new DOMParser(); + var serializer = new XMLSerializer(); + var xsl = createXSLT(data); + + doc = serializer.serializeToString($('#html-view div').get(0)) + doc = parser.parseFromString(doc, 'text/xml'); + console.log('xml',doc, doc.documentElement); + // TODO: Sprawdzenie błędów + doc = xsl.transformToDocument(doc); + console.log('after transform', doc, doc.documentElement); + doc = serialize(doc.documentElement).join(''); + // doc = serializer.serializeToString(doc.documentElement) + editor.setCode(doc); + }, + error: function() {alert('Error loading XSL!')} + }); + }; + + $('#save-button').click(function(event) { + event.preventDefault(); + console.log(editor.getCode(), $('form input[name=text]').get(0)); + $('form textarea[name=text]').val(editor.getCode()); + $('form').ajaxSubmit(function() { + alert('Udało się!'); + }); + }); + + $('#simple-view-tab').click(function() { + if ($(this).hasClass('active')) { + return; + } + $(this).addClass('active'); + $('#source-view-tab').removeClass('active'); + $('#source-editor').hide(); + $('#simple-editor').show(); + transform(); + }); + + $('#source-view-tab').click(function() { + if ($(this).hasClass('active')) { + return; + } + $(this).addClass('active'); + $('#simple-view-tab').removeClass('active'); + $('#simple-editor').hide(); + $('#source-editor').show(); + reverseTransform(); + }); + + $('.toolbar button').click(function(event) { + event.preventDefault(); + var params = eval("(" + $(this).attr('ui:action-params') + ")"); + scriptletCenter.scriptlets[$(this).attr('ui:action')](editor, params); + }); + + $('.toolbar select').change(function() { + var slug = $(this).val(); + + $('.toolbar-buttons-container').hide().filter('[data-group=' + slug + ']').show(); + $(window).resize(); + }); + + $('.toolbar-buttons-container').hide(); + $('.toolbar select').change(); + + var button = $(''); + $('#html-view').bind('mousemove', function(event) { + var editable = $(event.target).closest('*[x-editable]'); + $('#html-view .active[x-editable]').not(editable).removeClass('active').children('.edit-button').remove(); + if (!editable.hasClass('active')) { + editable.addClass('active').append(button); + } + }); + + $('.motyw').live('click', function() { + selectTheme($(this).attr('theme-class')); + }); + + $('#simple-view-tab').click(); + + } }); $(window).resize(function() { - $('iframe').height($(window).height() - $('#tabs').outerHeight()); + $('iframe').height($(window).height() - $('#tabs').outerHeight() - $('#source-editor .toolbar').outerHeight()); }); $(window).resize(); - $('.vsplitbar').dblclick(function() { + $('.vsplitbar').click(function() { if ($('#sidebar').width() == 0) { - $('#splitter').trigger('resize', [$(window).width() - 480]); + $('#sidebar').width(480).css({right: 0}).show(); + $('#source-editor, #simple-editor').css({right: 495}); + $('.vsplitbar').css({right: 480}) + // $('#splitter').trigger('resize', [$(window).width() - 480]); } else { - $('#splitter').trigger('resize', [$(window).width()]); + $('#sidebar').width(0).hide(); + $('#source-editor, #simple-editor').css({right: 15}); + $('.vsplitbar').css({right: 0}); + // $('#splitter').trigger('resize', [$(window).width()]); } + $(window).resize(); }); - - loadSuccess = function() { - if (this.get('state') != 'loading') { - alert('erroneous state:', this.get('state')); - } - } - - function createXSLT(xsl) { - var p = new XSLTProcessor(); - p.importStylesheet(xsl); - return p; - } - - function transform() { - $.ajax({ - url: '/static/xsl/wl2html_client.xsl', - dataType: 'xml', - success: function(data) { - var doc = null; - var parser = new DOMParser(); - var serializer = new XMLSerializer(); - var htmlXSL = createXSLT(data); - - doc = editor.getCode().replace(/\/\s+/g, '
'); - doc = parser.parseFromString(doc, 'text/xml'); - console.log('xml', doc); - doc = htmlXSL.transformToFragment(doc, document); - console.log('after transform', doc); - $('#html-view').html(doc.firstChild); - }, - error: function() {alert('Error loading XSL!')} - }); - }; - - function reverseTransform () { - $.ajax({ - url: '/static/xsl/html2wl_client.xsl', - dataType: 'xml', - success: function(data) { - var doc = null; - var parser = new DOMParser(); - var serializer = new XMLSerializer(); - var xsl = createXSLT(data); - doc = serializer.serializeToString($('#html-view div').get(0)) - doc = parser.parseFromString(doc, 'text/xml'); - console.log('xml',doc, doc.documentElement); - // TODO: Sprawdzenie błędów - doc = xsl.transformToDocument(doc); - console.log('after transform', doc, doc.documentElement); - doc = serialize(doc.documentElement).join(''); - // doc = serializer.serializeToString(doc.documentElement) - editor.setCode(doc); - }, - error: function() {alert('Error loading XSL!')} - }); - }; - - $('#save-button').click(function(event) { - event.preventDefault(); - console.log(editor.getCode(), $('form input[name=text]').get(0)); - $('form textarea[name=text]').val(editor.getCode()); - $('form').ajaxSubmit(function() { - alert('Udało się!'); - }); - }); - - $('#simple-view-tab').click(function() { - if ($(this).hasClass('active')) { - return; - } - $(this).addClass('active'); - $('#source-view-tab').removeClass('active'); - $('#source-editor').hide(); - $('#simple-editor').show(); - transform(); - }); - - $('#source-view-tab').click(function() { - if ($(this).hasClass('active')) { - return; - } - $(this).addClass('active'); - $('#simple-view-tab').removeClass('active'); - $('#simple-editor').hide(); - $('#source-editor').show(); - reverseTransform(); - }); - - $('.toolbar button').click(function(event) { - event.preventDefault(); - var params = eval("(" + $(this).attr('ui:action-params') + ")"); - scriptletCenter.scriptlets[$(this).attr('ui:action')](editor, params); - }); - - $('.toolbar select').change(function() { - var slug = $(this).val(); - - $('.toolbar-buttons-container').hide().filter('[data-group=' + slug + ']').show(); - }); - - $('.toolbar-buttons-container').hide(); - $('.toolbar select').change(); - - // $('#html-view *[x-editable]').live('mouseover', function() { - // $(this).css({backgroundColor: 'red', marginLeft: -50, paddingLeft: 50}); - // $(this).append(''); - // }).live('mouseout', function() { - // $(this).css({backgroundColor: null, marginLeft: 0, paddingLeft: 0}); - // $('.edit-button', this).remove(); - // }); + });