From 77d11fa4f507a0c27222b00ff4ebaa8b8586ba02 Mon Sep 17 00:00:00 2001 From: Carsten Schmitz Date: Fri, 27 May 2011 14:24:39 +0000 Subject: [PATCH] Dev LimeReplacementFields mostly working git-svn-id: file:///Users/Shitiz/Downloads/lssvn/source/limesurvey_ck@10129 b72ed6b6-b9f8-46b5-92b4-906544132732 --- admin/fck_LimeReplacementFields.php | 22 +-- admin/html.php | 2 +- admin/htmleditor-functions.php | 6 +- .../scripts/ckeditor.36/limesurvey-config.js | 7 +- .../dialogs/limereplacementfields.js | 114 ++++++----- .../plugins/limereplacementfields/lang/de.js | 9 +- .../plugins/limereplacementfields/lang/en.js | 4 +- .../plugins/limereplacementfields/plugin.js | 177 ++++++++++++++++-- 8 files changed, 252 insertions(+), 89 deletions(-) diff --git a/admin/fck_LimeReplacementFields.php b/admin/fck_LimeReplacementFields.php index ba0ebfb3f9d..5c0431b1f77 100644 --- a/admin/fck_LimeReplacementFields.php +++ b/admin/fck_LimeReplacementFields.php @@ -32,22 +32,9 @@ $replFields=Array(); $isInstertansEnabled=false; -$limereplacementoutput="\n" -. "\t\n" -. "\t\tLimeReplacementFields\n" -. "\t\t\n" -. "\t\t\n" -. "\t\t\n" -. "\t\t\n" -. "\t\t'; diff --git a/admin/scripts/ckeditor.36/limesurvey-config.js b/admin/scripts/ckeditor.36/limesurvey-config.js index 63a97fd1786..695afbc57c3 100644 --- a/admin/scripts/ckeditor.36/limesurvey-config.js +++ b/admin/scripts/ckeditor.36/limesurvey-config.js @@ -14,7 +14,7 @@ CKEDITOR.editorConfig = function( config ) config.toolbar_popup = [ - ['Save','LimeReplacementFields'], + ['Save','Createlimereplacementfields'], ['Cut','Copy','Paste','PasteText','PasteFromWord'], ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat','Source'], ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar'], @@ -32,7 +32,7 @@ CKEDITOR.editorConfig = function( config ) config.toolbar_inline = [ - ['Maximize','LimeReplacementFields'], + ['Maximize','Createlimereplacementfields'], ['Cut','Copy','Paste','PasteText','PasteFromWord'], ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat','Source'], ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar'], @@ -62,7 +62,6 @@ CKEDITOR.editorConfig = function( config ) ];*/ - CKEDITOR.plugins.addExternal( 'LimeReplacementFields', CKEDITOR.basePath + 'plugins/limereplacementfields/' ); - config.extraPlugins = "LimeReplacementFields,ajax"; + config.extraPlugins = "limereplacementfields,ajax"; }; \ No newline at end of file diff --git a/admin/scripts/ckeditor.36/plugins/limereplacementfields/dialogs/limereplacementfields.js b/admin/scripts/ckeditor.36/plugins/limereplacementfields/dialogs/limereplacementfields.js index 376657a7142..3eee086535f 100644 --- a/admin/scripts/ckeditor.36/plugins/limereplacementfields/dialogs/limereplacementfields.js +++ b/admin/scripts/ckeditor.36/plugins/limereplacementfields/dialogs/limereplacementfields.js @@ -1,48 +1,74 @@ -CKEDITOR.dialog.add( 'LimeReplacementFieldsDlg', function( editor ) { - return { - // title: editor.lang.limereplacementfields.title, - title: 'Sometitle', +/* + * Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ - minWidth: 200, - minHeight: 80, +(function() +{ + function limereplacementfieldsDialog( editor, isEdit ) + { + var lang = editor.lang.limereplacementfields, + generalLabel = editor.lang.common.generalTab; + return { + title : lang.title, + minWidth : 300, + minHeight : 80, + contents : + [ + { + id : 'info', + label : generalLabel, + title : generalLabel, + elements : + [ + { + id : 'text', + type : 'html', + label : lang.title, + html : CKEDITOR.ajax.load(editor.basePath + '../../admin.php?sid=' + + editor.config.LimeReplacementFieldsSID + + '&gid=' + editor.config.LimeReplacementFieldsGID + + '&qid=' + editor.config.LimeReplacementFieldsQID + + '&fieldtype=' + editor.config.LimeReplacementFieldsType + + '&action=replacementfields' + + '&editedaction=' + editor.config.LimeReplacementFieldsAction), + setup : function( element ) + { + if ( isEdit ) + $('#cquestions').val( element.getText().slice( 1, -1 ) ); + }, + commit : function( element ) + { + var text = '{' + $('#cquestions').val() + '}'; + // The limereplacementfields must be recreated. + CKEDITOR.plugins.limereplacementfields.createlimereplacementfields( editor, element, text ); + } + } + ] + } + ], + onShow : function() + { + if ( isEdit ) + this._element = CKEDITOR.plugins.limereplacementfields.getSelectedPlaceHoder( editor ); - contents : [ - { - id : 'tab1', - label : '', - title : '', - elements : - [ - { - type : 'html', - html : CKEDITOR.ajax.load(CKEDITOR.basePath + '../../admin.php?sid=' + - CKEDITOR.config.LimeReplacementFieldsSID + - '&gid=' + CKEDITOR.config.LimeReplacementFieldsGID + - '&qid=' + CKEDITOR.config.LimeReplacementFieldsQID + - '&fieldtype=' + CKEDITOR.config.LimeReplacementFieldsType + - '&action=replacementfields' + - '&editedaction=' + CKEDITOR.config.LimeReplacementFieldsAction) - }, - ] - } - ], + this.setupContent( this._element ); + }, + onOk : function() + { + this.commitContent( this._element ); + delete this._element; + } + }; + } - - onOk: function() { - var color = this.getContentElement('tab1', 'mycolor').getValue(); - var numColor; - if (color == 'rot') numColor = '#F00'; - else if (color == 'grün') numColor = '#0F0'; - else if (color == 'blau') numColor = '#00F'; - - var element = CKEDITOR.dom.element.createFromHtml( - '' + - this.getContentElement('tab1', 'mytext').getValue() + - ''); - editor.insertElement(element); - } - - }; - -} ); \ No newline at end of file + CKEDITOR.dialog.add( 'createlimereplacementfields', function( editor ) + { + return limereplacementfieldsDialog( editor ); + }); + CKEDITOR.dialog.add( 'editlimereplacementfields', function( editor ) + { + return limereplacementfieldsDialog( editor, 1 ); + }); +} )(); diff --git a/admin/scripts/ckeditor.36/plugins/limereplacementfields/lang/de.js b/admin/scripts/ckeditor.36/plugins/limereplacementfields/lang/de.js index 26ea9450dbf..ad4c8287230 100644 --- a/admin/scripts/ckeditor.36/plugins/limereplacementfields/lang/de.js +++ b/admin/scripts/ckeditor.36/plugins/limereplacementfields/lang/de.js @@ -20,5 +20,10 @@ * * Placholder English language file. */ -FCKLang.LimeReplacementFieldsBtn = 'Einfügen/Bearbeiten eines LimeSurvey Ersetzungsfelds' ; -FCKLang.LimeReplacementFieldsDlgTitle = 'LimeSurvey Ersetzungsfeldeigenschaften' ; + +CKEDITOR.plugins.setLang('limereplacementfields','de', { + limereplacementfields: { title:'LimeSurvey Ersetzungsfeldeigenschaften', + button:'Einfügen/Bearbeiten eines LimeSurvey Ersetzungsfelds' + } + } + ); diff --git a/admin/scripts/ckeditor.36/plugins/limereplacementfields/lang/en.js b/admin/scripts/ckeditor.36/plugins/limereplacementfields/lang/en.js index 3c19f3ba730..20cedf4feb7 100644 --- a/admin/scripts/ckeditor.36/plugins/limereplacementfields/lang/en.js +++ b/admin/scripts/ckeditor.36/plugins/limereplacementfields/lang/en.js @@ -21,8 +21,8 @@ * Placeholder English language file. */ -CKEDITOR.plugins.setLang('limereplacementsfields','en', { - limereplacementsfields: { title:'LimeSurvey replacement field properties', +CKEDITOR.plugins.setLang('limereplacementfields','en', { + limereplacementfields: { title:'LimeSurvey replacement field properties', button:'Insert/edit LimeSurvey replacement field' } } diff --git a/admin/scripts/ckeditor.36/plugins/limereplacementfields/plugin.js b/admin/scripts/ckeditor.36/plugins/limereplacementfields/plugin.js index 676818b42b2..0a4d9da61c1 100644 --- a/admin/scripts/ckeditor.36/plugins/limereplacementfields/plugin.js +++ b/admin/scripts/ckeditor.36/plugins/limereplacementfields/plugin.js @@ -1,18 +1,171 @@ -// Register the related command. +/* +Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ -CKEDITOR.plugins.add('LimeReplacementFields', { - init : function( editor ) +/** + * @fileOverview The "limereplacementfields" plugin. + * + */ + +(function() +{ + var limereplacementfieldsReplaceRegex = /(\{[A-Z]+[^\{\}]+[A-Z0-9]+\})/g; + CKEDITOR.plugins.add( 'limereplacementfields', { - editor.addCommand( 'LimeReplacementFieldsDlg', new CKEDITOR.dialogCommand( 'LimeReplacementFieldsDlg' ) ); + requires : [ 'dialog' ], + lang : [ 'en'], + init : function( editor ) + { + var lang = editor.lang.limereplacementfields; + + editor.addCommand( 'createlimereplacementfields', new CKEDITOR.dialogCommand( 'createlimereplacementfields' ) ); + editor.addCommand( 'editlimereplacementfields', new CKEDITOR.dialogCommand( 'editlimereplacementfields' ) ); + + editor.ui.addButton( 'Createlimereplacementfields', + { + label : lang.title, + command :'createlimereplacementfields', + icon : this.path + 'limereplacementfields.gif' + }); + + if ( editor.addMenuItems ) + { + editor.addMenuGroup( 'limereplacementfields', 20 ); + editor.addMenuItems( + { + editlimereplacementfields : + { + label : lang.title, + command : 'editlimereplacementfields', + group : 'limereplacementfields', + order : 1, + icon : this.path + 'limereplacementfields.gif' + } + } ); + + if ( editor.contextMenu ) + { + editor.contextMenu.addListener( function( element, selection ) + { + if ( !element || !element.data( 'cke-limereplacementfields' ) ) + return null; + + return { editlimereplacementfields : CKEDITOR.TRISTATE_OFF }; + } ); + } + } + + editor.on( 'doubleclick', function( evt ) + { + if ( CKEDITOR.plugins.limereplacementfields.getSelectedPlaceHoder( editor ) ) + evt.data.dialog = 'editlimereplacementfields'; + }); + + editor.addCss( + '.cke_limereplacementfields' + + '{' + + 'background-color: #ffff00;' + + ( CKEDITOR.env.gecko ? 'cursor: default;' : '' ) + + '}' + ); + + editor.on( 'contentDom', function() + { + editor.document.getBody().on( 'resizestart', function( evt ) + { + if ( editor.getSelection().getSelectedElement().data( 'cke-limereplacementfields' ) ) + evt.data.preventDefault(); + }); + }); - editor.ui.addButton( 'LimeReplacementFields', - { - label : 'Insert LimeSurvey variable field', - command : 'LimeReplacementFieldsDlg', - icon: this.path+'limereplacementfields.gif' - }); + CKEDITOR.dialog.add( 'createlimereplacementfields', this.path + 'dialogs/limereplacementfields.js' ); + CKEDITOR.dialog.add( 'editlimereplacementfields', this.path + 'dialogs/limereplacementfields.js' ); + }, + afterInit : function( editor ) + { + var dataProcessor = editor.dataProcessor, + dataFilter = dataProcessor && dataProcessor.dataFilter, + htmlFilter = dataProcessor && dataProcessor.htmlFilter; - CKEDITOR.dialog.add( 'LimeReplacementFieldsDlg', CKEDITOR.basePath + '/plugins/limereplacementfields/dialogs/limereplacementfields.js'); + if ( dataFilter ) + { + dataFilter.addRules( + { + text : function( text ) + { + return text.replace( limereplacementfieldsReplaceRegex, function( match ) + { + return CKEDITOR.plugins.limereplacementfields.createlimereplacementfields( editor, null, match, 1 ); + }); + } + }); + } + if ( htmlFilter ) + { + htmlFilter.addRules( + { + elements : + { + 'span' : function( element ) + { + if ( element.attributes && element.attributes[ 'data-cke-limereplacementfields' ] ) + delete element.name; + } + } + }); + } + } + }); +})(); + +CKEDITOR.plugins.limereplacementfields = +{ + createlimereplacementfields : function( editor, oldElement, text, isGet ) + { + var element = new CKEDITOR.dom.element( 'span', editor.document ); + element.setAttributes( + { + contentEditable : 'false', + 'data-cke-limereplacementfields' : 1, + 'class' : 'cke_limereplacementfields' + } + ); + + text && element.setText( text ); + + if ( isGet ) + return element.getOuterHtml(); + + if ( oldElement ) + { + if ( CKEDITOR.env.ie ) + { + element.insertAfter( oldElement ); + // Some time is required for IE before the element is removed. + setTimeout( function() + { + oldElement.remove(); + element.focus(); + }, 10 ); + } + else + element.replace( oldElement ); + } + else + editor.insertElement( element ); + + return null; + }, + + getSelectedPlaceHoder : function( editor ) + { + var range = editor.getSelection().getRanges()[ 0 ]; + range.shrink( CKEDITOR.SHRINK_TEXT ); + var node = range.startContainer; + while( node && !( node.type == CKEDITOR.NODE_ELEMENT && node.data( 'cke-limereplacementfields' ) ) ) + node = node.getParent(); + return node; } -}); +};