diff options
Diffstat (limited to 'www/wiki/extensions/Maps/resources/WikitextEditor')
-rw-r--r-- | www/wiki/extensions/Maps/resources/WikitextEditor/css/jquery.miniColors.css | 70 | ||||
-rw-r--r-- | www/wiki/extensions/Maps/resources/WikitextEditor/css/mapeditor.css | 79 | ||||
-rw-r--r-- | www/wiki/extensions/Maps/resources/WikitextEditor/images/circle.gif | bin | 0 -> 78 bytes | |||
-rw-r--r-- | www/wiki/extensions/Maps/resources/WikitextEditor/images/gradient.png | bin | 0 -> 6548 bytes | |||
-rw-r--r-- | www/wiki/extensions/Maps/resources/WikitextEditor/images/line.gif | bin | 0 -> 1104 bytes | |||
-rw-r--r-- | www/wiki/extensions/Maps/resources/WikitextEditor/images/rainbow.png | bin | 0 -> 1665 bytes | |||
-rw-r--r-- | www/wiki/extensions/Maps/resources/WikitextEditor/images/trigger.png | bin | 0 -> 538 bytes | |||
-rw-r--r-- | www/wiki/extensions/Maps/resources/WikitextEditor/js/README | 3 | ||||
-rw-r--r-- | www/wiki/extensions/Maps/resources/WikitextEditor/js/jquery.miniColors.js | 567 | ||||
-rw-r--r-- | www/wiki/extensions/Maps/resources/WikitextEditor/js/mapeditor.iefixes.js | 28 | ||||
-rw-r--r-- | www/wiki/extensions/Maps/resources/WikitextEditor/js/mapeditor.js | 919 |
11 files changed, 1666 insertions, 0 deletions
diff --git a/www/wiki/extensions/Maps/resources/WikitextEditor/css/jquery.miniColors.css b/www/wiki/extensions/Maps/resources/WikitextEditor/css/jquery.miniColors.css new file mode 100644 index 00000000..664c2fd4 --- /dev/null +++ b/www/wiki/extensions/Maps/resources/WikitextEditor/css/jquery.miniColors.css @@ -0,0 +1,70 @@ +.miniColors-trigger { + height: 22px; + width: 22px; + /* @embed */ + background: url(../images/trigger.png) center no-repeat; + vertical-align: middle; + margin: 0 .25em; + display: inline-block; + outline: none; +} + +.miniColors-selector { + position: absolute; + width: 175px; + height: 150px; + background: #FFF; + border: solid 1px #BBB; + -moz-box-shadow: 0 0 6px rgba(0, 0, 0, .25); + -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, .25); + box-shadow: 0 0 6px rgba(0, 0, 0, .25); + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + padding: 5px; + z-index: 999999; +} + +.miniColors-selector.black { + background: #000; + border-color: #000; +} + +.miniColors-colors { + position: absolute; + top: 5px; + left: 5px; + width: 150px; + height: 150px; + /* @embed */ + background: url(../images/gradient.png) center no-repeat; + cursor: crosshair; +} + +.miniColors-hues { + position: absolute; + top: 5px; + left: 160px; + width: 20px; + height: 150px; + /* @embed */ + background: url(../images/rainbow.png) center no-repeat; + cursor: crosshair; +} + +.miniColors-colorPicker { + position: absolute; + width: 11px; + height: 11px; + /* @embed */ + background: url(../images/circle.gif) center no-repeat; +} + +.miniColors-huePicker { + position: absolute; + left: -3px; + width: 26px; + height: 3px; + /* @embed */ + background: url(../images/line.gif) center no-repeat; +}
\ No newline at end of file diff --git a/www/wiki/extensions/Maps/resources/WikitextEditor/css/mapeditor.css b/www/wiki/extensions/Maps/resources/WikitextEditor/css/mapeditor.css new file mode 100644 index 00000000..9c3fe7c4 --- /dev/null +++ b/www/wiki/extensions/Maps/resources/WikitextEditor/css/mapeditor.css @@ -0,0 +1,79 @@ +#code-output-container, #code-input-container,#code-input { + height: 100% !important; + width: 100%; +} + +#code-output-container { + overflow: visible; +} + +textarea#code-input, textarea#code-output { + resize: none; +} + +#code-output { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border: none; + padding: 10px; +} + +#map-canvas { + width: 100%; + height: 500px; +} + +#map-canvas,#code-input { + display: block; +} + +.mapeditor-dialog-form fieldset label{ + display: block; +} + +.mapeditor-dialog-form fieldset input{ + width: 200px; +} + +.mapeditor-dialog-form fieldset input[type="checkbox"]{ + width: auto; +} + +.mapeditor-dialog-form fieldset input[name="strokeColor"],.mapeditor-dialog-form fieldset input[name="fillColor"]{ + width: 100px; +} + +.mapeditor-dialog-form .ui-slider{ + margin: 5px 2px; + width: 200px; +} + +.link-title-switcher { + margin: 5px; +} + +#map-parameter-form{ + text-align: center; +} + +.mapeditor-controls{ + padding: 5px; +} + +.mapeditor-control-element{ + background-color:white; + border: 1px solid #717B87; + cursor: pointer; + text-align: center; + float: left; + padding: 2px; +} + +.mapeditor-control-text{ + font-family:"Arial","sans-serif"; + font-size: 12px; + padding-left: 4px; + padding-right: 4px; + font-weight: bold; +}
\ No newline at end of file diff --git a/www/wiki/extensions/Maps/resources/WikitextEditor/images/circle.gif b/www/wiki/extensions/Maps/resources/WikitextEditor/images/circle.gif Binary files differnew file mode 100644 index 00000000..599f7f13 --- /dev/null +++ b/www/wiki/extensions/Maps/resources/WikitextEditor/images/circle.gif diff --git a/www/wiki/extensions/Maps/resources/WikitextEditor/images/gradient.png b/www/wiki/extensions/Maps/resources/WikitextEditor/images/gradient.png Binary files differnew file mode 100644 index 00000000..486a9f6d --- /dev/null +++ b/www/wiki/extensions/Maps/resources/WikitextEditor/images/gradient.png diff --git a/www/wiki/extensions/Maps/resources/WikitextEditor/images/line.gif b/www/wiki/extensions/Maps/resources/WikitextEditor/images/line.gif Binary files differnew file mode 100644 index 00000000..9eb19837 --- /dev/null +++ b/www/wiki/extensions/Maps/resources/WikitextEditor/images/line.gif diff --git a/www/wiki/extensions/Maps/resources/WikitextEditor/images/rainbow.png b/www/wiki/extensions/Maps/resources/WikitextEditor/images/rainbow.png Binary files differnew file mode 100644 index 00000000..d16fcd86 --- /dev/null +++ b/www/wiki/extensions/Maps/resources/WikitextEditor/images/rainbow.png diff --git a/www/wiki/extensions/Maps/resources/WikitextEditor/images/trigger.png b/www/wiki/extensions/Maps/resources/WikitextEditor/images/trigger.png Binary files differnew file mode 100644 index 00000000..20ec282b --- /dev/null +++ b/www/wiki/extensions/Maps/resources/WikitextEditor/images/trigger.png diff --git a/www/wiki/extensions/Maps/resources/WikitextEditor/js/README b/www/wiki/extensions/Maps/resources/WikitextEditor/js/README new file mode 100644 index 00000000..53598d48 --- /dev/null +++ b/www/wiki/extensions/Maps/resources/WikitextEditor/js/README @@ -0,0 +1,3 @@ +== jquery.miniColors.js == +Is dual licensed under the MIT / GPLv2 licenses +https://github.com/claviska/jquery-miniColors
\ No newline at end of file diff --git a/www/wiki/extensions/Maps/resources/WikitextEditor/js/jquery.miniColors.js b/www/wiki/extensions/Maps/resources/WikitextEditor/js/jquery.miniColors.js new file mode 100644 index 00000000..dfbce542 --- /dev/null +++ b/www/wiki/extensions/Maps/resources/WikitextEditor/js/jquery.miniColors.js @@ -0,0 +1,567 @@ +/* + * jQuery miniColors: A small color selector + * + * Copyright 2011 Cory LaViska for A Beautiful Site, LLC. (http://abeautifulsite.net/) + * + * Dual licensed under the MIT or GPL Version 2 licenses + * +*/ +if(jQuery) (function($) { + + $.extend($.fn, { + + miniColors: function(o, data) { + + var create = function(input, o, data) { + // + // Creates a new instance of the miniColors selector + // + + // Determine initial color (defaults to white) + var color = expandHex(input.val()); + if( !color ) color = 'ffffff'; + var hsb = hex2hsb(color); + + // Create trigger + var trigger = $('<a class="miniColors-trigger" style="background-color: #' + color + '" href="#"></a>'); + trigger.insertAfter(input); + + // Set input data and update attributes + input + .addClass('miniColors') + .data('original-maxlength', input.attr('maxlength') || null) + .data('original-autocomplete', input.attr('autocomplete') || null) + .data('letterCase', 'uppercase') + .data('trigger', trigger) + .data('hsb', hsb) + .data('change', o.change ? o.change : null) + .attr('maxlength', 7) + .attr('autocomplete', 'off') + .val('#' + convertCase(color, o.letterCase)); + + // Handle options + if( o.readonly ) input.prop('readonly', true); + if( o.disabled ) disable(input); + + // Show selector when trigger is clicked + trigger.bind('click.miniColors', function(event) { + event.preventDefault(); + if( input.val() === '' ) input.val('#'); + show(input); + + }); + + // Show selector when input receives focus + input.bind('focus.miniColors', function(event) { + if( input.val() === '' ) input.val('#'); + show(input); + }); + + // Hide on blur + input.bind('blur.miniColors', function(event) { + var hex = expandHex(input.val()); + input.val( hex ? '#' + convertCase(hex, input.data('letterCase')) : '' ); + }); + + // Hide when tabbing out of the input + input.bind('keydown.miniColors', function(event) { + if( event.keyCode === 9 ) hide(input); + }); + + // Update when color is typed in + input.bind('keyup.miniColors', function(event) { + setColorFromInput(input); + }); + + // Handle pasting + input.bind('paste.miniColors', function(event) { + // Short pause to wait for paste to complete + setTimeout( function() { + setColorFromInput(input); + }, 5); + }); + + }; + + var destroy = function(input) { + // + // Destroys an active instance of the miniColors selector + // + + hide(); + input = $(input); + + // Restore to original state + input.data('trigger').remove(); + input + .attr('autocomplete', input.data('original-autocomplete')) + .attr('maxlength', input.data('original-maxlength')) + .removeData() + .removeClass('miniColors') + .unbind('.miniColors'); + $(document).unbind('.miniColors'); + }; + + var enable = function(input) { + // + // Enables the input control and the selector + // + input + .prop('disabled', false) + .data('trigger') + .css('opacity', 1); + }; + + var disable = function(input) { + // + // Disables the input control and the selector + // + hide(input); + input + .prop('disabled', true) + .data('trigger') + .css('opacity', 0.5); + }; + + var show = function(input) { + // + // Shows the miniColors selector + // + if( input.prop('disabled') ) return false; + + // Hide all other instances + hide(); + + // Generate the selector + var selector = $('<div class="miniColors-selector"></div>'); + selector + .append('<div class="miniColors-colors" style="background-color: #FFF;"><div class="miniColors-colorPicker"></div></div>') + .append('<div class="miniColors-hues"><div class="miniColors-huePicker"></div></div>') + .css({ + top: input.is(':visible') ? input.offset().top + input.outerHeight() : input.data('trigger').offset().top + input.data('trigger').outerHeight(), + left: input.is(':visible') ? input.offset().left : input.data('trigger').offset().left, + display: 'none' + }) + .addClass( input.attr('class') ); + + // Set background for colors + var hsb = input.data('hsb'); + selector + .find('.miniColors-colors') + .css('backgroundColor', '#' + hsb2hex({ h: hsb.h, s: 100, b: 100 })); + + // Set colorPicker position + var colorPosition = input.data('colorPosition'); + if( !colorPosition ) colorPosition = getColorPositionFromHSB(hsb); + selector.find('.miniColors-colorPicker') + .css('top', colorPosition.y + 'px') + .css('left', colorPosition.x + 'px'); + + // Set huePicker position + var huePosition = input.data('huePosition'); + if( !huePosition ) huePosition = getHuePositionFromHSB(hsb); + selector.find('.miniColors-huePicker').css('top', huePosition.y + 'px'); + + // Set input data + input + .data('selector', selector) + .data('huePicker', selector.find('.miniColors-huePicker')) + .data('colorPicker', selector.find('.miniColors-colorPicker')) + .data('mousebutton', 0); + + $('BODY').append(selector); + selector.fadeIn(100); + + // Prevent text selection in IE + selector.bind('selectstart', function() { return false; }); + + $(document).bind('mousedown.miniColors touchstart.miniColors', function(event) { + + input.data('mousebutton', 1); + + if( $(event.target).parents().andSelf().hasClass('miniColors-colors') ) { + event.preventDefault(); + input.data('moving', 'colors'); + moveColor(input, event); + } + + if( $(event.target).parents().andSelf().hasClass('miniColors-hues') ) { + event.preventDefault(); + input.data('moving', 'hues'); + moveHue(input, event); + } + + if( $(event.target).parents().andSelf().hasClass('miniColors-selector') ) { + event.preventDefault(); + return; + } + + if( $(event.target).parents().andSelf().hasClass('miniColors') ) return; + + hide(input); + }); + + $(document) + .bind('mouseup.miniColors touchend.miniColors', function(event) { + event.preventDefault(); + input.data('mousebutton', 0).removeData('moving'); + }) + .bind('mousemove.miniColors touchmove.miniColors', function(event) { + event.preventDefault(); + if( input.data('mousebutton') === 1 ) { + if( input.data('moving') === 'colors' ) moveColor(input, event); + if( input.data('moving') === 'hues' ) moveHue(input, event); + } + }); + + }; + + var hide = function(input) { + + // + // Hides one or more miniColors selectors + // + + // Hide all other instances if input isn't specified + if( !input ) input = '.miniColors'; + + $(input).each( function() { + var selector = $(this).data('selector'); + $(this).removeData('selector'); + $(selector).fadeOut(100, function() { + $(this).remove(); + }); + }); + + $(document).unbind('.miniColors'); + + }; + + var moveColor = function(input, event) { + + var colorPicker = input.data('colorPicker'); + + colorPicker.hide(); + + var position = { + x: event.pageX, + y: event.pageY + }; + + // Touch support + if( event.originalEvent.changedTouches ) { + position.x = event.originalEvent.changedTouches[0].pageX; + position.y = event.originalEvent.changedTouches[0].pageY; + } + position.x = position.x - input.data('selector').find('.miniColors-colors').offset().left - 5; + position.y = position.y - input.data('selector').find('.miniColors-colors').offset().top - 5; + if( position.x <= -5 ) position.x = -5; + if( position.x >= 144 ) position.x = 144; + if( position.y <= -5 ) position.y = -5; + if( position.y >= 144 ) position.y = 144; + + input.data('colorPosition', position); + colorPicker.css('left', position.x).css('top', position.y).show(); + + // Calculate saturation + var s = Math.round((position.x + 5) * 0.67); + if( s < 0 ) s = 0; + if( s > 100 ) s = 100; + + // Calculate brightness + var b = 100 - Math.round((position.y + 5) * 0.67); + if( b < 0 ) b = 0; + if( b > 100 ) b = 100; + + // Update HSB values + var hsb = input.data('hsb'); + hsb.s = s; + hsb.b = b; + + // Set color + setColor(input, hsb, true); + }; + + var moveHue = function(input, event) { + + var huePicker = input.data('huePicker'); + + huePicker.hide(); + + var position = { + y: event.pageY + }; + + // Touch support + if( event.originalEvent.changedTouches ) { + position.y = event.originalEvent.changedTouches[0].pageY; + } + + position.y = position.y - input.data('selector').find('.miniColors-colors').offset().top - 1; + if( position.y <= -1 ) position.y = -1; + if( position.y >= 149 ) position.y = 149; + input.data('huePosition', position); + huePicker.css('top', position.y).show(); + + // Calculate hue + var h = Math.round((150 - position.y - 1) * 2.4); + if( h < 0 ) h = 0; + if( h > 360 ) h = 360; + + // Update HSB values + var hsb = input.data('hsb'); + hsb.h = h; + + // Set color + setColor(input, hsb, true); + + }; + + var setColor = function(input, hsb, updateInput) { + input.data('hsb', hsb); + var hex = hsb2hex(hsb); + if( updateInput ) input.val( '#' + convertCase(hex, input.data('letterCase')) ); + input.data('trigger').css('backgroundColor', '#' + hex); + if( input.data('selector') ) input.data('selector').find('.miniColors-colors').css('backgroundColor', '#' + hsb2hex({ h: hsb.h, s: 100, b: 100 })); + + // Fire change callback + if( input.data('change') ) { + if( hex === input.data('lastChange') ) return; + input.data('change').call(input.get(0), '#' + hex, hsb2rgb(hsb)); + input.data('lastChange', hex); + } + + }; + + var setColorFromInput = function(input) { + + input.val('#' + cleanHex(input.val())); + var hex = expandHex(input.val()); + if( !hex ) return false; + + // Get HSB equivalent + var hsb = hex2hsb(hex); + + // If color is the same, no change required + var currentHSB = input.data('hsb'); + if( hsb.h === currentHSB.h && hsb.s === currentHSB.s && hsb.b === currentHSB.b ) return true; + + // Set colorPicker position + var colorPosition = getColorPositionFromHSB(hsb); + var colorPicker = $(input.data('colorPicker')); + colorPicker.css('top', colorPosition.y + 'px').css('left', colorPosition.x + 'px'); + input.data('colorPosition', colorPosition); + + // Set huePosition position + var huePosition = getHuePositionFromHSB(hsb); + var huePicker = $(input.data('huePicker')); + huePicker.css('top', huePosition.y + 'px'); + input.data('huePosition', huePosition); + + setColor(input, hsb); + + return true; + + }; + + var convertCase = function(string, letterCase) { + if( letterCase === 'lowercase' ) return string.toLowerCase(); + if( letterCase === 'uppercase' ) return string.toUpperCase(); + return string; + }; + + var getColorPositionFromHSB = function(hsb) { + var x = Math.ceil(hsb.s / 0.67); + if( x < 0 ) x = 0; + if( x > 150 ) x = 150; + var y = 150 - Math.ceil(hsb.b / 0.67); + if( y < 0 ) y = 0; + if( y > 150 ) y = 150; + return { x: x - 5, y: y - 5 }; + }; + + var getHuePositionFromHSB = function(hsb) { + var y = 150 - (hsb.h / 2.4); + if( y < 0 ) h = 0; + if( y > 150 ) h = 150; + return { y: y - 1 }; + }; + + var cleanHex = function(hex) { + return hex.replace(/[^A-F0-9]/ig, ''); + }; + + var expandHex = function(hex) { + hex = cleanHex(hex); + if( !hex ) return null; + if( hex.length === 3 ) hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; + return hex.length === 6 ? hex : null; + }; + + var hsb2rgb = function(hsb) { + var rgb = {}; + var h = Math.round(hsb.h); + var s = Math.round(hsb.s*255/100); + var v = Math.round(hsb.b*255/100); + if(s === 0) { + rgb.r = rgb.g = rgb.b = v; + } else { + var t1 = v; + var t2 = (255 - s) * v / 255; + var t3 = (t1 - t2) * (h % 60) / 60; + if( h === 360 ) h = 0; + if( h < 60 ) { rgb.r = t1; rgb.b = t2; rgb.g = t2 + t3; } + else if( h < 120 ) {rgb.g = t1; rgb.b = t2; rgb.r = t1 - t3; } + else if( h < 180 ) {rgb.g = t1; rgb.r = t2; rgb.b = t2 + t3; } + else if( h < 240 ) {rgb.b = t1; rgb.r = t2; rgb.g = t1 - t3; } + else if( h < 300 ) {rgb.b = t1; rgb.g = t2; rgb.r = t2 + t3; } + else if( h < 360 ) {rgb.r = t1; rgb.g = t2; rgb.b = t1 - t3; } + else { rgb.r = 0; rgb.g = 0; rgb.b = 0; } + } + return { + r: Math.round(rgb.r), + g: Math.round(rgb.g), + b: Math.round(rgb.b) + }; + }; + + var rgb2hex = function(rgb) { + var hex = [ + rgb.r.toString(16), + rgb.g.toString(16), + rgb.b.toString(16) + ]; + $.each(hex, function(nr, val) { + if (val.length === 1) hex[nr] = '0' + val; + }); + return hex.join(''); + }; + + var hex2rgb = function(hex) { + hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16); + + return { + r: hex >> 16, + g: (hex & 0x00FF00) >> 8, + b: (hex & 0x0000FF) + }; + }; + + var rgb2hsb = function(rgb) { + var hsb = { h: 0, s: 0, b: 0 }; + var min = Math.min(rgb.r, rgb.g, rgb.b); + var max = Math.max(rgb.r, rgb.g, rgb.b); + var delta = max - min; + hsb.b = max; + hsb.s = max !== 0 ? 255 * delta / max : 0; + if( hsb.s !== 0 ) { + if( rgb.r === max ) { + hsb.h = (rgb.g - rgb.b) / delta; + } else if( rgb.g === max ) { + hsb.h = 2 + (rgb.b - rgb.r) / delta; + } else { + hsb.h = 4 + (rgb.r - rgb.g) / delta; + } + } else { + hsb.h = -1; + } + hsb.h *= 60; + if( hsb.h < 0 ) { + hsb.h += 360; + } + hsb.s *= 100/255; + hsb.b *= 100/255; + return hsb; + }; + + var hex2hsb = function(hex) { + var hsb = rgb2hsb(hex2rgb(hex)); + // Zero out hue marker for black, white, and grays (saturation === 0) + if( hsb.s === 0 ) hsb.h = 360; + return hsb; + }; + + var hsb2hex = function(hsb) { + return rgb2hex(hsb2rgb(hsb)); + }; + + + // Handle calls to $([selector]).miniColors() + switch(o) { + + case 'readonly': + + $(this).each( function() { + if( !$(this).hasClass('miniColors') ) return; + $(this).prop('readonly', data); + }); + + return $(this); + + case 'disabled': + + $(this).each( function() { + if( !$(this).hasClass('miniColors') ) return; + if( data ) { + disable($(this)); + } else { + enable($(this)); + } + }); + + return $(this); + + case 'value': + + // Getter + if( data === undefined ) { + if( !$(this).hasClass('miniColors') ) return; + var input = $(this), + hex = expandHex(input.val()); + return hex ? '#' + convertCase(hex, input.data('letterCase')) : null; + } + + // Setter + $(this).each( function() { + if( !$(this).hasClass('miniColors') ) return; + $(this).val(data); + setColorFromInput($(this)); + }); + + return $(this); + + case 'destroy': + + $(this).each( function() { + if( !$(this).hasClass('miniColors') ) return; + destroy($(this)); + }); + + return $(this); + + default: + + if( !o ) o = {}; + + $(this).each( function() { + + // Must be called on an input element + if( $(this)[0].tagName.toLowerCase() !== 'input' ) return; + + // If a trigger is present, the control was already created + if( $(this).data('trigger') ) return; + + // Create the control + create($(this), o, data); + + }); + + return $(this); + + } + + } + + }); + +})(jQuery);
\ No newline at end of file diff --git a/www/wiki/extensions/Maps/resources/WikitextEditor/js/mapeditor.iefixes.js b/www/wiki/extensions/Maps/resources/WikitextEditor/js/mapeditor.iefixes.js new file mode 100644 index 00000000..a49e42fb --- /dev/null +++ b/www/wiki/extensions/Maps/resources/WikitextEditor/js/mapeditor.iefixes.js @@ -0,0 +1,28 @@ +if (!Array.prototype.indexOf) +{ + Array.prototype.indexOf = function(elt /*, from*/) + { + var len = this.length >>> 0; + + var from = Number(arguments[1]) || 0; + from = (from < 0) + ? Math.ceil(from) + : Math.floor(from); + if (from < 0) + from += len; + + for (; from < len; from++) + { + if (from in this && + this[from] === elt) + return from; + } + return -1; + }; +} + +if(typeof String.prototype.trim !== 'function') { + String.prototype.trim = function() { + return this.replace(/^\s+|\s+$/g, ''); + } +}
\ No newline at end of file diff --git a/www/wiki/extensions/Maps/resources/WikitextEditor/js/mapeditor.js b/www/wiki/extensions/Maps/resources/WikitextEditor/js/mapeditor.js new file mode 100644 index 00000000..eb2efd61 --- /dev/null +++ b/www/wiki/extensions/Maps/resources/WikitextEditor/js/mapeditor.js @@ -0,0 +1,919 @@ +var mapEditor = { + __map:null, + __drawingManager:null, + __mapObjects:[], + __controlsDiv:null, + __options:{ + canvas:'map-canvas', + onRightClick:function(){} + }, + __mapObjectOptions: { + marker:{ + draggable:true + }, + polyline:{ + strokeWeight:2, + strokeOpacity:1, + strokeColor:'#FF0000', + editable:true + }, + circle:{ + strokeWeight:2, + strokeOpacity:1, + strokeColor:'#FF0000', + fillColor:'#FF0000', + fillOpacity:0.5, + editable:true + }, + rectangle:{ + strokeWeight:2, + strokeOpacity:1, + strokeColor:'#FF0000', + fillColor:'#FF0000', + fillOpacity:0.5, + editable:true + }, + polygon:{ + strokeWeight:2, + strokeOpacity:1, + strokeColor:'#FF0000', + fillColor:'#FF0000', + fillOpacity:0.5, + editable:true + }, + imageoverlay:{ + strokeWeight:1, + strokeOpacity:0.5, + strokeColor:'#000', + fillOpacity:0.0, + editable:true + } + }, + __mapParameters:{ + mappingservice: { + values:mw.config.get( 'egMapsAvailableServices' ) + }, + copycoords: { + values:['on','off'] + }, + cluster: { + values:['on','off'] + }, + searchmarkers:{ + values:['title','all'] + }, + 'static':{ + values:['on','off'] + }, + maxzoom: { + values:[] + }, + minzoom: { + values:[] + }, + zoom:{ + values:[] + }, + centre:{ + values:[] + }, + title:{ + values:[] + }, + label:{ + values:[] + }, + icon:{ + values:[] + }, + type:{ + values:[] + }, + types:{ + values:[] + }, + layers:{ + values:[] + }, + controls:{ + values:[] + }, + zoomstyle:{ + values:['default','small','large'] + }, + typestyle:{ + values:[] + }, + autoinfowindows:{ + values:['on','off'] + }, + kml:{ + values:[] + }, + gkml:{ + values:[] + }, + resizable:{ + values:[] + }, + tilt:{ + values:[] + }, + kmlrezoom:{ + values:['on','off'] + }, + poi:{ + values:['on','off'] + }, + visitedicon:{ + values:[] + } + }, + __addMapObject:function(o){ + var idx = this.__mapObjects.indexOf(o); + if(idx === -1){ + this.__mapObjects.push(o); + o.overlay.setMap(this.__map); + } + }, + __removeMapObject:function(o){ + var idx = this.__mapObjects.indexOf(o); + if(idx !== -1){ + this.__mapObjects[idx].overlay.setMap(null); + this.__mapObjects.splice(idx,1); + } + }, + __createOrUpdateImageOverlay:function(e,imageUrl){ + //remove old image overlay if exists + this.__removeMapObject(e.imageoverlay); + + //set to new type so it doesn't collide with rectangle + e.type = 'imageoverlaybounds'; + + //add map objects + this.__addMapObject(e); + var image = new google.maps.GroundOverlay(imageUrl, e.overlay.getBounds()); + var imageOverlay = { + overlay:image, + type:'imageoverlay' + }; + this.__addMapObject(imageOverlay); + e.imageoverlay = imageOverlay; + imageOverlay.metadata = e.metadata; + + //register right click listener if not already done + if(e.rightClickListener !== true){ + google.maps.event.addListener(e.overlay, 'rightclick', function () { + mapEditor.__options.onRightClick(e); + }); + e.rightClickListener = true; + } + + //register bounds change listener if not already done + if(e.boundsChangedListener !== true){ + google.maps.event.addListener(e.overlay, 'bounds_changed', function () { + //destroy and recreate imageoverlay (due to no e.imageoverlay.setBounds() method) + mapEditor.__createOrUpdateImageOverlay(e, e.imageoverlay.overlay.getUrl()); + }); + e.boundsChangedListener = true; + } + + return imageOverlay; + }, + __initControls:function(){ + //Create root controls element + var controlDiv = this.__controlsDiv = document.createElement('div'); + controlDiv.setAttribute('class','mapeditor-controls'); + controlDiv.index = 1; + + this.__map.controls[google.maps.ControlPosition.BOTTOM_CENTER].push(controlDiv); + }, + __initMap:function(){ + var myOptions = { + center:new google.maps.LatLng(0, 0), + zoom:1, + mapTypeId:google.maps.MapTypeId.ROADMAP + }; + + this.__map = new google.maps.Map(document.getElementById(this.__options.canvas),myOptions); + + //noinspection JSUnresolvedVariable + var drawingManager = this.__drawingManager = new google.maps.drawing.DrawingManager({ + drawingMode:null, + drawingControl:true, + drawingControlOptions:{ + position:google.maps.ControlPosition.TOP_CENTER + }, + markerOptions:this.__mapObjectOptions.marker, + circleOptions:this.__mapObjectOptions.circle, + rectangleOptions:this.__mapObjectOptions.rectangle, + polygonOptions:this.__mapObjectOptions.polygon, + polylineOptions:this.__mapObjectOptions.polyline + }); + drawingManager.setMap(this.__map); + + google.maps.event.addListener(drawingManager, 'overlaycomplete', function (e) { + mapEditor.__addMapObject(e); + mapEditor.__registerRightClickListener(e); + google.maps.event.trigger(e.overlay, 'rightclick'); + }); + }, + __readMapObjectOptionsFromMetadata:function(e){ + var options = $.extend({},this.__mapObjectOptions[e.type]); + for(var key in e.metadata){ + var data = e.metadata[key]; + if(data.value.trim() !== ''){ + options[data.name] = data.value; + } + } + try{ + e.overlay.setOptions(options); + return true; + }catch(e){ + return false; + } + }, + __writeMetaDataToMapObject:function(e,metadata){ + e.metadata = this.__arrayToObject(metadata); + }, + __convertPositionalParametersToMetaData:function(positionalArray){ + var positionalNames = [ + 'title', + 'text', + 'strokeColor', + 'strokeOpacity', + 'strokeWeight', + 'fillColor', + 'fillOpacity', + 'showOnHover' + ]; + + if(positionalArray !== undefined && positionalArray.length > 0){ + if(positionalArray[0].trim().indexOf('link:') === 0){ + positionalNames.splice(0,1); + positionalNames[0] = 'link'; + } + } + + for(var x = 0; x < positionalArray.length; x++){ + positionalArray[x] = { + name:positionalNames[x], + value:positionalArray[x].trim() + }; + } + return this.__arrayToObject(positionalArray); + }, + __arrayToObject:function(arr){ + var o = {}; + for (var i = 0; i < arr.length; ++i){ + o[i] = arr[i]; + } + return o; + }, + __registerRightClickListener:function(e){ + google.maps.event.addListener(e.overlay, 'rightclick', function () { + mapEditor.__options.onRightClick(e); + }); + }, + __generateWikiCode:function( separators ){ + var code = separators.codeStart; + + var markers = ''; + var circles = ''; + var polygons = ''; + var lines = ''; + var rectangles = ''; + var imageoverlays = ''; + + for(var x = 0; x < this.__mapObjects.length; x++){ + var mapObject = this.__mapObjects[x].overlay; + var mapObjectType = this.__mapObjects[x].type; + var mapObjectMeta = this.__mapObjects[x].metadata; + + var metadata = ''; + if(mapObjectMeta !== undefined){ + var delimiterPosition = ''; + for(var key in mapObjectMeta){ + var data = mapObjectMeta[key]; + delimiterPosition += delimiterPosition.length > 0 ? ' ~' : '~'; + if(data.value !== ''){ + if(data.name === 'link' && data.value.indexOf('link:') === -1){ + data.value = 'link:'+data.value; + } + if(!(mapObjectType === 'imageoverlay' && data.name === 'image')){ + metadata += delimiterPosition+data.value; + delimiterPosition = ''; + } + } + } + } + + var serializedData = mapObject+metadata; + if (mapObjectType === 'marker') { + markers += markers === '' ? serializedData : '; '+serializedData; + } else if (mapObjectType === 'circle') { + circles += circles === '' ? serializedData : '; '+serializedData; + } else if (mapObjectType === 'polygon') { + polygons += polygons === '' ? serializedData : '; '+serializedData; + } else if (mapObjectType === 'polyline') { + lines += lines === '' ? serializedData : '; '+serializedData; + } else if (mapObjectType === 'rectangle') { + rectangles += rectangles === '' ? serializedData : '; '+serializedData; + }else if(mapObjectType === 'imageoverlay'){ + imageoverlays += imageoverlays === '' ? serializedData : '; '+serializedData; + } + } + + + code += markers !== '' ? markers : ''; + code += circles !== '' ? separators.separator+'circles='+circles : ''; + code += polygons !== '' ? separators.separator+'polygons='+polygons : ''; + code += lines !== '' ? separators.separator+'lines='+lines : ''; + code += rectangles !== '' ? separators.separator+'rectangles='+rectangles : ''; + code += imageoverlays !== '' ? separators.separator+'imageoverlays='+imageoverlays : ''; + + //add map parameters + for(var param in this.__mapParameters){ + var value = this.__mapParameters[param].value; + if(value === undefined || value === ''){ + continue; + } + code += '\n|'+param+'='+value; + } + + code += separators.codeEnd; + return code; + }, + __importWikiCode:function(rawData){ + var syntaxPattern = /^\{\{#display_map:[\s\S]*\}\}[\s\n]*$/i; + if(rawData.match(syntaxPattern) === null){ //NO MATCH + return false; + }else{ + try{ + var patterns = { + marker: /^\{\{#display_map:\s*(.*)/i, + polyline: /\|\s*lines=(.*)/i, + circle:/\|\s*circles=(.*)/i, + polygon:/\|\s*polygons=(.*)/i, + rectangle:/\|\s*rectangles=(.*)/i, + imageoverlay:/\|\s*imageoverlays=(.*)/i, + parameter:/\|\s*(.*)=(.*)/i + }; + var mapObjects = []; + rawData = rawData.split('\n'); + for(var j = 0; j < rawData.length; j++){ + for (var key in patterns){ + var match = rawData[j].match(patterns[key]); + if(match !== null && match[1].trim().length !== 0){ + var isMapObject = false; + if(key !== 'parameter'){ + var data = match[1].split(';'); + for(var i = 0; i < data.length; i++){ + + var metadata = data[i].split('~'); + metadata.splice(0,1); + if(metadata.length > 0){ + data[i] = data[i].substring(0,data[i].indexOf('~')); + } + metadata = this.__convertPositionalParametersToMetaData(metadata); + + var options = this.__mapObjectOptions[key]; + var mapObject = null; + if (key === 'marker') { + var position = data[i].split(','); + //noinspection JSValidateTypes + options = $.extend({ + position: new google.maps.LatLng(position[0],position[1]) + },options); + mapObject = new google.maps.Marker(options); + } else if (key === 'circle') { + var parts = data[i].split(':'); + var radius = parts[1]; + var position = parts[0].split(','); + //noinspection JSValidateTypes + options = $.extend({ + center: new google.maps.LatLng(position[0],position[1]), + radius: parseFloat(radius) + },options); + mapObject = new google.maps.Circle(options); + } else if (key === 'polygon') { + var paths = data[i].split(':'); + for(var x = 0; x < paths.length; x++){ + var position = paths[x].split(','); + paths[x] = new google.maps.LatLng(position[0],position[1]); + } + paths = new google.maps.MVCArray(paths); + //noinspection JSValidateTypes + options = $.extend({ + paths: paths + },options); + mapObject = new google.maps.Polygon(options); + } else if (key === 'polyline') { + var paths = data[i].split(':'); + for(var x = 0; x < paths.length; x++){ + var position = paths[x].split(','); + paths[x] = new google.maps.LatLng(position[0],position[1]); + } + paths = new google.maps.MVCArray(paths); + //noinspection JSValidateTypes + options = $.extend({ + path: paths + },options); + mapObject = new google.maps.Polyline(options); + } else if (key === 'rectangle') { + var parts = data[i].split(':'); + var ne = parts[0].split(','); + var sw = parts[1].split(','); + sw = new google.maps.LatLng(sw[0],sw[1]); + ne = new google.maps.LatLng(ne[0],ne[1]); + //noinspection JSValidateTypes + options = $.extend({ + bounds: new google.maps.LatLngBounds(sw,ne) + },options); + mapObject = new google.maps.Rectangle(options); + }else if (key === 'imageoverlay'){ + var parts = data[i].split(':'); + var ne = parts[0].split(','); + var sw = parts[1].split(','); + var imageUrl = parts[2]; + sw = new google.maps.LatLng(sw[0],sw[1]); + ne = new google.maps.LatLng(ne[0],ne[1]); + + options = $.extend({ + bounds: new google.maps.LatLngBounds(sw,ne) + },options); + var rectangle = new google.maps.Rectangle(options); + + //add image url as metadata entry + metadata.image = { + name:'image',value:imageUrl + }; + + mapObject = { + type:'imageoverlaybounds', + overlay:rectangle, + metadata:metadata + }; + + this.__createOrUpdateImageOverlay(mapObject,imageUrl); + this.__readMapObjectOptionsFromMetadata(mapObject); + + } + if(mapObject !== null){ + //imageoverlay needs special handling + if(key !== 'imageoverlay' ){ + mapObject = { + type:key, + overlay:mapObject, + metadata:metadata + }; + + this.__registerRightClickListener(mapObject); + this.__addMapObject(mapObject); + this.__readMapObjectOptionsFromMetadata(mapObject); + } + + isMapObject = true; + + } + } + }else if(!isMapObject){ + //handle global map parameters + if(this.__mapParameters[match[1]] === undefined){ + this.__mapParameters[match[1]] = {}; + } + this.__mapParameters[match[1]].value = match[2]; + } + } + } + } + }catch(e){ + console.log('An error occurred when parsing data'); + return false; + } + return true; + } + }, + addControlButton:function (text, onclick){ + // Set CSS for the control border + var controlUI = $('<div class="mapeditor-control-element"></div>'); + $(controlUI).click(function(){ + onclick.call(this); + }).appendTo(this.__controlsDiv); + + // Set CSS for the control interior + var controlText = $('<span class="mapeditor-control-text"></span>') + .text(text).appendTo(controlUI); + }, + setup:function(o){ + //extend options + $.extend(this.__options,o); + + //Override tostring methods for wiki code generation + google.maps.LatLng.prototype.toString = function(){ + return this.lat()+','+this.lng(); + }; + + google.maps.Rectangle.prototype.toString = function(){ + var bounds = this.getBounds(); + var ne = bounds.getNorthEast(); + var sw = bounds.getSouthWest(); + return ne+':'+sw; + }; + + google.maps.Marker.prototype.toString = function(){ + var position = this.getPosition(); + return position.lat()+','+position.lng(); + }; + + google.maps.Circle.prototype.toString = function(){ + var center = this.getCenter(); + var radius = this.getRadius(); + return center.lat()+','+center.lng()+':'+radius; + }; + + google.maps.Polygon.prototype.toString = function(){ + var polygons = ''; + this.getPath().forEach(function(e){ + polygons += ':'+e; + }); + return polygons.substr(1); + }; + + google.maps.Polyline.prototype.toString = function(){ + var lines = ''; + this.getPath().forEach(function(e){ + lines += ':'+e; + }); + return lines.substr(1); + }; + + google.maps.GroundOverlay.prototype.toString = function(){ + var bounds = this.getBounds(); + var sw = bounds.getSouthWest(); + var ne = bounds.getNorthEast(); + return [ne,sw,this.getUrl()].join(':'); + }; + + //initialize rest + this.__initMap(); + this.__initControls(); + } +}; + +$(document).ready(function(){ + + + function openDialog(e){ + if(e.metadata !== undefined){ + for(var key in e.metadata){ + var data = e.metadata[key]; + $(this).find('form input[name="'+data.name+'"]').val(data.value); + } + } + var i18nButtons = {}; + i18nButtons[mw.msg('mapeditor-done-button')] = function () { + var form = $(this).find('form'); + form.find('.miniColors').each(function(){ + if($(this).val() === '#'){ + $(this).val(''); + } + }); + mapEditor.__writeMetaDataToMapObject(e,form.serializeArray()); + $(this).dialog("close"); + if(!mapEditor.__readMapObjectOptionsFromMetadata(e)){ + alert(mw.msg('mapeditor-parser-error')); + } + }; + i18nButtons[mw.msg('mapeditor-remove-button')] = function () { + mapEditor.__removeMapObject(e); + $(this).dialog("close"); + }; + + this.dialog({ + modal:true, + buttons:i18nButtons, + open:function(){ + if(e.metadata !== undefined){ + var isText = true; + for(var key in e.metadata){ + var data = e.metadata[key]; + if(data.name === 'link' && data.value.length > 0){ + isText = false; + break; + } + } + //depending on existing metadata, + //show either form with title/text fields or just link field + if(isText){ + $(this).find('input[value="text"]').trigger('click'); + }else{ + $(this).find('input[value="link"]').trigger('click'); + } + }else{ + //default trigger click on text radio button + $(this).find('input[value="text"]').trigger('click'); + } + + + }, + beforeClose:function(){ + //reset the form + var form = $(this).find('form'); + form[0].reset(); + form.find('.opacity-data-holder').text(mw.msg('mapeditor-none-text')); + form.find('.ui-slider').slider('value',-1); + form.find('.miniColors').miniColors('value','#fff').val(''); + } + }); + } + + function openImageOverlayDialog(e,callback){ + + var form = $('#imageoverlay-form'); + + var i18nButtons = {}; + i18nButtons[mw.msg('mapeditor-done-button')] = function(){ + var imageUrl = $(this).find('input[name="image"]').val(); + mapEditor.__createOrUpdateImageOverlay(e,imageUrl); + + var metadata = form.find('form').serializeArray(); + mapEditor.__writeMetaDataToMapObject(e,metadata); + mapEditor.__writeMetaDataToMapObject(e.imageoverlay,metadata); + + form.dialog("close"); + }; + + i18nButtons[mw.msg('mapeditor-remove-button')] = function () { + mapEditor.__removeMapObject(e.imageoverlay); + e.imageoverlay = undefined; + form.dialog("close"); + }; + + form.dialog({ + modal:true, + buttons:i18nButtons, + open:function(){ + //restore data from previous edits + if(e.metadata !== undefined){ + var isText = true; + for(var key in e.metadata){ + var data = e.metadata[key]; + if(data.name === 'link' && data.value.length > 0){ + isText = false; + } + form.find('form input[name="'+data.name+'"]').val(data.value); + } + //depending on existing metadata, + //show either form with title/text fields or just link field + if(isText){ + form.find('input[value="text"]').trigger('click'); + }else{ + form.find('input[value="link"]').trigger('click'); + } + }else{ + //default trigger click on text radio button + form.find('input[value="text"]').trigger('click'); + } + }, + beforeClose:function(){ + mapEditor.__drawingManager.setMap(mapEditor.__map); //re-enable standard drawing manager + if(e.imageoverlay === undefined){ + mapEditor.__removeMapObject(e); + } + + //reset the form + var formElement = form.find('form'); + formElement[0].reset(); + + if(callback !== undefined && typeof(callback) === 'function'){ + callback(); + } + + } + }); + } + + mapEditor.setup({ + onRightClick:function(e){ + if (e.type === 'marker') { + openDialog.call($('#marker-form'),e); + } else if (e.type === 'circle') { + openDialog.call($('#fillable-form'),e); + } else if (e.type === 'polygon') { + openDialog.call($('#polygon-form'),e); + } else if (e.type === 'polyline') { + openDialog.call($('#strokable-form'),e); + } else if (e.type === 'rectangle') { + openDialog.call($('#fillable-form'),e); + } else if (e.type === 'imageoverlaybounds') { + openImageOverlayDialog(e); + } + } + }); + + //add custom controls + if( $('#map-canvas').attr('context') != 'forminput' ) { //for Special:MapEditor + var editorMarkers = { + 'codeStart' : '{{#display_map: ', + 'separator' : '\n|', + 'codeEnd' : '\n}}\n' + }; + mapEditor.addControlButton(mw.msg('mapeditor-export-button'),function(){ + var code = mapEditor.__generateWikiCode( editorMarkers ); + if(navigator.appName == 'Microsoft Internet Explorer'){ + //if IE replace /n with /r/n so it is displayed properly + code = code.split('\n').join('\r\n'); + } + $('#code-output').text(code); + $('#code-output-container').dialog({ + modal:true, + width:'80%', + open:function(){ + $('#code-output').focus(); + } + }); + }); + + mapEditor.addControlButton(mw.msg('mapeditor-import-button'), function(){ + var i18nButtons = {}; + i18nButtons[mw.msg('mapeditor-import-button2')] = function () { + var data = $('#code-input').val(); + if(mapEditor.__importWikiCode(data)){ + $(this).dialog('close'); + }else{ + alert('Could not parse input! make sure the input has the same structure as exported wiki code'); + } + }; + $('#code-input-container').dialog({ + modal:true, + width:'80%', + buttons: i18nButtons + }); + }); + } else { //for form input + var forminputMarkers = { + 'codeStart' : '', + 'separator' : '', + 'codeEnd' : '' + }; + mapEditor.addControlButton(mw.msg('mapeditor-export-button'),function(){ + var code = mapEditor.__generateWikiCode( forminputMarkers ); + if(navigator.appName == 'Microsoft Internet Explorer'){ + //if IE replace /n with /r/n so it is displayed properly + code = code.split('\n').join('\r\n'); + } + $('#map-polygon').text(code); + }); + } + + mapEditor.addControlButton(mw.msg('mapeditor-mapparam-button'), function(){ + var i18nButtons = {}; + i18nButtons[mw.msg('mapeditor-done-button')] = function(){ + var data = $(this).find('form input').not('select').serializeArray(); + for(var x = 0; x < data.length; x++){ + mapEditor.__mapParameters[data[x].name].value = data[x].value; + } + $(this).dialog('close'); + }; + $('#map-parameter-form').dialog({ + modal:true, + width: 500, + buttons:i18nButtons + }); + }); + + mapEditor.addControlButton(mw.msg('mapeditor-clear-button'), function(){ + while(mapEditor.__mapObjects.length > 0){ + var mapObj = mapEditor.__mapObjects.pop(); + mapObj.overlay.setMap(null); + } + for(var param in mapEditor.__mapParameters){ + mapEditor.__mapParameters[param].value = undefined; + } + }); + + mapEditor.addControlButton(mw.msg('mapeditor-imageoverlay-button'), function(){ + var button = $(this); + if(button.data('clicked') === true){ + return; //already clicked, disregard this click + }else{ + button.data('clicked',true); + } + + mapEditor.__drawingManager.setMap(null); //disable current drawing manager + + var drawingManager = new google.maps.drawing.DrawingManager({ + drawingMode:google.maps.drawing.OverlayType.RECTANGLE, + drawingControl:false, + rectangleOptions:mapEditor.__mapObjectOptions.imageoverlay + }); + drawingManager.setMap(mapEditor.__map); + + google.maps.event.addListener(drawingManager, 'overlaycomplete', function (e) { + mapEditor.__addMapObject(e); //add if it doesn't already exist. + + drawingManager.setMap(null); + + openImageOverlayDialog(e,function(){ + //re-enable button + button.data('clicked',false); + }); + + }); + + }); + + + + //init map parameters + var formselect = $('#map-parameter-form select[name="key"]'); + formselect.on('change',function(){ + var option = $(this); + var key = option.val(); + var value = mapEditor.__mapParameters[key].value; + if(value === undefined){ + value = ''; + } + + var parent = option.parent(); + var input = $('<input type="text" name="'+key+'" value="'+value+'"></input>'); + var removeButton = $('<a href="#">[x]</a>'); + var option2 = option.clone(true); + var container = $('<div></div>'); + + option2.find('option[value="'+key+'"]').remove(); + option.attr('disabled',true); + removeButton.on('click',function(){ + var removedKey = $(this).prevAll('select').val(); + var activeSelect = $(this).parent().parent().find('select').not('select[disabled="disabled"]'); + var option = $('<option value="'+removedKey+'">'+removedKey+'</option>'); + activeSelect.children().first().after(option); + $(this).parent().remove(); + mapEditor.__mapParameters[key].value = undefined; + return false; + }); + + parent.append(input); + parent.append(removeButton); + parent.parent().append(container); + container.append(option2); + + input.autocomplete({ + source: mapEditor.__mapParameters[key].values, + minLength: 0, + autoFocus: true + }); + input.autocomplete('search',''); + }); + + for(var parameter in mapEditor.__mapParameters){ + var option = $('<option value="'+parameter+'">'+parameter+'</option>'); + formselect.append(option); + } + + //hide link input initially + $('input[name="link"]').attr('disabled',true).hide().prev().hide(); + + //init text/link switcher + $('input[name="switch"]').on('click',function(){ + if($(this).val() === 'link'){ + $(this).parent().next().find('input[name="title"],input[name="text"]').attr('disabled',true).hide().prev().hide(); + $(this).parent().next().find('input[name="link"]').attr('disabled',false).show().prev().show(); + }else{ + $(this).parent().next().find('input[name="title"],input[name="text"]').attr('disabled',false).show().prev().show(); + $(this).parent().next().find('input[name="link"]').attr('disabled',true).hide().prev().hide(); + } + }); + + //init enter keypress to press done on dialog. + $('.mapeditor-dialog').on('keypress',function(e){ + if(e.keyCode === 13){ + $(this).dialog('option','buttons').Done.call(this); + } + }); + + //init sliders + $('input[name="strokeOpacity"],input[name="fillOpacity"]').each(function(){ + var input = $(this); + var dataHolder = $('<span class="opacity-data-holder">'+mw.msg('mapeditor-none-text')+'</span>'); + dataHolder.css({fontSize: 12}); + var slider = $('<div></div>').slider({ + min: -1, + slide: function(event, ui){ + if(ui.value === -1){ + input.val(''); + dataHolder.text(mw.msg('mapeditor-none-text')); + }else{ + input.val( ui.value/100 ); + dataHolder.text(ui.value+'%'); + } + } + }); + input.before(dataHolder); + input.after(slider); + }); + + //init color pickers + $('input[name="strokeColor"],input[name="fillColor"]').miniColors().miniColors('value','').val(''); +}); |