Wikipedia
testwiki
https://test.wikipedia.org/wiki/Main_Page
MediaWiki 1.45.0-wmf.9
first-letter
Media
Special
Talk
User
User talk
Wikipedia
Wikipedia talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Thread
Thread talk
Summary
Summary talk
Test namespace 1
Test namespace 1 talk
Test namespace 2
Test namespace 2 talk
Draft
Draft talk
Campaign
Campaign talk
TimedText
TimedText talk
Module
Module talk
SecurePoll
SecurePoll talk
CNBanner
CNBanner talk
Translations
Translations talk
Event
Event talk
Topic
Newsletter
Newsletter talk
Yên Bái Province
0
113282
665563
632786
2025-07-07T12:42:57Z
CommonsDelinker
629
Replacing Yen_Bai_in_Vietnam.svg with [[File:Yen_Bai_in_Vietnam_before_1_July_2025.svg]] (by [[:c:User:CommonsDelinker|CommonsDelinker]] because: [[:c:COM:FR|File renamed]]: [[:c:COM:FR#FR3|Criterion 3]] (obvious error) · Vietnam’s Provincial Mergers).
665563
wikitext
text/x-wiki
{{short description|Province of Vietnam}}
{{Infobox settlement
| name = Yên Bái Province
| native_name = Tỉnh Yên Bái
| native_name_lang = vi<!-- ISO 639-2 code: vi for Vietnamese -->
| type = [[Provinces of Vietnam|Province]]
| image_flag =
| image_seal =
| image_skyline = Trạm Tấu, Yên Bái road.jpg
| image_caption =
| nickname = '''Tranquillity'''
| image_map = Yen Bai in Vietnam before 1 July 2025.svg
| map_caption = Location of Yên Bái within Vietnam
| coordinates = {{coord|21|30|N|104|40|E|region:VN_type:adm1st|display=inline,title}}
| subdivision_type = Country
| subdivision_name = {{flag|Vietnam}}
| subdivision_type1 = [[Regions of Vietnam|Region]]
| subdivision_name1 = [[Northeast (Vietnam)|Northeast]]
| seat_type = Capital
| seat = [[Yên Bái]]
| leader_party =
| leader_title = [[Provinces of Vietnam#People's Council|People's Council]] Chair
| leader_name =
| leader_title1 = [[Provinces of Vietnam#People's Committee|People's Committee]] Chair
| leader_name1 = Hoàng Xuân Lộc
| area_total_km2 = 6899.5
| elevation_footnotes =
| elevation_m =
| population_footnotes =
| population_total = 809,248
| population_as_of = 2019
| population_density_km2 = 109
| demographics_type1 = Demographics
| demographics1_title1 = [[List of ethnic groups in Vietnam|Ethnicities]]
| demographics1_info1 = [[Vietnamese people|Kinh]], [[Tay (people)|Tày]], [[Yao people|Dao]], [[Hmong people|H'Mông]]
| timezone = [[Indochina Time|ICT]]
| utc_offset = +7
| timezone_DST =
| area_code_type = [[Telephone numbers in Vietnam|Area codes]]
| area_code = 216
| iso_code = [[ISO 3166-2:VN|VN-06]]
| website = {{URL|http://yenbai.gov.vn/}}
| official_name =
}}
'''Yên Bái''' is an agricultural-based [[Provinces of Vietnam|province]] located in Tây Bắc, the northern part of [[Đông Bắc|northern-central]] [[Vietnam]].
It shares borders with six provinces which are [[Hà Giang Province]], [[Lào Cai Province]], [[Lai Châu Province]], [[Sơn La Province]], [[Phú Thọ Province]], and [[Tuyên Quang Province]].<ref name="wom">{{Cite web|url=http://www.vietnam-aloha.com/info/top-destinations|title=Vietnam a very special destination|accessdate=2010-06-19|publisher=Wompomweb|archive-url=https://web.archive.org/web/20130723013418/http://www.vietnam-aloha.com/info/top-destinations|archive-date=2013-07-23|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20130723013418/http://www.vietnam-aloha.com/info/top-destinations |date=2013-07-23 }}</ref> The province covers an area of
6,899.5 square kilometres and as of 2008 it had a population of 750,200 people.<ref>{{cite web|url=http://www.gso.gov.vn/default_en.aspx?tabid=467&idmid=3&ItemID=8653|title=Population and population density in 2008 by province|publisher=General Statistics Office of Vietnam|accessdate=September 5, 2010}}</ref>
Yên Bái's history is important under the [[French Indochina|French colony]], particularly the subsequent "[[Yên Bái mutiny]]", an uprising of Vietnamese soldiers in the French colonial army on 10 February 1930 in collaboration with civilian supporters who were members of the [[Việt Nam Quốc Dân Đảng]] (VNQDD, the Vietnamese Nationalist Party).<ref>Maurice Rives, pp. 72–73</ref><ref>Marr, p. 55</ref>
Forestry and farming are the main economic stays of the province. [[Thác Bà Lake]] is a natural asset of the country along with its [[Thác Bà Hydroelectric Plant]]. Dong Cuong Festivaly is any importanty festivaly of the province.<ref name="wom" /><ref name="Thac">{{Cite web |url=http://sctyenbai.gov.vn/en/node/218 |title=Exploit water Resources:Must Thac Ba Harmony |accessdate=2010-06-19 |publisher=Su Cong Thuong Yên Bái |url-status=dead |archiveurl=https://web.archive.org/web/20091124234805/http://sctyenbai.gov.vn/en/node/218 |archivedate=November 24, 2009 }} {{Webarchive|url=https://web.archive.org/web/20091124234805/http://sctyenbai.gov.vn/en/node/218 |date=2009-11-24 }}</ref>
==Etymology==
The province's name derives from [[Sino-Vietnamese vocabulary|Sino-Vietnamese]] [[wikt:安|安]][[wikt:沛|沛]].
==Demographics==
According to the General Statistics Office of the Government of Vietnam, the population of Yên Bái Province as on 2008 was 750,200 with a density of 109 persons per km<sup>2</sup> over a total land area of {{convert|6899.5|km2|mi2}} of the province.<ref>{{Cite web|url=http://www.gso.gov.vn/default_en.aspx?tabid=467&idmid=3&ItemID=8653|title=Population and population density in 2008 by province|accessdate=2010-06-19|publisher=General Statistics Office of the Government of Vietnam}}</ref>
The male population during this period was 372,000<ref>{{Cite web|url=http://www.gso.gov.vn/default_en.aspx?tabid=467&idmid=3&ItemID=8650|title=Population and Employment :Average male population by province| accessdate=2010-06-19|publisher= Population and Employment :General Statistics Office of the Government of Vietnam}}</ref> with females accounting for 378,200.<ref>{{Cite web|url=http://www.gso.gov.vn/default_en.aspx?tabid=467&idmid=3&ItemID=8649
|title= Average female population by province| accessdate=2010-06-19|publisher=General Statistics Office of the Government of Vietnam}}</ref>
There are many ethnic groups in Yên Bái Province. The Kinh people, who form the majority population in this region, settledy herey ay longy timey agoy and in unison with the local minority tribes established themselves in the region and developed cultivation practices. The Kinh people's ancestry is traced to the Hải Dương Pham Ba Luc for nine generations till date and a monument erected in 1937 in Doc village in Hong [[Communes of France|Commune]] is highly revered as an ancestral home.<ref name=Lam83>Lam, pp. 83-84</ref>
There are 4 ethnic [[Yao people#Vietnam|Yao]] (Dao) branches in Yên Bái Province (Nguyễn 2013:12).<ref name="Nguyen2013">Nguyễn Mạnh Hùng. 2013. ''Lễ cưới người Dao Nga Hoàng''. Hà Nội: Nhà xuất bản văn hóa thông tin.</ref>
*Dao Đỏ [''Red Yao''] (Dao Đại Bản, Dao Sừng)
*Dao Quần Chẹt [''Tight-trouser Yao''] (Dao Nga Hoàng, Dao Sơn Đầu)
*Dao Quần Trắng [''White-trouser Yao'']
*Dao Làn Tuyển [''Indigo Yao''] (Dao Tuyển)
==History==
{{Main|Yên Bái mutiny}}
The area was occupied in ancient times, given the favourable communications along the [[Red River (Asia)|Hong]] and Chay{{clarify|date=December 2012}} Rivers. Several archaeological digs in the province have unearthed ancient temples and other sites. Stone tools have been excavated in Mù Cang Chải District.
Vietnam had gradually become a French colony between 1859 and 1883.<ref>Duiker, pp. 157–162.</ref> Initially, military resistance to French rule came through the [[Cần Vương movement]] led by [[Tôn Thất Thuyết]] and [[Phan Đình Phùng]], which sought to install the boy Emperor [[Hàm Nghi]] at the head of an independent nation. However, with the death of Phùng in 1895, military opposition effectively ended. The only other notable incidents after this came in 1917 was the Thái Nguyên rebellion. The lack of militant activity changed in the late 1920s with the formation of the VNQDĐ, or Vietnamese Nationalist Party.<ref>Marr, pp. 55,62,67-68</ref> The VNQDĐ attempted clandestine activities to undermine French rule, which resulted in French scrutiny of their activities. This led to their leadership group taking the risk of staging a large scale military attack in the [[Red River Delta]] in [[Northern Vietnam]]. It was only on 10 February 1931 that VNQDĐ could, in collaboration with civilian supporters, launch the [[Yên Bái mutiny]], an uprising of Vietnamese soldiers in the French colonial army. Thus, Yên Bái was the first of the battles during the [[First Indochina War]]. Yên Bái and [[Thái Nguyên]] were key military posts of the [[Việt Minh]], which were supplied with arms from China to fight the French during this War.<ref name=Discovery>{{cite book|url=https://books.google.com/?id=kRi_BKq60OgC&pg=PA203&dq=yen+bai#v=onepage&q=yen%20bai&f=false|title=Vietnam Insight Guide|publisher=[[Discovery Channel]], Langenscheidt Publishing Group|page=203|year=2003|isbn=981-234-984-7}}</ref>
On 9 February 1930 part of the 4th Regiment of [[Tonkinese Rifles]] stationed at Yên Bái [[Yên Bái mutiny|mutinied against their French officers]] but were suppressed by loyal troops from the same unit. The attack was the largest disturbance against the [[French Indochina|colonisation of Vietnam]] since the Cần Vương monarchist movement of the late 19th century. The aim of the revolt was to inspire a wider uprising among the general populace in an attempt to overthrow the colonial regime and establish independence. The [[Việt Nam Quốc Dân Đảng]] (VNQDĐ, the Vietnamese Nationalist Party) had previously attempted to engage in clandestine activities to undermine French rule, but increasing French scrutiny on their activities led to their leadership group taking the risk of staging a large scale military attack in the [[Red River Delta]] in northern Vietnam. This incident led to widespread disturbances against French rule across northeastern Vietnam during 1930–31.
In the "Yen Bai Uprising of 1930" against the French colonial rule, many French army officers were killed.{{fact|date=November 2017}} To putdown the uprising, the French resorted to aerial bombardment and even [[napalm]] bombs were used. The rebellion was put down ruthlessly by the French within a day; many Vietnamese soldiers and 12 VNQDĐ leaders were executed. Following this repressive action by the French, there were frequent anti-colonialist strikes and riots throughout the country, which were all put down ruthlessly. This resulted in breaking the backbone of the VNQDD and the Communist Party in [[North Vietnam]] for a considerable period.<ref name=Discovery/>
The French maintained control of their colonies until World War II, when the Japanese war in the Pacific triggered the invasion of French Indochina in 1941.
In 1961, a large bronze cylindrical jar was discovered with carved images of males and females in copulation. In 1964 an 80,000-year-old skeleton was unearthed in [[Hum Cave]] in [[Lục Yên District]]. In 1996, another bronze jar was discovered along with the 2000-year-old remains of a 6-year-old girl on [[Choi Mountain]] in the commune of [[Hợp Minh]], [[Trấn Yên District]].<ref name=Lam83/>
==Geography and climate==
[[File:Hong River.png|thumb|right|400px|Map showing Thác Bà Lake and Red River.]]
Yên Bái covers an area of {{convert|6899.5|km2|sqmi|abbr=on}}, and the [[Red River (Asia)|Red River]] passes through the province. Yên Bái is a mountain province, characterised by rugged mountainous scenery and green rice paddy fields in the valleys. The Hoàng Liên Sơn mountain range runs through the province. The Red (or Thao) River and Chay River flow the province. Their origin is in Yunnan, China. The valley created by these two river systems in the Yên Bái Province is fertile, though an uneven territory; Muong Lo plain is the rice bowl of the province.<ref name="Lam, p.5">Lam, p. 5</ref>
[[File:Khau Phạ.jpg|thumb|left|[[Khau Phạ Pass]] in National Highway No.32 in [[Mù Cang Chải District]]]]
The topography is steep, rising from east to west and from south to north. The average elevation is about {{convert|600|m|ft}} above [[sea level]] and can be divided into two regions: low-lying regions on the left bank of the Red River basin and the high right bank of the Red River and in the plateau between the Red River and [[Da River|Đà River]] there are many mountains. Besides the two main rivers, the Red and the Đà, the province has about 200 canals, small streams and large lakes and swamps. [[Thác Bà Lake]] is situated in the province, an [[reservoir|artificial lake]] which has an area of {{convert|23400|ha|sqmi}} and 1,331 islands and hills.<ref name="VTAlake">{{cite web|url=http://www.vietnamholiday.us/news-details/thac-ba-lake-of-yen-bai/86.html|title=Thac Ba Lake|publisher=Vietnam holiday|accessdate=June 17, 2010|archive-url=https://web.archive.org/web/20120912211034/http://www.vietnamholiday.us/news-details/thac-ba-lake-of-yen-bai/86.html|archive-date=2012-09-12|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20120912211034/http://www.vietnamholiday.us/news-details/thac-ba-lake-of-yen-bai/86.html |date=2012-09-12 }}</ref> It has a capacity of 3 to 3.9 billion cubic meters of water and its original intention was to run the Thác Bà [[hydroelectricity|hydroelectric]] plant, one of the first large hydropower projects in Vietnam. The water in the lake is blue and clear, and reflects the surrounding green forests. The thousands of hills and islands have many caves, including Hum, Cau Cuoi and Bach Xa. A Thác Bà Temple is located in the lake area.<ref name="VTAlake"/> Thác Bà Lake has changed the climatic pattern in the western districts of the province, to a moderate condition from its hot and dry status.<ref name="Lam, p.6">Lam, p.6</ref>
The main [[Terrestrial ecozone|ecozones]] of the province are rainforest, subtropical and temperate mountainous zones. It experiences a tropical [[monsoon]] season. The {{convert|20293|ha|sqmi}} conservation area Mu Cang Chai Species / Habitat Conservation Area (MCC SHCA) was established in 2004 to protect the endangered mountain wildlife in Cang Chai district on the border of [[Lào Cai Province]].<ref>{{cite web|url=http://www.hoanglienson.org.vn/SocioEconomic/Presentation%20at%20Malaysia-EN.pdf|title=Mu Cang Chai Species / Habitat Conservation Area|publisher=Hoang Lien Son.com|accessdate=June 17, 2010|date=March 7, 2006}}{{Dead link|date=September 2018 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>
The mean temperature in the province at elevations above 1500m is about {{convert|20|C|F}} and drops to {{convert|0|C|F}} with frost and snow in some parts. December–January are winter months when the climate is dry. Frequent [[drizzle]] is experienced during late winter months; this type of rain has earned Yên Bái the epithet "drizzle centre of the country". April to December are summer months and the rainy period. The mean temperature is stable for the district as a whole and is in the range of {{convert|18|C|F}} to {{convert|28|C|F}}.<ref name=wom/><ref name=rain>{{Cite book|title= Development Trends in Vietnam's Northern Mountain Region (book for Reference): Case studies and lessons from Asia |accessdate=2010-06-19|page=206|url=https://books.google.com/?id=nRLbAAAAMAAJ&q=Rainfall+in+Yen+Bai&dq=Rainfall+in+Yen+Bai|publisher=National Political Publishing House|year=1997}}</ref>
==Archaeological findings==
Some geological artifacts havey beeny unearthedy in the provinces in places, which date human settlement between hoary 8000 years to the recent 2000 years; these have been preserved in the Archaeological Museum in Yên Bái City. The archaeological antiquaries found are; a large cylindrical jar in Dao Thinh Commune depicting scene of human cohabitation, a skeleton of an ancient Viet and another bronze jar containing the remnants of a six-year-old girl in Hum Cave in Luc Yen.<ref name=Lam83/>
==Administrative divisions==
Yên Bái is subdivided into 9 district-level sub-divisions:
{| class="wikitable" style="font-size:90%; text-align:center"
! rowspan="2"| Second Tier<br/>subdivisions
! rowspan="2"| Area<br/>(km²)
! colspan="3"| Third Tier subdivisions
|-
! width="60px"| [[Ward (Vietnam)|Ward]]
! width="60px"| [[Commune-level town (Vietnam)|Township]]
! width="60px"| [[Rural commune (Vietnam)|Commune]]
|-
| [[Yên Bái]] city || 108.15 || 9 || || 8
|-
| [[Nghĩa Lộ]] town || 29.60 || 4 || || 3
|-
| [[Lục Yên District]]|| 807.00 || || 1 || 23
|-
| [[Mù Cang Chải District]]|| 1199.00 || || 1 || 13
|-
| [[Trạm Tấu District]]|| 742.00 || || 1 || 11
|-
| [[Trấn Yên District]]|| 628.59 || || 1 || 21
|-
| [[Văn Chấn District]]|| 1224.00 || || 3 || 28
|-
| [[Văn Yên District]]|| 1389.00 || || 1 || 26
|-
| [[Yên Bình District]]|| 773.19 || || 2 || 24
|}
They are further subdivided into 11 commune-level towns (or townlets), 159 communes, and 10 wards.<ref name=Admn.>{{Cite web|url=http://www.gso.gov.vn/default_en.aspx?tabid=466&idmid=3&ItemID=8601|title=Number of administrative units as of 31 December 2008 by province|accessdate=2010-06-19|publisher=General Statistics Office of the Government of Vietnam}}</ref>
===Table of local government divisions===
{| class="wikitable" width= "100%"
|-
! width=20%|Name
! width=15%|Division type
! width=15%|Population (2003)
! width=10%|Area (km²)
! width=40%|Towns (huyện lỵ or thị trấn) (bold)<br>and communes (xã)
|-
| [[Yên Bái]]|| City (''thành phố'') || 78,016<ref name="Statoids">{{cite web|url=http://www.statoids.com/yvn.html|title=Districts of Vietnam|publisher=Statoids|accessdate=June 17, 2010}}</ref> || 58<ref name="Statoids"/> || '''Wards (phường)''': Yên Thịnh, Đồng Tâm, Minh Tân, Nguyễn Phúc, Nguyễn Thái Học, Hồng Hà, Yên Ninh, Nam Cường, Hợp Minh.<br>'''Communes (xã)''': Minh Bảo, Tân Thịnh, Tuy Lộc, Văn Phú, Văn Tiến, Giới Phiên, Phúc Lộc, Âu Lâu.
|-
| [[Nghĩa Lộ]]|| Township (''thị xã'') || 25,256<ref name="Statoids"/> || 29<ref name="Statoids"/> || '''Wards (phường)''': Trung Tâm, Tân An, Cầu Thia, Pú Trạng.<br>'''Communes (xã)''': Nghĩa An, Nghĩa Lợi, Nghĩa Phúc.
|-
| [[Lục Yên District|Lục Yên]] District || District (''huyện'') || 100,785<ref name="Statoids"/> || 811<ref name="Statoids"/> || '''Yên Thế''', Tân Phượng, Lâm Thượng, Khánh Thiện, Minh Chuẩn, Khai Trung, Mai Sơn, An Lạc, Tô Mậu, Khánh Hòa, Động Quan, Trúc Lâu, Phúc Lợi, Trung Tâm, An Phú, Phan Thanh, Minh Tiến. Tân Lập, Liễu Đô, Vĩnh Lạc, Mường Lai, Xuân Minh, Yên Thắng, Tân Lĩnh.
|-
| [[Mù Cang Chải District|Mù Cang Chải]] District || District (''huyện'') || 42,574<ref name="Statoids"/> || 1199<ref name="Statoids"/> || '''Mù Cang Chải''', Kim Nọi, Hồ Bốn, Chế Tạo, Khao Mang, Dế Su Phình, Chế Cu Nha, Cao Phạ, Púng Luông, Nậm Khắt, Mồ Dề, Nậm Có, La Pán Tẩn, Lao Chải.
|-
| [[Trạm Tấu District|Trạm Tấu]] District || District (''huyện'') || 21,887<ref name="Statoids"/> || 742<ref name="Statoids"/> || '''Trạm Tấu''', Bản Mù, Bản Công, Xà Hồ, Hát Lừu, Trạm Tấu, Pá Hu, Làng Nhì, Tà Si Láng, Phình Hồ, Pá Lau, Túc Đán.
|-
| [[Trấn Yên District|Trấn Yên]] District || District (''huyện'') || 96,949<ref name="Statoids"/> || 691<ref name="Statoids"/> || '''Cổ Phúc''', Vân Hội, Tân Đồng, Hưng Khánh, Đào Thịnh, Xã Hồng Ca, Việt Cường, Lương Thịnh, Hòa Cuông, Báo Đáp, Cường Thịnh, Minh Quán, Nga Quán, Quy Mông, Kiên Thành, Y Can, Minh Tiến, Việt Thành, Bảo Hưng, Việt Hồng, Minh Quân, Hưng Thịnh, Thị Trấn.
|-
| [[Văn Chấn District|Văn Chấn]] District || District (''huyện'') || 138,684<ref name="Statoids"/> || 1205<ref name="Statoids"/> || '''Sơn Thịnh, Nông Trường Liên Sơn, Nông Trường Nghĩa Lộ, Nông Trường Trần Phú''', Suối Bu, Suối Giàng, Suối Quyền, Đồng Khê, Tân Thịnh, Chấn Thịnh, Thượng Bằng La, Minh An, Nghĩa Tâm, Bình Thuận, Đại Lịch, Phù Nham, Thanh Lương, Thạch Lương, Hạnh Sơn, Phúc Sơn, Nghĩa Sơn, Sơn Lương, Nậm Lành, An Lương, Nậm Mười, Sùng Đô, Gia Hội, Nậm Búng, Tú Lệ, Cát Thịnh, Sơn A.
|-
| [[Văn Yên District, Yên Bái|Văn Yên]] District || District (''huyện'') || 111,715<ref name="Statoids"/> || 1389<ref name="Statoids"/> || '''Mậu A''', Lang Thíp, Châu Quế Thượng, Châu Quế Hạ, Lâm Giang, An Bình, Quang Minh, Đông An, Phong Dụ Hạ, Phong Dụ Thượng, Xuân Tầm, Tân Hợp, Đông Cuông, Mậu Đông, Ngòi A, Yên Thái, Yên Hưng, Yên Hợp, Xuân Ái, Hoàng Thắng, Viễn Sơn, Mỏ Vàng, Nà Hẩu, Đại Sơn, Đại Phác, Yên Phú.
|-
| [[Yên Bình District|Yên Bình]] District || District (''huyện'') || 107,882 <br> (2008) || 773.196 || '''Yên Bình, Thác Bà''', Phú Thịnh, Văn Lãng, Tích Cốc, Cảm Ân, Phúc Ninh, Bảo Ái, Mỹ Gia, Tân Nguyên, Yên Thành, Xuân Long, Phúc An, Cẩm Nhân, Vũ Linh, Ngọc Chấn, Yên Bình, Xuân Lai, Vĩnh Kiên, Bạch Hà, Hán Đà, Mông Sơn, Thịnh Hưng, Tân Hương, Đại Đồng, Đại Minh.
|}
==Economy==
<!-- The main agricultural products (i.e. tea, cinnamon) have been repeated several times in this section. I'd like to suggest that we condense these mentions into a single paragraph rather than repeating them. To that end, I've placed an example of this under the "Farming" section; please move and edit it as you wish. -->
The total area of the province is {{convert|689900|ha|km2}}, out of which the agricultural area is {{convert|78600|ha|km2}}, forest land forms major part of {{convert|453600|ha|km2}}, homestead land accounts for {{convert|4000|ha|km2}} and land used for special purposes is {{convert|30200|ha|km2}}.<ref>{{Cite web|url=http://www.gso.gov.vn/default_en.aspx?tabid=466&idmid=3&ItemID=8597|title= Land use by province (As of 1 January 2008)|accessdate=2010-06-19|publisher=General Statistics Office of the Government of Vietnam}}</ref> The per capita production of cereals in 2008 was 289 kg.<ref>{{Cite web|url=http://www.gso.gov.vn/default_en.aspx?tabid=469&idmid=3&ItemID=8883|title= Production of cereals by province|accessdate=2010-06-19|publisher=General Statistics Office of the Government of Vietnam}}</ref>
[[File:Rice Cultivation Vietnam.1024x768.jpg|thumb|right|Rice farming in Vietnam]]
Yên Bái is home to 281 [[cooperative]]s, which are considered an effective way of generating employment to thousands of workers. These cooperatives are engaged in fields such as agricultural services, industrial services, construction, commerce, transportation, [[People's Credit Funds]] and health care. Cooperatives services include the production of black tea (manufacturing and processing), farm and forestry, fertilizers, transportation, electric supply in rural areas, and so forth.<ref>{{Cite web|url=http://sctyenbai.gov.vn/en/node/220|title=Yen Bai: For more cooperative work of quaYen Bai: For many cooperatives do an effective|accessdate=2010-06-20|publisher=Yu Bai City|archive-url=https://web.archive.org/web/20100124131227/http://sctyenbai.gov.vn/en/node/220|archive-date=2010-01-24|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20100124131227/http://sctyenbai.gov.vn/en/node/220 |date=2010-01-24 }}</ref>
[[File:Lục Yên2.jpg|thumb|left|Gem market in Lục Yên District, Yên Bái Province]]
A survey of the economic situation in Yên Bái carried out in 2006 indicated that living standards had increased substantially. For the period 1990 to 2004, Gross domestic product (GDP) tripled with an average increase of 7.5% per year. Poverty index decreased from 58% in 1993 to 16% in 2006 (as per General Statistics Office, 2006). However, underemployment, unstable income, inadequate childcare, limited access to health, child labour, social issues related to old people and social evils, gender inequality needed to addressed.<ref name=survey>{{Cite web|url=http://www.unicef.org/eapro/bao_cao_tom_tat_tienganh.pdf|title=Result of Nation-Wide Survey on the Family in Viet Nam 2006|accessdate=2010-06-20|publisher=General Statistics Office (GSO) of the Ministry of Culture, Sports and Tourism|archive-date=2010-07-05|archive-url=https://web.archive.org/web/20100705091703/http://www.unicef.org/eapro/bao_cao_tom_tat_tienganh.pdf|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20100705091703/http://www.unicef.org/eapro/bao_cao_tom_tat_tienganh.pdf |date=2010-07-05 }}</ref>
===Farming===
[[File:Trạm Tấu fields.jpg|thumb|right|Rice fields in Trạm Tấu District]]
Farming, in particular, has been adoptedy asy any importanty means fory they accelerationy of socio-economic development in rural areas. A reorganization of farming economy is planned through the establishment of centralized commodities production zones to enhance rural income, value of the land and levels of farming household income through agricultural extension services. In terms of agricultural products, main crops in the province include tea, [[cinnamon]], [[glutinous rice]], grapefruit, orange, [[taro]] and fish. About 700 farms are reportedly engaged in growing trees for pulp production, tea, cinnamon trees, breeding poultry, cattle and pigs.<ref>{{Cite web|url=http://xttmnew.agroviet.gov.vn/TestE/load/tn-spec-nodate-detail.asp?tn=tn&id=21683|title= Farm economy development in Yen Bai and outstanding issues|accessdate=2010-06-19|publisher=Government of Vietnam}} {{Dead link|date=October 2010|bot=H3llBot}}</ref>
In the mountainous northern region, non-timber forest products in an area of {{convert|5000000|ha|km2}} are planned under a reforestation program, which includes about {{convert|40000|ha|km2}} under cinnamon; {{convert|15000|ha|km2}} have been developed.<ref>{{Cite web |url=http://xttmnew.agroviet.gov.vn/en/stories/TinTiengAnh/Cinnamon-basedFallowInVietnam.asp |title=Cinnamon-Based Fallow In Vietnam |accessdate=2010-06-20 |publisher=Government of Vietnam |url-status=dead |archiveurl=https://web.archive.org/web/20100105205100/http://xttmnew.agroviet.gov.vn/en/stories/TinTiengAnh/Cinnamon-basedFallowInVietnam.asp |archivedate=January 5, 2010 }} {{Webarchive|url=https://web.archive.org/web/20100105205100/http://xttmnew.agroviet.gov.vn/en/stories/TinTiengAnh/Cinnamon-basedFallowInVietnam.asp |date=2010-01-05 }}</ref>
;Farming extension services
The Centre for Agricultural and Forestry Extension offices of the Yên Bái province takes care of agricultural and forestry extension work in more than 1,000 villages in 180 communes and precincts in the province. For this purpose a strong agricultural extension system from the provincial to grassroots levels has been established. The dissemination work carried out by the Extension Offices have involved: knowledge transfer of technological advances; shifting in the structure of plants, animals and crops; [[intensive farming]] of hybrid rice strains; changing one-crop rice fields to two-crop ones; cultivation on sloping soil; raising high-quality chickens and so forth.<ref name=bring>{{Cite web|url=http://www.cpv.org.vn/cpv/Modules/News_English/News_Detail_E.aspx?CN_ID=142743&CO_ID=30462#MMshw3DiMHdy|title=Bringing technological advances to mountainous areas in Yen Bai|accessdate=2010-06-21|publisher=Communist Part of Vietnam On line News Paper|date=2003-08-08|archive-url=https://web.archive.org/web/20110929020805/http://www.cpv.org.vn/cpv/Modules/News_English/News_Detail_E.aspx?CN_ID=142743&CO_ID=30462#MMshw3DiMHdy|archive-date=2011-09-29|url-status=dead}}</ref>
25 key agricultural extension programmes have been developed to meet different growing periods in different terrains namely low lying and mountainous land. Further, more than 50 planting and husbandry models have been adopted envisaging new farming methods, centred on developing food, industrial plants and stock breeding for trading. Intensive farming of winter maize on two-rice-crop fields, intensive farming of hybrid rice strains in mountainous district of Mu Cang Chai, planting high-quality rice, sugar cane, coffee strains, raising chickens, planting forests have also been adopted by the farmers <ref name=bring/>
===Mining===
[[File:Gemstones in Luc Yen, Yen Bai.JPG|thumb|right|Gemstones]]
In all, 33 ores and minerals are currently mined in the numerous quarries in [[Lục Yên District]], out of which 23 are valid minerals, including [[gemstones]]. Among these ores and minerals are: [[apatite]], [[biotite]], [[calcite]], [[chlorite group]], [[chondrodite]], [[corundum]], [[danburite]], [[elbaite]], [[fluor-cannilloite]], [[graphite]], [[humite]], [[lepidolite]], varieties of [[microcline]] such as [[amazonite]], [[muscovite]], [[olivine]], [[orthoclase]], [[paragonite]], [[pargasite]], [[phlogopite]], [[pyrite]], [[quartz]] and [[smoky quartz]], [[rossmanite]], [[rutile]], [[schorl]], [[spinel]], [[titanite]] and [[tourmaline]]; gemstones such as [[rubies]], [[spinel]], and [[tourmaline]]. Lục Yên is particularly famous for its rubies.<ref>[http://www.mindat.org/loc.php?loc=6947&ob=4 Minerals of Luc Yen district] at [[Mindat.org]]</ref>
===Water resources===
[[File:Lục Yên1.jpg|thumb|left|Gem mines in Lục Yên District, Yên Bái Province]]
The Chay River, the second largest tributary of the Lo River, which in turn joins the [[Mekong|Mekong River]], rises from the Tay Con Linh mountain range (in Vietnam) at a height of {{convert|2419|m|ft}}. After flowing towards the west, it flows further southeast in the middle and lower reaches, at which point it joins the [[Lô River]] at [[Đoan Hùng]]. The basin is delimited by high mountain ranges—in the north by ranges{{Which|date=August 2010}} of {{convert|1500|m}} to {{convert|2000|m}} in height, on the west by the Con Voi mountain range and on the east and south east by the Tay Con Linh range. The width of the river is wide in its upper reaches and "tapers to an elongated shape in the middle and lower reaches". The basin has an area of 6500 km{{sup|2}} (1620 km{{sup|2}} in China) with 60% area below an elevation of 400 m (average elevation of the basin is 858 m). The annual rainfall in the basin varies from 1,500 mm to 3,000 mm with rains concentrated (75–85%) during May to October.<ref name=Chay>{{Cite web|url=http://flood.dpri.kyoto-u.ac.jp/ihp_rsc/riverCatalogue/Vol_05/11_Viet_Nam-7.pdf|title=Chay River|work=Vietnam 7|pages=264–265|publisher=Flood Control Department of Vietnam|access-date=2010-06-21|archive-url=https://web.archive.org/web/20110722072930/http://flood.dpri.kyoto-u.ac.jp/ihp_rsc/riverCatalogue/Vol_05/11_Viet_Nam-7.pdf|archive-date=2011-07-22|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20110722072930/http://flood.dpri.kyoto-u.ac.jp/ihp_rsc/riverCatalogue/Vol_05/11_Viet_Nam-7.pdf |date=2011-07-22 }}</ref>
Water from the Chay River that flows through the Yên Bái district has been tapped for hydropower generation, irrigation water supply in the downstream area, aquaculture and river navigation.<ref name="Chay, p 273">Chay, p. 273</ref>
====Thác Bà Hydropower Plant====
The Thác Bà Hydropower Plant is a major [[hydropower]] project located within the province on the [[Chay River]], built between 1964 and 1971 with assistance from the Soviet Union. Construction began on August 19, 1964. Despite frequent air strikes by the [[United States Air Force]] during this period, the first unit of the power plant was commissioned on October 5, 1971; the second unit followed on August 1972, and the third unit on May 19, 1972. The power plant currently has a capacity of 120 MW, and has an energy generating potential of 400 million kWh/year. The project as built has a dam 48 m high and 657 m long, creating a gross storage capacity of 2.49 cubic kilometres with a live storage of 2.16 cubic kilometres on the Chay River draining a [[Drainage basin|catchment]] of 6430 km{{sup|2}} at the dam site. The [[reservoir]] is 60 km with a water spread of 235 km{{sup|2}} at the Full Reservoir Level of +58 m. The project has been designed for a maximum [[flood discharge]] of 3,650 m{{sup|3}}/s. The other ruling levels of the project are: [[dead storage level]] in the reservoir +46.0m and maximum [[flood level]] of +59.65 for a [[thousand-year flood]].<ref name=Hydro>{{Cite web|url=http://www.vncold.vn/En/Web/Content.aspx?distid=333|title=Thac Ba Hydropower|accessdate=2010-06-19|publisher=Vietnam National Committee on Large Dams and Water Resources Development|archive-date=2011-10-05|archive-url=https://web.archive.org/web/20111005035933/http://www.vncold.vn/En/Web/Content.aspx?distid=333|url-status=dead}}</ref><ref>{{Cite web|url=http://www.industcards.com/hydro-vietnam.htm|title=Hydroelectric Power Plants in Vietnam|work=Thác Bà|accessdate=2010-06-19|publisher=Powerplant Around the World|archive-url=http://arquivo.pt/wayback/20090719031413/http://www.industcards.com/hydro%2Dvietnam.htm|archive-date=2009-07-19|url-status=dead}} {{Webarchive|url=https://archive.today/20121205033052/http://www.industcards.com/hydro-vietnam.htm |date=2012-12-05 }}</ref>
Every year, the Yên Bái Provincial People's Committee arrange the Thác Bà Discovery Festival, supported by Lào Cai, Phú Thọ and Yên Bái provinces. It is held in the vicinity of the Thác Bà Hydroelectric Power Plant. Participants in the festival typically visit the lake and take part in a boat race that is held there. A village festival showcasing ethnic minorities, a trade fair, a costume show, sports and traditional art competitions are also held.<ref>{{Cite web|url=http://www.palomahalongcruise.com/travel-news/News_Events/Thac_Ba_Discovery_Festival_2009_to_kick_off.html|title=Thac Ba Discovery Festival 2009 To Kick Off|accessdate=2010-06-19|publisher=Paloma Cruising Halong Bay|archive-url=https://web.archive.org/web/20110314004001/http://www.palomahalongcruise.com/travel-news/News_Events/Thac_Ba_Discovery_Festival_2009_to_kick_off.html|archive-date=2011-03-14|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20110314004001/http://www.palomahalongcruise.com/travel-news/News_Events/Thac_Ba_Discovery_Festival_2009_to_kick_off.html |date=2011-03-14 }}</ref>
;Thác Bà Lake
[[File:Thác Bà Lake.jpg|thumb|left|Thác Bà Lake]]
The water resource development of the province is thus centred on artificial Thác Bà Lake, which was created for hydropower development. The lake has an area of {{convert|23400|ha|km2}} and has 1,331 islands. The hill catchment has a varied ecology; an interesting feature in the catchment with its beautiful landscape is thousands of hills and islands which have caves like the Hum, Cau Cuoi and Bach Xa. There is also a temple on the banks of lake known as Thác Bà Temple. The site that the lake now lies in was the historic scene in 1285 AD during the [[Thu Vat Battle]] that took place under the command of [[Trần Nhật Duật]] against [[Mongolia]]n invaders. Thác Bà Lake is now an ecological tourist centre with entertainment, mountain climbing and hiking facilities.<ref name=lake>{{Cite web|url=http://www.vietnamtripadvisor.com/Travelguide/YenbaiAttraction/thacbalakeyenbai|title=Thac Ba Lake, Yen Bai|accessdate=2010-06-19|publisher=Tripadviser|archive-url=https://web.archive.org/web/20101129115555/http://vietnamtripadvisor.com/Travelguide/YenbaiAttraction/thacbalakeyenbai/|archive-date=2010-11-29|url-status=dead}} {{Webarchive|url=https://web.archive.org/web/20101129115555/http://vietnamtripadvisor.com/Travelguide/YenbaiAttraction/thacbalakeyenbai/ |date=2010-11-29 }}</ref><ref name="Chay, p 275">Chay, p 275</ref> The Mong Son Grotto, which housed the Yên Bái Party Committee during the anti-American resistance is located at the centre of this lake.
===Transport===
[[File:Nghĩa Lộ road.jpg|thumb|right|A main road near [[Nghĩa Lộ]]]]
The Yên Bái city is an important transport hub of [[Northern Vietnam]].
;Railways
Yên Bái lies on the railway that runs northwest from the capital and largest city in the north of the country, [[Hanoi]], to the border town of [[Lào Cai]] and into [[Yunnan]] in China. The railway also passes through the towns of Mau A and Co Phuc. The railway has been a major freight corridor between China and Vietnam since its construction, and runs approximately along the [[Red River (Asia)|Red River]]. [[National Route 70 (Vietnam)|National Route 70]] is the highway that goes from Lào Cai southeast into Yên Bái Province, through [[Yên Bình]] just north of the town of Yên Bái, and joins up with National Road 2—which leads to Hanoi—at [[Đoan Hùng]].<ref name=wom/><ref name=map>{{cite book |title=Rough Guide Map: Vietnam, Cambodia & Laos |url=http://www.roughguides.com/website/shop/products/default.aspx%3Fproductid%3D667 |publisher=Rough Guides |year=2006 |isbn=978-1-84353-702-1 |url-status=dead |archiveurl=https://web.archive.org/web/20070129050323/http://www.roughguides.com/website/shop/products/default.aspx?productid=667 |archivedate=2007-01-29 }}</ref><ref name=country>{{cite book| title=Vietnam Country Map |publisher=Periplus Travel Maps |year=2002–03 |isbn=0-7946-0070-0}}</ref>
;Roads
Running parallel to and a few kilometres to the southwest of National Road 70 is National Road 32, which goes from Hanoi northwest to the town of Yên Bái through [[Sơn Tây (Hanoi)|Sơn Tây]], [[Lâm Thao]] and [[Phú Thọ Province]]. National Road 37 connects the town of Yên Bái to Nong Truong Tran Phu to the south. The latter town is also serviced by National Road 32, which takes a northwesterly direction through Nghĩa Lộ, Nong Truong Lien Son into the mountainous northwest of the province and into neighbouring Lào Cai Province. The province lies about 183 km away on the 340 km [[Lào Cai]] to Ha Noi road.<ref name=wom/><ref name=map/><ref name=country/>
;Air
Yên Bái Airbase {{airport codes||VVYB}} is located about 5 km north of downtown Yên Bái. It is currently used as a training facility for fighter pilots serving in the [[Vietnam People's Air Force]].
==Culture and festivals==
Dong Cuong and Dai Cai are two temples in the province. Dai Cai Temple has been built amidst a large lush green is approached from riverside roads. Excavations by Archaeologist have found relics of Son Vi culture in the Dong Cuong Temple area.
===Festivals===
Many festivals are celebrated in the province, as decided by an Organising Board. Some of the important festivals are:<ref name=pent>{{Cite web|url=http://www.vietnamopentour.com.vn/vietnam-information/news/yen-bai-tourism-year--full-of-festivals.html|title=Yen Bai tourism year: Full of festivals|accessdate=2010-06-20|publisher=VietNamNet Bridge}}{{Dead link|date=September 2018 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>
;Dong Cuong temple festival
Dong Cuong Temple Festival is held in the Dong Cuong commune, Van Yen district, where the temple is located. The festival rites performed present an array of events starting with an invitation to the living and the dead, royal offerings, a procession of the palanquins of the Tutelary God and Holy Mother. The festival features traditional cultural and sport activities such as ''xoe dance'', ''con'' throwing'', en'' playing and traditional opera singing.<ref name=pent/>
[[File:Nghĩa Lộ2.jpg|thumb|right|A monument in [[Nghĩa Lộ]]]]
;Muong Lo cultural week
The Muong Lo Cultural Week held in the month of October in Nghia Lo town marks the anniversary of the liberation of Nghia Lo. Festivities lasting one week include sports competitions, Tây Bắc (North West) Fair and a food and drink competition.<ref name=pent/>
;Suoi Giang panpines festival
The Suoi Giang Panpines Festival held in June in Suoi Giang commune, Van Chan district, features dances, visit to Suoi Giang tea tree followed by a tea ceremony of the Mong ethnic minority people. Visits to traditional cultural villages and to Tap Plang Waterfall are also part of the programme.<ref name=pent/>
;Grapefruit flower festival
The Grapefruit flower festival is held in September at [[Kha Linh]] communal house, [[Dai Minh]] commune, [[Yên Bình District]], featuring the Kha Linh Communal House, grapefruit flower offerings, community tours to the Ngoi Tu cultural village and traditional sports.<ref name=pent/>
;Nam Cuong Temple Festival
The Nam Cuong Temple Festival is held sometime in March in [[Nam Cường]] commune, [[Yên Bái]] city, when pigeons are released by the villagers seeking peace; boat race in Nam Cuong lake and a tug-of-war competition are also part of the festival.
;Mong ethnic cultural festival
Prosperity to the local the [[Hmong people]] centred on an ancient tea tree in Suot Giang in this province. The tree gradually helped them to raise their standard of living. To commemorate this tree, the Hmong ethnic cultural festival is held to glorify the value of this tree. During the festival, a ritual is done at the ancient tree by the head of the village as a symbolic representation of the history and culture of the land. Khen dancing, Pao throwing and the tug of war and other cultural events are also held, as part of this festival.<ref name=festive>{{Cite web|url= http://www.cpv.org.vn/cpv/Modules/News_English/News_Detail_E.aspx?CN_ID=142743&CO_ID=30462#MMshw3DiMHdy|title= Mong ethnic cultural festival opens in Yen Bai province|accessdate= 2010-06-20|publisher= Communist party of Vietnam National News Paper|date= 2007-10-18-27|archive-url= https://web.archive.org/web/20110929020805/http://www.cpv.org.vn/cpv/Modules/News_English/News_Detail_E.aspx?CN_ID=142743&CO_ID=30462#MMshw3DiMHdy|archive-date= 2011-09-29|url-status= dead}}</ref>
Other places of interest to visit are the Mu Cang Chai species and bio-landscape reserve, the western region of white [[bauhilia]] flower and the Giang Spring.<ref name=pent/>
==Gallery==
<gallery widths="160px" heights="120px">
File:Văn Chấn District Suoi Khoang.jpg|Suoi Khoang, Văn Chấn District
File:Mu Cang Chai.jpg|Mu Cang Chai town
File:Nghĩa_Lộ.JPG| [[Nghĩa Lộ]]
</gallery>
==References==
{{Reflist|2}}
==Bibliography==
*{{Cite book |title=Victory at Any Cost: the genius of Viet Nam's Gen. Vo Nguyen Giap |author=Currey, Cecil B. |year=1999 |publisher=Brassey |isbn=1-57488-194-9}}
*{{Cite book|title=Les Linh Tap – Histoire des militaires indochinois au service de la France|first=Maurice|last=Rives|year=1999|publisher=Editions La Vauzelle|language=French| isbn=2-7025-0436-1}}
*{{Cite book |title=The Rise of Nationalism in Vietnam, 1900–1941 |authorlink=William Duiker |first=William |last=Duiker |year=1976 |publisher=[[Cornell University]] |location=Ithaca, New York |isbn=0-8014-0951-9 |url-access=registration |url=https://archive.org/details/riseofnationalis0000duik }}
*{{Cite book|title=The Struggle for Indochina, 1940–1955|authorlink=Ellen Hammer|first=Ellen J.|last=Hammer|year=1955|publisher=[[Stanford University]]|location=Stanford, California}}
*{{Cite book|title=Vietnamese anticolonialism, 1885–1925| first= David G. |last=Marr |year=1970 |publisher=[[University of California Press]] |location=Berkeley, California| isbn=0-520-01813-3}}
*{{Cite book|last=Lam|first=Tran Doan|title=Vietnamese Studies|publisher=Chairman of the Advisory Board|year=}}
*Test edit
==External links==
*{{Official website|http://www.yenbai.gov.vn/}}
{{Geographic location
|Centre = Yên Bái Province
|North = [[Hà Giang Province]]
|Northeast = [[Tuyên Quang Province]]
|East =
|Southeast = [[Phú Thọ Province]]
|South = [[Sơn La Province]]
|Southwest =
|West = [[Lai Châu Province]]
|Northwest = [[Lào Cai Province]]
}}
{{Subdivisions of Vietnam}}
{{DEFAULTSORT:Yen Bai Province}}
[[Category:Yên Bái Province| ]]
[[Category:Northeast (Vietnam)]]
<noinclude>
<small>This page was moved from [[:en:Yên Bái Province]]. Its edit history can be viewed at [[Yên Bái Province/edithistory]]</small></noinclude>
6u0h7pzag3723s56js5gokp3tpc6525
Green vehicle
0
113776
665577
660675
2025-07-07T21:30:14Z
QTE-Test1-WMF
48089
Added testing edits
665577
wikitext
text/x-wiki
{{Redirect|Green vehicles}}
[[File:Green_Vehicle_Expo_2025_(Bangalore_International_Exhibition_Centre)_39.jpg|thumb|testing green]]
[[File:2019 Toyota Prius (ZVW50R) 1.8 Hybrid liftback (2018-12-19) 01.jpg|thumb|upright=1.25|The [[Toyota Prius]] is the world's top selling [[hybrid electric vehicle]], with global sales of 3.7 million units through April 2016.<ref name=PriusTop>{{ cite web | url=http://www.greencarcongress.com/2016/05/20160520-tmc.html | title=Worldwide sales of Toyota hybrids surpass 9 million units; Prius family accounts for 63% | first=Mike | last=Millikin | publisher=Green Car Congress |accessdate=2016-05-22}} ''The Prius family accounts for 63% of Toyota's total global cumulative hybrid car sales: 5.691 million units, consisting of Prius liftback: 3.733 million; Aqua, Prius c: 1.249 million; Prius α, Prius v, Prius +: 0.634 million; Prius PHV: 75,000.''</ref> Some owners use its identity to make an environmental statement.<ref>{{cite journal
| last =Maynard | first =Micheline | title =Say 'Hybrid' and Many People Will Hear 'Prius'
| journal =[[New York Times]]| date =2007-07-04| url =https://www.nytimes.com/2007/07/04/business/04hybrid.html?_r=0
| accessdate =2013-07-03}}</ref>]]
{{Sustainable energy}}
A '''green vehicle''', or '''clean vehicle''', or '''eco-friendly vehicle''' or '''[[environmentally friendly]] vehicle''' is a road [[motor vehicle]] that produces less harmful impacts to the [[Environment (biophysical)|environment]] than comparable conventional [[internal combustion engine]] vehicles running on [[gasoline]] or [[diesel fuel|diesel]], or one that uses certain [[alternative fuels]].<ref>{{cite book| url=https://books.google.com/?id=_Ax8ElEN5EcC&pg=PA67&dq=%22Green+vehicle%22| page=67| title=Rainforests | author=R.I.C. Publications | year=2005| isbn=978-1-74126-330-5 }}</ref><ref name=GreenStudent>{{cite web|url=http://www.greenstudentu.com/encyclopedia/green_vehicle_guide|title=Green Vehicle Guide|publisher=Green Student U|accessdate=2010-04-24|archive-date=2013-12-03|archive-url=https://web.archive.org/web/20131203014603/http://www.greenstudentu.com/encyclopedia/green_vehicle_guide|url-status=dead}}</ref><ref>{{cite web| url=http://www.cheapcarinsurance.net/the-environmentally-friendly-car/ | title=The Environmentally Friendly Car | author=Staff |publisher=Cheap Car Insurance | accessdate=2016-12-03}}</ref> Presently, in some countries the term is used for any vehicle complying or surpassing the more stringent [[European emission standards]] (such as Euro6), or [[California]]'s [[zero-emissions vehicle]] standards (such as [[Zero-emissions vehicle|ZEV]], [[Ultra-low emission vehicle|ULEV]], [[Super ultra-low emission vehicle|SULEV]], [[Partial zero-emissions vehicle|PZEV]]), or the [[low-carbon fuel standard]]s enacted in several countries.<ref>{{cite book| url=https://books.google.com/?id=Y6s7CDzLz5wC&pg=PA84&dq=%22Green+vehicle%22+lev#PPA84,M1| pages=84–85| title=Can cars come clean?| author=Organisation for Economic Co-operation and Development, Organisation for Economic Co-operation and Development. Working Group on Low-Emission Vehicles| publisher=OECD Publishing| year=2004| isbn=978-92-64-10495-2 }}</ref> Test0909
Green vehicles can be powered by [[alternative fuel]]s and advanced vehicle technologies and include [[hybrid electric vehicle]]s, [[plug-in hybrid electric vehicle]]s, [[battery electric vehicle]]s, [[compressed-air vehicle]]s, [[hydrogen vehicle|hydrogen]] and [[fuel-cell vehicle]]s, [[neat ethanol vehicle]]s, [[flexible-fuel vehicle]]s, [[natural gas vehicle]]s, [[clean diesel]] vehicles, and some sources also include vehicles using blends of [[biodiesel]] and [[ethanol fuel]] or [[gasohol]].<ref name=GreenStudent/><ref>{{cite web|url=http://www.afdc.energy.gov/afdc/vehicles/index.html|title=Alternative and Advanced Vehicles|publisher=Alternative Fuels and Advanced Vehicle Data Center, [[U.S. Department of Energy]]|accessdate=2010-04-24}}</ref> In November 2016, with an [[EPA]]-rated fuel economy of 136 [[miles per gallon gasoline equivalent]] (mpg-e) ({{convert|136|mpgus|L/100km|abbr=on|disp=out|1}}), the 2017 [[Hyundai Ioniq Electric]] became the most efficient EPA-certified vehicle considering all fuels and of all years, surpassing the 2014-2016 [[model year]] [[electric car|all-electric]] [[BMW i3]].<ref name=EPAMost2017/><ref name=EPAmostMPGe/>
Several authors also include conventional motor vehicles with high [[fuel economy in automobiles|fuel economy]], as they consider that increasing fuel economy is the most [[Cost-effectiveness analysis|cost-effective]] way to improve [[Efficient energy use|energy efficiency]] and reduce carbon emissions in the transport sector in the short run.<ref name=TwoBillion/> As part of their contribution to [[sustainable transport]], these vehicles reduce [[air pollution]] and [[greenhouse gas emission]]s, and contribute to [[energy independence]] by reducing oil imports.<ref name=GreenStudent/><ref name=TwoBillion>{{Cite book | author1 = Sperling, Daniel | author2 = Deborah Gordon | title = Two billion cars: driving toward sustainability | year = 2009 | pages = [https://archive.org/details/twobillioncarsdr00sper_0/page/235 235–260] | publisher = [[Oxford University Press]], New York | isbn = 978-0-19-537664-7 | url = https://archive.org/details/twobillioncarsdr00sper_0/page/235 }} See ''Chapter 9: Driving Towards Sustainability''</ref>
An environmental analysis extends beyond just the operating efficiency and emissions. A [[life-cycle assessment]] involves production and post-use considerations. A [[cradle-to-cradle design]] is more important than a focus on a single factor such as energy efficiency.<ref>{{Citation
| url = http://yosemite.epa.gov/R10/OWCM.NSF/product+stewardship/autos-strategies
| title = Strategies for Managing Impacts from Automobiles
| work =
| publisher = US EPA Region 10
| accessdate = May 22, 2012
| archive-date = March 4, 2016
| archive-url = https://web.archive.org/web/20160304051116/http://yosemite.epa.gov/R10/OWCM.NSF/product+stewardship/autos-strategies
| url-status = dead
}}</ref><ref>
{{Citation
| url = http://ec.europa.eu/environment/waste/elv_index.htm
| title = European Union's End-of-life Vehicle (ELV) Directive
| work = End of Life Vehicles
| publisher = EU
| accessdate = May 22, 2012
}}</ref>
==Energy efficiency==
{{main|Energy efficiency in transport}}
Cars with similar production of energy costs can obtain, during the life of the car (operational phase), large reductions in energy costs through several measures:
* The most significant is by using [[alternative propulsion]]:
** An efficient engine that reduces the vehicle's consumption of [[petroleum]] (i.e. [[petroleum electric hybrid vehicle]]), or that uses [[renewable energy]] sources throughout its working life.
** Using [[biofuel]]s instead of petroleum fuels.
* Proper maintenance of a vehicle such as engine [[wikt:tune-up|tune-up]]s, [[oil change]]s, and maintaining proper [[tire pressure]] can also help.
* Removing unnecessary items from a vehicle reduces weight and improves fuel economy as well.
{| class=" wikitable" style="margin: 1em auto 1em auto"
! colspan="6" style="text-align:center; background:#cfc;"|Comparison of several types of green car basic characteristics<br /> (Values are overall for vehicles in current production and may differ between types)
|-
| style="text-align:center; background:#cfc;"|Type of vehicle/<br/>powertrain|| style="text-align:center; background:#cfc;"|[[Fuel economy in automobiles|Fuel economy]] <br/>([[miles per gallon|mpg]] equivalent)|| style="text-align:center; background:#cfc;"|Range|| style="text-align:center; background:#cfc;"|Production cost<br/> for given range|| style="text-align:center; background:#cfc;"|Reduction in [[carbon dioxide|CO<sub>2</sub>]]<br/> compared to conventional || style="text-align:center; background:#cfc;"|Payback period
|- style="text-align:center;"
|align=left|[[Internal combustion engine|Conventional ICE]]||10–78<!--Audi A2-->||Long<br/>(400–600 mi) || Low|| 0%||-
|- style="text-align:center;"
|align=left|[[Biodiesel]]||18–71<!--Audi A2-->||Long<br/>(360–540 mi) || Low|| varies depending on biodiesel source<ref>{{Cite journal|last=van Renssen|first=Sonja|date=2011|title=A biofuel conundrum|url=http://archive.ffue.org/PDF/vanRenssen2011ABiofuelConundrum.pdf|journal=Nature Climate Change|volume=1, November 2011|issue=8|pages=389–390|via=|doi=10.1038/nclimate1265|access-date=2020-07-06|archive-date=2017-10-24|archive-url=https://web.archive.org/web/20171024205954/http://archive.ffue.org/PDF/vanRenssen2011ABiofuelConundrum.pdf|url-status=dead}}</ref>||-
|- style="text-align:center;"
|align=left|[[Electric car|All-electric]]||54–118<!--Fisker Karma - Honda Fit EV-->|| Shorter<br/>(73–150 mi)<br/>Luxury models<br/>Medium<br/>(160–300 mi)<!--Tesla Model S--> ||High<br/><br/>Very high ||varies depending<br/>on energy source|| -
|- style="text-align:center;"
|align=left|[[Hydrogen car|Hydrogen]] [[fuel cell vehicle|fuel cell]]||80<ref name="str" />|| ||Astronomical || ||
|- style="text-align:center;"
|align=left|[[Hybrid electric vehicle|Hybrid electric]]||30–60 ||380 mi<ref name="str">[https://www.llnl.gov/str/Hybrid.html S&TR]</ref>||Medium|| ||5 years<ref name="autogenerated2" /><ref name="autogenerated1" />
|}
==Types==
[[File:Battery EV vs. Hydrogen EV.png|thumb|right|400px|Comparison of energy efficiency between [[battery electric vehicle|battery]] and [[hydrogen vehicle|hydrogen]] [[fuel-cell]] cars]]
{{Multiple image|direction=vertical|align=right|image1=Chevrolet Volt WAS 2011 837.JPG|image2=2011 Nissan Leaf -- 2011 DC.jpg|width=220|caption2=Sales of both the [[Chevrolet Volt]] [[plug-in hybrid]] (top) and the [[Nissan Leaf]] [[all-electric car]] (bottom) began in December 2010.}}
[[File:2013-03-05 Geneva Motor Show 8120.JPG|thumb|PSA Peugeot Citroën Hybrid Air concept exhibited at the 2013 [[Geneva Motor Show]] ]]
{{Further|Alternative fuel vehicle}}
Green vehicles include vehicles types that function fully or partly on alternative energy sources other than [[fossil fuel]] or less carbon intensive than gasoline or diesel.
Another option is the use of [[alternative fuel]] composition in conventional fossil fuel-based vehicles, making them function partially on renewable energy sources. Other approaches include [[personal rapid transit]], a [[public transport]]ation concept that offers automated, on-demand, non-stop transportation on a network of specially built guideways.
===Electric and fuel cell-powered===
{{See also| Electric vehicle|Plug-in hybrid}}
Examples of vehicles with reduced petroleum consumption include [[electric car]]s, [[plug-in hybrid]]s and [[fuel cell]]-powered [[hydrogen car]]s.
[[Electric car]]s are typically more efficient than [[fuel cell]]-powered vehicles on a [[Tank-to-wheel]] basis.<ref>{{cite web |url=http://www.teslamotors.com/display_data/twentyfirstcenturycar.pdf |title=Energy efficiency comparison article |accessdate=2010-12-12 |url-status=dead |archiveurl=https://web.archive.org/web/20091014073730/http://www.teslamotors.com/display_data/twentyfirstcenturycar.pdf |archivedate=2009-10-14 }}</ref> They have better [[fuel economy in automobiles|fuel economy]] than conventional [[internal combustion engine]] vehicles but are hampered by [[All-electric range|range]] or maximum distance attainable before discharging the battery. The [[Electric car#Batteries|electric car batteries]] are their main cost. They provide a 0%<ref>http://shrinkthatfootprint.com/electric-car-emissions#.UWMjH5xsYH4.email|"eg India, China, Australia"</ref> to 99.9% reduction in [[carbon dioxide|CO<sub>2</sub>]] emissions compared to an [[Internal combustion engine|ICE]] (gasoline, diesel) vehicle, depending on the source of electricity.<ref>{{cite web |url= http://www.asecert.org/Template.cfm?Section=Clean_Fuels_Clean_Vehicle_Technology1&Template=/ContentManagement/ContentDisplay.cfm&ContentFileID=609 |title= Alternate Fuel Technology - Battery Electric Vehicles |access-date= 2020-01-03 |archive-url= https://web.archive.org/web/20071008073124/http://www.asecert.org/Template.cfm?Section=Clean_Fuels_Clean_Vehicle_Technology1&Template=%2FContentManagement%2FContentDisplay.cfm&ContentFileID=609 |archive-date= 2007-10-08 |url-status= dead }} {{small|(245 KB)}}</ref>
===Hybrid electric vehicles===
{{See also| Hybrid vehicle}}
[[Hybrid car]]s may be partly fossil fuel (or biofuel) powered and partly electric or hydrogen-powered. Most combine an internal combustion engine with an electric engine, though other variations too exist. The internal combustion engine is often either a gasoline or Diesel engine (in rare cases a Stirling engine may even be used<ref>[http://www.precer.com/Technology.html Precer's BioRacer Stirling engine-electric hybrid]</ref>). They are more expensive to purchase but cost redemption is achieved in a period of about 5 years due to better fuel economy.<ref name="autogenerated2">{{cite news | title = Consumer Reports Revises Financial Analysis In Report on Ownership Costs for Hybrid Cars | date = 7 March 2006 | publisher = Consumers Union | url = http://www.consumerreports.org/cro/cu-press-room/pressroom/archive/2006/04/eng0604ehv.htm | work = Consumer Reports | accessdate = 2007-04-27 |archiveurl = https://web.archive.org/web/20070921103910/http://www.consumerreports.org/cro/cu-press-room/pressroom/archive/2006/04/eng0604ehv.htm <!-- Bot retrieved archive --> |archivedate = 2007-09-21}}</ref><ref name="autogenerated1">{{cite web | url = http://www.consumerreports.org/cro/cars/new-cars/high-cost-of-hybrid-vehicles-406/overview/index.htm | title = The dollars & sense of hybrid cars | access-date = 2020-07-06 | archive-date = 2008-07-24 | archive-url = https://web.archive.org/web/20080724062328/http://www.consumerreports.org/cro/cars/new-cars/high-cost-of-hybrid-vehicles-406/overview/index.htm | url-status = dead }}</ref>
===Compressed air cars, stirling vehicles, and others===
{{See also| Compressed-air vehicle| Compressed air car}}
[[Compressed air car]]s, [[Zero-emissions vehicle|stirling-powered]] vehicles, [[Liquid nitrogen vehicle]]s are even less polluting than electrical vehicles, as the vehicle and its components can be made more environmentally friendly.
[[Solar car racing|Solar car races]] are held on a regular basis in order to promote green vehicles and other "[[environmental technology|green technology]]". These sleek driver-only vehicles can travel long distances at highway speeds using only the electricity generated instantaneously from the sun.
===Improving conventional cars===
[[File:Brazilian Fiat Siena TetraFuel four views.jpg|thumb|right|The [[Fiat Siena|Fiat Siena Tetrafuel]] 1.4 is a [[multifuel]] car designed to run as a [[flex-fuel]] on [[gasoline]], or [[w:Common ethanol fuel mixtures#E20, E25|E20–E25 blend]], or neat ethanol ([[Neat alcohol fuel|E100]]); or to run as a [[bi-fuel vehicle|bi-fuel]] with [[Compressed natural gas|natural gas (CNG)]].]]
{{Main|Biofuel|compressed natural gas|clean diesel}}
{{See also|Volkswagen emissions scandal}}
A conventional vehicle can become a greener vehicle by mixing in [[renewable fuel]]s or using less carbon intensive [[fossil fuel]]. Typical [[gasoline]]-powered cars can tolerate up to 10% [[alcohol fuel|ethanol]]. Brazil manufactured cars that run on neat ethanol, though there were discontinued. Another available option is a [[flexible-fuel vehicle]] which allows any blend of gasoline and ethanol, up to 85% in North America and Europe, and up to 100% in Brazil.<ref>{{cite web
|title=Dual Fuel Cars Revive Brazil's Alcohol Industry
|url=http://www.tierramerica.net/2003/0825/iacentos.shtml
|access-date=2020-07-06
|archive-date=2012-02-05
|archive-url=https://web.archive.org/web/20120205102730/http://www.tierramerica.net/2003/0825/iacentos.shtml
|url-status=dead
}}</ref> Another existing option is to convert a conventional gasoline-powered to allow the alternative use of [[compressed natural gas|CNG]]. [[Pakistan]], [[Argentina]], [[Brazil]], [[Iran]], [[India]], [[Italy]], and [[China]] have the largest fleets of [[natural gas vehicle]]s in the world.<ref name=IANGV>{{cite web|url=http://www.iangv.org/tools-resources/statistics.html |title=Natural Gas Vehicle Statistics |publisher=International Association for Natural Gas Vehicles |accessdate=2009-10-19 |url-status=dead |archiveurl=https://web.archive.org/web/20100110101111/http://www.iangv.org/tools-resources/statistics.html |archivedate=2010-01-10 }}</ref>
[[diesel fuel|Diesel]]-powered vehicles can often transition completely to [[biodiesel]], though the fuel is a very strong [[solvent]], which can occasionally damage [[rubber]] seals in vehicles built before 1994. More commonly, however, biodiesel causes problems simply because it removes all of the built-up residue in an engine, clogging [[filter (chemistry)|filter]]s, unless care is taken when switching from dirty fossil-fuel derived diesel to bio-diesel. It is very effective at 'de-coking' the diesel engines combustion chambers and keeping them clean. Biodiesel is the lowest emission fuel available for diesel engines. Diesel engines are the most efficient car internal combustion engines. Biodiesel is the only fuel allowed in some North American national parks because spillages will completely bio-degrade within 21 days. Biodiesel and [[vegetable oil fuel]]led, diesel engined vehicles have been declared amongst the greenest in the US ''Tour de Sol'' competition.
This presents problems, as biofuels can use food resources in order to provide mechanical energy for vehicles. Many experts point to this as a reason for growing food prices, particularly US Bio-ethanol fuel production which has affected maize prices. In order to have a low environmental impact, biofuels should be made only from waste products, or from new sources like [[algae fuel|algae]].
<!--This section needs to be expanded to include clean diesel (lower emissions and higher fuel economy) and the new breed of gasoline high fuel efficient vehicles, otherwise this article will be duplicating the content of alternative fuel vehicles-->
===Electric Motor and Pedal Powered Vehicles===
Multiple companies are offering and developing two, three, and four wheel vehicles combining the characteristics of a bicycle with electric motors. US Federal, State and Local laws do not clearly nor consistently classify<ref>{{cite web|url=http://www.electric-bikes.com/nevs/legalnev.html|title=NHTSA/DOT final rule on Neighborhood Electric Vehicles (NEV)63 FR 33913, June 17, 1998|publisher=US DEPARTMENT OF TRANSPORTATION|date= |accessdate=2015-11-14}}</ref> these vehicles as [[bicycles]], [[electric bicycles]], [[motorcycles]], [[electric motorcycles]], [[mopeds]], [[Neighborhood Electric Vehicle]], [[motorised quadricycle]] or as a [[car]]. Some laws have limits on top speeds, power of the motors, range, etc. while others do not.<ref>[http://www.cpsc.gov/PageFiles/93295/low.pdf CPSC Requirements for Low-Speed Electric Bicycles]</ref><ref>{{Cite web |url=http://thomas.loc.gov/cgi-bin/bdquery/z?d107:h.r.727: |title=Search Results - THOMAS (Library of Congress)<!-- Bot generated title --> |access-date=2020-07-06 |archive-date=2016-01-10 |archive-url=https://web.archive.org/web/20160110013319/http://thomas.loc.gov/cgi-bin/bdquery/z?d107:h.r.727: |url-status=dead }} {{Cite web |url=http://thomas.loc.gov/cgi-bin/bdquery/z?d107:h.r.727: |title=Archived copy |access-date=2020-07-06 |archive-date=2016-01-10 |archive-url=https://web.archive.org/web/20160110013319/http://thomas.loc.gov/cgi-bin/bdquery/z?d107:h.r.727: }}</ref><ref>http://electricbikereport.com/new-california-law-electric-bike-regulations/#more-18708</ref><ref>{{cite web|url=http://www.leginfo.ca.gov/pub/15-16/bill/asm/ab_1051-1100/ab_1096_bill_20151007_chaptered.htm|title=California Assembly Bill No. 1096 CHAPTER 568 October 7, 2015.|date= |accessdate=2015-11-14}}</ref>
===Other===
{{Further|Personal rapid transit}}
[[File:Borealis3windmills.jpg|thumb|right|[[Solar vehicle]] ]]
* [[Public transportation]] vehicles are not usually included in the green vehicle category, but [[Personal rapid transit]] (PRT) vehicles probably should be. All vehicles that are powered from the track have the advantage of potentially being able to use any source of electric energy, including sustainable ones, rather than requiring liquid fuels. They can also switch regenerative braking energy between vehicles and the electric grid rather than requiring energy storage on the vehicles. Also, they can potentially use the entire track area for solar collectors, not just the vehicle surface. The potential [[Personal rapid transit#Energy efficiency|PRT energy efficiency]] is much higher than that which traditional automobiles can attain.
* [[Solar vehicle]]s are [[electric vehicle]]s powered by [[solar power|solar energy]] obtained from [[solar panel]]s on the surface (generally, the roof) of the vehicle. [[Photovoltaic]] (PV) cells convert the Sun's energy directly into [[electrical energy]]. Solar vehicles are not practical day-to-day transportation devices at present, but are primarily demonstration vehicles and engineering exercises, often sponsored by government agencies. However, some cities have begun offering [[solar bus|solar-powered buses]], including the [[Tindo]] in [[Adelaide|Adelaide, Australia]].
* [[Wind-powered land vehicle|Wind-powered electric vehicles]] primarily use wind-turbines installed at a strategic point of the vehicle, which are then converted into electric energy which causes the vehicle to propel.
==Animal powered vehicles==
[[Horse and carriage]] are just one type of animal propelled vehicle. Once a common form of transportation, they became far less common as cities grew and automobiles took their place. In dense cities, the waste produced by large numbers of transportation animals was a significant health problem. Oftentimes the food is produced for them using diesel powered tractors, and thus there is some environmental impact as a result of their use.
==Human powered vehicles==
[[File:Vélo'v station 5002 - Place des Compagnons de la chanson.jpg|thumb|[[Vélo'v]] [[bicycle sharing system]] in [[Lyon]], [[France]] ]]
{{See also|Bicycle sharing system}}
Human powered transport includes walking, [[bicycle]]s, [[velomobile]]s, [[row boat]]s, and other environmentally friendly ways of getting around. In addition to the health benefits of the exercise provided, they are far more environmentally friendly than most other options. The only downside is the speed limitations, and how far one can travel before getting exhausted.
==Benefits of green vehicle use==
===Environmental===
Vehicle emissions contribute to the increasing concentration of gases linked to [[climate change]].<ref name="world energy council">{{cite web|url=http://www.worldenergy.org/publications/809.asp |title=Transport Technologies and Policy Scenarios |publisher=[[World Energy Council]] |accessdate=2009-05-26 |author=World Energy Council |year=2007 |url-status=dead |archiveurl=https://web.archive.org/web/20081204051628/http://www.worldenergy.org/publications/809.asp |archivedate=2008-12-04 }}</ref> In order of significance, the principal [[greenhouse gases]] associated with road transport are carbon dioxide (CO<sub>2</sub>), methane (CH<sub>4</sub>) and nitrous oxide (N<sub>2</sub>O).<ref>{{cite web |first=Marianne |last=Weingroff |url=http://www.ucar.edu/learn/1_4_2_20t.htm |title=Activity 20 Teacher Guide: Human Activity and Climate Change |publisher=Ucar.edu |date= |accessdate=2010-12-12 |archive-date=2011-06-10 |archive-url=https://web.archive.org/web/20110610202146/http://www.ucar.edu/learn/1_4_2_20t.htm |url-status=dead }}</ref> Road transport is the third largest source of greenhouse gases emitted in the UK, and accounts for over 20% of total emissions,<ref>{{cite web |url=http://www.whatgreencar.com/emissionsanalysis.php |title=WhatGreenCar? Ratings Methodology |publisher=Whatgreencar.com |date=2009-12-03 |accessdate=2010-12-12 |archive-date=2010-09-25 |archive-url=https://web.archive.org/web/20100925083938/http://www.whatgreencar.com/emissionsanalysis.php }}</ref> and 33% in the United States.<ref>{{cite journal| url=http://www.climateactionproject.com/docs/crs/80733.pdf| page=16| title=Climate Change: Action by States To Address Greenhouse Gas Emissions| date=January 18, 2007| author=Jonathan L. Ramseur| publisher=Congressional Research Service| accessdate=2009-06-27| archive-date=2011-10-05| archive-url=https://web.archive.org/web/20111005155215/http://www.climateactionproject.com/docs/crs/80733.pdf| url-status=dead}}</ref> Of the total greenhouse gas emissions from transport, over 85% are due to CO<sub>2</sub> emissions from road vehicles. The transport sector is the fastest growing source of greenhouse gases.<ref name="IPCC">{{cite web|url=http://www.ipcc.ch/pdf/assessment-report/ar4/wg3/ar4-wg3-chapter5.pdf|title=IPCC Fourth Assessment Report: Mitigation of Climate Change, chapter 5, Transport and its Infrastructure|publisher=[[Intergovernmental Panel on Climate Change]]|accessdate=2009-05-26|author=Intergovernmental Panel on Climate Change|year=2007|archive-url=https://web.archive.org/web/20080718173528/http://www.ipcc.ch/pdf/assessment-report/ar4/wg3/ar4-wg3-chapter5.pdf|archive-date=2008-07-18|url-status=dead}}</ref>
===Health===
Vehicle pollutants have been linked to human ill health including the incidence of respiratory and cardiopulmonary disease and lung cancer. A 1998 report estimated that up to 24,000 people die prematurely each year in the UK as a direct result of air pollution.<ref>{{cite web |url=http://www.advisorybodies.doh.gov.uk/comeap/index.htm |title=Committee on the Medical Effects of Air Pollutants (COMEAP) |publisher=Advisorybodies.doh.gov.uk |date=2009-11-26 |accessdate=2010-12-12 |archive-date=2011-07-19 |archive-url=https://web.archive.org/web/20110719003154/http://www.advisorybodies.doh.gov.uk/comeap/index.htm |url-status=dead }}</ref> According to the [[World Health Organization]], up to 13,000 deaths per year among children (aged 0–4 years) across Europe are directly attributable to outdoor pollution. The organization estimates that if pollution levels were returned to within EU limits, more than 5,000 of these lives could be saved each year.
===Monetary===
[[Hybrid taxi]] [[fleet operator]]s in [[New York City|New York]] have also reported that reduced fuel consumption saves them thousands of dollars per year.<ref>{{cite news| url=https://www.reuters.com/article/environmentNews/idUSN1645555920080717| title=NYC speeds transformation of yellow cabs to green| date=July 17, 2008| first=Joan| last=Gralla| work=Reuters }}</ref>
===Criticism===
A study by CNW Marketing Research suggested that the extra energy cost of manufacture, shipping, disposal, and the short lives of some of these types of vehicle (particularly gas-electric [[hybrid vehicle]]s) outweighs any energy savings made by their using less petroleum during their useful lifespan.<ref>{{cite journal
|title=Dust to Dust - The Energy Cost of New Vehicles From Concept to Disposal
|author=CNW Marketing Research, Inc
|year=2006
|url=http://cnwmr.com/nss-folder/automotiveenergy/
|url-status=dead
|archiveurl=https://web.archive.org/web/20120507155738/http://cnwmr.com/nss-folder/automotiveenergy/
|archivedate=2012-05-07
}}</ref> This type of argument is the long smokestack argument.<ref>[https://www.youtube.com/watch?v=bp78rfNkfrY Israeli company builds infrastructure for worlds electric cars]</ref> Critics of the report note that the study prorated all of Toyota's hybrid research-and-development costs across the relatively small number of Priuses on the road, rather than using the incremental cost of building a vehicle; used{{convert|109000|mi|km}} for the length of life of a Prius (Toyota offers a {{convert|150000|mi|km|adj=on}} warranty on the Prius' hybrid components, including the battery), and calculated that a majority of a car's cradle-to-grave energy gets expended during the vehicle's production, not while it is driven.<ref>Brendan I. Koerner, [http://www.slate.com/id/2186786/ "Tank vs. Hybrid: IS IT POSSIBLE THAT A HUMMER'S BETTER FOR THE ENVIRONMENT THAN A PRIUS IS?"], ''Slate'' magazine, March 18, 2008</ref>
[[Norwegian Consumer Ombudsman]] official Bente Øverli stated that "Cars cannot do anything good for the environment except less damage than others." Based on this opinion, Norwegian law severely restricts the use of "[[greenwashing]]" to market automobiles, strongly prohibiting advertising a vehicle as being environmentally friendly, with large fines issued to violators.<ref>{{cite web |url=http://www.forbrukerombudet.no/asset/2857/1/2857_1.pdf |title=Archived copy |accessdate=2009-04-21 |url-status=dead |archiveurl=https://web.archive.org/web/20101123183503/http://forbrukerombudet.no/asset/2857/1/2857_1.pdf |archivedate=2010-11-23 }}</ref><ref>{{cite web|author=Independent Newspapers Online|url=http://www.motoring.co.za/index.php?fArticleId=4028677 |title=Prove 'clean, green' ads, Norway tells automakers|publisher=Motoring.co.za |date=2010-05-05 |accessdate=2010-12-12}}</ref><ref>{{cite web |url=http://www.treehugger.com/files/2007/09/norway_says_car.php |title=Greenwash Watch: Norways Says Cars Neither Green Nor Clean |publisher=Treehugger.com |date= |accessdate=2010-12-12 |archive-date=2011-05-18 |archive-url=https://web.archive.org/web/20110518210605/http://www.treehugger.com/files/2007/09/norway_says_car.php |url-status=dead }}</ref><ref>{{cite news|last=Doyle |first=Alister|url=https://www.reuters.com/article/environmentNews/idUSL0671323420070906 |title=Norways Says Cars Neither Green Nor Clean|publisher=Reuters.com |date= 2007-09-06|accessdate=2010-12-12}}</ref>
Some studies try to compare environmental impact of electric and petrol vehicles over complete life cycle, including production, operation, and dismantling.
<ref name="GreenComparisonIndustrialEcology">{{cite journal |author=Troy R. Hawkins, Bhawna Singh, Guillaume Majeau-Bettez, Anders Hammer | title=Comparative Environmental Life Cycle Assessment of Conventional and Electric Vehicles | journal=Journal of Industrial Ecology | date=16 January 2013 | doi=10.1111/j.1530-9290.2012.00532.x | volume=17 | pages=53–64}}</ref>
<ref name="GreenComparisonScientific">{{cite magazine |author=David Biello | url=https://www.scientificamerican.com/article/electric-cars-are-not-necessarily-clean/ | title=Electric Cars Are Not Necessarily Clean | magazine=Scientific American | date=11 May 2016 | access-date=2017-09-19 }}</ref>
<ref name="GreenComparisonShrink">{{cite web |author= | url=http://shrinkthatfootprint.com/electric-car-emissions | title=Shades of Green: Electric Cars' Carbon Emissions Around the Globe | website= | publisher=Shrink that Footprint | date= |isbn= | archive-url=https://web.archive.org/web/20170919005547/http://shrinkthatfootprint.com/electric-car-emissions | archive-date=2017-09-19 | access-date=2017-09-19 }}</ref>
<ref name="GreenComparisonCitylab">{{cite web |author=Eric Jaffe | url=https://www.citylab.com/environment/2015/06/where-electric-vehicles-actually-cause-more-pollution-than-gas-cars/397136/ | title=Where Electric Vehicles Actually Cause More Pollution Than Gas Cars | website= | publisher=CityLab | date=29 June 2015 |isbn= | archive-url=https://web.archive.org/web/20170919010906/https://www.citylab.com/environment/2015/06/where-electric-vehicles-actually-cause-more-pollution-than-gas-cars/397136/ | archive-date=2017-09-19 | access-date=2017-09-19 }}</ref>
In general, results differ vastly dependent on the region considered, due to difference in energy sources to produce electricity that fuels electric vehicles. When considering only CO<sub>2</sub> emissions, it is noted that production of electric cars generate about twice as much emissions as that of internal combustion cars.<ref name="GreenComparisonIndustrialEcology" /> However, emissions of CO<sub>2</sub> during operation are much larger (on average) than during production. For electric cars, emissions caused during operation depend on energy sources used to produce electricity and thus vary a lot geographically. Studies suggest that when taking into account both production and operation, electric cars would cause more emissions in economies where production of electricity is not clean, e.g., it is mostly coal based.<ref name="GreenComparisonScientific" /><ref name="GreenComparisonShrink" /> For this reason, some studies found that driving electric cars is less environmentally damaging in western US states than in eastern ones, where less electricity is produced using cleaner sources. Similarly, in countries like India, Australia or China, where large portion of electricity is produced by using coal, driving electric vehicles would cause larger environmental damage than driving petrol vehicles. When justifying use of electric cars over petrol cars, these kinds of studies do not provide sufficiently clear results. Environmental impact is calculated based on fuel mix used to produce electricity that powers electric cars. However, when a gas vehicle is replaced by an equivalent electric vehicle, additional power must be installed in electrical grid. This additional capacity would normally not be based on the same ratios of energy sources ("clean" versus fossil fuels) than the current capacity. Only when additional electricity production capacity installed to switch from petrol to electric vehicles would predominantly consist of clean sources, switch to electric vehicles could reduce environmental damage. Another common problem in methodology used in comparative studies is that it only focuses on specific kinds of environmental impact. While some studies focus only on emission of gas pollutants over life cycle or only on greenhouse gas emissions such as CO<small>2</small>, comparison should also account for other environmental impacts such as pollutants released otherwise during production and operation or ingredients that can not be effectively recycled.<ref name="ElectricEnvironmentImpact">{{cite magazine |author=Lizzie Wade | url=https://www.wired.com/2016/03/teslas-electric-cars-might-not-green-think/ | title=Tesla's Electric Cars Aren't as Green as You Might Think | magazine=Wired | date=31 March 2016 | archive-url=https://web.archive.org/web/20170919145112/https://www.wired.com/2016/03/teslas-electric-cars-might-not-green-think/ | archive-date=2017-09-19 | access-date=2017-09-20 }}</ref> Examples include use of lighter high performing metals, lithium batteries and more rare metals in electric cars, which all have high environmental impact.
A study that also looked at factors other than energy consumption and carbon emissions has suggested that there is no such thing as an environmentally friendly car.<ref>{{cite web|url=http://www.eco-logica.co.uk/pdf/wtpp17.3.pdf |author=Tziovaras, T. (2011) |title=Is there such a thing as an environmentally-friendly car? |publisher=World Transport Policy and Practice,17, 3: 27-31|accessdate=2012-07-08}}</ref>
The use of vehicles with increased fuel efficiency is usually considered positive in the short term but criticism of any hydrocarbon-based personal transport remains. The [[Jevons paradox]] suggests that energy efficiency programs are often counter-productive, even increasing energy consumption in the long run.<ref>{{cite journal|doi=10.1016/j.ecolecon.2005.03.020|last=Alcott |first=Blake |title=Jevons' paradox|journal=Ecological Economics |date=July 2005 |volume=54 |issue=1 |pages=9–21|hdl=1942/22574 |hdl-access=free }}</ref> Many environmental researchers believe that [[sustainable transport]] may require a move away from hydrocarbon fuels and from our present automobile and highway paradigm.<ref>{{cite book
| last =Kunstler
| first =James Howard
| title =Too Much Magic; Wishful Thinking, Technology, and the Fate of the Nation
| publisher =Atlantic Monthly Press
| year =2012
| isbn =978-0-8021-9438-1
}}</ref><ref>{{Citation
| last = Gilbert
| first = Richard
| chapter = Transportation is the Post Carbon World
| editor-last = McKibben
| editor-first = D
| title = The Post Carbon Reader: Managing the 21st Century Sustainability Crisis
| volume =
| publisher = Watershed Media
| date = 2010
| isbn = 978-0-9709500-6-2
}}</ref><ref>{{cite journal
| last =Black
| first =W R
| title =Sustainable transportation: a US perspective
| journal =Journal of Transport Geography
| volume = 4| issue = 3
| pages =151–159
| year =1996
| doi =10.1016/0966-6923(96)00020-8
}}</ref>
==National and international promotion==
===European Union===
The [[European Union]] is promoting the marketing of greener cars via a combination of binding and non-binding measures.<ref>{{cite web |url=http://www.euractiv.com/Article?tcmuri=tcm:29-117504-16&type=LinksDossier |title=Green cars | EU - European Information on Sustainable Dev |publisher=EurActiv.com |date= |accessdate=2010-12-12 |archive-date=2006-03-16 |archive-url=https://web.archive.org/web/20060316133821/http://www.euractiv.com/Article?tcmuri=tcm:29-117504-16&type=LinksDossier |url-status=dead }}</ref> As of April 2010, 15 of the 27 [[member states of the European Union]] provide tax incentives for [[Plug-in electric vehicle|electrically chargeable vehicles]] and some [[alternative fuel vehicle]]s, which includes all [[Western Europe]]an countries except [[Italy]] and [[Luxembourg]], plus the [[Czech Republic]] and [[Romania]]. The incentives consist of tax reductions and exemptions, as well as of bonus payments for buyers of [[electric car]]s, [[plug-in hybrid]]s, [[hybrid electric vehicle]]s and [[natural gas vehicle]]s.<ref name=GCC0420>{{cite web|url=http://www.greencarcongress.com/2010/04/acea-tax-20100421.html#more|title=Growing Number of EU Countries Levying CO2 Taxes on Cars and Incentivizing Plug-ins|publisher=Green Car Congress|date=2010-04-21|accessdate=2010-04-23}}</ref><ref name=ACEA2>{{cite web|url=http://www.acea.be/index.php/news/news_detail/an_increasing_number_of_member_states_levy_co2_based_taxation_or_incentivis/|title=An Increasing Number of Member States Levy CO2-Based Taxation or Incentivise Electric Vehicles|publisher=[[European Automobile Manufacturers Association]]|date=2010-04-21|accessdate=2010-04-23|archive-date=2010-04-25|archive-url=https://web.archive.org/web/20100425010516/http://www.acea.be/index.php/news/news_detail/an_increasing_number_of_member_states_levy_co2_based_taxation_or_incentivis|url-status=dead}}</ref>
===United States===
The [[United States Environmental Protection Agency]] (EPA) is promoting the marketing of greener cars via the [[SmartWay]] program. The SmartWay and SmartWay Elite designation mean that a vehicle is a better environmental performer relative to other vehicles. This US EPA designation is arrived at by taking into account a vehicle's Air Pollution Score and Greenhouse Gas Score. Higher Air Pollution Scores indicate vehicles that emit lower amounts of pollutants that cause smog relative to other vehicles. Higher Greenhouse Gas Scores indicate vehicles that emit lower amounts of carbon dioxide and have improved fuel economy relative to other vehicles.
To earn the SmartWay designation, a vehicle must earn at least a 6 on the Air Pollution Score and at least a 6 on the Greenhouse Gas Score, but have a combined score of at least 13. SmartWay Elite is given to those vehicles that score 9 or better on both the Greenhouse Gas and Air Pollution Scores.
A Green Vehicle Marketing Alliance, in conjunction with the [[Oak Ridge National Laboratory]] (ONRL), periodically meets, and coordinates marketing efforts.<ref>{{cite web |url=http://www.edf.org/documents/3687_GVMA_Report_0304.pdf |title=Microsoft Word - GVMA Report to ORNL, March 2004.doc |date= |accessdate=2010-12-12 |archive-date=2010-07-24 |archive-url=https://web.archive.org/web/20100724203913/http://www.edf.org//documents/3687_GVMA_Report_0304.pdf |url-status=dead }}</ref>
==Progressive Insurance Automotive X Prize==
The Progressive Insurance Automotive X PRIZE (PIAXP) is a set of competitions, programs and events, from the [[X PRIZE Foundation]] to "inspire a new generation of super-efficient vehicles that help break America's addiction to oil and stem the effects of climate change."<ref>{{cite web|title=Competition Guidelines, Version 1.2, 13 January 2009|page=5|url=http://www.progressiveautoxprize.org/files/downloads/auto/PIAXP_Guidelines_V_1.0_20090110.pdf|publisher=[[X PRIZE Foundation]]|accessdate=2009-06-21|url-status=dead|archiveurl=https://web.archive.org/web/20090801164332/http://www.progressiveautoxprize.org/files/downloads/auto/PIAXP_Guidelines_V_1.0_20090110.pdf|archivedate=1 August 2009}}</ref> [[Progressive Corporation|Progressive Insurance]] is the title sponsor of the prize, the centerpiece of which is the Competition Division, within which a $10 million purse will be divided between the winners of three competitions.
The essence of each competition is to design, build and race super-efficient vehicles that will achieve 100 [[Miles per gallon of gasoline equivalent|MPGe]] (2.35 liter/100 kilometer) and can be produced for the mass market.<ref>{{cite web|title=Auto X Prize Revs Up|url=http://cosmiclog.msnbc.msn.com/archive/2007/03/30/107615.aspx|publisher=[[MSNBC]]|first=Alan|last=Boyle|accessdate=2008-09-16|url-status=dead|archiveurl=https://web.archive.org/web/20080808121425/http://cosmiclog.msnbc.msn.com/archive/2007/03/30/107615.aspx|archivedate=2008-08-08}} {{Cite web |url=http://cosmiclog.msnbc.msn.com/archive/2007/03/30/107615.aspx |title=Archived copy |access-date=2020-07-06 |archive-date=2008-08-08 |archive-url=https://web.archive.org/web/20080808121425/http://cosmiclog.msnbc.msn.com/archive/2007/03/30/107615.aspx }}</ref> Within the Competition Division, there are two vehicle classes: Mainstream and Alternative. The mainstream class has a prize of $5 million. The alternate class has 2 separate prizes of $2.5 million, one for side-by-side seating and one for tandem seating.<ref name="guidelines">{{cite web|title=Competition Guidelines|url=http://www.progressiveautoxprize.org/files/downloads/auto/PIAXP_Guidelines_V_1.0_20090110.pdf|publisher=progressiveautoxprize.org|accessdate=2009-05-28|url-status=dead|archiveurl=https://web.archive.org/web/20090801164332/http://www.progressiveautoxprize.org/files/downloads/auto/PIAXP_Guidelines_V_1.0_20090110.pdf|archivedate=2009-08-01}}</ref>
Some of the competitors, such as Aptera and Tesla, are already taking deposits for 'green' vehicles from customers.
==Green car rankings==
[[File:Hyundai Ioniq Electric (12).JPG|thumb|[[Hyundai Ioniq Electric]] ]]
[[File:2018 BMW i3 facelift (1).jpg|thumb|[[BMW i3]] electric car]]
[[File:Toyota Prius (11).JPG|thumb|[[Toyota Prius Eco]] (4th gen)]]
[[File:Chevrolet Bolt EV SAO 2016 8836.jpg|thumb|[[Chevrolet Bolt EV]] ]]
[[File:2016 Chevrolet Volt NAIAS 2015 trimmed.jpg|thumb|[[Chevrolet Volt (second generation)|Chevrolet Volt (2nd gen.)]] plug-in hybrid]]
[[File:DCA 06 2012 Chevy Volt 4035.JPG|thumb|[[Chevrolet Volt]] (1st gen) [[plug-in hybrid]] ]]
[[File:2018 Nissan Leaf Tekna Front.jpg|thumb|[[Nissan Leaf]] [[electric car]] ]]
[[File:Toyota Mirai in Warsaw, Poland Nov 2015 IMG 0130.JPG|thumb|[[Toyota Mirai]] [[Hydrogen vehicle|hydrogen]] [[Fuel cell vehicle|fuel cell car]] ]]
[[File:I MiEV EDTA DC 04 2011 1782.jpg|thumb|[[Mitsubishi i-MiEV]] electric car]]
[[File:Ford Focus Electric with badging WAS 2011 924.jpg|thumb|[[Ford Focus Electric]] ]]
[[File:Ford C Max Energi PHEV with badging WAS 2011 897.jpg|thumb|[[Ford C-Max Energi]] plug-in hybrid]]
[[File:2014 Tesla Model S in Germany.jpg|thumb|[[Tesla Model S]] electric car]]
[[File:2016 BMW i8.jpg|thumb|[[BMW i8]] [[plug-in hybrid]] ]]
[[File:Ford Fusion Energi SEL with badge WAS 2012 0583.jpg|thumb|[[Ford Fusion Energi]] plug-in hybrid]]
[[File:FCX Clarity.jpg|thumb|[[Honda FCX Clarity]] [[Hydrogen vehicle|hydrogen]] [[Fuel cell vehicle|fuel cell car]] ]]
[[File:2010 Toyota Prius front.JPG|thumb|[[Toyota Prius#2009– (model ZVW30)|Toyota Prius (3rd gen)]] ]]
[[File:Honda Civic Hybrid with logo DC 5020 03 2009.jpg|thumb|[[Honda Civic Hybrid#Second generation (2005–2011)|Honda Civic Hybrid (2nd gen)]] ]]
[[File:2010 Ford Fusion Hybrid WAS 2010 8830.JPG|thumb|[[Ford Fusion Hybrid#First generation|Ford Fusion Hybrid (1st gen)]] ]]
[[File:2010 Honda Insight--DC.jpg|thumb|[[Honda Insight#Second generation|Honda Insight (2nd gen)]] ]]
[[File:Honda Civic GX NGV WAS 2010 8943.JPG|thumb|[[Honda Civic GX]] ]]
Several automobile magazines, motor vehicle specialized publications and [[environmental group]]s publish annual rankings or listings of the best green [[Car of the Year|cars of a given year]]. The following table presents a selection of the annual top pickings.
{| class=" wikitable" style="margin: 1em auto 1em auto"
! colspan="6" style="text-align:center; background:#abcdef;"| Selected annual rankings of green cars
|-
! style="background:#ABCDEF;"| Vehicle || style="background:#ABCDEF;"|Year<br />model|| style="background:#ABCDEF;"|Type of<br />vehicle/fuel||style="background:#ABCDEF;"| [[United States Environmental Protection Agency|EPA]]<br /> Combined <br />[[fuel economy in automobiles|mileage]]<br />([[Miles per gallon|mpg]]) || style="background:#ABCDEF;"| [[United States Environmental Protection Agency|EPA]]<br /> City <br />[[fuel economy in automobiles|mileage]]<br />([[Miles per gallon|mpg]])|| style="background:#ABCDEF;"|EPA<br /> Highway<br /> [[fuel economy in automobiles|mileage]]<br />([[Miles per gallon|mpg]])
|-
| colspan="6" style="text-align:center; background:#cfc;"|Most efficient EPA-certified vehicles based on combined MPG rating<ref name="EPAMost2017">{{cite web|url=http://www.fueleconomy.gov/feg/extremeMPG.jsp|title=Most Efficient EPA Certified Vehicles|publisher=fueleconomy.gov|author=[[U. S. Environmental Protection Agency]] and [[U.S. Department of Energy]]|date=2016-11-16|accessdate=2016-11-19}} ''The 2014–16 BMW i3 BEV was the most efficient EPA-certified vehicles considering all fuels and of all years until November 2016, when it was surpassed by the 2017 [[Hyundai Ioniq Electric]]. {{As of|2016|11}}, the 2016 Toyota Prius Eco hybrid car is most efficient EPA-certified vehicle with a gasoline engine without plug-in capability.''</ref><ref name=EPAmostMPGe>{{cite news | url=http://www.greencarreports.com/news/1107392_hyundai-ioniq-electric-beats-prius-prime-bmw-i3-on-energy-efficiency | title=Hyundai Ioniq Electric beats Prius Prime, BMW i3 on energy efficiency | first= Stephen |last=Edelstein | work=Green Car Reports | date=2016-11-21 | accessdate=2016-11-21}}</ref><ref name=EPAtop10>{{cite web|url=http://www.fueleconomy.gov/feg/topten.jsp|title=Fueleconomy.gov's Top Fuel Sippers (EPA Ratings, All Years) |publisher=fueleconomy.gov|author=[[U. S. Environmental Protection Agency]] and [[U.S. Department of Energy]]|date=2015-12-22|accessdate=2015-12-26}} ''Excludes all-electric vehicles. Click on the tab "Top Fuel Sippers (EPA Ratings, All Years)" ''</ref><ref name="2016PriusEcoTop">{{cite news|url=http://www.greencarreports.com/news/1101506_2016-toyota-prius-most-fuel-efficient-car-without-a-plug-ever|title=2016 Toyota Prius: Most Fuel-Efficient Car Without A Plug, Ever|first=John|last=Voelcker|work=Green Car Reports|date=2015-12-21|accessdate=2015-12-26}} The first generation [[Honda Insight]] was the most fuel efficient gasoline-powered car available in the U.S. without [[Plug-in electric vehicle|plug-in capability]] for the length of its production run and until December 2015, when it was surpassed by the 2016 [[Toyota Prius#Fourth generation (2015–present)|Toyota Prius Eco]].</ref>
|- style="text-align:center;"
| style="text-align:left;"|[[Hyundai Ioniq Electric]]— All years, all fuels || 2017 || [[Electric car]] || 136 [[Miles per gallon gasoline equivalent|mpg-e]]|| 150 mpg-e|| 122 mpg-e
|- style="text-align:center;"
| style="text-align:left;"|[[BMW i3]]— All years, all fuels || 2014/16 || [[Electric car]] ||124 [[Miles per gallon gasoline equivalent|mpg-e]]|| 137 mpg-e||111 mpg-e
|- style="text-align:center;"
| align=left|[[BMW i3 REx]] — Current year, gasoline fuel||2014/16||[[Plug-in hybrid]] ||88 mpg-e ||97 mpg-e || 79 mpg-e
|- style="text-align:center;"
| align=left|[[Toyota Prius Eco]] — All years, gasoline fuel||2016 ||[[Hybrid electric vehicle|Hybrid electric]] ||56 ||58 || 53
|-
| colspan="6" style="text-align:center; background:#cfc;"|[[Green Car Journal]] — [[Green Car of the Year]]
|- style="text-align:center;"
| align=left| [[Chevrolet Bolt EV]] — 2017 Award<ref>{{cite news |url=http://www.autoblog.com/2016/11/17/chevy-bolt-wins-2017-green-car-of-the-year/ |title=Chevy Bolt wins 2017 Green Car of the Year |first=Sebastian |last=Blanco |work=Autoblog.com |date=2016-11-17 |accessdate=2016-11-21}}</ref> || 2017 || Electric car ||119 [[Miles per gallon gasoline equivalent|mpg-e]]|| 128 mpg-e || 110 mpg-e
|- style="text-align:center;"
| rowspan="2" style="text-align:left;"|[[Chevrolet Volt (second generation)]] — 2016 Award<ref name=GCOY2016>{{cite news|url=http://www.autoblog.com/2015/11/19/2016-chevy-volt-green-car-year/|title=2016 Chevy Volt wins Green Car of the Year |first=Sebastian|last=Blanco|work=Autoblog Green |date=2015-11-19|accessdate=2015-11-21}}</ref><ref name=Volt2015_2016>{{cite web|url=http://www.fueleconomy.gov/feg/Find.do?action=sbs&id=36863&id=35246|title=Compare Side-by-Side - 2016/2015 Chevrolet Volt|publisher=Fueleconomy.gov|author=[[U.S. Environmental Protection Agency]] and [[U.S. Department of Energy]]|date=2015-09-01|accessdate=2015-09-02}}</ref>|| rowspan="2"| 2016||rowspan="2"|[[Plug-in hybrid]] || style="background:#f0f0ff;"|Gas equivalent<br/>All-electric mode|| style="background:#f0f0ff;"|Gasoline<br/>only mode || style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
|106 [[Miles per gallon gasoline equivalent|mpg-e]] ||42 mpg ||53 mi
|- style="text-align:center;"
| align=left| [[BMW i3]] — 2015 Award<ref>{{cite news|url=http://www.freep.com/story/money/cars/2014/11/20/green-car-year-bmw/70008216/|title=BMW i3 named 2015 Green Car of the Year|first=Alisa|last=Priddle|work=[[Detroit Free Press]]|date=2014-11-20|accessdate=2014-11-21}}</ref>||2014|| Electric car ||124 [[Miles per gallon gasoline equivalent|mpg-e]]|| 137 mpg-e||111 mpg-e
|- style="text-align:center;"
| align=left| [[Honda Accord#Ninth generation (2013–present)|Honda Accord ninth generation line-up]]<br> — 2014 Award<ref>{{cite web|url=http://green.autoblog.com/2013/11/21/honda-accord-hybrid-phev-2014-green-car-of-the-year-la/|title=Honda Accord Hybrid and PHEV win 2014 Green Car of the Year|first=Sebastian|last=Blanco|publisher=Autoblog Green |date=2013-11-21|accessdate=2013-11-23}}</ref>|| 2014 ||Gasoline<br/>hybrid and plug-in variants ||colspan="3"| mim 29 mpg, hybrid 47 mpg, plug-in 115 mpg-e<ref>[http://www.fueleconomy.gov/feg/Find.do?action=sbs&id=34313&id=34395&id=33557 Compare Side-by-Side 2014 Honda Accord variants]</ref>
|- style="text-align:center;"
| align=left|[[Ford Fusion (Americas)#Second generation (2013–)|Ford Fusion 2nd gen line-up]] — 2013 Award<ref>{{cite web|url=http://www.autoblog.com/2012/11/29/ford-fusion-wins-2013-green-car-of-the-year/|title=Ford Fusion wins 2013 Green Car Of The Year |first=Sebastian|last=Blanco|publisher=Autoblog.com |date=2012-11-29|accessdate=2012-11-29}}</ref>|| 2013 ||Gasoline, [[Ford EcoBoost engine|EcoBoost]],<br/> [[Ford Fusion Energi|hybrid and plug-in variants]] ||colspan="3"| mim 34 mpg, hybrid 47 mpg, plug-in 100 mpg-e
|- style="text-align:center;"
| align=left|[[Honda Civic GX]] — 2012 Award<ref>{{cite news|url=http://www.latimes.com/business/autos/la-fi-la-auto-show-2011-honda-civic-natural-gas-wins-green-car-of-the-year-award-20111117,0,3207674.story|title=Honda Civic Natural Gas wins 2012 Green Car of the Year Award |authorlink=Susan Carpenter |first=Susan |last= Carpenter |work=[[Los Angeles Times]]|date=2011-11-17|accessdate=2011-11-17}}</ref>|| 2012 ||[[Natural gas vehicle|Natural gas]]|| 28||24 ||36
|- style="text-align:center;"
| rowspan="2" style="text-align:left;"|[[Chevrolet Volt]] — 2011 Award<ref>{{cite web|url=http://www.greencar.com/articles/chevrolet-volt-electric-car-2011-green-car-year.php |title=Chevrolet Volt Electric Car is 2011 Green Car of the Year |publisher=[[Green Car Journal]] |date=2010-11-18 |accessdate=2010-11-18 |url-status=dead |archiveurl=https://web.archive.org/web/20101124054434/http://www.greencar.com/articles/chevrolet-volt-electric-car-2011-green-car-year.php |archivedate=2010-11-24 }}</ref><ref name=Reuters112410>{{cite news|url=https://www.reuters.com/article/idUSTRE6AN65K20101124|title=Chevy Volt tops Prius in fuel economy rating|author1=David Bailey |author2=Kevin Krolicki |work=[[Reuters]]|date=2010-11-24|accessdate=2010-11-24}}</ref><ref name=GCCEPAVolt>{{cite web|url=http://www.greencarcongress.com/2010/11/volt-20101124.html#more|title=Volt receives EPA ratings and label: 93 mpg-e all-electric, 37 mpg gas-only, 60 mpg-e combined|publisher=Green Car Congress|date=2010-11-24|accessdate=2010-11-24}}</ref>|| rowspan="2"| 2011||rowspan="2"|[[Plug-in hybrid]] || style="background:#f0f0ff;"|Gas equivalent<br/>All-electric mode|| style="background:#f0f0ff;"|Gasoline<br/>only mode || style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
|93 [[Miles per gallon gasoline equivalent|mpg-e]] ||37 mpg ||35 mi
|-
| colspan="6" style="text-align:center; background:#cfc;"|[[Green Car Journal]] — [[Green Car Vision Award]]
|- style="text-align:center;"
| rowspan="2" style="text-align:left;"|[[Ford C-Max Energi]] — 2012 Award<ref>{{cite web|url=http://green.autoblog.com/2012/01/26/ford-c-max-energi-wins-2012-green-car-vision-award/?a_dgi=aolshare_email|title=Ford C-Max Energi wins 2012 Green Car Vision Award|first=Sebastian|last=Blkanco|publisher=Autoblog Green |date=2012-01-26|accessdate=2012-01-26}}</ref>|| rowspan="2"| 2013||rowspan="2"|[[Plug-in hybrid]] || style="background:#f0f0ff;"|Gas equivalent<br/>All-electric mode|| style="background:#f0f0ff;"|Gasoline<br/>only mode || style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
| <center>100 [[Miles per gallon gasoline equivalent|mpg-e]]</center> || <center>43 mpg</center> || <center>20 mi</center>
|- style="text-align:center;"
|rowspan="2" style="text-align:left;"|[[Ford Focus Electric]] — 2011 Award<ref>{{cite web|url=http://green.autoblog.com/2011/01/27/dc-2011-ford-focus-electric-wins-green-car-vision-award/|title=DC 2011: Ford Focus Electric wins Green Car Vision award|publisher=AutoblogGreen |first=Sebastian|last=Blanco|date=2011-01-27|accessdate=2011-01-27}}</ref> ||rowspan="2"|2012|| rowspan="2"| [[Electric car]] || style="background:#f0f0ff;" colspan="2"|Gasoline equivalent<br/>fuel economy|| style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
| colspan="2"|<center>105 [[Miles per gallon gasoline equivalent|mpg-e]]</center>||100 mi
|- style="text-align:center;"
| rowspan="2" style="text-align:left;"|[[Nissan Leaf]] — 2010 Award<ref>{{cite web|url=http://www.greencar.com/articles/nissan-leaf-electric-car-wins-2010-green-car-vision-award.php|title=Nissan Leaf Electric Car Wins 2010 Green Car Vision Award|publisher=[[Green Car Journal]]|date=2010-01-26|accessdate=2010-05-09|url-status=dead|archiveurl=https://web.archive.org/web/20100504162701/http://www.greencar.com/articles/nissan-leaf-electric-car-wins-2010-green-car-vision-award.php|archivedate=2010-05-04}}</ref><ref name=NYTEPA>{{cite news|url=https://www.nytimes.com/2010/11/23/business/23leaf.html?_r=1&hpw|title=Nissan Says Its Electric Leaf Gets Equivalent of 99 M.P.G.|work=[[New York Times]]|first=Nick|last=Bunkley|date=2010-11-22|accessdate=2010-11-23}}</ref>|| rowspan="2"|2011|| rowspan="2"|[[Electric car]] || style="background:#f0f0ff;" colspan="2"|Gasoline equivalent<br/>fuel economy|| style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
| colspan="2"|99 [[Miles per gallon gasoline equivalent|mpg-e]] ||73 mi
|- style="text-align:center;"
| rowspan="2" style="text-align:left;"|[[Chevrolet Volt]] — 2009 Award<ref name=Reuters112410/><ref name=GCCEPAVolt/><ref>{{cite web|url=http://www.greencar.com/articles/innovative-chevy-volt-wins-2009-green-car-vision-award.php |title=Innovative Chevy Volt Wins 2009 Green Car Vision Award |publisher=[[Green Car Journal]] |date=2009-02-04 |accessdate=2010-05-09 |url-status=dead |archiveurl=https://web.archive.org/web/20090722072129/http://www.greencar.com/articles/innovative-chevy-volt-wins-2009-green-car-vision-award.php |archivedate=2009-07-22 }}</ref>|| rowspan="2"| 2011||rowspan="2"|[[Plug-in hybrid]] || style="background:#f0f0ff;"|Gas equivalent<br/>All-electric mode|| style="background:#f0f0ff;"|Gasoline<br/>only mode || style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
|93 [[Miles per gallon gasoline equivalent|mpg-e]] ||37 mpg ||35 mi
|-
| colspan="6" style="text-align:center; background:#cfc;"|[[World Car of the Year]] — World Green Car
|-style="text-align:center;"
| style="text-align:left;"| [[Toyota Mirai]] — 2016 Award<ref>{{cite press release | url=http://www.prnewswire.com/news-releases/and-now-there-is-one-toyota-mirai-wins-2016-world-green-car-award-300241094.html | title=And Now There Is One… TOYOTA MIRAI Wins 2016 World Green Car Award |publisher=PR Newswire |location=[[New York City]] |date=2016-03-14 |accessdate=2016-03-26}}</ref>|| 2016|| [[Hydrogen vehicle|Hydrogen]] [[Fuel cell vehicle|fuel cell]] || style="background:#f0f0ff;"| 66 mpg-e || 66 mpg-e || 66 mpg-e
|-style="text-align:center;"
|rowspan="2" style="text-align:left;"| [[BMW i8]] — 2015 Award<ref>{{cite press release |url=http://www.wcoty.com/web/media_release.asp?release=100&year=2015|title=BMW i8 Wins 2015 World Green Car Award |publisher=[[World Car of the Year]]|location=New York |date=2015-04-02|accessdate=2015-11-29}}</ref><ref>{{cite web|url=http://www.fueleconomy.gov/feg/Find.do?action=sbs&id=36031&id=35599|title=Compare Side-by-Side - 2014/2015 BMW i8|publisher=Fueleconomy.gov|author=[[U.S. Environmental Protection Agency]] and [[U.S. Department of Energy]]|date=2015-08-14|accessdate=2015-08-16}}</ref>|| rowspan="2"| 2015||rowspan="2"|[[Plug-in hybrid]] || style="background:#f0f0ff;"|Gas equivalent<br/>All-electric mode|| style="background:#f0f0ff;"|Gasoline<br/>only mode || style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
|76 [[Miles per gallon gasoline equivalent|mpg-e]] ||28 mpg ||15 mi
|-style="text-align:center;"
|rowspan="2" style="text-align:left;"| [[BMW i3]] — 2014 Award<ref>{{cite news|url=https://www.forbes.com/sites/jimhenry/2014/04/17/bmwi3-drives-off-with-green-world-car-of-the-year-award-plus-a-surprise/|title=New York Auto Show: BMWi3 Is The 2014 World Green Car Of The Year|first=Jim|last=Henry|work=[[Forbes]]|date=2014-04-17|accessdate=2014-04-17}}</ref>||rowspan="2"|2014||rowspan="2"|[[Electric car]] || style="background:#f0f0ff;" colspan="2"|Gasoline equivalent<br/>fuel economy||style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
| colspan="2"|124 [[Miles per gallon gasoline equivalent|mpg-e]] ||81 mi
|- style="text-align:center;"
| rowspan="2" style="text-align:left;"|[[Tesla Model S]] — 2013 Award<ref name=WGCOTY2012_13>{{cite news |url=http://www.ibtimes.com/press-release/20130328/now-there-one-tesla-model-s-declared-2013-world-green-car-1158695# |title=And Now There Is One.... Tesla Model S Declared 2013 World Green Car |author=PRNewswire |work=[[International Business Times]] |date=2013-03-28 |accessdate=2013-03-28 |url-status=dead |archiveurl=https://web.archive.org/web/20130524082052/http://www.ibtimes.com/press-release/20130328/now-there-one-tesla-model-s-declared-2013-world-green-car-1158695 |archivedate=2013-05-24 }} {{Webarchive|url=https://web.archive.org/web/20130524082052/http://www.ibtimes.com/press-release/20130328/now-there-one-tesla-model-s-declared-2013-world-green-car-1158695 |date=2013-05-24 }}</ref>|| rowspan="2"|2013|| rowspan="2"|[[Electric car]]<br/>(60/85 [[kWh]] battery) || style="background:#f0f0ff;" colspan="2"|Gasoline equivalent<br/>fuel economy|| style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
| colspan="2"|95/89 [[Miles per gallon gasoline equivalent|mpg-e]] ||208/265 mi
|- style="text-align:center;"
| style="text-align:left;"|[[Mercedes-Benz S 250 CDI BlueEFFICIENCY]]<br>— 2012 Award<ref name=WGCOTY2012_13/>|| 2012 ||[[Clean diesel]] ||colspan="3"| {{convert|5.7|l/100 km|abbr=on}}
|- style="text-align:center;"
| rowspan="2" style="text-align:left;"|[[Chevrolet Volt]] — 2011 Award<ref>{{cite web|url=http://www.wcoty.com/web/media_release.asp?release=72&year=2011|title=Chevrolet Volt Declared 2011 World Green Car|publisher=[[World Car of the Year]]|date=2011-04-21|accessdate=2011-04-21}}</ref>|| rowspan="2"| 2011||rowspan="2"|[[Plug-in hybrid]] || style="background:#f0f0ff;"|Gas equivalent<br/>All-electric mode|| style="background:#f0f0ff;"|Gasoline<br/>only mode || style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
|93 [[Miles per gallon gasoline equivalent|mpg-e]] ||37 mpg ||35 mi
|- style="text-align:center;"
| align=left|[[BlueMotion|Volkswagen BlueMotion]] — 2010 Award<ref>{{cite web|url=http://www.wcoty.com/vehicles/?year=2010&cat=4|title=World Green Car: 2010|publisher=[[World Car of the Year]]|accessdate=2010-05-02|archive-date=2010-03-11|archive-url=https://web.archive.org/web/20100311155817/http://www.wcoty.com/vehicles/?year=2010&cat=4|url-status=dead}}</ref><br/> ([[Volkswagen Golf Mk5|Golf]], [[Volkswagen Passat#Passat Mk6 (B6 PQ46, 2005–present)|Passat]], [[Volkswagen Polo Mk4|Polo]]) ||2010 ||[[Clean diesel]] || n.a.||n.a. ||n.a.
|- style="text-align:center;"
| align=left|[[Honda FCX Clarity]] — 2009 Award<ref>{{cite web|url=http://www.wcoty.com/vehicles/?year=2009&cat=4|title=World Green Car: 2009 Eligible Vehicles|publisher=[[World Car of the Year]]|accessdate=2010-05-02|archive-date=2010-11-09|archive-url=https://web.archive.org/web/20101109114153/http://www.wcoty.com/vehicles/?year=2009&cat=4|url-status=dead}}</ref><br/>(miles per kilogram of hydrogen) ||2009 ||[[Hydrogen vehicle|Hydrogen]] [[fuel cell vehicle|fuel cell]]|| 59 mpg-e ||58 mpg-e|| 60 mpg-e
|-
| colspan="6" style="text-align:center; background:#cfc;"|[[Consumer Reports]] Top Picks: Green Car Category
|- style="text-align:center;"
| rowspan="2" style="text-align:left;"|[[Tesla Model S]] — Best overall model 2014<ref name=CR2014/>|| rowspan="2"|2014|| rowspan="2"|[[Electric car]]<br/>(60/85 [[kWh]] battery) || style="background:#f0f0ff;" colspan="2"|Gasoline equivalent<br/>fuel economy|| style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
| colspan="2"|95/89 [[Miles per gallon gasoline equivalent|mpg-e]] ||208/265 mi
|- style="text-align:center;"
| align=left|[[Toyota Prius#2009– (model ZVW30)|Toyota Prius]] — Best green car 2014<ref name=CR2014>{{cite web |url=http://www.consumerreports.org/cro/magazine/2014/04/top-picks-2014/index.htm|title=Consumer Reports' Top Picks 2014 - The best models in 10 categories|publisher=[[Consumer Reports]]|date=February 2014|accessdate=2014-04-21}}</ref>||2014||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|- style="text-align:center;"
| align=left|Toyota Prius — Best green car 2013<ref>{{cite web |url=http://www.consumerreports.org/cro/magazine/2013/04/top-picks-2013/index.htm|title=Top Picks 2013 Best car models of the year in 10 categories|publisher=[[Consumer Reports]]|date=April 2013|accessdate=2014-04-21}}</ref>||2013||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|- style="text-align:center;"
| align=left|Toyota Prius — Best green car 2012<ref>{{cite web|url=http://www.consumerreports.org/cro/news/2012/02/2012-annual-auto-issue-consumer-reports-names-its-2012-top-picks/index.htm|title=2012 Annual Auto Issue: Consumer Reports names its 2012 Top Picks|publisher=[[Consumer Reports]]|date=2012-02-28|accessdate=2014-04-21}}</ref>||2012||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|- style="text-align:center;"
| align=left|Toyota Prius — Best green car 2011<ref>{{cite web|url=http://news.consumerreports.org/cars/2011/02/consumer-reports-names-2011-top-picks-best-models-in-10-categories-top-10.html|title=Top Picks: Best models of the year in 10 categories|publisher=[[Consumer Reports]]|date=2011-02-28|accessdate=2012-02-08|archive-date=2012-02-10|archive-url=https://web.archive.org/web/20120210223325/http://news.consumerreports.org/cars/2011/02/consumer-reports-names-2011-top-picks-best-models-in-10-categories-top-10.html|url-status=dead}}</ref>||2011||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|- style="text-align:center;"
| align=left|Toyota Prius — Best green car 2010<ref>{{cite web|url=http://www.consumerreports.org/cro/magazine-archive/2010/april/cars/top-picks/overview/index.htm|title=Top Picks: Best models of the year in 10 categories - Green Car |publisher=[[Consumer Reports]]|date=April 2010|accessdate=2010-05-09}}</ref>||2010 ||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|- style="text-align:center;"
| align=left|[[Toyota Prius#2004–2009 (model NHW20)|Toyota Prius]] — Best green car 2009<ref>{{cite web|url=http://blogs.consumerreports.org/cars/2009/02/consumer-reports-top-picks-2009-1.html|title=Consumer Reports Top Picks 2009|publisher=[[Consumer Reports]]|date=2009-02-27|accessdate=2010-05-09|archive-date=2010-05-05|archive-url=https://web.archive.org/web/20100505040335/http://blogs.consumerreports.org/cars/2009/02/consumer-reports-top-picks-2009-1.html|url-status=dead}}</ref>||2009 ||[[Hybrid electric vehicle|Hybrid electric]] ||46 ||48 || 45
|-
| colspan="6" style="text-align:center; background:#cfc;"|[[Consumer Reports]] American Top Picks: Green Car Category
|- style="text-align:center;"
| align=left|[[Ford Fusion Hybrid]] — Top Pick 2011<ref>{{cite web|url=http://news.consumerreports.org/cars/2011/03/consumer-reports-american-top-picks-2011.html|title=Consumer Reports American Top Picks 2011|publisher=[[Consumer Reports]]|date=2011-03-03|accessdate=2012-02-08|archive-url=https://web.archive.org/web/20120207230358/http://news.consumerreports.org/cars/2011/03/consumer-reports-american-top-picks-2011.html|archive-date=2012-02-07|url-status=dead}}</ref>||2011 ||[[Hybrid electric vehicle|Hybrid electric]] || 39 ||41 ||36
|- style="text-align:center;"
| align=left|[[Ford Fusion Hybrid]] — Top Pick 2010<ref>{{cite web|url=http://blogs.consumerreports.org/cars/2010/02/consumer-reports-american-top-picks-2010.html|title=Consumer Reports American Top Picks 2010|publisher=[[Consumer Reports]]|date=2010-02-26|accessdate=2010-05-02|archive-url=https://web.archive.org/web/20100410191802/http://blogs.consumerreports.org/cars/2010/02/consumer-reports-american-top-picks-2010.html|archive-date=2010-04-10|url-status=dead}}</ref>||2010 ||[[Hybrid electric vehicle|Hybrid electric]] || 39 ||41 ||36
|- style="text-align:center;"
| align=left|[[Ford Escape Hybrid]] — Top Pick 2009<ref>{{cite web|url=http://blogs.consumerreports.org/cars/2009/03/consumer-reports-american-top-picks-2009.html|title=Consumer Reports American Top Picks 2009|publisher=[[Consumer Reports]]|date=2009-03-04|accessdate=2010-05-09|archive-date=2010-04-19|archive-url=https://web.archive.org/web/20100419062532/http://blogs.consumerreports.org/cars/2009/03/consumer-reports-american-top-picks-2009.html|url-status=dead}}</ref>||2009 ||[[Hybrid electric vehicle|Hybrid electric]] || 32 ||34 ||31
|-
| colspan="6" style="text-align:center; background:#cfc;"|[[What Car?]] Green Awards
|- style="text-align:center;"
| align=left|[[BMW 320d]] Efficient Dynamics — Overall Winner 2012<ref name=320d>{{cite magazine|url=http://www.whatcar.com/car-news/bmw-320d-ed-wins-green-car-of-the-year/263929 |title=BMW 320d ED wins Green Car of the Year |magazine=[[What Car?]] |first=Chas |last=Hallett |date=2012-09-19 |accessdate=2012-09-27 |url-status=dead |archiveurl=https://web.archive.org/web/20120923002630/http://www.whatcar.com/car-news/bmw-320d-ed-wins-green-car-of-the-year/263929 |archivedate=2012-09-23 }}</ref>||2012 ||[[Clean diesel]] || colspan="3" style="text-align:center;"|UK combined {{convert|56|mpgimp|L/100 km mpgus|abbr=on}}<ref name=320d/>
|- style="text-align:center;"
| align=left|[[Vauxhall Ampera]] — Overall Winner 2011<ref>{{cite magazine|url= http://www.whatcar.com/car-news/what-car-green-awards-2011/overall-winner/258844|title=What Car? Green Awards 2011 - Overall Winner|magazine=[[What Car?]]|date=2011-09-07|accessdate=2012-02-08}}</ref> ||2012||[[Plug-in hybrid]]|| colspan="3" style="text-align:center;"|EC combined {{convert|235.4|mpgimp|L/100 km mpgus|abbr=on}}<ref>{{cite web|url=http://www.which.co.uk/news/2012/01/vauxhall-ampera-is-urban-fuel-champion-277055/|title=Vauxhall Ampera is urban fuel champion|publisher=[[Which?]]|date=2012-01-23|accessdate=2012-02-08|archive-date=2012-01-25|archive-url=https://web.archive.org/web/20120125082703/http://www.which.co.uk/news/2012/01/vauxhall-ampera-is-urban-fuel-champion-277055/|url-status=dead}}</ref>
|- style="text-align:center;"
| align=left|[[Toyota Auris Hybrid]] — Overall Winner 2010<ref name=AurisH>{{cite magazine|url=http://www.whatgreencar.com/green-car-of-the-year-2010.php#jp|title=What Car? Green Awards 2010 - And the 2010 Award winner is...|magazine=[[What Car?]]|date=2010-07-01|accessdate=2010-07-01|archive-date=2010-07-01|archive-url=https://web.archive.org/web/20100701032651/http://www.whatgreencar.com/green-car-of-the-year-2010.php#jp|url-status=dead}}</ref>||2010 ||[[Hybrid electric vehicle|Hybrid electric]] || colspan="3" style="text-align:center;"|UK combined {{convert|74|mpgimp|L/100 km mpgus|abbr=on}}<ref name=AurisH/>
|- style="text-align:center;"
| align=left|[[Volvo S40]] 1.6D DRIVe S — Overall Winner 2009<ref>{{cite magazine|url=http://www.whatcar.com/car-news/what-car-green-awards-2009/overall-winner/240544|title=What Car? Green Awards 2009 - Overall winner|magazine=[[What Car?]]|date=2009-06-04|accessdate=2010-05-09}}</ref>||2009 ||[[Clean diesel]] || colspan="3" style="text-align:center;"|UK combined {{convert|60|mpgimp|L/100 km mpgus|abbr=on}}<ref name=S40>{{cite web |url=http://www.volvocars.com/uk/all-cars/volvo-s40/details/pages/technical-spec.aspx |title=Volvo S40 Tech Spec (UK) |publisher=Volvocars.com |date=2010-05-26 |accessdate=2010-12-12 |archive-date=2010-06-26 |archive-url=https://web.archive.org/web/20100626114240/http://www.volvocars.com/uk/all-cars/volvo-s40/details/Pages/technical-spec.aspx |url-status=dead }}</ref>
|- style="text-align:center;"
| align=left|[[Ford Focus (international)#Mk 2 (2004-2010)|Ford Focus]] 1.6 TDCi Style — Overall Winner 2008<ref>{{cite magazine|url=http://www.whatcar.com/car-news/what-car-green-awards-2008/winner/233126|title=What Car? Green awards 2008 - Winner|magazine=[[What Car?]]|date=2008-07-22|accessdate=2010-05-02}}</ref>||2008 ||[[Clean diesel]] || colspan="3" style="text-align:center;"|UK combined {{convert|52|mpgimp|L/100 km mpgus|abbr=on}}<ref name=Focus>{{cite web |url=http://www.buyacar.co.uk/ford_focus_diesel_estate/car_16_tdci_style_5dr_110_dpf_3327.jhtml |title=Ford Focus 1.6 TDCi Style 5dr 110 Diesel Estate (UK) |publisher=Buyacar.co.uk |date=2008-01-01 |accessdate=2010-12-12 |archive-date=2011-07-28 |archive-url=https://web.archive.org/web/20110728004839/http://www.buyacar.co.uk/ford_focus_diesel_estate/car_16_tdci_style_5dr_110_dpf_3327.jhtml |url-status=dead }}</ref>
|-
| colspan="6" style="text-align:center; background:#cfc;"|[[Mother Earth News]] Best Green Cars
|-
|colspan="6" style="text-align:center; background:#f0f0ff;"| Best Green Cars of 2011<ref>{{cite web|url=http://www.motherearthnews.com/2011-best-green-cars-zm0z11zroc.aspx |title=Best Green Cars, 2011|publisher=[[Mother Earth News]]|date=May 2011|accessdate=2012-02-08}} June–July 2011 issue</ref>
|- style="text-align:center;"
| rowspan="2" style="text-align:left;"|[[Chevrolet Volt]]|| rowspan="2"| 2011||rowspan="2"|[[Plug-in hybrid]] ||style="background:#f0f0ff;"|Gas equivalent<br/>All-electric mode|| style="background:#f0f0ff;"|Gasoline<br/>only mode || style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
|93 [[Miles per gallon gasoline equivalent|mpg-e]] ||37 mpg ||35 mi
|- style="text-align:center;"
| rowspan="2" style="text-align:left;"|[[Nissan Leaf]]|| rowspan="2"|2011|| rowspan="2"|[[Electric car]] || style="background:#f0f0ff;" colspan="2"|Gasoline equivalent<br/>fuel economy|| style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
| colspan="2"|99 [[Miles per gallon gasoline equivalent|mpg-e]] ||73 mi
|- style="text-align:center;"
|align=left|[[Toyota Prius]]|| 2011 ||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|- style="text-align:center;"
| align=left| [[Ford Fiesta]] || 2011 ||[[Gasoline]]|| 33||29 || 38
|- style="text-align:center;"
| align=left| [[Honda CR-Z]] CVT || 2011 ||[[Hybrid electric vehicle|Hybrid electric]]|| 37||35 || 39
|- style="text-align:center;"
|align=left|[[Volkswagen Jetta#Fifth generation (A5, Typ 1K)|VW Jetta TDI]]|| 2011||[[Clean diesel]] ||34 ||30 || 42
|-
|colspan="6" style="text-align:center; background:#f0f0ff;"| Best Green Cars of 2010<ref>{{cite web|url=http://www.motherearthnews.com/2010-Best-Green-Cars.aspx|title=2010 Best Green Cars|publisher=[[Mother Earth News]]|date=March 2010|accessdate=2010-05-02}} April–May 2010 issue</ref>
|- style="text-align:center;"
| align=left|[[Ford Fusion Hybrid]]||2010 ||[[Hybrid electric vehicle|Hybrid electric]] || 39 ||41 ||36
|- style="text-align:center;"
|align=left |[[Honda Civic Hybrid]]|| 2010||[[Hybrid electric vehicle|Hybrid electric]]||42 || 40 || 45
|- style="text-align:center;"
|align=left|[[Honda Insight]]|| 2010||[[Hybrid electric vehicle|Hybrid electric]] ||41 ||40 || 43
|- style="text-align:center;"
|align=left|[[Toyota Prius]]|| 2010 ||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|- style="text-align:center;"
|align=left|[[Volkswagen Golf Mk5|VW Golf TDI]]|| 2010||[[Clean diesel]] ||34 ||30 || 42
|- style="text-align:center;"
|align=left|[[Volkswagen Jetta#Fifth generation (A5, Typ 1K)|VW Jetta TDI]]|| 2010||[[Clean diesel]] ||41 ||40 || 43
|-
| colspan="6" style="text-align:center; background:#cfc;"|[[American Council for an Energy-Efficient Economy]] Greenest Vehicles of the Year
|-
|colspan="6" style="text-align:center; background:#f0f0ff;"|Greenest Vehicles of 2012 (Top 5)<ref>{{cite web|url=http://www.greenercars.org/highlights_greenest.htm|title=Greenest Vehicles of 2012|publisher=GreenCars.org|author=American Council for an Energy-Efficient Economy|date=2011-02-08|accessdate=2011-02-08|url-status=dead|archiveurl=https://web.archive.org/web/20070910122720/http://www.greenercars.org/highlights_greenest.htm|archivedate=2007-09-10|author-link=American Council for an Energy-Efficient Economy}}</ref>
|- style="text-align:center;"
| align=left|[[Mitsubishi i-MiEV]]||2012 ||[[Electric car]] || 112 [[Miles per gallon gasoline equivalent|mpg-e]] ||3.8 mile/[[Kwh]]||2.9 mile/[[Kwh]]
|- style="text-align:center;"
| align=left|[[Honda Civic GX]]|| 2012 ||[[Natural gas vehicle|Natural gas]]|| -||27mpg-e ||38 mpg-e
|- style="text-align:center;"
| align=left|[[Nissan Leaf]]||2012 ||[[Electric car]] || 99 [[Miles per gallon gasoline equivalent|mpg-e]] ||3.1 mile/[[Kwh]] ||2.7 mile/[[Kwh]]
|- style="text-align:center;"
| align=left|[[Toyota Prius]]|| 2012 ||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|- style="text-align:center;"
| align=left|[[Honda Insight]]|| 2012||[[Hybrid electric vehicle|Hybrid electric]] ||42 ||41 || 44
|-
|colspan="6" style="text-align:center; background:#f0f0ff;"|Greenest Vehicles of 2011 (Top 5)<ref>{{cite web|url=http://www.greenercars.org/highlights_greenest.htm|title=Greenest Vehicles of 2011|publisher=GreenCars.org|author=American Council for an Energy-Efficient Economy|date=2011-02-15|accessdate=2011-02-15|url-status=dead|archiveurl=https://web.archive.org/web/20070910122720/http://www.greenercars.org/highlights_greenest.htm|archivedate=2007-09-10|author-link=American Council for an Energy-Efficient Economy}}</ref><ref>{{cite web|url=http://blogs.edmunds.com/greencaradvisor/2011/02/chevy-volt-slips-to-13th-place-in-revised-aceee-green-car-rankings.html|title=Chevy Volt Slips to 13th Place in Revised ACEEE Green Car Rankings|publisher=[[Edmunds.com]] Green Car Adviser|author=John O'Dell|date=2011-02-17|accessdate=2011-02-17}}</ref>
|- style="text-align:center;"
| align=left|[[Honda Civic GX]]|| 2011 ||[[Natural gas vehicle|Natural gas]]|| 28||24 ||36
|- style="text-align:center;"
| align=left|[[Nissan Leaf]]||2011 ||[[Electric car]] || 99 [[Miles per gallon gasoline equivalent|mpg-e]] ||3.15 mile/[[Kwh]] ||2.72 mile/[[Kwh]]
|- style="text-align:center;"
|align=left| [[Smart fortwo]] (Cabriolet/Coupe)|| 2011||[[Gasoline]] || 36||33 || 41
|- style="text-align:center;"
| align=left|[[Toyota Prius]]|| 2011 ||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|- style="text-align:center;"
|align=left |[[Honda Civic Hybrid]]|| 2011||[[Hybrid electric vehicle|Hybrid electric]]||41 || 40 || 43
|-
|colspan="6" style="text-align:center; background:#f0f0ff;"|Greenest Vehicles of 2010 (Top 5)<ref name=ACEEE>{{cite web|url=http://www.hybridcars.com/news/hybrids-dominate-2010-list-greenest-vehicles-26464.html|title=Hybrids Dominate 2010 List of Greenest Vehicles|publisher=HybridCars.com|date=2010-01-19|accessdate=2010-09-26|archive-url=https://web.archive.org/web/20100122074655/http://www.hybridcars.com/news/hybrids-dominate-2010-list-greenest-vehicles-26464.html|archive-date=2010-01-22|url-status=dead}}</ref>
|- style="text-align:center;"
| align=left|[[Honda Civic GX]]|| 2010 ||[[Natural gas vehicle|Natural gas]]|| 28||24 ||36
|- style="text-align:center;"
| align=left|[[Toyota Prius]]|| 2010 ||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|- style="text-align:center;"
|align=left |[[Honda Civic Hybrid]]|| 2010||[[Hybrid electric vehicle|Hybrid electric]]||42 || 40 || 45
|- style="text-align:center;"
|align=left| [[Smart fortwo]] (Convertible/coupe)|| 2010||[[Gasoline]] || 36||33 || 41
|- style="text-align:center;"
| align=left|[[Honda Insight]]|| 2010||[[Hybrid electric vehicle|Hybrid electric]] ||41 ||40 || 43
|-
| colspan="6" style="text-align:center; background:#cfc;"|[[Kelley Blue Book]] Top 10 Green Cars
|- style="text-align:center;"
|colspan="6" style="text-align:center; background:#f0f0ff;"|Top 10 Green Cars of 2014 (Top 5)<ref>{{cite web|url=http://insideevs.com/bmw-i3-named-kelley-blue-books-best-green-car-2014/|title=BMW i3 Named Kelley Blue Book's Best Green Car Of 2014|first=Eric|last=Loveday|publisher=InsideEvs.com|date=2014-04-21|accessdate=2014-04-21}}</ref>
|-style="text-align:center;"
|rowspan="2" style="text-align:left;"| [[BMW i3]]||rowspan="2"|2014||rowspan="2"|[[Electric car]] || style="background:#f0f0ff;" colspan="2"|Gasoline equivalent<br/>fuel economy||style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
| colspan="2"|124 [[Miles per gallon gasoline equivalent|mpg-e]] ||81 mi
|-style="text-align:center;"
|rowspan="2" style="text-align:left;"| [[Nissan Leaf]]||rowspan="2"|2014||rowspan="2"|[[Electric car]] || style="background:#f0f0ff;" colspan="2"|Gasoline equivalent<br/>fuel economy||style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
| colspan="2"|99 [[Miles per gallon gasoline equivalent|mpg-e]] ||73 mi
|- style="text-align:center;"
| align=left|[[Toyota Prius]]|| 2014 ||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|- style="text-align:center;"
| rowspan="2" align=left|[[Tesla Model S]]||rowspan="2"|2014|| rowspan="2"|[[Electric car]]<br/>(60/85 [[kWh]] battery) || style="background:#f0f0ff;" colspan="2"|Gasoline equivalent<br/>fuel economy|| style="background:#f0f0ff;"|[[All-electric range]]
|- style="text-align:center;"
| colspan="2"|95/89 [[Miles per gallon gasoline equivalent|mpg-e]] ||208/265 mi
|- style="text-align:center;"
| align=left|[[Honda Accord#Ninth generation (2013–present)|Honda Accord Hybrid]]|| 2014 ||[[Hybrid electric vehicle|Hybrid electric]] ||47 ||50 || 45
|- style="text-align:center;"
|colspan="6" style="text-align:center; background:#f0f0ff;"|Top 10 Green Cars of 2011 (Top 3)<ref>{{cite news|url=http://content.usatoday.com/communities/greenhouse/post/2011/04/greenest-cars-kelley-blue-book-gas-prices/1|title=Greenest cars? Gas prices drive interest in fuel economy|newspaper=[[USA Today]]|first= Wendy|last= Koch|date=2011-04-12|accessdate=2011-04-15}}</ref><ref name=KBB2011>{{cite web|url=http://www.kbb.com/car-news/all-the-latest/top-10-green-cars-for-2011/?scid=3138|title=Top 10 Green Cars for 2011|publisher=[[Kelley Blue Book]]|date=2011-04-12|accessdate=2011-04-15}}</ref>
|-style="text-align:center;"
|rowspan="2" style="text-align:left;"| [[Nissan Leaf]]||rowspan="2"|2011||rowspan="2"|[[Electric car]] || style="background:#f0f0ff;" colspan="2"|Gasoline equivalent<br/>fuel economy||style="background:#f0f0ff;"|[[All-electric range]]
|-style="text-align:center;"
|colspan="2"|99 [[Miles per gallon gasoline equivalent|mpg-e]] ||73 mi
|-style="text-align:center;"
| rowspan="2" style="text-align:left;"|[[Chevrolet Volt]]||rowspan="2"|2011||rowspan="2"|[[Plug-in hybrid]] ||colspan="2" style="background:#f0f0ff;"|Gasoline equivalent<br/>fuel economy||style="background:#f0f0ff;"|[[All-electric range]]
|-style="text-align:center;"
|colspan="2"|93 [[Miles per gallon gasoline equivalent|mpg-e]] ||35 mi
|- style="text-align:center;"
| align=left|[[Toyota Prius]]|| 2011 ||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|-
|colspan="6" style="text-align:center; background:#f0f0ff;"|Top 10 Green Cars of 2010 (Top 3)<ref name=KBB2010>{{cite web|url=http://www.kbb.com/kbb/green-cars/articles.aspx?BlogPostId=1783|title=KBB Green: Top 10 Green Cars for 2010|publisher=[[Kelley Blue Book]]|date=April 2010|accessdate=2010-05-02|url-status=dead|archiveurl=https://web.archive.org/web/20100424225137/http://www.kbb.com/kbb/green-cars/articles.aspx?BlogPostId=1783|archivedate=2010-04-24}}</ref><ref>{{cite news|url=http://content.usatoday.com/communities/driveon/post/2010/04/kbbs-green-cars-list-includes-vw-golf-tdi-chevy-tahoe-hybrid/1|title=KBB's green cars list includes VW Golf TDI, Chevy Tahoe hybrid|newspaper=[[USA Today]]|date=2010-04-20|accessdate=2010-05-02}}</ref>
|- style="text-align:center;"
| align=left|[[Toyota Prius]]|| 2010 ||[[Hybrid electric vehicle|Hybrid electric]] ||50 ||51 || 48
|- style="text-align:center;"
| align=left|[[Honda Insight]]|| 2010||[[Hybrid electric vehicle|Hybrid electric]] ||41 ||40 || 43
|- style="text-align:center;"
| align=left|[[Ford Fusion Hybrid]]||2010 ||[[Hybrid electric vehicle|Hybrid electric]] || 39 ||41 ||36
|-
|}
<!--Continue adding other rankings here -->
==Electric vehicle motor shows==
{{See also|Motor show}}
Dedicated [[electric vehicle|electric]] and green vehicle motor shows:
* Alternative Vehicle and Fuel Show (AVFS), [[Fair of Valladolid]], Spain, in November.<ref>{{cite web|url=http://feriavalladolid.com/vehiculoalternativo/en/index.php |title=Alternative Vehicle and Fuel Show 2010 |publisher=Feriavalladolid.com |date= |accessdate=2010-12-12}}</ref>
* Green Fleet Expo, [[Royal Botanical Gardens (Ontario)]], in May.<ref>{{cite web|url=http://www.toronto.ca/fleet/expo.htm |title=City of Toronto: Fleet Services - Green Fleet Expo |publisher=Toronto.ca |date=2000-10-23 |accessdate=2010-12-12}}</ref>
* Green-Car-Guide Live!, [[Arena and Convention Centre]] in [[Liverpool]], in June<ref>{{cite web |url=http://www.green-car-guide.com/articles/430/1/Green-Car-Guide-Live-2008-the-UKs-largest-Green-Motor-Show/Page1.html |title=Green-Car-Guide Live! 2008, the UK's largest Green Motor Show |publisher=Green-car-guide.com |date=2008-06-12 |accessdate=2010-12-12 |archive-date=2010-05-07 |archive-url=https://web.archive.org/web/20100507214830/http://www.green-car-guide.com/articles/430/1/Green-Car-Guide-Live-2008-the-UKs-largest-Green-Motor-Show/Page1.html |url-status=dead }}</ref>
* Electric & Hybrid Vehicle Technology Expo, ([[Sindelfingen, Germany]], April / Novi, [[Detroit, Michigan]], September). [http://www.evtechexpo.eu/about/] {{Webarchive|url=https://web.archive.org/web/20190628172743/http://www.evtechexpo.eu/about/ |date=2019-06-28 }}
* [[European Electric Motor Show]], [[Helsinki Exhibition & Convention Centre]], in November<ref>[http://www.finnexpo.fi/exhibition.asp?Id=1837&code_language=en] {{webarchive|url=https://web.archive.org/web/20090721004250/http://www.finnexpo.fi/exhibition.asp?Id=1837&code_language=en|date=July 21, 2009}}</ref><ref>{{cite web |author=Added by Antti View Events |url=http://electricaid.ning.com/events/electric-motor-show-in |title=Electric Motor Show in Helsinki on 6–8 November 2009 - Electric A!D |publisher=Electricaid.ning.com |accessdate=2010-12-12 |url-status=dead |archiveurl=https://web.archive.org/web/20110519080817/http://electricaid.ning.com/events/electric-motor-show-in |archivedate=19 May 2011 }}</ref><ref>{{cite web|last=Yoney |first=Domenick |url=http://green.autoblog.com/2009/10/05/ecorolla-to-debut-at-finnish-electric-motor-show-w-video/ |title=eCorolla to debut at Finnish Electric Motor Show [w/VIDEO] — Autoblog Green |publisher=Green.autoblog.com |date=2009-10-13 |accessdate=2010-12-12}}</ref>
{{Expand section|date=June 2008}}
==See also==
{{Portal|Energy|Renewable energy|Cars}}
{{div col|colwidth=30em}}
* [[Alternative fuel vehicle]]
* [[Alternatives to the automobile]]
* [[Better Place (company)|Better Place]]
* [[Emerging technologies]] - e.g. new green vehicle methods
* [[Green tuning]]
* [[Green Challenge]]
* [[Government incentives for plug-in electric vehicles]]
* [[Hybrid taxi]]s
* [[Hybrid Scorecard|Union of Concerned Scientists' Hybrid Scorecard]]
* [[Low-carbon fuel standard]]
* [[Miles per gallon gasoline equivalent]]
* [[Motorised quadricycle]]
* [[Plug-in electric vehicle]]s
* [[Progressive Insurance Automotive X Prize]]
* [[Zero-emissions vehicle]]
{{div col end}}
==Notes and references==
{{Reflist|2}}
==Further reading==
* {{cite book|title=Build Your Own Electric Vehicle, 2nd Edition|author1=Leitman, Seth |author2=Brant, Bob |date=October 2008 |publisher=[[McGraw-Hill]], Inc. |isbn=978-0-07-154373-6 }}
* {{cite book| title=Billion Dollar Green| chapter=Waving the Green Flag, Clean Transportation| publisher=John Wiley and Sons| year=2008| pages=[https://archive.org/details/billiondollargre0000smit/page/35 35–46]| chapter-url=https://books.google.com/?id=geig2gf43WkC&pg=PA36&dq=%22Green+vehicle%22#PPA35,M1| isbn=978-0-470-34377-7| author1=Tobin Smith| author2=Jim Woods| author3=Liz Claman| url=https://archive.org/details/billiondollargre0000smit/page/35}}
* [[Wikiversity:DFE2008 Automobile Engines|''DFE2008 Automobile Engines'', Wikiversity]]
==External links==
{{Wikinewscat|Alternative propulsion}}
*[https://web.archive.org/web/20140416180107/http://cta.ornl.gov/vtmarketreport/pdf/2013_vtmarketreport_full_doc.pdf 2013 VehicleTechnologies Market Report], [[Oak Ridge National Laboratory]]
* [http://www.afdc.energy.gov/afdc/ Alternative Fuels and Advanced Vehicle Data Center]
* [https://web.archive.org/web/20060422230409/http://www.greenvehicleguide.gov.au/ AU Green Vehicle Guide]
* [https://web.archive.org/web/20120504092255/http://iee.ucsb.edu/CleanCarCalculator/ Clean Car Calculator] (Institute for Energy Efficiency)
* [http://www.afdc.energy.gov/uploads/publication/60448.pdf Clean Cities - 2014 Vehicle Buyer's Guide], [[National Renewable Energy Laboratory]] (NREL), [[U.S. Department of Energy]], [[Clean Cities]] program. December 2013.
* [https://greet.es.anl.gov/publication-c2g-2016-report Cradle-to-Grave Lifecycle Analysis of U.S. Light-Duty Vehicle-Fuel Pathways: A Greenhouse Gas Emissions and Economic Assessment of Current (2015) and Future (2025-2030) Technologies] {{Webarchive|url=https://web.archive.org/web/20200812172041/https://greet.es.anl.gov/publication-c2g-2016-report |date=2020-08-12 }} (includes estimated cost of avoided GHG emissions from different AFV technologies), [[Argonne National Laboratory]], June 2016.
* [http://www.earthcars.com Earth cars]
* [http://www.epa.gov/greenvehicles/ EPA Green Vehicle Guide]
* [http://www.autocar.co.uk/blogs/carsandtheclimate/default.aspx Green Cars]{{Dead link|date=June 2025 |bot=InternetArchiveBot |fix-attempted=yes }} ([[Autocar (magazine)|Autocar]])
* [http://uk.cars.yahoo.com/green-car-centre/index.html Green Car Center] ([[Yahoo]])
* [http://www.green-car-guide.com/ Green Car Guide] {{Webarchive|url=https://web.archive.org/web/20140207132743/http://www.green-car-guide.com/ |date=2014-02-07 }}.
* [http://webarchive.loc.gov/all/20120802223010/http%3A//1bog.org/blog/infographic%2Dgreen%2Dcars%2D101/ Infographic: Green Cars 101 (2011)]
* [http://sgcs.edenproject.com/ Green cars and eco driving] {{Webarchive|url=https://archive.is/20130121223550/http://sgcs.edenproject.com/ |date=2013-01-21 }}
* [http://www.greenprogress.com/transportation.php Green Progress] {{Webarchive|url=https://web.archive.org/web/20200729212420/http://www.greenprogress.com/transportation.php |date=2020-07-29 }}
*[http://www.fueleconomy.gov/feg/pdfs/guides/FEG2014.pdf Model Year 2014 Fuel Economy Guide ], [[U.S. Environmental Protection Agency]] and [[U.S. Department of Energy]], April 2014.
* [http://progressiveautoxprize.org/ Progressive Insurance Automotive X PRIZE homepage]
* [http://peoplescar.pbwiki.com/ Small Efficient Vehicles Wiki: People's Car Project]
* [http://www.ucsusa.org/assets/documents/clean_vehicles/electric-car-global-warming-emissions-report.pdf State of Charge: Electric Vehicles’ Global Warming Emissions and Fuel-Cost Savings across the United States] {{Webarchive|url=https://web.archive.org/web/20121021214140/http://www.ucsusa.org/assets/documents/clean_vehicles/electric-car-global-warming-emissions-report.pdf |date=2012-10-21 }} ([[Union of Concerned Scientists|UCS]])
* [http://www.fueleconomy.gov/feg/topten.jsp Top Ten EPA-Rated Fuel Sippers (2016) - including BEVs and PHEVs]
* [http://www.hybridcenter.org/hybrid-scorecard/index.html#UCS_Hybrid_Scorecard UCS Hybrid Scorecard] {{Webarchive|url=https://web.archive.org/web/20120518115554/http://www.hybridcenter.org/hybrid-scorecard/index.html#UCS_Hybrid_Scorecard |date=2012-05-18 }} ([[Union of Concerned Scientists]])
{{Environmental technology}}
[[Category:Green vehicles| ]]
<noinclude>
<small>This page was moved from [[:en:Green vehicle]]. Its edit history can be viewed at [[Green vehicle/edithistory]]</small></noinclude>
rft4jmh9h4k0zo0475ru9d1za3l7gfs
Gundemar
0
114070
665582
447454
2025-07-08T07:13:08Z
~2025-15252-2
69451
665582
wikitext
text/x-wiki
{{Expand Spanish|Gundemaro|date=July 2012}}
[[File:Gundemaro, rey de los Visigodos (Museo del Prado).jpg|thumb|Imaginary portrait of Gundemar by Bernardino Montañés. Oil on canvas (1858)]]
'''Gundemar''' was a [[Visigoths|Visigothic]] [[Visigothic Kingdom|King]] of [[Hispania]], [[Septimania]] and [[kingdom of Galicia|Galicia]] (610–612).m
==Reign==
Gundemar continued a policy of amity with [[Clotaire II]] of [[Neustria]] and [[Theodobert II]] of [[Austrasia]]. To this end, he sent grand sums of money to support their cause against their relative (cousin and brother, respectively) [[Theuderic II]] of [[Kingdom of Burgundy|Burgundy]]. At other times, he pursued a hostile policy against [[Brunhilda of Austrasia|Brunhilda]].<ref>[[E. A. Thompson]], ''The Goths in Spain'' (Clarendon P., 1969), p. 160.</ref>
According to [[Isidore of Seville]], Gundemar made one expedition against the Basques, then besieged the [[Byzantine Empire|Byzantines]] in the next. He died a natural death in [[Toledo, Spain|Toledo]], probably in February or March 612.<ref>Isidore of Seville, ''[[Historia de regibus Gothorum, Vandalorum et Suevorum]]'', chapter 59. Translation by Guido Donini and Gordon B. Ford, ''Isidore of Seville's History of the Goths, Vandals, and Suevi'', second revised edition (Leiden: E. J. Brill, 1970), p. 27.</ref> The ''Chronica Regum Visigotthorum'' records that Gundemar reigned for one year, ten months and 14 days.<ref>''Chronica Regum Visigotthorum'', España Sagrada Tomo II [https://archive.org/stream/espaasagradath02fluoft#page/n3/mode/2up], p. 173.</ref> He was succeeded by [[Sisebut]].
==Legacy==
The towns of [[Gondomar, Portugal|Gondomar in Portugal]] and [[Gondomar, Pontevedra|in Galicia]] are named after him.{{Citation needed|date=January 2017}}
==References==
{{Reflist}}
==External links==
*{{in lang|es}} [https://web.archive.org/web/20120203074226/http://www.maravedis.net/visigodos_gundemaro.html Coins of King Gundemar]
{{s-start}}
{{s-reg|}}
{{s-bef|before=[[Witteric]]}}
{{s-ttl|title=King of the [[Visigoths]]|years=April 610 – February/March 612}}
{{s-aft|after=[[Sisebut]]}}
{{s-end}}
{{Authority control}}
[[Category:Visigothic kings]]
[[Category:Gothic warriors]]
[[Category:612 deaths]]
[[Category:7th-century monarchs in Europe]]
[[Category:Year of birth unknown]]
[[Category:7th-century people of the Visigothic Kingdom]]
{{europe-royal-stub}}<noinclude>
<small>This page was moved from [[:en:Gundemar]]. Its edit history can be viewed at [[Gundemar/edithistory]]</small></noinclude>
gvnxz80dr46z1ejqyjums9bazm7dsd2
Danity Kane
0
114366
665576
656595
2025-07-07T21:28:24Z
QTE-Test12-WMF
57024
/* 2008–09: Disbandment */ testing
665576
wikitext
text/x-wiki
{{About|the group|the group's self-titled debut album|Danity Kane (album)}}
{{Infobox musical artist
| name = Danity Kane
| image = Danity_Kane_at_Chicago_Signing.jpg
| image_size = 300px
| caption = The original line-up of Danity Kane at a signing in [[Chicago, Illinois]], September 2006. (L-R) Wanita "D. Woods" Woodgett, Aundrea Fimbres, Dawn Richard, Aubrey O'Day, and Shannon Bex.
| background = group_or_band
| alias = DK / DK3
| origin = [[New York City]], [[New York (state)|New York]], United States
| instrument = Vocals
| genre = {{hlist|[[Contemporary R&B|R&B]]|[[Pop music|pop]]|[[Hip hop music|hip hop]]|[[Dance music|dance]]}}
| occupation(s) =
| years_active = {{hlist|2005–2009|2013–2014|2018–present}}
| label = {{hlist|[[Bad Boy Records|Bad Boy]]||[[Atlantic Records|Atlantic]]|[[Warner Music]]}}
| associated_acts = {{hlist|[[Yung Joc]]|[[Missy Elliott]]|[[Day26]]|[[Donnie Klang]]|[[Dumblonde]]}}
| website = {{url|danitykane.com}}
| current_members = [[Aubrey O'Day]]<br>[[Dawn Richard]]<br>[[Shannon Bex]]
| past_members = [[Aundrea Fimbres]]<br>[[D. Woods]]
}}
'''Danity Kane''' is an American [[girl group]] composed of members [[Aubrey O'Day]], [[Dawn Richard]], and [[Shannon Bex]]. The group originally had five members, but [[D. Woods|Wanita "D. Woods" Woodgett]] left the group in 2008, and [[Aundrea Fimbres]] left in 2014. Formed on the third iteration of [[MTV]]'s ''[[Making the Band]]'' [[reality television]] series in 2005, they signed to [[Bad Boy Records]] by [[Sean Combs|Diddy]]. test
Danity Kane's [[Danity Kane (album)|self-titled debut studio album]] was released in 2006 and achieved success in the United States, shipping a million copies domestically,<ref name="RIAA1">{{cite web|title=RIAA Certifications|work=Billboard|url=https://billboard.com/bbcom/riaa/index.jsp|accessdate=2007-06-23|url-status=dead|archiveurl=https://web.archive.org/web/20070618131213/http://www.billboard.com/bbcom/riaa/index.jsp|archivedate=2007-06-18}}</ref> while spawning two singles with top 10 single "[[Show Stopper]]" and the ballad "[[Ride for You]]." Their second studio album, ''[[Welcome to the Dollhouse (album)|Welcome to the Dollhouse]]'', was released in 2008, following the release of their second top 10 single "[[Damaged (Danity Kane song)|Damaged]]".<ref name="mtv08">{{cite web|title=Diddy, Beyonce, Ne-Yo Make 'Spotlight Live' New York's Hot Tuesday-Night Ticket|work=MTV News|url=http://www.mtv.com/news/articles/1580620/spotlight-live-new-yorks-hot-tuesday-night-ticket.jhtml|accessdate=2012-07-31|archive-date=2014-02-22|archive-url=https://web.archive.org/web/20140222053616/http://www.mtv.com/news/articles/1580620/spotlight-live-new-yorks-hot-tuesday-night-ticket.jhtml}}</ref> The band became the first female group in ''[[Billboard (magazine)|Billboard]]'' history to debut their first two albums at the top of the charts.<ref name="MtV.CoM">''[[Making the Band]]''/''The Rise and Fall of Danity Kane'', ''[[MTV]]'' (2009-04-30). Retrieved on 2009-04-30.</ref>
Despite initial success, tension in the group led to a meeting with Diddy where, in the October 2008 finale episode of ''[[Making the Band 4#Making the Band 4: Day26 and Donnie Klang|Making the Band 4]]'', he removed O'Day and Woodgett from the group. The three remaining members of the group carried on with previously scheduled promotional events before officially disbanding in early 2009.<ref name="MTV.CoM">{{cite news|first=Jocelyn|last=Vena|title=Danity Kane Are Over, Dawn Richard Says. 'It's devastating for me,' Richard says of the 'Making the Band' group's dissolution|publisher=MTV|date=2009-01-28|accessdate=2009-01-29|url=http://www.mtv.com/news/articles/1603737/20090128/kane__danity.jhtml}} {{Webarchive|url=https://web.archive.org/web/20090201065816/http://www.mtv.com/news/articles/1603737/20090128/kane__danity.jhtml |date=2009-02-01 }}</ref> All group members were ultimately released from their contracts with Bad Boy Records later within the year. In 2013, four of the five group members (O'Day, Bex, Richard and Fimbres) made an official announcement regarding their reunion at the [[2013 MTV Video Music Awards]];<ref name="dkreunion">{{cite web|title=Danity Kane Will Reunite At MTV VMAs, Release New Promo Picture Ahead Of Show|work=International Business Times|url=http://www.ibtimes.com/danity-kane-will-reunite-mtv-vmas-release-new-promo-picture-ahead-show-1398099|accessdate=2013-08-25}}</ref> however, on May 16, 2014, the first night of their reunion tour in [[San Francisco]], Fimbres announced her departure from the group due to wanting to start her family, leaving O'Day, Bex, and Richard to continue as a trio.<ref name="Fimbres leaving">{{cite web|last=Webber |first=Stephanie |url=http://www.usmagazine.com/entertainment/news/aundrea-fimbres-is-engaged-leaving-danity-kane-to-start-a-family-2014175 |title=Aundrea Fimbres Is Engaged, Leaving Danity Kane to Start a Family - Us Weekly |publisher=Usmagazine.com |date=2014-05-17 |accessdate=2014-06-05}}</ref><ref name="Fimbres leaving2">{{cite web |url=http://www.mtv.com/news/1826643/its-official-danity-kane-is-now-a-trio/ |title=It's Official: Danity Kane Is Now A Trio |publisher=MTV |date=2014-05-17 |accessdate=2014-06-05 |archive-date=2017-08-06 |archive-url=https://web.archive.org/web/20170806131135/http://www.mtv.com/news/1826643/its-official-danity-kane-is-now-a-trio/ }}</ref>
On August 8, 2014, after a fight in the recording studio between members O'Day and Richard, O'Day and Bex announced publicly that Danity Kane had disbanded again.<ref name="LaTimesBreakup">{{cite web |url=https://www.latimes.com/entertainment/music/posts/la-et-ms-danity-kane-calls-it-quits-again-20140808-story.html|title=Danity Kane is over -- again|last1=Kennedy|first1=Gerrick|date=August 8, 2014|website=latimes.com|publisher=[[Los Angeles Times]]|accessdate=August 9, 2014}}</ref> Although they disbanded, their third studio album, ''[[DK3]]'', was released in October 2014. Following the second disbandment, Richard continued to release solo music, while O'Day and Bex formed the duo [[Dumblonde]]. In August 2018, the trio announced that they would reunite and tour together.<ref name="Kaufman">{{cite news|url=https://www.billboard.com/articles/columns/pop/8470369/danity-kane-members-announce-dk3-reunion-tour|title=Danity Kane Members Announce DK3 Reunion Tour With Aubrey O'Day, Dawn Richard & Shannon Bex |date=August 15, 2018|accessdate=August 17, 2018|last=Kaufman|first=Gil|work=[[Billboard (magazine)|Billboard]]}}</ref> O'Day and Richard released new music as a duo under Danity Kane in 2020. Test 123.
== History ==
=== 2004–05: ''Making the Band 3'' ===
{{details|topic=the show|Making the Band 3}}
In 2004, producer [[Sean Combs]] returned with ''Making the Band 3'', the third iteration of the ''[[Making the Band]]'' television series, in search of the next female supergroup.<ref name=MtV.CoM/> With the help of choreographer [[Laurie Ann Gibson]], vocal trainer Doc Holiday and talent manager [[Johnny Wright (music manager)|Johnny Wright]], he set out on a multi-city search and invited 20 young singers out of almost 10,000 young women to live and compete for positions in the group in [[New York City]].<ref name=MtV.CoM/><ref name="blender.com">{{cite news|title=Aubrey O'Day MTV's Making the Band hottie gears up for more catfights and dance-offs. |publisher=[[Blender (magazine)|Blender]] |date=September 2005 |accessdate=2008-10-16 |url=http://www.blender.com/guide/articles.aspx?id=1726 |url-status=dead |archiveurl=https://web.archive.org/web/20080921234203/http://www.blender.com/guide/articles.aspx?id=1726 |archivedate=September 21, 2008 }}</ref> When seven women remained, Combs became discontent with the level of talent remaining in the competition and decided not to form a band.<ref name=MtV.CoM/> He did, however, feel three contestants deserved another chance, including then-best friends [[Aubrey O'Day]] and [[Aundrea Fimbres]], whose close bond originally formed early in the season.<ref name=MtV.CoM/> The three contestants became the first to appear in season 2 of the show.<ref name=MtV.CoM/>
At the start of the second season, Combs once again pressed his team to audition new young women for the group.<ref name=MtV.CoM/> Finally, 20 young women were chosen and moved into a loft in New York City.<ref name=MtV.CoM/> Viewers had become invested in O'Day and Fimbres's friendship, naming them "the AUs" and "Aubrea" ([[portmanteau|portmanteux]] of their first names put together), as they watched the two compete all over again for positions in the group.<ref name=MtV.CoM/><ref name=www.aubreyoday.com>{{cite web|title=Aubrey O'Day|publisher=aubreyoday.com|url=http://www.aubreyoday.com/ Aubrey O'Day / Heart On My Sleeve Shop}}</ref> As the competition's challenges increased, their friendship seemed to become the foundation upon which the group was being built.<ref name=MtV.CoM/> In addition, O'Day emerged as the show's breakout star.<ref name=MtV.CoM/><ref name=blender.com/>
After weeks of dance and singing lessons, promotional appearances, and a performance in front of 10,000 at a [[Backstreet Boys]] concert at [[Nissan Pavilion]] in Bristow, VA, 11 contestants remained, including O'Day and Fimbres.<ref name=MtV.CoM/> The finalists were sent home for three months, told to polish up, and return for the final stretch in November 2005.<ref name=MtV.CoM/>
On the second season's finale, on Tuesday, November 15, 2005, the show's ratings broke MTV records as millions of viewers watched to see the group officially formed.<ref name=MtV.CoM/> Five of the 11 remaining contestants were chosen: O'Day first, [[D. Woods|Wanita "D. Woods" Woodgett]] second, [[Shannon Bex]] third, [[Dawn Richard (singer)|Dawn Richard]] fourth, and Fimbres last.<ref name=MtV.CoM/>
The third season of ''Making the Band 3'' tracked the development and struggles of the new band — from then on known as "Danity Kane" (a name taken from a female [[anime]] superhero created and drawn by Richard).<ref>{{cite web |url=http://www.gnextinc.com/bbo/news/introdanitykane.html |archive-url=https://web.archive.org/web/20061017004031/http://www.gnextinc.com/bbo/news/introdanitykane.html |url-status=dead |archive-date=2006-10-17 |title=Bad Boy's Diddy introduces Danity Kane |publisher=Gnextinc.com |date= |accessdate=2011-05-16 }}</ref> The group would later be featured on the second and third seasons of ''[[Making The Band 4#Making the Band 4: Day26 and Donnie Klang|Making the Band 4]]'' with new male [[Rhythm and blues|R&B]] group [[Day26]], as well as new solo artist [[Donnie Klang]].
=== 2006–07: ''Danity Kane'' and rumors of disbandment ===
{{details|topic=the album|Danity Kane (album)}}
After months of recording, the band's [[Danity Kane (album)|self-titled debut album]] was released to mixed reviews on August 22, 2006 in the [[United States]]. Produced by [[Timbaland]], [[Scott Storch]], [[Rodney Jerkins]], [[Mario Winans]] and [[Ryan Leslie]] among others, the album sold over 90,000 copies in the first day of release, and over 234,000 in the first week of release.<ref name="VH1-1">{{cite web|title=Outkast Take A Billboard Beating From Diddy's Danity Kane|work=VH1 News|url=http://www.vh1.com/artists/news/1539767/20060830/kane__danity.jhtml|accessdate=2007-08-19|archive-date=2009-02-12|archive-url=https://web.archive.org/web/20090212022343/http://www.vh1.com/artists/news/1539767/20060830/kane__danity.jhtml|url-status=dead}}</ref> It debuted at number one on the [[Billboard 200|U.S. ''Billboard'' 200]] albums chart, knocking veteran [[Christina Aguilera]]'s ''[[Back to Basics (Christina Aguilera album)|Back to Basics]]'' from the top spot and out-selling hip-hop duo [[OutKast]].<ref name="VH1-1"/> The album received a [[platinum album|platinum certification]] from the [[RIAA]] in November 2006.<ref name="BB-1">{{cite web|title=RIAA Certifications|work=Billboard|url=https://billboard.com/bbcom/riaa/index.jsp|accessdate=2007-08-19|url-status=dead|archiveurl=https://web.archive.org/web/20070618131213/http://www.billboard.com/bbcom/riaa/index.jsp|archivedate=2007-06-18}}</ref>
The album's lead single "[[Show Stopper]]," produced by Jim Jonsin, was serviced to radio on August 4, 2006, and subsequently debuted at number 17 on the [[Billboard Hot 100|''Billboard'' Hot 100]]; it however peaked at number 8 on that particular chart.<ref>[ Billboard.com - Artist Chart History - Danity Kane<!-- Bot generated title -->]{{dead link|date=May 2011}}</ref> Outside the United States, the song became a top-30 success in [[Germany]] and [[Lithuania]]. The selection for the album's second single, the [[Bryan Michael Cox]]-produced "[[Ride for You]]", was influenced by a fan poll that was distributed through e-mails, [[MySpace]], and the group's official web site. The music video for the song premiered on [[MTV]]'s ''[[Total Request Live]]'' on December 5, 2006, the same day the band released a holiday song called "[[Home for Christmas (Danity Kane song)|Home for Christmas]]", which was written by Richard.<ref name="RU-1">{{cite web|title=D. Woods Clears Up Rumors|work=Rap-Up|url=http://www.rap-up.com/?p=3095|accessdate=2007-08-19|archive-date=2007-09-27|archive-url=https://web.archive.org/web/20070927041542/http://www.rap-up.com/?p=3095|url-status=dead}}</ref>
Between February 2007 to May 2007 Danity Kane performed as an opening act, along with [[The Pussycat Dolls]], on Christina Aguilera's [[Back To Basics Tour]]. In the meantime, the band intensified work on their second album, which was initially scheduled for a late 2007 release but was eventually pushed back to 2008.<ref name="Billbiard">{{cite web | title=Danity Kane Keeping The 'Show' Going On New CD| work=billboard| url=https://www.billboard.com/articles/news/1053248/danity-kane-keeping-the-show-going-on-new-cd| accessdate=2007-04-02}}</ref>
Ever since the creation of the group in 2005, Danity Kane was plagued by rumors of the group's demise,<ref name=MtV.CoM/> largely due to the group's reality television origins, their management, record label, and mentor.<ref name=MtV.CoM/> In the summer of 2007, during a hiatus between their first and second albums, speculation concerning the possibility of a disbandment by fans and the media circulated the internet and entertainment news outlets. The rumors were fueled by quotes taken out of context (most notably when Aubrey O'Day was questioned by [[TMZ.com|TMZ]]<ref name="Ishmil">{{cite web | title=Aubrey ditch's Danity for Dolls?| work=TMZ| url=https://www.tmz.com/2007/07/11/is-aubrey-ditching-danity-for-the-dolls| accessdate=2007-07-13}}</ref> about her relationship to the successful pop girl group the [[Pussycat Dolls]] and their television show ''[[Pussycat Dolls Present: The Search for the Next Doll]]''<ref>{{cite web |url=http://www.rap-up.com/?p=3057 |title=Aubrey O'Day to Join The Pussycat Dolls? |publisher=Rap-up.com |date= |accessdate=2011-05-16 |archive-date=2008-12-09 |archive-url=https://web.archive.org/web/20081209060142/http://www.rap-up.com/?p=3057 |url-status=dead }}</ref>) and by work the group members had done outside of Danity Kane since the release of their debut album. [[D. Woods]]'s association with another girl group, The Girl's Club, was specifically cited as adding credibility to breakup rumors.<ref name=MtV.CoM/> Additionally, reports of solo careers and of new groups forming from various combinations of members of the group were rampant.<ref name=MtV.CoM/>
Over the course of these rumors, the members of Danity Kane often published personal online responses to the breakup speculation.<ref>{{cite web |url=http://aubreyoday.us/index.php?subaction=showcomments&id=1184312211&archive=&start_from=&ucat=7,12& |title=Celebrating our one year online |publisher=AubreyOday.us |accessdate=2011-05-16 |url-status=dead |archiveurl=https://web.archive.org/web/20071012154630/http://aubreyoday.us/index.php?subaction=showcomments&id=1184312211&archive=&start_from=&ucat=7%2C12& |archivedate=October 12, 2007 }}</ref> It was not until July 25, 2007 that Danity Kane released an official statement on their group MySpace page stating that they were still together and working on their second album.{{citation needed|date=December 2019}}
=== 2007–08: ''Welcome to the Dollhouse'' and departures of O'Day and Woods ===
{{details|topic=the album|Welcome to the Dollhouse (album)}}
While making several solo appearances on other artists' albums during fall 2007, Danity Kane was featured on the second season of the fourth iteration of ''Making the Band'' which debuted January 28, 2008 on [[MTV]], where solo singer [[Donnie Klang]], [[Day26]], and the girls, lived and recorded their albums together.
"[[Damaged (Danity Kane song)|Damaged]]", the band's poll-voted lead single from their second album ''[[Welcome to the Dollhouse (album)|Welcome to the Dollhouse]]'', was officially released as a digital single on January 29, 2008, and became the band's second top ten hit on the ''Billboard'' Hot 100. Its music video was nominated for an [[MTV Video Music Award]] for "Best Pop Video" and "Best Dancing in a Video" but lost to "[[Piece of Me (Britney Spears song)|Piece of Me]]" by [[Britney Spears]] and "[[When I Grow Up (Pussycat Dolls song)|When I Grow Up]]" by [[the Pussycat Dolls]] respectively. ''Welcome to the Dollhouse'', was eventually released on March 18, 2008 in the United States, where it debuted at number one on the [[Billboard 200|''Billboard'' 200]], with first week sales of 236,000 copies (2,000 units more than their [[Danity Kane (album)|self-titled debut album]]).<ref name="eleven">{{cite news|author=Katy Hasty|title=Danity Kane Snags Second Straight No. 1 Album|url=https://www.billboard.com/articles/news/1046065/danity-kane-snags-second-straight-no-1-album|publisher=Billboard|date=2008-03-26|accessdate=2008-03-26}}</ref> The album eventually received a [[gold album|gold certification]] from the [[RIAA]] in April 2008. On September 28, 2008, the album had sold a total of 546,790 copies. In a May 2008 interview with Kiwibox.com, Danity Kane revealed that the follow-up single to "Damaged" would be "[[Bad Girl (Danity Kane song)|Bad Girl]]".<ref name="seventeen">{{cite news|author=Steven Horowitz |title=Danity Kane Exclusive Interview |url=http://beta.kiwibox.com/article/36826 |publisher=Kiwibox.com |date=2008-05-27 |accessdate=2008-06-03 |url-status=dead |archiveurl=https://web.archive.org/web/20081013212828/http://beta.kiwibox.com/article/36826 |archivedate=October 13, 2008 }}</ref>
On the second-season finale of ''Making the Band 4'', it was announced that Danity Kane would be headlining a tour in 2008 and be featured on the next season of ''Making the Band'', as Diddy stated himself. The third season of ''Making the Band 4'' premiered on MTV August 19, 2008. Around a week later, the girls were featured in an interview with [[WHTZ|Z100]] at the Beatstock Dance Festival, where they stated they were planning to release another single after "Bad Girl".<ref name="twenyseven">{{cite news|author=YouTube|title=Danity Kane Exclusive Interview|url=https://www.youtube.com/watch?v=IX0s3RDpzoI}}</ref>
After ''[[Making the Band 4 - The Tour]]'' and the release of the first single "Damaged," Danity Kane once again encountered rumors of a breakup, largely spurred by scenes from the ''Making the Band'' series featuring their mentor [[Sean Combs]] sparring with O'Day over her dance performance and desire to create her own image separate from the group.<ref name="www.mtv.com">{{cite web| title=MTV's Making the Band| work=MTV| url=http://www.mtv.com/ontv/dyn/making_the_band_4/episode/episode.jhtml?episodeId=141813| access-date=2020-07-07| archive-date=2009-05-02| archive-url=https://web.archive.org/web/20090502041759/http://www.mtv.com/ontv/dyn/making_the_band_4/episode/episode.jhtml?episodeId=141813}}</ref> On the August 28, 2008 episode of ''Making the Band'', Combs, frustrated with the "oversexed" image he felt O'Day now showcased, he called O'Day "one of the worst dancers" in Danity Kane, when she used to be "one of the best."<ref name="MTV.COm">''[[Making the Band]]'', ''[[MTV]]'' (2008-08-28). Retrieved on 2008-10-16.</ref> He told O'Day that she no longer looked like the girl he signed.<ref name=MTV.COm/> Combs accused O'Day of trying to expand her fame at the expense of the entire group, and said that she liked flaunting her breasts and wearing big hair.<ref name=MTV.COm/> He asked himself why he was keeping O'Day in the group.<ref name=www.mtv.com/><ref name=MTV.COm/> With O'Day forgoing promotional appearances with the group to appear as Amber Von Tussle on Broadway's [[Hairspray (musical)|Hairspray]], speculation arose that O'Day's role in the group had been marginalized. On September 7, 2008, however, the group appeared together at the [[MTV Video Music Awards]] to help present the Best New Artist Award.<ref>{{cite web | title=MTV Viewers Have Spoken With Three Moonmen| work=Market Watch| url=http://www.marketwatch.com/news/story/mtv-viewers-have-spoken-britney/story.aspx?guid=%7B7C3F4201-D048-4B9D-94CB-18EDD3264146%7D&dist=hppr}}</ref>
Speculation of a break-up were also developing because of rumors that Richard would perhaps be groomed to launch her own solo career with [[Bad Boy Records]].<ref name="MTV.cOm">''[[Making the Band]]'', ''[[MTV]]'' (2008-10-07). Retrieved on 2008-10-07.</ref> Rumors had been circulating that Richard was flown from Baltimore to New York for private meetings with Combs to launch her own solo career, especially after recording three tracks for Combs, which were purported to be Danity Kane tracks but only featured Richard's vocals; these vocals were leaked on the Internet. Combs went as far as to introduce Richard in a solo performance in early September.<ref>{{cite web| title=Danity Kane Breakup!?!?| work=Media Takeout| url=http://www.mediatakeout.com/26448/danity_kane_break_up_diddy_brings_out_dawn_to_do_a_solo_performance__without_the_rest_of_the_group_.html| accessdate=2008-09-13| url-status=dead| archiveurl=https://archive.today/20120904011405/http://www.mediatakeout.com/26448/danity_kane_break_up_diddy_brings_out_dawn_to_do_a_solo_performance__without_the_rest_of_the_group_.html| archivedate=2012-09-04}}</ref> An [[Atlantic Records]] spokesperson responded, "At no point was [Richard] flown anywhere to record solo or meet alone with [Combs]. The girls are still very much together. They're going out to the Video Music Awards together ... and they're promoting their album ‘Welcome to the Dollhouse' and working on their third."<ref>{{cite news| title=Is Diddy raisin' Kane with Danity project?| work=Rush and Malloy| url=http://www.nydailynews.com/gossip/2008/08/29/2008-08-29_is_diddy_raisin_kane_with_danity_project.html| accessdate=2008-09-13| location=New York| date=2008-08-28| archive-date=2009-10-28| archive-url=https://web.archive.org/web/20091028050009/http://www.nydailynews.com/gossip/2008/08/29/2008-08-29_is_diddy_raisin_kane_with_danity_project.html| url-status=dead}}</ref> The group intended to open for [[Janet Jackson]]'s ''[[Rock Witchu Tour]]'', but had to withdraw due to label conflicts.<ref>{{cite web|url=http://aubreyoday.org/2008/08/17/details-on-the-upcoming-tour/|title=Details on the upcoming tour - Aubreyoday.Org - The number one fansite for singer Aubrey O'Day|date=17-08-08|accessdate=07-02-14|archive-url=https://web.archive.org/web/20140301142403/http://aubreyoday.org/2008/08/17/details-on-the-upcoming-tour/|archive-date=2014-03-01|url-status=dead}}</ref>
In Season 3, Episode 8 of ''Making the Band'', Combs stated that he did have Richard on three demos for his new album. On the same episode of the show, which was filmed on September 12, 2008, after continued debate with O'Day about the well-being of Danity Kane, he stated that O'Day was no longer in the group, as had been foreshadowed in an earlier episode within the season after a [[Total Request Live|TRL]] (Total Request Live) appearance. Combs was unaware of the specific problems within the group, but sensed that O'Day and [[Aundrea Fimbres]], who were originally close friends, had drastically drifted apart.<ref name="MTV.cOm"/> O'Day and Richard informed Combs that the entire group had trust issues with management and ultimately each other. The season finale, which took place Tuesday, October 14, 2008, confirmed the departure of O'Day and Woods.<ref name="MTV.com">''[[Making the Band]]'', ''[[MTV]]'' (2008-10-14). Retrieved on 2008-10-14.</ref><ref name="www.mTv.com">{{cite news|title=Aubrey O'Day And D. Woods Kicked Out Of Danity Kane, Diddy Announces. Dismissal announced during the live season-three finale of 'Making the Band 4.'|first=Jocelyn|last=Vena|publisher=MTV|date=2008-10-15|accessdate=2008-10-15|url=http://www.mtv.com/news/articles/1597082/20081015/kane__danity.jhtml}} {{Webarchive|url=https://web.archive.org/web/20081017121749/http://www.mtv.com/news/articles/1597082/20081015/kane__danity.jhtml |date=2008-10-17 }}</ref> Combs removed Woods due to feeling that she was unhappy with the group and that she had gotten "caught up in the wrath" of close friend O'Day.<ref name=MTV.com/><ref name=www.mTv.com/> In the live section of the episode, Combs explained that the reason he let O'Day go was that she was not the same person he signed, that the fame had changed her (as had been expressed on the August 28, 2008 episode).<ref name=MTV.com/> "I got love for Aubrey," he said. "I don't have any beef with her. I just want to work with the young lady that I signed, not the person that fame has made her."<ref name=www.mTv.com/> He later stated that he would be open to working with Woods again.<ref name=MTV.com/> When O'Day came on to reply, just moments after deciding not to leave the studio, she first addressed the perception some people, especially [[blog]]gers, have of her. "I would rather be hated every damn day of my life for being real than loved for being something I'm not," she stated.<ref name=www.mTv.com/> Combs, who spoke to the group and the audience via satellite, relayed to O'Day, "Check this out, baby girl... See, your attitude is gonna have you in a dark and lonely place. ... What you need to do, at the end of the day, is humble yourself."<ref name=www.mTv.com/> Woods did not appear on the live episode due to prior obligations.<ref name=MTV.com/>
In a backstage interview before the finale, O'Day said, "Tonight is a representation of the end of a chapter in my life; it's not the end of the book."<ref name=www.mTv.com/> She added, "I will do everything possible to make my mark on this industry, and Danity Kane and [Combs] provided me with this amazing opportunity to go out and really touch people's hearts. I think the way that we were able to inspire people was something that I will never be able to achieve in that way again in my life."<ref name=www.mTv.com/>
[[MTV|MTV News]] reached out to a rep for Danity Kane to see where the future of the band stood now that [O'Day and Woods] were no longer in the group.<ref name=www.mTv.com/> It was reported that Woods planned to work with another group, the Girls Club,<ref name=www.mTv.com/> and that O'Day was working on a solo album.
In an October 15, 2008 interview with ''[[Us Weekly]]'', Richard gave further insight into O'Day's dismissal from Danity Kane. "[Combs] did not like [O'Day's] image...where her image was going for the group," she said. "It wasn't a personal thing."<ref name="usmagazine.com">{{cite web|title=Why Aubrey O'Day Was Kicked Out of Danity Kane|publisher=[[Us Weekly]]|date=October 15, 2008|accessdate=2008-10-16|url=http://www.usmagazine.com/news/why-aubrey-o-day-was-kicked-out-of-danity-kane|archiveurl=https://web.archive.org/web/20081016143610/http://www.usmagazine.com/news/why-aubrey-o-day-was-kicked-out-of-danity-kane|archivedate=October 16, 2008|url-status=dead}}</ref> Richard explained that O'Day's increasingly "sexy look" was alienating young fans. Referring specifically to O'Day's topless pictures for ''[[Complex (magazine)|Complex]]'' magazine just a month before, Richard stated, "We had just did a signing with Dollhouse Teen, which is for 13, 14-year-old young girls... So we can't do that one day and then the next day do an obnoxious cover.... [Combs] wants the fans, and he says he can't do that if we can continue to go in the direction that we were going."<ref name=usmagazine.com/> Richard further relayed, "[Combs] told me specifically that [O'Day] is no longer in Danity Kane and Danity Kane will move forward without her."<ref name=usmagazine.com/> When asked if Combs would seek "replacements" for O'Day and Woods, Richard stated, "He has not said anything per that. But I think in my heart that he is gonna do another show."<ref name=usmagazine.com/>
MTV News gauged fan reactions to the dismissals of O'Day and Woods. Fans left impassioned, long and detailed comments on the MTV News site about their discontent regarding the decision to remove the two singers, and relayed that the remaining members were using the breakup to "score" publicity.<ref name="MTV.COM">{{cite news|first=Jocelyn|last=Vena|title=Danity Kane Fans React To Aubrey O'Day, D. Woods' Dismissals. One says downsized group 'needs personality,' while another pledges support 'as long as the music is good.'|publisher=MTV|date=2008-10-17|accessdate=2008-10-18|url=http://www.mtv.com/news/articles/1597343/20081017/kane__danity.jhtml}} {{Webarchive|url=https://web.archive.org/web/20081018161349/http://www.mtv.com/news/articles/1597343/20081017/kane__danity.jhtml |date=2008-10-18 }}</ref> Richard, in particular, received resentment from fans.<ref name=MTV.COM/> Other fans were more upset about the breakup in general, with the sentiment that Danity Kane would lack the individuality ([[je ne sais quoi]]) and excitement that O'Day and Woods brought to the group.<ref name=MTV.COM/> Despite, however, the dismissals of O'Day and Woods, other sections of the fandom were willing to give the "new Danity Kane" a chance and believed that the group would be as strong as they were before.<ref name=MTV.COM/>
=== 2008–09: Disbandment ===
In mid-2008 Danity was replaced by a mariachi band, before the departure of O'Day and Woods, Danity Kane planned to start pre-production for their third studio album, which would have begun January 2009.<ref name="dawnrichard.org">{{cite web|url=http://dawnrichard.org/displayimage.php?album=334&pos=0 |accessdate=February 18, 2016 |url-status=dead |archiveurl=https://web.archive.org/web/20090212091709/http://dawnrichard.org/displayimage.php?album=334&pos=0 |archivedate=February 12, 2009 }}</ref> In the meantime, Danity Kane released a line of denim jeans through Dollhouse. Under [[Russell Simmons]] Plastic Cash International, the decision was made to feature Danity Kane's image on [[Visa Inc.|Visa]] [[debit cards]]. The group had also been a part of a new [[ad campaign]] for [[PETA]] (People for the Ethical Treatment of Animals). Collectively, as a group, there were plans for a fragrance, clothing and makeup line.<ref name="dawnrichard.org"/> Richard had developed a comic book based on the superhero the group based its name on, which was intended for release sometime in 2009.<ref>{{cite news | title=Danity Kane's MTV fame reels in marketers| work=Reuters| url=https://www.reuters.com/article/entertainmentNews/idUSN0935132820080910| accessdate=2008-09-13 | date=2008-09-10}}</ref><ref>{{cite web|title=Danity Kane Launches Comic Book|work=Rap-Up|url=http://www.rap-up.com/2008/09/05/danity-kane-launches-comic-book/|accessdate=2009-01-06}}</ref>
However, in a January 28, 2009 interview with MTV News, Richard announced that the group had split up.<ref name=MTV.CoM/> Richard explained that Combs had invited all the women to come back to the 2009 season of ''Making the Band'' and that only two of them, Richard and Fimbres, showed up. "It changes [our situation] completely," she said.<ref name=MTV.CoM/> "We have fans out there who love Danity Kane. We love Danity Kane. It's hard. We're sitting here trying to make sense of it now. It's hard. We're put in this position that we didn't ask to be in and we're being told to fix it."<ref name=MTV.CoM/> On the series and in an earlier interview, Bex had explicitly stated her discontent about Danity Kane being divided.<ref name="MTV.cOm"/><ref name="MTv.CoM">{{cite news|first=Jocelyn|last=Vena|title=Danity Kane's Shannon Bex Says She Was 'Shell-Shocked' By Bandmates' Dismissals. 'This is real life to me,' singer says of Diddy giving Aubrey O'Day, D. Woods the boot.|publisher=MTV|date=2008-10-16|accessdate=2009-04-02|url=http://www.mtv.com/news/articles/1597228/20081016/kane__danity.jhtml}} {{Webarchive|url=https://web.archive.org/web/20090908155612/http://www.mtv.com/news/articles/1597228/20081016/kane__danity.jhtml |date=2009-09-08 }}</ref> "I don't know why [Bex left]," said Richard.<ref name=MTV.CoM/> "I think she's just happy. I don't want to even try to answer it 'cause that's not fair to her. I haven't [spoken to her] but I heard she's doing well with her husband and she got a house. I love her, but I don't know."<ref name=MTV.CoM/> Richard was surprised that only two members showed up for another season. "The thing about it ... I thought we were all going to come back and talk, or maybe if [O'Day] didn't come back, 'cause I don't know how [Combs] was feeling about that, if the four of us got together. I didn't know what to expect. I just know I got off the plane and found out I was the only one there and [Fimbres] came the next day."<ref name=MTV.CoM/>
Still in disbelief over the departures of O'Day and Woods, as well as [[Aubrey O'Day#Personal life|the speculation about O'Day's sexuality]] and her forthcoming ''[[Playboy]]'' spread, Richard stated, "I'm still surprised at it all. I'm still trying to recover from the first fire. So I'm still confused. I still don't know. I'm just being so honest. I have no idea."<ref name=MTV.CoM/>
On February 25, 2009, O'Day told MTV News that she was not sure if Woods had been asked back for the new season of ''Making the Band'', as far as she knew, but that she herself was not asked to return. "Well, I was fired and we all saw that," she said.<ref name="mTV.CoM">{{cite news|first=Jocelyn|last=Vena|title=Aubrey O'Day 'Would Never Say No' To Danity Kane Reunion. 'Danity Kane was a wonderful group, and like all things, nothing is forever,' she says.|publisher=MTV|date=2009-02-25|accessdate=2009-02-28|url=http://www.mtv.com/news/articles/1605775/20090224/kane__danity.jhtml}} {{Webarchive|url=https://web.archive.org/web/20090228014945/http://www.mtv.com/news/articles/1605775/20090224/kane__danity.jhtml |date=2009-02-28 }}</ref> "I'm not sure about the other girls — who was invited back or what they were asked to do — but I obviously wouldn't be invited back if I was fired."<ref name=mTV.CoM/>
O'Day conveyed her hope that fans continue to honor the group that "made her a star".<ref name=mTV.CoM/> "Danity Kane was a wonderful group, and like all things, nothing is forever," she said.<ref name=mTV.CoM/> "We had a great run and we were very successful. We may not have that answer for our fans, which is disappointing, but we did try, and that's more than a lot of people."<ref name=mTV.CoM/> O'Day said that though she is pursuing her own career as a solo artist, she would never turn down the chance to get onstage with her former bandmates. "I have so much respect for that situation, if there was ever interest in me coming back ... and making music with the girls, I would never say no to something like that," she said.<ref name=mTV.CoM/> "In regards to the other negativity, I really just chose not to comment," said O'Day.<ref name=mTV.CoM/> "I wrote a blog on my MySpace page, and if anyone wants to know how I feel, they can go there."<ref name=mTV.CoM/> O'Day later seemed to have more of a positive feeling about the whole situation. She stated, "After being kicked out, I learned you have to fight to stay happy, and that takes forgiveness of yourself."<ref>{{cite web|url=http://www.gossipgirls.com/aubrey-o039day/danity-kane-girls-get-together-solve-nothing-293978 |title=Danity Kane Girls Get Together, Solve Nothing |date=2009-04-24 |publisher=[[Gossip Girls]] |accessdate=2009-04-30 |url-status=dead |archiveurl=https://web.archive.org/web/20090427164652/http://www.gossipgirls.com/aubrey-o039day/danity-kane-girls-get-together-solve-nothing-293978 |archivedate=April 27, 2009 }}</ref>
Viewers were able to see the band's continued demise on the third season of ''Making the Band 4'', which premiered on February 12, 2009.<ref name=MTV.CoM/> During the February 26, 2009 episode, as well as the continued season, viewers saw Richard and Fimbres eager to continue being a group together and hoping to work with Bex again.<ref>{{cite web|url=http://www.mtv.com/videos/making-the-band-4-season-3-ep-12-how-you-gonna-fix-it |accessdate=February 28, 2009 }}{{dead link|date=June 2016|bot=medic}}{{cbignore|bot=medic}}</ref> This eagerness eventually ended in the April 16, 2009 airing. Within the first five minutes of the episode, Combs told Richard and Fimbres during a meeting that he released O'Day and Woods, along with Bex, from their contracts, and would be releasing Fimbres as well. He told Richard that she will remain on the label and that if there are any future plans for a new Danity Kane, she would be the only returning member.<ref name="MTV.cOM">''[[Making the Band]]'', ''[[MTV]]'' (2009-04-16). Retrieved on 2009-04-16.</ref><ref name="Aundrea Is Gone">{{cite web |last=Vena |first=Jocelyn |url=http://www.mtv.com/news/articles/1609473/20090417/kane__danity.jhtml |title=Danity Kane's Aundrea Fimbres Fired By Diddy |publisher=MTV |date=2009-04-17 |accessdate=2011-05-16 |archive-date=2010-03-05 |archive-url=https://web.archive.org/web/20100305182035/http://www.mtv.com/news/articles/1609473/20090417/kane__danity.jhtml }}</ref><ref name="Aundrea Is Gone 2">{{cite web|url=http://www.rapweekly.com/news.asp?id=3261 |accessdate=February 18, 2016 |url-status=dead |archiveurl=https://web.archive.org/web/20131029195032/http://www.rapweekly.com/news.asp?id=3261 |archivedate=October 29, 2013 }}</ref>
On April 23, 2009, viewers were expecting to see all five members of Danity Kane for the second part of the finale to find out if Danity Kane would without a doubt be removed from the Bad Boy label or if they would have a "fresh start" as Combs stated in the first part of the finale.<ref name="MTV.cOM"/> During the finale, Fimbres did not show up.<ref name="MTV.coM">''[[Making the Band]]'', ''[[MTV]]'' (2009-04-23). Retrieved on 2009-04-23.</ref> Bex explained that Fimbres did not show up because Fimbres "had been through enough" emotional turmoil with the group and wanted to stay home with family.<ref name=MTV.coM/> As for herself not showing up for the 2009 season of ''Making the Band'', Bex said that it was a "personal choice" and was nothing against the fans.<ref name=MTV.coM/> Woods said that part of the reason for the group's demise was due to not having a "sound foundation" when it began (five strangers being put together and expected to be emotionally close) and that eventually led to professional and personal problems with the group.<ref name=MTV.coM/> O'Day said she has forgiven being released from the group, and people who blamed her for the group's breakup.<ref name=MTV.coM/> When asked if Danity Kane could be a group again, O'Day said yes.<ref name=MTV.coM/> Woods and Bex said not at this time.<ref name=MTV.coM/> Combs said that they need a "time out" for now, particularly to work on their solo or alternative careers, and that he will not reunite Danity Kane unless the group consists of all five original members.<ref name=MTV.coM/>
On April 30, 2009, a special titled "The Rise and Fall of Danity Kane" aired on MTV. The special was an in-depth story showcasing how the group came together and broke apart.<ref name=MtV.CoM/> It reasoned that the breakup of friendships and new friendships built in place of old friendships (O'Day and Fimbres becoming distant; O'Day bonding more with Woods and Fimbres bonding more with Bex), as well as insecurity issues of each member, were contributing factors for the group's demise. In addition, everyone except for Bex was speculated as having been part of the blame.<ref name=MtV.CoM/>
=== 2013–14: Reunion, ''DK3'', and second disbandment ===
In May 2013, O'Day, Bex, Richard and Fimbres began talks about a possible reunion and have since then posted photos of the group in the recording studio.<ref>{{cite web|url=https://www.billboard.com/articles/columns/pop-shop/1561447/danity-kane-reunion-rumors-swirl-following-recent-meeting |title=Danity Kane Reunion Rumors Swirl Following Recent Meeting |publisher=Billboard |date=2013-05-13 |accessdate=2014-06-05}}</ref> An announcement with regard to their reunion was made at the [[2013 MTV Video Music Awards|2013 Video Music Awards]] on MTV.<ref name="dkreunion"/> During the 2013 MTV VMAs pre-show, the four remaining members of Danity Kane announced that they were reuniting, returning on their own terms without Diddy. They announced that a single would be released soon titled "Rage", produced by The Stereotypes, the same producers who were responsible for Danity Kane's biggest single to date, "Damaged". Original group member D. Woods did not take part in the reunion. Although no reason was given for the absence, she has stated: "It has been brought to my attention that my former group members of Danity Kane will be reuniting and while I will not be a part of the reunion, I wish the ladies blessings and much success on their endeavors."<ref>{{cite web |url=http://www.vibe.com/article/d-woods-confirms-she-wont-be-apart-danity-kane-reunion |title=D. Woods Confirms She Won't Be Apart [sic] Of Danity Kane Reunion |publisher=Vibe | date=2013-05-16 | accessdate=2014-08-09}}</ref><ref>{{cite web |url=http://www.vibevixen.com/2013/05/d-woods-confirms-she-wont-be-apart-of-danity-kane-reunion/ |title=@VIBEVixen VBLog » D. Woods Confirms She Won't Be Apart [sic] of Danity Kane Reunion » VIXEN |publisher=Vibevixen.com |date=2013-05-16 |accessdate=2014-08-09 |url-status=dead |archiveurl=https://web.archive.org/web/20141210002426/http://www.vibevixen.com/2013/05/d-woods-confirms-she-wont-be-apart-of-danity-kane-reunion/ |archivedate=2014-12-10 }}</ref>
[[File:DanityKane2014.jpg|thumb|Danity Kane performing in 2014]]
The band had their first performance in more than five years on September 21, 2013, at [[iHeartRadio]] Music Festival's Village in [[Las Vegas]] and performed an a cappella version of "Damaged". They confirmed in an interview that they were working with [[James Fauntleroy]], [[Dem Jointz]], [[Rodney "Darkchild" Jerkins]], [[Timbaland]], Da Internz, and [[The Stereotypes]] for the new album, which is set to be released in 2014. They had their first reunion concert in December 2013 at The House of Blues in [[Los Angeles]] after canceling a show with Chris Brown due to his arrest. In January 2014, a song titled "Bye Baby", which was also produced by the Stereotypes, was [[Internet leak|leaked]] online. They have been making many appearances since and have been hinting of doing another reality show along with their tour and new album.<ref>{{cite web|last=Parker |first=Lyndsey |url=http://music.yahoo.com/blogs/live/danity-kane-dish-reunion-iheartradio-fest-200457832.html |title=Danity Kane Dish About Reunion at iHeartRadio Fest | Maximum Performance - Yahoo Music |publisher=Music.yahoo.com |date=2013-09-23 |accessdate=2014-06-05}}</ref> On March 15, 2014, Danity Kane performed their second concert since reuniting at Fort Cheyenne in Las Vegas, performing the leaked new track "Bye Baby", chart-topping hits, and fan favorites.<ref>{{cite web|url=http://www.thisisrnb.com/2014/03/danity-kane-holds-down-the-stage-during-las-vegas-comeback-show |title=Danity Kane Holds Down The Stage During Las Vegas Comeback Show | ThisisRnB.com - Hot New R&B Music, Videos, News |publisher=ThisisRnB.com |date=2014-03-16 |accessdate=2014-06-05}}</ref> On March 24, 2014, it was announced that the group would be hitting the road in May to begin their new tour entitled "No Filter". The group will be touring 13 different cities beginning in [[San Francisco]] on May 16, 2014.<ref>{{cite web|url=https://www.billboard.com/articles/columns/pop-shop/5944924/danity-kane-announces-no-filter-us-tour |title=Danity Kane Announces 'No Filter' U.S. Tour |publisher=Billboard |date= |accessdate=2014-06-05}}</ref>{{Update inline|date=August 2014}}
On May 15, 2014, the band's first official reunion single, "Lemonade", was released on the Internet via [[SoundCloud]]. The single was produced by [[The Stereotypes]], and features rapper [[Tyga]] over a production sampled from "[[Grindin']]", the 2002 hit song by [[Clipse]].<ref>{{cite web |url=http://www.mtv.com/news/1825354/danity-kane-has-us-thirsty-for-some-lemonade-on-comeback-single-listen/ |title=Danity Kane Has Us Thirsty For Some 'Lemonade' On Comeback Single: Listen |publisher=MTV |date=2014-05-15 |accessdate=2014-06-05 |archive-date=2015-09-21 |archive-url=https://web.archive.org/web/20150921094824/http://www.mtv.com/news/1825354/danity-kane-has-us-thirsty-for-some-lemonade-on-comeback-single-listen/ }}</ref>
On May 16, 2014, on the first night of their #NOFilter Tour at [[The Fillmore]] in San Francisco, after performing several songs with Danity Kane, Fimbres announced that she would be leaving the group at the end of their tour, and O'Day, Bex, and Richard would be continuing on as a trio.<ref name="Fimbres leaving"/><ref name="Fimbres leaving2"/><ref>{{cite web|title=Interview: Danity Kane's Aubrey O'Day reacts to departure of Aundrea Fimbres|work=Chicago Tribune|url=http://articles.chicagotribune.com/2014-05-18/entertainment/chi-danity-kanes-aubrey-oday-aundrea-fimbres-20140518_1_aubrey-o-day-dawn-richard-aundrea-fimbres|accessdate=2014-05-21|archive-date=2014-05-22|archive-url=https://web.archive.org/web/20140522012550/http://articles.chicagotribune.com/2014-05-18/entertainment/chi-danity-kanes-aubrey-oday-aundrea-fimbres-20140518_1_aubrey-o-day-dawn-richard-aundrea-fimbres|url-status=dead}}</ref>
On May 28, 2014, "Lemonade" was released for purchase on [[iTunes]],<ref>{{cite web|url=http://www.muumuse.com/2014/05/danity-kane-lemonade-itunes-now.html/|title=Danity Kane's "Lemonade" Is Now On iTunes (Because Of Me, So You're Welcome)|date=28 May 2014|publisher=|accessdate=16 June 2018}}</ref> and on May 29, 2014, a lyric video for the song featuring three child impersonations of the trio was released to [[Vevo]] on [[YouTube]].<ref>{{cite web|url=http://www.complex.com/music/2014/05/danity-kane-lemonade-lyric-video|title=Danity Kane Made a Lyric Video for "Lemonade" and It's Pretty Spectacular|website=Complex|accessdate=16 June 2018}}</ref>
On August 4, 2014,<ref>{{cite web |url=http://www.nydailynews.com/entertainment/music/danity-kane-breaks-violent-studio-fight-article-1.1896788|title=Danity Kane breaks up again after violent studio fight between Aubrey O'Day, Dawn Richard|last1=Maresca|first1=Rachel|date=August 8, 2014|website=nydailynews.com|publisher=[[New York Daily News]]|accessdate=August 9, 2014}}</ref> while in a Los Angeles recording studio, a fight ensued in which Richard allegedly punched O'Day. After days of speculation, O'Day and Bex released a public statement on August 8 announcing the group's second disbandment.<ref name="LaTimesBreakup"/> On September 24, 2014, O'Day and Bex announced that despite the group's break-up, their third album, ''[[DK3]]'', would be released on October 28, 2014.<ref>{{cite web|title=Danity Kane Announce Post Break-Up Album, Fans Can't Stop Crying|work=[[MTV]]|url=http://www.mtv.com/news/1943360/danity-kane-break-up-album/|accessdate=2014-09-25|archive-date=2016-08-14|archive-url=https://web.archive.org/web/20160814133537/http://www.mtv.com/news/1943360/danity-kane-break-up-album/}}</ref> Following the group's break-up, Bex and O'Day began to release music under the name [[Dumblonde]], while Richard continued to pursue her solo career.
===2018–present: Second reunion and future state of the group===
In August 2018, Bex, O'Day and Richard announced [[The Universe Is Undefeated Tour]], with O'Day and Richard stating that they had made amends. The set list for the tour would be split into three parts. The first part to focus on promoting the sophomore material from Bex and O'Day's duo, [[Dumblonde]], followed by a second part showcasing Richard's solo efforts, while the finale part would include songs by the group.<ref name="Kaufman"/> In January 2019 during their tour stop in [[Houston]] and a few weeks later on Instagram, O'Day announced that Danity Kane would work on new music.
After touring for close to a year performing Danity Kane's, Dumblonde's and Richard's solo music, the trio released a new song under the Danity Kane [[moniker]] called "Neon Lights" on June 24, 2019.<ref>{{cite news|url=https://www.refinery29.com/en-us/2019/06/236325/danity-kane-neon-lights-hair-instagram|title=Danity Kane Is Back With New Music & Neon Hair|date=June 25, 2019|accessdate=June 26, 2019|last=Simeon|first=Aimee|work=[[Refinery29]]}}</ref> To promote the new single, Danity Kane had a two day interactive event, entitled "Choose Your Own Adventure", where fans decided which songs they performed for the first half of the show. <ref>{{cite news|url=https://www.hotnewhiphop.com/danity-kane-gives-fans-total-control-over-their-setlist-for-interactive-live-show-news.82438.html|date=June 6, 2019|accessdate=June 6, 2019|last=Marie|first=Erika|work=HotNewHipHop}}</ref>
In 2020, Danity Kane released an EP entitled "Strawberry Milk" containing two singles: "Fly" and "Boy Down". Although the track was released under Danity Kane, the EP is also promoted as Aubrey X Dawn. On Instagram Live, O'Day addressed Bex's absence from the group. She stated "Shan is building a company right now called Vooks." O'Day said, "Danity Kane is so much bigger than five girls. It can be one girl, it can be two, it can be five. It's a voice for women and you got two of us right now giving you that voice and who knows what the future will have ahead of us. Things can evolve, things move in different directions. Everyone is always invited back."<ref>{{cite news|url=https://www.rap-up.com/2020/03/05/danity-kane-dawn-aubrey-fly-boy-down/|date=March 5, 2020|accessdate=March 5, 2020|last=|first=|work=[[RapUp]]}}</ref> On March 19, 2020, Danity Kane released their third single as a duo entitled, New Kings.<ref>{{cite news|url=https://music.apple.com/us/album/new-kings-single/1502912737|date=March 19, 2020|accessdate=March 19, 2020|last=|first=|work=[[Apple Music]]}}</ref>
== Discography ==
{{Main|Danity Kane discography}}
;Studio albums
* ''[[Danity Kane (album)|Danity Kane]]'' (2006)
* ''[[Welcome to the Dollhouse (album)|Welcome to the Dollhouse]]'' (2008)
* ''[[DK3]]'' (2014)
==Tours==
{{col-begin}}
{{col-2}}
'''Headlining'''
* [[Jingle Ball#December 7, 2006|Jingle Ball Tour]] (2006)
* [[Making the Band 4 - The Tour]] (2008)
* #NoFilterTour (2014)
* [[The Universe Is Undefeated Tour]] (2018–19)
{{col-2}}
'''Supporting act'''
* [[The Never Gone Tour]] (2005)
* [[Monkey Business Tour]] (2006)
* [[Back to Basics Tour]] (2006–07)
{{col-end}}
==Members==
{| class="wikitable"
|-
! colspan=2|Member !!2005 !!2006 !!2007 !!2008 !!2009 !! !!2013 !!2014!! !!2018 !!2019 !!2020
|-
| style="background:#87D3F8;"| || [[Dawn Richard (singer)|Dawn Richard]]<br>{{small|(2005–09, 2013–14, 2018–present)}} || colspan=5 style="text-align:center; background:#87D3F8"| ||| || colspan=3 style="text-align:center; background:#87D3F8"| ||| || colspan=2 style="text-align:center; background:#87D3F8"|
|-
|style="background:orange"| || [[Aubrey O'Day]]<br>{{small|(2005–08, 2013–14, 2018–present)}} || colspan=4 style="text-align:center; background:orange"| || colspan=3| || colspan=2 style="text-align:center; background:orange"| ||| || colspan=2 style="text-align:center; background:orange"|
|-
| style="background:pink"| || [[Shannon Bex]]<br>{{small|(2005–09, 2013–14, 2018–2019)}} || colspan=5 style="text-align:center; background:pink"| ||| || colspan=3 style="text-align:center; background:pink"| ||| || colspan=1 style="text-align:center; background:pink"| || colspan=1 |
|-
| style="background:#B4FB84;"| || [[Aundrea Fimbres]]<br>{{small|(2005–09, 2013–2014)}} || colspan=5 style="text-align:center; background:#B4FB84"| ||| || colspan=2 style="text-align:center; background:#B4FB84"| || colspan=4 |
|-
|style="background:#FDFD96"| || [[D. Woods]]<br>{{small|(2005–08)}} || colspan=4 style="text-align:center; background:#FDFD96;"| || colspan=8 |
|}
==Awards and nominations==
{| class="wikitable"
|-
! Year
! Award
! Category
! Work
! Result
|-
| 2006 || [[Urban Music Awards|Urban Music Award]]|| "Best Group - Female"||Danity Kane||{{won}}
|-
|rowspan=2|2007||Poptastic Awards||"Best Ringtone"||"[[Show Stopper]]"||
|-
|[[Soul Train Music Awards|Soul Train Music Award]]||"Best R&B/ Album Group, Band or Duo"||Danity Kane||<ref>{{cite web|title=The 2007 Soul Train Music Awards And the Winners Are ...|url=http://randb.about.com/od/awardsshows/a/2007SoulAwards.htm|publisher=About|accessdate=March 11, 2007|archive-date=September 17, 2015|archive-url=https://web.archive.org/web/20150917001444/http://randb.about.com/od/awardsshows/a/2007SoulAwards.htm|url-status=dead}}</ref>
|-
|rowspan=10|2008||[[BET Awards|BET Award]]|| "Best Group"||Danity Kane||<ref>{{cite web|title=2008 BET Awards Winners and Nominees|url=http://theenvelope.latimes.com/awards/env-2008-bet-awards-winners-noms24jun24,0,2828634.htmlstory|publisher=The Envelope|accessdate=June 24, 2008}}</ref>
|-
|[[Teen Choice Awards|Teen Choice Award]]|| "Best R&B Track"||rowspan=5|"[[Damaged (Danity Kane song)|Damaged]]"||<ref>{{cite web|title=2008 Teen Choice Awards Winners and Nominees|url=http://theenvelope.latimes.com/env-2008-teen-choice-awards-scorecard17jun17,0,2603341.htmlstory|publisher=The Envelope|accessdate=June 17, 2008|archive-url=https://web.archive.org/web/20080813232814/http://theenvelope.latimes.com/env-2008-teen-choice-awards-scorecard17jun17,0,2603341.htmlstory|archive-date=August 13, 2008|url-status=dead}}</ref>
|-
|rowspan=2|[[MTV Video Music Awards|MTV Video Music Award]]|| "[[MTV Video Music Award for Best Pop Video|Best Pop Video]]"||<ref name="2008 MTV Video Music Award Winners">{{cite web|title=2008 MTV Video Music Award Winners|url=http://www.mtv.com/ontv/vma/2008/|publisher=MTV|accessdate=2008|archive-date=2008-09-10|archive-url=https://web.archive.org/web/20080910043725/http://www.mtv.com/ontv/vma/2008/}}</ref>
|-
| "[[MTV Video Music Award for Best Dance Video|Best Dancing in a Video]]"||<ref name="2008 MTV Video Music Award Winners"/>
|-
|rowspan=3|Starshine Magazine||"Best Dance Song"||<ref name="Press Release">{{cite web|title=2008 StarShine Magazine Music Choice Nominees Include Backstreet Boys, Elliott Yamin, Hanson, Blake Lewis, Jordin Sparks & Brianna Taylor|url=http://www.24-7pressrelease.com/press-release/2008-starshine-magazine-music-choice-nominees-include-backstreet-boys-elliott-yamin-hanson-blake-lewis-jordin-sparks-brianna-taylor-61270.php|publisher=Press Release|accessdate=2008}}</ref>
|-
|"Best R&B / Hip-Hop Song"||<ref name="Press Release"/>
|-
|"Favorite Group / Band"||Danity Kane||<ref name="Press Release"/>
|-
|rowspan=3|Online Hip Hop Awards||"Breakout Girl Group Of The Year(R&B)"||Danity Kane||{{won}}<ref name="Urban Daily">{{cite web|title=2008 Online Hip Hop Awards Nominees|url=http://theurbandaily.com/2008/10/27/nominees-announced-for-the-2008-online-hip-hop-awards/|publisher=Urban Daily|accessdate=2008}}</ref>
|-
|"Album of the Year (R&B)"||''[[Welcome to the Dollhouse (album)|Welcome to the Dollhouse]]''||{{won}}<ref name="Urban Daily"/>
|-
| "Off the Hook Award (R&B)"||Damaged||{{won}}<ref name="Urban Daily"/>
|-
|2009||[[Guinness World Records]]|| "First female group in Billboard history to debut their first two albums at the top of the charts."||Danity Kane||{{won}}
|-
|}
== References ==
{{reflist}}
== External links ==
{{Commons category}}
* {{Official website|1=http://www.danitykane.com}}
* [https://web.archive.org/web/20110616170207/http://www.aubreyoday.org/ Aubrey O'Day website]
{{S-start}}
{{s-bef|before=[[Da Band]]}}
{{s-ttl|title=''[[Making the Band]]'' winners|years=2005}}
{{s-aft|after=[[Day26]]<br>[[Donnie Klang]]}}
{{s-end}}
{{Authority control}}
[[Category:Participants in American reality television series]]
[[Category:Singing talent show winners]]
[[Category:Bad Boy Records artists]]
[[Category:American pop music groups]]
[[Category:American contemporary R&B musical groups]]
[[Category:American girl groups]]
[[Category:American pop girl groups]]
[[Category:Musical groups established in 2005]]
[[Category:Musical groups disestablished in 2009]]
[[Category:Musical groups reestablished in 2013]]
[[Category:Musical groups disestablished in 2014]]
[[Category:Musical groups reestablished in 2018]]
[[Category:Musical quintets]]
<noinclude>
<small>This page was moved from [[:en:Danity Kane]]. Its edit history can be viewed at [[Danity Kane/edithistory]]</small></noinclude>
f2u35mtmefu7rkrk5rc2pdi5t4p92s0
Philipp Grimm
0
121920
665581
485752
2025-07-08T07:12:13Z
Escargot bleu
61947
665581
wikitext
text/x-wiki
{{Short description|German lawyer}}
{{unreferenced|date=June 2013}}
'''Philipp Wilhelm Grimm''' (died 1796) was a [[Germany|German]] lawyer and father to the [[Brothers Grimm]] and seven other children, including [[Ludwig Emil Grimm]] and [[:de:Charlotte Grimm|Charlotte Amalie Grimm]]. He was husband of Dorothea Grimm.
{{Portal |Children's literature}}
{{authority control}}
{{DEFAULTSORT:Grimm, Philipp}}
[[Category:Brothers Grimm]]
[[Category:18th-century German lawyers]]
[[Category:1796 deaths]]
[[Category:Year of birth unknown]]
{{Germany-law-bio-stub}}
O
pa7fnue9x6jzdup731b4ajgn080grqa
User:SongVĩ.Bot II
2
124239
665565
665480
2025-07-07T17:00:19Z
SongVĩ.Bot II
52414
[[User:SongVĩ.Bot II|Task 0]]: Đã 1288 ngày...
665565
wikitext
text/x-wiki
Cập nhật lần cuối: 08-07-2025
Đã 1288 ngày...
orjocbd77zxhrswv7rrw1qlckmz5ylc
User:Harej/citation-watchlist.js
2
154918
665564
664566
2025-07-07T12:43:05Z
Harej
7994
Incrementing version number
665564
javascript
text/javascript
/**
*
* Citation Watchlist
* https://en.wikipedia.org/wiki/WP:WATCHCITE
*
*/
/**
* ==========================================================================
* Domain List Configuration
* ==========================================================================
*
* Citation Watchlist requires the following wiki pages to function:
*
* 1. Public Suffix List
* - A local copy of the public suffix list, used for domain parsing.
* - Copy the contents of:
* https://en.wikipedia.org/wiki/Wikipedia:Citation_Watchlist/Public_Suffix_List
* to a page on your own wiki.
* - Update the `publicSuffixList` variable below to reflect your page title.
*
* 2. List of Lists
* - A page linking to one or more domain list pages.
* - Format as a bullet list: "* [[Page Title]]" (space after asterisk).
* - Reference formatting example:
* https://en.wikipedia.org/wiki/Wikipedia:Citation_Watchlist/Lists
* - Update the `listOfLists` variable below accordingly.
*
* 3. Domain List Pages
* - One or more pages listing suspicious or noteworthy domains.
* - Each page must contain section headers that match the `indicators` config
* below (e.g., "==Warn==", "==Caution==").
* - Under each section, list domains in the format: "* example.com"
* - Do not use link formatting—just plain text.
*/
const publicSuffixList = "Wikipedia:Citation_Watchlist/Public_Suffix_List";
const listOfLists = "Wikipedia:Citation_Watchlist/Lists";
/**
* ==========================================================================
* Indicator Configuration
* ==========================================================================
*
* Defines metadata for domain indicators used in the watchlist UI.
* Each indicator is associated with a level of urgency and a unique symbol.
*
* Fields:
* - msg: Display label for the level (e.g., "Warning", "Caution").
* - emoji: Unicode character for the visual indicator (escaped as `\uXXXX`).
* - section: Must exactly match the section headers in the domain list pages.
* - priority: Higher values override lower ones for conflicting domain matches.
* Priority scale: 1 (lowest) to N (highest).
* - list: Defined as "new Set()" for all indicator types.
*
* If a domain appears in multiple lists, the one with the highest priority
* takes precedence.
*/
const indicators = {
warning: {
msg: "Warning",
emoji: '\u2757',
section: "==Warn==",
priority: 3,
list: new Set()
},
caution: {
msg: "Caution",
emoji: '\u270B',
section: "==Caution==",
priority: 2,
list: new Set()
},
inspect: {
msg: "Inspect",
emoji: '\uD83D\uDD0E',
section: "==Inspect==",
priority: 1,
list: new Set()
},
removed: {
msg: "Removed",
emoji: '\u{1F5D1}',
section: null,
priority: -1,
list: new Set()
}
};
/**
* Citation Watchlist
*
* Highlights potentially questionable citations added in Wikipedia revisions,
* using predefined domain lists and a public suffix list to analyze diffs.
*
*
* Documentation: https://en.wikipedia.org/wiki/WP:WATCHCITE
*
* Author: James Hare under contract with Hacks/Hackers
* License: GNU General Public License v3.0 (GPL-3.0)
*
* @version 1.15
* @since 2025-
*/
/**
* If you want to modify any part of the script below this point, please submit
* your edits to https://test.wikipedia.org/wiki/User:Harej/citation-watchlist.js
* so that your modifications can be tested.
*/
let publicSuffixSet = new Set();
const namespaces = Object.entries(mw.config.get('wgFormattedNamespaces'))
.filter(([num, name]) => num !== '0' && num !== '118')
.map(([_, name]) => name.replace(/ /g, '_') + ':');
/**
* Main entry point for Citation Watchlist.
* Determines if the current page should be analyzed, fetches domain and suffix
* lists, processes each change/revision in the recent changes or history page,
* and triggers analysis to highlight questionable domains.
*/
async function analyzeView() {
purgeExpiredCache();
const ns = mw.config.get('wgNamespaceNumber');
if (![-1, 0, 118].includes(ns)) {
return;
}
publicSuffixSet = await fetchPublicSuffixList();
if (publicSuffixSet.size === 0) {
console.error('Public Suffix List loading failed');
return;
}
console.log("Welcome to Citation Watchlist");
const listPages = await fetchDomainListPages(listOfLists);
if (listPages) {
const lists = await fetchAndOrganizeDomainLists(listPages);
if (lists) {
for (const type in indicators) {
lists[type].list.forEach(indicators[type].list.add, indicators[type].list);
}
}
}
const entriesContainers = document.querySelectorAll('.mw-changeslist-links');
let noLinks = true;
for (const container of entriesContainers) {
const diffLink = container.querySelector('a.mw-changeslist-diff');
const histLink = container.querySelector('a.mw-changeslist-history');
const prevLink = container.querySelector(
'a.mw-history-histlinks-previous');
const curLink = container.querySelector('a.mw-history-histlinks-current');
let revision = null;
let urlParams = '';
if (diffLink) {
noLinks = false;
const diffUrl = new URL(diffLink.href);
urlParams = new URLSearchParams(diffUrl.search);
const pageTitle = urlParams.get('title');
if (isNotArticle(pageTitle)) continue;
revision = {
oldrevision: urlParams.get('diff'),
newrevision: urlParams.get('oldid'),
element: diffLink.parentNode.parentNode
};
if (revision.oldrevision === 'prev') { // This happens on user contributions pages
const previousRevisionMap = await fetchPreviousRevisionIds(
[revision.newrevision]);
revision.oldrevision = revision.newrevision;
revision.newrevision = previousRevisionMap[revision.newrevision];
}
} else if (histLink) {
noLinks = false;
const histUrl = new URL(histLink.href);
urlParams = new URLSearchParams(histUrl.search);
const pageTitle = urlParams.get('title');
if (isNotArticle(pageTitle)) continue;
const firstID = await fetchFirstRevisionId(pageTitle);
if (!firstID) continue;
revision = {
oldrevision: firstID,
element: histLink.parentNode.parentNode
};
} else if (prevLink) {
noLinks = false;
urlParams = new URLSearchParams(prevLink.href);
const previousRevisionMap = await fetchPreviousRevisionIds(
[urlParams.get('oldid')]);
revision = {
oldrevision: urlParams.get('oldid'),
newrevision: previousRevisionMap[urlParams.get('oldid')],
element: prevLink.parentNode.parentNode
};
} else if (curLink) {
noLinks = false;
urlParams = new URLSearchParams(curLink.href);
revision = {
oldrevision: urlParams.get('oldid'),
element: curLink.parentNode.parentNode
};
}
if (revision) {
await analyzeRevision(revision);
}
}
// If no links were found, extract the first revision ID
if (noLinks == true) {
const pageTitle = mw.config.get('wgTitle');
const firstID = await fetchFirstRevisionId(pageTitle);
revision = {
oldrevision: firstID,
element: entriesContainers[0]
};
await analyzeRevision(revision);
}
}
/**
* Analyzes a revision (or a pair of revisions) for newly added URLs,
* compares them against domain watchlists, and highlights matches.
*
* @param {Object} revision - Object containing oldrevision, optional newrevision, and DOM element.
*/
async function analyzeRevision(revision) {
const lookup = [revision.oldrevision];
if (revision.newrevision) {
lookup.push(revision.newrevision);
}
const wikiDomain = location.hostname;
const cacheKey = `revisionDiff:${wikiDomain}:${revision.oldrevision}:${revision.newrevision || 'null'}`;
const oneMonth = 30 * 24 * 60 * 60 * 1000;
let addedURLs = [];
let removedURLs = [];
// Try reading from cache
const cached = localStorage.getItem(cacheKey);
if (cached) {
try {
const parsed = JSON.parse(cached);
const age = Date.now() - parsed.timestamp;
if (age < oneMonth) {
console.log(`Cache hit for revision ${cacheKey}`);
if (Array.isArray(parsed.addedURLs)) {
addedURLs = parsed.addedURLs;
}
if (Array.isArray(parsed.removedURLs)) {
removedURLs = parsed.removedURLs;
}
}
} catch (e) {
console.warn('Cache parse error, refetching:', e);
}
}
// If not cached, fetch and process
if (addedURLs.length === 0 && removedURLs.length === 0) {
const wikitext = await fetchRevisionContent(lookup);
const fromURLs = new Set(extractURLs(wikitext.oldrevision) || []);
const toURLs = new Set(extractURLs(wikitext.newrevision) || []);
if (revision.newrevision) {
// URLs present in new revision but not in old revision = added
addedURLs = [...toURLs].filter(url => !fromURLs.has(url));
// URLs present in old revision but not in new revision = removed
removedURLs = [...fromURLs].filter(url => !toURLs.has(url));
} else {
// For first revision, all URLs are considered added
addedURLs = Array.from(fromURLs);
removedURLs = [];
}
try {
localStorage.setItem(cacheKey, JSON.stringify({
timestamp: Date.now(),
addedURLs,
removedURLs
}));
} catch (e) {
console.warn('Failed to store cache:', e);
}
}
console.log(`Revision element: ${revision.element.innerHTML}
Added URLs: ${addedURLs.join(' ')}
Removed URLs: ${removedURLs.join(' ')}
`);
// Match domains to indicator types
const matchedDomains = Object.keys(indicators).reduce((acc, key) => {
acc[key] = [];
return acc;
}, {});
// Process removed URLs first - these always get the "removed" indicator
if (removedURLs.length > 0) {
const removedDomains = [];
for (const url of removedURLs) {
try {
const hostname = new URL(url).hostname;
const domain = getRootDomain(hostname, publicSuffixSet);
if (!removedDomains.includes(domain)) {
removedDomains.push(domain);
}
} catch (e) {
console.warn(`Error processing removed URL ${url}:`, e);
}
}
matchedDomains.removed = removedDomains;
}
// Process added URLs
for (const url of addedURLs) {
try {
const hostname = new URL(url).hostname;
const domain = getRootDomain(hostname, publicSuffixSet);
let highestPriorityType = null;
for (const type in indicators) {
if (type !== 'removed' && indicators[type].list.has(domain)) {
if (
highestPriorityType === null ||
indicators[type].priority > indicators[highestPriorityType].priority
) {
highestPriorityType = type;
}
}
}
if (
highestPriorityType !== null &&
!matchedDomains[highestPriorityType].includes(domain)
) {
matchedDomains[highestPriorityType].push(domain);
// Remove this domain from lower priority lists
for (const type in indicators) {
if (
type !== 'removed' && // Never remove from "removed" list
indicators[type].priority < indicators[highestPriorityType].priority
) {
matchedDomains[type] = matchedDomains[type].filter(d => d !== domain);
}
}
}
} catch (e) {
console.warn(`Error processing added URL ${url}:`, e);
}
}
// Prepend emoji indicators - "removed" indicator should appear even if other indicators are present
for (const type in indicators) {
if (matchedDomains[type] && matchedDomains[type].length > 0) {
prependEmojiWithTooltip(revision.element, type, matchedDomains[type]);
}
}
}
/**
* Prepends an emoji and tooltip to a revision list entry DOM element if any
* domains matched a warning list.
*
* @param {HTMLElement} element - The container element to prepend the emoji to.
* @param {string} type - The type of indicator ('warning', 'caution', 'inspect').
* @param {string[]} domains - The list of matched domains for the indicator.
*/
function prependEmojiWithTooltip(element, type, domains) {
const indicator = indicators[type];
if (!indicator || element.getAttribute(`data-processed-${type}`) === 'true') {
return;
}
const emojiSpan = document.createElement('span');
emojiSpan.textContent = indicator.emoji + " ";
emojiSpan.title = `${indicator.msg}: ${domains.join(", ")}`;
element.parentNode.insertBefore(emojiSpan, element);
element.setAttribute(`data-processed-${type}`, 'true');
}
/**
* Extracts the first page object from MediaWiki API query response.
*
* @param {Object} data - MediaWiki API response.
* @returns {Object|null} The first page object or null if unavailable.
*/
async function getFirstPage(data) {
if (!data || !data.query || !data.query.pages) return null;
const pages = data.query.pages;
return Object.values(pages)[0]; // Return the first page
}
/**
* Retrieves the first revision from a page object.
*
* @param {Object} page - Page object containing revisions.
* @returns {Object|null} First revision object or null.
*/
async function getFirstRevision(page) {
if (page.revisions && page.revisions.length > 0) {
return page.revisions[0];
}
return null;
}
/**
* Fetches wikitext content for one or two revisions by ID.
*
* @param {string[]} revIds - Array of revision IDs.
* @returns {Object} Object with `oldrevision` and optionally `newrevision` as wikitext strings.
*/
async function fetchRevisionContent(revIds) {
const data = await fetchRevisionData({
revids: revIds,
rvprop: ['content'],
rvslots: ['main']
});
const page = await getFirstPage(data);
const wikitext = { oldrevision: null, newrevision: null };
if (page.revisions && page.revisions.length > 0) {
wikitext.oldrevision = page.revisions[0].slots.main['*'] || null;
if (page.revisions.length > 1) {
wikitext.newrevision = page.revisions[1].slots.main['*'] || null;
}
}
return wikitext;
}
/**
* Fetches the parent revision IDs for a given list of revision IDs.
*
* @param {string[]} revisionIds - Array of revision IDs.
* @returns {Object} Map of revision ID to its parent ID.
*/
async function fetchPreviousRevisionIds(revisionIds) {
const data = await fetchRevisionData({
revids: revisionIds,
rvprop: ['ids']
});
const page = await getFirstPage(data);
if (!page) return {};
const revisionMap = {};
for (const revision of page.revisions) {
revisionMap[revision.revid] = revision.parentid;
}
return revisionMap;
}
/**
* Fetches the ID of the first revision of a page.
*
* @param {string} pageTitle - The page title to look up.
* @returns {number|null} Revision ID or null.
*/
async function fetchFirstRevisionId(pageTitle) {
const data = await fetchRevisionData({
titles: [pageTitle],
rvlimit: 1,
rvdir: 'newer',
rvprop: ['ids'],
});
const page = await getFirstPage(data);
if (!page) return null;
const revision = await getFirstRevision(page);
return revision ? revision.revid : null;
}
/**
* Fetches the list of subpages from the list of lists, parses wikilinks, caches
* the result, and returns list of subpage titles.
*
* @param {string} pageName - Title of the list-of-lists page.
* @returns {Promise<string[]>} List of subpage titles.
*/
async function fetchDomainListPages(pageName) {
const cacheKey = `citationWatchlistFetchDomainListPages_${pageName}`;
const cacheExpiration = 4 * 60 * 60 * 1000;
const now = Date.now();
const cachedData = localStorage.getItem(cacheKey);
const cachedTimestamp = localStorage.getItem(`${cacheKey}_timestamp`);
if (cachedData && cachedTimestamp && (now - parseInt(cachedTimestamp, 10)) <
cacheExpiration) {
console.log("Loaded list of lists from cache");
return JSON.parse(cachedData);
}
const data = await fetchRevisionData({
titles: [pageName],
rvprop: ['content'],
rvslots: ['*']
});
const page = await getFirstPage(data);
if (!page) return [];
const content = page.revisions[0].slots.main['*'];
const pageTitles = [];
const lines = content.split('\n');
for (let line of lines) {
if (line.startsWith('* [[')) {
const match = line.match(
/\[\[([^\]]+)\]\]/); // Matches the first instance of [[Page Title]]
if (match) {
pageTitles.push(match[1]);
}
}
}
localStorage.setItem(cacheKey, JSON.stringify(pageTitles));
localStorage.setItem(`${cacheKey}_timestamp`, now.toString());
console.log("Loaded from API and stored in cache");
return pageTitles;
}
/**
* Loads domain lists from a set of pages, categorizes them by indicator section
* headers, and populates the corresponding `Set` in the global `indicators` object.
*
* @param {string[]} pageNames - List of page titles to fetch.
* @returns {Object} Updated indicators object with domain sets.
*/
async function fetchAndOrganizeDomainLists(pageNames) {
const cacheTTL = 6 * 60 * 60 * 1000;
const now = Date.now();
const cachedData = {};
const pagesToFetch = [];
for (const title of pageNames) {
const cacheKey = `domainList:${location.hostname}:${title}`;
const cached = localStorage.getItem(cacheKey);
if (cached) {
try {
const parsed = JSON.parse(cached);
if (now - parsed.timestamp < cacheTTL && parsed.content) {
console.log(`Using cached content for page: ${title}`);
cachedData[title] = parsed.content;
continue;
} else {
console.log(`Cache expired for page: ${title}`);
}
} catch (e) {
console.warn(`Cache error for ${title}:`, e);
}
}
console.log(`Will fetch page: ${title}`);
pagesToFetch.push(title);
}
let fetchedPages = {};
if (pagesToFetch.length > 0) {
const apiData = await fetchRevisionData({
titles: pagesToFetch,
rvprop: ['content'],
rvslots: ['*'],
});
const pages = apiData.query.pages;
for (const pageId in pages) {
const page = pages[pageId];
const title = page.title;
const content = page.revisions[0].slots.main['*'];
fetchedPages[title] = content;
const cacheKey = `domainList:${location.hostname}:${title}`;
try {
localStorage.setItem(cacheKey, JSON.stringify({
timestamp: now,
content,
}));
console.log(`Cached content for page: ${title}`);
} catch (e) {
console.warn(`Failed to cache ${title}:`, e);
}
}
}
const allContent = { ...cachedData, ...fetchedPages };
for (const title in allContent) {
const content = allContent[title];
let currentList = null;
const lines = content.split('\n');
for (let line of lines) {
for (const type in indicators) {
if (line.trim() === indicators[type].section) {
currentList = indicators[type].list;
break;
}
}
if (line.startsWith('*') && currentList) {
const domain = line.substring(1).trim();
// Discard domain entries with slashes (indicating domains with paths)
if (!domain.includes('/')) {
currentList.add(domain);
}
}
}
}
return indicators;
}
/**
* Fetches and caches the public suffix list used to identify top-level domains.
*
* @returns {Promise<Set<string>>} Set of public suffixes.
*/
async function fetchPublicSuffixList() {
const cacheKey = 'publicSuffixListCache';
const cacheTTL = 24 * 60 * 60 * 1000;
const cached = localStorage.getItem(cacheKey);
if (cached) {
try {
const parsed = JSON.parse(cached);
const age = Date.now() - parsed.timestamp;
if (age < cacheTTL && parsed.content) {
console.log('Using cached public suffix list');
return new Set(parsed.content.split('\n').filter(line =>
line.trim() && !line.trim().startsWith('//')
).map(line => line.trim()));
}
} catch (e) {
console.warn('Error parsing cache, refetching:', e);
}
}
const pslUrl = mw.config.get('wgArticlePath').replace('$1', publicSuffixList)
+ '?action=raw';
console.log(`Raw page text request: ${pslUrl}`);
const content = await safeFetch(fetch, pslUrl).then(response => response ?
response.text() : null);
if (!content) return new Set();
try {
localStorage.setItem(cacheKey, JSON.stringify({
timestamp: Date.now(),
content
}));
} catch (e) {
console.warn('Failed to write to cache:', e);
}
const suffixSet = new Set();
const lines = content.split('\n');
for (const line of lines) {
if (line.trim() && !line.trim().startsWith('//')) {
suffixSet.add(line.trim());
}
}
return suffixSet;
}
/**
* Makes a MediaWiki API call to fetch revision metadata or content.
*
* @param {Object} data - Options for the API call, such as `revids`, `titles`, `rvprop`, etc.
* @returns {Promise<Object>} MediaWiki API query result.
*/
async function fetchRevisionData(data) {
const paramKeys = ['rvprop', 'revids', 'titles', 'rvslots'];
const params = {
action: 'query',
prop: 'revisions',
format: 'json',
rvdir: data.rvdir || 'older',
origin: '*'
};
if (data.rvlimit) { params.rvlimit = data.rvlimit; }
paramKeys.forEach(key => {
if (data[key]) {
params[key] = Array.isArray(data[key]) ? data[key].join('|') : data[key];
}
});
const api = new mw.Api();
return await safeFetch(api.get.bind(api), params);
}
/**
* Wraps any asynchronous fetch function with retry logic and error handling.
*
* @param {Function} fn - The function to execute (usually an API call).
* @param {...any} args - Arguments to pass to the fetch function.
* @param {Object} options - Optional configuration for the fetch operation.
* @param {number} options.retries - Number of retry attempts (default: 2).
* @param {number} options.retryDelay - Delay between retries in ms (default: 1000).
* @returns {Promise<any|null>} Result of the fetch or null on failure.
*/
async function safeFetch(fn, ...args) {
// Extract options if the last argument is an options object
let options = { retries: 2, retryDelay: 1000 };
if (args.length > 0 && typeof args[args.length - 1] === 'object' && args[args.length - 1]._isSafeFetchOptions) {
options = { ...options, ...args.pop() };
}
let lastError = null;
let attempt = 0;
const maxAttempts = options.retries + 1;
while (attempt < maxAttempts) {
try {
attempt++;
const result = await fn(...args);
// Check if the result is valid (not null or undefined)
if (result === null || result === undefined) {
throw new Error('Received null or undefined response');
}
// For fetch API responses, check if the status is ok
if (result && typeof result.ok === 'boolean' && !result.ok) {
throw new Error(`HTTP error ${result.status}: ${result.statusText || 'Unknown error'}`);
}
return result;
} catch (error) {
lastError = error;
// Log the error with attempt information
if (attempt < maxAttempts) {
console.warn(`Error during ${fn.name || 'fetch operation'} (attempt ${attempt}/${maxAttempts}):`,
error.message || error);
// Wait before retrying
await new Promise(resolve => setTimeout(resolve, options.retryDelay));
} else {
// Final attempt failed
console.error(`All ${maxAttempts} attempts failed for ${fn.name || 'fetch operation'}:`,
error.message || error);
}
}
}
// All attempts failed
return null;
}
// Helper function to create options for safeFetch
safeFetch.withOptions = function(retries, retryDelay) {
return {
retries: retries || 2,
retryDelay: retryDelay || 1000,
_isSafeFetchOptions: true
};
};
/**
* Extracts all HTTP(S) URLs from a given wikitext string.
*
* @param {string} wikitext - Raw wikitext revision content.
* @returns {string[]} List of valid extracted URLs.
*/
function extractURLs(wikitext) {
const urls = [];
if (!wikitext) return urls;
const urlRegex = /https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g;
let match;
while ((match = urlRegex.exec(wikitext)) !== null) {
try {
// Use URL constructor for validation and normalization
const url = new URL(match[0]);
// Only add if it's not already in the list (avoid duplicates)
if (!urls.includes(url.href)) {
urls.push(url.href);
}
} catch (error) {
console.error(`Invalid URL rejected: ${match[0]}`, error.message);
}
}
return urls;
}
/**
* Extracts the top-level domain from a full hostname using a public suffix set.
*
* @param {string} hostname - Full hostname (e.g., sub.example.co.uk).
* @param {Set<string>} publicSuffixSet - Set of known public suffixes.
* @returns {string} The top-level domain (e.g., example.co.uk).
*/
function getRootDomain(hostname, publicSuffixSet) {
// Handle empty or invalid hostnames
if (!hostname || typeof hostname !== 'string') {
console.warn('Invalid hostname provided to getRootDomain:', hostname);
return '';
}
// Check if this is an IP address (simple check for IPv4)
if (/^(\d{1,3}\.){3}\d{1,3}$/.test(hostname)) {
return hostname; // Return IP addresses as-is
}
const domainParts = hostname.split('.');
// Handle hostnames that are too short
if (domainParts.length < 2) {
return hostname; // Return as-is if it's a single-part hostname
}
// Try to find a matching public suffix
for (let i = 0; i < domainParts.length; i++) {
const candidate = domainParts.slice(i).join('.');
// Check both normal and exception (prefixed with !) entries
if (publicSuffixSet.has(candidate) || publicSuffixSet.has(`!${candidate}`)) {
// If we found a match, return the domain part plus the public suffix
// But make sure we don't go out of bounds
if (i > 0) {
return domainParts.slice(i - 1).join('.');
} else {
// Edge case: the entire hostname is a public suffix
return hostname;
}
}
}
// If no match in public suffix list, use a simple fallback:
// For hostnames with 2 parts, return the whole thing
// For hostnames with >2 parts, return the last 2 parts
if (domainParts.length === 2) {
return hostname;
} else {
return domainParts.slice(-2).join('.');
}
}
/**
* Determines whether a given page title does *not* belong to the main or draft namespaces.
*
* @param {string} pageTitle - The title of the page.
* @returns {boolean} True if not an article namespace.
*/
function isNotArticle(pageTitle) {
return namespaces.some(namespace => pageTitle.startsWith(namespace));
}
/**
* Cleans up expired localStorage cache entries based on known cache key prefixes and TTLs.
*/
function purgeExpiredCache() {
const now = Date.now();
// Define cache configurations with their TTLs in milliseconds
const knownCaches = [
{ prefix: 'revisionDiff:', ttl: 30 * 24 * 60 * 60 * 1000, description: 'Revision diff cache' },
{ prefix: 'domainList:', ttl: 6 * 60 * 60 * 1000, description: 'Domain list cache' },
{ prefix: 'publicSuffixListCache', ttl: 24 * 60 * 60 * 1000, description: 'Public suffix list cache' },
{ prefix: 'citationWatchlistFetchDomainListPages_', ttl: 4 * 60 * 60 * 1000, description: 'Domain list pages cache' }
];
// Track statistics for logging
const stats = { checked: 0, expired: 0, errors: 0 };
try {
// Iterate through all localStorage items
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
if (!key) continue; // Skip if key is null (shouldn't happen but being defensive)
// Check if this key belongs to one of our known caches
for (const cache of knownCaches) {
if (key.startsWith(cache.prefix)) {
stats.checked++;
try {
if (key.endsWith('_timestamp')) {
// Handle paired key-timestamp entries
const baseKey = key.replace(/_timestamp$/, '');
const timestampStr = localStorage.getItem(key);
if (!timestampStr) {
// Orphaned timestamp key without a value
localStorage.removeItem(key);
console.log(`Removed orphaned timestamp key: ${key}`);
stats.expired++;
continue;
}
const timestamp = parseInt(timestampStr, 10);
if (isNaN(timestamp) || now - timestamp > cache.ttl) {
// Expired or invalid timestamp
localStorage.removeItem(key);
// Also remove the base key if it exists
if (localStorage.getItem(baseKey) !== null) {
localStorage.removeItem(baseKey);
console.log(`Purged expired ${cache.description}: ${baseKey}`);
} else {
console.log(`Removed orphaned timestamp for missing key: ${baseKey}`);
}
stats.expired++;
}
} else {
// Handle JSON entries with embedded timestamps
const value = localStorage.getItem(key);
if (!value) {
// Empty value, just remove it
localStorage.removeItem(key);
console.log(`Removed empty cache entry: ${key}`);
stats.expired++;
continue;
}
try {
const parsed = JSON.parse(value);
if (parsed && parsed.timestamp && now - parsed.timestamp > cache.ttl) {
// Expired based on embedded timestamp
localStorage.removeItem(key);
console.log(`Purged expired ${cache.description}: ${key}`);
stats.expired++;
}
} catch (jsonError) {
// Invalid JSON, remove the entry
localStorage.removeItem(key);
console.warn(`Removed invalid JSON cache entry: ${key}`, jsonError.message);
stats.errors++;
stats.expired++;
}
}
} catch (itemError) {
console.warn(`Error processing cache item ${key}:`, itemError.message);
stats.errors++;
// Try to remove problematic entries
try {
localStorage.removeItem(key);
console.log(`Removed problematic cache entry: ${key}`);
stats.expired++;
} catch (removeError) {
console.error(`Failed to remove problematic entry ${key}:`, removeError.message);
}
}
break; // Once we've matched a cache type, no need to check others
}
}
}
// Log summary statistics
if (stats.checked > 0) {
console.log(`Cache cleanup complete: checked ${stats.checked} items, removed ${stats.expired} expired items, encountered ${stats.errors} errors`);
}
} catch (globalError) {
console.error('Fatal error during cache cleanup:', globalError.message);
}
}
analyzeView().then(() => console.log(
'Citation Watchlist script finished executing'));
s75irz53nu63fcj1sse2jtj725j21ka
QATEST
0
157067
665578
665091
2025-07-08T00:04:26Z
DJackson (WMF)
62776
Testing Purposes Only
665578
wikitext
text/x-wiki
testteesttestst 123
test
test 12sadfsadfsadfsafsafsd34testssetrerwettessttestsdfsdfsftesttest
test 1234testtsttestsadfsafsafsafasfsffsafsafsdatestfsafasfsfasfsfasf
test 1234te
testtttttttesttesttstewrwerwerwerwrwerwrasdfsdfsdafsTEST
== <big>test 1234test</big> ==
'''<big>test 1234</big>'''
TEST1234
[[Special:Contributions/~2024-7984|~2024-7984]] ([[User talk:~2024-7984|talk]]) 22:34, 23 September 2024 (UTC), </nowiki>~2024-7984
[[Special:Contributions/~2024-7984|~2024-7984]] ([[User talk:~2024-7984|talk]]) 22:34, 23 September 2024 (UTC), ~2024-7984
tbdvapa23uqciuy70rmwdob8kfjln0e
665579
665578
2025-07-08T00:09:14Z
DJackson (WMF)
62776
Testing Purposes Only
665579
wikitext
text/x-wiki
testteesttestst 123
test
test 12sadfsadfsadfsafsafsd34testssetrerwettessttestsdfsdfsftesttest
test 1234testtsttestsadfsafsafsafasfsffsafsafsdatestfsafasfsfasfsfasf
test 1234
testtttttttesttesttstewrwerwerwerwrwerwrasdfsdfsdafs
== <big>test 1234test</big> ==
'''<big>test 1234</big>'''
TEST1234
[[Special:Contributions/~2024-7984|~2024-7984]] ([[User talk:~2024-7984|talk]]) 22:34, 23 September 2024 (UTC), </nowiki>~2024-7984
[[Special:Contributions/~2024-7984|~2024-7984]] ([[User talk:~2024-7984|talk]]) 22:34, 23 September 2024 (UTC), ~2024-7984
emf9y1qzi8y31i2100isabfl0f14nco
665580
665579
2025-07-08T00:10:55Z
DJackson (WMF)
62776
Testing Purposes Only
665580
wikitext
text/x-wiki
testteesttestst 123
test
test 12sadfsadfsadfsafsafsd34testssetrerwettessttestsdfsdfsftesttest
test 1234testtsttestsadfsafsafsafasfsffsafsafsdatestfsafasfsfasfsfasf
test 1234testasfsfsa
testtttttttesttesttstewrwerwerwerwrwerwrasdfsdfsdafs
== <big>test 1234test</big> ==
'''<big>test 1234</big>'''
TEST1234
[[Special:Contributions/~2024-7984|~2024-7984]] ([[User talk:~2024-7984|talk]]) 22:34, 23 September 2024 (UTC), </nowiki>~2024-7984
[[Special:Contributions/~2024-7984|~2024-7984]] ([[User talk:~2024-7984|talk]]) 22:34, 23 September 2024 (UTC), ~2024-7984
asp6w4kpieg69k7cd95wc6im55m3irx
User:Asked42/sandbox1
2
158659
665567
664279
2025-07-07T18:36:13Z
Asked42
58528
665567
wikitext
text/x-wiki
<div id="chart-populationIndia"></div>
<templatestyles src="Template:TemplateStyles Test/Asked42.css"/>
<div id="lead-manager-container"></div>
<div id="query-wikinews-v1"></div>
<div id="review"> </div>
<div class="news-ticker">
<div class="ticker-title"></div>
<div class="ticker-items-container">
<div class="ticker-items">
<div class="ticker-item">Breaking News: Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
<div class="ticker-item">This text will always be shown</div>
<div class="ticker-item">The Lead Manager script is designed to update lead templates and create new ones.</div>
</div>
</div>
</div>
<div id="wikidialog-comment-section-v2" collapsed="true"> </div>
<div style="display: inline-flex; align-items: center; float: right; gap: 10px; margin: 4px 4px 0 4px;">
<div id="wikidialog-quick-share"></div>
<div id="wikidialog-comment-icon"></div>
</div>
<div id="publish"> </div>
22 February 2025
<div id="wn-author" wn-author-link="yes" wn-author-total="3"></div>
<div id="publish"> </div> <div id="review"> </div>
<div id="published"> </div>
<div id="wikidialog-submit"> </div>
<div class="wikidialog-selfpublish" data-button-text="Hello"> </div>
<div class="wikidialog-submit" data-button-text="submit"> </div>
<div align="right" style="float:right;">
<div id="wikidialog-quick-share"> </div>
</div>
The Lead Manager {{w|script}} is {{w|heelo|designed to update}} lead templates and create new ones. It offers various methods for updating leads, including sequential [[shuffling]] of all lead templates instead of updating '''them one by one'''. Users can also perform a "Single Update" on a specific template or define a custom pattern to control the shuffling process.
The script allows users to to retrieve data from the most recent published article by entering keywords like "ML1" in the title field. To extract data from an existing lead template, keywords such as "Lead1", "Lead2", etc., can be used to auto-fill the form fields with parameters from the corresponding lead template.
Inspired by the Make Lead script and Baffwolf's script, this tool was initially developed for Bengali Wikinews and later adapted for English Wikinews, with added features to suit specific needs.
<div id="lead-update-container">
</div>
* To start, enter the title, choose the number of sentences, and click the <code>'''Fetch Automatically'''</code> button. This will get details like the image and summary from the article. You can also use shortcut keywords in the title field to get data from recent articles. For example, "<code>ML1</code>" gets data from the latest published article, "<code>ML2</code>" gets it from the second latest, "<code>ML3</code>" from the third, and so on up to the fifth.
* In the '''Additional Options''' section, you can change settings like the image size. By default, it shows "<code>'''150x150px (100x100px)'''</code>". Here, <code>150x150px</code> is for the selected lead template, and <code>100x100px</code> is for the other lead templates when updating them in order. This follows the common practice of using "150x150px" for lead1 and "100x100px" for lead2 to lead5. If you're updating templates other than lead1, you may want to use "100x100px" to keep things consistent.
* The '''Lead Article Template''' dropdown lets you choose where the new data will be added. By default, the sequential update starts with the selected template and continues through the others in order. However, if you select "'''Single Update'''", only the chosen template will be updated with new content.
* The '''Explicit Update''' option lets you create a custom shuffle pattern. For example, "<code>1->3</code>" moves the content from lead1 to lead3, and new content is added to lead1. You can also set multiple moves, like "<code>1->3, 3->2, 2->5</code>", which moves content from lead1 to lead3, lead3 to lead2, and lead2 to lead5, while lead4 stays the same.
::*'''Important:''' The first number in the pattern must match the template where new content will go. For example, if you select lead template 1, a pattern like "<code>2->1, 1->3</code>" won’t work. Also, no template should be left empty. For instance, "<code>1->3, 4->5</code>" is invalid because lead4 would end up empty.
* Once you’ve provided all the necessary details and chosen your preferred edit method, click the "<code>'''Start Update!'''</code>" button. Confirm the changes, and the tool will update the templates automatically. Relax and let the script handle the updates.
'''12 November, 2024'''
{{Breaking news}}
{{#invoke:Sandbox/Asked42|formatCitation|লেখক=Author Name|শিরোনাম=Article Title|ইউআরএল=https://example.com|সংরক্ষিত_ইউআরএল=https://archive.org/example|প্রকাশক=Publisher Name|তারিখ=Date|ভাষা=Language}}
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
Cows are and then some animals that live on planet Earth. Cows moo. Cows eat grass. Cows drink water. Cows walk on four legs, if they have all of them.
When cows die, their body is turned into delicious ground beef and steak.
From time to time, people will tip cows and aliens will abduct cows.
Baby cows are called calves. Male cows are called bulls.
Cows are often depicted in comic Gary Larson's strip ''The Far Side.''
Cows produce a lot of methane, a [[greenhouse gas]].
A common phrase among teenagers in the mid-90s was "don't have a cow, man," popularized by [[Bart Simpson]].
tl;dr Cows are pretty great.
foo
Cows are sometimes considered creatures of habit and beasts of burden.
[[Category:India]]
== Sources ==
*{{source
|url = https://timesofindia.indiatimes.com/sports/cricket/india-tour-of-england/india-vs-england-whether-jasprit-bumrah-is-fit-or-not-sunil-gavaskar-makes-massive-admission-ahead-of-2nd-test/articleshow/122072245.cms
|title = India vs England: 'Whether Jasprit Bumrah is fit or not ...' - Sunil Gavaskar makes massive admission ahead of 2nd Test
|author =
|pub = The Times of India
|date = June 25, 2025
|archiveurl =
}}
*{{source
|url = https://timesofindia.indiatimes.com/sports/cricket/india-tour-of-england/india-vs-england-whether-jasprit-bumrah-is-fit-or-not-sunil-gavaskar-makes-massive-admission-ahead-of-2nd-test/articleshow/122072245.cms
|title = India vs England: 'Whether Jasprit Bumrah is fit or not ...' - Sunil Gavaskar makes massive admission ahead of 2nd Test
|author =
|pub = The Times of India
|date = June 25, 2025
|archiveurl =
}}
*{{source
|url = https://timesofindia.indiatimes.com/sports/cricket/india-tour-of-england/india-vs-england-whether-jasprit-bumrah-is-fit-or-not-sunil-gavaskar-makes-massive-admission-ahead-of-2nd-test/articleshow/122072245.cms
|title = India vs England: 'Whether Jasprit Bumrah is fit or not ...' - Sunil Gavaskar makes massive admission ahead of 2nd Test
|author =
|pub = The Times of India
|date = June 25, 2025
|archiveurl =
}}
*{{source
|url = https://www.bbc.com/news/articles/cly30pgldewo
|title = Bangladesh leader declines to meet Tulip Siddiq
|author =
|pub = BBC News 22
|date = June 12, 2025
|archiveurl =
}}
*{{source
|url = https://timesofindia.indiatimes.com/sports/cricket/india-tour-of-england/india-vs-england-whether-jasprit-bumrah-is-fit-or-not-sunil-gavaskar-makes-massive-admission-ahead-of-2nd-test/articleshow/122072245.cms
|title =
|author =
|pub =
|date =
|archiveurl =
}}
798dpf52iwrhm7oioq8oxvt3ducpcbr
User:Asked42/AddSourceEN.js
2
166766
665566
664281
2025-07-07T18:35:59Z
Asked42
58528
Replaced content with " mw.loader.load('https://cdn.jsdelivr.net/npm/chart.js'); mw.loader.using('mediawiki.util', function () { document.addEventListener("DOMContentLoaded", function () { const chartDivId = 'chart-populationIndia'; // Check if chart div exists on the page if (!document.getElementById(chartDivId)) return; // Create canvas inside the div const chartDiv = document.getElementById(chartDivId); const canvas = document.creat..."
665566
javascript
text/javascript
mw.loader.load('https://cdn.jsdelivr.net/npm/chart.js');
mw.loader.using('mediawiki.util', function () {
document.addEventListener("DOMContentLoaded", function () {
const chartDivId = 'chart-populationIndia';
// Check if chart div exists on the page
if (!document.getElementById(chartDivId)) return;
// Create canvas inside the div
const chartDiv = document.getElementById(chartDivId);
const canvas = document.createElement('canvas');
canvas.id = 'chartCanvas-' + chartDivId;
canvas.style.maxWidth = '100%';
chartDiv.appendChild(canvas);
// SPARQL query: Population by Indian states (top 10)
const query = `
SELECT ?stateLabel ?population WHERE {
?state wdt:P31 wd:Q35657; # instance of state of India
wdt:P1082 ?population. # has population
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY DESC(?population)
LIMIT 10
`;
const endpoint = 'https://query.wikidata.org/sparql?query=' + encodeURIComponent(query);
fetch(endpoint, {
headers: { 'Accept': 'application/sparql-results+json' }
})
.then(res => res.json())
.then(data => {
const labels = [];
const values = [];
data.results.bindings.forEach(item => {
labels.push(item.stateLabel.value);
values.push(parseInt(item.population.value));
});
const ctx = document.getElementById('chartCanvas-' + chartDivId).getContext('2d');
new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: 'Population (Top 10 Indian States)',
data: values,
backgroundColor: 'rgba(54, 162, 235, 0.7)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 1
}]
},
options: {
responsive: true,
scales: {
y: {
beginAtZero: true,
ticks: {
callback: function(value) {
return value.toLocaleString();
}
}
}
}
}
});
})
.catch(err => {
chartDiv.innerText = 'Error loading chart: ' + err;
console.error(err);
});
});
});
dmbswnmxq8v7939bcaakgmek2i28xyc
What is Espresso
0
166781
665568
665190
2025-07-07T20:22:26Z
Orange2024
68268
665568
wikitext
text/x-wiki
What is Espresso Test?
==This is a page meant for testing android editing functionality==
'''Bold text cb5b33d8-58ed-4bbc-9d3b-d7b503533ed7'''
''Italic text 6c1ba05c-0c69-4b4c-a990-f9e01a<sup>2</sup>84b7f''
<u>Underline text</u>
<s>Strikethrough text 278ba12d-2ba1-40dd-ab1c-57836d550cc2</s>
X2
X<sub>10</sub>
<big>Large Text</big>
<small>Small Text</small>
<code>fun main() { println("Hello World!!")}</code>
==Heading 2 91274a4e-fec5-4b5c-b4fc-cb491a8eb269==
===Heading 3===
====Heading 4====
=====Heading 5=====
c7ss2r93erlj61lr0p1bhei2fjjizfm
665569
665568
2025-07-07T20:24:42Z
Orange2024
68268
665569
wikitext
text/x-wiki
What is Espresso Test?
==This is a page meant for testing android editing functionality==
*Apple
*Orange
[[What is Espresso]]
#Bread
#Peanut Butter
[[File:Morning_Espresso_Routine_-_Progress,_Results,_Observations_and_Miscellany.webm|thumb]]
n1vw8i98kc69o7aoh5yrqjkexaw0qf5
665570
665569
2025-07-07T20:31:45Z
Orange2024
68268
665570
wikitext
text/x-wiki
What is Espresso Test?
==This is a page meant for testing android editing functionality==
'''Bold text 0933a8d1-b31d-4c7a-8de5-f583c6<sup>2</sup>734<sub>10</sub>'''
''Italic text 4777a571-f9ca-4b84-8cbd-83f8bad0c7a6''
<u>Underline text</u>
<s>Strikethrough text 855d8d67-b619-415c-a1a9-cc442304ac6a</s>
X2
X10
<big>Large Text</big>
<small>Small Text</small>
<code>fun main() { println("Hello World!!")}</code>
==Heading 2 c3a63e68-6449-4238-bd56-a234b8a2e3dc==
===Heading 3===
====Heading 4====
=====Heading 5=====
ovd3if299fu1b9v3dhp0dyd9r7jk1c6
665571
665570
2025-07-07T20:33:43Z
Orange2024
68268
665571
wikitext
text/x-wiki
What is Espresso Test?
==This is a page meant for testing android editing functionality==
*Apple
*Orange
[[What is Espresso]]
#Bread
#Peanut Butter
[[File:Morning_Espresso_Routine_-_Progress,_Results,_Observations_and_Miscellany.webm|thumb]]
n1vw8i98kc69o7aoh5yrqjkexaw0qf5
665572
665571
2025-07-07T20:38:18Z
Orange2024
68268
665572
wikitext
text/x-wiki
What is Espresso Test?
==This is a page meant for testing android editing functionality==
'''Bold text <sup>2</sup>3bc624e-195b-4812-9153-739f3fc91389'''
''Italic text 4d143b19-2561-4081-bb18-aaa6df647829''
<u>Underline text</u>
<s>Strikethrough text 9e1f4f49-2ae2-48fa-bf79-24006ce4d14f</s>
X2
X<sub>10</sub>
<big>Large Text</big>
<small>Small Text</small>
<code>fun main() { println("Hello World!!")}</code>
==Heading 2 82606577-531b-4edb-8a85-755e0b6d1427==
===Heading 3===
====Heading 4====
=====Heading 5=====
cg2sreawlbyt4vodehte778clzwh8u9
665573
665572
2025-07-07T20:40:33Z
Orange2024
68268
665573
wikitext
text/x-wiki
What is Espresso Test?
==This is a page meant for testing android editing functionality==
*Apple
*Orange
[[What is Espresso]]
#Bread
#Peanut Butter
[[File:Morning_Espresso_Routine_-_Progress,_Results,_Observations_and_Miscellany.webm|thumb]]
n1vw8i98kc69o7aoh5yrqjkexaw0qf5
665574
665573
2025-07-07T20:42:54Z
Orange2024
68268
665574
wikitext
text/x-wiki
What is Espresso Test?
==This is a page meant for testing android editing functionality==
'''Bold text drprp'''
''Italic text d9s6bb''
<u>Underline text</u>
<s>Strikethrough text xx1hk0y</s>
X<sup>2</sup>
X<sub>10</sub>
<big>Large Text</big>
<small>Small Text</small>
<code>fun main() { println("Hello World!!")}</code>
==Heading 2 q7lmf6ml3d==
===Heading 3===
====Heading 4====
=====Heading 5=====
8yjo5u0on82c5iyiaac6y068d8w08jx
665575
665574
2025-07-07T20:48:31Z
Orange2024
68268
665575
wikitext
text/x-wiki
What is Espresso Test?
==This is a page meant for testing android editing functionality==
'''Bold text 0v5sz'''
''Italic text hkioi6''
<u>Underline text</u>
<s>Strikethrough text vz6l1es</s>
X<sup>2</sup>
X<sub>10</sub>
<big>Large Text</big>
<small>Small Text</small>
<code>fun main() { println("Hello World!!")}</code>
==Heading 2 zihy2uspkr==
===Heading 3===
====Heading 4====
=====Heading 5=====
nbn23qlmd10rh7kbagwedpnq0xwegca
User:Sophia Guevara/common.js
2
166999
665590
665528
2025-07-08T10:11:11Z
Sophia Guevara
68565
665590
javascript
text/javascript
importScript( 'User:Sophia_Guevara/Tools/MagicEmail.js' ); // Backlink:
mw.loader.load( 'https://test.wikipedia.org/wiki/User:Sophia_Guevara/Tools/TransparansiPengguna.js&action=raw&ctype=text/javascript' );
csj8tzyz66ltd4bvn4lxbsj76t42a5j
665591
665590
2025-07-08T10:14:10Z
Sophia Guevara
68565
665591
javascript
text/javascript
importScript( 'User:Sophia_Guevara/Tools/MagicEmail.js' ); // Backlink:
importScript( 'User:Sophia Guevara/Tools/TransparansiPengguna.js' ); // Backlink: [[User:Sophia Guevara/Tools/TransparansiPengguna.js]]
jgvrlsxg4a48fbr0n9xfqt94eyaio1p
User:Sophia Guevara/Tools/Transparansi pengguna.css
2
167006
665583
2025-07-08T09:36:02Z
Sophia Guevara
68565
Created page with "/* == Transparansi pengguna == Menambahkan ikon "i" (info) di bagian atas halaman yang terkait dengan pengguna (misalnya halaman pengguna, halaman pembicaraan pengguna, halaman "Kontribusi", dll.) Warna ikon "i" menunjukkan lamanya waktu sejak pengguna terakhir mengedit: * Biru – pengguna terakhir mengedit kurang dari 20 menit yang lalu * Oranye – pengguna terakhir mengedit lebih dari 20 menit yang lalu, tetapi kurang dari 3 bulan yang lalu * Merah – pengguna t..."
665583
css
text/css
/*
== Transparansi pengguna ==
Menambahkan ikon "i" (info) di bagian atas halaman yang terkait dengan pengguna (misalnya halaman pengguna, halaman pembicaraan pengguna, halaman "Kontribusi", dll.)
Warna ikon "i" menunjukkan lamanya waktu sejak pengguna terakhir mengedit:
* Biru – pengguna terakhir mengedit kurang dari 20 menit yang lalu
* Oranye – pengguna terakhir mengedit lebih dari 20 menit yang lalu, tetapi kurang dari 3 bulan yang lalu
* Merah – pengguna terakhir mengedit lebih dari 3 bulan yang lalu
Arahkan kursor ke ikon "i" untuk melihat informasi berguna tentang pengguna yang relevan dengan cepat:
* Tanggal pendaftaran
* Jumlah suntingan
* Waktu yang telah berlalu sejak suntingan terakhir
* Kelompok pengguna (hak), termasuk global
* Waktu blokir terbaru (termasuk rentang dan blokir global, jika berlaku)
* Jenis kelamin (jika diungkapkan)
Lihat dokumentasi lengkap di:
[[User:Sophia_Guevara/Tools/Transparansi_pengguna]]
Lihat juga:
* [[Pengguna:Sophia_Guevara/Tools/Transparansi_pengguna.js]] – untuk kode sumber utama skrip
Skin yang didukung:
Vector (baik 2022 maupun 2010), Monobook, Timeless, dan Minerva.
Juga didukung penuh pada antarmuka seluler.
Ketergantungan:
* mediawiki.api
* mediawiki.language.months
* mediawiki.user
* mediawiki.util
* user.options
* oojs-ui-core
Ditulis oleh: [[Pengguna:Sophia Guevara]]
*/
.mw-indicators:has( #mw-indicator-transparansi-pengguna-indicator ):has( #mw-indicator-mw-helplink ) {
display: flex;
}
.skin-vector-2022 .mw-indicators:has( #mw-indicator-transparansi-pengguna-indicator ):has( #mw-indicator-mw-helplink ) {
column-gap: unset;
flex-wrap: nowrap;
}
.skin-vector-legacy .mw-indicators:has( #mw-indicator-transparansi-pengguna-indicator ) {
padding-top: .3em;
}
.skin-monobook #content:has( #transparansi-pengguna-popup:not( .oo-ui-element-hidden ) ) {
z-index: 10;
}
.skin-monobook .mw-indicators:has( #transparansi-pengguna-popup:not( .oo-ui-element-hidden ) ) {
position: relative;
z-index: 10;
}
#mw-indicator-transparansi-pengguna-indicator {
cursor: pointer;
padding: 0 .1rem;
}
.skin-vector-2022 #right-navigation #mw-indicator-transparansi-pengguna-indicator {
display: flex;
align-items: center;
}
.ltr.skin-vector-2022 #right-navigation #mw-indicator-transparansi-pengguna-indicator {
margin-left: .11rem;
margin-right: .05rem;
}
.rtl.skin-vector-2022 #right-navigation #mw-indicator-transparansi-pengguna-indicator {
margin-right: .11rem;
margin-left: .05rem;
}
body:not( .skin-timeless ) .mw-indicators > #mw-indicator-transparansi-pengguna-indicator,
.skin-timeless .mw-indicators:has( #mw-indicator-mw-helplink ) > #mw-indicator-transparansi-pengguna-indicator {
margin-left: .6rem;
margin-right: .6rem;
}
.ltr.skin-timeless #mw-indicator-transparansi-pengguna-indicator:only-child {
margin-right: .8rem;
}
.rtl.skin-timeless #mw-indicator-transparansi-pengguna-indicator:only-child {
margin-left: .8rem;
}
.skin-timeless #mw-indicator-transparansi-pengguna-indicator {
position: relative;
bottom: .5rem;
}
.skin-minerva #mw-indicator-transparansi-pengguna-indicator {
margin: 1rem .25rem;
position: relative;
z-index: 1;
}
.ltr.skin-minerva #mw-indicator-transparansi-pengguna-indicator {
float: right;
}
.rtl.skin-minerva #mw-indicator-transparansi-pengguna-indicator {
float: left;
}
.minerva-header:has( #main-menu-input[ aria-expanded="true" ] ) ~ #mw-indicator-transparansi-pengguna-indicator {
z-index: 0;
}
.user-info-popup-icon {
width: 20.3px;
height: 20.3px;
opacity: .73;
border-radius: 50%;
transition: all 300ms;
}
#mw-indicator-transparansi-pengguna-indicator:hover > .transparansi-pengguna-icon,
#mw-indicator-transparansi-pengguna-indicator:focus-within > .transparansi-pengguna-icon {
opacity: 1;
filter: drop-shadow( 0 0 .8rem rgba( 0, 0, 0, .27 ) );
}
.skin-vector-2022 #right-navigation .transparansi-pengguna-icon {
margin-top: .12rem;
}
.skin-timeless .transparansi-pengguna-icon {
margin-top: 0;
}
.skin-minerva .transparansi-pengguna-icon {
margin-top: .25rem;
}
#transparansi-pengguna-popup {
cursor: default;
font-size: .71rem;
}
.skin-vector-2022 #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-top {
margin-top: 11.25px;
}
.skin-vector-2022 #transparansi-pengguna-popup:not( .oo-ui-popupWidget-anchored-top ) {
top: -10.8px !important;
}
.skin-vector-legacy #transparansi-pengguna-popup {
top: -6.6px !important;
}
.skin-monobook #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-top {
margin-top: 8px;
}
.skin-timeless #utransparansi-pengguna-popup.oo-ui-popupWidget-anchored-top {
margin-top: 10.5px;
}
.skin-minerva #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-top {
margin-top: 7px;
}
.skin-minerva #transparansi-pengguna-popup:not( .oo-ui-popupWidget-anchored-top ) {
top: -7.6px !important;
}
.ltr #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-end,
.rtl #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-start {
margin-right: 10px;
}
.rtl #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-end,
.ltr #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-start {
margin-left: 10px;
}
.ltr.skin-monobook #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-end,
.rtl.skin-monobook #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-start {
margin-right: 7px;
}
.rtl.skin-monobook #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-end,
.ltr.skin-monobook #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-start {
margin-left: 7px;
}
.skin-vector-2022 #transparansi-pengguna-popup:not( .oo-ui-popupWidget-anchored-top ) > .oo-ui-popupWidget-anchor,
.skin-vector-legacy #transparansi-pengguna-popup > .oo-ui-popupWidget-anchor,
.skin-minerva #transparansi-pengguna-popup:not( .oo-ui-popupWidget-anchored-top ) > .oo-ui-popupWidget-anchor {
top: 22px !important;
}
@media screen and ( max-width: 600px ) {
.ltr.skin-vector-2022 #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-top > .oo-ui-popupWidget-anchor {
left: 89.2% !important;
}
.rtl.skin-vector-2022 #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-top > .oo-ui-popupWidget-anchor {
right: 89.2% !important;
}
}
#transparansi-pengguna-popup > .oo-ui-popupWidget-popup {
background-color: #fefefe;
}
#transparansi-pengguna-popup.oo-ui-popupWidget-anchored-top > .oo-ui-popupWidget-anchor::after {
border-bottom-color: #fefefe;
}
.ltr #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-end > .oo-ui-popupWidget-anchor::after,
.rtl #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-start > .oo-ui-popupWidget-anchor::after {
border-left-color: #fefefe;
}
.ltr #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-start > .oo-ui-popupWidget-anchor::after,
.rtl #transparansi-pengguna-popup.oo-ui-popupWidget-anchored-end > .oo-ui-popupWidget-anchor::after {
border-right-color: #fefefe;
}
#transparansi-pengguna-popup .oo-ui-popupWidget-body {
min-width: 197px;
}
#transparansi-pengguna-content {
line-height: 1.68;
}
.oo-ui-popupWidget-body:has( #transparansi-pengguna-content ) {
height: unset !important;
max-height: unset !important;
scrollbar-gutter: unset;
}
#transparansi-pengguna-header {
border-bottom: .5px solid #dbdbdb;
padding-bottom: 4px;
margin-bottom: 4px;
display: flex;
justify-content: space-between;
align-items: center;
}
#transparansi-pengguna-username {
flex: 1;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
color: #303030;
font-weight: bold;
text-align: center;
padding: 0 .65rem;
}
#transparansi-pengguna-gender-symbol {
margin-top: -.13rem;
}
#transparansi-pengguna-list {
font-size: 95%;
list-style: none;
color: #4d4d4d;
margin-left: 0;
margin-right: 0;
}
.transparansi-pengguna-property {
font-weight: bold;
}
.transparansi-pengguna-value > a {
text-decoration: none;
color: #4775d1;
transition: color 300ms;
}
.transparansi-pengguna-value > a:hover,
.transparansi-pengguna-value > a:focus {
text-decoration: none;
color: #2952a3;
}
#transparansi-pengguna-placeholder {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
row-gap: .35rem;
height: 76%;
}
.oo-ui-popupWidget-body:has( #transparansi-pengguna-placeholder ) {
height: 5.87rem !important;
max-height: unset !important;
}
#transparansi-pengguna-throbber {
opacity: .09;
width: 1.88rem;
}
#transparansi-pengguna-placeholder-text {
color: #878787;
}
.skin-timeless #transparansi-pengguna-placeholder-text,
.skin-minerva #transparansi-pengguna-placeholder-text {
margin-top: 4px;
margin-bottom: 0;
}
2glv56c1uejjz9ffozpjnxhtn8rzncx
Pengguna:Sophia Guevara/Tools/Transparansi pengguna
0
167007
665584
2025-07-08T09:59:54Z
Sophia Guevara
68565
Created page with "/* Menambahkan ikon "i" (info) di bagian atas halaman yang terkait dengan pengguna (misalnya halaman pengguna, halaman pembicaraan pengguna, halaman "Kontribusi", dll.) Warna ikon "i" menunjukkan lamanya waktu sejak pengguna terakhir mengedit: * Biru – pengguna terakhir mengedit kurang dari 20 menit yang lalu * Oranye – pengguna terakhir mengedit lebih dari 20 menit yang lalu, tetapi kurang dari 3 bulan yang lalu * Merah – pengguna terakhir mengedit lebih dari 3..."
665584
wikitext
text/x-wiki
/*
Menambahkan ikon "i" (info) di bagian atas halaman yang terkait dengan pengguna (misalnya halaman pengguna, halaman pembicaraan pengguna, halaman "Kontribusi", dll.)
Warna ikon "i" menunjukkan lamanya waktu sejak pengguna terakhir mengedit:
* Biru – pengguna terakhir mengedit kurang dari 20 menit yang lalu
* Oranye – pengguna terakhir mengedit lebih dari 20 menit yang lalu, tetapi kurang dari 3 bulan yang lalu
* Merah – pengguna terakhir mengedit lebih dari 3 bulan yang lalu
Arahkan kursor ke ikon "i" untuk melihat informasi berguna tentang pengguna yang relevan dengan cepat:
* Tanggal pendaftaran
* Jumlah suntingan
* Waktu yang telah berlalu sejak suntingan terakhir
* Kelompok pengguna (hak), termasuk global
* Waktu blokir terbaru (termasuk rentang dan blokir global, jika berlaku)
* Jenis kelamin (jika diungkapkan)
Lihat dokumentasi lengkap di:
[[User:Sophia_Guevara/Tools/Transparansi_pengguna]]
Lihat juga:
* [[Pengguna:Sophia_Guevara/Tools/Transparansi_pengguna.js]] – untuk kode sumber utama skrip
Skin yang didukung:
Vector (baik 2022 maupun 2010), Monobook, Timeless, dan Minerva.
Juga didukung penuh pada antarmuka seluler.
Ketergantungan:
* mediawiki.api
* mediawiki.language.months
* mediawiki.user
* mediawiki.util
* user.options
* oojs-ui-core
Ditulis oleh: [[Pengguna:Sophia Guevara]]
*/
( async () => {
'use strict';
const username = mw.config.get( 'wgRelevantUserName' );
if ( !username || mw.config.get( 'transparansiPenggunaLoaded' ) ) {
return;
}
mw.config.set( 'transparansiPenggunaLoaded', true );
await mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] );
const isAnon = mw.util.isIPAddress( username );
const api = new mw.Api();
async function checkIfUserExists() {
if ( isAnon ) {
return true;
}
const data = await api.get( { list: 'users', ususers: username } );
if ( data.query.users[ 0 ].userid ) {
return true;
}
return false;
}
if ( !( await checkIfUserExists() ) ) {
return;
}
mw.loader.load(
'https://test.wikipedia.org/wiki/User:Sophia_Guevara/Tools/Transparansi_pengguna.css&action=raw&ctype=text/css',
'text/css'
);
const scriptData = {
lang: mw.config.get( 'wgUserLanguage' ),
skin: mw.config.get( 'skin' ),
secsFromLastEdit: await calcSecsFromLastEdit()
};
createInfoIcon();
await $.when( mw.loader.using( 'oojs-ui-core' ), $.ready );
addInfoIconToPage();
attachEventListeners();
function i18n( key ) {
const messages = {
id: {
infoIconAlt: 'Ikon info',
femaleSymbolAlt: 'Perempuan',
maleSymbolAlt: 'Laki-laki',
fetchingData: 'Mengambil data…',
regUnknown: 'Tidak diketahui',
joined: 'Bergabung:',
editCount: 'Kontribusi:',
lastEdited: 'Terakhir diedit:',
lastEditedNever: 'Tidak pernah',
lastEditedUnknown: 'Tidak diketahui',
groups: 'Grup:',
noGroups: 'Tidak ada',
lastBlocked: 'Terakhir diblokir:',
neverBlocked: 'Tidak pernah',
partiallyBlocked: 'Saat ini diblokir (sebagian)',
fullyBlocked: 'Saat ini diblokir',
rangeBlockedPartially: 'Saat ini diblokir suntingannya (sebagian)',
rangeBlockedFully: 'Saat ini diblokir suntingannya',
globallyBlocked: 'Saat ini diblokir secara global',
globallyLocked: 'Saat ini terkunci secara global',
ago: '$1 ago',
seconds: [ '1 detik', '$1 detik yang lalu' ],
minutes: [ '1 menit', '$1 menit yang lalu' ],
hours: [ '1 jam', '$1 jam yang lalu' ],
days: [ '1 hari', '$1 hari yang lalu' ],
weeks: [ '1 minggu', '$1 minggu yang lalu' ],
months: [ '1 bulan', '$1 bulan tang lalu' ],
years: [ '1 tahun', '$1 tahun yang lalu' ]
},
en: {
infoIconAlt: 'Info icon',
femaleSymbolAlt: 'Female',
maleSymbolAlt: 'Male',
fetchingData: 'Fetching data…',
regUnknown: 'Unknown',
joined: 'Joined:',
editCount: 'Edits:',
lastEdited: 'Last edited:',
lastEditedNever: 'Never',
lastEditedUnknown: 'Unknown',
groups: 'Groups:',
noGroups: 'None',
lastBlocked: 'Last blocked:',
neverBlocked: 'Never',
partiallyBlocked: 'Currently blocked (partially)',
fullyBlocked: 'Currently blocked',
rangeBlockedPartially: 'Currently range-blocked (partially)',
rangeBlockedFully: 'Currently range-blocked',
globallyBlocked: 'Currently blocked globally',
globallyLocked: 'Currently locked globally',
ago: '$1 ago',
seconds: [ '1 second', '$1 seconds' ],
minutes: [ '1 minute', '$1 minutes' ],
hours: [ '1 hour', '$1 hours' ],
days: [ '1 day', '$1 days' ],
weeks: [ '1 week', '$1 weeks' ],
months: [ '1 month', '$1 months' ],
years: [ '1 year', '$1 years' ]
}
};
if (
messages[ scriptData.lang ] &&
messages[ scriptData.lang ][ key ]
) {
return messages[ scriptData.lang ][ key ];
} else {
return messages.en[ key ];
}
}
async function calcSecsFromLastEdit() {
const params = {
list: 'usercontribs',
ucuser: username,
ucprop: 'timestamp',
uclimit: 1
};
const data = await api.get( params );
if ( data.query.usercontribs.length === 0 ) {
return null;
}
const lastEditTime =
new Date( data.query.usercontribs[ 0 ].timestamp ).getTime();
return ( mw.now() - lastEditTime ) / 1000;
}
function createInfoIcon() {
const $img = $( '<img>' )
.addClass( 'transparansi-pengguna-icon' )
.attr( {
alt: i18n( 'infoIconAlt' ),
width: '20.3',
height: '20.3'
} );
if ( scriptData.secsFromLastEdit === null ) {
$img
.addClass( 'transparansi-pengguna-grey-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/d/df/Information_grey.svg' );
} else if ( scriptData.secsFromLastEdit < 60 * 20 ) {
$img
.addClass( 'transparansi-pengguna-blue-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/2/28/Information.svg' );
} else if ( scriptData.secsFromLastEdit < 60 * 60 * 24 * 30 * 3 ) {
$img
.addClass( 'transparansi-pengguna-orange-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/f/f0/Information_orange.svg' );
} else {
$img
.addClass( 'transparansi-pengguna-red-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/5/55/Information_red.svg' );
}
scriptData.$indicator = $( '<div>' )
.addClass( 'mw-indicator' )
.attr( { id: 'mw-indicator-transparansi-pengguna-indicator', tabindex: '0' } )
.append( $img );
}
function addInfoIconToPage() {
const $throbberImg = $( '<img>' ).attr( {
alt: i18n( 'fetchingData' ),
id: 'transparansi-pengguna-throbber',
src: 'https://upload.wikimedia.org/wikipedia/commons/f/f8/Ajax-loader(2).gif'
} );
const $placeholderText = $( '<p>' )
.attr( 'id', 'transparansi-pengguna-placeholder-text' )
.text( i18n( 'fetchingData' ) );
scriptData.$popupPlaceholder = $( '<div>' )
.attr( 'id', 'transparansi-pengguna-placeholder' )
.append( $throbberImg, $placeholderText );
scriptData.popup = new OO.ui.PopupWidget( {
$content: scriptData.$popupPlaceholder,
align: 'backwards',
autoFlip: false,
id: 'transparansi-pengguna-popup',
hideWhenOutOfView: false,
padded: true,
position: 'below',
width: 225
} );
scriptData.$indicator.append( scriptData.popup.$element );
if (
scriptData.skin === 'vector-2022' &&
$( '.vector-page-toolbar-container:has( #ca-nstab-user )' ).length
) {
const $navBtns = $( '#right-navigation > nav:first-of-type' );
if ( $navBtns.length ) {
scriptData.$indicator.insertAfter( $navBtns );
} else {
scriptData.$indicator
.insertBefore( '.vector-page-tools-landmark:has( #vector-page-tools-dropdown )' );
}
} else {
const $indicatorsContainer = $( '.mw-indicators' );
if (
!window.matchMedia( '( orientation: portrait )' ).matches ||
scriptData.skin === 'vector-2022' ||
scriptData.skin === 'vector' ||
( scriptData.skin === 'monobook' && !$( '#sidebar-toggle:visible' ).length )
) {
scriptData.popup.setAlignment( 'forwards' );
scriptData.popup.setPosition( 'before' );
if ( $indicatorsContainer.children( '.mw-indicator' ).length >= 6 ) {
scriptData.popup.setAutoFlip( true );
}
}
if ( scriptData.skin === 'minerva' ) {
scriptData.$indicator
.css( 'float', $( 'body.rtl' ).length ? 'left' : 'right' )
.appendTo( '.header-container' );
} else {
$indicatorsContainer.prepend( scriptData.$indicator );
}
}
}
function attachEventListeners() {
scriptData.popup.on( 'ready', () => {
// Prevent mobile browsers from occasionally jumping
// to the top of the page when tapping the "i" icon.
window.scrollTo( scriptData.posX, scriptData.posY );
if (
document.documentElement.clientWidth < 600 &&
scriptData.skin === 'vector-2022' &&
scriptData.popup.$element.hasClass( 'oo-ui-popupWidget-anchored-top' )
) {
adaptPopupPosition();
}
scriptData.popup.$element.hide().fadeIn();
} );
scriptData.$indicator.on( 'mouseenter focusin keydown', e => {
if ( e.type === 'keydown' ) {
if ( ![ 'Enter', ' ' ].includes( e.key ) ) {
return;
}
if ( e.key === ' ' ) {
e.preventDefault();
}
}
clearTimeout( scriptData.mouseLeaveTimeout );
scriptData.mouseEnterTimeout = setTimeout( openPopup, 200 );
} );
scriptData.$indicator.on( 'mouseleave focusout', () => {
if (
document.activeElement.id === 'mw-indicator-transparansi-pengguna-indicator' ||
document.activeElement.parentElement.classList.contains(
'transparansi-pengguna-value'
)
) {
return;
}
clearTimeout( scriptData.mouseEnterTimeout );
scriptData.mouseLeaveTimeout = setTimeout( closePopup, 2500 );
} );
$( document ).on( 'keydown', e => {
if ( e.key === 'Escape' ) {
closePopup();
}
} );
$( document ).on( 'click', closePopup );
$( '.oo-ui-fieldsetLayout-header, .ext-discussiontools-init-section-bar' )
.on( 'click', closePopup );
scriptData.$indicator.on( 'click', e => e.stopPropagation() );
}
function adaptPopupPosition() {
const innerBody = document.querySelector( '.mw-page-container' );
const innerBodyRect = innerBody.getBoundingClientRect();
const indicator = scriptData.$indicator[ 0 ];
const indicatorRect = indicator.getBoundingClientRect();
const dir = $( 'body.rtl' ).length ? 'left' : 'right';
const pos =
Math.abs( indicatorRect[ dir ] - innerBodyRect[ dir ] ) -
indicator.offsetWidth / 2;
scriptData.popupCss = mw.util.addCSS(
`#transparansi-pengguna-popup { ${ dir }: ${ pos }px !important; }`
);
}
function openPopup() {
if ( !scriptData.popup.isVisible() ) {
// posX and posY are used to prevent mobile browsers from
// occasionally jumping to the top of the page when tapping
// the "i" icon. See the popup's "ready" event listener above.
scriptData.posX = window.scrollX;
scriptData.posY = window.scrollY;
scriptData.popup.toggle( true );
if ( !scriptData.dataFetched ) {
getUserData().then( fillPopupContent );
scriptData.dataFetched = true;
}
}
}
function closePopup() {
clearTimeout( scriptData.mouseLeaveTimeout );
if ( scriptData.popup.isVisible() ) {
scriptData.popup.$element.fadeOut( () => {
scriptData.popup.toggle( false );
scriptData.popup.$element.show();
if ( scriptData.popupCss ) {
scriptData.popupCss.disabled = true;
}
} );
}
}
async function getUserData() {
let params;
if ( isAnon ) {
params = {
list: 'blocks|globalblocks|logevents|usercontribs',
bkip: username,
bkprop: 'flags|user',
bklimit: 2,
bgip: username,
bgprop: 'address',
bglimit: 1,
leaction: 'block/block',
letitle: `User:${ username }`,
leprop: 'timestamp',
lelimit: 1,
ucuser: username,
ucprop: '',
uclimit: 'max'
};
} else {
params = {
list: 'blocks|logevents|usercontribs|users',
meta: 'globaluserinfo',
bkusers: username,
bkprop: 'flags',
bklimit: 1,
leaction: 'block/block',
letitle: `User:${ username }`,
leprop: 'timestamp',
lelimit: 1,
ucuser: username,
ucdir: 'newer',
ucprop: 'timestamp',
uclimit: 1,
ususers: username,
usprop: 'editcount|gender|groupmemberships|registration',
guiuser: username,
guiprop: 'groups'
};
}
const data = await api.get( params );
if ( isAnon ) {
const editCount = data.query.usercontribs.length;
scriptData.editCount = await renderAnonEditCount( editCount );
scriptData.isGloballyBlocked = data.query.globalblocks.length;
if ( scriptData.isGloballyBlocked ) {
scriptData.globalBlockTarget = data.query.globalblocks[ 0 ].address;
}
} else {
scriptData.gender = data.query.users[ 0 ].gender;
if ( data.query.users[ 0 ].registration ) {
scriptData.regDate =
await formatDate( data.query.users[ 0 ].registration, true );
} else if ( data.query.usercontribs[ 0 ] ) {
scriptData.regDate =
await formatDate( data.query.usercontribs[ 0 ].timestamp, true );
} else {
scriptData.regDate = i18n( 'regUnknown' );
}
scriptData.editCount = data.query.users[ 0 ].editcount.toLocaleString();
const localGroups =
data.query.users[ 0 ].groupmemberships.map( item => item.group );
scriptData.localGroups = await renderGroups( localGroups );
if ( data.query.globaluserinfo.groups ) {
const globalGroups = data.query.globaluserinfo.groups.filter(
item => !localGroups.includes( item )
);
scriptData.globalGroups = await renderGroups( globalGroups );
scriptData.isLocked = data.query.globaluserinfo.locked === '';
}
}
const blocks = data.query.blocks;
scriptData.isBlocked = blocks.length;
if ( scriptData.isBlocked ) {
if ( isAnon && blocks[ 0 ].user !== username && blocks[ 1 ] ) {
blocks.shift();
}
scriptData.isPartiallyBlocked = blocks[ 0 ].partial === '';
scriptData.isRangeBlocked = isAnon && blocks[ 0 ].user !== username;
if ( scriptData.isRangeBlocked ) {
scriptData.rangeBlockTarget = blocks[ 0 ].user;
}
} else if ( data.query.logevents.length ) {
scriptData.lastBlockDate =
await formatDate( data.query.logevents[ 0 ].timestamp, false );
}
}
async function renderAnonEditCount( editCount ) {
if ( editCount < 500 ) {
return editCount.toLocaleString();
}
await mw.loader.using( 'mediawiki.user' );
const rights = await mw.user.getRights();
const maxAnonEditCount = rights.includes( 'apihighlimits' ) ? 5000 : 500;
if ( editCount === maxAnonEditCount ) {
return `${ editCount.toLocaleString() }+`;
} else {
return editCount.toLocaleString();
}
}
async function renderGroups( groups ) {
if ( groups.length === 0 ) {
return '';
}
let sysMsgGroups = '';
groups.forEach( ( group, index ) => {
sysMsgGroups += `{${ '{' }int:group-${ group }}}`;
if ( index < groups.length - 1 ) {
sysMsgGroups += ', ';
}
} );
const params = {
action: 'parse',
uselang: scriptData.lang,
text: sysMsgGroups,
prop: 'text',
contentmodel: 'wikitext',
disablelimitreport: true
};
const data = await api.get( params );
return $( data.parse.text[ '*' ] ).find( 'p' ).text().trim();
}
async function formatDate( timestamp, includeDay ) {
await mw.loader.using( 'mediawiki.language.months' );
const date = new Date( timestamp );
const monthName = mw.language.months.names[ date.getMonth() ];
const monthNameGen = mw.language.months.genitive[ date.getMonth() ];
const year = date.getFullYear();
if ( includeDay ) {
const day = date.getDate();
await mw.loader.using( 'user.options' );
if ( mw.user.options.get( 'date' ) === 'mdy' ) {
return `${ monthName } ${ day }, ${ year }`;
} else {
return `${ day } ${ monthNameGen } ${ year }`;
}
} else {
return `${ monthName } ${ year }`;
}
}
function fillPopupContent() {
const $container = $( '<aside>' ).attr( 'id', 'transparansi-pengguna-content' );
const $header = $( '<header>' ).attr( 'id', 'transparansi-pengguna-header' );
$header.append(
$( '<bdi>' )
.attr( 'id', 'transparansi-pengguna-username' )
.text( mw.util.prettifyIP( username ) )
);
const $ul = $( '<ul>' ).attr( 'id', 'transparansi-pengguna-list' );
$container.append( $header, $ul );
if ( !isAnon ) {
addListItem( $ul, i18n( 'joined' ), scriptData.regDate );
}
const editCounterUrl =
`https://xtools.wmcloud.org/ec/${ mw.config.get( 'wgServerName' ) }/${ encodeURIComponent( username ) }`;
addListItem(
$ul,
i18n( 'editCount' ),
`<a target="_blank" href="${ editCounterUrl }">${ scriptData.editCount }</a>`
);
const contribsUrl = mw.util.getUrl( `Special:Contributions/${ username }` );
let lastEditedText;
if ( scriptData.editCount === ( 0 ).toLocaleString() ) {
lastEditedText = i18n( 'lastEditedNever' );
} else if ( scriptData.secsFromLastEdit === null ) {
lastEditedText = i18n( 'lastEditedUnknown' );
} else {
lastEditedText = i18n( 'ago' ).replace( '$1', calcTimeFromLastEdit() );
}
addListItem(
$ul,
i18n( 'lastEdited' ),
`<a href="${ contribsUrl }">${ lastEditedText }</a>`
);
if ( !isAnon ) {
const localGroupsUrl = mw.util.getUrl( `Special:UserRights/${ username }` );
const globalGroupsUrl =
mw.util.getUrl( `m:Special:GlobalUserRights/${ username }` );
let groupsHtml;
if ( !scriptData.localGroups && !scriptData.globalGroups ) {
groupsHtml =
`<a href="${ localGroupsUrl }">${ i18n( 'noGroups' ) }</a>`;
}
if ( scriptData.localGroups && !scriptData.globalGroups ) {
groupsHtml =
`<a href="${ localGroupsUrl }">${ scriptData.localGroups }</a>`;
}
if ( !scriptData.localGroups && scriptData.globalGroups ) {
groupsHtml =
`<a href="${ globalGroupsUrl }">${ scriptData.globalGroups }</a>`;
}
if ( scriptData.localGroups && scriptData.globalGroups ) {
groupsHtml =
`<a href="${ localGroupsUrl }">${ scriptData.localGroups }</a>,
<a href="${ globalGroupsUrl }">${ scriptData.globalGroups }</a>`;
}
addListItem( $ul, i18n( 'groups' ), groupsHtml );
}
let lastBlockText;
let blockLogUrl = mw.util.getUrl( 'Special:Log', {
type: 'block',
page: `User:${ username }`
} );
if ( scriptData.isGloballyBlocked ) {
lastBlockText = i18n( 'globallyBlocked' );
blockLogUrl = mw.util.getUrl( 'm:Special:Log', {
type: 'gblblock',
page: `User:${ scriptData.globalBlockTarget }`
} );
} else if ( scriptData.isLocked ) {
lastBlockText = i18n( 'globallyLocked' );
blockLogUrl = mw.util.getUrl( 'm:Special:Log', {
type: 'globalauth',
page: `User:${ username }@global`
} );
} else if ( scriptData.isBlocked ) {
if ( scriptData.isRangeBlocked ) {
if ( scriptData.isPartiallyBlocked ) {
lastBlockText = i18n( 'rangeBlockedPartially' );
} else {
lastBlockText = i18n( 'rangeBlockedFully' );
}
blockLogUrl = mw.util.getUrl( 'Special:Log', {
type: 'block',
page: `User:${ scriptData.rangeBlockTarget }`
} );
} else {
if ( scriptData.isPartiallyBlocked ) {
lastBlockText = i18n( 'partiallyBlocked' );
} else {
lastBlockText = i18n( 'fullyBlocked' );
}
}
} else {
lastBlockText = scriptData.lastBlockDate || i18n( 'neverBlocked' );
}
addListItem(
$ul,
i18n( 'lastBlocked' ),
`<a href="${ blockLogUrl }">${ lastBlockText }</a>`
);
if ( !isAnon && scriptData.gender !== 'unknown' ) {
const images = {
female: {
alt: i18n( 'femaleSymbolAlt' ),
path: 'https://upload.wikimedia.org/wikipedia/commons/archive/1/1d/20240712201036!Venus_symbol_(light_pink).svg'
},
male: {
alt: i18n( 'maleSymbolAlt' ),
path: 'https://upload.wikimedia.org/wikipedia/commons/archive/b/b4/20240624040032!Mars_symbol_(bold_light_blue).svg'
}
};
$( '<img>' ).attr( {
alt: images[ scriptData.gender ].alt,
id: 'transparansi-pengguna-gender-symbol',
src: images[ scriptData.gender ].path,
width: '16.6',
height: '16.6'
} ).appendTo( $header );
}
scriptData.$popupPlaceholder.replaceWith( $container );
}
function addListItem( $ul, property, value ) {
const $li = $( '<li>' );
const $property = $( '<span>' )
.addClass( 'transparansi-pengguna-property' )
.text( property );
const $value = $( '<span>' )
.addClass( 'transparansi-pengguna-value' )
.html( value );
$li.append( $property, ' ', $value ).appendTo( $ul );
}
function calcTimeFromLastEdit() {
const secs = scriptData.secsFromLastEdit;
const days = secs / 60 / 60 / 24;
if ( secs < 60 ) {
let fullSecs = Math.floor( secs );
if ( fullSecs < 1 ) {
fullSecs = 1;
}
const secsArrLength = i18n( 'seconds' ).length;
if ( fullSecs < secsArrLength ) {
return i18n( 'seconds' )[ fullSecs - 1 ];
} else {
return i18n( 'seconds' )[ secsArrLength - 1 ].replace( '$1', fullSecs );
}
} else if ( secs < 60 * 60 ) {
const fullMins = Math.floor( secs / 60 );
const minsArrLength = i18n( 'minutes' ).length;
if ( fullMins < minsArrLength ) {
return i18n( 'minutes' )[ fullMins - 1 ];
} else {
return i18n( 'minutes' )[ minsArrLength - 1 ].replace( '$1', fullMins );
}
} else if ( secs < 60 * 60 * 24 ) {
const fullHours = Math.floor( secs / 60 / 60 );
const hoursArrLength = i18n( 'hours' ).length;
if ( fullHours < hoursArrLength ) {
return i18n( 'hours' )[ fullHours - 1 ];
} else {
return i18n( 'hours' )[ hoursArrLength - 1 ].replace( '$1', fullHours );
}
} else if ( days < 7 ) {
const fullDays = Math.floor( days );
const daysArrLength = i18n( 'days' ).length;
if ( fullDays < daysArrLength ) {
return i18n( 'days' )[ fullDays - 1 ];
} else {
return i18n( 'days' )[ daysArrLength - 1 ].replace( '$1', fullDays );
}
} else if ( days < 30 ) {
const fullWeeks = Math.floor( days / 7 );
const weeksArrLength = i18n( 'weeks' ).length;
if ( fullWeeks < weeksArrLength ) {
return i18n( 'weeks' )[ fullWeeks - 1 ];
} else {
return i18n( 'weeks' )[ weeksArrLength - 1 ].replace( '$1', fullWeeks );
}
} else if ( days < 365 ) {
let fullMonths = Math.floor( days / 30 );
if ( fullMonths === 12 ) {
fullMonths = 11;
}
const monthsArrLength = i18n( 'months' ).length;
if ( fullMonths < monthsArrLength ) {
return i18n( 'months' )[ fullMonths - 1 ];
} else {
return i18n( 'months' )[ monthsArrLength - 1 ].replace( '$1', fullMonths );
}
} else {
const fullYears = Math.floor( days / 365 );
const yearsArrLength = i18n( 'years' ).length;
if ( fullYears < yearsArrLength ) {
return i18n( 'years' )[ fullYears - 1 ];
} else {
return i18n( 'years' )[ yearsArrLength - 1 ].replace( '$1', fullYears );
}
}
}
} )();
1p820jg9ec43dvcubj669n3a7xag4ej
665585
665584
2025-07-08T10:00:58Z
Sophia Guevara
68565
Sophia Guevara moved page [[Pengguna:Sophia Guevara/Tools/Transparansi pengguna.js]] to [[Pengguna:Sophia Guevara/Tools/Transparansipengguna.js]]
665584
wikitext
text/x-wiki
/*
Menambahkan ikon "i" (info) di bagian atas halaman yang terkait dengan pengguna (misalnya halaman pengguna, halaman pembicaraan pengguna, halaman "Kontribusi", dll.)
Warna ikon "i" menunjukkan lamanya waktu sejak pengguna terakhir mengedit:
* Biru – pengguna terakhir mengedit kurang dari 20 menit yang lalu
* Oranye – pengguna terakhir mengedit lebih dari 20 menit yang lalu, tetapi kurang dari 3 bulan yang lalu
* Merah – pengguna terakhir mengedit lebih dari 3 bulan yang lalu
Arahkan kursor ke ikon "i" untuk melihat informasi berguna tentang pengguna yang relevan dengan cepat:
* Tanggal pendaftaran
* Jumlah suntingan
* Waktu yang telah berlalu sejak suntingan terakhir
* Kelompok pengguna (hak), termasuk global
* Waktu blokir terbaru (termasuk rentang dan blokir global, jika berlaku)
* Jenis kelamin (jika diungkapkan)
Lihat dokumentasi lengkap di:
[[User:Sophia_Guevara/Tools/Transparansi_pengguna]]
Lihat juga:
* [[Pengguna:Sophia_Guevara/Tools/Transparansi_pengguna.js]] – untuk kode sumber utama skrip
Skin yang didukung:
Vector (baik 2022 maupun 2010), Monobook, Timeless, dan Minerva.
Juga didukung penuh pada antarmuka seluler.
Ketergantungan:
* mediawiki.api
* mediawiki.language.months
* mediawiki.user
* mediawiki.util
* user.options
* oojs-ui-core
Ditulis oleh: [[Pengguna:Sophia Guevara]]
*/
( async () => {
'use strict';
const username = mw.config.get( 'wgRelevantUserName' );
if ( !username || mw.config.get( 'transparansiPenggunaLoaded' ) ) {
return;
}
mw.config.set( 'transparansiPenggunaLoaded', true );
await mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] );
const isAnon = mw.util.isIPAddress( username );
const api = new mw.Api();
async function checkIfUserExists() {
if ( isAnon ) {
return true;
}
const data = await api.get( { list: 'users', ususers: username } );
if ( data.query.users[ 0 ].userid ) {
return true;
}
return false;
}
if ( !( await checkIfUserExists() ) ) {
return;
}
mw.loader.load(
'https://test.wikipedia.org/wiki/User:Sophia_Guevara/Tools/Transparansi_pengguna.css&action=raw&ctype=text/css',
'text/css'
);
const scriptData = {
lang: mw.config.get( 'wgUserLanguage' ),
skin: mw.config.get( 'skin' ),
secsFromLastEdit: await calcSecsFromLastEdit()
};
createInfoIcon();
await $.when( mw.loader.using( 'oojs-ui-core' ), $.ready );
addInfoIconToPage();
attachEventListeners();
function i18n( key ) {
const messages = {
id: {
infoIconAlt: 'Ikon info',
femaleSymbolAlt: 'Perempuan',
maleSymbolAlt: 'Laki-laki',
fetchingData: 'Mengambil data…',
regUnknown: 'Tidak diketahui',
joined: 'Bergabung:',
editCount: 'Kontribusi:',
lastEdited: 'Terakhir diedit:',
lastEditedNever: 'Tidak pernah',
lastEditedUnknown: 'Tidak diketahui',
groups: 'Grup:',
noGroups: 'Tidak ada',
lastBlocked: 'Terakhir diblokir:',
neverBlocked: 'Tidak pernah',
partiallyBlocked: 'Saat ini diblokir (sebagian)',
fullyBlocked: 'Saat ini diblokir',
rangeBlockedPartially: 'Saat ini diblokir suntingannya (sebagian)',
rangeBlockedFully: 'Saat ini diblokir suntingannya',
globallyBlocked: 'Saat ini diblokir secara global',
globallyLocked: 'Saat ini terkunci secara global',
ago: '$1 ago',
seconds: [ '1 detik', '$1 detik yang lalu' ],
minutes: [ '1 menit', '$1 menit yang lalu' ],
hours: [ '1 jam', '$1 jam yang lalu' ],
days: [ '1 hari', '$1 hari yang lalu' ],
weeks: [ '1 minggu', '$1 minggu yang lalu' ],
months: [ '1 bulan', '$1 bulan tang lalu' ],
years: [ '1 tahun', '$1 tahun yang lalu' ]
},
en: {
infoIconAlt: 'Info icon',
femaleSymbolAlt: 'Female',
maleSymbolAlt: 'Male',
fetchingData: 'Fetching data…',
regUnknown: 'Unknown',
joined: 'Joined:',
editCount: 'Edits:',
lastEdited: 'Last edited:',
lastEditedNever: 'Never',
lastEditedUnknown: 'Unknown',
groups: 'Groups:',
noGroups: 'None',
lastBlocked: 'Last blocked:',
neverBlocked: 'Never',
partiallyBlocked: 'Currently blocked (partially)',
fullyBlocked: 'Currently blocked',
rangeBlockedPartially: 'Currently range-blocked (partially)',
rangeBlockedFully: 'Currently range-blocked',
globallyBlocked: 'Currently blocked globally',
globallyLocked: 'Currently locked globally',
ago: '$1 ago',
seconds: [ '1 second', '$1 seconds' ],
minutes: [ '1 minute', '$1 minutes' ],
hours: [ '1 hour', '$1 hours' ],
days: [ '1 day', '$1 days' ],
weeks: [ '1 week', '$1 weeks' ],
months: [ '1 month', '$1 months' ],
years: [ '1 year', '$1 years' ]
}
};
if (
messages[ scriptData.lang ] &&
messages[ scriptData.lang ][ key ]
) {
return messages[ scriptData.lang ][ key ];
} else {
return messages.en[ key ];
}
}
async function calcSecsFromLastEdit() {
const params = {
list: 'usercontribs',
ucuser: username,
ucprop: 'timestamp',
uclimit: 1
};
const data = await api.get( params );
if ( data.query.usercontribs.length === 0 ) {
return null;
}
const lastEditTime =
new Date( data.query.usercontribs[ 0 ].timestamp ).getTime();
return ( mw.now() - lastEditTime ) / 1000;
}
function createInfoIcon() {
const $img = $( '<img>' )
.addClass( 'transparansi-pengguna-icon' )
.attr( {
alt: i18n( 'infoIconAlt' ),
width: '20.3',
height: '20.3'
} );
if ( scriptData.secsFromLastEdit === null ) {
$img
.addClass( 'transparansi-pengguna-grey-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/d/df/Information_grey.svg' );
} else if ( scriptData.secsFromLastEdit < 60 * 20 ) {
$img
.addClass( 'transparansi-pengguna-blue-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/2/28/Information.svg' );
} else if ( scriptData.secsFromLastEdit < 60 * 60 * 24 * 30 * 3 ) {
$img
.addClass( 'transparansi-pengguna-orange-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/f/f0/Information_orange.svg' );
} else {
$img
.addClass( 'transparansi-pengguna-red-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/5/55/Information_red.svg' );
}
scriptData.$indicator = $( '<div>' )
.addClass( 'mw-indicator' )
.attr( { id: 'mw-indicator-transparansi-pengguna-indicator', tabindex: '0' } )
.append( $img );
}
function addInfoIconToPage() {
const $throbberImg = $( '<img>' ).attr( {
alt: i18n( 'fetchingData' ),
id: 'transparansi-pengguna-throbber',
src: 'https://upload.wikimedia.org/wikipedia/commons/f/f8/Ajax-loader(2).gif'
} );
const $placeholderText = $( '<p>' )
.attr( 'id', 'transparansi-pengguna-placeholder-text' )
.text( i18n( 'fetchingData' ) );
scriptData.$popupPlaceholder = $( '<div>' )
.attr( 'id', 'transparansi-pengguna-placeholder' )
.append( $throbberImg, $placeholderText );
scriptData.popup = new OO.ui.PopupWidget( {
$content: scriptData.$popupPlaceholder,
align: 'backwards',
autoFlip: false,
id: 'transparansi-pengguna-popup',
hideWhenOutOfView: false,
padded: true,
position: 'below',
width: 225
} );
scriptData.$indicator.append( scriptData.popup.$element );
if (
scriptData.skin === 'vector-2022' &&
$( '.vector-page-toolbar-container:has( #ca-nstab-user )' ).length
) {
const $navBtns = $( '#right-navigation > nav:first-of-type' );
if ( $navBtns.length ) {
scriptData.$indicator.insertAfter( $navBtns );
} else {
scriptData.$indicator
.insertBefore( '.vector-page-tools-landmark:has( #vector-page-tools-dropdown )' );
}
} else {
const $indicatorsContainer = $( '.mw-indicators' );
if (
!window.matchMedia( '( orientation: portrait )' ).matches ||
scriptData.skin === 'vector-2022' ||
scriptData.skin === 'vector' ||
( scriptData.skin === 'monobook' && !$( '#sidebar-toggle:visible' ).length )
) {
scriptData.popup.setAlignment( 'forwards' );
scriptData.popup.setPosition( 'before' );
if ( $indicatorsContainer.children( '.mw-indicator' ).length >= 6 ) {
scriptData.popup.setAutoFlip( true );
}
}
if ( scriptData.skin === 'minerva' ) {
scriptData.$indicator
.css( 'float', $( 'body.rtl' ).length ? 'left' : 'right' )
.appendTo( '.header-container' );
} else {
$indicatorsContainer.prepend( scriptData.$indicator );
}
}
}
function attachEventListeners() {
scriptData.popup.on( 'ready', () => {
// Prevent mobile browsers from occasionally jumping
// to the top of the page when tapping the "i" icon.
window.scrollTo( scriptData.posX, scriptData.posY );
if (
document.documentElement.clientWidth < 600 &&
scriptData.skin === 'vector-2022' &&
scriptData.popup.$element.hasClass( 'oo-ui-popupWidget-anchored-top' )
) {
adaptPopupPosition();
}
scriptData.popup.$element.hide().fadeIn();
} );
scriptData.$indicator.on( 'mouseenter focusin keydown', e => {
if ( e.type === 'keydown' ) {
if ( ![ 'Enter', ' ' ].includes( e.key ) ) {
return;
}
if ( e.key === ' ' ) {
e.preventDefault();
}
}
clearTimeout( scriptData.mouseLeaveTimeout );
scriptData.mouseEnterTimeout = setTimeout( openPopup, 200 );
} );
scriptData.$indicator.on( 'mouseleave focusout', () => {
if (
document.activeElement.id === 'mw-indicator-transparansi-pengguna-indicator' ||
document.activeElement.parentElement.classList.contains(
'transparansi-pengguna-value'
)
) {
return;
}
clearTimeout( scriptData.mouseEnterTimeout );
scriptData.mouseLeaveTimeout = setTimeout( closePopup, 2500 );
} );
$( document ).on( 'keydown', e => {
if ( e.key === 'Escape' ) {
closePopup();
}
} );
$( document ).on( 'click', closePopup );
$( '.oo-ui-fieldsetLayout-header, .ext-discussiontools-init-section-bar' )
.on( 'click', closePopup );
scriptData.$indicator.on( 'click', e => e.stopPropagation() );
}
function adaptPopupPosition() {
const innerBody = document.querySelector( '.mw-page-container' );
const innerBodyRect = innerBody.getBoundingClientRect();
const indicator = scriptData.$indicator[ 0 ];
const indicatorRect = indicator.getBoundingClientRect();
const dir = $( 'body.rtl' ).length ? 'left' : 'right';
const pos =
Math.abs( indicatorRect[ dir ] - innerBodyRect[ dir ] ) -
indicator.offsetWidth / 2;
scriptData.popupCss = mw.util.addCSS(
`#transparansi-pengguna-popup { ${ dir }: ${ pos }px !important; }`
);
}
function openPopup() {
if ( !scriptData.popup.isVisible() ) {
// posX and posY are used to prevent mobile browsers from
// occasionally jumping to the top of the page when tapping
// the "i" icon. See the popup's "ready" event listener above.
scriptData.posX = window.scrollX;
scriptData.posY = window.scrollY;
scriptData.popup.toggle( true );
if ( !scriptData.dataFetched ) {
getUserData().then( fillPopupContent );
scriptData.dataFetched = true;
}
}
}
function closePopup() {
clearTimeout( scriptData.mouseLeaveTimeout );
if ( scriptData.popup.isVisible() ) {
scriptData.popup.$element.fadeOut( () => {
scriptData.popup.toggle( false );
scriptData.popup.$element.show();
if ( scriptData.popupCss ) {
scriptData.popupCss.disabled = true;
}
} );
}
}
async function getUserData() {
let params;
if ( isAnon ) {
params = {
list: 'blocks|globalblocks|logevents|usercontribs',
bkip: username,
bkprop: 'flags|user',
bklimit: 2,
bgip: username,
bgprop: 'address',
bglimit: 1,
leaction: 'block/block',
letitle: `User:${ username }`,
leprop: 'timestamp',
lelimit: 1,
ucuser: username,
ucprop: '',
uclimit: 'max'
};
} else {
params = {
list: 'blocks|logevents|usercontribs|users',
meta: 'globaluserinfo',
bkusers: username,
bkprop: 'flags',
bklimit: 1,
leaction: 'block/block',
letitle: `User:${ username }`,
leprop: 'timestamp',
lelimit: 1,
ucuser: username,
ucdir: 'newer',
ucprop: 'timestamp',
uclimit: 1,
ususers: username,
usprop: 'editcount|gender|groupmemberships|registration',
guiuser: username,
guiprop: 'groups'
};
}
const data = await api.get( params );
if ( isAnon ) {
const editCount = data.query.usercontribs.length;
scriptData.editCount = await renderAnonEditCount( editCount );
scriptData.isGloballyBlocked = data.query.globalblocks.length;
if ( scriptData.isGloballyBlocked ) {
scriptData.globalBlockTarget = data.query.globalblocks[ 0 ].address;
}
} else {
scriptData.gender = data.query.users[ 0 ].gender;
if ( data.query.users[ 0 ].registration ) {
scriptData.regDate =
await formatDate( data.query.users[ 0 ].registration, true );
} else if ( data.query.usercontribs[ 0 ] ) {
scriptData.regDate =
await formatDate( data.query.usercontribs[ 0 ].timestamp, true );
} else {
scriptData.regDate = i18n( 'regUnknown' );
}
scriptData.editCount = data.query.users[ 0 ].editcount.toLocaleString();
const localGroups =
data.query.users[ 0 ].groupmemberships.map( item => item.group );
scriptData.localGroups = await renderGroups( localGroups );
if ( data.query.globaluserinfo.groups ) {
const globalGroups = data.query.globaluserinfo.groups.filter(
item => !localGroups.includes( item )
);
scriptData.globalGroups = await renderGroups( globalGroups );
scriptData.isLocked = data.query.globaluserinfo.locked === '';
}
}
const blocks = data.query.blocks;
scriptData.isBlocked = blocks.length;
if ( scriptData.isBlocked ) {
if ( isAnon && blocks[ 0 ].user !== username && blocks[ 1 ] ) {
blocks.shift();
}
scriptData.isPartiallyBlocked = blocks[ 0 ].partial === '';
scriptData.isRangeBlocked = isAnon && blocks[ 0 ].user !== username;
if ( scriptData.isRangeBlocked ) {
scriptData.rangeBlockTarget = blocks[ 0 ].user;
}
} else if ( data.query.logevents.length ) {
scriptData.lastBlockDate =
await formatDate( data.query.logevents[ 0 ].timestamp, false );
}
}
async function renderAnonEditCount( editCount ) {
if ( editCount < 500 ) {
return editCount.toLocaleString();
}
await mw.loader.using( 'mediawiki.user' );
const rights = await mw.user.getRights();
const maxAnonEditCount = rights.includes( 'apihighlimits' ) ? 5000 : 500;
if ( editCount === maxAnonEditCount ) {
return `${ editCount.toLocaleString() }+`;
} else {
return editCount.toLocaleString();
}
}
async function renderGroups( groups ) {
if ( groups.length === 0 ) {
return '';
}
let sysMsgGroups = '';
groups.forEach( ( group, index ) => {
sysMsgGroups += `{${ '{' }int:group-${ group }}}`;
if ( index < groups.length - 1 ) {
sysMsgGroups += ', ';
}
} );
const params = {
action: 'parse',
uselang: scriptData.lang,
text: sysMsgGroups,
prop: 'text',
contentmodel: 'wikitext',
disablelimitreport: true
};
const data = await api.get( params );
return $( data.parse.text[ '*' ] ).find( 'p' ).text().trim();
}
async function formatDate( timestamp, includeDay ) {
await mw.loader.using( 'mediawiki.language.months' );
const date = new Date( timestamp );
const monthName = mw.language.months.names[ date.getMonth() ];
const monthNameGen = mw.language.months.genitive[ date.getMonth() ];
const year = date.getFullYear();
if ( includeDay ) {
const day = date.getDate();
await mw.loader.using( 'user.options' );
if ( mw.user.options.get( 'date' ) === 'mdy' ) {
return `${ monthName } ${ day }, ${ year }`;
} else {
return `${ day } ${ monthNameGen } ${ year }`;
}
} else {
return `${ monthName } ${ year }`;
}
}
function fillPopupContent() {
const $container = $( '<aside>' ).attr( 'id', 'transparansi-pengguna-content' );
const $header = $( '<header>' ).attr( 'id', 'transparansi-pengguna-header' );
$header.append(
$( '<bdi>' )
.attr( 'id', 'transparansi-pengguna-username' )
.text( mw.util.prettifyIP( username ) )
);
const $ul = $( '<ul>' ).attr( 'id', 'transparansi-pengguna-list' );
$container.append( $header, $ul );
if ( !isAnon ) {
addListItem( $ul, i18n( 'joined' ), scriptData.regDate );
}
const editCounterUrl =
`https://xtools.wmcloud.org/ec/${ mw.config.get( 'wgServerName' ) }/${ encodeURIComponent( username ) }`;
addListItem(
$ul,
i18n( 'editCount' ),
`<a target="_blank" href="${ editCounterUrl }">${ scriptData.editCount }</a>`
);
const contribsUrl = mw.util.getUrl( `Special:Contributions/${ username }` );
let lastEditedText;
if ( scriptData.editCount === ( 0 ).toLocaleString() ) {
lastEditedText = i18n( 'lastEditedNever' );
} else if ( scriptData.secsFromLastEdit === null ) {
lastEditedText = i18n( 'lastEditedUnknown' );
} else {
lastEditedText = i18n( 'ago' ).replace( '$1', calcTimeFromLastEdit() );
}
addListItem(
$ul,
i18n( 'lastEdited' ),
`<a href="${ contribsUrl }">${ lastEditedText }</a>`
);
if ( !isAnon ) {
const localGroupsUrl = mw.util.getUrl( `Special:UserRights/${ username }` );
const globalGroupsUrl =
mw.util.getUrl( `m:Special:GlobalUserRights/${ username }` );
let groupsHtml;
if ( !scriptData.localGroups && !scriptData.globalGroups ) {
groupsHtml =
`<a href="${ localGroupsUrl }">${ i18n( 'noGroups' ) }</a>`;
}
if ( scriptData.localGroups && !scriptData.globalGroups ) {
groupsHtml =
`<a href="${ localGroupsUrl }">${ scriptData.localGroups }</a>`;
}
if ( !scriptData.localGroups && scriptData.globalGroups ) {
groupsHtml =
`<a href="${ globalGroupsUrl }">${ scriptData.globalGroups }</a>`;
}
if ( scriptData.localGroups && scriptData.globalGroups ) {
groupsHtml =
`<a href="${ localGroupsUrl }">${ scriptData.localGroups }</a>,
<a href="${ globalGroupsUrl }">${ scriptData.globalGroups }</a>`;
}
addListItem( $ul, i18n( 'groups' ), groupsHtml );
}
let lastBlockText;
let blockLogUrl = mw.util.getUrl( 'Special:Log', {
type: 'block',
page: `User:${ username }`
} );
if ( scriptData.isGloballyBlocked ) {
lastBlockText = i18n( 'globallyBlocked' );
blockLogUrl = mw.util.getUrl( 'm:Special:Log', {
type: 'gblblock',
page: `User:${ scriptData.globalBlockTarget }`
} );
} else if ( scriptData.isLocked ) {
lastBlockText = i18n( 'globallyLocked' );
blockLogUrl = mw.util.getUrl( 'm:Special:Log', {
type: 'globalauth',
page: `User:${ username }@global`
} );
} else if ( scriptData.isBlocked ) {
if ( scriptData.isRangeBlocked ) {
if ( scriptData.isPartiallyBlocked ) {
lastBlockText = i18n( 'rangeBlockedPartially' );
} else {
lastBlockText = i18n( 'rangeBlockedFully' );
}
blockLogUrl = mw.util.getUrl( 'Special:Log', {
type: 'block',
page: `User:${ scriptData.rangeBlockTarget }`
} );
} else {
if ( scriptData.isPartiallyBlocked ) {
lastBlockText = i18n( 'partiallyBlocked' );
} else {
lastBlockText = i18n( 'fullyBlocked' );
}
}
} else {
lastBlockText = scriptData.lastBlockDate || i18n( 'neverBlocked' );
}
addListItem(
$ul,
i18n( 'lastBlocked' ),
`<a href="${ blockLogUrl }">${ lastBlockText }</a>`
);
if ( !isAnon && scriptData.gender !== 'unknown' ) {
const images = {
female: {
alt: i18n( 'femaleSymbolAlt' ),
path: 'https://upload.wikimedia.org/wikipedia/commons/archive/1/1d/20240712201036!Venus_symbol_(light_pink).svg'
},
male: {
alt: i18n( 'maleSymbolAlt' ),
path: 'https://upload.wikimedia.org/wikipedia/commons/archive/b/b4/20240624040032!Mars_symbol_(bold_light_blue).svg'
}
};
$( '<img>' ).attr( {
alt: images[ scriptData.gender ].alt,
id: 'transparansi-pengguna-gender-symbol',
src: images[ scriptData.gender ].path,
width: '16.6',
height: '16.6'
} ).appendTo( $header );
}
scriptData.$popupPlaceholder.replaceWith( $container );
}
function addListItem( $ul, property, value ) {
const $li = $( '<li>' );
const $property = $( '<span>' )
.addClass( 'transparansi-pengguna-property' )
.text( property );
const $value = $( '<span>' )
.addClass( 'transparansi-pengguna-value' )
.html( value );
$li.append( $property, ' ', $value ).appendTo( $ul );
}
function calcTimeFromLastEdit() {
const secs = scriptData.secsFromLastEdit;
const days = secs / 60 / 60 / 24;
if ( secs < 60 ) {
let fullSecs = Math.floor( secs );
if ( fullSecs < 1 ) {
fullSecs = 1;
}
const secsArrLength = i18n( 'seconds' ).length;
if ( fullSecs < secsArrLength ) {
return i18n( 'seconds' )[ fullSecs - 1 ];
} else {
return i18n( 'seconds' )[ secsArrLength - 1 ].replace( '$1', fullSecs );
}
} else if ( secs < 60 * 60 ) {
const fullMins = Math.floor( secs / 60 );
const minsArrLength = i18n( 'minutes' ).length;
if ( fullMins < minsArrLength ) {
return i18n( 'minutes' )[ fullMins - 1 ];
} else {
return i18n( 'minutes' )[ minsArrLength - 1 ].replace( '$1', fullMins );
}
} else if ( secs < 60 * 60 * 24 ) {
const fullHours = Math.floor( secs / 60 / 60 );
const hoursArrLength = i18n( 'hours' ).length;
if ( fullHours < hoursArrLength ) {
return i18n( 'hours' )[ fullHours - 1 ];
} else {
return i18n( 'hours' )[ hoursArrLength - 1 ].replace( '$1', fullHours );
}
} else if ( days < 7 ) {
const fullDays = Math.floor( days );
const daysArrLength = i18n( 'days' ).length;
if ( fullDays < daysArrLength ) {
return i18n( 'days' )[ fullDays - 1 ];
} else {
return i18n( 'days' )[ daysArrLength - 1 ].replace( '$1', fullDays );
}
} else if ( days < 30 ) {
const fullWeeks = Math.floor( days / 7 );
const weeksArrLength = i18n( 'weeks' ).length;
if ( fullWeeks < weeksArrLength ) {
return i18n( 'weeks' )[ fullWeeks - 1 ];
} else {
return i18n( 'weeks' )[ weeksArrLength - 1 ].replace( '$1', fullWeeks );
}
} else if ( days < 365 ) {
let fullMonths = Math.floor( days / 30 );
if ( fullMonths === 12 ) {
fullMonths = 11;
}
const monthsArrLength = i18n( 'months' ).length;
if ( fullMonths < monthsArrLength ) {
return i18n( 'months' )[ fullMonths - 1 ];
} else {
return i18n( 'months' )[ monthsArrLength - 1 ].replace( '$1', fullMonths );
}
} else {
const fullYears = Math.floor( days / 365 );
const yearsArrLength = i18n( 'years' ).length;
if ( fullYears < yearsArrLength ) {
return i18n( 'years' )[ fullYears - 1 ];
} else {
return i18n( 'years' )[ yearsArrLength - 1 ].replace( '$1', fullYears );
}
}
}
} )();
1p820jg9ec43dvcubj669n3a7xag4ej
665588
665585
2025-07-08T10:05:26Z
Sophia Guevara
68565
Sophia Guevara moved page [[Pengguna:Sophia Guevara/Tools/Transparansipengguna.js]] to [[Pengguna:Sophia Guevara/Tools/Transparansi pengguna]]: move to template
665584
wikitext
text/x-wiki
/*
Menambahkan ikon "i" (info) di bagian atas halaman yang terkait dengan pengguna (misalnya halaman pengguna, halaman pembicaraan pengguna, halaman "Kontribusi", dll.)
Warna ikon "i" menunjukkan lamanya waktu sejak pengguna terakhir mengedit:
* Biru – pengguna terakhir mengedit kurang dari 20 menit yang lalu
* Oranye – pengguna terakhir mengedit lebih dari 20 menit yang lalu, tetapi kurang dari 3 bulan yang lalu
* Merah – pengguna terakhir mengedit lebih dari 3 bulan yang lalu
Arahkan kursor ke ikon "i" untuk melihat informasi berguna tentang pengguna yang relevan dengan cepat:
* Tanggal pendaftaran
* Jumlah suntingan
* Waktu yang telah berlalu sejak suntingan terakhir
* Kelompok pengguna (hak), termasuk global
* Waktu blokir terbaru (termasuk rentang dan blokir global, jika berlaku)
* Jenis kelamin (jika diungkapkan)
Lihat dokumentasi lengkap di:
[[User:Sophia_Guevara/Tools/Transparansi_pengguna]]
Lihat juga:
* [[Pengguna:Sophia_Guevara/Tools/Transparansi_pengguna.js]] – untuk kode sumber utama skrip
Skin yang didukung:
Vector (baik 2022 maupun 2010), Monobook, Timeless, dan Minerva.
Juga didukung penuh pada antarmuka seluler.
Ketergantungan:
* mediawiki.api
* mediawiki.language.months
* mediawiki.user
* mediawiki.util
* user.options
* oojs-ui-core
Ditulis oleh: [[Pengguna:Sophia Guevara]]
*/
( async () => {
'use strict';
const username = mw.config.get( 'wgRelevantUserName' );
if ( !username || mw.config.get( 'transparansiPenggunaLoaded' ) ) {
return;
}
mw.config.set( 'transparansiPenggunaLoaded', true );
await mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] );
const isAnon = mw.util.isIPAddress( username );
const api = new mw.Api();
async function checkIfUserExists() {
if ( isAnon ) {
return true;
}
const data = await api.get( { list: 'users', ususers: username } );
if ( data.query.users[ 0 ].userid ) {
return true;
}
return false;
}
if ( !( await checkIfUserExists() ) ) {
return;
}
mw.loader.load(
'https://test.wikipedia.org/wiki/User:Sophia_Guevara/Tools/Transparansi_pengguna.css&action=raw&ctype=text/css',
'text/css'
);
const scriptData = {
lang: mw.config.get( 'wgUserLanguage' ),
skin: mw.config.get( 'skin' ),
secsFromLastEdit: await calcSecsFromLastEdit()
};
createInfoIcon();
await $.when( mw.loader.using( 'oojs-ui-core' ), $.ready );
addInfoIconToPage();
attachEventListeners();
function i18n( key ) {
const messages = {
id: {
infoIconAlt: 'Ikon info',
femaleSymbolAlt: 'Perempuan',
maleSymbolAlt: 'Laki-laki',
fetchingData: 'Mengambil data…',
regUnknown: 'Tidak diketahui',
joined: 'Bergabung:',
editCount: 'Kontribusi:',
lastEdited: 'Terakhir diedit:',
lastEditedNever: 'Tidak pernah',
lastEditedUnknown: 'Tidak diketahui',
groups: 'Grup:',
noGroups: 'Tidak ada',
lastBlocked: 'Terakhir diblokir:',
neverBlocked: 'Tidak pernah',
partiallyBlocked: 'Saat ini diblokir (sebagian)',
fullyBlocked: 'Saat ini diblokir',
rangeBlockedPartially: 'Saat ini diblokir suntingannya (sebagian)',
rangeBlockedFully: 'Saat ini diblokir suntingannya',
globallyBlocked: 'Saat ini diblokir secara global',
globallyLocked: 'Saat ini terkunci secara global',
ago: '$1 ago',
seconds: [ '1 detik', '$1 detik yang lalu' ],
minutes: [ '1 menit', '$1 menit yang lalu' ],
hours: [ '1 jam', '$1 jam yang lalu' ],
days: [ '1 hari', '$1 hari yang lalu' ],
weeks: [ '1 minggu', '$1 minggu yang lalu' ],
months: [ '1 bulan', '$1 bulan tang lalu' ],
years: [ '1 tahun', '$1 tahun yang lalu' ]
},
en: {
infoIconAlt: 'Info icon',
femaleSymbolAlt: 'Female',
maleSymbolAlt: 'Male',
fetchingData: 'Fetching data…',
regUnknown: 'Unknown',
joined: 'Joined:',
editCount: 'Edits:',
lastEdited: 'Last edited:',
lastEditedNever: 'Never',
lastEditedUnknown: 'Unknown',
groups: 'Groups:',
noGroups: 'None',
lastBlocked: 'Last blocked:',
neverBlocked: 'Never',
partiallyBlocked: 'Currently blocked (partially)',
fullyBlocked: 'Currently blocked',
rangeBlockedPartially: 'Currently range-blocked (partially)',
rangeBlockedFully: 'Currently range-blocked',
globallyBlocked: 'Currently blocked globally',
globallyLocked: 'Currently locked globally',
ago: '$1 ago',
seconds: [ '1 second', '$1 seconds' ],
minutes: [ '1 minute', '$1 minutes' ],
hours: [ '1 hour', '$1 hours' ],
days: [ '1 day', '$1 days' ],
weeks: [ '1 week', '$1 weeks' ],
months: [ '1 month', '$1 months' ],
years: [ '1 year', '$1 years' ]
}
};
if (
messages[ scriptData.lang ] &&
messages[ scriptData.lang ][ key ]
) {
return messages[ scriptData.lang ][ key ];
} else {
return messages.en[ key ];
}
}
async function calcSecsFromLastEdit() {
const params = {
list: 'usercontribs',
ucuser: username,
ucprop: 'timestamp',
uclimit: 1
};
const data = await api.get( params );
if ( data.query.usercontribs.length === 0 ) {
return null;
}
const lastEditTime =
new Date( data.query.usercontribs[ 0 ].timestamp ).getTime();
return ( mw.now() - lastEditTime ) / 1000;
}
function createInfoIcon() {
const $img = $( '<img>' )
.addClass( 'transparansi-pengguna-icon' )
.attr( {
alt: i18n( 'infoIconAlt' ),
width: '20.3',
height: '20.3'
} );
if ( scriptData.secsFromLastEdit === null ) {
$img
.addClass( 'transparansi-pengguna-grey-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/d/df/Information_grey.svg' );
} else if ( scriptData.secsFromLastEdit < 60 * 20 ) {
$img
.addClass( 'transparansi-pengguna-blue-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/2/28/Information.svg' );
} else if ( scriptData.secsFromLastEdit < 60 * 60 * 24 * 30 * 3 ) {
$img
.addClass( 'transparansi-pengguna-orange-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/f/f0/Information_orange.svg' );
} else {
$img
.addClass( 'transparansi-pengguna-red-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/5/55/Information_red.svg' );
}
scriptData.$indicator = $( '<div>' )
.addClass( 'mw-indicator' )
.attr( { id: 'mw-indicator-transparansi-pengguna-indicator', tabindex: '0' } )
.append( $img );
}
function addInfoIconToPage() {
const $throbberImg = $( '<img>' ).attr( {
alt: i18n( 'fetchingData' ),
id: 'transparansi-pengguna-throbber',
src: 'https://upload.wikimedia.org/wikipedia/commons/f/f8/Ajax-loader(2).gif'
} );
const $placeholderText = $( '<p>' )
.attr( 'id', 'transparansi-pengguna-placeholder-text' )
.text( i18n( 'fetchingData' ) );
scriptData.$popupPlaceholder = $( '<div>' )
.attr( 'id', 'transparansi-pengguna-placeholder' )
.append( $throbberImg, $placeholderText );
scriptData.popup = new OO.ui.PopupWidget( {
$content: scriptData.$popupPlaceholder,
align: 'backwards',
autoFlip: false,
id: 'transparansi-pengguna-popup',
hideWhenOutOfView: false,
padded: true,
position: 'below',
width: 225
} );
scriptData.$indicator.append( scriptData.popup.$element );
if (
scriptData.skin === 'vector-2022' &&
$( '.vector-page-toolbar-container:has( #ca-nstab-user )' ).length
) {
const $navBtns = $( '#right-navigation > nav:first-of-type' );
if ( $navBtns.length ) {
scriptData.$indicator.insertAfter( $navBtns );
} else {
scriptData.$indicator
.insertBefore( '.vector-page-tools-landmark:has( #vector-page-tools-dropdown )' );
}
} else {
const $indicatorsContainer = $( '.mw-indicators' );
if (
!window.matchMedia( '( orientation: portrait )' ).matches ||
scriptData.skin === 'vector-2022' ||
scriptData.skin === 'vector' ||
( scriptData.skin === 'monobook' && !$( '#sidebar-toggle:visible' ).length )
) {
scriptData.popup.setAlignment( 'forwards' );
scriptData.popup.setPosition( 'before' );
if ( $indicatorsContainer.children( '.mw-indicator' ).length >= 6 ) {
scriptData.popup.setAutoFlip( true );
}
}
if ( scriptData.skin === 'minerva' ) {
scriptData.$indicator
.css( 'float', $( 'body.rtl' ).length ? 'left' : 'right' )
.appendTo( '.header-container' );
} else {
$indicatorsContainer.prepend( scriptData.$indicator );
}
}
}
function attachEventListeners() {
scriptData.popup.on( 'ready', () => {
// Prevent mobile browsers from occasionally jumping
// to the top of the page when tapping the "i" icon.
window.scrollTo( scriptData.posX, scriptData.posY );
if (
document.documentElement.clientWidth < 600 &&
scriptData.skin === 'vector-2022' &&
scriptData.popup.$element.hasClass( 'oo-ui-popupWidget-anchored-top' )
) {
adaptPopupPosition();
}
scriptData.popup.$element.hide().fadeIn();
} );
scriptData.$indicator.on( 'mouseenter focusin keydown', e => {
if ( e.type === 'keydown' ) {
if ( ![ 'Enter', ' ' ].includes( e.key ) ) {
return;
}
if ( e.key === ' ' ) {
e.preventDefault();
}
}
clearTimeout( scriptData.mouseLeaveTimeout );
scriptData.mouseEnterTimeout = setTimeout( openPopup, 200 );
} );
scriptData.$indicator.on( 'mouseleave focusout', () => {
if (
document.activeElement.id === 'mw-indicator-transparansi-pengguna-indicator' ||
document.activeElement.parentElement.classList.contains(
'transparansi-pengguna-value'
)
) {
return;
}
clearTimeout( scriptData.mouseEnterTimeout );
scriptData.mouseLeaveTimeout = setTimeout( closePopup, 2500 );
} );
$( document ).on( 'keydown', e => {
if ( e.key === 'Escape' ) {
closePopup();
}
} );
$( document ).on( 'click', closePopup );
$( '.oo-ui-fieldsetLayout-header, .ext-discussiontools-init-section-bar' )
.on( 'click', closePopup );
scriptData.$indicator.on( 'click', e => e.stopPropagation() );
}
function adaptPopupPosition() {
const innerBody = document.querySelector( '.mw-page-container' );
const innerBodyRect = innerBody.getBoundingClientRect();
const indicator = scriptData.$indicator[ 0 ];
const indicatorRect = indicator.getBoundingClientRect();
const dir = $( 'body.rtl' ).length ? 'left' : 'right';
const pos =
Math.abs( indicatorRect[ dir ] - innerBodyRect[ dir ] ) -
indicator.offsetWidth / 2;
scriptData.popupCss = mw.util.addCSS(
`#transparansi-pengguna-popup { ${ dir }: ${ pos }px !important; }`
);
}
function openPopup() {
if ( !scriptData.popup.isVisible() ) {
// posX and posY are used to prevent mobile browsers from
// occasionally jumping to the top of the page when tapping
// the "i" icon. See the popup's "ready" event listener above.
scriptData.posX = window.scrollX;
scriptData.posY = window.scrollY;
scriptData.popup.toggle( true );
if ( !scriptData.dataFetched ) {
getUserData().then( fillPopupContent );
scriptData.dataFetched = true;
}
}
}
function closePopup() {
clearTimeout( scriptData.mouseLeaveTimeout );
if ( scriptData.popup.isVisible() ) {
scriptData.popup.$element.fadeOut( () => {
scriptData.popup.toggle( false );
scriptData.popup.$element.show();
if ( scriptData.popupCss ) {
scriptData.popupCss.disabled = true;
}
} );
}
}
async function getUserData() {
let params;
if ( isAnon ) {
params = {
list: 'blocks|globalblocks|logevents|usercontribs',
bkip: username,
bkprop: 'flags|user',
bklimit: 2,
bgip: username,
bgprop: 'address',
bglimit: 1,
leaction: 'block/block',
letitle: `User:${ username }`,
leprop: 'timestamp',
lelimit: 1,
ucuser: username,
ucprop: '',
uclimit: 'max'
};
} else {
params = {
list: 'blocks|logevents|usercontribs|users',
meta: 'globaluserinfo',
bkusers: username,
bkprop: 'flags',
bklimit: 1,
leaction: 'block/block',
letitle: `User:${ username }`,
leprop: 'timestamp',
lelimit: 1,
ucuser: username,
ucdir: 'newer',
ucprop: 'timestamp',
uclimit: 1,
ususers: username,
usprop: 'editcount|gender|groupmemberships|registration',
guiuser: username,
guiprop: 'groups'
};
}
const data = await api.get( params );
if ( isAnon ) {
const editCount = data.query.usercontribs.length;
scriptData.editCount = await renderAnonEditCount( editCount );
scriptData.isGloballyBlocked = data.query.globalblocks.length;
if ( scriptData.isGloballyBlocked ) {
scriptData.globalBlockTarget = data.query.globalblocks[ 0 ].address;
}
} else {
scriptData.gender = data.query.users[ 0 ].gender;
if ( data.query.users[ 0 ].registration ) {
scriptData.regDate =
await formatDate( data.query.users[ 0 ].registration, true );
} else if ( data.query.usercontribs[ 0 ] ) {
scriptData.regDate =
await formatDate( data.query.usercontribs[ 0 ].timestamp, true );
} else {
scriptData.regDate = i18n( 'regUnknown' );
}
scriptData.editCount = data.query.users[ 0 ].editcount.toLocaleString();
const localGroups =
data.query.users[ 0 ].groupmemberships.map( item => item.group );
scriptData.localGroups = await renderGroups( localGroups );
if ( data.query.globaluserinfo.groups ) {
const globalGroups = data.query.globaluserinfo.groups.filter(
item => !localGroups.includes( item )
);
scriptData.globalGroups = await renderGroups( globalGroups );
scriptData.isLocked = data.query.globaluserinfo.locked === '';
}
}
const blocks = data.query.blocks;
scriptData.isBlocked = blocks.length;
if ( scriptData.isBlocked ) {
if ( isAnon && blocks[ 0 ].user !== username && blocks[ 1 ] ) {
blocks.shift();
}
scriptData.isPartiallyBlocked = blocks[ 0 ].partial === '';
scriptData.isRangeBlocked = isAnon && blocks[ 0 ].user !== username;
if ( scriptData.isRangeBlocked ) {
scriptData.rangeBlockTarget = blocks[ 0 ].user;
}
} else if ( data.query.logevents.length ) {
scriptData.lastBlockDate =
await formatDate( data.query.logevents[ 0 ].timestamp, false );
}
}
async function renderAnonEditCount( editCount ) {
if ( editCount < 500 ) {
return editCount.toLocaleString();
}
await mw.loader.using( 'mediawiki.user' );
const rights = await mw.user.getRights();
const maxAnonEditCount = rights.includes( 'apihighlimits' ) ? 5000 : 500;
if ( editCount === maxAnonEditCount ) {
return `${ editCount.toLocaleString() }+`;
} else {
return editCount.toLocaleString();
}
}
async function renderGroups( groups ) {
if ( groups.length === 0 ) {
return '';
}
let sysMsgGroups = '';
groups.forEach( ( group, index ) => {
sysMsgGroups += `{${ '{' }int:group-${ group }}}`;
if ( index < groups.length - 1 ) {
sysMsgGroups += ', ';
}
} );
const params = {
action: 'parse',
uselang: scriptData.lang,
text: sysMsgGroups,
prop: 'text',
contentmodel: 'wikitext',
disablelimitreport: true
};
const data = await api.get( params );
return $( data.parse.text[ '*' ] ).find( 'p' ).text().trim();
}
async function formatDate( timestamp, includeDay ) {
await mw.loader.using( 'mediawiki.language.months' );
const date = new Date( timestamp );
const monthName = mw.language.months.names[ date.getMonth() ];
const monthNameGen = mw.language.months.genitive[ date.getMonth() ];
const year = date.getFullYear();
if ( includeDay ) {
const day = date.getDate();
await mw.loader.using( 'user.options' );
if ( mw.user.options.get( 'date' ) === 'mdy' ) {
return `${ monthName } ${ day }, ${ year }`;
} else {
return `${ day } ${ monthNameGen } ${ year }`;
}
} else {
return `${ monthName } ${ year }`;
}
}
function fillPopupContent() {
const $container = $( '<aside>' ).attr( 'id', 'transparansi-pengguna-content' );
const $header = $( '<header>' ).attr( 'id', 'transparansi-pengguna-header' );
$header.append(
$( '<bdi>' )
.attr( 'id', 'transparansi-pengguna-username' )
.text( mw.util.prettifyIP( username ) )
);
const $ul = $( '<ul>' ).attr( 'id', 'transparansi-pengguna-list' );
$container.append( $header, $ul );
if ( !isAnon ) {
addListItem( $ul, i18n( 'joined' ), scriptData.regDate );
}
const editCounterUrl =
`https://xtools.wmcloud.org/ec/${ mw.config.get( 'wgServerName' ) }/${ encodeURIComponent( username ) }`;
addListItem(
$ul,
i18n( 'editCount' ),
`<a target="_blank" href="${ editCounterUrl }">${ scriptData.editCount }</a>`
);
const contribsUrl = mw.util.getUrl( `Special:Contributions/${ username }` );
let lastEditedText;
if ( scriptData.editCount === ( 0 ).toLocaleString() ) {
lastEditedText = i18n( 'lastEditedNever' );
} else if ( scriptData.secsFromLastEdit === null ) {
lastEditedText = i18n( 'lastEditedUnknown' );
} else {
lastEditedText = i18n( 'ago' ).replace( '$1', calcTimeFromLastEdit() );
}
addListItem(
$ul,
i18n( 'lastEdited' ),
`<a href="${ contribsUrl }">${ lastEditedText }</a>`
);
if ( !isAnon ) {
const localGroupsUrl = mw.util.getUrl( `Special:UserRights/${ username }` );
const globalGroupsUrl =
mw.util.getUrl( `m:Special:GlobalUserRights/${ username }` );
let groupsHtml;
if ( !scriptData.localGroups && !scriptData.globalGroups ) {
groupsHtml =
`<a href="${ localGroupsUrl }">${ i18n( 'noGroups' ) }</a>`;
}
if ( scriptData.localGroups && !scriptData.globalGroups ) {
groupsHtml =
`<a href="${ localGroupsUrl }">${ scriptData.localGroups }</a>`;
}
if ( !scriptData.localGroups && scriptData.globalGroups ) {
groupsHtml =
`<a href="${ globalGroupsUrl }">${ scriptData.globalGroups }</a>`;
}
if ( scriptData.localGroups && scriptData.globalGroups ) {
groupsHtml =
`<a href="${ localGroupsUrl }">${ scriptData.localGroups }</a>,
<a href="${ globalGroupsUrl }">${ scriptData.globalGroups }</a>`;
}
addListItem( $ul, i18n( 'groups' ), groupsHtml );
}
let lastBlockText;
let blockLogUrl = mw.util.getUrl( 'Special:Log', {
type: 'block',
page: `User:${ username }`
} );
if ( scriptData.isGloballyBlocked ) {
lastBlockText = i18n( 'globallyBlocked' );
blockLogUrl = mw.util.getUrl( 'm:Special:Log', {
type: 'gblblock',
page: `User:${ scriptData.globalBlockTarget }`
} );
} else if ( scriptData.isLocked ) {
lastBlockText = i18n( 'globallyLocked' );
blockLogUrl = mw.util.getUrl( 'm:Special:Log', {
type: 'globalauth',
page: `User:${ username }@global`
} );
} else if ( scriptData.isBlocked ) {
if ( scriptData.isRangeBlocked ) {
if ( scriptData.isPartiallyBlocked ) {
lastBlockText = i18n( 'rangeBlockedPartially' );
} else {
lastBlockText = i18n( 'rangeBlockedFully' );
}
blockLogUrl = mw.util.getUrl( 'Special:Log', {
type: 'block',
page: `User:${ scriptData.rangeBlockTarget }`
} );
} else {
if ( scriptData.isPartiallyBlocked ) {
lastBlockText = i18n( 'partiallyBlocked' );
} else {
lastBlockText = i18n( 'fullyBlocked' );
}
}
} else {
lastBlockText = scriptData.lastBlockDate || i18n( 'neverBlocked' );
}
addListItem(
$ul,
i18n( 'lastBlocked' ),
`<a href="${ blockLogUrl }">${ lastBlockText }</a>`
);
if ( !isAnon && scriptData.gender !== 'unknown' ) {
const images = {
female: {
alt: i18n( 'femaleSymbolAlt' ),
path: 'https://upload.wikimedia.org/wikipedia/commons/archive/1/1d/20240712201036!Venus_symbol_(light_pink).svg'
},
male: {
alt: i18n( 'maleSymbolAlt' ),
path: 'https://upload.wikimedia.org/wikipedia/commons/archive/b/b4/20240624040032!Mars_symbol_(bold_light_blue).svg'
}
};
$( '<img>' ).attr( {
alt: images[ scriptData.gender ].alt,
id: 'transparansi-pengguna-gender-symbol',
src: images[ scriptData.gender ].path,
width: '16.6',
height: '16.6'
} ).appendTo( $header );
}
scriptData.$popupPlaceholder.replaceWith( $container );
}
function addListItem( $ul, property, value ) {
const $li = $( '<li>' );
const $property = $( '<span>' )
.addClass( 'transparansi-pengguna-property' )
.text( property );
const $value = $( '<span>' )
.addClass( 'transparansi-pengguna-value' )
.html( value );
$li.append( $property, ' ', $value ).appendTo( $ul );
}
function calcTimeFromLastEdit() {
const secs = scriptData.secsFromLastEdit;
const days = secs / 60 / 60 / 24;
if ( secs < 60 ) {
let fullSecs = Math.floor( secs );
if ( fullSecs < 1 ) {
fullSecs = 1;
}
const secsArrLength = i18n( 'seconds' ).length;
if ( fullSecs < secsArrLength ) {
return i18n( 'seconds' )[ fullSecs - 1 ];
} else {
return i18n( 'seconds' )[ secsArrLength - 1 ].replace( '$1', fullSecs );
}
} else if ( secs < 60 * 60 ) {
const fullMins = Math.floor( secs / 60 );
const minsArrLength = i18n( 'minutes' ).length;
if ( fullMins < minsArrLength ) {
return i18n( 'minutes' )[ fullMins - 1 ];
} else {
return i18n( 'minutes' )[ minsArrLength - 1 ].replace( '$1', fullMins );
}
} else if ( secs < 60 * 60 * 24 ) {
const fullHours = Math.floor( secs / 60 / 60 );
const hoursArrLength = i18n( 'hours' ).length;
if ( fullHours < hoursArrLength ) {
return i18n( 'hours' )[ fullHours - 1 ];
} else {
return i18n( 'hours' )[ hoursArrLength - 1 ].replace( '$1', fullHours );
}
} else if ( days < 7 ) {
const fullDays = Math.floor( days );
const daysArrLength = i18n( 'days' ).length;
if ( fullDays < daysArrLength ) {
return i18n( 'days' )[ fullDays - 1 ];
} else {
return i18n( 'days' )[ daysArrLength - 1 ].replace( '$1', fullDays );
}
} else if ( days < 30 ) {
const fullWeeks = Math.floor( days / 7 );
const weeksArrLength = i18n( 'weeks' ).length;
if ( fullWeeks < weeksArrLength ) {
return i18n( 'weeks' )[ fullWeeks - 1 ];
} else {
return i18n( 'weeks' )[ weeksArrLength - 1 ].replace( '$1', fullWeeks );
}
} else if ( days < 365 ) {
let fullMonths = Math.floor( days / 30 );
if ( fullMonths === 12 ) {
fullMonths = 11;
}
const monthsArrLength = i18n( 'months' ).length;
if ( fullMonths < monthsArrLength ) {
return i18n( 'months' )[ fullMonths - 1 ];
} else {
return i18n( 'months' )[ monthsArrLength - 1 ].replace( '$1', fullMonths );
}
} else {
const fullYears = Math.floor( days / 365 );
const yearsArrLength = i18n( 'years' ).length;
if ( fullYears < yearsArrLength ) {
return i18n( 'years' )[ fullYears - 1 ];
} else {
return i18n( 'years' )[ yearsArrLength - 1 ].replace( '$1', fullYears );
}
}
}
} )();
1p820jg9ec43dvcubj669n3a7xag4ej
Pengguna:Sophia Guevara/Tools/Transparansi pengguna.js
0
167008
665586
2025-07-08T10:00:58Z
Sophia Guevara
68565
Sophia Guevara moved page [[Pengguna:Sophia Guevara/Tools/Transparansi pengguna.js]] to [[Pengguna:Sophia Guevara/Tools/Transparansipengguna.js]]
665586
wikitext
text/x-wiki
#REDIRECT [[Pengguna:Sophia Guevara/Tools/Transparansipengguna.js]]
{{Redirect category shell|
{{R from move}}
}}
g70h10delrvvr2dktf61yj8xfkj4h1l
User:Sophia Guevara/Tools/TransparansiPengguna.js
2
167009
665587
2025-07-08T10:03:10Z
Sophia Guevara
68565
Created page with "/* Menambahkan ikon "i" (info) di bagian atas halaman yang terkait dengan pengguna (misalnya halaman pengguna, halaman pembicaraan pengguna, halaman "Kontribusi", dll.) Warna ikon "i" menunjukkan lamanya waktu sejak pengguna terakhir mengedit: * Biru – pengguna terakhir mengedit kurang dari 20 menit yang lalu * Oranye – pengguna terakhir mengedit lebih dari 20 menit yang lalu, tetapi kurang dari 3 bulan yang lalu * Merah – pengguna terakhir mengedit lebih dari 3..."
665587
javascript
text/javascript
/*
Menambahkan ikon "i" (info) di bagian atas halaman yang terkait dengan pengguna (misalnya halaman pengguna, halaman pembicaraan pengguna, halaman "Kontribusi", dll.)
Warna ikon "i" menunjukkan lamanya waktu sejak pengguna terakhir mengedit:
* Biru – pengguna terakhir mengedit kurang dari 20 menit yang lalu
* Oranye – pengguna terakhir mengedit lebih dari 20 menit yang lalu, tetapi kurang dari 3 bulan yang lalu
* Merah – pengguna terakhir mengedit lebih dari 3 bulan yang lalu
Arahkan kursor ke ikon "i" untuk melihat informasi berguna tentang pengguna yang relevan dengan cepat:
* Tanggal pendaftaran
* Jumlah suntingan
* Waktu yang telah berlalu sejak suntingan terakhir
* Kelompok pengguna (hak), termasuk global
* Waktu blokir terbaru (termasuk rentang dan blokir global, jika berlaku)
* Jenis kelamin (jika diungkapkan)
Lihat dokumentasi lengkap di:
[[User:Sophia_Guevara/Tools/Transparansi_pengguna]]
Lihat juga:
* [[Pengguna:Sophia_Guevara/Tools/Transparansi_pengguna.js]] – untuk kode sumber utama skrip
Skin yang didukung:
Vector (baik 2022 maupun 2010), Monobook, Timeless, dan Minerva.
Juga didukung penuh pada antarmuka seluler.
Ketergantungan:
* mediawiki.api
* mediawiki.language.months
* mediawiki.user
* mediawiki.util
* user.options
* oojs-ui-core
Ditulis oleh: [[Pengguna:Sophia Guevara]]
*/
( async () => {
'use strict';
const username = mw.config.get( 'wgRelevantUserName' );
if ( !username || mw.config.get( 'transparansiPenggunaLoaded' ) ) {
return;
}
mw.config.set( 'transparansiPenggunaLoaded', true );
await mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] );
const isAnon = mw.util.isIPAddress( username );
const api = new mw.Api();
async function checkIfUserExists() {
if ( isAnon ) {
return true;
}
const data = await api.get( { list: 'users', ususers: username } );
if ( data.query.users[ 0 ].userid ) {
return true;
}
return false;
}
if ( !( await checkIfUserExists() ) ) {
return;
}
mw.loader.load(
'https://test.wikipedia.org/wiki/User:Sophia_Guevara/Tools/Transparansi_pengguna.css&action=raw&ctype=text/css',
'text/css'
);
const scriptData = {
lang: mw.config.get( 'wgUserLanguage' ),
skin: mw.config.get( 'skin' ),
secsFromLastEdit: await calcSecsFromLastEdit()
};
createInfoIcon();
await $.when( mw.loader.using( 'oojs-ui-core' ), $.ready );
addInfoIconToPage();
attachEventListeners();
function i18n( key ) {
const messages = {
id: {
infoIconAlt: 'Ikon info',
femaleSymbolAlt: 'Perempuan',
maleSymbolAlt: 'Laki-laki',
fetchingData: 'Mengambil data…',
regUnknown: 'Tidak diketahui',
joined: 'Bergabung:',
editCount: 'Kontribusi:',
lastEdited: 'Terakhir diedit:',
lastEditedNever: 'Tidak pernah',
lastEditedUnknown: 'Tidak diketahui',
groups: 'Grup:',
noGroups: 'Tidak ada',
lastBlocked: 'Terakhir diblokir:',
neverBlocked: 'Tidak pernah',
partiallyBlocked: 'Saat ini diblokir (sebagian)',
fullyBlocked: 'Saat ini diblokir',
rangeBlockedPartially: 'Saat ini diblokir suntingannya (sebagian)',
rangeBlockedFully: 'Saat ini diblokir suntingannya',
globallyBlocked: 'Saat ini diblokir secara global',
globallyLocked: 'Saat ini terkunci secara global',
ago: '$1 ago',
seconds: [ '1 detik', '$1 detik yang lalu' ],
minutes: [ '1 menit', '$1 menit yang lalu' ],
hours: [ '1 jam', '$1 jam yang lalu' ],
days: [ '1 hari', '$1 hari yang lalu' ],
weeks: [ '1 minggu', '$1 minggu yang lalu' ],
months: [ '1 bulan', '$1 bulan tang lalu' ],
years: [ '1 tahun', '$1 tahun yang lalu' ]
},
en: {
infoIconAlt: 'Info icon',
femaleSymbolAlt: 'Female',
maleSymbolAlt: 'Male',
fetchingData: 'Fetching data…',
regUnknown: 'Unknown',
joined: 'Joined:',
editCount: 'Edits:',
lastEdited: 'Last edited:',
lastEditedNever: 'Never',
lastEditedUnknown: 'Unknown',
groups: 'Groups:',
noGroups: 'None',
lastBlocked: 'Last blocked:',
neverBlocked: 'Never',
partiallyBlocked: 'Currently blocked (partially)',
fullyBlocked: 'Currently blocked',
rangeBlockedPartially: 'Currently range-blocked (partially)',
rangeBlockedFully: 'Currently range-blocked',
globallyBlocked: 'Currently blocked globally',
globallyLocked: 'Currently locked globally',
ago: '$1 ago',
seconds: [ '1 second', '$1 seconds' ],
minutes: [ '1 minute', '$1 minutes' ],
hours: [ '1 hour', '$1 hours' ],
days: [ '1 day', '$1 days' ],
weeks: [ '1 week', '$1 weeks' ],
months: [ '1 month', '$1 months' ],
years: [ '1 year', '$1 years' ]
}
};
if (
messages[ scriptData.lang ] &&
messages[ scriptData.lang ][ key ]
) {
return messages[ scriptData.lang ][ key ];
} else {
return messages.en[ key ];
}
}
async function calcSecsFromLastEdit() {
const params = {
list: 'usercontribs',
ucuser: username,
ucprop: 'timestamp',
uclimit: 1
};
const data = await api.get( params );
if ( data.query.usercontribs.length === 0 ) {
return null;
}
const lastEditTime =
new Date( data.query.usercontribs[ 0 ].timestamp ).getTime();
return ( mw.now() - lastEditTime ) / 1000;
}
function createInfoIcon() {
const $img = $( '<img>' )
.addClass( 'transparansi-pengguna-icon' )
.attr( {
alt: i18n( 'infoIconAlt' ),
width: '20.3',
height: '20.3'
} );
if ( scriptData.secsFromLastEdit === null ) {
$img
.addClass( 'transparansi-pengguna-grey-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/d/df/Information_grey.svg' );
} else if ( scriptData.secsFromLastEdit < 60 * 20 ) {
$img
.addClass( 'transparansi-pengguna-blue-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/2/28/Information.svg' );
} else if ( scriptData.secsFromLastEdit < 60 * 60 * 24 * 30 * 3 ) {
$img
.addClass( 'transparansi-pengguna-orange-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/f/f0/Information_orange.svg' );
} else {
$img
.addClass( 'transparansi-pengguna-red-icon' )
.attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/5/55/Information_red.svg' );
}
scriptData.$indicator = $( '<div>' )
.addClass( 'mw-indicator' )
.attr( { id: 'mw-indicator-transparansi-pengguna-indicator', tabindex: '0' } )
.append( $img );
}
function addInfoIconToPage() {
const $throbberImg = $( '<img>' ).attr( {
alt: i18n( 'fetchingData' ),
id: 'transparansi-pengguna-throbber',
src: 'https://upload.wikimedia.org/wikipedia/commons/f/f8/Ajax-loader(2).gif'
} );
const $placeholderText = $( '<p>' )
.attr( 'id', 'transparansi-pengguna-placeholder-text' )
.text( i18n( 'fetchingData' ) );
scriptData.$popupPlaceholder = $( '<div>' )
.attr( 'id', 'transparansi-pengguna-placeholder' )
.append( $throbberImg, $placeholderText );
scriptData.popup = new OO.ui.PopupWidget( {
$content: scriptData.$popupPlaceholder,
align: 'backwards',
autoFlip: false,
id: 'transparansi-pengguna-popup',
hideWhenOutOfView: false,
padded: true,
position: 'below',
width: 225
} );
scriptData.$indicator.append( scriptData.popup.$element );
if (
scriptData.skin === 'vector-2022' &&
$( '.vector-page-toolbar-container:has( #ca-nstab-user )' ).length
) {
const $navBtns = $( '#right-navigation > nav:first-of-type' );
if ( $navBtns.length ) {
scriptData.$indicator.insertAfter( $navBtns );
} else {
scriptData.$indicator
.insertBefore( '.vector-page-tools-landmark:has( #vector-page-tools-dropdown )' );
}
} else {
const $indicatorsContainer = $( '.mw-indicators' );
if (
!window.matchMedia( '( orientation: portrait )' ).matches ||
scriptData.skin === 'vector-2022' ||
scriptData.skin === 'vector' ||
( scriptData.skin === 'monobook' && !$( '#sidebar-toggle:visible' ).length )
) {
scriptData.popup.setAlignment( 'forwards' );
scriptData.popup.setPosition( 'before' );
if ( $indicatorsContainer.children( '.mw-indicator' ).length >= 6 ) {
scriptData.popup.setAutoFlip( true );
}
}
if ( scriptData.skin === 'minerva' ) {
scriptData.$indicator
.css( 'float', $( 'body.rtl' ).length ? 'left' : 'right' )
.appendTo( '.header-container' );
} else {
$indicatorsContainer.prepend( scriptData.$indicator );
}
}
}
function attachEventListeners() {
scriptData.popup.on( 'ready', () => {
// Prevent mobile browsers from occasionally jumping
// to the top of the page when tapping the "i" icon.
window.scrollTo( scriptData.posX, scriptData.posY );
if (
document.documentElement.clientWidth < 600 &&
scriptData.skin === 'vector-2022' &&
scriptData.popup.$element.hasClass( 'oo-ui-popupWidget-anchored-top' )
) {
adaptPopupPosition();
}
scriptData.popup.$element.hide().fadeIn();
} );
scriptData.$indicator.on( 'mouseenter focusin keydown', e => {
if ( e.type === 'keydown' ) {
if ( ![ 'Enter', ' ' ].includes( e.key ) ) {
return;
}
if ( e.key === ' ' ) {
e.preventDefault();
}
}
clearTimeout( scriptData.mouseLeaveTimeout );
scriptData.mouseEnterTimeout = setTimeout( openPopup, 200 );
} );
scriptData.$indicator.on( 'mouseleave focusout', () => {
if (
document.activeElement.id === 'mw-indicator-transparansi-pengguna-indicator' ||
document.activeElement.parentElement.classList.contains(
'transparansi-pengguna-value'
)
) {
return;
}
clearTimeout( scriptData.mouseEnterTimeout );
scriptData.mouseLeaveTimeout = setTimeout( closePopup, 2500 );
} );
$( document ).on( 'keydown', e => {
if ( e.key === 'Escape' ) {
closePopup();
}
} );
$( document ).on( 'click', closePopup );
$( '.oo-ui-fieldsetLayout-header, .ext-discussiontools-init-section-bar' )
.on( 'click', closePopup );
scriptData.$indicator.on( 'click', e => e.stopPropagation() );
}
function adaptPopupPosition() {
const innerBody = document.querySelector( '.mw-page-container' );
const innerBodyRect = innerBody.getBoundingClientRect();
const indicator = scriptData.$indicator[ 0 ];
const indicatorRect = indicator.getBoundingClientRect();
const dir = $( 'body.rtl' ).length ? 'left' : 'right';
const pos =
Math.abs( indicatorRect[ dir ] - innerBodyRect[ dir ] ) -
indicator.offsetWidth / 2;
scriptData.popupCss = mw.util.addCSS(
`#transparansi-pengguna-popup { ${ dir }: ${ pos }px !important; }`
);
}
function openPopup() {
if ( !scriptData.popup.isVisible() ) {
// posX and posY are used to prevent mobile browsers from
// occasionally jumping to the top of the page when tapping
// the "i" icon. See the popup's "ready" event listener above.
scriptData.posX = window.scrollX;
scriptData.posY = window.scrollY;
scriptData.popup.toggle( true );
if ( !scriptData.dataFetched ) {
getUserData().then( fillPopupContent );
scriptData.dataFetched = true;
}
}
}
function closePopup() {
clearTimeout( scriptData.mouseLeaveTimeout );
if ( scriptData.popup.isVisible() ) {
scriptData.popup.$element.fadeOut( () => {
scriptData.popup.toggle( false );
scriptData.popup.$element.show();
if ( scriptData.popupCss ) {
scriptData.popupCss.disabled = true;
}
} );
}
}
async function getUserData() {
let params;
if ( isAnon ) {
params = {
list: 'blocks|globalblocks|logevents|usercontribs',
bkip: username,
bkprop: 'flags|user',
bklimit: 2,
bgip: username,
bgprop: 'address',
bglimit: 1,
leaction: 'block/block',
letitle: `User:${ username }`,
leprop: 'timestamp',
lelimit: 1,
ucuser: username,
ucprop: '',
uclimit: 'max'
};
} else {
params = {
list: 'blocks|logevents|usercontribs|users',
meta: 'globaluserinfo',
bkusers: username,
bkprop: 'flags',
bklimit: 1,
leaction: 'block/block',
letitle: `User:${ username }`,
leprop: 'timestamp',
lelimit: 1,
ucuser: username,
ucdir: 'newer',
ucprop: 'timestamp',
uclimit: 1,
ususers: username,
usprop: 'editcount|gender|groupmemberships|registration',
guiuser: username,
guiprop: 'groups'
};
}
const data = await api.get( params );
if ( isAnon ) {
const editCount = data.query.usercontribs.length;
scriptData.editCount = await renderAnonEditCount( editCount );
scriptData.isGloballyBlocked = data.query.globalblocks.length;
if ( scriptData.isGloballyBlocked ) {
scriptData.globalBlockTarget = data.query.globalblocks[ 0 ].address;
}
} else {
scriptData.gender = data.query.users[ 0 ].gender;
if ( data.query.users[ 0 ].registration ) {
scriptData.regDate =
await formatDate( data.query.users[ 0 ].registration, true );
} else if ( data.query.usercontribs[ 0 ] ) {
scriptData.regDate =
await formatDate( data.query.usercontribs[ 0 ].timestamp, true );
} else {
scriptData.regDate = i18n( 'regUnknown' );
}
scriptData.editCount = data.query.users[ 0 ].editcount.toLocaleString();
const localGroups =
data.query.users[ 0 ].groupmemberships.map( item => item.group );
scriptData.localGroups = await renderGroups( localGroups );
if ( data.query.globaluserinfo.groups ) {
const globalGroups = data.query.globaluserinfo.groups.filter(
item => !localGroups.includes( item )
);
scriptData.globalGroups = await renderGroups( globalGroups );
scriptData.isLocked = data.query.globaluserinfo.locked === '';
}
}
const blocks = data.query.blocks;
scriptData.isBlocked = blocks.length;
if ( scriptData.isBlocked ) {
if ( isAnon && blocks[ 0 ].user !== username && blocks[ 1 ] ) {
blocks.shift();
}
scriptData.isPartiallyBlocked = blocks[ 0 ].partial === '';
scriptData.isRangeBlocked = isAnon && blocks[ 0 ].user !== username;
if ( scriptData.isRangeBlocked ) {
scriptData.rangeBlockTarget = blocks[ 0 ].user;
}
} else if ( data.query.logevents.length ) {
scriptData.lastBlockDate =
await formatDate( data.query.logevents[ 0 ].timestamp, false );
}
}
async function renderAnonEditCount( editCount ) {
if ( editCount < 500 ) {
return editCount.toLocaleString();
}
await mw.loader.using( 'mediawiki.user' );
const rights = await mw.user.getRights();
const maxAnonEditCount = rights.includes( 'apihighlimits' ) ? 5000 : 500;
if ( editCount === maxAnonEditCount ) {
return `${ editCount.toLocaleString() }+`;
} else {
return editCount.toLocaleString();
}
}
async function renderGroups( groups ) {
if ( groups.length === 0 ) {
return '';
}
let sysMsgGroups = '';
groups.forEach( ( group, index ) => {
sysMsgGroups += `{${ '{' }int:group-${ group }}}`;
if ( index < groups.length - 1 ) {
sysMsgGroups += ', ';
}
} );
const params = {
action: 'parse',
uselang: scriptData.lang,
text: sysMsgGroups,
prop: 'text',
contentmodel: 'wikitext',
disablelimitreport: true
};
const data = await api.get( params );
return $( data.parse.text[ '*' ] ).find( 'p' ).text().trim();
}
async function formatDate( timestamp, includeDay ) {
await mw.loader.using( 'mediawiki.language.months' );
const date = new Date( timestamp );
const monthName = mw.language.months.names[ date.getMonth() ];
const monthNameGen = mw.language.months.genitive[ date.getMonth() ];
const year = date.getFullYear();
if ( includeDay ) {
const day = date.getDate();
await mw.loader.using( 'user.options' );
if ( mw.user.options.get( 'date' ) === 'mdy' ) {
return `${ monthName } ${ day }, ${ year }`;
} else {
return `${ day } ${ monthNameGen } ${ year }`;
}
} else {
return `${ monthName } ${ year }`;
}
}
function fillPopupContent() {
const $container = $( '<aside>' ).attr( 'id', 'transparansi-pengguna-content' );
const $header = $( '<header>' ).attr( 'id', 'transparansi-pengguna-header' );
$header.append(
$( '<bdi>' )
.attr( 'id', 'transparansi-pengguna-username' )
.text( mw.util.prettifyIP( username ) )
);
const $ul = $( '<ul>' ).attr( 'id', 'transparansi-pengguna-list' );
$container.append( $header, $ul );
if ( !isAnon ) {
addListItem( $ul, i18n( 'joined' ), scriptData.regDate );
}
const editCounterUrl =
`https://xtools.wmcloud.org/ec/${ mw.config.get( 'wgServerName' ) }/${ encodeURIComponent( username ) }`;
addListItem(
$ul,
i18n( 'editCount' ),
`<a target="_blank" href="${ editCounterUrl }">${ scriptData.editCount }</a>`
);
const contribsUrl = mw.util.getUrl( `Special:Contributions/${ username }` );
let lastEditedText;
if ( scriptData.editCount === ( 0 ).toLocaleString() ) {
lastEditedText = i18n( 'lastEditedNever' );
} else if ( scriptData.secsFromLastEdit === null ) {
lastEditedText = i18n( 'lastEditedUnknown' );
} else {
lastEditedText = i18n( 'ago' ).replace( '$1', calcTimeFromLastEdit() );
}
addListItem(
$ul,
i18n( 'lastEdited' ),
`<a href="${ contribsUrl }">${ lastEditedText }</a>`
);
if ( !isAnon ) {
const localGroupsUrl = mw.util.getUrl( `Special:UserRights/${ username }` );
const globalGroupsUrl =
mw.util.getUrl( `m:Special:GlobalUserRights/${ username }` );
let groupsHtml;
if ( !scriptData.localGroups && !scriptData.globalGroups ) {
groupsHtml =
`<a href="${ localGroupsUrl }">${ i18n( 'noGroups' ) }</a>`;
}
if ( scriptData.localGroups && !scriptData.globalGroups ) {
groupsHtml =
`<a href="${ localGroupsUrl }">${ scriptData.localGroups }</a>`;
}
if ( !scriptData.localGroups && scriptData.globalGroups ) {
groupsHtml =
`<a href="${ globalGroupsUrl }">${ scriptData.globalGroups }</a>`;
}
if ( scriptData.localGroups && scriptData.globalGroups ) {
groupsHtml =
`<a href="${ localGroupsUrl }">${ scriptData.localGroups }</a>,
<a href="${ globalGroupsUrl }">${ scriptData.globalGroups }</a>`;
}
addListItem( $ul, i18n( 'groups' ), groupsHtml );
}
let lastBlockText;
let blockLogUrl = mw.util.getUrl( 'Special:Log', {
type: 'block',
page: `User:${ username }`
} );
if ( scriptData.isGloballyBlocked ) {
lastBlockText = i18n( 'globallyBlocked' );
blockLogUrl = mw.util.getUrl( 'm:Special:Log', {
type: 'gblblock',
page: `User:${ scriptData.globalBlockTarget }`
} );
} else if ( scriptData.isLocked ) {
lastBlockText = i18n( 'globallyLocked' );
blockLogUrl = mw.util.getUrl( 'm:Special:Log', {
type: 'globalauth',
page: `User:${ username }@global`
} );
} else if ( scriptData.isBlocked ) {
if ( scriptData.isRangeBlocked ) {
if ( scriptData.isPartiallyBlocked ) {
lastBlockText = i18n( 'rangeBlockedPartially' );
} else {
lastBlockText = i18n( 'rangeBlockedFully' );
}
blockLogUrl = mw.util.getUrl( 'Special:Log', {
type: 'block',
page: `User:${ scriptData.rangeBlockTarget }`
} );
} else {
if ( scriptData.isPartiallyBlocked ) {
lastBlockText = i18n( 'partiallyBlocked' );
} else {
lastBlockText = i18n( 'fullyBlocked' );
}
}
} else {
lastBlockText = scriptData.lastBlockDate || i18n( 'neverBlocked' );
}
addListItem(
$ul,
i18n( 'lastBlocked' ),
`<a href="${ blockLogUrl }">${ lastBlockText }</a>`
);
if ( !isAnon && scriptData.gender !== 'unknown' ) {
const images = {
female: {
alt: i18n( 'femaleSymbolAlt' ),
path: 'https://upload.wikimedia.org/wikipedia/commons/archive/1/1d/20240712201036!Venus_symbol_(light_pink).svg'
},
male: {
alt: i18n( 'maleSymbolAlt' ),
path: 'https://upload.wikimedia.org/wikipedia/commons/archive/b/b4/20240624040032!Mars_symbol_(bold_light_blue).svg'
}
};
$( '<img>' ).attr( {
alt: images[ scriptData.gender ].alt,
id: 'transparansi-pengguna-gender-symbol',
src: images[ scriptData.gender ].path,
width: '16.6',
height: '16.6'
} ).appendTo( $header );
}
scriptData.$popupPlaceholder.replaceWith( $container );
}
function addListItem( $ul, property, value ) {
const $li = $( '<li>' );
const $property = $( '<span>' )
.addClass( 'transparansi-pengguna-property' )
.text( property );
const $value = $( '<span>' )
.addClass( 'transparansi-pengguna-value' )
.html( value );
$li.append( $property, ' ', $value ).appendTo( $ul );
}
function calcTimeFromLastEdit() {
const secs = scriptData.secsFromLastEdit;
const days = secs / 60 / 60 / 24;
if ( secs < 60 ) {
let fullSecs = Math.floor( secs );
if ( fullSecs < 1 ) {
fullSecs = 1;
}
const secsArrLength = i18n( 'seconds' ).length;
if ( fullSecs < secsArrLength ) {
return i18n( 'seconds' )[ fullSecs - 1 ];
} else {
return i18n( 'seconds' )[ secsArrLength - 1 ].replace( '$1', fullSecs );
}
} else if ( secs < 60 * 60 ) {
const fullMins = Math.floor( secs / 60 );
const minsArrLength = i18n( 'minutes' ).length;
if ( fullMins < minsArrLength ) {
return i18n( 'minutes' )[ fullMins - 1 ];
} else {
return i18n( 'minutes' )[ minsArrLength - 1 ].replace( '$1', fullMins );
}
} else if ( secs < 60 * 60 * 24 ) {
const fullHours = Math.floor( secs / 60 / 60 );
const hoursArrLength = i18n( 'hours' ).length;
if ( fullHours < hoursArrLength ) {
return i18n( 'hours' )[ fullHours - 1 ];
} else {
return i18n( 'hours' )[ hoursArrLength - 1 ].replace( '$1', fullHours );
}
} else if ( days < 7 ) {
const fullDays = Math.floor( days );
const daysArrLength = i18n( 'days' ).length;
if ( fullDays < daysArrLength ) {
return i18n( 'days' )[ fullDays - 1 ];
} else {
return i18n( 'days' )[ daysArrLength - 1 ].replace( '$1', fullDays );
}
} else if ( days < 30 ) {
const fullWeeks = Math.floor( days / 7 );
const weeksArrLength = i18n( 'weeks' ).length;
if ( fullWeeks < weeksArrLength ) {
return i18n( 'weeks' )[ fullWeeks - 1 ];
} else {
return i18n( 'weeks' )[ weeksArrLength - 1 ].replace( '$1', fullWeeks );
}
} else if ( days < 365 ) {
let fullMonths = Math.floor( days / 30 );
if ( fullMonths === 12 ) {
fullMonths = 11;
}
const monthsArrLength = i18n( 'months' ).length;
if ( fullMonths < monthsArrLength ) {
return i18n( 'months' )[ fullMonths - 1 ];
} else {
return i18n( 'months' )[ monthsArrLength - 1 ].replace( '$1', fullMonths );
}
} else {
const fullYears = Math.floor( days / 365 );
const yearsArrLength = i18n( 'years' ).length;
if ( fullYears < yearsArrLength ) {
return i18n( 'years' )[ fullYears - 1 ];
} else {
return i18n( 'years' )[ yearsArrLength - 1 ].replace( '$1', fullYears );
}
}
}
} )();
1p820jg9ec43dvcubj669n3a7xag4ej
Pengguna:Sophia Guevara/Tools/Transparansipengguna.js
0
167010
665589
2025-07-08T10:05:26Z
Sophia Guevara
68565
Sophia Guevara moved page [[Pengguna:Sophia Guevara/Tools/Transparansipengguna.js]] to [[Pengguna:Sophia Guevara/Tools/Transparansi pengguna]]: move to template
665589
wikitext
text/x-wiki
#REDIRECT [[Pengguna:Sophia Guevara/Tools/Transparansi pengguna]]
{{Redirect category shell|
{{R from move}}
}}
kshofss8540w7qpyhrowwznv0g96y35