![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /var/www/html/libs/absol-acomp/out/ |
Upload File : |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: LocationInput.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: LocationInput.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>import ACore, { $, _ } from "../ACore"; import LocationPicker from "./LocationPicker"; import '../css/locationinput.css'; import { hitElement } from "absol/src/HTML5/EventEmitter"; import { isRealNumber } from "./utils"; import BrowserDetector from "absol/src/Detector/BrowserDetector"; function LocationInput() { this.$text = $('input', this) .on('change', this.eventHandler.textChange); this.$iconCtn = $('.as-location-input-icon-ctn', this) .on('click', this.eventHandler.clickIcon); /*** * @type {{latitude: number, longitude: number}} * @name latLng * @memberOf LocationInput# */ /*** * @type {string} * @name value * @memberOf LocationInput# */ /*** * @type {boolean} * @name readOnly * @memberOf LocationInput# */ } LocationInput.tag = 'LocationInput'.toLowerCase(); LocationInput.render = function () { return _({ class: 'as-location-input', extendEvent: ['change'], child: [ { tag: 'input', attr: { type: 'text' }, class: 'as-location-input-text' }, { class: 'as-location-input-icon-ctn', child: 'span.mdi.mdi-google-maps' } ] }); }; LocationInput.prototype.share = { $modal: null, $picker: null, $holder: null }; LocationInput.prototype._preparePicker = function () { if (this.share.$picker) return; this.share.$picker = _({ tag: LocationPicker.tag }); this.share.$modal = _({ tag: 'modal', class: 'as-location-input-modal', child: { class: 'as-location-input-modal-window', child: this.share.$picker } }); if (BrowserDetector.isMobile) { this.share.$modal.addClass('as-mobile'); } }; /*** * @this LocationInput * @private */ LocationInput.prototype._attachPicker = function () { if (this.share.$holder) { this.share.$holder._releasePicker(); } this._preparePicker(); this.share.$holder = this; this.$iconCtn.off('click', this.eventHandler.clickIcon); document.body.appendChild(this.share.$modal); this.share.$picker.on('action', this.eventHandler.pickerAction); this.share.$picker.$searchInput.value = ''; this.share.$picker.readOnly = this.readOnly; setTimeout(function () { document.addEventListener('click', this.eventHandler.clickOut); }.bind(this), 100); var value = this.latLng; if (value) { value = new google.maps.LatLng(value.latitude, value.longitude); } if (value) this.share.$picker.selectLocation(value, true); else this.share.$picker.selectPlace(null); }; LocationInput.prototype._releasePicker = function () { if (this.share.$holder !== this) return; this.share.$picker.off('action', this.eventHandler.pickerAction); this.$iconCtn.on('click', this.eventHandler.clickIcon); document.removeEventListener('click', this.eventHandler.clickOut) this.share.$modal.remove(); this.share.$holder = null; }; /** * * @type {{}} * @memberOf LocationInput# */ LocationInput.eventHandler = {}; LocationInput.eventHandler.pickerAction = function (event) { if (!this.readOnly && event.action === 'OK' && this.share.$picker.selectedPlace && this.share.$picker.selectedPlace.geometry && this.share.$picker.selectedPlace.geometry.location) { this.$text.value = [this.share.$picker.selectedPlace.geometry.location.lat(), this.share.$picker.selectedPlace.geometry.location.lng()].join(', '); this.emit('change', { type: 'change', originalEvent: event.originalEvent || event, target: this }, this); } this._releasePicker(); }; /*** * @this LocationInput */ LocationInput.eventHandler.clickIcon = function () { this._attachPicker(); }; /*** * @this LocationInput * @param event */ LocationInput.eventHandler.clickOut = function (event) { if (event.target === this.share.$modal) this._releasePicker(); }; LocationInput.eventHandler.textChange = function (event) { this.emit('change', { type: 'change', originalEvent: event.originalEvent || event, target: this }, this); }; LocationInput.property = {}; LocationInput.property.value = { set: function (value) { value = value || null; var lat, lng; if (typeof value === "string") { this.$text.value = value; return; } if (value instanceof Array) { lat = value[0]; lng = value[1]; } else if (value && typeof value === 'object') { if (('latitude' in value) && ('longitude' in value)) { lat = value.latitude; lng = value.longitude; } else if (value instanceof google.maps.LatLng) { lat = value.lat(); lng = value.lng(); } } if (isRealNumber(lat) && isRealNumber(lng)) { this.$text.value = [lat, lng].join(', '); } else { this.$text.value = ''; } }, get: function () { var nums = this.$text.value.split(/\s*,\s*/); var lat = parseFloat(nums[0]); var lng = parseFloat(nums[1]); if (isRealNumber(lat) && isRealNumber(lng)) { lat = Math.max(-90, Math.min(90, lat)); if (lng < 180 && lng > 180) lng = (lng + 180 + 360 * Math.ceil(Math.abs(lng) / 360 + 2)) % 360 - 180; return [lat, lng].join(', '); } else { return ''; } } }; LocationInput.property.latLng = { get: function () { var nums = this.$text.value.split(/\s*,\s*/); var lat = parseFloat(nums[0]); var lng = parseFloat(nums[1]); if (isRealNumber(lat) && isRealNumber(lng)) { lat = Math.max(-90, Math.min(90, lat)); if (lng < 180 && lng > 180) lng = (lng + 180 + 360 * Math.ceil(Math.abs(lng) / 360 + 2)) % 360 - 180; return { latitude: lat, longitude: lng }; } else { return null; } } }; LocationInput.property.readOnly = { set: function (value) { if (value) { this.addClass('as-read-only'); } else { this.removeClass('as-read-only'); } this.$text.readOnly = !!value; }, get: function () { return this.hasClass('as-read-only'); } }; LocationInput.property.disabled = { set: function (value) { if (value) { this.addClass('as-disabled'); } else { this.removeClass('as-disabled'); } this.$text.disabled = !!value; }, get: function () { return this.hasClass('as-disabled'); } }; ACore.install(LocationInput); export default LocationInput;</code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="CalendarInput.html">CalendarInput</a></li><li><a href="CandyBoxButton.html">CandyBoxButton</a></li><li><a href="ChromeCalendar.html">ChromeCalendar</a></li><li><a href="CircleSectionLabel.html">CircleSectionLabel</a></li><li><a href="Cluster.html">Cluster</a></li><li><a href="ClusterIconInfo.html">ClusterIconInfo</a></li><li><a href="ClusterIconStyle.html">ClusterIconStyle</a></li><li><a href="ContextCaptor.html">ContextCaptor</a></li><li><a href="DateInput.html">DateInput</a></li><li><a href="DateInput2.html">DateInput2</a></li><li><a href="DropPanel.html">DropPanel</a></li><li><a href="DropPanelStack.html">DropPanelStack</a></li><li><a href="FlexiconButton.html">FlexiconButton</a></li><li><a href="MarkerClusterer.html">MarkerClusterer</a></li><li><a href="MarkerClustererOptions.html">MarkerClustererOptions</a></li><li><a href="SearchTextInput.html">SearchTextInput</a></li><li><a href="Sprite.html">Sprite</a></li><li><a href="Time24Input.html">Time24Input</a></li></ul><h3>Events</h3><ul><li><a href="MarkerClusterer.html#event:click">click</a></li><li><a href="MarkerClusterer.html#event:clusteringbegin">clusteringbegin</a></li><li><a href="MarkerClusterer.html#event:clusteringend">clusteringend</a></li><li><a href="MarkerClusterer.html#event:mouseout">mouseout</a></li><li><a href="MarkerClusterer.html#event:mouseover">mouseover</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$windowTitleText">$windowTitleText</a></li><li><a href="global.html#AddIcon">AddIcon</a></li><li><a href="global.html#calcMinHMTime">calcMinHMTime</a></li><li><a href="global.html#cleanMenuItemProperty">cleanMenuItemProperty</a></li><li><a href="global.html#preventNotNumberInput">preventNotNumberInput</a></li><li><a href="global.html#vScrollIntoView">vScrollIntoView</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.0</a> on Wed Jan 04 2023 18:18:58 GMT+0700 (Indochina Time) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>