/* * jQuery UI Slider @VERSION * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Slider * * Depends: * jquery.ui.core.js * jquery.ui.mouse.js * jquery.ui.widget.js */ (function( $, undefined ) { // number of pages in a slider // (how many times can you page up/down to go through the whole range) var numPages = 5; $.widget( "ui.slider", $.ui.mouse, { widgetEventPrefix: "slide", options: { animate: false, distance: 0, max: 100, min: 0, orientation: "horizontal", range: false, step: 1, value: 0, values: null }, _create: function() { var self = this, o = this.options; this._keySliding = false; this._mouseSliding = false; this._animateOff = true; this._handleIndex = null; this._detectOrientation(); this._mouseInit(); this.element .addClass( "ui-slider" + " ui-slider-" + this.orientation + " ui-widget" + " ui-widget-content" + " ui-corner-all" ); if ( o.disabled ) { this.element.addClass( "ui-slider-disabled ui-disabled" ); } this.range = $([]); if ( o.range ) { if ( o.range === true ) { this.range = $( "<div></div>" ); if ( !o.values ) { o.values = [ this._valueMin(), this._valueMin() ]; } if ( o.values.length && o.values.length !== 2 ) { o.values = [ o.values[0], o.values[0] ]; } } else { this.range = $( "<div></div>" ); } this.range .appendTo( this.element ) .addClass( "ui-slider-range" ); if ( o.range === "min" || o.range === "max" ) { this.range.addClass( "ui-slider-range-" + o.range ); } // note: this isn't the most fittingly semantic framework class for this element, // but worked best visually with a variety of themes this.range.addClass( "ui-widget-header" ); } if ( $( ".ui-slider-handle", this.element ).length === 0 ) { $( "<a href='#'></a>" ) .appendTo( this.element ) .addClass( "ui-slider-handle" ); } if ( o.values && o.values.length ) { while ( $(".ui-slider-handle", this.element).length < o.values.length ) { $( "<a href='#'></a>" ) .appendTo( this.element ) .addClass( "ui-slider-handle" ); } } this.handles = $( ".ui-slider-handle", this.element ) .addClass( "ui-state-default" + " ui-corner-all" ); this.handle = this.handles.eq( 0 ); this.handles.add( this.range ).filter( "a" ) .click(function( event ) { event.preventDefault(); }) .hover(function() { if ( !o.disabled ) { $( this ).addClass( "ui-state-hover" ); } }, function() { $( this ).removeClass( "ui-state-hover" ); }) .focus(function() { if ( !o.disabled ) { $( ".ui-slider .ui-state-focus" ).removeClass( "ui-state-focus" ); $( this ).addClass( "ui-state-focus" ); } else { $( this ).blur(); } }) .blur(function() { $( this ).removeClass( "ui-state-focus" ); }); this.handles.each(function( i ) { $( this ).data( "index.ui-slider-handle", i ); }); this.handles .keydown(function( event ) { var ret = true, index = $( this ).data( "index.ui-slider-handle" ), allowed, curVal, newVal, step; if ( self.options.disabled ) { return; } switch ( event.keyCode ) { case $.ui.keyCode.HOME: case $.ui.keyCode.END: case $.ui.keyCode.PAGE_UP: case $.ui.keyCode.PAGE_DOWN: case $.ui.keyCode.UP: case $.ui.keyCode.RIGHT: case $.ui.keyCode.DOWN: case $.ui.keyCode.LEFT: ret = false; if ( !self._keySliding ) { self._keySliding = true; $( this ).addClass( "ui-state-active" ); allowed = self._start( event, index ); if ( allowed === false ) { return; } } break; } step = self.options.step; if ( self.options.values && self.options.values.length ) { curVal = newVal = self.values( index ); } else { curVal = newVal = self.value(); } switch ( event.keyCode ) { case $.ui.keyCode.HOME: newVal = self._valueMin(); break; case $.ui.keyCode.END: newVal = self._valueMax(); break; case $.ui.keyCode.PAGE_UP: newVal = self._trimAlignValue( curVal + ( (self._valueMax() - self._valueMin()) / numPages ) ); break; case $.ui.keyCode.PAGE_DOWN: newVal = self._trimAlignValue( curVal - ( (self._valueMax() - self._valueMin()) / numPages ) ); break; case $.ui.keyCode.UP: case $.ui.keyCode.RIGHT: if ( curVal === self._valueMax() ) { return; } newVal = self._trimAlignValue( curVal + step ); break; case $.ui.keyCode.DOWN: case $.ui.keyCode.LEFT: if ( curVal === self._valueMin() ) { return; } newVal = self._trimAlignValue( curVal - step ); break; } self._slide( event, index, newVal ); return ret; }) .keyup(function( event ) { var index = $( this ).data( "index.ui-slider-handle" ); if ( self._keySliding ) { self._keySliding = false; self._stop( event, index ); self._change( event, index ); $( this ).removeClass( "ui-state-active" ); } }); this._refreshValue(); this._animateOff = false; }, destroy: function() { this.handles.remove(); this.range.remove(); this.element .removeClass( "ui-slider" + " ui-slider-horizontal" + " ui-slider-vertical" + " ui-slider-disabled" + " ui-widget" + " ui-widget-content" + " ui-corner-all" ) .removeData( "slider" ) .unbind( ".slider" ); this._mouseDestroy(); return this; }, _mouseCapture: function( event ) { var o = this.options, position, normValue, distance, closestHandle, self, index, allowed, offset, mouseOverHandle; if ( o.disabled ) { return false; } this.elementSize = { width: this.element.outerWidth(), height: this.element.outerHeight() }; this.elementOffset = this.element.offset(); position = { x: event.pageX, y: event.pageY }; normValue = this._normValueFromMouse( position ); distance = this._valueMax() - this._valueMin() + 1; self = this; this.handles.each(function( i ) { var thisDistance = Math.abs( normValue - self.values(i) ); if ( distance > thisDistance ) { distance = thisDistance; closestHandle = $( this ); index = i; } }); // workaround for bug #3736 (if both handles of a range are at 0, // the first is always used as the one with least distance, // and moving it is obviously prevented by preventing negative ranges) if( o.range === true && this.values(1) === o.min ) { index += 1; closestHandle = $( this.handles[index] ); } allowed = this._start( event, index ); if ( allowed === false ) { return false; } this._mouseSliding = true; self._handleIndex = index; closestHandle .addClass( "ui-state-active" ) .focus(); offset = closestHandle.offset(); mouseOverHandle = !$( event.target ).parents().andSelf().is( ".ui-slider-handle" ); this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { left: event.pageX - offset.left - ( closestHandle.width() / 2 ), top: event.pageY - offset.top - ( closestHandle.height() / 2 ) - ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) - ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) + ( parseInt( closestHandle.css("marginTop"), 10 ) || 0) }; if ( !this.handles.hasClass( "ui-state-hover" ) ) { this._slide( event, index, normValue ); } this._animateOff = true; return true; }, _mouseStart: function( event ) { return true; }, _mouseDrag: function( event ) { var position = { x: event.pageX, y: event.pageY }, normValue = this._normValueFromMouse( position ); this._slide( event, this._handleIndex, normValue ); return false; }, _mouseStop: function( event ) { this.handles.removeClass( "ui-state-active" ); this._mouseSliding = false; this._stop( event, this._handleIndex ); this._change( event, this._handleIndex ); this._handleIndex = null; this._clickOffset = null; this._animateOff = false; return false; }, _detectOrientation: function() { this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; }, _normValueFromMouse: function( position ) { var pixelTotal, pixelMouse, percentMouse, valueTotal, valueMouse; if ( this.orientation === "horizontal" ) { pixelTotal = this.elementSize.width; pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 ); } else { pixelTotal = this.elementSize.height; pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 ); } percentMouse = ( pixelMouse / pixelTotal ); if ( percentMouse > 1 ) { percentMouse = 1; } if ( percentMouse < 0 ) { percentMouse = 0; } if ( this.orientation === "vertical" ) { percentMouse = 1 - percentMouse; } valueTotal = this._valueMax() - this._valueMin(); valueMouse = this._valueMin() + percentMouse * valueTotal; return this._trimAlignValue( valueMouse ); }, _start: function( event, index ) { var uiHash = { handle: this.handles[ index ], value: this.value() }; if ( this.options.values && this.options.values.length ) { uiHash.value = this.values( index ); uiHash.values = this.values(); } return this._trigger( "start", event, uiHash ); }, _slide: function( event, index, newVal ) { var otherVal, newValues, allowed; if ( this.options.values && this.options.values.length ) { otherVal = this.values( index ? 0 : 1 ); if ( ( this.options.values.length === 2 && this.options.range === true ) && ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) ) ) { newVal = otherVal; } if ( newVal !== this.values( index ) ) { newValues = this.values(); newValues[ index ] = newVal; // A slide can be canceled by returning false from the slide callback allowed = this._trigger( "slide", event, { handle: this.handles[ index ], value: newVal, values: newValues } ); otherVal = this.values( index ? 0 : 1 ); if ( allowed !== false ) { this.values( index, newVal, true ); } } } else { if ( newVal !== this.value() ) { // A slide can be canceled by returning false from the slide callback allowed = this._trigger( "slide", event, { handle: this.handles[ index ], value: newVal } ); if ( allowed !== false ) { this.value( newVal ); } } } }, _stop: function( event, index ) { var uiHash = { handle: this.handles[ index ], value: this.value() }; if ( this.options.values && this.options.values.length ) { uiHash.value = this.values( index ); uiHash.values = this.values(); } this._trigger( "stop", event, uiHash ); }, _change: function( event, index ) { if ( !this._keySliding && !this._mouseSliding ) { var uiHash = { handle: this.handles[ index ], value: this.value() }; if ( this.options.values && this.options.values.length ) { uiHash.value = this.values( index ); uiHash.values = this.values(); } this._trigger( "change", event, uiHash ); } }, value: function( newValue ) { if ( arguments.length ) { this.options.value = this._trimAlignValue( newValue ); this._refreshValue(); this._change( null, 0 ); return; } return this._value(); }, values: function( index, newValue ) { var vals, newValues, i; if ( arguments.length > 1 ) { this.options.values[ index ] = this._trimAlignValue( newValue ); this._refreshValue(); this._change( null, index ); return; } if ( arguments.length ) { if ( $.isArray( arguments[ 0 ] ) ) { vals = this.options.values; newValues = arguments[ 0 ]; for ( i = 0; i < vals.length; i += 1 ) { vals[ i ] = this._trimAlignValue( newValues[ i ] ); this._change( null, i ); } this._refreshValue(); } else { if ( this.options.values && this.options.values.length ) { return this._values( index ); } else { return this.value(); } } } else { return this._values(); } }, _setOption: function( key, value ) { var i, valsLength = 0; if ( $.isArray( this.options.values ) ) { valsLength = this.options.values.length; } $.Widget.prototype._setOption.apply( this, arguments ); switch ( key ) { case "disabled": if ( value ) { this.handles.filter( ".ui-state-focus" ).blur(); this.handles.removeClass( "ui-state-hover" ); this.handles.attr( "disabled", "disabled" ); this.element.addClass( "ui-disabled" ); } else { this.handles.removeAttr( "disabled" ); this.element.removeClass( "ui-disabled" ); } break; case "orientation": this._detectOrientation(); this.element .removeClass( "ui-slider-horizontal ui-slider-vertical" ) .addClass( "ui-slider-" + this.orientation ); this._refreshValue(); break; case "value": this._animateOff = true; this._refreshValue(); this._change( null, 0 ); this._animateOff = false; break; case "values": this._animateOff = true; this._refreshValue(); for ( i = 0; i < valsLength; i +=<{ "translations": { "Loading preview…" : "Φόρτωση προεπισκόπησης ...", "Saved" : "Αποθηκεύτηκαν", "Admin" : "Διαχειριστής", "a safe home for all your data" : "μια ασφαλής τοποθεσία για όλα σας τα δεδομένα", "The given name is too long" : "Το όνομα που δόθηκε είναι πολύ μεγάλο", "The given web address is too long" : "Η διεύθυνση ιστοσελίδας που δόθηκε είναι πολύ μεγάλη.", "The given slogan is too long" : "Το ρητό που δόθηκε είναι πολύ μεγάλο", "The given color is invalid" : "Δόθηκε μη έγκυρο χρώμα", "There is no error, the file uploaded with success" : "Δεν υπάρχει σφάλμα, το αρχείο μεταφορτώθηκε με επιτυχία", "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Το μεταφορτωμένο αρχείο υπερβαίνει την οδηγία upload_max_filesize στο php.ini", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Το μεταφορτωμένο αρχείο υπερβαίνει την οδηγία MAX_FILE_SIZE που καθορίστηκε στην φόρμα HTML.", "No file was uploaded" : "Δεν μεταφορτώθηκε κάποιο αρχείο", "Missing a temporary folder" : "Λείπει κάποιος προσωρινός φάκελος", "Failed to write file to disk." : "Αποτυχία εγγραφής αρχείου στο δίσκο.", "A PHP extension stopped the file upload." : "Μία επέκταση PHP διέκοψε τη μεταφόρτωση του αρχείου.", "No file uploaded" : "Δεν έχει μεταφορτωθεί αρχείο", "Unsupported image type" : "Μη υποστηριζόμενος τύπος εικόνας", "You are already using a custom theme" : "Χρησιμοποιείτε ήδη προσαρμοσμένο θέμα", "Theming" : "Προσαρμογή θέματος", "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Η προσαρμογή θέματος καθιστά δυνατή την εύκολη προσαρμογή της εμφάνισης της εμφάνισης της εγκατάστασής σας καθώς και των υποστηριζόμενων πελατών. Αυτή θα είναι ορατή για όλους τους χρήστες.", "Name" : "Όνομα", "Reset to default" : "Επαναφορά στα προεπιλεγμένα", "Web address" : "Διεύθυση ιστοσελίδας", "Web address https://…" : "Διεύθυνση ιστοσελίδας https://...", "Slogan" : "Ρητό", "Color" : "Χρώμα", "Logo" : "Λογότυπο", "Upload new logo" : "Μεταφόρτωση νέου λογοτύπου", "Login image" : "Εικόνα εισόδου", "Upload new login background" : "Μεταφόρτωση νέου παρασκηνίου εισόδου", "Remove background image" : "Αφαίρεση εικόνας παρασκηνίου", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Εγκαταστήστε την επέκταση PHP Imagemagick με υποστήριξη SVG εικόνων, για να γίνει αυτόματη δημιουργία favicon βασισμένο πάνω στο μεταφορτωμένο λογότυπο και χρώμα.", "reset to default" : "επαναφορά στα προεπιλεγμένα", "The uploaded file was only partially uploaded" : "Το μεταφορτωμένο αρχείο μεταφορτώθηκε εν μέρει" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
{ "translations": { "Loading preview…" : "Φόρτωση προεπισκόπησης ...", "Saved" : "Αποθηκεύτηκαν", "Admin" : "Διαχειριστής", "a safe home for all your data" : "μια ασφαλής τοποθεσία για όλα σας τα δεδομένα", "The given name is too long" : "Το όνομα που δόθηκε είναι πολύ μεγάλο", "The given web address is too long" : "Η διεύθυνση ιστοσελίδας που δόθηκε είναι πολύ μεγάλη.", "The given slogan is too long" : "Το ρητό που δόθηκε είναι πολύ μεγάλο", "The given color is invalid" : "Δόθηκε μη έγκυρο χρώμα", "There is no error, the file uploaded with success" : "Δεν υπάρχει σφάλμα, το αρχείο μεταφορτώθηκε με επιτυχία", "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Το μεταφορτωμένο αρχείο υπερβαίνει την οδηγία upload_max_filesize στο php.ini", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Το μεταφορτωμένο αρχείο υπερβαίνει την οδηγία MAX_FILE_SIZE που καθορίστηκε στην φόρμα HTML.", "No file was uploaded" : "Δεν μεταφορτώθηκε κάποιο αρχείο", "Missing a temporary folder" : "Λείπει κάποιος προσωρινός φάκελος", "Failed to write file to disk." : "Αποτυχία εγγραφής αρχείου στο δίσκο.", "A PHP extension stopped the file upload." : "Μία επέκταση PHP διέκοψε τη μεταφόρτωση του αρχείου.", "No file uploaded" : "Δεν έχει μεταφορτωθεί αρχείο", "Unsupported image type" : "Μη υποστηριζόμενος τύπος εικόνας", "You are already using a custom theme" : "Χρησιμοποιείτε ήδη προσαρμοσμένο θέμα", "Theming" : "Προσαρμογή θέματος", "Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Η προσαρμογή θέματος καθιστά δυνατή την εύκολη προσαρμογή της εμφάνισης της εμφάνισης της εγκατάστασής σας καθώς και των υποστηριζόμενων πελατών. Αυτή θα είναι ορατή για όλους τους χρήστες.", "Name" : "Όνομα", "Reset to default" : "Επαναφορά στα προεπιλεγμένα", "Web address" : "Διεύθυση ιστοσελίδας", "Web address https://…" : "Διεύθυνση ιστοσελίδας https://...", "Slogan" : "Ρητό", "Color" : "Χρώμα", "Logo" : "Λογότυπο", "Upload new logo" : "Μεταφόρτωση νέου λογοτύπου", "Login image" : "Εικόνα εισόδου", "Upload new login background" : "Μεταφόρτωση νέου παρασκηνίου εισόδου", "Remove background image" : "Αφαίρεση εικόνας παρασκηνίου", "Install the Imagemagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Εγκαταστήστε την επέκταση PHP Imagemagick με υποστήριξη SVG εικόνων, για να γίνει αυτόματη δημιουργία favicon βασισμένο πάνω στο μεταφορτωμένο λογότυπο και χρώμα.", "reset to default" : "επαναφορά στα προεπιλεγμένα", "The uploaded file was only partially uploaded" : "Το μεταφορτωμένο αρχείο μεταφορτώθηκε εν μέρει" },"pluralForm" :"nplurals=2; plural=(n != 1);" }