diff --git a/css/editor.css b/css/editor.css new file mode 100644 index 0000000..32240cc --- /dev/null +++ b/css/editor.css @@ -0,0 +1,231 @@ +#csEditorLayer { + position: absolute; + z-index: 2000; + height: 100%; + width: 100%; + top: 0; + background-color: rgba(204, 204, 204, .9); + display: none; +} + +#csEditorWrapper { + height: 100%; +} + +#csEditorHeader, #csEditorFooter { + height: 50px; + background-color: #000; + color: #fff; +} + +#csEditorHeader h1, #csEditorFooter h1 { + font-size: 24px; + margin-top: 0; + margin-bottom: 0; + line-height: 50px; +} + +#csEditorLayerClose { + font-size: 24px; + line-height: 50px; + cursor: pointer; +} + +#csEditorContent { + height: calc(100% - 100px); + background-color: #fff; + overflow: auto; +} + +#csEditorPageElements { + width: 220px; + position: fixed; + right: 0; + top: 300px; + overflow: hidden; +} + +#csEditorPageElementsTitle { + margin-right: 45px; + font-weight: bold; + cursor: move; +} + +#csEditorPageElementsMin { + position: absolute; + right: 15px; + top: 12px; + cursor: pointer; +} + +#csEditorPageElementsContent h2 { + font-size: 14px; +} + +#csEditorPageElementsContent h2, #csEditorPageElementsContent p { + font-weight: bold; + height: 20px; + line-height: 20px; + margin: 0; + padding: 0; +} + +#csEditorPageElementsContent .ImageText-Image { + display: none; +} + +#csEditorPageElementsContent .ImageText-Text { + padding: 0; +} + +#csEditorPageElementsContent h2, #csEditorPageElementsContent p, #csEditorPageElementsContent .ImageText-Text { + width: 100%; +} + +#csEditorPageElementsContent .row { + margin: 0; +} + +.pageWrapper { + position: relative; +} + +.pageWrapper .glyphicon-pencil { + position: absolute; + left: -14px; + cursor: pointer; +} + +.pageWrapper .glyphicon-trash { + position: absolute; + left: -42px; + cursor: pointer; +} + +.pageWrapper .glyphicon-sort { + position: absolute; + right: -14px; + cursor: move; +} + +.csEditorSortable .glyphicon-sort { + position: absolute; + right: 42px; + cursor: move; + +} + +.csEditorSortable li { + position: relative; + list-style-type: none; +} + +ul.nav { + position: relative; +} + +ul.nav > .glyphicon-pencil { + left: -29px; + color: #fff; +} + +.row { + position: relative; +} + +.editableHover { + background-color: #f00; + opacity: .5; +} + +.csEditorStructure ul { + padding-left: 20px; + font-style: normal; + text-decoration: none; +} + +.csEditorStructure > ul { + padding: 15px; +} + +.csEditorStructure li { + text-decoration: none; + list-style-type: none; + font-weight: normal; +} + +.csEditorStructure li.csEditorClosed ul { + display: none; +} + +.csEditorStructure li.csEditorChosen { + font-weight: bold; +} + +.csEditorStructure li.csEditorInactive { + font-style: italic; + color: #777; +} + +#csEditorContent .csEditorSliderContent { + padding-top: 48px; +} + +#csEditorContent .csEditorSliderContent:not(:first-of-type) { + display: none; +} + +#csEditorForm, .csEditorSlider, .csEditorSliderContent, .editFields, .sortFields, .moveFields, .childFields, .siblingFields { + height: 100%; +} + +.editFields, .sortFields, .moveFields, .childFields, .siblingFields { + padding-top: 24px; +} + +#content .sortable { + min-height: 20px; +} + +#csEditorImage { + margin-top: 42px; +} + +#csEditorImagePlaceholder { + position: relative; +} + +#csEditorImageCover { + position: absolute; + box-shadow: inset 0 0 4px #f00; + z-index: 50; +} + +#csEditorCoverTop, #csEditorCoverRight, #csEditorCoverBottom, #csEditorCoverLeft { + position: absolute; + background-color: rgba(100, 100, 100, .8); + z-index: 1; +} + +#csEditorContent > div { + height: 100%; +} + +.csEditorButtonGroup { + position: absolute; + bottom: 0; + height: 50px; + background-color: #9d9d9d; + padding-top: 8px; + width: 100%; +} + +.ui-icon-gripsmall-diagonal-se { + position: absolute; + width: 8px; + height: 8px; + bottom: 0px; + right: 0px; + background-color: #f00; + cursor: se-resize; +} \ No newline at end of file diff --git a/css/editor.min.css b/css/editor.min.css new file mode 100644 index 0000000..957f966 --- /dev/null +++ b/css/editor.min.css @@ -0,0 +1 @@ +#csEditorLayer{position:absolute;z-index:2000;height:100%;width:100%;top:0;background-color:rgba(204,204,204,.9);display:none}#csEditorWrapper{height:100%}#csEditorHeader,#csEditorFooter{height:50px;background-color:#000;color:#fff}#csEditorHeader h1,#csEditorFooter h1{font-size:24px;margin-top:0;margin-bottom:0;line-height:50px}#csEditorLayerClose{font-size:24px;line-height:50px;cursor:pointer}#csEditorContent{height:calc(100% - 100px);background-color:#fff;overflow:auto}#csEditorPageElements{width:220px;position:fixed;right:0;top:300px;overflow:hidden}#csEditorPageElementsTitle{margin-right:45px;font-weight:bold;cursor:move}#csEditorPageElementsMin{position:absolute;right:15px;top:12px;cursor:pointer}#csEditorPageElementsContent h2{font-size:14px}#csEditorPageElementsContent h2,#csEditorPageElementsContent p{font-weight:bold;height:20px;line-height:20px;margin:0;padding:0}#csEditorPageElementsContent .ImageText-Image{display:none}#csEditorPageElementsContent .ImageText-Text{padding:0}#csEditorPageElementsContent h2,#csEditorPageElementsContent p,#csEditorPageElementsContent .ImageText-Text{width:100%}#csEditorPageElementsContent .row{margin:0}.pageWrapper{position:relative}.pageWrapper .glyphicon-pencil{position:absolute;left:-14px;cursor:pointer}.pageWrapper .glyphicon-trash{position:absolute;left:-42px;cursor:pointer}.pageWrapper .glyphicon-sort{position:absolute;right:-14px;cursor:move}.csEditorSortable .glyphicon-sort{position:absolute;right:42px;cursor:move}.csEditorSortable li{position:relative;list-style-type:none}ul.nav{position:relative}ul.nav>.glyphicon-pencil{left:-29px;color:#fff}.row{position:relative}.editableHover{background-color:red;opacity:.5}.csEditorStructure ul{padding-left:20px;font-style:normal;text-decoration:none}.csEditorStructure>ul{padding:15px}.csEditorStructure li{text-decoration:none;list-style-type:none;font-weight:normal}.csEditorStructure li.csEditorClosed ul{display:none}.csEditorStructure li.csEditorChosen{font-weight:bold}.csEditorStructure li.csEditorInactive{font-style:italic;color:#777}#csEditorContent .csEditorSliderContent{padding-top:48px}#csEditorContent .csEditorSliderContent:not(:first-of-type){display:none}#csEditorForm,.csEditorSlider,.csEditorSliderContent,.editFields,.sortFields,.moveFields,.childFields,.siblingFields{height:100%}.editFields,.sortFields,.moveFields,.childFields,.siblingFields{padding-top:24px}#content .sortable{min-height:20px}#csEditorImage{margin-top:42px}#csEditorImagePlaceholder{position:relative}#csEditorImageCover{position:absolute;box-shadow:inset 0 0 4px red;z-index:50}#csEditorCoverTop,#csEditorCoverRight,#csEditorCoverBottom,#csEditorCoverLeft{position:absolute;background-color:rgba(100,100,100,.8);z-index:1}#csEditorContent>div{height:100%}.csEditorButtonGroup{position:absolute;bottom:0;height:50px;background-color:#9d9d9d;padding-top:8px;width:100%}.ui-icon-gripsmall-diagonal-se{position:absolute;width:8px;height:8px;bottom:0;right:0;background-color:red;cursor:se-resize} \ No newline at end of file diff --git a/editor.js.php b/editor.js.php new file mode 100644 index 0000000..3f78c6a --- /dev/null +++ b/editor.js.php @@ -0,0 +1,37 @@ + + +var csEditorLang = ; +var csEditorTemplate = ''; +var csEditorPageElements = ''; + + 0) { + return true; + } + var style = (this.dataset.editor === 'Headline' || this.dataset.editor === 'Navigation' || this.dataset.editor === 'Subline') ? ' style="margin-top:24px;"' : ''; + $(this).append(''); + }); + + if (CS.sortableElement.length > 1) { + CS.sortableElement.each(function () { + var style = (this.dataset.editor === 'Subline') ? ' style="margin-top:24px;"' : ''; + $(this).append(''); + }); + } + + CS.sortableElement.each(function () { + var style = (this.dataset.editor === 'Subline') ? ' style="margin-top:24px;"' : ''; + $(this).append(''); + }); + + }, + + /** + * Funktionalität auf die Icons legen + */ + initIconFunctions: function () { + CS.editorOpenElement = $('.glyphicon-pencil'); + CS.editorSortElement = $('.glyphicon-sort'); + CS.editorTrashElement = $('.glyphicon-trash'); + + /** + * Hover Effekte + */ + CS.editorOpenElement.on('mouseenter', function () { + $(this).parent('[data-editor]').addClass(CS.editableHoverClassName); + }); + + CS.editorOpenElement.on('mouseleave', function () { + $(this).parent('[data-editor]').removeClass(CS.editableHoverClassName); + }); + + CS.editorSortElement.on('mouseenter', function () { + $(this).parent('[data-editor]').addClass(CS.editableHoverClassName); + }); + + CS.editorSortElement.on('mouseleave', function () { + $(this).parent('[data-editor]').removeClass(CS.editableHoverClassName); + }); + + CS.editorTrashElement.on('mouseenter', function () { + $(this).parent('[data-editor]').addClass(CS.editableHoverClassName); + }); + + CS.editorTrashElement.on('mouseleave', function () { + $(this).parent('[data-editor]').removeClass(CS.editableHoverClassName); + }); + + /** + * Sortierung der Seiten-Elemente und Einordnen neuer Elemente + */ + CS.pageElement.sortable({ + axis: 'y', + forcePlaceholderSize: true, + handle: '.glyphicon-sort', + placeholder: CS.editableHoverClassName, + receive: function (event, ui) { + CS.preventSortStop = true; + ui.helper.removeAttr('style'); + + var sortOrder = CS.pageElement.sortable('toArray', {attribute: 'data-element'}); + var formData = new FormData(); + formData.append('request', 'insertContent'); + formData.append('navID', csEditorParams.navID); + formData.append('token', csEditorParams.token); + formData.append('sortOrder', sortOrder); + + var returnData = CS.sendRequest(formData, true); + if (!isNaN(returnData.responseJSON)) { + /** + * Arbeiten auf Attributen, data-Elemente funktionieren sonst in der stop-Funktion nicht! + */ + $(ui.helper).attr('data-id', returnData.responseJSON); + $(ui.helper).attr('data-element', $(ui.helper).attr('data-editor') + '_' + returnData.responseJSON); + + CS.initEditor(); + } + else { + alert('Fehler beim Einfügen des neuen Seiten-Inhalts'); + } + }, + stop: function () { + + if (CS.preventSortStop === true) { + CS.preventSortStop = false; + return; + } + + var sortOrder = CS.pageElement.sortable('toArray', {attribute: 'data-element'}); + var formData = new FormData(); + formData.append('request', 'updateContentSort'); + formData.append('navID', csEditorParams.navID); + formData.append('token', csEditorParams.token); + formData.append('sortOrder', sortOrder); + CS.sendRequest(formData); + } + }); + }, + + /** + * Funktionalität im Editor-Layer festlegen + */ + initEditorFunctions: function () { + /** + * Editor öffnen + */ + CS.editorOpenElement.on('click', function () { + CS.editorType = $(this).parent('[data-editor]').data('editor'); + CS.editorTemplate = CS.editorType.toLowerCase() + '.php'; + CS.editorDataID = $(this).parent('[data-editor]').data('id'); + CS.editorTitle = CS.titleElement.html(); + CS.editorName = CS.editorType.toUpperCase(); + CS.titleElement.html(CS.editorTitle.replace('%%editor%%', CS.editorName)); + + if (CS.callEditor() === false) { + return false; + } + + CS.waitingElement.show(); + CS.layerElement.show(); + }); + + /** + * Dialog vor dem Löschen + */ + CS.editorConfirmElement.dialog({ + autoOpen: false, + resizable: false, + classes: { + 'ui-dialog': 'panel panel-primary', + 'ui-dialog-titlebar': 'panel-heading', + 'ui-dialog-titlebar-close': 'glyphicon glyphicon-remove', + 'ui-dialog-content': 'panel-body', + 'ui-dialog-buttonpane': 'panel-footer', + }, + height: 'auto', + width: 400, + modal: true, + closeOnEscape: true, + buttons: [ + { + text: csEditorLang.button.delete, + click: function () { + var formData = new FormData(); + formData.append('token', csEditorParams.token); + formData.append('request', 'deleteContentElement'); + formData.append('navID', csEditorParams.navID); + formData.append('editorType', CS.editorType); + formData.append('editorDataID', CS.editorDataID); + var returnData = CS.sendRequest(formData, true); + if (!isNaN(returnData.responseJSON) && returnData.responseJSON > 0) { + $('div[data-element="' + CS.editorType + '_' + CS.editorDataID + '"]').remove(); + $(this).dialog('close'); + } + } + }, + { + text: csEditorLang['button']['cancel'], + click: function () { + $(this).dialog('close'); + } + } + ] + }); + + $('.ui-icon-alert', CS.editorConfirmElement).addClass('glyphicon glyphicon-alert'); + $('button', '.ui-dialog-buttonset').addClass('btn btn-default'); + + /** + * Löschen von Elementen, danach kommt der Dialog + */ + CS.editorTrashElement.on('click', function () { + CS.editorDataID = $(this).parent().data('id'); + CS.editorType = $(this).parent().data('editor'); + CS.editorConfirmElement.dialog('open'); + }); + + /** + * Zur Sicherheit Funktionen von den Handlern entfernen + * Ansonsten werden diese Events mehrfach getriggert, wenn neue Seitenelement hinzugefügt werden + */ + CS.contentElement.off('click', '.formCancel'); + CS.contentElement.off('click', '.formNext'); + CS.contentElement.off('click', '.formPrev'); + CS.contentElement.off('click', '.formSubmit'); + + /** + * Button zum Absenden der Daten + */ + CS.contentElement.on('click', '.formSubmit', function () { + /** + * Update der CKEditor-Instanzen, rückschreiben in die Textareas + */ + $.each(CKEDITOR.instances, function (key) { + CKEDITOR.instances[key].updateElement(); + }); + + var form = document.getElementById('csEditorForm'); + var formData = new FormData(form); + formData.append('token', csEditorParams.token); + + var returnData = CS.sendRequest(formData, true); + if (!isNaN(returnData.responseJSON) && returnData.responseJSON > 0) { + CS.resetEditor(); + CS.callEditor(); + } + else { + /** + * TODO: Fehlermeldung mit Übersetzung + */ + alert('Fehler beim Speichern der Daten'); + } + }); + + /** + * Button zum Abbrechen, schließt den Editor + */ + CS.contentElement.on('click', '.formCancel', function () { + CS.closeEditor(); + }); + + /** + * Weiter, benötigt für Editoren mit mehreren Seiten + */ + CS.contentElement.on('click', '.formNext', function () { + var actualInnerSlider = $(this).parents('.csEditorSliderContent'); + actualInnerSlider.hide(); + actualInnerSlider.next('.csEditorSliderContent').show(); + }); + + /** + * Zurück, benötigt für Editoren mit mehreren Seiten + */ + CS.contentElement.on('click', '.formPrev', function () { + var actualInnerSlider = $(this).parents('.csEditorSliderContent'); + actualInnerSlider.hide(); + actualInnerSlider.prev('.csEditorSliderContent').show(); + }); + }, + + initNewElementFunctions: function () { + /** + * Verschiebbarkeit der Box + */ + CS.newObjectElement.draggable({ + addClasses: false, + handle: CS.newObjectTitleElement, + stop: function () { + CS.newObjectElement.css({ + left: 'auto', + right: ($(document).innerWidth - CS.newObjectElement.position().left - CS.newObjectElement.innerWidth) + }); + } + }); + + /** + * Hinzufügen neuer Seiten-Inhalte + * TODO: Ausblenden nicht vorhandener Neuer Elemente anhand der Konfiguration + */ + CS.newElementsClass.draggable({ + connectToSortable: CS.pageElement, + helper: 'clone', + start: function (event, ui) { + ui.helper.removeClass(CS.newElementsClassName); + ui.helper.removeClass(CS.editableHoverClassName); + $('div', ui.helper).removeClass(CS.editableHoverClassName); + } + }); + }, + + callEditor: function () { + switch (CS.editorType) { + case 'Navigation': + CS.editor = Navigation; + break; + + case 'Headline': + CS.editor = Headline; + break; + + case 'Subline': + CS.editor = Subline; + break; + + case 'Text': + CS.editor = Text; + break; + + case 'ImageText': + CS.editor = ImageText; + break; + + case 'KeyVisual': + CS.editor = KeyVisual; + break; + + default: + alert('JavaScript Funktionalität ist für diesen Editoren-Typ (' + CS.editorType + ') noch nicht implementiert!'); + return false; + break; + } + if (CS.editor !== null) { + CS.fetchHTML(); + CS.fetchData(); + CS.editor.fillEditorContent(); + return true; + } + }, + + resetEditor: function () { + CS.editor.close(); + CS.contentElement.html(''); + + CS.editorHtml = ''; + CS.editorData = null; + }, + + closeEditor: function () { + CS.resetEditor(); + CS.titleElement.html(CS.editorTitle); + + CS.editorTitle = ''; + CS.editorType = ''; + CS.editorTemplate = ''; + CS.editorName = ''; + CS.editorDataID = 0; + CS.editor = null; + + CS.waitingElement.hide(); + CS.layerElement.hide(); + location.reload(); + }, + + sendRequest: function (formData, sync) { + sync = (sync) ? sync : false; + + return $.ajax({ + url: csEditorParams.backendUrl, + data: formData, + dataType: 'json', + method: 'post', + async: !sync, + processData: false, + contentType: false, + error: function (jqXHR, textStatus, errorThrown) { + alert(csEditorLang.error.sendData + '\n' + csEditorLang.error.status + '"' + textStatus + '"\n' + csEditorLang.error.errorMessage + '"' + errorThrown + '"'); + } + }); + + }, + + fetchHTML: function () { + $.ajax({ + url: csEditorParams.editorUrl + csEditorParams.editorVersion + '/templates/' + CS.editorTemplate, + data: {lang: csEditorParams.sessionLanguage}, + dataType: 'html', + method: 'post', + error: function () { + alert(csEditorLang.error.template + '\n' + CS.editorTemplate); + }, + success: function (editorHtml) { + CS.editorHtml = editorHtml; + CS.contentElement.html(editorHtml); + } + }); + }, + + fetchData: function () { + $.ajax({ + url: csEditorParams.backendUrl, + data: {token: csEditorParams.token, request: 'get' + CS.editorType, ID: CS.editorDataID}, + dataType: 'json', + method: 'post', + error: function (jqXHR, textStatus, errorThrown) { + alert(csEditorLang.error.fetchData + '\n' + csEditorLang.error.status + '"' + textStatus + '"\n' + csEditorLang.error.errorMessage + '"' + errorThrown + '"'); + }, + success: function (editorData) { + CS.editorData = editorData; + } + }); + } + +}); + +$(document).ready(function () { + var body = $('body'); + body.prepend(csEditorTemplate); + body.append(csEditorPageElements); + CS.initEditor(); + CS.initPermanentFunctions(); +}); diff --git a/js/editor.js b/js/editor.js deleted file mode 100644 index 0771f96..0000000 --- a/js/editor.js +++ /dev/null @@ -1,1341 +0,0 @@ -var userId; -var specialSite; -var editorLang; -var grid; -var gridCount; -var prefix; -var navigationId; -var webserviceUrl; -var editorUrl; -var editorVersion; -var sessLang; -var navId; -var editorParams; -var pathMed; -var imageTypes; -var dimOrig; -var stdKeyvisual; -var dimKeyvisual; -var keyvisualThumb; -var stdImage; -var dimImage; -var imageThumb; - -$(document).ready(function () { - editor.init(); -}); - -var editor = new Object({ - /** - * Standard-Variablen für den Editor - */ - type: '', - title: '', - name: '', - contentHtml: '', - contentData: null, - preventSortStop: false, - - /** - * jQuery-Elemente für den Editor - */ - pageElement: null, - titleElement: null, - layerElement: null, - closeElement: null, - contentElement: null, - waitingElement: null, - editableElement: null, - formElement: null, - newObjectElement: null, - newObjectTitleElement: null, - newObjectMinElement: null, - newSublineElement: null, - newTextElement: null, - newTextImageTextElement: null, - newTextImageImageElement: null, - newElementsClass: null, - element: null, - - init: function () { - editor.initElements(); - editor.initNewElements(); - editor.hoverEvents(); - editor.clickEvents(); - }, - - initElements: function () { - editor.pageElement = $('#content'); - editor.titleElement = $('#editor_title'); - editor.layerElement = $('#editor_layer'); - editor.closeElement = $('#editor_layer_close'); - editor.contentElement = $('#editor_content'); - editor.waitingElement = $('#wait'); - editor.editableElement = $('[data-editable]'); - editor.title = editor.titleElement.html(); - - if (specialSite === true) { - return true; - } - $('> div:not(.headline)', editor.pageElement).each(function () { - $(this).append(''); - $(this).append(''); - }); - - }, - - initNewElements: function () { - editor.newObjectElement = $('#editor_elements'); - editor.newObjectTitleElement = $('#boxtitle'); - editor.newSublineElement = $('.content', '#content_subline_'); - editor.newTextElement = $('.content', '#content_text_'); - editor.newTextImageTextElement = $('.content', '#content_textimage_'); - editor.newTextImageImageElement = $('img', '#content_textimage_'); - - editor.newObjectMinElement = $('.min'); - editor.newElementsClass = $('.elem_button'); - - editor.newObjectTitleElement.html(editorLang.newContent.title); - editor.newSublineElement.html(editorLang.newContent.subline); - editor.newTextElement.html(editorLang.newContent.text); - editor.newTextImageTextElement.html(editorLang.newContent.textImage); - editor.newTextImageImageElement.attr('src', stdImage); - }, - - hoverEvents: function () { - editor.editableElement.on('mouseenter', function (event) { - if ($(event.currentTarget).data('editable') === 'textimage') { - return; - } - $(event.currentTarget).addClass('editable_hover'); - }); - editor.editableElement.on('mouseleave', function (event) { - $(event.currentTarget).removeClass('editable_hover'); - }); - }, - - clickEvents: function () { - editor.editableElement.on('click', function (event) { - if (event.target.tagName === 'A' || event.target.tagName === 'SPAN') { - return true; - } - - var tmpEditorType = event.currentTarget.dataset.editable; - if (tmpEditorType === 'textimage') { - return true; - } - - editor.type = tmpEditorType; - editor.waitingElement.show(); - editor.name = editor.type.toUpperCase(); - editor.element = $(event.currentTarget).attr('id'); - editor.callEditor(); - }); - - editor.closeElement.click(function () { - editor.close(); - navEditor.close(); - imgEditor.close(); - }); - - editor.contentElement.on('click', '.formSubmit', function () { - editor.submitData(); - }); - - editor.contentElement.on('click', '.formCancel', function () { - editor.close(); - }); - - editor.contentElement.on('click', '.formNext', function () { - var actualInnerSlider = $(this).parents('.inner'); - actualInnerSlider.hide(); - actualInnerSlider.next('.inner').show(); - }); - - editor.contentElement.on('click', '.formPrev', function () { - var actualInnerSlider = $(this).parents('.inner'); - actualInnerSlider.hide(); - actualInnerSlider.prev('.inner').show(); - }); - - editor.contentElement.on('change', '#spieltyp', function () { - var durationElement = $('#spieldauer'); - var delayedElement = $('#verschoben'); - var duration = $(this).find(':selected').data('duration'); - var delayed = $(this).find(':selected').data('delayed'); - - if (duration == 'hide') { - durationElement.val('regular'); - durationElement[0].disabled = true; - } - else if (duration == 'show') { - durationElement[0].disabled = false; - } - - if (delayed == 'hide') { - delayedElement[0].disabled = true; - } - else if (delayed == 'show') { - delayedElement[0].disabled = false; - } - }); - - editor.newObjectElement.on('click', editor.newObjectMinElement, function (event) { - if (!$(event.target).hasClass('min')) { - return; - } - if (editor.newObjectTitleElement.html() !== '') { - editor.newObjectTitleElement.html(''); - editor.newObjectMinElement.html('<'); - $(this).css({width: grid, height: grid}); - editor.newObjectMinElement.css({marginRight: -1 * (grid / 2)}); - } - else { - editor.newObjectTitleElement.html(editorLang.newContent.title); - editor.newObjectMinElement.html('>'); - $(this).css({width: '', height: ''}); - editor.newObjectMinElement.css({marginRight: ''}); - } - }); - - editor.newObjectElement.draggable({ - addClasses: false, - handle: editor.newObjectTitleElement - }); - - editor.pageElement.sortable({ - axis: 'y', - forcePlaceholderSize: true, - handle: '.sort_handle', - items: '> :not(.headline)', - placeholder: 'editable_hover', - receive: function (event, ui) { - editor.preventSortStop = true; - - ui.helper.attr('id', ui.helper.data('temp')); - ui.helper.removeAttr('style'); - - var headline = $('.headline', editor.pageElement); - var sortOrder = editor.pageElement.sortable('toArray'); - var isTextImage = (ui.helper.attr('id') === 'content_textimage_'); - if (headline.length === 1) { - sortOrder.splice(0, 0, headline.attr('id')); - } - - var formData = { - request: 'insertData', - userId: userId, - prefix: prefix, - navId: navigationId, - dataSet: ui.helper.data('temp'), - content: $('.content', ui.helper).html(), - order: sortOrder - }; - if (isTextImage) { - formData.image = $('img', ui.helper).attr('src'); - } - - $.ajax({ - url: webserviceUrl, - data: formData, - dataType: 'json', - method: 'post', - error: function (jqXHR, textStatus, errorThrow) { - console.log(jqXHR); - console.log(textStatus); - console.log(errorThrow); - alert('Fehler beim Einfügen des neuen Seitenelements!') - }, - - success: function (data) { - if (isTextImage) { - location.reload(); - } - ui.helper.attr('id', ui.helper.data('temp') + data); - editor.preventSortStop = false; - } - }); - - editor.initElements(); - editor.hoverEvents(); - editor.clickEvents(); - }, - stop: function () { - - if (editor.preventSortStop === true) { - return; - } - var headline = $('.headline', editor.pageElement); - var sortOrder = editor.pageElement.sortable('toArray'); - if (headline.length === 1) { - sortOrder.splice(0, 0, headline.attr('id')); - } - var formData = { - request: 'updateData', - userId: userId, - prefix: prefix, - dataSet: 'content_' + navigationId, - siteContents: sortOrder.join(';').replace(/content_/g, '') - }; - - $.ajax({ - url: webserviceUrl, - data: formData, - dataType: 'text', - method: 'post', - error: function (jqXHR, textStatus, errorThrow) { - console.log(jqXHR); - console.log(textStatus); - console.log(errorThrow); - alert('Fehler beim Speichern der Sortierung!') - } - }); - } - }); - - editor.newElementsClass.draggable({ - connectToSortable: editor.pageElement, - helper: 'clone', - start: function (event, ui) { - ui.helper.removeClass('elem_button'); - ui.helper.removeClass('editable_hover'); - $('div', ui.helper).removeClass('editable_hover'); - ui.helper.attr('data-temp', $(ui.helper.context).prop('id')); - } - }); - - editor.pageElement.on('click', '.del_handle', function () { - var element = $(this).parent('[data-editable]'); - var formData = { - request: 'deleteData', - userId: userId, - prefix: prefix, - dataSet: $(this).parent('[data-editable]').attr('id'), - navId: navigationId - }; - - $.ajax({ - url: webserviceUrl, - data: formData, - method: 'post', - dataType: 'text', - error: function (x, y, z) { - console.log(x); - console.log(y); - console.log(z); - alert('Fehler beim Löschen des Seitenelements!'); - }, - success: function () { - element.remove(); - } - }); - - }); - }, - - close: function () { - editor.type = ''; - editor.name = ''; - editor.contentHtml = ''; - editor.contentData = null; - editor.preventSortStop = false; - - editor.element = null; - - editor.titleElement.html(editor.title); - editor.layerElement.hide(); - editor.contentElement.html(''); - editor.waitingElement.hide(); - - }, - - callEditor: function () { - editor.titleElement.html(editor.titleElement.html().replace('%%type%%', editor.name)); - editor.getEditorHtml(); - editor.getEditorData(); - editor.layerElement.show(); - }, - - getEditorHtml: function () { - var editorFile = editorUrl + editorVersion + '/templates/' + editor.type + '.php'; - $.ajax({ - type: 'POST', - url: editorFile, - data: {lang: sessLang}, - dataType: 'html', - error: function () { - console.log(editorFile); - console.log(editor.type); - alert('Fehler beim Holen des Editor-HTMLs!'); - }, - success: function (html) { - editor.contentHtml = html; - editor.contentElement.html(html); - editor.formElement = $('#editor_form'); - } - }); - }, - - getEditorData: function (element) { - var requestElement = (element) ? element : editor.element; - var elementArray = requestElement.split('_'); - if (elementArray[elementArray.length - 1] === '') { - editor.contentData = {}; - editor.fillHtml(); - return; - } - - $.ajax({ - type: 'POST', - url: webserviceUrl, - data: {request: 'getData', userId: userId, dataSet: requestElement, prefix: prefix, navId: navigationId}, - dataType: 'json', - error: function () { - console.log(webserviceUrl); - console.log(editor.type); - alert('Fehler beim Holen der Editor-Daten!'); - }, - success: function (data) { - editor.contentData = data; - editor.fillHtml(); - } - }); - }, - - fillHtml: function () { - if (editor.contentHtml === '' || editor.contentData === null) { - window.setTimeout(editor.fillHtml, 50); - return; - } - - if (editor.type === 'spielbericht') { - editor.fillSpielBericht(); - editor.fillStandard(); - } - else if (editor.type === 'keyvisual' || editor.type === 'image') { - imgEditor.setData(editor.contentData); - } - else if (editor.type === 'struktur') { - navEditor.setData(editor.contentData); - navEditor.fillData(); - } - else { - editor.fillStandard(); - } - - editor.fillSpecial(); - editor.checkDuration(); - editor.checkDelayed(); - editor.changeSpielBericht(); - - editor.waitingElement.hide(); - }, - - fillSpecial: function () { - $('#userId', editor.contentElement).val(userId); - $('#prefix', editor.contentElement).val(prefix); - $('#dataSet', editor.contentElement).val(editor.element); - $('#siteId', editor.contentElement).val(navId); - }, - - fillStandard: function () { - $.each(editor.contentData, function (key, value) { - var input = $('#' + key, editor.contentElement); - if (input.length == 0) { - input = $('#' + key + '_' + value, editor.contentElement); - if (input.length != 0) { - input[0].checked = true; - } - } - else { - input.val(value); - } - }); - - }, - - fillSpielBericht: function () { - - var teamOptions = ''; - $.each(editorParams.spielbericht.teamname, function (key, value) { - teamOptions += ''; - }); - $('#teamname', editor.contentElement).html(teamOptions); - - var spielTypOptions = ''; - $.each(editorParams.spielbericht.spieltyp, function (key, value) { - var duration = (value === 'pokal') ? 'show' : 'hide'; - var delayed = (value === 'abgesagt') ? 'show' : 'hide'; - spielTypOptions += ''; - }); - $('#spieltyp', editor.contentElement).html(spielTypOptions); - - var spielDauerOptions = ''; - $.each(editorParams.spielbericht.spieldauer, function (key, value) { - spielDauerOptions += ''; - }); - $('#spieldauer', editor.contentElement).html(spielDauerOptions); - }, - - changeSpielBericht: function () { - if (editor.type != 'spielbericht') { - return true; - } - $('#siteId').val(navigationId); - }, - - checkDuration: function () { - var durationElement = $('#spieldauer'); - var duration = $('#spieltyp').find(':selected').data('duration'); - if (duration == 'hide') { - durationElement.val('regular'); - durationElement[0].disabled = true; - } - else if (duration == 'show') { - durationElement[0].disabled = false; - } - }, - - checkDelayed: function () { - var delayedElement = $('#verschoben'); - var delayed = $('#spieltyp').find(':selected').data('delayed'); - if (delayed == 'hide') { - delayedElement[0].disabled = true; - } - else if (delayed == 'show') { - delayedElement[0].disabled = false; - } - }, - - submitData: function () { - editor.waitingElement.show(); - /** - * Update der Textareas mit Daten aus der CKEditor Instanz - */ - $('textarea.ckeditor').each(function () { - var textArea = $(this); - textArea.val(CKEDITOR.instances[textArea.attr('name')].getData()); - }); - - $('.uploadFile').prop('disabled', true); - var formData = new FormData(editor.formElement[0]); - - $.ajax({ - //url: webserviceUrl.replace('remote_data', 'test_data'), - url: webserviceUrl, - type: 'POST', - data: formData, - processData: false, - contentType: false, - error: function (jqXHR, textStatus, errorThrown) { - console.log(jqXHR); - console.log(textStatus); - console.log(errorThrown); - alert('Bei der Verarbeitung der Daten ist ein Fehler aufgetreten!\nStatus: "' + textStatus + '"\nFehlermeldung: "' + errorThrown + '"'); - }, - success: function (data) { - if (data === 'SUCCESS') { - location.reload(); - } - else { - alert('Bei der Verarbeitung der Daten ist ein Fehler aufgetreten!'); - } - } - }); - } -}); - -var navEditor = new Object({ - navData: null, - navPath: [], - structureHtml: '', - moveHtml: '', - breadCrumb: '', - chosenNavStart: 0, - chosenNavId: 0, - chosenData: null, - - structureElement: null, - navPointElement: null, - breadCrumbElement: null, - showActionElement: null, - templateElement: null, - actionChooserElement: null, - moveChooserElement: null, - - setData: function (navigationData) { - navEditor.navData = navigationData.navigation; - navEditor.navPath = navigationData.navPath; - navEditor.init(); - }, - - init: function () { - navEditor.initElements(); - navEditor.clickEvents(); - }, - - initElements: function () { - navEditor.structureElement = $('#struktur'); - navEditor.navPointElement = $('#navPoint'); - navEditor.breadCrumbElement = $('#breadCrumb'); - navEditor.showActionElement = $('#showAction'); - navEditor.templateElement = $('#actionTemplates'); - navEditor.moveChooserElement = $('#otherMain_box'); - navEditor.actionChooserElement = $('.actionChooser', navEditor.templateElement); - }, - - clickEvents: function () { - navEditor.structureElement.on('click', 'li.open > span', function () { - var parent = $(this).parent('li'); - parent.removeClass('open'); - parent.addClass('navclose'); - }); - - navEditor.structureElement.on('click', 'li.navclose > span', function () { - var parent = $(this).parent('li'); - parent.removeClass('navclose'); - parent.addClass('open'); - }); - - navEditor.navPointElement.on('click', 'li.open > span', function () { - var parent = $(this).parent('li'); - parent.removeClass('open'); - parent.addClass('navclose'); - }); - - navEditor.navPointElement.on('click', 'li.navclose > span', function () { - var parent = $(this).parent('li'); - parent.removeClass('navclose'); - parent.addClass('open'); - }); - - navEditor.structureElement.on('click', 'li.editable', function (event) { - if (this != event.target) { - return true; - } - navEditor.chosenNavStart = $(this).data('navstart'); - navEditor.chosenNavId = $(this).data('navid'); - navEditor.makeBreadCrumb(this); - navEditor.fillEditArea(); - }); - - navEditor.navPointElement.on('click', 'li.editable', function (event) { - if (this != event.target) { - return true; - } - $('#navStart', editor.formElement).val($(this).data('navid')); - $('#parentNavName', editor.formElement).val($(this).context.childNodes[1].textContent); - }); - - navEditor.showActionElement.on('click', '[data-show]', function () { - var action = $(this).data('show'); - navEditor.showActionElement.html($('.action' + action, navEditor.templateElement).clone()); - $('.navSort', navEditor.showActionElement).sortable({ - axis: 'y', - handle: '.sort_handle', - stop: function () { - var newSort = $('.navSort', navEditor.showActionElement).sortable('toArray'); - $('.newSort', navEditor.showActionElement).val(JSON.stringify(newSort)); - $('input.hidden', navEditor.showActionElement).removeClass('hidden'); - } - }); - }); - - }, - - fillData: function () { - navEditor.makeHtml(0); - $(navEditor.structureElement, editor.contentElement).html(navEditor.structureHtml); - navEditor.moveHtml = '
' + CS.editorData.text + '
'; + $.each(CS.editorData, function (key, value) { + $("input[type='text'][name='" + key + "'], input[type='hidden'][name='" + key + "'], select[name='" + key + "'], textarea[name='" + key + "']", CS.contentElement).val(value); + }); + + ImageText.imageFormat = CS.editorData.imageWidth / CS.editorData.imageHeight; + ImageText.setFormatInput(); + + ImageText.formatInput.on('click', function () { + $(this).data('current', $(this).val()); + }); + + ImageText.formatInput.on('change', function () { + var selectedFormat = $(this).val(); + ImageText.setImageFormat(selectedFormat); + }); + + ImageText.textEditor = ImageText.textInput.ckeditor({ + enterMode: CKEDITOR.ENTER_BR, + extraPlugins: 'divarea', + height: '240px', + removeButtons: 'Redo,Font,FontSize', + removePlugins: 'elementspath', + toolbarGroups: [ + {name: 'clipboard', groups: ['clipboard', 'undo']}, + {name: 'editing', groups: ['find', 'selection', 'spellchecker']}, + {name: 'basicstyles', groups: ['basicstyles', 'cleanup']}, + {name: 'paragraph', groups: ['list']}, + {name: 'links'} + ] + }).editor; + + ImageText.uploadFileInput.on('change', function (event) { + var file = event.currentTarget.files[0]; + if ($.inArray(file.type, csEditorParams.imageTypes) === -1) { + alert('Wrong file type'); + return false; + } + ImageText.imageFormat = 3 / 2; + ImageText.setFormatInput(); + + ImageText.uploadFileExtension = csEditorParams.fileExtensions[file.type]; + var nameParts = file.name.split('.'); + if (nameParts.length > 1) { + nameParts.pop(); + } + ImageText.uploadFileName = nameParts.join('.'); + + var reader = new FileReader(); + reader.onloadend = function () { + ImageText.editorImage.src = reader.result; + }; + reader.readAsDataURL(file); + }); + + ImageText.imageElement.attr('src', csEditorParams.mediaPrefix + csEditorParams.navID + '/' + CS.editorData.imageName + '.' + CS.editorData.imageExtension); + + ImageText.editorImage = new Image(); + ImageText.editorImage.onload = function () { + ImageText.imageWidth = ImageText.editorImage.naturalWidth; + ImageText.imageHeight = ImageText.editorImage.naturalHeight; + ImageText.previewWidth = csEditorParams.imageDimension.image.width; + ImageText.previewHeight = ImageText.previewWidth * ImageText.imageHeight / ImageText.imageWidth; + ImageText.coverLeft = parseFloat(CS.editorData.imageLeft); + ImageText.coverTop = parseFloat(CS.editorData.imageTop); + ImageText.coverWidth = parseFloat(CS.editorData.imageWidth); + ImageText.coverHeight = parseFloat(CS.editorData.imageHeight); + ImageText.minWidth = ImageText.previewWidth * ImageText.previewWidth / csEditorParams.imageDimension.orig.width; + ImageText.minHeight = ImageText.minWidth / ImageText.imageFormat; + + if (ImageText.previewWidth > ImageText.imageWidth || ImageText.previewWidth / ImageText.imageFormat > ImageText.imageHeight) { + alert(csEditorLang.error.wrongImageDimension.replace('%width%', ImageText.previewWidth).replace('%height%', ImageText.previewWidth / ImageText.imageFormat)); + ImageText.uploadFileExtension = ''; + ImageText.uploadFileName = ''; + return false; + } + + if (ImageText.uploadFileName !== '') { + ImageText.nameInput.val(ImageText.uploadFileName); + ImageText.extensionInput.val(ImageText.uploadFileExtension); + ImageText.origNameInput.val(ImageText.uploadFileName); + ImageText.titleInput.val(ImageText.uploadFileName); + } + + ImageText.previewElement.attr('src', ImageText.editorImage.src); + ImageText.setCover(); + ImageText.setResizable(); + ImageText.setDraggable(); + }; + ImageText.editorImage.src = csEditorParams.mediaPrefix + csEditorParams.navID + '/' + CS.editorData.imageName + '_orig.' + CS.editorData.imageExtension; + + }, + + close: function () { + + }, + + setCover: function () { + if (ImageText.coverHeight > ImageText.previewHeight) { + ImageText.coverHeight = ImageText.previewHeight; + ImageText.coverWidth = ImageText.coverHeight * ImageText.imageFormat; + } + + ImageText.placeHolderElement.css({width: ImageText.previewWidth, height: ImageText.previewHeight}); + ImageText.coverElement.css({ + left: ImageText.coverLeft + 'px', + top: ImageText.coverTop + 'px', + width: ImageText.coverWidth, + height: ImageText.coverHeight + }); + ImageText.coverTopElement.css({ + left: 0, + top: 0, + width: ImageText.previewWidth, + height: ImageText.coverTop + }); + ImageText.coverRightElement.css({ + right: 0, + top: ImageText.coverTop + 'px', + width: ImageText.previewWidth - ImageText.coverLeft - ImageText.coverWidth, + height: ImageText.coverHeight + }); + ImageText.coverBottomElement.css({ + left: 0, + bottom: 0, + width: ImageText.previewWidth, + height: ImageText.previewHeight - ImageText.coverTop - ImageText.coverHeight + }); + ImageText.coverLeftElement.css({ + left: 0, + top: ImageText.coverTop + 'px', + width: ImageText.coverLeft, + height: ImageText.coverHeight + }); + + ImageText.topInput.val(ImageText.coverTop); + ImageText.leftInput.val(ImageText.coverLeft); + ImageText.heightInput.val(ImageText.coverHeight); + ImageText.widthInput.val(ImageText.coverWidth); + }, + + setFormatInput: function () { + if (ImageText.imageFormat < 1) { + ImageText.formatInput.val('portrait'); + } + else if (ImageText.imageFormat === 1) { + ImageText.formatInput.val('square'); + } + else if (ImageText.imageFormat > 1) { + ImageText.formatInput.val('landscape'); + } + }, + + setResizable: function () { + ImageText.coverElement.resizable({ + aspectRatio: false, + containment: ImageText.placeHolderElement, + handles: 'se', + minWidth: ImageText.minWidth, + create: function () { + if (ImageText.coverWidth < ImageText.minWidth) { + ImageText.coverWidth = ImageText.minWidth; + ImageText.coverHeight = ImageText.previewHeight * ImageText.previewHeight / ImageText.previewWidth; + ImageText.coverLeft = Math.min(ImageText.coverLeft, (ImageText.previewWidth - ImageText.coverWidth)); + ImageText.coverTop = Math.min(ImageText.coverTop, (ImageText.previewHeight - ImageText.coverHeight)); + } + ImageText.setCover(); + }, + resize: function (event, ui) { + ui.size.height = ui.size.width * ImageText.coverHeight / ImageText.coverWidth; + if (ui.position.top + ui.size.height > ImageText.previewHeight) { + ui.size.height = ImageText.previewHeight - ui.position.top; + ui.size.width = ui.size.height * ImageText.imageFormat; + } + ImageText.coverWidth = ui.size.width; + ImageText.coverHeight = ui.size.height; + ImageText.setCover(); + } + }) + }, + + setDraggable: function () { + ImageText.coverElement.draggable({ + containment: ImageText.placeHolderElement, + cursor: 'crosshair', + drag: function (event, ui) { + ImageText.coverLeft = ui.position.left; + ImageText.coverTop = ui.position.top; + ImageText.setCover(); + } + }) + }, + + setImageFormat: function (selectedFormat) { + var tempFormat; + switch (selectedFormat) { + case 'portrait': + tempFormat = 2 / 3; + break; + case 'square': + tempFormat = 1; + break; + case 'landscape': + tempFormat = 3 / 2; + break; + } + + if (ImageText.imageHeight < ImageText.minWidth / tempFormat) { + alert(csEditorLang.error.wrongImageDimension.replace('%width%', ImageText.previewWidth).replace('%height%', ImageText.previewWidth / tempFormat)); + ImageText.formatInput.val(ImageText.formatInput.data('current')); + return false; + } + + ImageText.imageFormat = tempFormat; + ImageText.minHeight = ImageText.minWidth / ImageText.imageFormat; + ImageText.coverHeight = ImageText.coverWidth / ImageText.imageFormat; + ImageText.setCover(); + } + +}; diff --git a/js/keyVisualEditor.js b/js/keyVisualEditor.js new file mode 100644 index 0000000..fe714cc --- /dev/null +++ b/js/keyVisualEditor.js @@ -0,0 +1,347 @@ +/** + * KeyVisual-Editor + * Stellt die Funktionalität für die Bearbeitung des KeyVisual-Bereichs zur Verfügung + * + * Created by CS medien- & kommunikationssysteme. + * @author Christian Steinle + * @date 13.12.2016 + * + * @copyright CS medien- & kommunikationssysteme (http://www.steinle-computer.de) + */ + +var KeyVisual = { + type: '', + editorImages: null, + editorImage: null, + imageTypes: null, + imageParams: null, + origParams: null, + thumbParams: null, + fileExtension: null, + uploadFileName: '', + mediaPath: '', + chosenImageID: 0, + + nameInput: null, + extensionInput: null, + origNameInput: null, + titleInput: null, + topInput: null, + leftInput: null, + heightInput: null, + widthInput: null, + uploadFileInput: null, + requestInput: null, + + thumbElement: null, + typeChooser: null, + placeHolderElement: null, + imageElement: null, + previewElement: null, + coverElement: null, + coverTopElement: null, + coverRightElement: null, + coverBottomElement: null, + coverLeftElement: null, + + previewWidth: 0, + previewHeight: 0, + imageWidth: 0, + imageHeight: 0, + imageFormat: 0, + coverTop: 0, + coverLeft: 0, + coverWidth: 0, + coverHeight: 0, + minWidth: 0, + minHeight: 0, + placeHolderWidth: 0, + editorScale: 1, + + init: function () { + KeyVisual.initElements(); + KeyVisual.initVariables(); + KeyVisual.initFunctions(); + }, + + initElements: function () { + KeyVisual.thumbElement = $('#csEditorThumb'); + KeyVisual.typeChooser = $('#Type'); + KeyVisual.nameInput = $('#imageName'); + KeyVisual.extensionInput = $('#imageExtension'); + KeyVisual.origNameInput = $('#imageOrigName'); + KeyVisual.titleInput = $('#imageTitle'); + KeyVisual.placeHolderElement = $('#csEditorImagePlaceholder'); + KeyVisual.imageElement = $('#csEditorImage'); + KeyVisual.previewElement = $('#csEditorImagePreview'); + KeyVisual.coverElement = $('#csEditorImageCover'); + KeyVisual.coverTopElement = $('#csEditorCoverTop'); + KeyVisual.coverRightElement = $('#csEditorCoverRight'); + KeyVisual.coverBottomElement = $('#csEditorCoverBottom'); + KeyVisual.coverLeftElement = $('#csEditorCoverLeft'); + + KeyVisual.topInput = $('#imageTop'); + KeyVisual.leftInput = $('#imageLeft'); + KeyVisual.heightInput = $('#imageHeight'); + KeyVisual.widthInput = $('#imageWidth'); + KeyVisual.uploadFileInput = $('#changeUploadFile'); + KeyVisual.requestInput = $('#request'); + }, + + initVariables: function () { + KeyVisual.type = CS.editorData.Type; + KeyVisual.editorImages = CS.editorData.images; + KeyVisual.imageParams = csEditorParams.imageDimension.keyVisual; + KeyVisual.origParams = csEditorParams.imageDimension.orig; + KeyVisual.thumbParams = csEditorParams.imageDimension.thumb; + KeyVisual.fileExtension = csEditorParams.fileExtensions; + KeyVisual.mediaPath = csEditorParams.mediaPrefix + csEditorParams.navID + '/'; + KeyVisual.chosenImageID = CS.editorData.IDs[0]; + KeyVisual.imageFormat = KeyVisual.imageParams.width / KeyVisual.imageParams.height; + KeyVisual.editorImages[0] = {}; + $.each(KeyVisual.editorImages[KeyVisual.chosenImageID], function(key, value) { + KeyVisual.editorImages[0][key] = '0'; + }); + $('#navID').val(csEditorParams.navID); + }, + + initFunctions: function () { + KeyVisual.typeChooser.on('change', function () { + KeyVisual.type = $(this).val(); + KeyVisual.showElementsForType(); + }) + }, + + fillEditorContent: function () { + if (CS.editorData === null || CS.editorHtml === '') { + window.setTimeout('KeyVisual.fillEditorContent()', 50); + return true; + } + + KeyVisual.init(); + KeyVisual.fillThumbs(); + + $.each(CS.editorData, function (key, value) { + $("input[type='text'][name='" + key + "'], input[type='hidden'][name='" + key + "'], select[name='" + key + "'], textarea[name='" + key + "']", CS.contentElement).val(value); + }); + + KeyVisual.uploadFileInput.on('change', function (event) { + var file = event.currentTarget.files[0]; + if ($.inArray(file.type, csEditorParams.imageTypes) === -1) { + alert('Wrong file type'); + return false; + } + + KeyVisual.uploadFileExtension = csEditorParams.fileExtensions[file.type]; + var nameParts = file.name.split('.'); + if (nameParts.length > 1) { + nameParts.pop(); + } + KeyVisual.uploadFileName = nameParts.join('.'); + + var reader = new FileReader(); + reader.onloadend = function () { + KeyVisual.editorImage.src = reader.result; + }; + reader.readAsDataURL(file); + }); + + KeyVisual.imageElement.attr('src', csEditorParams.mediaPrefix + csEditorParams.navID + '/' + CS.editorData.imageName + '.' + CS.editorData.imageExtension); + + KeyVisual.editorImage = new Image(); + KeyVisual.editorImage.onload = function () { + KeyVisual.placeHolderWidth = KeyVisual.placeHolderElement.innerWidth(); + KeyVisual.editorScale = csEditorParams.imageDimension.keyVisual.width / KeyVisual.placeHolderWidth; + + KeyVisual.imageWidth = KeyVisual.editorImage.naturalWidth; + KeyVisual.imageHeight = KeyVisual.editorImage.naturalHeight; + KeyVisual.previewWidth = KeyVisual.placeHolderWidth; + KeyVisual.previewHeight = KeyVisual.placeHolderWidth * KeyVisual.imageHeight / KeyVisual.imageWidth; + + KeyVisual.coverLeft = parseFloat(KeyVisual.editorImages[KeyVisual.chosenImageID].imageLeft) / KeyVisual.editorScale; + KeyVisual.coverTop = parseFloat(KeyVisual.editorImages[KeyVisual.chosenImageID].imageTop) / KeyVisual.editorScale; + KeyVisual.coverWidth = parseFloat(KeyVisual.editorImages[KeyVisual.chosenImageID].imageWidth) / KeyVisual.editorScale; + KeyVisual.coverHeight = parseFloat(KeyVisual.editorImages[KeyVisual.chosenImageID].imageHeight) / KeyVisual.editorScale; + KeyVisual.minWidth = KeyVisual.previewWidth * csEditorParams.imageDimension.keyVisual.width / csEditorParams.imageDimension.orig.width; + KeyVisual.minHeight = KeyVisual.minWidth * csEditorParams.imageDimension.keyVisual.height / csEditorParams.imageDimension.keyVisual.width; + + if (KeyVisual.previewWidth > KeyVisual.imageWidth || KeyVisual.previewHeight > KeyVisual.imageHeight) { + alert(csEditorLang.error.wrongImageDimension.replace('%width%', csEditorParams.imageDimension.keyVisual.width).replace('%height%', csEditorParams.imageDimension.keyVisual.height)); + KeyVisual.uploadFileExtension = ''; + KeyVisual.uploadFileName = ''; + return false; + } + + if (KeyVisual.uploadFileName !== '') { + KeyVisual.nameInput.val(KeyVisual.uploadFileName); + KeyVisual.extensionInput.val(KeyVisual.uploadFileExtension); + KeyVisual.origNameInput.val(KeyVisual.uploadFileName); + KeyVisual.titleInput.val(KeyVisual.uploadFileName); + } + + KeyVisual.previewElement.attr('src', KeyVisual.editorImage.src); + KeyVisual.setCover(); + KeyVisual.setResizable(); + KeyVisual.setDraggable(); + }; + }, + + fillThumbs: function () { + $.each(KeyVisual.editorImages, function (key, value) { + if (key === '0') { + return; + } + KeyVisual.thumbElement.append('' + CS.editorData.text + '
'; + $.each(CS.editorData, function (key, value) { + $("input[type='text'][name='" + key + "'], input[type='hidden'][name='" + key + "'], select[name='" + key + "'], textarea[name='" + key + "']", CS.contentElement).val(value); + }); + + Text.textEditor = Text.textInput.ckeditor({ + enterMode: CKEDITOR.ENTER_BR, + extraPlugins: 'divarea', + height: '500px', + removeButtons: 'Redo,Font,FontSize', + removePlugins: 'elementspath', + toolbarGroups: [ + {name: 'clipboard', groups: ['clipboard', 'undo']}, + {name: 'editing', groups: ['find', 'selection', 'spellchecker']}, + {name: 'basicstyles', groups: ['basicstyles', 'cleanup']}, + {name: 'paragraph', groups: ['list']}, + {name: 'links'}, + {name: 'about'} + ] + }).editor; + }, + + close: function () { + + } +}; diff --git a/lang/lang-de.php b/lang/lang-de.php index 12fb26f..3d1ce2c 100644 --- a/lang/lang-de.php +++ b/lang/lang-de.php @@ -7,6 +7,9 @@ * @copyright CS medien- & kommunikationssysteme (http://www.steinle-computer.de) */ +$lang['common']['yes'] = 'Ja'; +$lang['common']['no'] = 'Nein'; + $lang['newContent']['title'] = 'Neue Elemente'; $lang['newContent']['text'] = 'Text'; $lang['newContent']['subline'] = 'Überschrift'; @@ -30,47 +33,64 @@ $lang['spielbericht']['vorschau'] = 'Vorschau'; $lang['spielbericht']['date'] = 'Spiel vom:'; $lang['spielbericht']['delayed'] = 'Verschoben auf:'; +$lang['headline']['editHeadline'] = 'Überschrift der Seite '; -$lang['struktur']['editing'] = 'Bearbeitung des gewählten Navigationspunkts:'; -$lang['struktur']['rename'] = 'Umbenennen'; -$lang['struktur']['renameHelper'] = 'Änderung des angezeigten Namens in der Navigation'; -$lang['struktur']['activate'] = 'Aktivieren'; -$lang['struktur']['activateHelper'] = 'Aktiviert den gewählten Navigations-Punkt, so dass dessen Inhalte auf der Homepage wieder angezeigt werden'; -$lang['struktur']['deactivate'] = 'Deaktivieren'; -$lang['struktur']['deactivateHelper'] = 'Deaktiviert den gewählten Navigations-Punkt, so dass dessen Inhalte auf der Homepage nicht mehr angezeigt werden'; -$lang['struktur']['sort'] = 'Sortieren'; -$lang['struktur']['sortHelper'] = 'Änderung der Anzeige-Reihefolge der Navigations-Punkte'; -$lang['struktur']['move'] = 'Verschieben'; -$lang['struktur']['moveHelper'] = 'Verschieben des gewählten Menüpunktes unter einen neuen Navigations-Punkt'; -$lang['struktur']['submenu'] = 'Untermenü'; -$lang['struktur']['submenuHelper'] = 'Legt einen neuen Navigations-Punkt als erstes Element unter dem gewählten Punkt an'; -$lang['struktur']['menu'] = 'Menüpunkt'; -$lang['struktur']['menuHelper'] = 'Legt einen neuen Navigations-Punkt nach dem gewählten Punkt auf gleicher Ebene an'; +$lang['navigation']['headline'] = 'Bearbeitung der Seiten Struktur'; +$lang['navigation']['structure'] = 'Seiten Struktur'; +$lang['navigation']['edit'] = 'Bearbeiten'; +$lang['navigation']['editHelper'] = 'Bearbeitung des gewählten Navigationspunkts'; +$lang['navigation']['rename'] = 'Umbenennen'; +$lang['navigation']['renameHelper'] = 'Änderung des angezeigten Namens in der Navigation'; +$lang['navigation']['activate'] = 'Aktivieren'; +$lang['navigation']['activateHelper'] = 'Aktiviert den gewählten Navigations-Punkt, so dass dessen Inhalte auf der Homepage wieder angezeigt werden'; +$lang['navigation']['deactivate'] = 'Deaktivieren'; +$lang['navigation']['deactivateHelper'] = 'Deaktiviert den gewählten Navigations-Punkt, so dass dessen Inhalte auf der Homepage nicht mehr angezeigt werden'; +$lang['navigation']['sort'] = 'Sortieren'; +$lang['navigation']['sortHelper'] = 'Sortieren der Untermenü-Punkte des gewählten Navigations-Punkts'; +$lang['navigation']['move'] = 'Verschieben'; +$lang['navigation']['moveHelper'] = 'Verschieben des gewählten Menüpunktes unter einen neuen Navigations-Punkt'; +$lang['navigation']['subMenu'] = 'Untermenü'; +$lang['navigation']['subMenuHelper'] = 'Legt einen neuen Navigations-Punkt als erstes Element unter dem gewählten Punkt an'; +$lang['navigation']['menu'] = 'Menüpunkt'; +$lang['navigation']['menuHelper'] = 'Legt einen neuen Navigations-Punkt nach dem gewählten Punkt auf gleicher Ebene an'; -$lang['struktur']['navNameRename'] = 'Neuer Name:'; -$lang['struktur']['navNameEnable'] = 'Folgender Navigations-Punkt wird aktiviert:'; -$lang['struktur']['navNameDisable'] = 'Folgender Navigations-Punkt wird deaktiviert:'; -$lang['struktur']['navNameMove'][0] = 'Folgender Navigations-Punkt'; -$lang['struktur']['navNameMove'][1] = 'wird als Unterpunkt in den gewählten Punkt verschoben'; -$lang['struktur']['newSubMenu'] = 'Neues Untermenü unter folgendem Navigations-Punkt anlegen:'; -$lang['struktur']['newMenu'] = 'Neuen Menü-Punkt nach folgendem Navigations-Punkt anlegen:'; -$lang['struktur']['newSort'] = 'Umsortierung der folgenden Navigationspunkte:'; -$lang['struktur']['newNavName'] = 'Neuer Seiten-Name:'; -$lang['struktur']['newNavType'] = 'Neuer Seiten-Typ:'; +$lang['navigation']['name'] = 'Name:'; +$lang['navigation']['title'] = 'Titel:'; +$lang['navigation']['active'] = 'Aktivieren:'; +$lang['navigation']['choseAction'] = 'Aktion wählen:'; -$lang['struktur']['content'] = 'Standard-Seite'; -$lang['struktur']['uebersicht'] = 'Übersicht-Seite'; -$lang['struktur']['spielbericht'] = 'Spielbericht (Punkt-, Pokalspiel)'; -$lang['struktur']['turnier'] = 'Turnier-Seite (mit mehreren Spielberichten)'; -$lang['struktur']['widget'] = 'Widget (z.B. Tabelle)'; +$lang['navigation']['newLinkName'] = 'Link-Name der neuen Seite in der Navigation'; +$lang['navigation']['newTitle'] = 'Titel der neuen Seite'; +$lang['navigation']['chosenNavPoint'] = 'Gewählter Navigationspunkt:'; + +$lang['navigation']['navNameEnable'] = 'Folgender Navigations-Punkt wird aktiviert:'; +$lang['navigation']['navNameDisable'] = 'Folgender Navigations-Punkt wird deaktiviert:'; +$lang['navigation']['navNameMove'] = 'Folgender Navigations-Punkt wird als Unterpunkt in den gewählten Punkt verschoben:'; +$lang['navigation']['newSubMenu'] = 'Neues Untermenü unter folgendem Navigations-Punkt anlegen:'; +$lang['navigation']['newMenu'] = 'Neuen Menü-Punkt nach folgendem Navigations-Punkt anlegen:'; +$lang['navigation']['newSort'] = 'Umsortierung der folgenden Navigationspunkte:'; +$lang['navigation']['newNavName'] = 'Neuer Seiten-Name:'; +$lang['navigation']['newNavType'] = 'Neuer Seiten-Typ:'; + +$lang['navigation']['content'] = 'Standard-Seite'; +$lang['navigation']['uebersicht'] = 'Übersicht-Seite'; +$lang['navigation']['spielbericht'] = 'Spielbericht (Punkt-, Pokalspiel)'; +$lang['navigation']['turnier'] = 'Turnier-Seite (mit mehreren Spielberichten)'; +$lang['navigation']['widget'] = 'Widget (z.B. Tabelle)'; $lang['widget']['wettbewerb'] = 'Wettbewerbs-ID:'; +$lang['imageText']['headline'] = 'Auf das Bild klick'; + $lang['image']['editHeadline'] = 'Bearbeitung der Bilder'; $lang['image']['editHint'] = 'Durch Klick auf ein Vorschaubild, können die Daten des Einzelbildes bearbeitet werden.These items will be permanently deleted and cannot be recovered. Are you sure?
+