2017-03-12 6 views
-1

私は基本的にGmail APIを使用して自分宛に機能を送信し返信します。問題は返信セクションにあります。私は、受信トレイ(最大カウント:10)に表示されるすべてのメッセージに対してdivを動的に作成するためにjQueryを使用しています。div(メールリンクをクリックすると表示される任意の1つ)件名、返信、閉じるボタンにはmodal-header div、コンテンツを表示するにはiframemodal-body divがあります。Javascriptを使用して現在表示されている要素のIDを検出するにはどうすればよいですか?

First set of divs

The "#message-modal-"+message.id window that pops up and becomes visible when I click on a link; this is what I want to fade out

var message1; 
 

 
function appendMessageRow(message) { 
 
    $('.table-inbox tbody').append(
 
    '<tr>\ 
 
      <td>' + getHeader(message.payload.headers, 'From') + '</td>\ 
 
      <td>\ 
 
       <a href="#message-modal-' + message.id + 
 
    '" data-toggle="modal" id="message-link-' + message.id + '">' + 
 
    getHeader(message.payload.headers, 'Subject') + 
 
    '</a>\ 
 
      </td>\ 
 
      <td>' + getHeader(message.payload.headers, 'Date') + '</td>\ 
 
      </tr>' 
 
); 
 

 
    $('body').append(
 
    '<div class="modal fade" id="message-modal-' + message.id + 
 
    '" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">\ 
 
      <div class="modal-dialog modal-lg">\ 
 
       <div class="modal-content">\ 
 
\t \t \t \t <div class="modal-header">\ 
 
        <h4 class="modal-title" id="myModalLabel">' + 
 
    getHeader(message.payload.headers, 'Subject') + 
 
    '</h4>\ 
 
\t \t \t \t \t <button type="button"\ 
 
          class="close"\ 
 
          data-dismiss="modal"\ 
 
          aria-label="Close" style="float:right;">\ 
 
\t \t \t \t \t <span aria-hidden="true">&times;</span></button>\ 
 
\t \t \t \t \t <span></span>\ 
 
\t \t \t \t \t <a data-toggle="modal" href="#reply-modal" id="reply-button" class="btn btn-primary">Reply</a>\ 
 
       </div>\ 
 
       <div class="modal-body">\ 
 
        <iframe id="message-iframe-' + message.id + '" srcdoc="<p>Loading...</p>">\ 
 
        </iframe>\ 
 
       </div>\ 
 
       </div>\ 
 
      </div>\ 
 
      </div>' 
 
); 
 

 
    $('#message-link-' + message.id).on('click', function() { 
 
    var ifrm = $('#message-iframe-' + message.id)[0].contentWindow.document; 
 
    $('body', ifrm).html(getBody(message.payload)); 
 
    message1 = message; 
 
    }); 
 

 
    $('#reply-button).on(' 
 
    click ',function(){ 
 
    $("#reply-to").val(getHeader(message1.payload.headers, 'From')); $("#reply-subject").val('RE: ' + getHeader(message1.payload.headers, 'Subject')); $("#message-modal-" + message1.id).fadeOut(); $('div.modal-backdrop.fade.in').fadeOut(); 
 
    }); 
 
}

私は中 'に' と '件名' フィールドを記入します関数を呼び出すために返信ボタンを使用しますreply-modal返信ボタンはです。タグhref =#reply-modal)は、message-modal-message.id divが消えると表示されます。問題は、私がフェードアウトする必要があるこのdivのidを得ることができないことです(そのグレーの背景と一緒に)。

また、messageオブジェクト全体が必要で、クリックされたメッセージリンクのmessage.idではなく、新しく登場したreply-modal divに 'To'と 'Subject'を転送できるようになりました。しかし、それはクリックされたメッセージのmessage.idを取得するのではなく、受信トレイページに表示されたメールのリストの最後のものを取得するので、message.idが正しくないため、#message-modal-message.idはフェードアウトしません。同様に、reply-modal divの 'To'と 'From'フィールドには、リスト内の最後のメールの情報も含まれています。開いているメールは問題ありません。 message-modal-message.id divが消えないので、reply-modal divがその背後に表示され、reply-modal divを見るためにdivを閉じる必要があります。 私はjQueryセレクタメソッド$('#reply-modal').on('click',..の代わりに外部にJS機能を持たせようとしましたが、できませんでした。

基本的に メッセージを開いて表示すると、メッセージオブジェクトはどのように表示されますか。

