Compare commits
3 commits
Author | SHA1 | Date | |
---|---|---|---|
bdb416ac11 | |||
6e966dee6c | |||
|
ae2b1854aa |
20 changed files with 2482 additions and 452 deletions
|
@ -5,7 +5,7 @@
|
||||||
<meta http-equiv="Keywords" content="Lists"/>
|
<meta http-equiv="Keywords" content="Lists"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||||
<link rel="shortcut icon" type="image/png" href="../../../source/UI/themes/oxlight/png/icon16.png"/>
|
<link rel="shortcut icon" type="image/png" href="../../../source/UI/themes/oxlight/png/icon16.png"/>
|
||||||
<script type="text/javascript" src="../../../min/Ox.js"></script>
|
<script type="text/javascript" src="../../../dev/Ox.js"></script>
|
||||||
<script type="text/javascript" src="js/example.js"></script>
|
<script type="text/javascript" src="js/example.js"></script>
|
||||||
<script>window.addEventListener('message', function(e) { e.origin == window.location.origin && eval('(' + e.data + ')'); });</script>
|
<script>window.addEventListener('message', function(e) { e.origin == window.location.origin && eval('(' + e.data + ')'); });</script>
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -7,7 +7,7 @@ on a world map.
|
||||||
|
|
||||||
Ox.load(['UI', 'Geo'], function() {
|
Ox.load(['UI', 'Geo'], function() {
|
||||||
|
|
||||||
var $map = Ox.Map({
|
var $map = Ox.LeafletMap({
|
||||||
keys: ['region'],
|
keys: ['region'],
|
||||||
markerColor: function(place) {
|
markerColor: function(place) {
|
||||||
return Ox.getGeoColor(place.region);
|
return Ox.getGeoColor(place.region);
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPath() {
|
function getPath() {
|
||||||
var index, regexp = /Ox\.js(\?[\d\.]+|)$/,
|
var index, regexp = /Ox\.js(\?\d+|)$/,
|
||||||
scripts = document.getElementsByTagName('script'), src;
|
scripts = document.getElementsByTagName('script'), src;
|
||||||
for (index = scripts.length - 1; index >= 0; index--) {
|
for (index = scripts.length - 1; index >= 0; index--) {
|
||||||
src = scripts[index].src;
|
src = scripts[index].src;
|
||||||
|
|
|
@ -63,8 +63,7 @@ Ox.LOCALE_NAMES = {
|
||||||
'el': 'Ελληνικά',
|
'el': 'Ελληνικά',
|
||||||
'en': 'English',
|
'en': 'English',
|
||||||
'fr': 'Français',
|
'fr': 'Français',
|
||||||
'hi': 'हिन्दी',
|
'hi': 'हिन्दी'
|
||||||
'tr': 'Türkçe'
|
|
||||||
};
|
};
|
||||||
//@ Ox.LOCALES <o> Locales per module
|
//@ Ox.LOCALES <o> Locales per module
|
||||||
Ox.LOCALES = {};
|
Ox.LOCALES = {};
|
||||||
|
|
|
@ -1,89 +0,0 @@
|
||||||
{
|
|
||||||
"%": "%",
|
|
||||||
",": ",",
|
|
||||||
".": ".",
|
|
||||||
"%A, %B %e, %Y": "%A, %B %e, %Y",
|
|
||||||
"%a, %b %e, %Y": "%a, %b %e, %Y",
|
|
||||||
"AD": "MS",
|
|
||||||
"AM": "",
|
|
||||||
"Apr": "",
|
|
||||||
"April": "Nisan",
|
|
||||||
"Aug": "",
|
|
||||||
"August": "Ağustos",
|
|
||||||
"BC": "MÖ",
|
|
||||||
"%B %e, %Y": "",
|
|
||||||
"%b %e, %Y": "",
|
|
||||||
"d": "g",
|
|
||||||
"day": "gün",
|
|
||||||
"days": "gün",
|
|
||||||
"days{2}": "gün",
|
|
||||||
"Dec": "",
|
|
||||||
"December": "Aralık",
|
|
||||||
"Fall": "Düşmek",
|
|
||||||
"Feb": "",
|
|
||||||
"February": "Şubat",
|
|
||||||
"Fri": "",
|
|
||||||
"Friday": "Cuma",
|
|
||||||
"h": "s",
|
|
||||||
"hour": "saat",
|
|
||||||
"hours": "saat",
|
|
||||||
"hours{2}": "saat",
|
|
||||||
"%I:%M %p": "",
|
|
||||||
"%I:%M:%S %p": "",
|
|
||||||
"Jan": "",
|
|
||||||
"January": "Ocak",
|
|
||||||
"Jul": "",
|
|
||||||
"July": "Temmuz",
|
|
||||||
"Jun": "",
|
|
||||||
"June": "Haziran",
|
|
||||||
"m": "d",
|
|
||||||
"Mar": "",
|
|
||||||
"March": "Mart",
|
|
||||||
"May": "Mayıs",
|
|
||||||
"%m/%d/%Y": "",
|
|
||||||
"%m/%d/%y": "",
|
|
||||||
"minute": "dakika",
|
|
||||||
"minutes": "dakika",
|
|
||||||
"minutes{2}": "dakika",
|
|
||||||
"Mon": "",
|
|
||||||
"Monday": "Pazartesi",
|
|
||||||
"nd": ".",
|
|
||||||
"nd{22}": ".",
|
|
||||||
"no": "hayır",
|
|
||||||
"Nov": "",
|
|
||||||
"November": "Kasım",
|
|
||||||
"Oct": "",
|
|
||||||
"October": "Ekim",
|
|
||||||
"PM": "",
|
|
||||||
"rd": ".",
|
|
||||||
"rd{23}": ".",
|
|
||||||
"s": "s",
|
|
||||||
"Sat": "",
|
|
||||||
"Saturday": "Cumartesi",
|
|
||||||
"second": "saniye",
|
|
||||||
"seconds": "saniye",
|
|
||||||
"seconds{2}": "saniye",
|
|
||||||
"Sep": "",
|
|
||||||
"September": "Eylül",
|
|
||||||
"Spring": "Bahar",
|
|
||||||
"st": ".",
|
|
||||||
"st{21}": ".",
|
|
||||||
"Summer": "Yaz",
|
|
||||||
"Sun": "",
|
|
||||||
"Sunday": "Pazar",
|
|
||||||
"th": ".",
|
|
||||||
"th{11}": ".",
|
|
||||||
"th{12}": ".",
|
|
||||||
"th{13}": ".",
|
|
||||||
"Thu": "",
|
|
||||||
"Thursday": "Perşembe",
|
|
||||||
"Tue": "",
|
|
||||||
"Tuesday": "Salı",
|
|
||||||
"Wed": "",
|
|
||||||
"Wednesday": "Çarşamba",
|
|
||||||
"Winter": "kış",
|
|
||||||
"y": "yy",
|
|
||||||
"year": "yıl",
|
|
||||||
"years": "yıl",
|
|
||||||
"years{2}": "yıl"
|
|
||||||
}
|
|
|
@ -2458,7 +2458,6 @@ Video
|
||||||
font-size: 8px;
|
font-size: 8px;
|
||||||
line-height: 10px;
|
line-height: 10px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
text-wrap: balance;
|
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
text-shadow: rgba(0, 0, 0, 1) 1px 1px 1px;
|
text-shadow: rgba(0, 0, 0, 1) 1px 1px 1px;
|
||||||
color: rgb(255, 255, 255);
|
color: rgb(255, 255, 255);
|
||||||
|
|
|
@ -1188,10 +1188,8 @@ Scrollbars
|
||||||
background: -webkit-linear-gradient(left, $buttonActiveGradient);
|
background: -webkit-linear-gradient(left, $buttonActiveGradient);
|
||||||
}
|
}
|
||||||
|
|
||||||
@supports not selector(::-webkit-scrollbar) {
|
body.$themeClass {
|
||||||
body.$themeClass {
|
scrollbar-color: $bodyBorder $bodyBackground;
|
||||||
scrollbar-color: $bodyBorder $bodyBackground;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -710,7 +710,6 @@
|
||||||
Ox.Focus.removeElement(this.oxid);
|
Ox.Focus.removeElement(this.oxid);
|
||||||
this.self(_).unbindKeyboard();
|
this.self(_).unbindKeyboard();
|
||||||
this.$tooltip && this.$tooltip.remove();
|
this.$tooltip && this.$tooltip.remove();
|
||||||
jQuery.cleanData(this.$element);
|
|
||||||
delete Ox.$elements[this.oxid];
|
delete Ox.$elements[this.oxid];
|
||||||
// If setElement($element) was used, delete $element too
|
// If setElement($element) was used, delete $element too
|
||||||
delete Ox.$elements[this.$element.oxid];
|
delete Ox.$elements[this.$element.oxid];
|
||||||
|
@ -739,7 +738,6 @@
|
||||||
this.findElements().forEach(function($element) {
|
this.findElements().forEach(function($element) {
|
||||||
$element.removeElement(false);
|
$element.removeElement(false);
|
||||||
});
|
});
|
||||||
jQuery.cleanData(this.$element);
|
|
||||||
this.$element.replaceWith($element);
|
this.$element.replaceWith($element);
|
||||||
if ($element.$element) { // $element is Ox.Element
|
if ($element.$element) { // $element is Ox.Element
|
||||||
this.$element = $element.$element;
|
this.$element = $element.$element;
|
||||||
|
|
|
@ -438,7 +438,7 @@
|
||||||
Ox.forEach(
|
Ox.forEach(
|
||||||
Ox.makeObject(Ox.slice(arguments)),
|
Ox.makeObject(Ox.slice(arguments)),
|
||||||
function(data, event) {
|
function(data, event) {
|
||||||
target && target.postMessage(JSON.stringify({
|
target.postMessage(JSON.stringify({
|
||||||
data: data,
|
data: data,
|
||||||
event: event,
|
event: event,
|
||||||
target: isParent ? Ox.oxid : null
|
target: isParent ? Ox.oxid : null
|
||||||
|
|
|
@ -31,29 +31,18 @@ Ox.ButtonGroup = function(options, self) {
|
||||||
.options(options || {})
|
.options(options || {})
|
||||||
.update({
|
.update({
|
||||||
value: function() {
|
value: function() {
|
||||||
var positions = [],
|
// fixme: this doesn't work in cases where
|
||||||
values = Ox.makeArray(self.options.value);
|
// multiple buttons can be selected
|
||||||
|
var position = Ox.getIndexById(
|
||||||
Ox.forEach(values, function(value) {
|
self.options.buttons, self.options.value
|
||||||
var position = Ox.getIndexById(
|
);
|
||||||
self.options.buttons, value
|
if (position > -1) {
|
||||||
);
|
self.$buttons[position].trigger('click');
|
||||||
|
} else if (self.options.min == 0) {
|
||||||
if (position > -1) {
|
self.$buttons.forEach(function($button, i) {
|
||||||
positions.push(position);
|
$button.options('value') && $button.trigger('click');
|
||||||
}
|
});
|
||||||
});
|
|
||||||
|
|
||||||
if (positions.length < self.options.min) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ox.forEach(self.$buttons, function(button, pos) {
|
|
||||||
var enabled = positions.indexOf(pos) > -1;
|
|
||||||
if (enabled !== button.value()) {
|
|
||||||
button.trigger('click');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.addClass(
|
.addClass(
|
||||||
|
|
|
@ -15,18 +15,11 @@ Ox.FormPanel = function(options, self) {
|
||||||
var that = Ox.Element({}, self)
|
var that = Ox.Element({}, self)
|
||||||
.defaults({
|
.defaults({
|
||||||
form: [],
|
form: [],
|
||||||
listSize: 256,
|
listSize: 256
|
||||||
section: null
|
|
||||||
})
|
})
|
||||||
.options(options || {})
|
.options(options || {});
|
||||||
.update({
|
|
||||||
section: setSection
|
|
||||||
});
|
|
||||||
|
|
||||||
if (self.options.section === null) {
|
self.section = 0;
|
||||||
self.options.section = self.options.form[0].id;
|
|
||||||
}
|
|
||||||
self.section = Ox.getIndexById(self.options.form, self.options.section);
|
|
||||||
self.sectionTitle = self.options.form[self.section].title;
|
self.sectionTitle = self.options.form[self.section].title;
|
||||||
self.$list = Ox.TableList({
|
self.$list = Ox.TableList({
|
||||||
columns: [
|
columns: [
|
||||||
|
@ -69,7 +62,7 @@ Ox.FormPanel = function(options, self) {
|
||||||
}),
|
}),
|
||||||
max: 1,
|
max: 1,
|
||||||
min: 1,
|
min: 1,
|
||||||
selected: [self.options.section],
|
selected: [self.options.form[0].id],
|
||||||
sort: [{key: 'id', operator: '+'}],
|
sort: [{key: 'id', operator: '+'}],
|
||||||
unique: 'id',
|
unique: 'id',
|
||||||
width: self.options.listSize
|
width: self.options.listSize
|
||||||
|
@ -77,11 +70,7 @@ Ox.FormPanel = function(options, self) {
|
||||||
select: function(data) {
|
select: function(data) {
|
||||||
self.$sections[self.section].hide();
|
self.$sections[self.section].hide();
|
||||||
self.section = Ox.getIndexById(self.options.form, data.ids[0]);
|
self.section = Ox.getIndexById(self.options.form, data.ids[0]);
|
||||||
if (self.section == -1) {
|
|
||||||
self.section = 0
|
|
||||||
}
|
|
||||||
self.$sections[self.section].show();
|
self.$sections[self.section].show();
|
||||||
self.options.section = self.options.form[self.section].id;
|
|
||||||
that.triggerEvent('select', {section: data.ids[0]});
|
that.triggerEvent('select', {section: data.ids[0]});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -141,18 +130,7 @@ Ox.FormPanel = function(options, self) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
self.$sections[self.section].show();
|
self.$sections[0].show();
|
||||||
|
|
||||||
function setSection() {
|
|
||||||
var id = self.options.section,
|
|
||||||
section = Ox.getIndexById(self.options.form, id);
|
|
||||||
if (section > -1 && self.section != section) {
|
|
||||||
self.$sections[self.section].hide();
|
|
||||||
self.section = section;
|
|
||||||
self.$list.options('selected', [id]);
|
|
||||||
self.$sections[self.section].show();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
that.setElement(Ox.SplitPanel({
|
that.setElement(Ox.SplitPanel({
|
||||||
elements: [
|
elements: [
|
||||||
|
@ -213,24 +191,13 @@ Ox.FormPanel = function(options, self) {
|
||||||
values <f> values
|
values <f> values
|
||||||
@*/
|
@*/
|
||||||
that.values = function() {
|
that.values = function() {
|
||||||
if (arguments.length === 0) {
|
var values = {};
|
||||||
var values = {};
|
self.options.form.forEach(function(section, i) {
|
||||||
self.options.form.forEach(function(section, i) {
|
values[section.id] = self.$forms[i].values();
|
||||||
values[section.id] = self.$forms[i].values();
|
});
|
||||||
});
|
return values;
|
||||||
return values;
|
|
||||||
} else {
|
|
||||||
var sections = arguments[0];
|
|
||||||
|
|
||||||
self.options.form.forEach(function(form, i) {
|
|
||||||
if (form.id in sections) {
|
|
||||||
self.$forms[i].values(sections[form.id]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
return that;
|
return that;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -624,7 +624,7 @@ Ox.List = function(options, self) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPageByPosition(pos) {
|
function getPageByPosition(pos) {
|
||||||
return Math.floor(pos / self.pageLength);
|
return Math.floor(pos / self.options.pageLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPageByScrollPosition(pos) {
|
function getPageByScrollPosition(pos) {
|
||||||
|
|
1627
source/UI/js/Map/LeafletMap.js
Normal file
1627
source/UI/js/Map/LeafletMap.js
Normal file
File diff suppressed because it is too large
Load diff
335
source/UI/js/Map/LeafletMapMarker.js
Normal file
335
source/UI/js/Map/LeafletMapMarker.js
Normal file
|
@ -0,0 +1,335 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*@
|
||||||
|
Ox.MapMarker <f> MapMarker
|
||||||
|
(options) -> <o> MapMarker object
|
||||||
|
options <o> Options object
|
||||||
|
color <a|[255, 0, 0]> marker color
|
||||||
|
map <o|null> map
|
||||||
|
place <o|null> place
|
||||||
|
size <n|16> size
|
||||||
|
@*/
|
||||||
|
|
||||||
|
Ox.LeafletMapMarker = function(options) {
|
||||||
|
|
||||||
|
options = Ox.extend({
|
||||||
|
map: null,
|
||||||
|
place: null
|
||||||
|
}, options);
|
||||||
|
|
||||||
|
var that = this,
|
||||||
|
areaSize = {
|
||||||
|
100: 10, // 10 x 10 m
|
||||||
|
10000: 12, // 100 x 100 m
|
||||||
|
1000000: 14, // 1 x 1 km
|
||||||
|
100000000: 16, // 10 x 10 km
|
||||||
|
10000000000: 18, // 100 x 100 km
|
||||||
|
1000000000000: 20, // 1,000 x 1,000 km
|
||||||
|
100000000000000: 22 // 10,000 x 10,000 km
|
||||||
|
},
|
||||||
|
themeData = Ox.Theme.getThemeData(),
|
||||||
|
typeColor = {};
|
||||||
|
|
||||||
|
[
|
||||||
|
'country', 'region', 'city', 'borough',
|
||||||
|
'street', 'building', 'feature'
|
||||||
|
].forEach(function(type) {
|
||||||
|
typeColor[type] = themeData[
|
||||||
|
'mapPlace' + Ox.toTitleCase(type) + 'Color'
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
|
Ox.forEach(options, function(val, key) {
|
||||||
|
that[key] = val;
|
||||||
|
});
|
||||||
|
console.log('place', options.place);
|
||||||
|
that.marker = new L.Marker([options.place.center.lat, options.place.center.lng], {
|
||||||
|
// raiseOnDrag: false,
|
||||||
|
// shape: {coords: [8, 8, 8], type: 'circle'}
|
||||||
|
//title: that.place.name,
|
||||||
|
//zIndex: 1000
|
||||||
|
}).addTo(options.map.map);
|
||||||
|
|
||||||
|
// setOptions();
|
||||||
|
|
||||||
|
function click() {
|
||||||
|
var key = that.map.getKey(),
|
||||||
|
place, bounds, southWest, northEast;
|
||||||
|
if (!that.place.selected) {
|
||||||
|
if (
|
||||||
|
that.map.options('editable')
|
||||||
|
&& (key == 'meta' || key == 'shift')
|
||||||
|
) {
|
||||||
|
place = that.map.getSelectedPlace();
|
||||||
|
}
|
||||||
|
if (place) {
|
||||||
|
bounds = new L.LatLngBounds(
|
||||||
|
new L.LatLng(place.south, place.west),
|
||||||
|
new L.LatLng(place.north, place.east)
|
||||||
|
);
|
||||||
|
bounds = bounds.extend(that.place.bounds);
|
||||||
|
southWest = bounds.getSouthWest();
|
||||||
|
northEast = bounds.getNorthEast();
|
||||||
|
that.map.newPlace(new Ox.LeafletMapPlace({
|
||||||
|
// fixme: duplicated, see Ox.Map.js
|
||||||
|
alternativeNames: [],
|
||||||
|
countryCode: '',
|
||||||
|
editable: true,
|
||||||
|
geoname: '',
|
||||||
|
id: '_' + Ox.encodeBase32(Ox.uid()), // fixme: stupid
|
||||||
|
map: that.map,
|
||||||
|
name: '',
|
||||||
|
type: 'feature',
|
||||||
|
south: southWest.lat,
|
||||||
|
west: southWest.lng,
|
||||||
|
north: northEast.lat,
|
||||||
|
east: northEast.lng
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
console.log('place', that.place);
|
||||||
|
that.map.options({selected: that.place.id});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (key == 'meta') {
|
||||||
|
that.map.options({selected: null});
|
||||||
|
} else {
|
||||||
|
that.map.panToPlace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function dblclick() {
|
||||||
|
that.place.selected && that.map.zoomToPlace();
|
||||||
|
}
|
||||||
|
|
||||||
|
function dragstart(e) {
|
||||||
|
Ox.$body.addClass('OxDragging');
|
||||||
|
}
|
||||||
|
|
||||||
|
function drag(e) {
|
||||||
|
var northSouth = (that.place.north - that.place.south) / 2,
|
||||||
|
lat = Ox.limit(
|
||||||
|
e.latLng.lat(),
|
||||||
|
Ox.MIN_LATITUDE + northSouth,
|
||||||
|
Ox.MAX_LATITUDE - northSouth
|
||||||
|
),
|
||||||
|
lng = e.latLng.lng(),
|
||||||
|
span = Math.min(
|
||||||
|
that.place.sizeEastWest * Ox.getDegreesPerMeter(lat) / 2, 179.99999999
|
||||||
|
),
|
||||||
|
degreesPerMeter = Ox.getDegreesPerMeter(lat);
|
||||||
|
that.place.south += lat - that.place.lat;
|
||||||
|
that.place.north += lat - that.place.lat;
|
||||||
|
that.place.west = lng - span;
|
||||||
|
that.place.east = lng + span;
|
||||||
|
if (that.place.west < -180) {
|
||||||
|
that.place.west += 360;
|
||||||
|
} else if (that.place.east > 180) {
|
||||||
|
that.place.east -= 360;
|
||||||
|
}
|
||||||
|
Ox.Log('Map', 'west', that.place.west, 'east', that.place.east, 'span', span);
|
||||||
|
that.place.update();
|
||||||
|
that.marker.setOptions({
|
||||||
|
position: that.place.center
|
||||||
|
});
|
||||||
|
that.place.rectangle.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
function dragend(e) {
|
||||||
|
Ox.$body.removeClass('OxDragging');
|
||||||
|
that.map.triggerEvent('changeplaceend', that.place);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMarkerImage(options, callback) {
|
||||||
|
// fixme: unused
|
||||||
|
options = Ox.extend({
|
||||||
|
background: [255, 0, 0],
|
||||||
|
editing: false,
|
||||||
|
result: false,
|
||||||
|
selected: false,
|
||||||
|
size: 16
|
||||||
|
}, options);
|
||||||
|
var background = options.result ? [255, 255, 0] : [255, 0, 0],
|
||||||
|
border = options.editing ? [128, 128, 255] :
|
||||||
|
options.selected ? [255, 255, 255] : [0, 0, 0],
|
||||||
|
c = Ox.canvas(options.size, options.size),
|
||||||
|
image,
|
||||||
|
r = options.size / 2;
|
||||||
|
if (Ox.isArray(background)) {
|
||||||
|
c.context.fillStyle = 'rgba(' + background.join(', ') + ', 0.5)';
|
||||||
|
c.context.arc(r, r, r - 2, 0, 360);
|
||||||
|
c.context.fill();
|
||||||
|
renderImage();
|
||||||
|
} else {
|
||||||
|
image = new Image();
|
||||||
|
image.onload = renderImage;
|
||||||
|
image.src = background;
|
||||||
|
}
|
||||||
|
function renderImage() {
|
||||||
|
//var i;
|
||||||
|
if (Ox.isString(background)) {
|
||||||
|
c.context.drawImage(image, 1, 1, options.size - 2, options.size - 2);
|
||||||
|
/*
|
||||||
|
c.imageData = c.context.getImageData(0, 0, options.size, options.size);
|
||||||
|
c.data = c.imageData.data;
|
||||||
|
for (i = 3; i < c.data.length; i += 1) {
|
||||||
|
c.data[i] = Math.round(c.data[i] * 0.5);
|
||||||
|
}
|
||||||
|
c.context.putImageData(c.imageData, 0, 0);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
c.context.beginPath();
|
||||||
|
c.context.lineWidth = 2;
|
||||||
|
c.context.strokeStyle = 'rgb(' + border.join(', ') + ')';
|
||||||
|
c.context.arc(r, r, r - 1, 0, 360);
|
||||||
|
c.context.stroke();
|
||||||
|
callback(new google.maps.MarkerImage(
|
||||||
|
c.canvas.toDataURL(),
|
||||||
|
new google.maps.Size(options.size, options.size),
|
||||||
|
new google.maps.Point(0, 0),
|
||||||
|
new google.maps.Point(r, r)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function mouseover(e) {
|
||||||
|
var offset = that.map.offset(),
|
||||||
|
xy = that.map.overlayView.getProjection()
|
||||||
|
.fromLatLngToContainerPixel(e.latLng);
|
||||||
|
that.tooltip.show(
|
||||||
|
offset.left + Math.round(xy.x) - 4,
|
||||||
|
offset.top + Math.round(xy.y) + 20
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function mouseout() {
|
||||||
|
that.tooltip.hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
function setOptions() {
|
||||||
|
// workaround to prevent marker from appearing twice
|
||||||
|
// after setting draggable from true to false (google maps bug)
|
||||||
|
// var fix = that.marker.getDraggable() && !that.place.editing,
|
||||||
|
// color = that.map.options('markerColor'),
|
||||||
|
// size = that.map.options('markerSize');
|
||||||
|
var fix = false,
|
||||||
|
color = that.map.options('markerColor'),
|
||||||
|
size = that.map.options('markerSize');
|
||||||
|
//Ox.Log('Map', 'setOptions, that.map: ', that.map)
|
||||||
|
if (color == 'auto') {
|
||||||
|
that.color = typeColor[that.place.type] || typeColor['mapPlaceFeatureColor'];
|
||||||
|
} else if (Ox.isArray(color)) {
|
||||||
|
that.color = color;
|
||||||
|
} else {
|
||||||
|
that.color = color(that.place);
|
||||||
|
}
|
||||||
|
if (size == 'auto') {
|
||||||
|
that.size = 8;
|
||||||
|
Ox.forEach(areaSize, function(size, area) {
|
||||||
|
if (that.place.area >= area) {
|
||||||
|
that.size = size;
|
||||||
|
} else {
|
||||||
|
return false; // break
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (Ox.isNumber(size)) {
|
||||||
|
that.size = size;
|
||||||
|
} else {
|
||||||
|
that.size = size(that.place);
|
||||||
|
}
|
||||||
|
// that.marker.setOptions({
|
||||||
|
// // fixme: cursor remains pointer
|
||||||
|
// cursor: that.place.editing ? 'move' : 'pointer',
|
||||||
|
// draggable: that.place.editing,
|
||||||
|
// // icon: Ox.MapMarkerImage({
|
||||||
|
// // color: that.color,
|
||||||
|
// // mode: that.place.editing ? 'editing' :
|
||||||
|
// // that.place.selected ? 'selected' : 'normal',
|
||||||
|
// // size: that.size,
|
||||||
|
// // type: that.place.id[0] == '_' ? 'result' : 'place'
|
||||||
|
// // }),
|
||||||
|
// position: that.place.center
|
||||||
|
// });
|
||||||
|
if (fix) {
|
||||||
|
that.marker.setVisible(false);
|
||||||
|
setTimeout(function() {
|
||||||
|
that.marker.setVisible(true);
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
setTooltip();
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTooltip() {
|
||||||
|
that.tooltip && that.tooltip.remove();
|
||||||
|
that.tooltip = Ox.Tooltip({
|
||||||
|
title: '<img src="'
|
||||||
|
+ Ox.getFlagByGeoname(that.place.geoname, 16)
|
||||||
|
+ '" style="float: left; width: 16px; height: 16px; margin: 1px 0 1px -1px; border-radius: 4px"/>'
|
||||||
|
+ '<div style="float: left; margin: 4px -1px 0 4px; font-size: 9px;">'
|
||||||
|
+ that.map.options('markerTooltip')(that.place) + '</div>'
|
||||||
|
})
|
||||||
|
.addClass('OxMapMarkerTooltip');
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@
|
||||||
|
add <f> add to map
|
||||||
|
() -> <f> add to map, returns MapMarker
|
||||||
|
@*/
|
||||||
|
that.add = function() {
|
||||||
|
that.marker.addTo(that.map.map);
|
||||||
|
that.marker.on('click', click);
|
||||||
|
that.marker.on('dblclick', dblclick);
|
||||||
|
// that.marker.on('mouseover', mouseover);
|
||||||
|
// that.marker.on('mouseout', mouseout);
|
||||||
|
// google.maps.event.addListener(that.marker, 'click', click);
|
||||||
|
// google.maps.event.addListener(that.marker, 'dblclick', dblclick);
|
||||||
|
// google.maps.event.addListener(that.marker, 'mouseover', mouseover);
|
||||||
|
// google.maps.event.addListener(that.marker, 'mouseout', mouseout);
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
edit <f> edit marker
|
||||||
|
() -> <f> edit marker, returns MapMarker
|
||||||
|
@*/
|
||||||
|
that.edit = function() {
|
||||||
|
setOptions();
|
||||||
|
google.maps.event.addListener(that.marker, 'dragstart', dragstart);
|
||||||
|
google.maps.event.addListener(that.marker, 'drag', drag);
|
||||||
|
google.maps.event.addListener(that.marker, 'dragend', dragend);
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
remove <f> remove marker
|
||||||
|
() -> <f> remove marker from map, returns MapMarker
|
||||||
|
@*/
|
||||||
|
that.remove = function() {
|
||||||
|
that.marker.setMap(null);
|
||||||
|
google.maps.event.clearListeners(that.marker);
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
submit <f> submit marker
|
||||||
|
() -> <f> clear edit listeners, returns MapMarker
|
||||||
|
@*/
|
||||||
|
that.submit = function() {
|
||||||
|
google.maps.event.clearListeners(that.marker, 'dragstart');
|
||||||
|
google.maps.event.clearListeners(that.marker, 'drag');
|
||||||
|
google.maps.event.clearListeners(that.marker, 'dragend');
|
||||||
|
return that;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@
|
||||||
|
update <f> update marker
|
||||||
|
() -> <f> update marker, returns MapMarker
|
||||||
|
@*/
|
||||||
|
that.update = function() {
|
||||||
|
setOptions();
|
||||||
|
return that;
|
||||||
|
}
|
||||||
|
|
||||||
|
return that;
|
||||||
|
|
||||||
|
};
|
230
source/UI/js/Map/LeafletMapPlace.js
Normal file
230
source/UI/js/Map/LeafletMapPlace.js
Normal file
|
@ -0,0 +1,230 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*@
|
||||||
|
Ox.MapPlace <f> MapPlace Object
|
||||||
|
(options) -> <o> MapPlace Object
|
||||||
|
options <o> Options object
|
||||||
|
east <n|0>
|
||||||
|
editing <b|false>
|
||||||
|
geoname <s|''>
|
||||||
|
map <o|null>
|
||||||
|
markerColor <a|[255> 0> 0]>
|
||||||
|
markerSize <n|16>
|
||||||
|
name <s|''>
|
||||||
|
north <n|0>
|
||||||
|
selected <b|false>
|
||||||
|
south <n|0>
|
||||||
|
type <s|''>
|
||||||
|
visible <b|false>
|
||||||
|
west <n|0>
|
||||||
|
@*/
|
||||||
|
|
||||||
|
Ox.LeafletMapPlace = function(options) {
|
||||||
|
|
||||||
|
options = Ox.extend({
|
||||||
|
east: 0,
|
||||||
|
editing: false,
|
||||||
|
geoname: '',
|
||||||
|
map: null,
|
||||||
|
name: '',
|
||||||
|
north: 0,
|
||||||
|
selected: false,
|
||||||
|
south: 0,
|
||||||
|
type: '',
|
||||||
|
visible: false,
|
||||||
|
west: 0
|
||||||
|
}, options);
|
||||||
|
|
||||||
|
var that = this;
|
||||||
|
|
||||||
|
Ox.forEach(options, function(val, key) {
|
||||||
|
that[key] = val;
|
||||||
|
});
|
||||||
|
|
||||||
|
update();
|
||||||
|
|
||||||
|
function update(updateMarker) {
|
||||||
|
// console.log('foo', that.north, that.east, that.south, that.west);
|
||||||
|
if (that.east < that.west) {
|
||||||
|
if (that.west > 170) {
|
||||||
|
that.west -= 360
|
||||||
|
//console.log(that.geoname, '<< west', that.west+360, '=>', that.west)
|
||||||
|
} else {
|
||||||
|
that.east += 360
|
||||||
|
//console.log(that.geoname, '>> east', that.east-360, that.east)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
that.points = {
|
||||||
|
ne: new L.LatLng(that.north, that.east),
|
||||||
|
sw: new L.LatLng(that.south, that.west)
|
||||||
|
};
|
||||||
|
console.log('points', JSON.stringify(that.points, null, 2));
|
||||||
|
|
||||||
|
that.bounds = new L.latLngBounds(that.points.sw, that.points.ne);
|
||||||
|
that.center = that.bounds.getCenter();
|
||||||
|
that.lat = that.center.lat;
|
||||||
|
that.lng = that.center.lng;
|
||||||
|
Ox.extend(that.points, {
|
||||||
|
e: new L.LatLng(that.lat, that.east),
|
||||||
|
s: new L.LatLng(that.south, that.lng),
|
||||||
|
se: new L.LatLng(that.south, that.east),
|
||||||
|
n: new L.LatLng(that.north, that.lng),
|
||||||
|
nw: new L.LatLng(that.north, that.west),
|
||||||
|
w: new L.LatLng(that.lat, that.west)
|
||||||
|
});
|
||||||
|
// fixme: use bounds.toSpan()
|
||||||
|
that.sizeNorthSouth = (that.north - that.south)
|
||||||
|
* Ox.EARTH_CIRCUMFERENCE / 360;
|
||||||
|
that.sizeEastWest = (that.east + (that.west > that.east ? 360 : 0) - that.west)
|
||||||
|
* Ox.getMetersPerDegree(that.lat);
|
||||||
|
that.area = Ox.getArea(
|
||||||
|
{lat: that.south, lng: that.west},
|
||||||
|
{lat: that.north, lng: that.east}
|
||||||
|
);
|
||||||
|
if (!that.marker) {
|
||||||
|
that.marker = new Ox.LeafletMapMarker({
|
||||||
|
map: that.map,
|
||||||
|
place: that
|
||||||
|
});
|
||||||
|
that.rectangle = new Ox.LeafletMapRectangle({
|
||||||
|
map: that.map,
|
||||||
|
place: that
|
||||||
|
});
|
||||||
|
} else if (updateMarker) {
|
||||||
|
that.marker.update();
|
||||||
|
that.rectangle.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function editable() {
|
||||||
|
return that.map.options('editable') && that.editable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@
|
||||||
|
add <f> add
|
||||||
|
@*/
|
||||||
|
that.add = function() {
|
||||||
|
that.visible = true;
|
||||||
|
that.marker.add();
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
cancel <f> cancel
|
||||||
|
@*/
|
||||||
|
that.cancel = function() {
|
||||||
|
if (editable()) {
|
||||||
|
that.undo();
|
||||||
|
that.editing = false;
|
||||||
|
that.marker.update();
|
||||||
|
that.rectangle.deselect();
|
||||||
|
}
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
crossesDateline <f> crossesDateline
|
||||||
|
@*/
|
||||||
|
that.crossesDateline = function() {
|
||||||
|
return that.west > that.east;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@
|
||||||
|
deselect <f> dselect
|
||||||
|
@*/
|
||||||
|
that.deselect = function() {
|
||||||
|
that.editing && that.submit();
|
||||||
|
that.selected = false;
|
||||||
|
that.marker.update();
|
||||||
|
that.rectangle.remove();
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
edit <f> edit
|
||||||
|
@*/
|
||||||
|
that.edit = function() {
|
||||||
|
if (editable()) {
|
||||||
|
that.editing = true;
|
||||||
|
that.original = {
|
||||||
|
south: that.south,
|
||||||
|
west: that.west,
|
||||||
|
north: that.north,
|
||||||
|
east: that.east
|
||||||
|
};
|
||||||
|
that.marker.edit();
|
||||||
|
that.rectangle.select();
|
||||||
|
}
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
// fixme: make this an Ox.Element to get options handling for free?
|
||||||
|
that.options = function(options) {
|
||||||
|
options = Ox.makeObject(arguments);
|
||||||
|
Ox.forEach(options, function(value, key) {
|
||||||
|
that[key] = value;
|
||||||
|
});
|
||||||
|
update(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
remove <f> remove
|
||||||
|
@*/
|
||||||
|
that.remove = function() {
|
||||||
|
that.editing && that.submit();
|
||||||
|
that.selected && that.deselect();
|
||||||
|
that.visible = false;
|
||||||
|
that.marker.remove();
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
select <f> select
|
||||||
|
@*/
|
||||||
|
that.select = function() {
|
||||||
|
that.selected = true;
|
||||||
|
!that.visible && that.add();
|
||||||
|
that.marker.update();
|
||||||
|
that.rectangle.add();
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
submit <f> submit
|
||||||
|
@*/
|
||||||
|
that.submit = function() {
|
||||||
|
if (editable()) {
|
||||||
|
that.editing = false;
|
||||||
|
that.marker.update();
|
||||||
|
that.rectangle.deselect();
|
||||||
|
}
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
update <f> update
|
||||||
|
@*/
|
||||||
|
that.update = function(updateMarker) {
|
||||||
|
update(updateMarker);
|
||||||
|
that.map.triggerEvent('changeplace', that);
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
undo <f> undo
|
||||||
|
@*/
|
||||||
|
that.undo = function() {
|
||||||
|
if (editable()) {
|
||||||
|
Ox.forEach(that.original, function(v, k) {
|
||||||
|
that[k] = v;
|
||||||
|
});
|
||||||
|
that.update();
|
||||||
|
that.marker.update();
|
||||||
|
that.rectangle.update();
|
||||||
|
}
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
return that;
|
||||||
|
|
||||||
|
};
|
133
source/UI/js/Map/LeafletMapRectangle.js
Normal file
133
source/UI/js/Map/LeafletMapRectangle.js
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*@
|
||||||
|
Ox.MapRectangle <f> MapRectangle Object
|
||||||
|
(options) -> <o> MapRectangle Object
|
||||||
|
options <o> Options object
|
||||||
|
map <o|null> map
|
||||||
|
place <o|null> place
|
||||||
|
@*/
|
||||||
|
|
||||||
|
Ox.LeafletMapRectangle = function(options) {
|
||||||
|
|
||||||
|
options = Ox.extend({
|
||||||
|
map: null,
|
||||||
|
place: null
|
||||||
|
}, options);
|
||||||
|
|
||||||
|
var that = this,
|
||||||
|
themeData = Ox.Theme.getThemeData();
|
||||||
|
|
||||||
|
Ox.forEach(options, function(val, key) {
|
||||||
|
that[key] = val;
|
||||||
|
});
|
||||||
|
|
||||||
|
/*@
|
||||||
|
rectangle <f> google.maps.Rectangle
|
||||||
|
@*/
|
||||||
|
console.log('place bounds', that.place.bounds);
|
||||||
|
that.rectangle = new L.rectangle(that.place.bounds);
|
||||||
|
|
||||||
|
/*@
|
||||||
|
markers <a> array of markers
|
||||||
|
@*/
|
||||||
|
that.markers = Ox.map(that.place.points, function(point, position) {
|
||||||
|
return new Ox.LeafletMapRectangleMarker({
|
||||||
|
map: that.map,
|
||||||
|
place: that.place,
|
||||||
|
position: position
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
setOptions();
|
||||||
|
|
||||||
|
function click() {
|
||||||
|
if (
|
||||||
|
that.map.options('editable')
|
||||||
|
&& that.place.editable
|
||||||
|
&& !that.place.editing
|
||||||
|
) {
|
||||||
|
that.place.edit();
|
||||||
|
} else if (that.map.getKey() == 'meta') {
|
||||||
|
that.place.submit();
|
||||||
|
} else if (that.map.getKey() == 'shift') {
|
||||||
|
that.map.zoomToPlace();
|
||||||
|
} else {
|
||||||
|
that.map.panToPlace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setOptions() {
|
||||||
|
var color = '#' + Ox.toHex(themeData[
|
||||||
|
that.place.editing
|
||||||
|
? 'mapPlaceEditingBorder'
|
||||||
|
: 'mapPlaceSelectedBorder'
|
||||||
|
]);
|
||||||
|
// that.rectangle.setOptions({
|
||||||
|
// bounds: that.place.bounds,
|
||||||
|
// fillColor: color,
|
||||||
|
// fillOpacity: that.place.editing ? 0.1 : 0,
|
||||||
|
// strokeColor: color,
|
||||||
|
// strokeOpacity: that.place.id[0] == '_' ? 0.5 : 1,
|
||||||
|
// strokeWeight: 2
|
||||||
|
// });
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@
|
||||||
|
add <f> add
|
||||||
|
@*/
|
||||||
|
that.add = function() {
|
||||||
|
that.rectangle.addTo(that.map.map);
|
||||||
|
that.rectangle.on('click', click);
|
||||||
|
// google.maps.event.addListener(that.rectangle, 'click', click);
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
deselect <f> deselect
|
||||||
|
@*/
|
||||||
|
that.deselect = function() {
|
||||||
|
setOptions();
|
||||||
|
Ox.Log('Map', 'MARKERS', that.markers)
|
||||||
|
Ox.forEach(that.markers, function(marker) {
|
||||||
|
marker.remove();
|
||||||
|
});
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
remove <f> remove
|
||||||
|
@*/
|
||||||
|
that.remove = function() {
|
||||||
|
that.rectangle.remove();
|
||||||
|
// that.rectangle.setMap(null);
|
||||||
|
// google.maps.event.clearListeners(that.rectangle);
|
||||||
|
return that;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@
|
||||||
|
select <f> select
|
||||||
|
@*/
|
||||||
|
that.select = function() {
|
||||||
|
setOptions();
|
||||||
|
Ox.forEach(that.markers, function(marker) {
|
||||||
|
marker.add();
|
||||||
|
});
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
update <f> udpate
|
||||||
|
@*/
|
||||||
|
that.update = function() {
|
||||||
|
Ox.Log('Map', 'UPDATE...')
|
||||||
|
setOptions();
|
||||||
|
Ox.forEach(that.markers, function(marker) {
|
||||||
|
marker.update();
|
||||||
|
});
|
||||||
|
return that;
|
||||||
|
}
|
||||||
|
|
||||||
|
return that;
|
||||||
|
|
||||||
|
};
|
126
source/UI/js/Map/LeafletMapRectangleMarker.js
Normal file
126
source/UI/js/Map/LeafletMapRectangleMarker.js
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
/*@
|
||||||
|
Ox.MapRectangleMarker <f> MapRectangleMarker Object
|
||||||
|
(options) -> <o> MapRectangleMarker Object
|
||||||
|
options <o> Options object
|
||||||
|
map <o|null> map
|
||||||
|
place <o|null> place
|
||||||
|
position <s|''>
|
||||||
|
@*/
|
||||||
|
|
||||||
|
Ox.LeafletMapRectangleMarker = function(options) {
|
||||||
|
|
||||||
|
options = Ox.extend({
|
||||||
|
map: null,
|
||||||
|
place: null,
|
||||||
|
position: ''
|
||||||
|
}, options);
|
||||||
|
|
||||||
|
var that = this;
|
||||||
|
|
||||||
|
Ox.forEach(options, function(val, key) {
|
||||||
|
that[key] = val;
|
||||||
|
});
|
||||||
|
console.log('position', that.place.points, that.position);
|
||||||
|
// that.markerImage = new google.maps.MarkerImage
|
||||||
|
that.marker = new L.Marker({
|
||||||
|
|
||||||
|
});
|
||||||
|
// that.marker = new google.maps.Marker({
|
||||||
|
// cursor: that.position + '-resize',
|
||||||
|
// draggable: true,
|
||||||
|
// icon: Ox.MapMarkerImage({
|
||||||
|
// mode: 'editing',
|
||||||
|
// rectangle: true,
|
||||||
|
// type: that.place.id[0] == '_' ? 'result' : 'place'
|
||||||
|
// }),
|
||||||
|
// position: that.place.points[that.position],
|
||||||
|
// raiseOnDrag: false
|
||||||
|
// });
|
||||||
|
|
||||||
|
function dragstart(e) {
|
||||||
|
Ox.$body.addClass('OxDragging');
|
||||||
|
that.drag = {
|
||||||
|
lat: e.latLng.lat(),
|
||||||
|
lng: e.latLng.lng()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function drag(e) {
|
||||||
|
// fixme: implement shift+drag (center stays the same)
|
||||||
|
Ox.Log('Map', e.pixel.x, e.pixel.y)
|
||||||
|
var lat = Ox.limit(e.latLng.lat(), Ox.MIN_LATITUDE, Ox.MAX_LATITUDE),
|
||||||
|
lng = e.latLng.lng();
|
||||||
|
that.drag = {
|
||||||
|
lat: lat,
|
||||||
|
lng: lng
|
||||||
|
};
|
||||||
|
if (that.position.indexOf('s') > -1) {
|
||||||
|
that.place.south = lat;
|
||||||
|
}
|
||||||
|
if (that.position.indexOf('n') > -1) {
|
||||||
|
that.place.north = lat;
|
||||||
|
}
|
||||||
|
if (that.position.indexOf('w') > -1) {
|
||||||
|
that.place.west = lng;
|
||||||
|
}
|
||||||
|
if (that.position.indexOf('e') > -1) {
|
||||||
|
that.place.east = lng;
|
||||||
|
}
|
||||||
|
//Ox.Log('Map', 'west', that.place.west, 'east', that.place.east);
|
||||||
|
//Ox.Log('Map', 'south', that.place.south, 'north', that.place.north);
|
||||||
|
that.place.update();
|
||||||
|
that.place.marker.update();
|
||||||
|
that.place.rectangle.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
function dragend(e) {
|
||||||
|
var south;
|
||||||
|
Ox.$body.removeClass('OxDragging');
|
||||||
|
if (that.place.south > that.place.north) {
|
||||||
|
south = that.place.south;
|
||||||
|
that.place.south = that.place.north;
|
||||||
|
that.place.north = south;
|
||||||
|
that.place.update();
|
||||||
|
that.place.marker.update();
|
||||||
|
that.place.rectangle.update();
|
||||||
|
}
|
||||||
|
that.map.triggerEvent('changeplaceend', that.place);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@
|
||||||
|
add <f> add
|
||||||
|
@*/
|
||||||
|
that.add = function() {
|
||||||
|
that.marker.setMap(that.map.map);
|
||||||
|
google.maps.event.addListener(that.marker, 'dragstart', dragstart);
|
||||||
|
google.maps.event.addListener(that.marker, 'drag', drag);
|
||||||
|
google.maps.event.addListener(that.marker, 'dragend', dragend);
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
remove <f> remove
|
||||||
|
@*/
|
||||||
|
that.remove = function() {
|
||||||
|
that.marker.setMap(null);
|
||||||
|
google.maps.event.clearListeners(that.marker);
|
||||||
|
};
|
||||||
|
|
||||||
|
/*@
|
||||||
|
update <f> update
|
||||||
|
@*/
|
||||||
|
that.update = function() {
|
||||||
|
that.marker.setOptions({
|
||||||
|
icon: Ox.MapMarkerImage({
|
||||||
|
mode: 'editing',
|
||||||
|
rectangle: true,
|
||||||
|
type: that.place.id[0] == '_' ? 'result' : 'place'
|
||||||
|
}),
|
||||||
|
position: that.place.points[that.position]
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return that;
|
||||||
|
|
||||||
|
};
|
|
@ -832,7 +832,6 @@ Ox.Map = function(options, self) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function initMap() {
|
function initMap() {
|
||||||
|
|
||||||
getMapBounds(function(mapBounds) {
|
getMapBounds(function(mapBounds) {
|
||||||
|
|
||||||
//Ox.Log('Map', 'init', mapBounds.getSouthWest(), mapBounds.getNorthEast(), mapBounds.getCenter())
|
//Ox.Log('Map', 'init', mapBounds.getSouthWest(), mapBounds.getNorthEast(), mapBounds.getCenter())
|
||||||
|
|
|
@ -325,9 +325,9 @@ Ox.AnnotationPanel = function(options, self) {
|
||||||
} else if (data.id == 'export') {
|
} else if (data.id == 'export') {
|
||||||
that.triggerEvent('exportannotations');
|
that.triggerEvent('exportannotations');
|
||||||
} else if (data.id == 'find') {
|
} else if (data.id == 'find') {
|
||||||
that.triggerEvent('find', {value: Ox.decodeHTMLEntities(value)});
|
that.triggerEvent('find', {value: value});
|
||||||
} else if (data.id == 'findannotations') {
|
} else if (data.id == 'findannotations') {
|
||||||
that.triggerEvent('findannotations', {key: key, value: Ox.decodeHTMLEntities(value)});
|
that.triggerEvent('findannotations', {key: key, value: value});
|
||||||
} else if (data.id == 'import') {
|
} else if (data.id == 'import') {
|
||||||
that.triggerEvent('importannotations');
|
that.triggerEvent('importannotations');
|
||||||
} else if (data.id == 'insert') {
|
} else if (data.id == 'insert') {
|
||||||
|
|
|
@ -1,281 +0,0 @@
|
||||||
{
|
|
||||||
", doubleclick to edit": ", düzenlemek için çift tıkla",
|
|
||||||
"Add": "Ekle",
|
|
||||||
"Add Files": "Dosya Ekle",
|
|
||||||
"Add Place": "Yer Ekle",
|
|
||||||
"Add a condition": "koşul ekle",
|
|
||||||
"Add a group of conditions": "Bir grup koşul ekle",
|
|
||||||
"Add column after": "Sonrasına sütun ekle",
|
|
||||||
"Add column before": "Önce sütun ekle",
|
|
||||||
"Add row above": "Üste satır ekle",
|
|
||||||
"Add row below": "Altına satır ekle",
|
|
||||||
"Add {0}": "{0} ekle",
|
|
||||||
"Adding...": "Ekleniyor..",
|
|
||||||
"All": "Tüm",
|
|
||||||
"Alternative Names": "Alternatif İsimler",
|
|
||||||
"Area": "Alan",
|
|
||||||
"At Current Position": "Mevcut Konumda",
|
|
||||||
"Blockquote": "Blok halinde alıntıla",
|
|
||||||
"Bold": "Kalın",
|
|
||||||
"Borough": "Mahalle",
|
|
||||||
"Building": "Bina",
|
|
||||||
"Bullets": "Madde İşaretleri",
|
|
||||||
"By Duration": "Süreye göre",
|
|
||||||
"By Position": "Pozisyona Göre",
|
|
||||||
"By Text": "Metne gore",
|
|
||||||
"Cancel": "İptal et",
|
|
||||||
"Cancel/Deselect": "İptal et/Seçimi kaldır",
|
|
||||||
"Cancelled": "İptal edildi",
|
|
||||||
"City": "Şehir",
|
|
||||||
"Clear": "Temizle",
|
|
||||||
"Clear Event": "Etkinliği temizle",
|
|
||||||
"Clear Place": "Yeri Temizle",
|
|
||||||
"Clearing...": "Temizleniyor",
|
|
||||||
"Click to hide": "gizlemek için tıklayın",
|
|
||||||
"Click to pan, doubleclick to zoom": "Kaydırmak için tıklayın, yakınlaştırmak için çift tıklayın",
|
|
||||||
"Click to select": "Seçmek için tıklayın",
|
|
||||||
"Click to select, doubleclick to edit": "Seçmek için tıklayın, düzenlemek için çift tıklayın",
|
|
||||||
"Click to show": "Göstermek için tıklayın",
|
|
||||||
"Close": "Kapat",
|
|
||||||
"Complete": "Tamamlandı",
|
|
||||||
"Country": "Ülke",
|
|
||||||
"Date": "Tarih",
|
|
||||||
"Date Created": "Oluşturulma Tarihi",
|
|
||||||
"Date Modified": "Değiştirilme Tarihi",
|
|
||||||
"Define": "Tanımla",
|
|
||||||
"Define Event": "Etkinlik Tanımla",
|
|
||||||
"Define Place": "Yer Tanımla",
|
|
||||||
"Delete Annotation": "Ek Açıklamayı Sil",
|
|
||||||
"Deselect": "Seçimi Kaldır",
|
|
||||||
"Deselect Annotation": "Ek Açıklamanın Seçimini Kaldır",
|
|
||||||
"Don't Shuffle": "Karıştırma",
|
|
||||||
"Done": "Bitti",
|
|
||||||
"Download": "İndir",
|
|
||||||
"Download Selection...": "Seçimi İndir...",
|
|
||||||
"Download Video...": "Video İndir",
|
|
||||||
"Drag to resize": "Yeniden boyutlandırmak için sürükleyin",
|
|
||||||
"Drag to resize or click to hide": "Yeniden boyutlandırmak için sürükleyin veya gizlemek için tıklayın",
|
|
||||||
"Drag to resize or click to toggle map": "eniden boyutlandırmak için sürükleyin veya haritayı değiştirmek için tıklayın",
|
|
||||||
"Duration": "Süre",
|
|
||||||
"East": "Doğu",
|
|
||||||
"Edit": "Kurgula",
|
|
||||||
"Edit Annotation": "Ek Açıklamayı Kurgula",
|
|
||||||
"Edit/Submit": "Kurgula/Gönder",
|
|
||||||
"Editing Options": "Kurgulama Seçenekleri",
|
|
||||||
"Embed Selection...": "Seçimi Yerleştir",
|
|
||||||
"End": "Son",
|
|
||||||
"Enter Fullscreen": "Tam Ekran Gir",
|
|
||||||
"Event": "Etkinlik",
|
|
||||||
"Events": "Etkinlikler",
|
|
||||||
"Examples...": "Örnekler...",
|
|
||||||
"Exit Fullscreen": "Tam Ekrandan Çık",
|
|
||||||
"Feature": "Özellik",
|
|
||||||
"Find": "Bul",
|
|
||||||
"Find in All {0}": "Tüm {0} İçinde Bul",
|
|
||||||
"Find in List": "Listede Bul",
|
|
||||||
"Find in This {0}": "Bu {0}'da Bul",
|
|
||||||
"Find on Map": "Haritada Bul",
|
|
||||||
"Find...": "Bul...",
|
|
||||||
"Find: All": "Bul: Tümü",
|
|
||||||
"Find: Alternative Names": "Bul: Alternatif İsimler",
|
|
||||||
"Find: Geoname": "Bul: Geoisim",
|
|
||||||
"Find: Name": "Bul: İsim",
|
|
||||||
"Flag": "Bayrak",
|
|
||||||
"Font Size": "Yazı Tipi Boyutu",
|
|
||||||
"Generating Documentation...": "Dokümantasyon Oluşturuyor...",
|
|
||||||
"Geoname": "Geo isim",
|
|
||||||
"Go One Frame Back": "Bir Kare Geri Git",
|
|
||||||
"Go One Frame Forward": "Bir Kare İleri Git",
|
|
||||||
"Go One Line Down": "Bir Satır Aşağı Git",
|
|
||||||
"Go One Line Up": "Bir Satır Yukarı Git",
|
|
||||||
"Go One Second Back": "Bir Saniye Geri Git",
|
|
||||||
"Go One Second Forward": "Bir Saniye İleriye Git",
|
|
||||||
"Go to First Frame": "İlk Kareye Git",
|
|
||||||
"Go to In Point": "Giriş Noktasına Git",
|
|
||||||
"Go to Last Frame": "Son Kareye Git",
|
|
||||||
"Go to Next Annotation": "Sonraki Açıklamaya Git",
|
|
||||||
"Go to Next Cut": "Sonraki Kesime Git",
|
|
||||||
"Go to Next Result": "Sonraki Sonuca Git",
|
|
||||||
"Go to Out Point": "Çıkış Noktasına Git",
|
|
||||||
"Go to Poster Frame": "Poster Çerçevesine Git",
|
|
||||||
"Go to Previous Annotation": "Önceki Ek Açıklamaya Git",
|
|
||||||
"Go to Previous Cut": "Önceki Kesmeye Git",
|
|
||||||
"Go to Previous Result": "Önceki Sonuca Git",
|
|
||||||
"Headline": "Başlık",
|
|
||||||
"Hide": "Sakla",
|
|
||||||
"Hide Controls": "Kontrolleri Gizle",
|
|
||||||
"Hide Labels": "Etiketleri Gizle",
|
|
||||||
"Home": "Ana Sayfa",
|
|
||||||
"Home Channel": "Ana Kanal",
|
|
||||||
"Image": "İmge",
|
|
||||||
"Import Annotations...": "Ek Açıklamaları İçe Aktar...",
|
|
||||||
"In Current Selection": "Mevcut Seçimde",
|
|
||||||
"Insert": "Ekle",
|
|
||||||
"Insert HTML": "HTML Ekle",
|
|
||||||
"Insert...": "Ekle...",
|
|
||||||
"Italic": "İtalik",
|
|
||||||
"Join Clip(s) at Cuts": "Klip(ler)i Kesimlerde Birleştir",
|
|
||||||
"Keyboard Shortcuts": "Klavye Kısayolları",
|
|
||||||
"Keyboard Shortcuts...": "Klavye Kısayolları...",
|
|
||||||
"Large": "Büyük",
|
|
||||||
"Large Player": "Büyük Oynatıcı",
|
|
||||||
"Larger": "Daha Büyük",
|
|
||||||
"Latitude": "Enlem",
|
|
||||||
"Limit to": "Sınırla",
|
|
||||||
"Linebreak": "Satır Sonu",
|
|
||||||
"Link": "Link",
|
|
||||||
"List": "Liste",
|
|
||||||
"Longitude": "Boylam",
|
|
||||||
"Make Clip(s) Static": "Klip(ler)i Statik Yap",
|
|
||||||
"Map Options": "Harita Seçenekleri",
|
|
||||||
"Match": "Eşleme",
|
|
||||||
"Matches": "Eşlemeler",
|
|
||||||
"Medium": "Orta",
|
|
||||||
"Monospace": "Monospace",
|
|
||||||
"Mute": "Sessiz",
|
|
||||||
"Mute/Unmute": "Sesi Kapat/Sesi Aç",
|
|
||||||
"Name": "İsim",
|
|
||||||
"New Event": "Yeni Etkinlik",
|
|
||||||
"New Place": "Yeni Yer",
|
|
||||||
"Next": "Sıradaki",
|
|
||||||
"Next Channel": "Yeni Kanal",
|
|
||||||
"Next Result": "Bir Sonraki Sonuç",
|
|
||||||
"No file selected": "Seçili dosya yok",
|
|
||||||
"No files selected": "Seçili dosya yok",
|
|
||||||
"North": "Kuzey",
|
|
||||||
"Numbers": "Sayılar",
|
|
||||||
"Open in New Tab": "Yeni Sekmede Aç",
|
|
||||||
"Options": "Seçenekler",
|
|
||||||
"Other": "Diğer",
|
|
||||||
"Paragraph": "Paragraf",
|
|
||||||
"Pause": "Durdur",
|
|
||||||
"Paused": "Durduruldu",
|
|
||||||
"Person": "Kişi",
|
|
||||||
"Place": "Yer",
|
|
||||||
"Place or Event": "Yer ya da Etkinlik",
|
|
||||||
"Play": "Oynat",
|
|
||||||
"Play Current Track": "Seçili Parçayı Çal",
|
|
||||||
"Play In to Out": "Giriş-Çıkış Arasında Oynat",
|
|
||||||
"Play Next Track": "Bir Sonraki Parçayı Çal",
|
|
||||||
"Play/Pause": "Başlat/Durdur",
|
|
||||||
"Previous": "Önceki",
|
|
||||||
"Previous Channel": "Önceki Kanal",
|
|
||||||
"Previous Result": "Önceki Sonuç",
|
|
||||||
"Region": "Bölge",
|
|
||||||
"Reload": "Yeniden Yükle",
|
|
||||||
"Remove": "Kaldır",
|
|
||||||
"Remove Event": "Etkinliği Kaldır",
|
|
||||||
"Remove File": "Dosyayı Kaldır",
|
|
||||||
"Remove Place": "Yeri Kaldır",
|
|
||||||
"Remove this column": "Bu sütunu kaldır",
|
|
||||||
"Remove this condition": "Bu koşulu kaldır",
|
|
||||||
"Remove this group of conditions": "Bu koşul grubunu kaldır ",
|
|
||||||
"Remove this row": "Bu satırı kaldır",
|
|
||||||
"Removing...": "Kaldırıyor...",
|
|
||||||
"Repeat All": "Hepsini Tekrarla",
|
|
||||||
"Repeat None": "Hiçbirini Tekrarlama",
|
|
||||||
"Repeat One": "Birini Tekrarla",
|
|
||||||
"Reset this condition": "Bu koşulu sıfırla",
|
|
||||||
"Resolution": "Çözünürlük",
|
|
||||||
"Restart": "Yeniden Başlat",
|
|
||||||
"Restore Defaults": "Varsayılanları Geri Yükle",
|
|
||||||
"Results": "Sonuçlar",
|
|
||||||
"Resume": "Devam Et",
|
|
||||||
"Right-to-Left": "Sağdan Sola",
|
|
||||||
"Run Tests": "Testleri Çalıştır",
|
|
||||||
"Save Changes": "Değişiklikleri Kaydet",
|
|
||||||
"Save as Smart List": "Akıllı Liste olarak Kaydet",
|
|
||||||
"Scale to Fill": "Doldurmak için Ölç",
|
|
||||||
"Scale to Fit": "Sığacak Şekilde Ölç",
|
|
||||||
"Scroll to Player": "Oyuncuya Kaydır",
|
|
||||||
"Select Current Annotation": "Geçerli Ek Açılamayı Seç",
|
|
||||||
"Select Current Cut": "Geçerli Kesimi Seç",
|
|
||||||
"Select File": "Dosya Seç",
|
|
||||||
"Select Next Annotation": "Sonraki Açıklamayı Seç",
|
|
||||||
"Select Previous Annotation": "Önceki Açıklamayı Seç",
|
|
||||||
"Set ": "Berlie",
|
|
||||||
"Set In Point": "Giriş Noktası Belirle",
|
|
||||||
"Set Out Point": "Çıkış Noktası Belirle",
|
|
||||||
"Set Poster Frame": "Poster Karesi Belirle",
|
|
||||||
"Settings": "Ayarlar",
|
|
||||||
"Show Annotations": "Ek Açıklamayı Göster",
|
|
||||||
"Show Controls": "Kontrol Çubuğunu Göster",
|
|
||||||
"Show Dates": "Tarihleri Göster",
|
|
||||||
"Show Labels": "Etiketleri Göster",
|
|
||||||
"Show Other": "Diğerini Göster",
|
|
||||||
"Show People": "İnsanları Göster",
|
|
||||||
"Show Places": "Yerleri Göster",
|
|
||||||
"Show Remaining Time": "Kalan Zamanı Göster",
|
|
||||||
"Show Subtitles": "Altyazıları Göster",
|
|
||||||
"Show Users": "Kullanıcıları Göster",
|
|
||||||
"Shuffle": "Karıştır",
|
|
||||||
"Small": "Küçük",
|
|
||||||
"Small Player": "Küçük Oynatıcı",
|
|
||||||
"Smaller": "Daha Küçük",
|
|
||||||
"Sort Annotations": "Ek Açıklamayı Düzenle",
|
|
||||||
"South": "Güney",
|
|
||||||
"Split Clip(s) at Cuts": "Klip(ler)i Kesimlerde Böl",
|
|
||||||
"Start": "Başlat",
|
|
||||||
"Street": "Sokak",
|
|
||||||
"Strike": "Üstünü Çiz",
|
|
||||||
"Subscript": "Alt Simge",
|
|
||||||
"Subtitles": "Altyazılar",
|
|
||||||
"Superscript": "Üst Simge",
|
|
||||||
"Switch Theme": "Temayı Değiştir",
|
|
||||||
"Timeline": "Zaman Çizelgesi",
|
|
||||||
"Title": "Başlık",
|
|
||||||
"Turn Volume Down": "Sesi Kıs",
|
|
||||||
"Turn Volume Up": "Sesi Aç",
|
|
||||||
"Type": "Tür",
|
|
||||||
"Underline": "Altını Çiz",
|
|
||||||
"Undo Changes": "Değişiklikleri Geri Al",
|
|
||||||
"Unmute": "Sesi Aç",
|
|
||||||
"Untitled": "İsimsiz",
|
|
||||||
"User": "Kullanıcı",
|
|
||||||
"Valid": "Geçerli",
|
|
||||||
"View": "Görüntüle",
|
|
||||||
"View Live": "Canlı Görüntüle",
|
|
||||||
"View Source": "Kaynağı Görüntüle",
|
|
||||||
"View as Grid": "Izgara Olarak Görüntüle",
|
|
||||||
"View as List": "Liste Olarak Görüntüle",
|
|
||||||
"Volume": "Ses Seviyesi",
|
|
||||||
"West": "Batı",
|
|
||||||
"add": "ekle",
|
|
||||||
"all": "hepsi",
|
|
||||||
"and": "ve",
|
|
||||||
"annotations": "ek açıklamalar",
|
|
||||||
"any": "herhangi",
|
|
||||||
"ascending": "artan",
|
|
||||||
"bracket": "parantez",
|
|
||||||
"contains": "içerir",
|
|
||||||
"descending": "azalan",
|
|
||||||
"does not contain": "içermez",
|
|
||||||
"does not end with": "ile bitmiyor",
|
|
||||||
"does not start with": "ile başlamaz",
|
|
||||||
"ends with": "ile biter",
|
|
||||||
"file": "dosya",
|
|
||||||
"files": "dosyalar",
|
|
||||||
"in": "içinde",
|
|
||||||
"is": "",
|
|
||||||
"is after": "sonra",
|
|
||||||
"is before": "önce",
|
|
||||||
"is between": "arasında",
|
|
||||||
"is greater than": "'den büyüktür",
|
|
||||||
"is less than": "daha azdır",
|
|
||||||
"is not": "değil",
|
|
||||||
"is not after": "sonra değil",
|
|
||||||
"is not before": "önce değil",
|
|
||||||
"is not between": "arasında değil",
|
|
||||||
"is not greater than": "daha büyük değil",
|
|
||||||
"is not less than": "daha az değil",
|
|
||||||
"items": "öğeler",
|
|
||||||
"of the following conditions": "aşağıdaki koşullardan",
|
|
||||||
"order": "sırala",
|
|
||||||
"sorted by": "göre sırala",
|
|
||||||
"starts with": "ile başla",
|
|
||||||
"unknown": "bilinmiyor",
|
|
||||||
"{0} Century": "Yüzyıl",
|
|
||||||
"{0} Century BC": "Yüzyıl MÖ",
|
|
||||||
"{0} Millennium": "{0} Milenyum",
|
|
||||||
"{0} Millennium BC": "MÖ {0} Milenyum"
|
|
||||||
}
|
|
Loading…
Reference in a new issue