黄山四绝指的是什么| 长期腹泻是什么病| ip地址是什么意思| 甲状腺吃什么盐好| 新店开业送什么好| 气胸吃什么药| 反社会人格有什么表现| 自欺欺人是什么生肖| 金字旁的有什么字| 丝瓜为什么会苦| 胃酸恶心想吐什么原因| 回苏灵又叫什么| 1994年是什么年| 脱轨是什么意思| 脚麻吃什么药有效| 什么叫两会| 耳垂长痘痘是什么原因| 体寒吃什么好| 美丽的近义词是什么| 颈动脉斑块吃什么药效果最好| 唐筛临界风险是什么意思| 腮腺炎吃什么药| 蜘蛛痣是什么原因引起的| 芥末是什么味道| 皮肤为什么会痒| lbs什么意思| 辐射是什么意思| 白炽灯属于什么光源| 感悟是什么意思| 被电击后身体会有什么后遗症| 小狗什么时候换牙| 先兆性流产是什么症状| 喉咙疼挂什么科| 酉时左眼跳是什么预兆| 寻麻疹吃什么药| 肺炎衣原体阳性是什么意思| 晕车吃什么| 医院量身高为什么会矮| 静脉注射是什么意思| 淋巴滤泡增生是什么意思严重吗| 吃完狗肉不能吃什么| 总胆红素偏高什么意思| 羲字五行属什么| 怕热是什么体质| 女人什么时候最容易怀孕| 减脂吃什么| 10mg是什么意思| 考研要考什么| 穷奢极欲什么意思| rds医学上什么意思| 做眉毛有什么危害| 梦见打麻将是什么意思| 胃疼喝什么药| 天赋是什么| 阳虚吃什么药| 心电图窦性心动过缓是什么意思| 媚是什么意思| 大蒜泡酒有什么功效| 6月1号是什么星座| 小孩磨牙是什么原因引起的| experiment什么意思| 上海有什么好玩的地方旅游景点| 吃什么回奶| 梦见白猫是什么预兆| 低血糖吃什么好的最快| 血小板低吃什么好补| 打了封闭针后要注意什么事项| 迁坟需要准备什么东西| 72年属什么的生肖| 一个立一个羽读什么| 下肢肿胀是什么原因| 宝宝拉肚子吃什么好| 人中长代表什么| bigbang是什么意思| 软装是什么| 吃什么对神经恢复快速| 灶性肠化是什么意思| 满身红点是什么病| 什么茶减肥效果好| 入木三分是什么生肖| 籺是什么意思| 素肉是什么| 裂隙灯能查出什么眼病| 淋巴结清扫是什么意思| 1927年属什么| 指日可待什么意思| 屁股上有痣代表什么| 驻外大使是什么级别| 肠鸣吃什么药| 梦见吐血是什么预兆| 肿瘤是什么病严重吗| 耳洞疼痛什么原因| 尿血吃什么药| 喝酒吐血是什么原因| 猫猴子是什么| 健康管理是什么专业| mh是什么意思| 被电击后身体会有什么后遗症| 什么是疣体| 撸猫是什么意思| 1967属什么生肖| 半夜口干舌燥是什么原因| 卫生间除臭用什么最好| dna是什么| 白细胞高是什么原因造成的| 偶发室上性早搏是什么意思| facebook是什么意思| 尿液发绿是什么原因| 原味是什么意思| 为什么晚上睡觉会磨牙| 蛊惑是什么意思| 鼠的本命佛是什么佛| 什么花在什么时间开| 心病科主要看什么病| 卡路里什么意思| 温州人为什么会做生意| 什么就是什么造句| 发烧时不宜喝什么饮料| 置换什么意思| 反流性胃炎吃什么药| 脸基尼是什么意思| 海葵是什么| 西宁有什么好玩的| 干扰素是什么药| 小孩血糖高是什么原因引起的| 攀龙附凤是什么生肖| 法不传六耳什么意思| 什么空调省电| 减肥有什么方法| 苍蝇是什么味道| 脑死亡是什么原因引起的| 阑珊处是什么意思| 滥情什么意思| 右肺中叶少许纤维灶是什么意思| 尿泡沫多吃什么药| 男人小腿肿是什么原因| 吃什么补钾| 拔完牙吃什么消炎药| 忘年恋是什么意思| 性质是什么| 意志力什么意思| 请自重是什么意思| 梅毒长什么样子| 10月是什么星座| 肠胃痉挛什么症状| 舌头干涩是什么原因| 蜂蜜为什么会结晶| 龙傲天是什么意思| 4月21日什么星座| 一什么扇子| 丙子日是什么意思| 法西斯是什么| 非那雄胺片是什么药| 遮羞布是什么意思| 无以言表是什么意思| 包皮过长有什么危害| 福瑞祥和是什么意思| 梦见老牛是什么意思| 一九七一年属什么生肖| 小猫踩奶是什么意思| 寒热错杂吃什么中成药| ku是什么单位| 甲磺酸倍他司汀片治什么病| 女性梅毒有什么症状| 儿童咳嗽吃什么药管用| 感觉牙齿松动是什么原因| 宁静什么意思| 巧克力不能和什么一起吃| 低钾血症有什么症状| 站着腰疼是什么原因引起的| 贵州有什么美食| 耳朵嗡嗡响吃什么药| 女性阴毛变白是什么原因| 丑什么意思| 现在什么手机好用| 未分类结晶偏高是什么意思| 神经纤维是什么| 过敏能吃什么| 腰疼是什么原因引起的| 随诊什么意思| 铁剂是什么| 后脖子黑是什么原因| 暗里着迷什么意思| 肝内钙化灶什么意思| 肌酐700多意味着什么| 生日蛋糕上写什么字比较有创意| 你想什么| 长乘宽乘高算的是什么| 儿童身份证需要什么材料| 阴囊上长了几根白毛是什么原因| 猫吃什么| 高抬腿运动有什么好处| 公积金基数是什么意思| 葡挞跟蛋挞有什么区别| 贪是什么意思| 牝是什么意思| 什么颜色的床单有助于睡眠| 肠易激综合症吃什么药| 蛇进家是什么意思| 有结石不能吃什么东西| rts是什么意思| 足是什么结构| 颈椎病引起的头晕吃什么药| 2030年属什么生肖| 什么东西能美白| 什么叫轻度脂肪肝| 扁桃体发炎吃什么中成药| 养尊处优什么意思| 国家为什么要扫黄| 肝腹水有什么症状| 脾虚湿热吃什么中成药| 草酸对人体有什么危害| 炎性结节是什么意思| 梦见自己买衣服是什么意思| 三超是指什么| 蝙蝠吃什么食物| 肾功能三项检查什么| 保家仙都有什么仙| 女人梦见鬼是什么征兆| 翡翠是什么意思| 喜字五行属什么| 前列腺是什么意思| xrd是什么| 淋巴吃什么药可以消除| 刮痧板什么材质的好| 一个土一个阜念什么| 羟基维生素d是什么| 导管扩张是什么意思| 怀璧其罪是什么意思| 生吃洋葱有什么好处| 座山雕什么意思| 花洒不出水什么原因| 华盖什么意思| 啫啫煲为什么念jue| 单飞什么意思| 电脑什么牌子好| 白带有腥味是什么原因| 余事勿取是什么意思| 急性腹泻拉水吃什么药| 拉什么| 同好是什么意思| 咏柳的咏是什么意思| 11.19是什么星座| 武夷肉桂茶属于什么茶| 走胎是什么意思| 中年人手抖是什么原因| 爱情是个什么东西| 爱恨情仇是什么意思| 硼酸是什么| 湿寒吃什么中成药| 什么东西护肝养肝| 小青龙是什么龙虾| 肥达氏反应检查什么病| 胸膜增厚吃什么药| 手脚浮肿是什么原因引起的| 为什么会流产| 泌尿系彩超主要是检查什么| 吃什么东西| 不超过是什么意思| 太公是什么意思| pnh是什么病的简称| pku什么意思| 伤风流鼻涕吃什么药好| 馥字五行属什么| 百度

