CKEDITOR.dialog.add( 'googlemapsMarker', function( editor ) { 'use strict'; var numbering = function( id ) { return id + CKEDITOR.tools.getNextNumber(); }, markerIcon = numbering( 'markerIcon' ), GMapTexts = numbering( 'GMapTexts' ), googleMaps_Icons = editor.config.googleMaps_Icons, markerImage, point, theDialog; function getIcon( color ) { var data = googleMaps_Icons && googleMaps_Icons[ color ]; if (!data) return 'https://maps.gstatic.com/mapfiles/ms/micons/' + color + '-dot.png'; // fixme... return data.marker.image; } return { title : editor.lang.googlemaps.markerProperties, minWidth : 310, minHeight : 240, buttons : [ { type : 'button', id : 'deleteMarker', label : editor.lang.googlemaps.deleteMarker, onClick : function( evt ) { var dialog = evt.sender.getDialog(); dialog.onRemoveMarker(); dialog.hide(); } }, CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ], onLoad: function() { theDialog = this; this.setValues = function( data ) { this.definition.setValues.call(this, data); }; this.getValues = function() { return this.definition.getValues.call(this); }; // We have to destroy the internal CKEditor instance when this dialog is destroyed: this.destroy = CKEDITOR.tools.override( this.destroy, function( original ) { return function() { CKEDITOR.instances[ GMapTexts ].destroy(); original.call( this ); }; } ); }, setValues : function(data) { point = data; var control = this.getContentElement( 'Info', 'txtTooltip'); control.setValue( data.title ); control.setInitValue(); control = this.getContentElement( 'Info', 'txtWidth'); control.setValue( data.maxWidth ); control.setInitValue(); var instance = CKEDITOR.instances[ GMapTexts ]; if (instance) instance.setData( data.text ); else document.getElementById( GMapTexts ).value = data.text; markerImage = data.color; document.getElementById( markerIcon ).src = getIcon( markerImage ); }, getValues : function() { return { title: this.getValueOf( 'Info', 'txtTooltip'), maxWidth: this.getValueOf( 'Info', 'txtWidth'), text: CKEDITOR.instances[ GMapTexts ].getData(), color: markerImage }; }, contents : [ { id : 'Info', elements : [ { type : 'hbox', widths : [ '150px', '80px; padding-right:2px', '10px', '60px' ], children : [ { id : 'txtTooltip', type : 'text', widths: [ '70px', '90px' ], width : '160px', labelLayout : 'horizontal', label : editor.lang.googlemaps.tooltip }, { id : 'txtWidth', type : 'text', widths: [ '40px', '36px' ], width : '50px', labelLayout : 'horizontal', label : editor.lang.googlemaps.width }, { type : 'html', html : '
px
' }, { type : 'html', onClick : function(evt) { var target = evt.data.getTarget(), targetName = target.getName(); if (targetName == 'img') { editor.openNestedDialog( 'googlemapsIcons', function(dialog) { dialog.initialName = markerImage; dialog.onSelect = function( name ) { markerImage = name; document.getElementById( markerIcon ).src = getIcon( markerImage );}; }, null); } }, html : '
' } ] }, { type : 'html', onLoad : function() { var removePlugins = 'elementspath,resize,googlemaps'; // we have to remove any plugin that was removed in the main instance. var removed = editor.config.removePlugins; if (removed) removePlugins += ',' + removed; // http://dev.ckeditor.com/ticket/10731 if (editor.config.wsc_stack) delete editor.config.wsc_stack; if (CKEDITOR.config.wsc_stack) CKEDITOR.config.wsc_stack = []; // Copy all the configuration options var config = CKEDITOR.tools.clone( editor.config ); config.customConfig = ''; config.width = '450px'; config.height = 140; config.toolbar = editor.config.googleMaps_toolbar || [ [ 'Bold', 'Italic', 'Link', 'Image' ], [ 'Undo', 'Redo' ], [ 'GMapsInsertDirections' ] ]; config.removePlugins = removePlugins; config.toolbarCanCollapse = false; config.on = { // Add extra buttons 'pluginsLoaded' : function(ev ) { ev.editor.addCommand( 'gmapsinsertdirections', { exec : function( thisEditor ) { var link = 'http://maps.google.com/maps?daddr=' + encodeURIComponent( theDialog.getValueOf('Info', 'txtTooltip')) + ' @' + point.getPosition().toUrlValue(); thisEditor.insertHtml( '' + editor.lang.googlemaps.directionsTitle + '' ); } } ); // Add a custom toolbar button ev.editor.ui.addButton( 'GMapsInsertDirections', { label : editor.lang.googlemaps.directions, /* icon from FamFamFam http://www.famfamfam.com/lab/icons/silk/ */ icon : editor.plugins.googlemaps.path + '/icons/gmapsinsertdirections.png', // %REMOVE_LINE_CORE% command : 'gmapsinsertdirections' } ); } }; CKEDITOR.replace( GMapTexts, config); }, html : '' } ] } ] }; } );