The reply box that I would want the 'To' and 'Subject' headers from <code>message.payload</code> to show in

答えて

0

これはまさに私が話していたものです。申し訳ありませんが、その質問を理解しようとしている間に混乱のいくつかの並べ替えを作成した場合は、質問にも全体のコードを貼り付けることができませんでした。

我々はまた切り開く新しい返信フォームに必要なデータを渡すために2つの重要な変数reply-toreply-subjectを用いた表示ページへdiv sと追加したすべてのメッセージのためにそこにする必要があり「返信」ボタン。

以前は不可能だった 'メッセージ表示' divの終了は、今すぐアクセス可能なメッセージIDにもリンクされました。

他のすべてはきれいです。返信を送信するために必要な機能は、新しい電子メールを送信する機能と同じであり、コードの最後にあります。

「返信」ボタンをクリックすると、現在表示されているメッセージのメッセージIDを取得できませんでした。これは回避策よりも「優れた」解決策ですが、私が望んでいたことができたら、人は短くなります!

<!doctype html> 
 
<html> 
 

 
<head> 
 
    <title>Gmail API demo</title> 
 
    <meta charset="UTF-8"> 
 

 
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> 
 
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css"> 
 
    <style> 
 
    iframe { 
 
     width: 100%; 
 
     border: 0; 
 
     min-height: 80%; 
 
     height: 600px; 
 
     display: flex; 
 
    } 
 
    </style> 
 
</head> 
 

 
<body> 
 
    <div class="container"> 
 
    <h1>Gmail API demo</h1> 
 

 
    <button id="authorize-button" class="btn btn-primary hidden">Authorize</button> 
 

 
    <a href="#compose-modal" data-toggle="modal" id="compose-button" class="btn btn-primary pull-right hidden">Compose</a> 
 

 

 
    <table class="table table-striped table-inbox hidden"> 
 
     <thead> 
 
     <tr> 
 
      <th>From</th> 
 
      <th>Subject</th> 
 
      <th>Date/Time</th> 
 
     </tr> 
 
     </thead> 
 
     <tbody></tbody> 
 
    </table> 
 
    </div> 
 

 
    <div class="modal fade" id="compose-modal" tabindex="-1" role="dialog"> 
 
    <div class="modal-dialog modal-lg"> 
 
     <div class="modal-content"> 
 
     <div class="modal-header"> 
 
      <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
 
\t \t \t <span aria-hidden="true">&times;</span> 
 
\t \t \t </button> 
 
      <h4 class="modal-title">Compose</h4> 
 
     </div> 
 
     <form onsubmit="return sendEmail();"> 
 
      <div class="modal-body"> 
 
      <div class="form-group"> 
 
       <input type="email" class="form-control" id="compose-to" placeholder="To" required /> 
 
      </div> 
 

 
      <div class="form-group"> 
 
       <input type="text" class="form-control" id="compose-subject" placeholder="Subject" required /> 
 
      </div> 
 

 
      <div class="form-group"> 
 
       <textarea class="form-control" id="compose-message" placeholder="Message" rows="10" required></textarea> 
 
      </div> 
 
      </div> 
 
      <div class="modal-footer"> 
 
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
 
      <button type="submit" id="send-button" class="btn btn-primary">Send</button> 
 
      </div> 
 
     </form> 
 
     </div> 
 
    </div> 
 
    </div> 
 

 
    <div class="modal fade" id="reply-modal" tabindex="-1" role="dialog"> 
 
    <div class="modal-dialog modal-lg"> 
 
     <div class="modal-content"> 
 
     <div class="modal-header"> 
 
      <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
 
\t \t \t <span aria-hidden="true">&times;</span> 
 
