亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? msghdrviewoverlay.js

?? 現在很火的郵件客戶端軟件thunderbird的源碼
?? JS
?? 第 1 頁 / 共 5 頁
字號:
# -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-# ***** BEGIN LICENSE BLOCK *****# Version: MPL 1.1/GPL 2.0/LGPL 2.1## The contents of this file are subject to the Mozilla Public License Version# 1.1 (the "License"); you may not use this file except in compliance with# the License. You may obtain a copy of the License at# http://www.mozilla.org/MPL/## Software distributed under the License is distributed on an "AS IS" basis,# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License# for the specific language governing rights and limitations under the# License.## The Original Code is Mozilla Communicator client code, released# March 31, 1998.## The Initial Developer of the Original Code is# Netscape Communications Corporation.# Portions created by the Initial Developer are Copyright (C) 1998-1999# the Initial Developer. All Rights Reserved.## Contributor(s):## Alternatively, the contents of this file may be used under the terms of# either the GNU General Public License Version 2 or later (the "GPL"), or# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),# in which case the provisions of the GPL or the LGPL are applicable instead# of those above. If you wish to allow use of your version of this file only# under the terms of either the GPL or the LGPL, and not to allow others to# use your version of this file under the terms of the MPL, indicate your# decision by deleting the provisions above and replace them with the notice# and other provisions required by the GPL or the LGPL. If you do not delete# the provisions above, a recipient may use your version of this file under# the terms of any one of the MPL, the GPL or the LGPL.## ***** END LICENSE BLOCK *****/* This is where functions related to displaying the headers for a selected message in the   message pane live. */////////////////////////////////////////////////////////////////////////////////////// Warning: if you go to modify any of these JS routines please get a code review from// scott@scott-macgregor.org. It's critical that the code in here for displaying// the message headers for a selected message remain as fast as possible. In particular, // right now, we only introduce one reflow per message. i.e. if you click on a message in the thread// pane, we batch up all the changes for displaying the header pane (to, cc, attachements button, etc.) // and we make a single pass to display them. It's critical that we maintain this one reflow per message// view in the message header pane. ////////////////////////////////////////////////////////////////////////////////////const msgHeaderParserContractID		   = "@mozilla.org/messenger/headerparser;1";const abAddressCollectorContractID	 = "@mozilla.org/addressbook/services/addressCollecter;1";const kPersonalAddressbookUri        = "moz-abmdbdirectory://abook.mab";const kRDFServiceContractID          = "@mozilla.org/rdf/rdf-service;1";const kLargeIcon = 32;const kSmallIcon = 16;var gViewAllHeaders = false;var gShowOrganization = false;var gShowLargeAttachmentView = false;var gShowUserAgent = false;var gExtraExpandedHeaders;var gMinNumberOfHeaders = 0;var gDummyHeaderIdIndex = 0;var gCollapsedHeaderViewMode = false;var gBuildAttachmentsForCurrentMsg = false;var gBuildAttachmentPopupForCurrentMsg = true;var gBuiltExpandedView = false;var gBuiltCollapsedView = false;var gOpenLabel;var gOpenLabelAccesskey;var gSaveLabel;var gSaveLabelAccesskey;var gDetachLabel;var gDeleteLabel;var gDetachLabelAccesskey;var gDeleteLabelAccesskey;var gMessengerBundle;var gProfileDirURL;var gIOService;var gShowCondensedEmailAddresses = true; // show the friendly display names for people I know instead of the name + email addressvar gPersonalAddressBookDirectory; // used for determining if we want to show just the display name in email address nodesvar msgHeaderParser = Components.classes[msgHeaderParserContractID].getService(Components.interfaces.nsIMsgHeaderParser);var abAddressCollector = null;// other components may listen to on start header & on end header notifications for each message we display// to do that you need to add yourself to our gMessageListeners array with object that has two properties:// onStartHeaders and onEndHeaders.var gMessageListeners = new Array;// For every possible "view" in the message pane, you need to define the header names you want to// see in that view. In addition, include information describing how you want that header field to be// presented. i.e. if it's an email address field, if you want a toggle inserted on the node in case// of multiple email addresses, etc. We'll then use this static table to dynamically generate header view entries// which manipulate the UI. // When you add a header to one of these view lists you can specify the following properties:// name: the name of the header. i.e. "to", "subject". This must be in lower case and the name of the//       header is used to help dynamically generate ids for objects in the document. (REQUIRED)// useToggle:      true if the values for this header are multiple email addresses and you want a //                 a toggle icon to show a short vs. long list (DEFAULT: false)// useShortView:   (only works on some fields like From). If the field has a long presentation and a//                 short presentation we'll use the short one. i.e. if you are showing the From field and you//                 set this to true, we can show just "John Doe" instead of "John Doe <jdoe@netscape.net>".//                 (DEFAULT: false)// // outputFunction: this is a method which takes a headerEntry (see the definition below) and a header value//                 This allows you to provide your own methods for actually determining how the header value//                 is displayed. (DEFAULT: updateHeaderValue which just sets the header value on the text node)// Our first view is the collapsed view. This is very light weight view of the data. We only show a couple// fields.var gCollapsedHeaderList = [ {name:"subject", outputFunction:updateHeaderValueInTextNode},                             {name:"from", useToggle:true, useShortView:true, outputFunction:OutputEmailAddresses},                             {name:"date", outputFunction:updateHeaderValueInTextNode}];// We also have an expanded header view. This shows many of your more common (and useful) headers.var gExpandedHeaderList = [ {name:"subject"},                             {name:"from", useToggle:true, outputFunction:OutputEmailAddresses},                            {name:"sender", outputFunction:OutputEmailAddresses},                            {name:"reply-to", useToggle:true, outputFunction:OutputEmailAddresses},                            {name:"date"},                            {name:"to", useToggle:true, outputFunction:OutputEmailAddresses},                            {name:"cc", useToggle:true, outputFunction:OutputEmailAddresses},                            {name:"bcc", useToggle:true, outputFunction:OutputEmailAddresses},                            {name:"newsgroups", outputFunction:OutputNewsgroups},                            {name:"followup-to", outputFunction:OutputNewsgroups},                            {name:"content-base"},                            {name:"tags"} ];// Now, for each view the message pane can generate, we need a global table of headerEntries. These// header entry objects are generated dynamically based on the static date in the header lists (see above)// and elements we find in the DOM based on properties in the header lists. var gCollapsedHeaderView = {};var gExpandedHeaderView  = {};// currentHeaderData --> this is an array of header name and value pairs for the currently displayed message.//                       it's purely a data object and has no view information. View information is contained in the view objects.//                       for a given entry in this array you can ask for:// .headerName ---> name of the header (i.e. 'to'). Always stored in lower case// .headerValue --> value of the header "johndoe@netscape.net"var currentHeaderData = {};// For the currently displayed message, we store all the attachment data. When displaying a particular// view, it's up to the view layer to extract this attachment data and turn it into something useful.// For a given entry in the attachments list, you can ask for the following properties:// .contentType --> the content type of the attachment// url --> an imap, or mailbox url which can be used to fetch the message// uri --> an RDF URI which refers to the message containig the attachment// isExternalAttachment --> boolean flag stating whether the attachment is an attachment which is a URL that refers to the attachment locationvar currentAttachments = new Array();// createHeaderEntry --> our constructor method which creates a header Entry // based on an entry in one of the header lists. A header entry is different from a header list.// a header list just describes how you want a particular header to be presented. The header entry// actually has knowledge about the DOM and the actual DOM elements associated with the header.// prefix --> the name of the view (i.e. "collapsed", "expanded")// headerListInfo --> entry from a header list.function createHeaderEntry(prefix, headerListInfo){  var useShortView = false;  var partialIDName = prefix + headerListInfo.name;  this.enclosingBox = document.getElementById(partialIDName + 'Box');  this.textNode = document.getElementById(partialIDName + 'Value');  this.isValid = false;  if ("useShortView" in headerListInfo)  {    useShortView = headerListInfo.useShortView;    if (useShortView)      this.enclosingBox = this.textNode;    else      this.enclosingBox.emailAddressNode = this.textNode;  }  if ("useToggle" in headerListInfo)  {    this.useToggle = headerListInfo.useToggle;    if (this.useToggle) // find the toggle icon in the document    {      this.toggleIcon = this.enclosingBox.toggleIcon;      this.longTextNode = this.enclosingBox.longEmailAddresses;      this.textNode = this.enclosingBox.emailAddresses;    }  }  else   this.useToggle = false;  if (this.textNode)    this.textNode.useShortView = useShortView;  if ("outputFunction" in headerListInfo)    this.outputFunction = headerListInfo.outputFunction;  else    this.outputFunction = updateHeaderValue;}function initializeHeaderViewTables(){  // iterate over each header in our header list arrays and create header entries   // for each one. These header entries are then stored in the appropriate header table  var index;  for (index = 0; index < gCollapsedHeaderList.length; index++)    {      gCollapsedHeaderView[gCollapsedHeaderList[index].name] =         new createHeaderEntry('collapsed', gCollapsedHeaderList[index]);    }    for (index = 0; index < gExpandedHeaderList.length; index++)    {      var headerName = gExpandedHeaderList[index].name;      gExpandedHeaderView[headerName] = new createHeaderEntry('expanded', gExpandedHeaderList[index]);    }        var extraHeaders = gExtraExpandedHeaders.split(' ');    for (index = 0; index < extraHeaders.length; index++)    {      var extraHeader = extraHeaders[index];      gExpandedHeaderView[extraHeader.toLowerCase()] = new createNewHeaderView(extraHeader, extraHeader + ':');    }    if (gShowOrganization)    {      var organizationEntry = {name:"organization", outputFunction:updateHeaderValue};      gExpandedHeaderView[organizationEntry.name] = new createHeaderEntry('expanded', organizationEntry);    }        if (gShowUserAgent)    {      var userAgentEntry = {name:"user-agent", outputFunction:updateHeaderValue};      gExpandedHeaderView[userAgentEntry.name] = new createHeaderEntry('expanded', userAgentEntry);    }}function OnLoadMsgHeaderPane(){  // HACK...force our XBL bindings file to be load before we try to create our first xbl widget....  // otherwise we have problems.  document.loadBindingDocument('chrome://messenger/content/mailWidgets.xml');    // load any preferences that at are global with regards to   // displaying a message...  gShowUserAgent = pref.getBoolPref("mailnews.headers.showUserAgent");  gMinNumberOfHeaders = pref.getIntPref("mailnews.headers.minNumHeaders");  gShowOrganization = pref.getBoolPref("mailnews.headers.showOrganization");  gShowLargeAttachmentView = pref.getBoolPref("mailnews.attachments.display.largeView");  gShowCondensedEmailAddresses = pref.getBoolPref("mail.showCondensedAddresses");  gExtraExpandedHeaders = pref.getCharPref("mailnews.headers.extraExpandedHeaders");  // listen to the   pref.addObserver("mail.showCondensedAddresses", MsgHdrViewObserver, false);  initializeHeaderViewTables();  var deckHeaderView = document.getElementById("msgHeaderViewDeck");  gCollapsedHeaderViewMode = deckHeaderView.selectedIndex == 0;     // dispatch an event letting any listeners know that we have loaded the message pane  var event = document.createEvent('Events');  event.initEvent('messagepane-loaded', false, true);  var headerViewElement = document.getElementById("msgHeaderView");  headerViewElement.dispatchEvent(event);}function OnUnloadMsgHeaderPane(){  pref.removeObserver("mail.showCondensedAddresses", MsgHdrViewObserver);  // dispatch an event letting any listeners know that we have unloaded the message pane  var event = document.createEvent('Events');  event.initEvent('messagepane-unloaded', false, true);  var headerViewElement = document.getElementById("msgHeaderView");  headerViewElement.dispatchEvent(event);}const MsgHdrViewObserver = {  observe: function(subject, topic, prefName)  {    // verify that we're changing the mail pane config pref    if (topic == "nsPref:changed")    {      if (prefName == "mail.showCondensedAddresses")      {        gShowCondensedEmailAddresses = pref.getBoolPref("mail.showCondensedAddresses");        MsgReload();      }    }  }};// The messageHeaderSink is the class that gets notified of a message's headers as we display the message// through our mime converter. var messageHeaderSink = {    onStartHeaders: function()    {      this.mSaveHdr = null;      // every time we start to redisplay a message, check the view all headers pref....      var showAllHeadersPref = pref.getIntPref("mail.show_headers");      if (showAllHeadersPref == 2)      {        gViewAllHeaders = true;      }      else      {        if (gViewAllHeaders) // if we currently are in view all header mode, rebuild our header view so we remove most of the header data        {           hideHeaderView(gExpandedHeaderView);          gExpandedHeaderView = {};          initializeHeaderViewTables();         }                        gViewAllHeaders = false;      }      ClearCurrentHeaders();      gBuiltExpandedView = false;      gBuiltCollapsedView = false;      gBuildAttachmentsForCurrentMsg = false;      gBuildAttachmentPopupForCurrentMsg = true;      ClearAttachmentList();      ClearEditMessageButton();      gMessageNotificationBar.clearMsgNotifications();      for (index in gMessageListeners)        gMessageListeners[index].onStartHeaders();    },

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久狠狠亚洲综合| 亚洲午夜久久久久久久久电影网| 丝袜a∨在线一区二区三区不卡| 欧美性猛片aaaaaaa做受| 亚洲国产成人高清精品| 欧美顶级少妇做爰| 久久se精品一区精品二区| 2欧美一区二区三区在线观看视频| 国产自产视频一区二区三区| 国产精品久久久久久久午夜片 | 欧美日韩一区二区三区在线看 | 国产v日产∨综合v精品视频| 中文字幕视频一区| 在线观看91精品国产入口| 日本强好片久久久久久aaa| 精品日韩一区二区三区 | 黄色日韩三级电影| 国产精品网曝门| 欧美视频一区在线| 麻豆91免费看| 1000精品久久久久久久久| 欧美色倩网站大全免费| 韩国av一区二区三区四区 | 国产亚洲欧美日韩俺去了| 色综合 综合色| 免费成人av在线播放| 国产精品热久久久久夜色精品三区| 色悠悠亚洲一区二区| 韩国女主播成人在线观看| 国产精品电影院| 日韩视频在线永久播放| 91在线码无精品| 久久国产精品99久久久久久老狼| 中文字幕一区二区不卡| 欧美tk—视频vk| 欧美日韩精品二区第二页| 国产精品一卡二卡| 婷婷一区二区三区| 亚洲欧美综合另类在线卡通| 日韩精品一区二区三区老鸭窝| 99国产精品国产精品久久| 韩国三级在线一区| 亚洲不卡在线观看| 亚洲天堂免费看| 国产片一区二区| 亚洲精品一区二区精华| 欧美蜜桃一区二区三区| 91视频免费观看| 国产激情偷乱视频一区二区三区| 日韩经典中文字幕一区| 亚洲精品日韩专区silk| 国产无遮挡一区二区三区毛片日本| 欧美日韩国产高清一区二区| 一本大道久久a久久综合| 丁香婷婷综合网| 国产一区福利在线| 三级在线观看一区二区| 亚洲一级片在线观看| 中文字幕视频一区| 中文成人av在线| 国产视频在线观看一区二区三区 | 欧美国产一区二区| 久久综合给合久久狠狠狠97色69| 91麻豆精品国产91久久久资源速度| 91国偷自产一区二区开放时间| 成人免费av资源| 国产成人福利片| 国产精品一区二区在线观看网站| 久久精品噜噜噜成人88aⅴ| 日本成人在线一区| 午夜精品一区二区三区三上悠亚| 一区二区三区在线视频免费 | 久久久久久免费| 26uuu色噜噜精品一区| 久久婷婷色综合| 国产色91在线| 国产精品久久久爽爽爽麻豆色哟哟| 国产午夜精品久久| 国产精品拍天天在线| 午夜视黄欧洲亚洲| 久久久亚洲精华液精华液精华液| 精品久久一二三区| 免费观看久久久4p| 一区二区三区美女视频| 日韩美女一区二区三区四区| 国产精品乱码一区二三区小蝌蚪| 亚洲福利一区二区| 成人午夜激情影院| 欧美一区二区高清| 136国产福利精品导航| 人人超碰91尤物精品国产| 国产不卡视频在线观看| 欧美电影一区二区| 亚洲女同一区二区| 韩国女主播成人在线观看| 精品视频资源站| 国产精品天美传媒| 极品少妇xxxx精品少妇| 欧美三级日韩在线| 中文av一区二区| 国产真实乱偷精品视频免| 欧美人与z0zoxxxx视频| 综合av第一页| 国产精品夜夜爽| 91精品国产综合久久婷婷香蕉| 日韩美女精品在线| 国产在线播精品第三| 欧美高清视频一二三区 | 欧美国产一区在线| 久色婷婷小香蕉久久| 欧美日韩精品一区二区在线播放| 亚洲色图第一区| 岛国精品在线播放| 久久综合丝袜日本网| 日韩成人免费电影| 欧美色倩网站大全免费| 一区二区三区四区亚洲| 97se亚洲国产综合在线| 国产亚洲视频系列| 国产精品综合网| 欧美一区二区三区免费大片| 婷婷六月综合网| 欧美亚洲国产怡红院影院| 亚洲欧美区自拍先锋| 成人在线视频首页| 国产免费观看久久| 国产大片一区二区| 国产无一区二区| 国产精品亚洲一区二区三区妖精| 精品国产123| 狠狠色狠狠色综合系列| 欧美成人乱码一区二区三区| 日本不卡一区二区三区 | 亚洲三级在线看| 91蜜桃网址入口| 亚洲摸摸操操av| 色天使色偷偷av一区二区| 亚洲色欲色欲www在线观看| 91小视频在线| 亚洲综合视频网| 欧美日韩一区二区欧美激情| 亚洲成人激情av| 欧美一二区视频| 国产尤物一区二区| 国产亚洲午夜高清国产拍精品 | 免费看欧美美女黄的网站| 日韩欧美国产一区二区在线播放| 久久er99热精品一区二区| 精品国产免费人成在线观看| 国产乱码精品1区2区3区| 久久久99精品免费观看不卡| 丁香一区二区三区| 亚洲另类春色国产| 4438x亚洲最大成人网| 精品一区二区在线视频| 国产亚洲一区二区三区| 色一区在线观看| 水野朝阳av一区二区三区| 欧美va亚洲va国产综合| 国产99久久久国产精品免费看| 国产精品的网站| 欧美日韩免费一区二区三区| 免费观看一级特黄欧美大片| 国产日韩av一区| 91免费看视频| 美女一区二区三区在线观看| 国产精品麻豆99久久久久久| 欧美三级资源在线| 韩日欧美一区二区三区| 国产精品久久久久久一区二区三区| 欧美午夜影院一区| 极品美女销魂一区二区三区免费| 国产精品白丝在线| 8x8x8国产精品| 国产99久久久久久免费看农村| 亚洲午夜电影网| 久久网站热最新地址| 欧洲av在线精品| 国产精品亚洲一区二区三区妖精| 一区二区三区美女视频| www国产精品av| 精品视频在线视频| 国产成人精品1024| 日韩精品欧美成人高清一区二区| 国产日韩视频一区二区三区| 欧美日韩一区 二区 三区 久久精品| 极品美女销魂一区二区三区| 亚洲夂夂婷婷色拍ww47| 2023国产精品视频| 精品视频全国免费看| 国产高清不卡一区二区| 婷婷综合另类小说色区| 日韩毛片视频在线看| 精品动漫一区二区三区在线观看| 欧洲人成人精品| av电影在线观看不卡| 国产一区二区美女诱惑| 性感美女久久精品| 亚洲欧美成人一区二区三区| 久久蜜桃一区二区|