· MSC地中海邮轮“辉煌号”地中海+巴黎13日之旅

百度 二、河道治理策略1.水质保护在进行河道水体更新的时候,可以通过向城市内河引水的办法来实现,从而使一系列的水质问题得到较好的处理,比如河道淤积、河道变窄以及河道受阻等问题。

This page documents the internals of DiscussionTools for developers of the extension and tools that build on top of it, like JS gadgets or SQL queries.

To learn about common reasons why DiscussionTools might not work as expected on a specific page, see Why can't I reply to this comment?.

Parser

edit

Most DiscussionTools features rely on the talk page comment parser introduced in this extension (no relation to the MediaWiki wikitext parser).

The comment parser takes as input the HTML rendering of the discussion page (produced by either Parsoid or the old wikitext parser), and gives as output a representation of the comments and threads on the page.

Note that DiscussionTools does not deal with the wikitext at all, only with HTML.

Data structures

edit

DiscussionTools recognizes two kinds of items: headings and comments. Other content on the page is not included in the representation.

Headings and comments form a tree structure. Comments can be top-level (represented as replies to headings), or be replies to other comments. Headings can be top-level, or be sub-headings (represented as replies to other headings). A thread is a heading together with its tree of replies.

Each item has the following properties:

  • ID and name, which are used to identify the item in different contexts
  • Range, referencing the HTML DOM nodes where it was detected. The range may begin or end in the middle of an element, and may span multiple elements in different parent nodes.
  • Indentation level (always 0 for headings, 1 for top-level comments, 2+ for replies)
  • References to parent item and reply items

