Refactored NoticeLocationAttach(). It works better in UAs that don't

support Geolocation API.
This commit is contained in:
Sarven Capadisli 2010-01-04 23:36:22 +00:00
parent a0f7896f22
commit d59ffeaab5

View File

@ -442,6 +442,9 @@ var SN = { // StatusNet
}, },
NoticeLocationAttach: function() { NoticeLocationAttach: function() {
var NLat = $('#'+SN.C.S.NoticeLat).val();
var NLon = $('#'+SN.C.S.NoticeLon).val();
function removeNoticeDataGeo() { function removeNoticeDataGeo() {
$('label[for='+SN.C.S.NoticeDataGeo+']').removeClass('checked'); $('label[for='+SN.C.S.NoticeDataGeo+']').removeClass('checked');
$('#'+SN.C.S.NoticeDataGeoSelected).hide(); $('#'+SN.C.S.NoticeDataGeoSelected).hide();
@ -451,6 +454,36 @@ var SN = { // StatusNet
$('#'+SN.C.S.NoticeLocationId).val(''); $('#'+SN.C.S.NoticeLocationId).val('');
} }
function getJSONgeocodeURL(geocodeURL, data) {
$.getJSON(geocodeURL, data, function(location) {
NLN = $('#'+SN.C.S.NoticeLocationName);
NLN.replaceWith('<a id="notice_data-location_name"/>');
NLN = $('#'+SN.C.S.NoticeLocationName);
if (typeof(location.location_ns) != 'undefined') {
$('#'+SN.C.S.NoticeLocationNs).val(location.location_ns);
}
if (typeof(location.location_id) != 'undefined') {
$('#'+SN.C.S.NoticeLocationId).val(location.location_id);
}
if (typeof(location.name) == 'undefined') {
NLN_text = position.coords.latitude + ';' + position.coords.longitude;
}
else {
NLN_text = location.name;
}
NLN.attr('href', location.url);
NLN.text(NLN_text);
NLN.click(function() {
window.open(location.url);
return false;
});
});
}
var NDG = $('#'+SN.C.S.NoticeDataGeo); var NDG = $('#'+SN.C.S.NoticeDataGeo);
if (NDG.length > 0) { if (NDG.length > 0) {
var NLE = $('#notice_data-location_wrap'); var NLE = $('#notice_data-location_wrap');
@ -459,48 +492,48 @@ var SN = { // StatusNet
$('label[for='+SN.C.S.NoticeDataGeo+']').attr('title', jQuery.trim($('label[for='+SN.C.S.NoticeDataGeo+']').text())); $('label[for='+SN.C.S.NoticeDataGeo+']').attr('title', jQuery.trim($('label[for='+SN.C.S.NoticeDataGeo+']').text()));
if (navigator.geolocation) { NDG.change(function() {
NDG.change(function() { $.cookie(SN.C.S.NoticeLocationCookieName, $('#'+SN.C.S.NoticeDataGeo).attr('checked'));
$.cookie(SN.C.S.NoticeLocationCookieName, $('#'+SN.C.S.NoticeDataGeo).attr('checked'));
var NLN = $('#'+SN.C.S.NoticeLocationName); var NLN = $('#'+SN.C.S.NoticeLocationName);
if (NLN.length > 0) { if (NLN.length > 0) {
NLN.remove(); NLN.remove();
} }
if ($('#'+SN.C.S.NoticeDataGeo).attr('checked') === true) {
$('label[for='+SN.C.S.NoticeDataGeo+']').addClass('checked');
var S = '<div id="'+SN.C.S.NoticeDataGeoSelected+'" class="'+SN.C.S.Success+'"/>'; var S = '<div id="'+SN.C.S.NoticeDataGeoSelected+'" class="'+SN.C.S.Success+'"/>';
var NDGS = $('#'+SN.C.S.NoticeDataGeoSelected); var NDGS = $('#'+SN.C.S.NoticeDataGeoSelected);
if (NDGS.length > 0) { if (NDGS.length > 0) {
NDGS.replaceWith(S); NDGS.replaceWith(S);
} }
else { else {
$('#'+SN.C.S.FormNotice).append(S); $('#'+SN.C.S.FormNotice).append(S);
} }
NDGS = $('#'+SN.C.S.NoticeDataGeoSelected); NDGS = $('#'+SN.C.S.NoticeDataGeoSelected);
NDGS.prepend('<span id="'+SN.C.S.NoticeLocationName+'">Geo</span>'); NDGS.prepend('<span id="'+SN.C.S.NoticeLocationName+'">Geo</span> <button class="minimize">&#95;</button> <button class="close">&#215;</button>');
var NLN = $('#'+SN.C.S.NoticeLocationName); var NLN = $('#'+SN.C.S.NoticeLocationName);
NLN.addClass('processing');
if ($('#'+SN.C.S.NoticeDataGeo).attr('checked') === true) { $('#'+SN.C.S.NoticeDataGeoSelected+' button.close').click(function(){
NLN.addClass('processing'); $('#'+SN.C.S.NoticeDataGeoSelected).remove();
$('label[for='+SN.C.S.NoticeDataGeo+']').addClass('checked'); $('#'+SN.C.S.NoticeDataGeo).attr('checked', false);
$('label[for='+SN.C.S.NoticeDataGeo+']').removeClass('checked');
NDGS.append('<button class="minimize">&#95;</button> <button class="close">&#215;</button>'); return false;
});
$('#'+SN.C.S.NoticeDataGeoSelected+' button.close').click(function(){ $('#'+SN.C.S.NoticeDataGeoSelected+' button.minimize').click(function(){
$('#'+SN.C.S.NoticeDataGeoSelected).remove(); $('#'+SN.C.S.NoticeDataGeoSelected).hide();
$('#'+SN.C.S.NoticeDataGeo).attr('checked', false);
$('label[for='+SN.C.S.NoticeDataGeo+']').removeClass('checked');
return false; return false;
}); });
$('#'+SN.C.S.NoticeDataGeoSelected+' button.minimize').click(function(){
$('#'+SN.C.S.NoticeDataGeoSelected).hide();
return false;
});
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition( navigator.geolocation.getCurrentPosition(
function(position) { function(position) {
$('#'+SN.C.S.NoticeLat).val(position.coords.latitude); $('#'+SN.C.S.NoticeLat).val(position.coords.latitude);
@ -512,34 +545,7 @@ var SN = { // StatusNet
'token': $('#token').val() 'token': $('#token').val()
}; };
$.getJSON(geocodeURL, data, function(location) { getJSONgeocodeURL(geocodeURL, data);
NLN = $('#'+SN.C.S.NoticeLocationName);
NLN.replaceWith('<a id="notice_data-location_name"/>');
NLN = $('#'+SN.C.S.NoticeLocationName);
if (typeof(location.location_ns) != 'undefined') {
$('#'+SN.C.S.NoticeLocationNs).val(location.location_ns);
}
if (typeof(location.location_id) != 'undefined') {
$('#'+SN.C.S.NoticeLocationId).val(location.location_id);
}
if (typeof(location.name) == 'undefined') {
NLN_text = position.coords.latitude + ';' + position.coords.longitude;
}
else {
NLN_text = location.name;
}
NLN.attr('href', location.url);
NLN.text(NLN_text);
NLN.click(function() {
window.open(location.url);
return false;
});
});
}, },
function(error) { function(error) {
@ -550,13 +556,26 @@ var SN = { // StatusNet
); );
} }
else { else {
removeNoticeDataGeo(); if (NLat.length > 0 && NLon.length > 0) {
} var data = {
}).change(); 'lat': NLat,
'lon': NLon,
'token': $('#token').val()
};
var cookieVal = $.cookie(SN.C.S.NoticeLocationCookieName); getJSONgeocodeURL(geocodeURL, data);
NDG.attr('checked', (cookieVal === null || cookieVal == 'true')); }
} }
}
else {
$('label[for='+SN.C.S.NoticeDataGeo+']').removeClass('checked');
removeNoticeDataGeo();
}
}).change();
var cookieVal = $.cookie(SN.C.S.NoticeLocationCookieName);
NDG.attr('checked', (cookieVal === null || cookieVal == 'true'));
} }
}, },