\t \t \t </button> 
 
      <h4 class="modal-title">Reply</h4> 
 
     </div> 
 
     <form onsubmit="return sendReply();"> 
 
      <div class="modal-body"> 
 
      <div class="form-group"> 
 
       <input type="email" class="form-control" id="reply-to" required disabled/> 
 
      </div> 
 

 
      <div class="form-group"> 
 
       <input type="text" class="form-control" id="reply-subject" required /> 
 
      </div> 
 

 
      <div class="form-group"> 
 
       <textarea class="form-control" id="reply-message" placeholder="Message" rows="10" required></textarea> 
 
      </div> 
 
      </div> 
 
      <input type="hidden" id="reply-message-id" /> 
 
      <div class="modal-footer"> 
 
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
 
      <button type="submit" id="reply-button" class="btn btn-primary">Send</button> 
 
      </div> 
 
     </form> 
 
     </div> 
 
    </div> 
 
    </div> 
 

 

 
    <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> 
 
    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 
 
    <script src="withinViewport.js"></script> 
 
    <script src="jquery.withinviewport.js"></script> 
 
    <script type="text/javascript"> 
 
    var clientId = 'YOUR_CLIENT_ID.apps.googleusercontent.com'; 
 
    var apiKey = 'YOUR_API_KEY'; 
 
    var scopes = 'https://www.googleapis.com/auth/gmail.readonly'; 
 

 
    function handleClientLoad() { 
 
     gapi.client.setApiKey(apiKey); 
 
     window.setTimeout(checkAuth, 1); 
 
    } 
 

 
    function checkAuth() { 
 
     gapi.auth.authorize({ 
 
     client_id: clientId, 
 
     scope: scopes, 
 
     immediate: true 
 
     }, handleAuthResult); 
 
    } 
 

 
    function handleAuthClick() { 
 
     gapi.auth.authorize({ 
 
     client_id: clientId, 
 
     scope: scopes, 
 
     immediate: false 
 
     }, handleAuthResult); 
 
     return false; 
 
    } 
 

 
    function handleAuthResult(authResult) { 
 
     if (authResult && !authResult.error) { 
 
     loadGmailApi(); 
 
     $('#compose-button').removeClass("hidden"); 
 
     $('#authorize-button').remove(); 
 
     $('.table-inbox').removeClass("hidden"); 
 
     } else { 
 
     $('#authorize-button').removeClass("hidden"); 
 
     $('#authorize-button').on('click', function() { 
 
      handleAuthClick(); 
 
     }); 
 
     } 
 
    } 
 

 
    function loadGmailApi() { 
 
     gapi.client.load('gmail', 'v1', displayInbox); 
 
    } 
 

 
    function displayInbox() { 
 
     var request = gapi.client.gmail.users.messages.list({ 
 
     'userId': 'me', 
 
     'labelIds': 'INBOX', 
 
     'maxResults': 10 
 
     }); 
 
     request.execute(function(response) { 
 
     $.each(response.messages, function() { 
 
      var messageRequest = gapi.client.gmail.users.messages.get({ 
 
      'userId': 'me', 
 
      'id': this.id 
 
      }); 
 
      messageRequest.execute(appendMessageRow); 
 
     }); 
 
     }); 
 
    } 
 

 
    function appendMessageRow(message) { 
 
     var reply_to = (getHeader(message.payload.headers, 'Reply-to') !== '' ? getHeader(message.payload.headers, 'Reply-to') : getHeader(message.payload.headers, 'From')).replace(/\"/g, '&quot;'); 
 
     var reply_subject = 'Re: ' + getHeader(message.payload.headers, 'Subject').replace(/\"/g, '&quot;'); 
 
     $('.table-inbox tbody').append(
 
     '<tr>\ 
 
      <td>' + getHeader(message.payload.headers, 'From') + '</td>\ 
 
      <td>\ 
 
       <a href="#message-modal-' + message.id + 
 
     '" data-toggle="modal" id="message-link-' + message.id + '">' + 
 
     getHeader(message.payload.headers, 'Subject') + 
 
     '</a>\ 
 
      </td>\ 
 
      <td>' + getHeader(message.payload.headers, 'Date') + '</td>\ 
 
      </tr>' 
 
    ); 
 

 
     $('body').append(
 
     '<div class="modal fade" id="message-modal-' + message.id + 
 
     '" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">\ 
 
      <div class="modal-dialog modal-lg">\ 
 
       <div class="modal-content">\ 
 
\t \t \t \t <div class="modal-header">\ 
 
        <h4 class="modal-title" id="myModalLabel">' + 
 
     getHeader(message.payload.headers, 'Subject') + 
 
     '</h4>\ 
 
\t \t \t \t \t <button type="button"\ 
 
          class="close"\ 
 
          data-dismiss="modal"\ 
 
          aria-label="Close" style="float:right;">\ 
 
\t \t \t \t \t <span aria-hidden="true">&times;</span></button>\ 
 
\t \t \t \t \t <span></span>\ 
 
       </div>\ 
 
       <div class="modal-body">\ 
 
        <iframe id="message-iframe-' + message.id + '" srcdoc="<p>Loading...</p>">\ 
 
        </iframe>\ 
 
\t \t \t \t <div class="modal-footer">\ 
 
\t \t \t <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>\ 
 
\t \t \t <button type="button" class="btn btn-primary reply-button" data-dismiss="modal" data-toggle="modal" data-target="#reply-modal"\ 
 
\t \t \t onclick="fillInReply(\'' + reply_to + '\',\'' + reply_subject + '\',\'' + getHeader(message.payload.headers, 'Message-ID') + '\');">Reply</button>\ 
 
\t \t \t </div> \t \ 
 
       </div>\ 
 
      </div>\ 
 
\t \t \t </div>\ 
 
      </div>' 
 
    ); 
 

 

 
     $('#message-link-' + message.id).on('click', function() { 
 
     var ifrm = $('#message-iframe-' + message.id)[0].contentWindow.document; 
 
     $('body', ifrm).html(getBody(message.payload)); 
 
     }); 
 
    } 
 

 

 

 
    function getHeader(headers, index) { 
 
     var header = ''; 
 
     $.each(headers, function() { 
 
     if (this.name === index) { 
 
      header = this.value; 
 
     } 
 
     }); 
 
     return header; 
 
    } 
 

 
    function getBody(message) { 
 
     var encodedBody = ''; 
 
     if (typeof message.parts === 'undefined') { 
 
     encodedBody = message.body.data; 
 
     } else { 
 
     encodedBody = getHTMLPart(message.parts); 
 
     } 
 
     encodedBody = encodedBody.replace(/-/g, '+').replace(/_/g, '/').replace(/\s/g, ''); 
 
     return decodeURIComponent(escape(window.atob(encodedBody))); 
 
    } 
 

 
    function getHTMLPart(arr) { 
 
     for (var x = 0; x <= arr.length; x++) { 
 
     if (typeof arr[x].parts === 'undefined') { 
 
      if (arr[x].mimeType === 'text/html') { 
 
      return arr[x].body.data; 
 
      } 
 
     } else { 
 
      return getHTMLPart(arr[x].parts); 
 
     } 
 
     } 
 
     return ''; 
 
    } 
 

 
    function sendEmail() { 
 
     $('#send-button').addClass('disabled'); 
 

 
     sendMessage({ 
 
      'To': $('#compose-to').val(), 
 
      'Subject': $('#compose-subject').val() 
 
     }, 
 
     $('#compose-message').val(), 
 
     composeTidy 
 
    ); 
 
     return false; 
 
    } 
 

 
    function sendMessage(headers_obj, message, callback) { 
 
     var email = ''; 
 

 
     for (var header in headers_obj) 
 
     email += header += ": " + headers_obj[header] + "\r\n"; 
 

 
     email += "\r\n" + message; 
 

 
     var sendRequest = gapi.client.gmail.users.messages.send({ 
 
     'userId': 'me', 
 
     'resource': { 
 
      'raw': window.btoa(email).replace(/\+/g, '-').replace(/\//g, '_') 
 
     } 
 
     }); 
 

 
     return sendRequest.execute(callback); 
 
    } 
 

 
    function fillInReply(to, subject, message_id) { 
 
     $('#reply-to').val(to); 
 
     $('#reply-subject').val(subject); 
 
     $('#reply-message-id').val(message_id); 
 
    } 
 

 
    function sendReply() { 
 
     $('#reply-button').addClass('disabled'); 
 
     sendMessage({ 
 
      'To': $('#reply-to').val(), 
 
      'Subject': $('#reply-subject').val(), 
 
      'In-Reply-To': $('#reply-message-id').val() 
 
     }, 
 
     $('#reply-message').val(), 
 
     replyTidy 
 
    ); 
 
     return false; 
 
    } 
 

 

 

 
    function replyTidy() { 
 
     $('#reply-modal').modal('hide'); 
 
     $('#reply-message').val(''); 
 
     $('#reply-button').removeClass('disabled'); 
 
    } 
 

 

 
    function composeTidy() { 
 
     $('#compose-modal').modal('hide'); 
 

 
     $('#compose-to').val(''); 
 
     $('#compose-subject').val(''); 
 
     $('#compose-message').val(''); 
 

 
     $('#send-button').removeClass('disabled'); 
 
    } 
 
    </script> 
 
    <script src="https://apis.google.com/js/client.js?onload=handleClientLoad"></script> 
 
</body> 
 

 
</html>

関連する問題