/**
* Textvorlagen initialisieren
*/
var initTextTemplates = function () {
attachClickListener();
attachFocusTextElementsListener();
attachFocusCkEditorListener();
initTextTemplateModal();
// Nach dem Schließen des Textvorlagen-Modals bestimmte Focus-Events wieder attachen.
// Notwendig, da jQuery-UI scheinbar alle Focus-Events entfernt.
$('#textvorlagenModal').on('dialogclose', function () {
attachFocusTextElementsListener();
clearTextTemplateTargetMarker();
});
};
var attachClickListener = function () {
// Textvorlage-Modal öffnen
$('input#edit').on('click', function (e) {
e.preventDefault();
setTextTemplateTargetMarker();
openTextTemplateModal();
});
// "Textvorlage übernehmen"
$(document).on('click', '.text-template-apply', function (e) {
e.preventDefault();
var textTemplateId = $(this).data('apply-id');
applyTextTemplate(textTemplateId);
});
// "Textvorlage bearbeiten"
$(document).on('click', '.text-template-edit', function (e) {
e.preventDefault();
var textTemplateId = $(this).data('edit-id');
editTextTemplate(textTemplateId);
// Scroll to edit form
var fieldsetTop = $('#textvorlageneingabe').offset().top;
var viewportHeight = $(window).innerHeight();
var offsetTop = fieldsetTop - (viewportHeight / 2);
$('html, body').animate({
scrollTop: offsetTop
},'slow');
});
// "Textvorlage löschen"
$(document).on('click', '.text-template-delete', function (e) {
e.preventDefault();
var textTemplateId = $(this).data('delete-id');
deleteTextTemplate(textTemplateId);
});
// "Textvorlage speichern"
$('#textvorlagespeichern').click(function (e) {
e.preventDefault();
saveTextTemplate();
});
};
/**
* Focus-Event auf alle Input- und Textarea-Element attachen
*/
var attachFocusTextElementsListener = function () {
$(document).on('focusin', 'input, textarea', function () {
var focusedElement = $(this);
var elementType = focusedElement.get(0).nodeName.toLowerCase();
// Elemente im Textvorlagen-Modal ignorieren
var isTextTemplateModalElement = (focusedElement.parents('#textvorlagenModal').length > 0);
if (isTextTemplateModalElement) {
return;
}
// Iframe im Iframe
// z.B. "Position bearbeiten"-Popup in Auftragspositionen-Iframe
if (typeof parent.parent !== 'undefined') {
parent.parent.lastFocusedElement = focusedElement;
parent.parent.lastFocusedType = elementType;
return;
}
// Ein Iframe
// z.B. Auftragspositionen-Iframe
if (typeof parent !== 'undefined') {
parent.lastFocusedElement = focusedElement;
parent.lastFocusedType = elementType;
return;
}
// Kein Iframe
lastFocusedElement = focusedElement;
lastFocusedType = elementType;
});
};
/**
* Focus-Event auf alle CKEditor-Elemente attachen
*/
var attachFocusCkEditorListener = function () {
CKEDITOR.on('instanceReady', function (evt) {
var editor = evt.editor;
editor.on('focus', function () {
// Elemente im Textvorlagen-Modal ignorieren
if (editor.name.substr(0, 11) === 'textvorlage') {
return;
}
// CKEditor im Iframe vom Iframe (z.b. Auftragspositionen-Bearbeiten-Popup)
if (typeof parent.parent !== 'undefined') {
parent.parent.lastFocusedElement = evt.editor;
parent.parent.lastFocusedType = 'ckeditor';
return;
}
// CKEditor im Iframe (z.B. Auftragspositionen)
if (typeof parent !== 'undefined') {
parent.lastFocusedElement = evt.editor;
parent.lastFocusedType = 'ckeditor';
return;
}
// CKEditor im "normalen" Content
lastFocusedElement = evt.editor;
lastFocusedType = 'ckeditor';
});
});
};
/**
* Textvorlagen von HTML befreien
*
* Notwendig für Input- und Textarea-Elemente
* Bei Input-Elementen zusätzlich Zeilenumbrüche entfernen
*
* @param {String} html
* @param {String} elementType [input|textarea]
*
* @return {String}
*/
var cleanupTextTemplate = function (html, elementType) {
html = html.replace('
', '
');
var htmlLines = html.split('
');
// Bei Textarea: BR's in Zeilenumbrüche wandeln
// Bei Input: BR's in Leerzeichen wandeln
var seperator = elementType === 'textarea' ? '\r\n' : ' ';
var first = true;
var result = '';
var plaintext = '';
$.each(htmlLines, function (k, v) {
plaintext = $('