diff options
Diffstat (limited to 'js/util.js')
-rw-r--r-- | js/util.js | 165 |
1 files changed, 159 insertions, 6 deletions
diff --git a/js/util.js b/js/util.js index f60b5d313..2d108118a 100644 --- a/js/util.js +++ b/js/util.js @@ -50,7 +50,11 @@ var SN = { // StatusNet NoticeLat: 'notice_data-lat', NoticeLon: 'notice_data-lon', NoticeLocationId: 'notice_data-location_id', - NoticeLocationNs: 'notice_data-location_ns' + NoticeLocationNs: 'notice_data-location_ns', + NoticeLocationName: 'notice_data-location_name', + NoticeLocationCookieName: 'location_enabled', + NoticeDataGeo: 'notice_data-geo', + NoticeDataGeoSelected: 'notice_data-geo_selected' } }, @@ -316,7 +320,42 @@ var SN = { // StatusNet }, NoticeRepeat: function() { - $('.form_repeat').each(function() { SN.U.FormXHR($(this)); }); + $('.form_repeat').each(function() { + SN.U.FormXHR($(this)); + SN.U.NoticeRepeatConfirmation($(this)); + }); + }, + + NoticeRepeatConfirmation: function(form) { + function NRC() { + form.closest('.notice-options').addClass('opaque'); + form.addClass('dialogbox'); + + form.append('<button class="close">×</button>'); + form.find('button.close').click(function(){ + $(this).remove(); + + form.closest('.notice-options').removeClass('opaque'); + form.removeClass('dialogbox'); + form.find('.submit_dialogbox').remove(); + form.find('.submit').show(); + + return false; + }); + }; + + form.find('.submit').bind('click', function(e) { + e.preventDefault(); + + var submit = form.find('.submit').clone(); + submit.addClass('submit_dialogbox'); + submit.removeClass('submit'); + form.append(submit); + + $(this).hide(); + + NRC(); + }); }, NoticeAttachments: function() { @@ -396,15 +435,129 @@ var SN = { // StatusNet $('#'+SN.C.S.NoticeDataAttachSelected+' button').click(function(){ $('#'+SN.C.S.NoticeDataAttachSelected).remove(); NDA.val(''); + + return false; }); }); }, NoticeLocationAttach: function() { - if(navigator.geolocation) navigator.geolocation.watchPosition(function(position) { - $('#'+SN.C.S.NoticeLat).val(position.coords.latitude); - $('#'+SN.C.S.NoticeLon).val(position.coords.longitude); - }); + function removeNoticeDataGeo() { + $('label[for='+SN.C.S.NoticeDataGeo+']').removeClass('checked'); + $('#'+SN.C.S.NoticeDataGeoSelected).hide(); + $('#'+SN.C.S.NoticeLat).val(''); + $('#'+SN.C.S.NoticeLon).val(''); + $('#'+SN.C.S.NoticeLocationNs).val(''); + $('#'+SN.C.S.NoticeLocationId).val(''); + } + + var NDG = $('#'+SN.C.S.NoticeDataGeo); + if (NDG.length > 0) { + var NLE = $('#notice_data-location_wrap'); + var geocodeURL = NLE.attr('title'); + NLE.removeAttr('title'); + + $('label[for='+SN.C.S.NoticeDataGeo+']').attr('title', jQuery.trim($('label[for='+SN.C.S.NoticeDataGeo+']').text())); + + if (navigator.geolocation) { + NDG.change(function() { + $.cookie(SN.C.S.NoticeLocationCookieName, $('#'+SN.C.S.NoticeDataGeo).attr('checked')); + + var NLN = $('#'+SN.C.S.NoticeLocationName); + if (NLN.length > 0) { + NLN.remove(); + } + + var S = '<div id="'+SN.C.S.NoticeDataGeoSelected+'" class="'+SN.C.S.Success+'"/>'; + var NDGS = $('#'+SN.C.S.NoticeDataGeoSelected); + if (NDGS.length > 0) { + NDGS.replaceWith(S); + } + else { + $('#'+SN.C.S.FormNotice).append(S); + } + NDGS = $('#'+SN.C.S.NoticeDataGeoSelected); + NDGS.prepend('<span id="'+SN.C.S.NoticeLocationName+'">Geo</span>'); + + var NLN = $('#'+SN.C.S.NoticeLocationName); + + if ($('#'+SN.C.S.NoticeDataGeo).attr('checked') === true) { + NLN.addClass('processing'); + $('label[for='+SN.C.S.NoticeDataGeo+']').addClass('checked'); + + NDGS.append('<button class="minimize">_</button> <button class="close">×</button>'); + + $('#'+SN.C.S.NoticeDataGeoSelected+' button.close').click(function(){ + $('#'+SN.C.S.NoticeDataGeoSelected).remove(); + $('#'+SN.C.S.NoticeDataGeo).attr('checked', false); + $('label[for='+SN.C.S.NoticeDataGeo+']').removeClass('checked'); + + return false; + }); + + $('#'+SN.C.S.NoticeDataGeoSelected+' button.minimize').click(function(){ + $('#'+SN.C.S.NoticeDataGeoSelected).hide(); + + return false; + }); + + navigator.geolocation.getCurrentPosition( + function(position) { + $('#'+SN.C.S.NoticeLat).val(position.coords.latitude); + $('#'+SN.C.S.NoticeLon).val(position.coords.longitude); + + var data = { + 'lat': position.coords.latitude, + 'lon': position.coords.longitude, + 'token': $('#token').val() + }; + + $.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; + }); + }); + }, + + function(error) { + if (error.PERMISSION_DENIED == 1) { + removeNoticeDataGeo(); + } + } + ); + } + else { + removeNoticeDataGeo(); + } + }).change(); + + var cookieVal = $.cookie(SN.C.S.NoticeLocationCookieName); + NDG.attr('checked', (cookieVal === null || cookieVal == 'true')); + } + } }, NewDirectMessage: function() { |