-function serialize(element) {
- if (element.nodeType == 3) { // tekst
- return [$.trim(element.nodeValue)];
- } else if (element.nodeType != 1) { // pomijamy węzły nie będące elementami XML ani tekstem
- return [];
+if (!console) {
+ console = {
+ log: function() {}
}
-
- var result = [];
- var hasContent = false;
-
- result.push('<');
- result.push(element.tagName);
-
- // Mozilla nie uważa deklaracji namespace za atrybuty
- var ns = element.tagName.indexOf(':');
- if (ns != -1 && $.browser.mozilla) {
- result.push(' xmlns:');
- result.push(element.tagName.substring(0, ns));
- result.push('="');
- result.push(element.namespaceURI);
- result.push('"');
- }
-
- if (element.attributes) {
- for (var i=0; i < element.attributes.length; i++) {
- var attr = element.attributes[i];
- result.push(' ');
- result.push(attr.name);
- result.push('="');
- result.push(attr.value);
- result.push('"');
- hasContent = true;
- }
- }
-
- if (element.childNodes.length == 0) {
- result.push(' />');
- } else {
- result.push('>');
-
- for (var i=0; i < element.childNodes.length; i++) {
- result = result.concat(serialize(element.childNodes[i]));
- }
-
- result.push('</');
- result.push(element.tagName);
- result.push('>');
- }
-
- if (element.tagName == 'akap' || element.tagName == 'akap_dialog' || element.tagName == 'akap_cd') {
- result.push('\n\n\n');
- } else if (element.tagName == 'rdf:RDF') {
- result.push('\n\n\n\n\n');
- } else if (element.tagName.indexOf('dc:') != -1) {
- result.push('\n');
- }
-
- return result;
-};
+}
+// Teraz nieużywane
function highlight(colour) {
var range, sel;
if (window.getSelection) {
}
}
-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());
// });
// }
-function gallery(element) {
+function gallery(element, url) {
var element = $(element);
+ var imageDimensions = {};
+ element.data('images', []);
function changePage(pageNumber) {
$('img', element).attr('src', element.data('images')[pageNumber - 1]);
}
}
- $.ajax({
- url: '/gallery/sample',
- type: 'GET',
- dataType: 'json',
+ 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();
+ });
+
- 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);
+ var image = $('img', element).attr('unselectable', 'on');
+ var origin = {};
+ var imageOrigin = {};
+ var zoomFactor = 1;
+
+ $('.zoom-in', element).click(function() {
+ zoomFactor = Math.min(2, zoomFactor + 0.2);
+ zoom();
+ });
+ $('.zoom-out', element).click(function() {
+ zoomFactor = Math.max(0.2, zoomFactor - 0.2);
+ zoom();
+ });
+ $('.change-gallery', element).click(function() {
+ $('.chosen-gallery').val($('#document-meta .gallery').html() || STATIC_URL + 'gallery/');
+ $('.gallery-image').animate({top: 53}, 200);
+ $('.chosen-gallery').focus();
+ });
+ $('.change-gallery-ok', element).click(function() {
+ if ($('#document-meta .gallery').length == 0) {
+ $('<div class="gallery"></div>').appendTo('#document-meta');
+ }
+ $('#document-meta .gallery').html($('.chosen-gallery').val());
+ updateGallery($('.chosen-gallery').val());
+ $('.gallery-image').animate({top: 27}, 200);
+ });
+ $('.change-gallery-cancel', element).click(function() {
+ $('.gallery-image').animate({top: 27}, 200);
+ });
+
+ $('img', element).load(function() {
+ image.css({width: null, height: null});
+ imageDimensions = {
+ width: $(this).width() * zoomFactor,
+ height: $(this).height() * zoomFactor,
+ originWidth: $(this).width(),
+ originHeight: $(this).height(),
+ galleryWidth: $(this).parent().width(),
+ galleryHeight: $(this).parent().height()
+ };
+ console.log('load', imageDimensions)
+ var position = normalizePosition(
+ image.position().left,
+ image.position().top,
+ imageDimensions.galleryWidth,
+ imageDimensions.galleryHeight,
+ imageDimensions.width,
+ imageDimensions.height
+ );
+ image.css({left: position.x, top: position.y, width: $(this).width() * zoomFactor, height: $(this).height() * zoomFactor});
+ });
+
+ $(window).resize(function() {
+ imageDimensions.galleryWidth = image.parent().width();
+ imageDimensions.galleryHeight = image.parent().height();
+ });
+
+ function bounds(galleryWidth, galleryHeight, imageWidth, imageHeight) {
+ return {
+ maxX: 0,
+ maxY: 0,
+ minX: galleryWidth - imageWidth,
+ minY: galleryHeight - imageHeight
+ }
+ }
+
+ function normalizePosition(x, y, galleryWidth, galleryHeight, imageWidth, imageHeight) {
+ var b = bounds(galleryWidth, galleryHeight, imageWidth, imageHeight);
+ return {
+ x: Math.min(b.maxX, Math.max(b.minX, x)),
+ y: Math.min(b.maxY, Math.max(b.minY, y))
+ }
+ }
+
+ function onMouseMove(event) {
+ var position = normalizePosition(
+ event.clientX - origin.x + imageOrigin.left,
+ event.clientY - origin.y + imageOrigin.top,
+ imageDimensions.galleryWidth,
+ imageDimensions.galleryHeight,
+ imageDimensions.width,
+ imageDimensions.height
+ );
+ image.css({position: 'absolute', top: position.y, left: position.x});
+ return false;
+ }
+
+ function setZoom(factor) {
+ zoomFactor = factor;
+ }
+
+ function zoom() {
+ imageDimensions.width = imageDimensions.originWidth * zoomFactor;
+ imageDimensions.height = imageDimensions.originHeight * zoomFactor;
+ var position = normalizePosition(
+ image.position().left,
+ image.position().top,
+ imageDimensions.galleryWidth,
+ imageDimensions.galleryHeight,
+ imageDimensions.width,
+ imageDimensions.height
+ );
+ console.log(image.position(), imageDimensions, position);
+ image.css({width: imageDimensions.width, height: imageDimensions.height,
+ left: position.x, top: position.y});
+
+ }
+
+ 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();
+ $(document)
+ .bind('mousemove.gallery', onMouseMove)
+ .bind('mouseup.gallery', onMouseUp);
+ return false;
+ });
+
+ function updateGallery(url) {
+ $.ajax({
+ url: url,
+ type: 'GET',
+ dataType: 'json',
+
+ success: function(data) {
+ element.data('images', data);
+ pn.val(1);
pn.change();
- });
+ $('img', element).show();
+ },
- 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;
+ error: function(data) {
+ element.data('images', []);
+ pn.val(1);
+ pn.change();
+ $('img', element).hide();
}
-
- function onMouseUp(event) {
- $(document)
- .unbind('mousemove.gallery')
- .unbind('mouseup.gallery');
- return false;
+ });
+ }
+
+ if (url) {
+ updateGallery(url);
+ }
+}
+
+
+function transform(editor) {
+ $.blockUI({message: 'Ładowanie...'});
+ setTimeout(function() {
+ xml2html({
+ xml: editor.getCode(),
+ success: function(element) {
+ $('#html-view').html(element);
+ $.unblockUI();
+ }, error: function(text) {
+ $('#html-view').html('<p class="error">Wystąpił błąd:</p><pre>' + text + '</pre>');
+ $.unblockUI();
}
-
- 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;
- });
+ });
+ }, 200);
+};
+
+
+function reverseTransform(editor) {
+ var serializer = new XMLSerializer();
+ if ($('#html-view .error').length > 0) {
+ return;
+ }
+ $.blockUI({message: 'Ładowanie...'});
+ setTimeout(function() {
+ html2xml({
+ xml: serializer.serializeToString($('#html-view div').get(0)),
+ success: function(text) {
+ editor.setCode(text);
+ $.unblockUI();
+ }, error: function(text) {
+ $('#source-editor').html('<p>Wystąpił błąd:</p><pre>' + text + '</pre>');
+ $.unblockUI();
+ }
+ });
+ }, 200);
+}
+
+
+function html(element) {
+ var element = $(element);
+
+ 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];
+
+ if(s && e) {
+ range.setStartAfter(s);
+ range.setEndBefore(e);
+ selection.addRange(range);
}
+ };
+
+ // function openForEdit($origin)
+ // {
+ // // if(this.currentOpen && this.currentOpen != $origin) {
+ // // this.closeWithSave(this.currentOpen);
+ // // }
+ //
+ // var $box = null
+ //
+ // // annotations overlay their sub box - not their own box //
+ // if($origin.is(".annotation-inline-box"))
+ // $box = $("*[x-annotation-box]", $origin);
+ // else
+ // $box = $origin;
+ //
+ // var x = $box[0].offsetLeft;
+ // var y = $box[0].offsetTop;
+ // var w = $box.outerWidth();
+ // var h = $box.innerHeight();
+ //
+ // console.log("Edit origin:", $origin, " box:", $box);
+ // console.log("offsetParent:", $box[0].offsetParent);
+ // console.log("Dimensions: ", x, y, w , h);
+ //
+ // // start edition on this node
+ // var $overlay = $('<div class="html-editarea"><textarea></textarea></div>');
+ //
+ // h = Math.max(h - 20, 2*parseInt($box.css('line-height')));
+ //
+ // console.log(h);
+ //
+ // $overlay.css({
+ // position: 'absolute',
+ // height: h,
+ // left: x,
+ // top: y,
+ // right: 0
+ // });
+ //
+ // $($box[0].offsetParent).append($overlay);
+ // console.log($overlay);
+ // }
+ //
+ // $('.edit-button').live('click', function() {
+ // openForEdit($(this).parent());
+ // });
+ //
+ var button = $('<button class="edit-button">Edytuj</button>');
+ $(element).bind('mousemove', function(event) {
+ var editable = $(event.target).closest('*[x-editable]');
+ $('.active[x-editable]', element).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'));
});
}
+
$(function() {
- gallery('#sidebar');
+ gallery('#sidebar', $('#document-meta .gallery').html());
+ html('#html-view');
CodeMirror.fromTextArea('id_text', {
parserfile: 'parsexml.js',
- path: "/static/js/lib/codemirror/",
- stylesheet: "/static/css/xmlcolors.css",
+ path: STATIC_URL + "js/lib/codemirror/",
+ stylesheet: STATIC_URL + "css/xmlcolors.css",
parserConfig: {
useHTMLKludges: false
},
tabMode: 'spaces',
indentUnit: 0,
initCallback: function(editor) {
+ $('#save-button').click(function(event) {
+ event.preventDefault();
+ $.blockUI({message: $('#save-dialog')});
+ });
- function createXSLT(xsl) {
- var p = new XSLTProcessor();
- p.importStylesheet(xsl);
- return p;
- }
-
- function transform() {
+ $('#save-ok').click(function() {
+ $.blockUI({message: 'Zapisywanie...'});
+
+ var metaComment = '<!--';
+ $('#document-meta div').each(function() {
+ metaComment += '\n\t' + $(this).attr('class') + ': ' + $(this).html();
+ });
+ metaComment += '\n-->'
+
+ var data = {
+ name: $('#document-name').html(),
+ text: metaComment + editor.getCode(),
+ revision: $('#document-revision').html(),
+ author: 'annonymous',
+ comment: $('#komentarz').val()
+ };
+
+ console.log(data);
+
$.ajax({
- url: '/static/xsl/wl2html_client.xsl',
- dataType: 'xml',
+ url: document.location.href,
+ type: "POST",
+ dataType: "json",
+ data: data,
success: function(data) {
- var doc = null;
- var parser = new DOMParser();
- var serializer = new XMLSerializer();
- var htmlXSL = createXSLT(data);
-
- doc = editor.getCode().replace(/\/\s+/g, '<br />');
- 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);
+ if (data.text) {
+ editor.setCode(data.text);
+ $('#document-revision').html(data.revision);
+ } else {
+ console.log(data.errors);
+ alert(data.errors);
+ }
+ $.unblockUI();
},
- 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(xhr, textStatus, errorThrown) {
+ alert('error: ' + textStatus + ' ' + errorThrown);
},
- 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ę!');
- });
+ })
+ });
+
+ $('#save-cancel').click(function() {
+ $.unblockUI();
});
$('#simple-view-tab').click(function() {
$('#source-view-tab').removeClass('active');
$('#source-editor').hide();
$('#simple-editor').show();
- transform();
+ transform(editor);
});
$('#source-view-tab').click(function() {
$('#simple-view-tab').removeClass('active');
$('#simple-editor').hide();
$('#source-editor').show();
- reverseTransform();
+ reverseTransform(editor);
});
- $('.toolbar button').click(function(event) {
+ $('#source-editor .toolbar button').click(function(event) {
event.preventDefault();
var params = eval("(" + $(this).attr('ui:action-params') + ")");
scriptletCenter.scriptlets[$(this).attr('ui:action')](editor, params);
$('.toolbar-buttons-container').hide();
$('.toolbar select').change();
- var button = $('<button class="edit-button">Edytuj</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();
-
}
});
if ($('#sidebar').width() == 0) {
$('#sidebar').width(480).css({right: 0}).show();
$('#source-editor, #simple-editor').css({right: 495});
- $('.vsplitbar').css({right: 480})
- // $('#splitter').trigger('resize', [$(window).width() - 480]);
+ $('.vsplitbar').css({right: 480}).addClass('active');
} else {
$('#sidebar').width(0).hide();
$('#source-editor, #simple-editor').css({right: 15});
- $('.vsplitbar').css({right: 0});
- // $('#splitter').trigger('resize', [$(window).width()]);
+ $('.vsplitbar').css({right: 0}).removeClass('active');
}
$(window).resize();
});