Comments additionally have:

  • Signature ranges, as above, referencing the HTML DOM nodes of signatures
  • Author name
  • Date and time

Headings additionally have:

  • Heading level (1-6)
  • Whether it is a placeholder heading, used when comment items appear before the first heading on the page

Most of this information (notably excluding the ranges / content) is stored in the database used for permalinks. Some of it is also encoded back into the HTML in the formatter, as described below.

Example

edit

Below is an example discussion, and the comment parser's representation of it (pseudocode):

A

B. Matma Rex (talk) 00:09, 24 June 2021 (UTC)

C.
C. Matma Rex (talk) 00:09, 24 June 2021 (UTC)
D. Matma Rex (talk) 00:09, 24 June 2021 (UTC)
E. Matma Rex (talk) 00:09, 24 June 2021 (UTC)
F. Matma Rex (talk) 00:09, 24 June 2021 (UTC)
G. Matma Rex (talk) 00:09, 24 June 2021 (UTC)

H. Matma Rex (talk) 00:09, 24 June 2021 (UTC)

I. Matma Rex (talk) 00:09, 24 June 2021 (UTC)
[
  HeadingItem( { level: 0, range: (h2: A), replies: [
    CommentItem( { level: 1, range: (p: B), replies: [
      CommentItem( { level: 2, range: (li: C, li: C), replies: [
        CommentItem( { level: 3, range: (li: D), replies: [
          CommentItem( { level: 4, range: (li: E), replies: [] },
          CommentItem( { level: 4, range: (li: F), replies: [] },
        ] },
      ] },
      CommentItem( { level: 2, range: (li: G), replies: [] },
    ] },
    CommentItem( { level: 1, range: (p: H), replies: [
      CommentItem( { level: 2, range: (li: I), replies: [] },
    ] },
  ] } )
]

Parsing algorithm

edit

Detecting comments

edit

First step to obtain the above is to find the comments and headings that exist on the page.

  • For each text node in the DOM, excluding those inside blockquotes etc.:
    • If its text contains a timestamp formatted according to the wiki's language, and
    • If the text node containing the timestamp is preceded by a signature, that is a link to a user page, user talk page, or user contributions
    • Output a comment with the following properties:
      • Range beginning at the first "leaf" node following the previous comment, heading, or start of document; and ending at the end of the "paragraph" containing the signature
      • Indentation level computed as the minimum of the indentation of the beginning and end of the range
      • Signature range from the first detected link to the end of the timestamp
      • Author name parsed from the signature
      • Date and time parsed from the timestamp

Parsing timestamps

edit

Timestamps are parsed by an algorithm that reverses the steps taken by MediaWiki to output them. Only timestamps that exactly match the MediaWiki's date formats are accepted, to guarantee that they can be parsed unambigously. DST timezones and language variants are supported.

Threading comments

edit

Comments are assigned as replies to other comments depending on the indentation level.

Assigning ID and name

edit

Item IDs and names are computed based only on the author, date and time, and thread structure. They do not depend on the text of the comment or the heading. This allows identical IDs/names to be assigned to the same comment even if it is modified in later revisions of the page, or the same heading even if it is renamed, and to be identical when language variants are in use.

Item IDs are unique within the revision being parsed. If two items were to be otherwise indistinguishable, they are numbered sequentially.

Item names are consistent across all pages and revisions where the item might appear, even when it's moved or changed.

Indistinguishable items

edit

As a result of the assignment logic above, when multiple comments or headings have the same author, date and time, they will be assigned the same ID (but only if they're in different revisions or pages) and the same name (possible even within a single revision). This is rare, but it does happen.

Some discussion features will treat those comments as if they were the same comment, which may be surprising if they look obviously different to a human. See details below.

To really identify a single item, you must use the revision ID plus the item ID.

Reply tool

edit
edit

The formatter inserts reply links into the DOM in PHP, as well as comment start and end markers.

Care is taken not to insert them in invalid places, like inside a <style> or a <br> tag.

Item properties from the comment tree data structure are included as JSON data attribute on the reply links. Together with the markers, they are later used in JS code to reconstruct the comment tree without running the comment parser.

We use markers instead of directly storing the range to allow some compatibility with other extensions and gadgets that modify the client-side DOM.

Inserting the reply widget

edit

The modifier inserts the reply widget into the DOM in JS, as if the reply widget was a new reply to the comment.

The DOM tree is suitably rearranged to ensure correct indentation level of the reply (wrapper nodes are added, and other nodes may be moved around).

The reply is added below all existing replies to the given comment (and replies to them), with indentation level of the given comment plus 1.

Saving comments

edit

Saving comments uses the same modifier algorithm, implemented in PHP. The contents of each paragraph in the reply are inserted inside a list item node. Then the HTML is converted back to wikitext using Parsoid, which is saved as a new revision of the page.

When replying in wikitext mode, each line of wikitext is added inside a list item node as a transclusion. Parsoid includes the wikitext unchanged in its output.

Why not wikitext

edit

Saving comments does not operate directly on wikitext, but rather uses HTML throughout the process and Parsoid to convert it. This has some benefits and drawbacks.

Benefits:

  • We do not need to maintain a whole separate comment parser and modifier that would implement a similar algorithm for wikitext.
  • The reply widget and the actual reply are placed on the page in the same way, so the "preview" will always match the final result.
  • We can more easily recognize "frames" around the content, such as barnstar/wikilove messages, and add replies outside of them, regardless of the markup they use.
  • It better handles edge cases where a single line of wikitext contains fragments of multiple comments (occasionally occurring when the page was previously edited using visual editor).
  • We will not need to make major changes once multi-line list items are introduced in wikitext.
  • Comments transcluded from other pages can usually be detected and replied to.

Drawbacks:

  • Any Parsoid bugs affect the reply tool and potentially cause content corruption. This was a significant issue at the beginning of the project, but since then we've developed a tool to detect issues, and the Parsing team has been fixing them. (One remaining issue is that Parsoid incorrectly handles pages that contained fostered content in HTML (T240280). The reply tool will refuse to edit such pages.)
  • Parsoid's handling of HTML comments and whitespace has been unintuitive and it required a lot of effort to get it to produce reasonable wikitext.
  • Comments marked as template-generated but not transcluded from other pages usually can't be replied to.

Transcluded comments

edit

When running the comment parser on Parsoid HTML, we can use the information about comment ranges from our comment parser and information about template-generated content from Parsoid HTML to determine whether a comment visible on the page has been transcluded from a different page, and post the reply there.

Parallel implementations

edit

Most of the comment parser, modifier, and data structure code has two implementations: in PHP and JavaScript. It is a historical accident, as the tools were first prototyped in JS to make it easy to test them with live content on Wikipedia, and then reimplemented in PHP to improve performance (particularly to avoid fetching and sending the full page's Parsoid HTML when saving replies). But once we had them, we kept them both: it helps avoid bugs by comparing the two implementations and allows some client-side actions to happen without consulting the server, e.g. inserting the reply widget.

New topic tool

edit

Unlike the reply tool, the new topic tool saves the comment as wikitext, using the existing APIs to add a new section to a page. In visual mode the comment is converted to wikitext first.

Conceptually, in our data structure, adding a new topic thread is the same as adding a new heading and then adding a top-level comment as a reply to that heading. The interface code reuses much of the reply tool by putting that concept into reality. It seemed like a good idea at the time.

Notifications

edit

Subscribing

edit

Users can subscribe to receive notifications about new replies in a topic. We currently only allow subscribing to level 2 headings that have comments directly underneath (not in sub-sections – this may change: T275943, T298617#7695392).

The model could theoretically support subscribing to notifications about replies to any comment or heading. However, it would require much more complexity in the user interface (particularly in managing subscriptions when multiple subscriptions with different states could overlap), so we gave up on it.

Each subscription has the following properties:

  • Subscription item name (sub_item field in SQL). This is a concatenation of the username and timestamp of the first comment under that heading. This is used when generating notifications. Example data: h-Admin-20231223222800
  • Subscription link target, that is the page title (sub_namespace and sub_title) and section title (sub_section) where this item appeared when the subscription was created. This is not used when generating notifications, and may not match where the thread actually appears (if it was archived, or renamed). It's only intended to be used as a human-readable label when managing subscriptions (not implemented yet).
  • State (sub_state), subscribed (1) or unsubscribed (0). Currently unused but intended to be used for unsubscribing from automatic subscriptions.
  • User who is subscribed (sub_user. Corresponds to the user_id)
  • Time when this subscription was created (sub_created)
  • Time when a notification about the item was last sent (sub_notified, which can be null)

This data is stored in a database table called discussiontools_subscription .

Generating notifications

edit

Echo separates the concepts of events and notifications. A single event can results in notifications sent to many users, depending on its user locators (to include users) and user filters (to exclude them).

Whenever an edit to a talk page is saved, Echo compares the previous and new page revision to generate its events, e.g. mentions. DiscussionTools extends this mechanism, and compares the previous and new comment trees to find new comments and generate events for them.

Each event has the following properties:

  • (built-in in Echo) Page title
  • (built-in in Echo) Agent (user who caused the event, by leaving the comment)
  • (built-in in Echo) Section title
  • (built-in in Echo) Page revision
  • Subscription item name. A locator is used to include all users subscribed to it in the notifications. Note that we ignore the page title and section title here, and users will still get notifications if the section was renamed or archived to a different page.
  • New comment's ID and name. The ID is used to show a direct link to the comment. The name is intended to be used in the future to allow linking to the comment if it has been archived to a different page.
  • New comment's content, a snippet of which is shown in the notifications
  • List of users who were mentioned in the comment

This data is stored in one of Echo's database tables, however only the title and agent can be queried directly. Everything else is in a serialized blob.

We generate an event for every new talk page comment, regardless of whether anyone is subscribed to the thread it's in. We generate notifications only for subscribed users.

If the edit would result in an Echo event related to talk pages (that is: mention, mention-summary, or edit-user-talk) as well as a DiscussionTools comment event, we avoid sending double notifications by using a filter to exclude the users who were mentioned and, if the edit was to a user talk page, its owner. Instead we enhance the Echo event with the comment's ID and name to show a direct link to the new comment (rather than just a section where it was added) and the comment's content to show a snippet (unless Echo provided one).

Tracking topics

edit

Sections you subscribe to are identified by the author, date and time of the oldest comment (this is their item name). This allows for sections to be moved, renamed, or archived/unarchived, without losing the subscriptions. It also allows subscriptions to be handled consistently for sections that are transcluded on different pages (e.g. some wikis' village pumps are set up like that).

There are some scenarios where the item name will change, and the connection between the subscriptions and the topic is lost:

  • If the level 2 heading is changed to a level 3 or any other, e.g. because the section is merged in as a sub-section of an existing discussion
  • If an older comment is added to the section, e.g. if a malformed quote is added in a new comment or if an older section is merged into it (we currently ignore comments in sub-sections, but this may change: T298617#7695392)

If you subscribe to a heading whose item name is indistinguishable from another's, everything behaves as if you had subscribed to both – e.g. you'll get notifications for both of them, and unsubscribing from one will also unsubscribe you from the other. This is necessary to handle transcluded sections mentioned above.

Usability enhancements

edit

The changes provided by this feature are intended to make talk pages look more clearly like places where people are commenting.

When enabled, the HTML markup contains two versions of the markup, and CSS classes are used to toggle which one is visible. This increases the HTML size, but avoids splitting the parser cache, and allows the changes to be disabled without reloading the page (this is used by mobile "Read as wiki page" button).

Metatadata related to discussion activity is shown for each topic: link to and date of latest comment, number of comments and number of people in discussion. It is computed based on the structure from the comment parser, and is only shown in sections that contain at least one discussion comment (we currently ignore comments in sub-sections, but this may change: T298617#7695392). Only the data in the comments is considered, not historical information (e.g. someone who fixed a typo in a comment, but didn't leave any comments, is not counted in "people in discussion").

The changes are only applied to in "Talk" and "User talk" namespaces, to avoid unexpected formatting in namespaces that mix content and discussion (e.g. "Wikipedia:" namespace in many projects).

edit
MediaWiki version:
1.39
Gerrit change 771974

When discussion topics get archived, or moved to a different page for some other reason, or when discussion comments are moved to a different place on the page, the normal links to comments break. This affects links in our own notifications, as well as internal links using comment IDs used in wikitext discussions (of the form [[Talk:Blah#c-...]]).

To solve this problem, you can use permanent links of the form [[Special:GoToComment/c-...]]. The special page will redirect to the current location of the comment. This only works when $wgDiscussionToolsEnablePermalinksBackend is enabled.

Edge cases

edit

In some rare cases we might not be able to redirect to the "current location" for the comment (or heading).

It might not be visible anywhere, because:

  • It never existed in the first place, and the link is wrong
  • It has been removed from the page (removing comments outright is rare, but occasionally done for off-topic, redundant or offensive comments)
  • It has been edited in a way that breaks our identification (e.g. deleting and re-adding a signature)
  • It was supposed to be archived/moved by cut-and-paste, but something went wrong with the second half of the operation and it was just deleted
  • The discussion item database hasn't been populated for that page.

Or it might be visible in more than one place, because:

  • It is actually two indistinguishable comments on different pages (with the same author, date and time)
  • It was supposed to be archived/moved by cut-and-paste, but something went wrong with the first half of the operation and it was just copied
  • It might be transcluded on multiple pages (we ignore transclusions when looking for the redirect target, so this doesn't lead to the scenario below)

Or it might be older than the permalinks feature (it only has data about comments added after it has been deployed – unless we back-fill the data for older comments, this hasn't been decided yet).

In these cases the permanent link will instead redirect to Special:FindComment, which displays as much information as possible to help you figure out what happened:

  • A link to the most recent revision containing the comment on each page where the comment has ever appeared (unless the page has been deleted or the revision has been hidden)
  • A note if it's no longer in the latest revision of the page
  • A note if it has only been transcluded there

Discussion item database

edit

This feature is backed by a database of comment metadata. For every comment ID and name that has ever appeared on wiki pages (ever since the feature was enabled), we store every page title on which it appeared, and the oldest and newest revision in which it appeared. This information is generated entirely from the wikitext and there's no API to edit it (like the pagelinks table).

The data is generated/updated as a part of refreshlinks jobs. Under normal circumstances these updates are small (just recording the comments that have been added or removed on a page since the last edit or template refresh). However, right after the feature is enabled, the relevant database tables are empty; any refreshlinks job will cause the information about all comments on the page to be generated. To populate the data of all pages after enabling the feature, the persistRevisionThreadItems.php maintenance script must be run. Otherwise, it will be populate when talk pages get edited directly or indirectly as part of template changes, which may cause overload if a template used on many talk pages is edited (phab:T334258).

The database also includes some additional information:

This is a subset of the comment parser data structure; notably excluding the content of the comment/heading. We will use it to improve the performance of features that previously needed to run the comment parser repeatedly on old revisions (e.g. checking for new comments while the user is replying, generating notifications). It maybe also become useful in the future to measure talk page usage (e.g. how many people comment in topics, or how long it takes until topics are archived).

To save disk space, only data about the oldest and newest revisions of items is kept in the discussiontools_item_revisions table. After the page is edited and the comment appears in a newer revision of the page, the row for the older revision (previously newest) is deleted.

You can find a few examples in the PHPUnit integration tests of the extension.

  • Simple example
  • Archived section
  • Indistinguishable comments
  • Transcluded section
  • Changed comment indentation
  • Changed heading level

Each directory contains a MediaWiki dump that can be imported in to your wiki, and JSON dumps of the database tables produced by importing it.

仓鼠和老鼠有什么区别 乳房疼痛吃什么消炎药 什么宽带网速快又便宜 全价猫粮是什么意思 沙蟹吃什么
宝宝手心热是什么原因 肚子隐隐作痛什么原因 外科主要看什么病 正常人为什么传导阻滞 动脉夹层什么意思
秋天有什么水果 胎儿腹围偏大说明什么 母子健康手册有什么用 日本人为什么喜欢喝冰水 qy是什么意思
滋养细胞疾病是什么病 频繁流鼻血是什么病的前兆 facebook是什么意思 中药用什么锅熬效果最佳 什么叫根管治疗
婴儿足底采血查什么hcv9jop1ns0r.cn vvip是什么意思sanhestory.com 乳腺彩超能查出什么hcv8jop5ns8r.cn 红配什么颜色最好看hcv8jop4ns3r.cn 孕妇吃红枣对胎儿有什么好处hcv7jop6ns4r.cn
牛奶什么时候喝hcv7jop9ns4r.cn 高血压吃什么hkuteam.com 什么鱼刺少hcv8jop0ns5r.cn 异常灌注是什么意思hcv9jop1ns6r.cn 褒义词是什么意思hcv9jop6ns8r.cn
阳虚吃什么中成药hcv9jop5ns9r.cn 羊宝是什么hkuteam.com 孕妇为什么不能吃桃子hcv8jop1ns5r.cn 胃热是什么原因引起的hcv8jop0ns7r.cn 酉是什么字hcv7jop5ns4r.cn
痛经喝什么药hcv7jop5ns0r.cn 隔空是什么意思hcv8jop0ns5r.cn 怀孕早期有什么症状hcv8jop1ns4r.cn 崖柏手串有什么功效hcv9jop6ns2r.cn 后背容易出汗是什么原因hcv8jop4ns5r.cn
百度