Initial commit

master
dsc 3 years ago
commit bcdc8a8f8d

@ -0,0 +1,38 @@
cmake_minimum_required(VERSION 3.13)
project(conversations)
message(STATUS "Initiating compile using CMake ${CMAKE_VERSION}")
set(VERSION_MAJOR "1")
set(VERSION_MINOR "1")
set(VERSION_REVISION "0")
# add `cmake` directory as cmake module path
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake")
set(THREADS_PREFER_PTHREAD_FLAG ON)
include(VersionConversations)
set(CMAKE_CXX_STANDARD 14)
include(FindCcache)
include(CheckIncludeFiles)
include(CheckFunctionExists)
#include(CheckSymbolExists)
# Find X11
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CMAKE_SKIP_RPATH ON)
endif()
find_package(X11 REQUIRED)
message(STATUS "X11_FOUND = ${X11_FOUND}")
message(STATUS "X11_INCLUDE_DIR = ${X11_INCLUDE_DIR}")
message(STATUS "X11_LIBRARIES = ${X11_LIBRARIES}")
include_directories(${X11_INCLUDE_DIR})
link_directories(${X11_LIBRARIES})
# Find pthread
find_package(Threads REQUIRED)
add_subdirectory(src)

@ -0,0 +1,23 @@
## Conversations
op maemo:
```
sudo apt install -y libqt5svg5-dev en nog wat meer dingen
```
Als user (uid 1000) anders gaat 'ie zeuren :P
```bash
cmake -Bbuild .
make -Cbuild -j2
./build/bin/conversations
```
### remote debug (dev)
Since we run as root we need env. variables:
```
QTWEBENGINE_DISABLE_SANDBOX=1
DISPLAY=:0.0
```

@ -0,0 +1,80 @@
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
# PNG
find_package(ZLIB REQUIRED)
find_package(PNG REQUIRED)
# the source files
file(GLOB SOURCE_FILES
"*.h"
"*.cpp"
"lib/*.h"
"lib/*.cpp"
)
find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Network Svg Xml WebEngineWidgets WebChannel)
qt5_add_resources(RESOURCES assets.qrc assets/images/flags/flags.qrc)
set(EXECUTABLE_FLAG)
add_executable(conversations ${EXECUTABLE_FLAG} main.cpp
${SOURCE_FILES}
${RESOURCES}
)
set_property(TARGET conversations PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
target_include_directories(conversations PUBLIC ${Qt5Gui_PRIVATE_INCLUDE_DIRS})
target_include_directories(conversations PUBLIC
${CMAKE_SOURCE_DIR}/src
${X11_INCLUDE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${Qt5Core_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
${Qt5Gui_INCLUDE_DIRS}
${Qt5Network_INCLUDE_DIRS}
${Qt5Svg_INCLUDE_DIRS}
${Qt5Xml_INCLUDE_DIRS}
)
add_definitions(${QT_DEFINITIONS})
if(NOT "${CMAKE_BUILD_TYPE}" EQUAL "Debug")
add_definitions(-DQT_NO_DEBUG)
endif()
target_compile_definitions(conversations
PUBLIC
${Qt5Core_DEFINITIONS}
${Qt5Widgets_DEFINITIONS}
${Qt5Gui_DEFINITIONS}
${Qt5Network_DEFINITIONS}
${Qt5Svg_DEFINITIONS}
${Qt5Xml_DEFINITIONS}
)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
target_link_libraries(conversations PUBLIC
${CMAKE_DL_LIBS}
Qt5::Core
Qt5::Widgets
Qt5::Gui
Qt5::Network
Qt5::Svg
Qt5::Xml
Qt5::WebEngineWidgets
Qt5::WebChannel
Threads::Threads
)
if(X11_FOUND)
target_link_libraries(conversations PUBLIC ${X11_LIBRARIES})
endif()
install(TARGETS conversations
DESTINATION ${CMAKE_INSTALL_PREFIX}
)

@ -0,0 +1,10 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/">
<file>assets/appicon.icns</file>
<file>assets/country-codes.csv</file>
<file alias="chat/colors.css">assets/html/chat/colors.css</file>
<file alias="chat/conversation.html">assets/html/chat/SMSConversation.html</file>
<file alias="chat/conversation.css">assets/html/chat/SMSConversation.css</file>
<file alias="chat/conversation.js">assets/html/chat/SMSConversation.js</file>
</qresource>
</RCC>

Binary file not shown.

@ -0,0 +1,239 @@
TPE|TWN|TW||Taiwan|.tw|zh,nan,hak|zh-TW|
AFG|AFG|AF|AFN|Afghanistan|.af|ps,uz-AF,tk|fa-AF|Asia
ALB|ALB|AL|ALL|Albania|.al|sq,el||Europe
ALG|DZA|DZ|DZD|Algeria|.dz||ar-DZ|Africa
ASA|ASM|AS|USD|American Samoa|.as|sm,to|en-AS|Oceania
AND|AND|AD|EUR|Andorra|.ad|ca||Europe
ANG|AGO|AO|AOA|Angola|.ao||pt-AO|Africa
AIA|AIA|AI|XCD|Anguilla|.ai||en-AI|Americas
ROS|ATA|AQ||Antarctica|.aq|||
ATG|ATG|AG|XCD|Antigua & Barbuda|.ag||en-AG|Americas
ARG|ARG|AR|ARS|Argentina|.ar|en,it,de,fr,gn|es-AR|Americas
ARM|ARM|AM|AMD|Armenia|.am|hy||Asia
ARU|ABW|AW|AWG|Aruba|.aw|pap,es,en|nl-AW|Americas
AUS|AUS|AU|AUD|Australia|.au||en-AU|Oceania
AUT|AUT|AT|EUR|Austria|.at|hr,hu,sl|de-AT|Europe
AZE|AZE|AZ|AZN|Azerbaijan|.az|az,ru,hy||Asia
BAH|BHS|BS|BSD|Bahamas|.bs||en-BS|Americas
BHR|BHR|BH|BHD|Bahrain|.bh|en,fa,ur|ar-BH|Asia
BAN|BGD|BD|BDT|Bangladesh|.bd|en|bn-BD|Asia
BRB|BRB|BB|BBD|Barbados|.bb||en-BB|Americas
BLR|BLR|BY|BYN|Belarus|.by|be,ru||Europe
BEL|BEL|BE|EUR|Belgium|.be|fr-BE,de-BE|nl-BE|Europe
BLZ|BLZ|BZ|BZD|Belize|.bz|es|en-BZ|Americas
BEN|BEN|BJ|XOF|Benin|.bj||fr-BJ|Africa
BER|BMU|BM|BMD|Bermuda|.bm|pt|en-BM|Americas
BHU|BTN|BT|INR,BTN|Bhutan|.bt|dz||Asia
BOL|BOL|BO|BOB|Bolivia|.bo|qu,ay|es-BO|Americas
ANT|BES|BQ|USD|Caribbean Netherlands|.bq|nl,pap,en||Americas
BIH|BIH|BA|BAM|Bosnia|.ba|bs,hr-BA,sr-BA||Europe
BOT|BWA|BW|BWP|Botswana|.bw|tn-BW|en-BW|Africa
BRA|BRA|BR|BRL|Brazil|.br|es,en,fr|pt-BR|Americas
VGB|VGB|VG|USD|British Virgin Islands|.vg||en-VG|Americas
BRU|BRN|BN|BND|Brunei|.bn|en-BN|ms-BN|Asia
BUL|BGR|BG|BGN|Bulgaria|.bg|bg,tr-BG,rom||Europe
BFA|BFA|BF|XOF|Burkina Faso|.bf|mos|fr-BF|Africa
BDI|BDI|BI|BIF|Burundi|.bi|rn|fr-BI|Africa
CPV|CPV|CV|CVE|Cape Verde|.cv||pt-CV|Africa
CAM|KHM|KH|KHR|Cambodia|.kh|km,fr,en||Asia
CMR|CMR|CM|XAF|Cameroon|.cm|fr-CM|en-CM|Africa
CAN|CAN|CA|CAD|Canada|.ca|fr-CA,iu|en-CA|Americas
CAY|CYM|KY|KYD|Cayman Islands|.ky||en-KY|Americas
CTA|CAF|CF|XAF|Central African Republic|.cf|sg,ln,kg|fr-CF|Africa
CHA|TCD|TD|XAF|Chad|.td|ar-TD,sre|fr-TD|Africa
CHI|CHL|CL|CLP|Chile|.cl||es-CL|Americas
CHN|CHN|CN|CNY|China|.cn|yue,wuu,dta,ug,za|zh-CN|Asia
HKG|HKG|HK|HKD|Hong Kong|.hk|yue,zh,en|zh-HK|Asia
MAC|MAC|MO|MOP|Macau|.mo|zh,zh-MO,pt||Asia
CXR|CXR|CX|AUD|Christmas Island|.cx|en,zh,ms-CC||Oceania
CCK|CCK|CC|AUD|Cocos (Keeling) Islands|.cc|en|ms-CC|Oceania
COL|COL|CO|COP|Colombia|.co||es-CO|Americas
COM|COM|KM|KMF|Comoros|.km|ar,fr-KM||Africa
CGO|COG|CG|XAF|Congo - Brazzaville|.cg|kg,ln-CG|fr-CG|Africa
COK|COK|CK|NZD|Cook Islands|.ck|mi|en-CK|Oceania
CRC|CRI|CR|CRC|Costa Rica|.cr|en|es-CR|Americas
CRO|HRV|HR|HRK|Croatia|.hr|sr|hr-HR|Europe
CUB|CUB|CU|CUP,CUC|Cuba|.cu|pap|es-CU|Americas
CYP|CYP|CY|EUR|Cyprus|.cy|tr-CY,en|el-CY|Asia
CZE|CZE|CZ|CZK|Czechia|.cz|cs,sk||Europe
CIV|CIV|CI|XOF|Côte dIvoire|.ci||fr-CI|Africa
PRK|PRK|KP|KPW|North Korea|.kp||ko-KP|Asia
COD|COD|CD|CDF|Congo - Kinshasa|.cd|ln,ktu,kg,sw,lua|fr-CD|Africa
DEN|DNK|DK|DKK|Denmark|.dk|en,fo,de-DK|da-DK|Europe
DJI|DJI|DJ|DJF|Djibouti|.dj|ar,so-DJ,aa|fr-DJ|Africa
DMA|DMA|DM|XCD|Dominica|.dm||en-DM|Americas
DOM|DOM|DO|DOP|Dominican Republic|.do||es-DO|Americas
ECU|ECU|EC|USD|Ecuador|.ec||es-EC|Americas
EGY|EGY|EG|EGP|Egypt|.eg|en,fr|ar-EG|Africa
SLV|SLV|SV|SVC,USD|El Salvador|.sv||es-SV|Americas
EQG|GNQ|GQ|XAF|Equatorial Guinea|.gq|fr|es-GQ|Africa
ERI|ERI|ER|ERN|Eritrea|.er|ar,tig,kun,ti-ER|aa-ER|Africa
EST|EST|EE|EUR|Estonia|.ee|et,ru||Europe
SWZ|SWZ|SZ|SZL|Eswatini|.sz|ss-SZ|en-SZ|Africa
ETH|ETH|ET|ETB|Ethiopia|.et|am,en-ET,om-ET,ti-ET,so-ET,sid||Africa
FLK|FLK|FK||Falkland Islands|.fk||en-FK|Americas
FRO|FRO|FO|DKK|Faroe Islands|.fo|fo,da-FO||Europe
FIJ|FJI|FJ|FJD|Fiji|.fj|fj|en-FJ|Oceania
FIN|FIN|FI|EUR|Finland|.fi|sv-FI,smn|fi-FI|Europe
FRA|FRA|FR|EUR|France|.fr|frp,br,co,ca,eu,oc|fr-FR|Europe
GUF|GUF|GF|EUR|French Guiana|.gf||fr-GF|Americas
TAH|PYF|PF|XPF|French Polynesia|.pf|ty|fr-PF|Oceania
GAB|GAB|GA|XAF|Gabon|.ga||fr-GA|Africa
GAM|GMB|GM|GMD|Gambia|.gm|mnk,wof,wo,ff|en-GM|Africa
GEO|GEO|GE|GEL|Georgia|.ge|ka,ru,hy,az||Asia
GER|DEU|DE|EUR|Germany|.de|de||Europe
GHA|GHA|GH|GHS|Ghana|.gh|ak,ee,tw|en-GH|Africa
GBZ|GIB|GI|GIP|Gibraltar|.gi|es,it,pt|en-GI|Europe
GRE|GRC|GR|EUR|Greece|.gr|en,fr|el-GR|Europe
GRL|GRL|GL|DKK|Greenland|.gl|kl,da-GL,en||Americas
GRN|GRD|GD|XCD|Grenada|.gd||en-GD|Americas
GLP|GLP|GP|EUR|Guadeloupe|.gp||fr-GP|Americas
GUM|GUM|GU|USD|Guam|.gu|ch-GU|en-GU|Oceania
GUA|GTM|GT|GTQ|Guatemala|.gt||es-GT|Americas
GBG|GGY|GG|GBP|Guernsey|.gg|en,nrf||Europe
GUI|GIN|GN|GNF|Guinea|.gn||fr-GN|Africa
GNB|GNB|GW|XOF|Guinea-Bissau|.gw|pov|pt-GW|Africa
GUY|GUY|GY|GYD|Guyana|.gy||en-GY|Americas
HAI|HTI|HT|HTG,USD|Haiti|.ht|ht,fr-HT||Americas
VAT|VAT|VA|EUR|Vatican City|.va|la,it,fr||Europe
HON|HND|HN|HNL|Honduras|.hn|cab,miq|es-HN|Americas
HUN|HUN|HU|HUF|Hungary|.hu||hu-HU|Europe
ISL|ISL|IS|ISK|Iceland|.is|is,en,de,da,sv,no||Europe
IND|IND|IN|INR|India|.in|hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc|en-IN|Asia
IDN|IDN|ID|IDR|Indonesia|.id|id,en,nl,jv||Asia
IRN|IRN|IR|IRR|Iran|.ir|ku|fa-IR|Asia
IRQ|IRQ|IQ|IQD|Iraq|.iq|ku,hy|ar-IQ|Asia
IRL|IRL|IE|EUR|Ireland|.ie|ga-IE|en-IE|Europe
GBM|IMN|IM|GBP|Isle of Man|.im|en,gv||Europe
ISR|ISR|IL|ILS|Israel|.il|he,ar-IL,en-IL,||Asia
ITA|ITA|IT|EUR|Italy|.it|de-IT,fr-IT,sc,ca,co,sl|it-IT|Europe
JAM|JAM|JM|JMD|Jamaica|.jm||en-JM|Americas
JPN|JPN|JP|JPY|Japan|.jp|ja||Asia
GBJ|JEY|JE|GBP|Jersey|.je|en,fr,nrf||Europe
JOR|JOR|JO|JOD|Jordan|.jo|en|ar-JO|Asia
KAZ|KAZ|KZ|KZT|Kazakhstan|.kz|kk,ru||Asia
KEN|KEN|KE|KES|Kenya|.ke|sw-KE|en-KE|Africa
KIR|KIR|KI|AUD|Kiribati|.ki|gil|en-KI|Oceania
KUW|KWT|KW|KWD|Kuwait|.kw|en|ar-KW|Asia
KGZ|KGZ|KG|KGS|Kyrgyzstan|.kg|ky,uz,ru||Asia
LAO|LAO|LA|LAK|Laos|.la|lo,fr,en||Asia
LVA|LVA|LV|EUR|Latvia|.lv|lv,ru,lt||Europe
LIB|LBN|LB|LBP|Lebanon|.lb|fr-LB,en,hy|ar-LB|Asia
LES|LSO|LS|LSL,ZAR|Lesotho|.ls|st,zu,xh|en-LS|Africa
LBR|LBR|LR|LRD|Liberia|.lr||en-LR|Africa
LBY|LBY|LY|LYD|Libya|.ly|it,en|ar-LY|Africa
LIE|LIE|LI|CHF|Liechtenstein|.li||de-LI|Europe
LTU|LTU|LT|EUR|Lithuania|.lt|lt,ru,pl||Europe
LUX|LUX|LU|EUR|Luxembourg|.lu|lb,de-LU,fr-LU||Europe
MAD|MDG|MG|MGA|Madagascar|.mg|mg|fr-MG|Africa
MWI|MWI|MW|MWK|Malawi|.mw|ny,yao,tum,swk||Africa
MAS|MYS|MY|MYR|Malaysia|.my|en,zh,ta,te,ml,pa,th|ms-MY|Asia
MDV|MDV|MV|MVR|Maldives|.mv|dv,en||Asia
MLI|MLI|ML|XOF|Mali|.ml|bm|fr-ML|Africa
MLT|MLT|MT|EUR|Malta|.mt|mt,en-MT||Europe
MHL|MHL|MH|USD|Marshall Islands|.mh|mh,en-MH||Oceania
MTQ|MTQ|MQ|EUR|Martinique|.mq||fr-MQ|Americas
MTN|MRT|MR|MRU|Mauritania|.mr|fuc,snk,fr,mey,wo|ar-MR|Africa
MRI|MUS|MU|MUR|Mauritius|.mu|bho,fr|en-MU|Africa
MYT|MYT|YT|EUR|Mayotte|.yt||fr-YT|Africa
MEX|MEX|MX|MXN|Mexico|.mx||es-MX|Americas
FSM|FSM|FM|USD|Micronesia|.fm|chk,pon,yap,kos,uli,woe,nkr,kpg|en-FM|Oceania
MON|MCO|MC|EUR|Monaco|.mc|en,it|fr-MC|Europe
MNG|MNG|MN|MNT|Mongolia|.mn|mn,ru||Asia
MNE|MNE|ME|EUR|Montenegro|.me|sr,hu,bs,sq,hr,rom||Europe
MSR|MSR|MS|XCD|Montserrat|.ms||en-MS|Americas
MAR|MAR|MA|MAD|Morocco|.ma|ber,fr|ar-MA|Africa
MOZ|MOZ|MZ|MZN|Mozambique|.mz|vmw|pt-MZ|Africa
MYA|MMR|MM|MMK|Myanmar|.mm|my||Asia
NAM|NAM|NA|NAD,ZAR|Namibia|.na|af,de,hz,naq|en-NA|Africa
NRU|NRU|NR|AUD|Nauru|.nr|na,en-NR||Oceania
NEP|NPL|NP|NPR|Nepal|.np|ne,en||Asia
NED|NLD|NL|EUR|Netherlands|.nl|fy-NL|nl-NL|Europe
NCL|NCL|NC|XPF|New Caledonia|.nc||fr-NC|Oceania
NZL|NZL|NZ|NZD|New Zealand|.nz|mi|en-NZ|Oceania
NCA|NIC|NI|NIO|Nicaragua|.ni|en|es-NI|Americas
NIG|NER|NE|XOF|Niger|.ne|ha,kr,dje|fr-NE|Africa
NGA|NGA|NG|NGN|Nigeria|.ng|ha,yo,ig,ff|en-NG|Africa
NIU|NIU|NU|NZD|Niue|.nu|niu,en-NU||Oceania
NFK|NFK|NF|AUD|Norfolk Island|.nf||en-NF|Oceania
NMI|MNP|MP|USD|Northern Mariana Islands|.mp|fil,tl,zh,ch-MP,en-MP||Oceania
NOR|NOR|NO|NOK|Norway|.no|no,nb,nn,se,fi||Europe
OMA|OMN|OM|OMR|Oman|.om|en,bal,ur|ar-OM|Asia
PAK|PAK|PK|PKR|Pakistan|.pk|en-PK,pa,sd,ps,brh|ur-PK|Asia
PLW|PLW|PW|USD|Palau|.pw|pau,sov,en-PW,tox,ja,fil,zh||Oceania
PAN|PAN|PA|PAB,USD|Panama|.pa|en|es-PA|Americas
PNG|PNG|PG|PGK|Papua New Guinea|.pg|ho,meu,tpi|en-PG|Oceania
PAR|PRY|PY|PYG|Paraguay|.py|gn|es-PY|Americas
PER|PER|PE|PEN|Peru|.pe|qu,ay|es-PE|Americas
PHI|PHL|PH|PHP|Philippines|.ph|tl,en-PH,fil,ceb,tgl,ilo,hil,war,pam,bik,bcl,pag,mrw,tsg,mdh,cbk,krj,sgd,msb,akl,ibg,yka,mta,abx||Asia
PCN|PCN|PN|NZD|Pitcairn Islands|.pn||en-PN|Oceania
POL|POL|PL|PLN|Poland|.pl|pl||Europe
POR|PRT|PT|EUR|Portugal|.pt|mwl|pt-PT|Europe
PUR|PRI|PR|USD|Puerto Rico|.pr|es-PR|en-PR|Americas
QAT|QAT|QA|QAR|Qatar|.qa|es|ar-QA|Asia
KOR|KOR|KR|KRW|South Korea|.kr|en|ko-KR|Asia
MDA|MDA|MD|MDL|Moldova|.md|ro,ru,gag,tr||Europe
ROU|ROU|RO|RON|Romania|.ro|ro,hu,rom||Europe
RUS|RUS|RU|RUB|Russia|.ru|ru,tt,xal,cau,ady,kv,ce,tyv,cv,udm,tut,mns,bua,myv,mdf,chm,ba,inh,tut,kbd,krc,av,sah,nog||Europe
RWA|RWA|RW|RWF|Rwanda|.rw|rw,en-RW,fr-RW,sw||Africa
REU|REU|RE|EUR|Réunion|.re||fr-RE|Africa
|BLM|BL|EUR|St. Barthélemy|.gp|fr||Americas
SHN|SHN|SH|SHP|St. Helena|.sh||en-SH|Africa
SKN|KNA|KN|XCD|St. Kitts & Nevis|.kn||en-KN|Americas
LCA|LCA|LC|XCD|St. Lucia|.lc||en-LC|Americas
|MAF|MF|EUR|St. Martin|.gp|fr||Americas
SPM|SPM|PM|EUR|St. Pierre & Miquelon|.pm||fr-PM|Americas
VIN|VCT|VC|XCD|St. Vincent & Grenadines|.vc|fr|en-VC|Americas
SAM|WSM|WS|WST|Samoa|.ws|sm,en-WS||Oceania
SMR|SMR|SM|EUR|San Marino|.sm||it-SM|Europe
STP|STP|ST|STN|São Tomé & Príncipe|.st||pt-ST|Africa
KSA|SAU|SA|SAR|Saudi Arabia|.sa||ar-SA|Asia
SEN|SEN|SN|XOF|Senegal|.sn|wo,fuc,mnk|fr-SN|Africa
SRB|SRB|RS|RSD|Serbia|.rs|sr,hu,bs,rom||Europe
SEY|SYC|SC|SCR|Seychelles|.sc|fr-SC|en-SC|Africa
SLE|SLE|SL|SLL|Sierra Leone|.sl|men,tem|en-SL|Africa
SIN|SGP|SG|SGD|Singapore|.sg|cmn,en-SG,ms-SG,ta-SG,zh-SG||Asia
SVK|SVK|SK|EUR|Slovakia|.sk|sk,hu||Europe
SVN|SVN|SI|EUR|Slovenia|.si|sl,sh||Europe
SOL|SLB|SB|SBD|Solomon Islands|.sb|tpi|en-SB|Oceania
SOM|SOM|SO|SOS|Somalia|.so|ar-SO,it,en-SO|so-SO|Africa
RSA|ZAF|ZA|ZAR|South Africa|.za|zu,xh,af,nso,en-ZA,tn,st,ts,ss,ve,nr||Africa
ESP|ESP|ES|EUR|Spain|.es|ca,gl,eu,oc|es-ES|Europe
SRI|LKA|LK|LKR|Sri Lanka|.lk|si,ta,en||Asia
PLE|PSE|PS||Palestine|.ps||ar-PS|Asia
SUD|SDN|SD|SDG|Sudan|.sd|en,fia|ar-SD|Africa
SUR|SUR|SR|SRD|Suriname|.sr|en,srn,hns,jv|nl-SR|Americas
SWE|SWE|SE|SEK|Sweden|.se|se,sma,fi-SE|sv-SE|Europe
SUI|CHE|CH|CHF|Switzerland|.ch|fr-CH,it-CH,rm|de-CH|Europe
SYR|SYR|SY|SYP|Syria|.sy|ku,hy,arc,fr,en|ar-SY|Asia
TJK|TJK|TJ|TJS|Tajikistan|.tj|tg,ru||Asia
THA|THA|TH|THB|Thailand|.th|th,en||Asia
MKD|MKD|MK|MKD|North Macedonia|.mk|mk,sq,tr,rmm,sr||Europe
TLS|TLS|TL|USD|Timor-Leste|.tl|tet,pt-TL,id,en||Asia
TOG|TGO|TG|XOF|Togo|.tg|ee,hna,kbp,dag,ha|fr-TG|Africa
TKL|TKL|TK|NZD|Tokelau|.tk|tkl,en-TK||Oceania
TGA|TON|TO|TOP|Tonga|.to|to,en-TO||Oceania
TRI|TTO|TT|TTD|Trinidad & Tobago|.tt|hns,fr,es,zh|en-TT|Americas
TUN|TUN|TN|TND|Tunisia|.tn|fr|ar-TN|Africa
TUR|TUR|TR|TRY|Turkey|.tr|ku,diq,az,av|tr-TR|Asia
TKM|TKM|TM|TMT|Turkmenistan|.tm|tk,ru,uz||Asia
TCA|TCA|TC|USD|Turks & Caicos Islands|.tc||en-TC|Americas
TUV|TUV|TV|AUD|Tuvalu|.tv|tvl,en,sm,gil||Oceania
UGA|UGA|UG|UGX|Uganda|.ug|lg,sw,ar|en-UG|Africa
UKR|UKR|UA|UAH|Ukraine|.ua|uk,ru-UA,rom,pl,hu||Europe
UAE|ARE|AE|AED|United Arab Emirates|.ae|fa,en,hi,ur|ar-AE|Asia
ENG,NIR,SCO,WAL|GBR|GB|GBP|UK|.uk|cy-GB,gd|en-GB|Europe
TAN|TZA|TZ|TZS|Tanzania|.tz|en,ar|sw-TZ|Africa
VIR|VIR|VI|USD|U.S. Virgin Islands|.vi||en-VI|Americas
USA|USA|US|USD|US|.us|es-US,haw,fr|en-US|Americas
URU|URY|UY|UYU|Uruguay|.uy||es-UY|Americas
UZB|UZB|UZ|UZS|Uzbekistan|.uz|uz,ru,tg||Asia
VAN|VUT|VU|VUV|Vanuatu|.vu|bi,en-VU,fr-VU||Oceania
VEN|VEN|VE|VES|Venezuela|.ve||es-VE|Americas
VIE|VNM|VN|VND|Vietnam|.vn|vi,en,fr,zh,km||Asia
WLF|WLF|WF|XPF|Wallis & Futuna|.wf|wls,fud,fr-WF||Oceania
SAH|ESH|EH|MAD|Western Sahara|.eh|ar,mey||Africa
YEM|YEM|YE|YER|Yemen|.ye||ar-YE|Asia
ZAM|ZMB|ZM|ZMW|Zambia|.zm|bem,loz,lun,lue,ny,toi|en-ZM|Africa
ZIM|ZWE|ZW|ZWL|Zimbabwe|.zw|sn,nr,nd|en-ZW|Africa
ALD|ALA|AX|EUR|Åland Islands|.ax||sv-AX|Europe
1 TPE TWN TW Taiwan .tw zh,nan,hak zh-TW
2 AFG AFG AF AFN Afghanistan .af ps,uz-AF,tk fa-AF Asia
3 ALB ALB AL ALL Albania .al sq,el Europe
4 ALG DZA DZ DZD Algeria .dz ar-DZ Africa
5 ASA ASM AS USD American Samoa .as sm,to en-AS Oceania
6 AND AND AD EUR Andorra .ad ca Europe
7 ANG AGO AO AOA Angola .ao pt-AO Africa
8 AIA AIA AI XCD Anguilla .ai en-AI Americas
9 ROS ATA AQ Antarctica .aq
10 ATG ATG AG XCD Antigua & Barbuda .ag en-AG Americas
11 ARG ARG AR ARS Argentina .ar en,it,de,fr,gn es-AR Americas
12 ARM ARM AM AMD Armenia .am hy Asia
13 ARU ABW AW AWG Aruba .aw pap,es,en nl-AW Americas
14 AUS AUS AU AUD Australia .au en-AU Oceania
15 AUT AUT AT EUR Austria .at hr,hu,sl de-AT Europe
16 AZE AZE AZ AZN Azerbaijan .az az,ru,hy Asia
17 BAH BHS BS BSD Bahamas .bs en-BS Americas
18 BHR BHR BH BHD Bahrain .bh en,fa,ur ar-BH Asia
19 BAN BGD BD BDT Bangladesh .bd en bn-BD Asia
20 BRB BRB BB BBD Barbados .bb en-BB Americas
21 BLR BLR BY BYN Belarus .by be,ru Europe
22 BEL BEL BE EUR Belgium .be fr-BE,de-BE nl-BE Europe
23 BLZ BLZ BZ BZD Belize .bz es en-BZ Americas
24 BEN BEN BJ XOF Benin .bj fr-BJ Africa
25 BER BMU BM BMD Bermuda .bm pt en-BM Americas
26 BHU BTN BT INR,BTN Bhutan .bt dz Asia
27 BOL BOL BO BOB Bolivia .bo qu,ay es-BO Americas
28 ANT BES BQ USD Caribbean Netherlands .bq nl,pap,en Americas
29 BIH BIH BA BAM Bosnia .ba bs,hr-BA,sr-BA Europe
30 BOT BWA BW BWP Botswana .bw tn-BW en-BW Africa
31 BRA BRA BR BRL Brazil .br es,en,fr pt-BR Americas
32 VGB VGB VG USD British Virgin Islands .vg en-VG Americas
33 BRU BRN BN BND Brunei .bn en-BN ms-BN Asia
34 BUL BGR BG BGN Bulgaria .bg bg,tr-BG,rom Europe
35 BFA BFA BF XOF Burkina Faso .bf mos fr-BF Africa
36 BDI BDI BI BIF Burundi .bi rn fr-BI Africa
37 CPV CPV CV CVE Cape Verde .cv pt-CV Africa
38 CAM KHM KH KHR Cambodia .kh km,fr,en Asia
39 CMR CMR CM XAF Cameroon .cm fr-CM en-CM Africa
40 CAN CAN CA CAD Canada .ca fr-CA,iu en-CA Americas
41 CAY CYM KY KYD Cayman Islands .ky en-KY Americas
42 CTA CAF CF XAF Central African Republic .cf sg,ln,kg fr-CF Africa
43 CHA TCD TD XAF Chad .td ar-TD,sre fr-TD Africa
44 CHI CHL CL CLP Chile .cl es-CL Americas
45 CHN CHN CN CNY China .cn yue,wuu,dta,ug,za zh-CN Asia
46 HKG HKG HK HKD Hong Kong .hk yue,zh,en zh-HK Asia
47 MAC MAC MO MOP Macau .mo zh,zh-MO,pt Asia
48 CXR CXR CX AUD Christmas Island .cx en,zh,ms-CC Oceania
49 CCK CCK CC AUD Cocos (Keeling) Islands .cc en ms-CC Oceania
50 COL COL CO COP Colombia .co es-CO Americas
51 COM COM KM KMF Comoros .km ar,fr-KM Africa
52 CGO COG CG XAF Congo - Brazzaville .cg kg,ln-CG fr-CG Africa
53 COK COK CK NZD Cook Islands .ck mi en-CK Oceania
54 CRC CRI CR CRC Costa Rica .cr en es-CR Americas
55 CRO HRV HR HRK Croatia .hr sr hr-HR Europe
56 CUB CUB CU CUP,CUC Cuba .cu pap es-CU Americas
57 CYP CYP CY EUR Cyprus .cy tr-CY,en el-CY Asia
58 CZE CZE CZ CZK Czechia .cz cs,sk Europe
59 CIV CIV CI XOF Côte d’Ivoire .ci fr-CI Africa
60 PRK PRK KP KPW North Korea .kp ko-KP Asia
61 COD COD CD CDF Congo - Kinshasa .cd ln,ktu,kg,sw,lua fr-CD Africa
62 DEN DNK DK DKK Denmark .dk en,fo,de-DK da-DK Europe
63 DJI DJI DJ DJF Djibouti .dj ar,so-DJ,aa fr-DJ Africa
64 DMA DMA DM XCD Dominica .dm en-DM Americas
65 DOM DOM DO DOP Dominican Republic .do es-DO Americas
66 ECU ECU EC USD Ecuador .ec es-EC Americas
67 EGY EGY EG EGP Egypt .eg en,fr ar-EG Africa
68 SLV SLV SV SVC,USD El Salvador .sv es-SV Americas
69 EQG GNQ GQ XAF Equatorial Guinea .gq fr es-GQ Africa
70 ERI ERI ER ERN Eritrea .er ar,tig,kun,ti-ER aa-ER Africa
71 EST EST EE EUR Estonia .ee et,ru Europe
72 SWZ SWZ SZ SZL Eswatini .sz ss-SZ en-SZ Africa
73 ETH ETH ET ETB Ethiopia .et am,en-ET,om-ET,ti-ET,so-ET,sid Africa
74 FLK FLK FK Falkland Islands .fk en-FK Americas
75 FRO FRO FO DKK Faroe Islands .fo fo,da-FO Europe
76 FIJ FJI FJ FJD Fiji .fj fj en-FJ Oceania
77 FIN FIN FI EUR Finland .fi sv-FI,smn fi-FI Europe
78 FRA FRA FR EUR France .fr frp,br,co,ca,eu,oc fr-FR Europe
79 GUF GUF GF EUR French Guiana .gf fr-GF Americas
80 TAH PYF PF XPF French Polynesia .pf ty fr-PF Oceania
81 GAB GAB GA XAF Gabon .ga fr-GA Africa
82 GAM GMB GM GMD Gambia .gm mnk,wof,wo,ff en-GM Africa
83 GEO GEO GE GEL Georgia .ge ka,ru,hy,az Asia
84 GER DEU DE EUR Germany .de de Europe
85 GHA GHA GH GHS Ghana .gh ak,ee,tw en-GH Africa
86 GBZ GIB GI GIP Gibraltar .gi es,it,pt en-GI Europe
87 GRE GRC GR EUR Greece .gr en,fr el-GR Europe
88 GRL GRL GL DKK Greenland .gl kl,da-GL,en Americas
89 GRN GRD GD XCD Grenada .gd en-GD Americas
90 GLP GLP GP EUR Guadeloupe .gp fr-GP Americas
91 GUM GUM GU USD Guam .gu ch-GU en-GU Oceania
92 GUA GTM GT GTQ Guatemala .gt es-GT Americas
93 GBG GGY GG GBP Guernsey .gg en,nrf Europe
94 GUI GIN GN GNF Guinea .gn fr-GN Africa
95 GNB GNB GW XOF Guinea-Bissau .gw pov pt-GW Africa
96 GUY GUY GY GYD Guyana .gy en-GY Americas
97 HAI HTI HT HTG,USD Haiti .ht ht,fr-HT Americas
98 VAT VAT VA EUR Vatican City .va la,it,fr Europe
99 HON HND HN HNL Honduras .hn cab,miq es-HN Americas
100 HUN HUN HU HUF Hungary .hu hu-HU Europe
101 ISL ISL IS ISK Iceland .is is,en,de,da,sv,no Europe
102 IND IND IN INR India .in hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc en-IN Asia
103 IDN IDN ID IDR Indonesia .id id,en,nl,jv Asia
104 IRN IRN IR IRR Iran .ir ku fa-IR Asia
105 IRQ IRQ IQ IQD Iraq .iq ku,hy ar-IQ Asia
106 IRL IRL IE EUR Ireland .ie ga-IE en-IE Europe
107 GBM IMN IM GBP Isle of Man .im en,gv Europe
108 ISR ISR IL ILS Israel .il he,ar-IL,en-IL, Asia
109 ITA ITA IT EUR Italy .it de-IT,fr-IT,sc,ca,co,sl it-IT Europe
110 JAM JAM JM JMD Jamaica .jm en-JM Americas
111 JPN JPN JP JPY Japan .jp ja Asia
112 GBJ JEY JE GBP Jersey .je en,fr,nrf Europe
113 JOR JOR JO JOD Jordan .jo en ar-JO Asia
114 KAZ KAZ KZ KZT Kazakhstan .kz kk,ru Asia
115 KEN KEN KE KES Kenya .ke sw-KE en-KE Africa
116 KIR KIR KI AUD Kiribati .ki gil en-KI Oceania
117 KUW KWT KW KWD Kuwait .kw en ar-KW Asia
118 KGZ KGZ KG KGS Kyrgyzstan .kg ky,uz,ru Asia
119 LAO LAO LA LAK Laos .la lo,fr,en Asia
120 LVA LVA LV EUR Latvia .lv lv,ru,lt Europe
121 LIB LBN LB LBP Lebanon .lb fr-LB,en,hy ar-LB Asia
122 LES LSO LS LSL,ZAR Lesotho .ls st,zu,xh en-LS Africa
123 LBR LBR LR LRD Liberia .lr en-LR Africa
124 LBY LBY LY LYD Libya .ly it,en ar-LY Africa
125 LIE LIE LI CHF Liechtenstein .li de-LI Europe
126 LTU LTU LT EUR Lithuania .lt lt,ru,pl Europe
127 LUX LUX LU EUR Luxembourg .lu lb,de-LU,fr-LU Europe
128 MAD MDG MG MGA Madagascar .mg mg fr-MG Africa
129 MWI MWI MW MWK Malawi .mw ny,yao,tum,swk Africa
130 MAS MYS MY MYR Malaysia .my en,zh,ta,te,ml,pa,th ms-MY Asia
131 MDV MDV MV MVR Maldives .mv dv,en Asia
132 MLI MLI ML XOF Mali .ml bm fr-ML Africa
133 MLT MLT MT EUR Malta .mt mt,en-MT Europe
134 MHL MHL MH USD Marshall Islands .mh mh,en-MH Oceania
135 MTQ MTQ MQ EUR Martinique .mq fr-MQ Americas
136 MTN MRT MR MRU Mauritania .mr fuc,snk,fr,mey,wo ar-MR Africa
137 MRI MUS MU MUR Mauritius .mu bho,fr en-MU Africa
138 MYT MYT YT EUR Mayotte .yt fr-YT Africa
139 MEX MEX MX MXN Mexico .mx es-MX Americas
140 FSM FSM FM USD Micronesia .fm chk,pon,yap,kos,uli,woe,nkr,kpg en-FM Oceania
141 MON MCO MC EUR Monaco .mc en,it fr-MC Europe
142 MNG MNG MN MNT Mongolia .mn mn,ru Asia
143 MNE MNE ME EUR Montenegro .me sr,hu,bs,sq,hr,rom Europe
144 MSR MSR MS XCD Montserrat .ms en-MS Americas
145 MAR MAR MA MAD Morocco .ma ber,fr ar-MA Africa
146 MOZ MOZ MZ MZN Mozambique .mz vmw pt-MZ Africa
147 MYA MMR MM MMK Myanmar .mm my Asia
148 NAM NAM NA NAD,ZAR Namibia .na af,de,hz,naq en-NA Africa
149 NRU NRU NR AUD Nauru .nr na,en-NR Oceania
150 NEP NPL NP NPR Nepal .np ne,en Asia
151 NED NLD NL EUR Netherlands .nl fy-NL nl-NL Europe
152 NCL NCL NC XPF New Caledonia .nc fr-NC Oceania
153 NZL NZL NZ NZD New Zealand .nz mi en-NZ Oceania
154 NCA NIC NI NIO Nicaragua .ni en es-NI Americas
155 NIG NER NE XOF Niger .ne ha,kr,dje fr-NE Africa
156 NGA NGA NG NGN Nigeria .ng ha,yo,ig,ff en-NG Africa
157 NIU NIU NU NZD Niue .nu niu,en-NU Oceania
158 NFK NFK NF AUD Norfolk Island .nf en-NF Oceania
159 NMI MNP MP USD Northern Mariana Islands .mp fil,tl,zh,ch-MP,en-MP Oceania
160 NOR NOR NO NOK Norway .no no,nb,nn,se,fi Europe
161 OMA OMN OM OMR Oman .om en,bal,ur ar-OM Asia
162 PAK PAK PK PKR Pakistan .pk en-PK,pa,sd,ps,brh ur-PK Asia
163 PLW PLW PW USD Palau .pw pau,sov,en-PW,tox,ja,fil,zh Oceania
164 PAN PAN PA PAB,USD Panama .pa en es-PA Americas
165 PNG PNG PG PGK Papua New Guinea .pg ho,meu,tpi en-PG Oceania
166 PAR PRY PY PYG Paraguay .py gn es-PY Americas
167 PER PER PE PEN Peru .pe qu,ay es-PE Americas
168 PHI PHL PH PHP Philippines .ph tl,en-PH,fil,ceb,tgl,ilo,hil,war,pam,bik,bcl,pag,mrw,tsg,mdh,cbk,krj,sgd,msb,akl,ibg,yka,mta,abx Asia
169 PCN PCN PN NZD Pitcairn Islands .pn en-PN Oceania
170 POL POL PL PLN Poland .pl pl Europe
171 POR PRT PT EUR Portugal .pt mwl pt-PT Europe
172 PUR PRI PR USD Puerto Rico .pr es-PR en-PR Americas
173 QAT QAT QA QAR Qatar .qa es ar-QA Asia
174 KOR KOR KR KRW South Korea .kr en ko-KR Asia
175 MDA MDA MD MDL Moldova .md ro,ru,gag,tr Europe
176 ROU ROU RO RON Romania .ro ro,hu,rom Europe
177 RUS RUS RU RUB Russia .ru ru,tt,xal,cau,ady,kv,ce,tyv,cv,udm,tut,mns,bua,myv,mdf,chm,ba,inh,tut,kbd,krc,av,sah,nog Europe
178 RWA RWA RW RWF Rwanda .rw rw,en-RW,fr-RW,sw Africa
179 REU REU RE EUR Réunion .re fr-RE Africa
180 BLM BL EUR St. Barthélemy .gp fr Americas
181 SHN SHN SH SHP St. Helena .sh en-SH Africa
182 SKN KNA KN XCD St. Kitts & Nevis .kn en-KN Americas
183 LCA LCA LC XCD St. Lucia .lc en-LC Americas
184 MAF MF EUR St. Martin .gp fr Americas
185 SPM SPM PM EUR St. Pierre & Miquelon .pm fr-PM Americas
186 VIN VCT VC XCD St. Vincent & Grenadines .vc fr en-VC Americas
187 SAM WSM WS WST Samoa .ws sm,en-WS Oceania
188 SMR SMR SM EUR San Marino .sm it-SM Europe
189 STP STP ST STN São Tomé & Príncipe .st pt-ST Africa
190 KSA SAU SA SAR Saudi Arabia .sa ar-SA Asia
191 SEN SEN SN XOF Senegal .sn wo,fuc,mnk fr-SN Africa
192 SRB SRB RS RSD Serbia .rs sr,hu,bs,rom Europe
193 SEY SYC SC SCR Seychelles .sc fr-SC en-SC Africa
194 SLE SLE SL SLL Sierra Leone .sl men,tem en-SL Africa
195 SIN SGP SG SGD Singapore .sg cmn,en-SG,ms-SG,ta-SG,zh-SG Asia
196 SVK SVK SK EUR Slovakia .sk sk,hu Europe
197 SVN SVN SI EUR Slovenia .si sl,sh Europe
198 SOL SLB SB SBD Solomon Islands .sb tpi en-SB Oceania
199 SOM SOM SO SOS Somalia .so ar-SO,it,en-SO so-SO Africa
200 RSA ZAF ZA ZAR South Africa .za zu,xh,af,nso,en-ZA,tn,st,ts,ss,ve,nr Africa
201 ESP ESP ES EUR Spain .es ca,gl,eu,oc es-ES Europe
202 SRI LKA LK LKR Sri Lanka .lk si,ta,en Asia
203 PLE PSE PS Palestine .ps ar-PS Asia
204 SUD SDN SD SDG Sudan .sd en,fia ar-SD Africa
205 SUR SUR SR SRD Suriname .sr en,srn,hns,jv nl-SR Americas
206 SWE SWE SE SEK Sweden .se se,sma,fi-SE sv-SE Europe
207 SUI CHE CH CHF Switzerland .ch fr-CH,it-CH,rm de-CH Europe
208 SYR SYR SY SYP Syria .sy ku,hy,arc,fr,en ar-SY Asia
209 TJK TJK TJ TJS Tajikistan .tj tg,ru Asia
210 THA THA TH THB Thailand .th th,en Asia
211 MKD MKD MK MKD North Macedonia .mk mk,sq,tr,rmm,sr Europe
212 TLS TLS TL USD Timor-Leste .tl tet,pt-TL,id,en Asia
213 TOG TGO TG XOF Togo .tg ee,hna,kbp,dag,ha fr-TG Africa
214 TKL TKL TK NZD Tokelau .tk tkl,en-TK Oceania
215 TGA TON TO TOP Tonga .to to,en-TO Oceania
216 TRI TTO TT TTD Trinidad & Tobago .tt hns,fr,es,zh en-TT Americas
217 TUN TUN TN TND Tunisia .tn fr ar-TN Africa
218 TUR TUR TR TRY Turkey .tr ku,diq,az,av tr-TR Asia
219 TKM TKM TM TMT Turkmenistan .tm tk,ru,uz Asia
220 TCA TCA TC USD Turks & Caicos Islands .tc en-TC Americas
221 TUV TUV TV AUD Tuvalu .tv tvl,en,sm,gil Oceania
222 UGA UGA UG UGX Uganda .ug lg,sw,ar en-UG Africa
223 UKR UKR UA UAH Ukraine .ua uk,ru-UA,rom,pl,hu Europe
224 UAE ARE AE AED United Arab Emirates .ae fa,en,hi,ur ar-AE Asia
225 ENG,NIR,SCO,WAL GBR GB GBP UK .uk cy-GB,gd en-GB Europe
226 TAN TZA TZ TZS Tanzania .tz en,ar sw-TZ Africa
227 VIR VIR VI USD U.S. Virgin Islands .vi en-VI Americas
228 USA USA US USD US .us es-US,haw,fr en-US Americas
229 URU URY UY UYU Uruguay .uy es-UY Americas
230 UZB UZB UZ UZS Uzbekistan .uz uz,ru,tg Asia
231 VAN VUT VU VUV Vanuatu .vu bi,en-VU,fr-VU Oceania
232 VEN VEN VE VES Venezuela .ve es-VE Americas
233 VIE VNM VN VND Vietnam .vn vi,en,fr,zh,km Asia
234 WLF WLF WF XPF Wallis & Futuna .wf wls,fud,fr-WF Oceania
235 SAH ESH EH MAD Western Sahara .eh ar,mey Africa
236 YEM YEM YE YER Yemen .ye ar-YE Asia
237 ZAM ZMB ZM ZMW Zambia .zm bem,loz,lun,lue,ny,toi en-ZM Africa
238 ZIM ZWE ZW ZWL Zimbabwe .zw sn,nr,nd en-ZW Africa
239 ALD ALA AX EUR Åland Islands .ax sv-AX Europe

@ -0,0 +1,175 @@
/**
* Style rules for the MessageBuffer
*/
/**
* the body defaults
*/
body {
margin-left: 16px;
margin-right: 16px;
}
/**
* The table column formats
*/
div.Message {
padding-bottom: 8px;
display: table;
width: 100%;
}
div.Message.Other {
padding-left: 6px;
}
div.Message:first-child {
padding-top: 0px;
}
div.Message:last-child {
padding-bottom: 0px;
}
div.BubbleSelf {
-moz-border-radius: 4px 4px 4px 4px;
border-style: solid;
border-width: 1px;
padding: 4px 8px;
margin-right: 0px;
margin-left: 0px;
display: table-cell;
/* overflow: hidden; this bugs mouse events. see bug #123077 */
}
div.BubbleOther {
-moz-border-radius: 6px ;
border-style: solid;
border-width: 1px;
margin-left: 0px;
margin-right: 0px;
vertical-align: middle;
padding: 4px 8px;
display: table-cell;
min-height: 56px;
/* overflow: hidden; this bugs mouse events. see bug #123077 */
margin-right: 4px;
}
div.BubbleSpacer {
padding: 0px;
margin: 0px;
vertical-align: middle;
display: table-cell;
height: 52px;
}
div.BubbleSelfClicked {
-moz-border-radius: 4px 4px 4px 4px;
border-style: solid;
border-width: 1px;
padding: 4px 8px;
text-shadow: 0.1em 0.1em #000;
display: table-cell;
/* overflow: hidden; this bugs mouse events. see bug #123077 */
}
div.BubbleOtherClicked {
-moz-border-radius: 6px ;
border-style: solid;
border-width: 1px;
text-shadow: 0.1em 0.1em #000;
vertical-align: middle;
padding: 4px 8px;
display: table-cell;
min-height: 56px;
/* overflow: hidden; this bugs mouse events. see bug #123077 */
}
/**
* Others' Avatars
*
* This needs a "drop down" shadow, but no idea if that can be done
*Adele: please note that this drop down shadow might be subjected to change
*I've talked about it with Vilja who's in charge of address book layout
*and we might change it so that it's a double border colour to indicate
*that the avatar is clickable. drop shawdow doesn't seem to work with
*dark backgrounds unless it's a light colour drop shadow.
*PLEASE tell me if it's difficult to implement the drop shadow.
* Looks like drop shadow is dropped from ui specs. And bug 139130 made me
*remove the space for it anyway.
*/
div.Avatar {
display: table-cell;
vertical-align: middle;
padding-right: 2px;
width: 64px;
}
.MessageAvatar {
width: 64px;
height:64px;
border: 1px solid; /* #9e9e9e; */
-moz-border-radius: 6px;
}
img.MessagePresence {
vertical-align: middle;
width: 16px;
height: 16px;
}
/**
* the Name field
*/
span.MessageNameField {
word-wrap: break-word;
vertical-align: middle;
}
/**
* the Text field
*/
span.MessageText {
text-align: left;
vertical-align: middle;
word-wrap: break-word;
}
/**
* the TimeStamp default rules
*/
div.MessageRight {
float: right;
padding-left: 16px;
white-space: nowrap;
text-align: right;
display: inline-block;
}
img.MessageBusinessCardImg {
vertical-align: middle;
padding-right: 4px;
}
img.MessageStatusImg {
vertical-align: middle;
padding-right: 8px;
}
.MessagingWidgetsSmiley {
height: 24px;
width: 24px;
}

@ -0,0 +1,49 @@
<html lang="en-US">
<head>
<title>Test</title>
<link rel="stylesheet" type="text/css" href="qrc:/chat/conversation.css"></link>
<link rel="stylesheet" type="text/css" href="qrc:/chat/colors.css" id="ThemeCSSLink"></link>
<script type="text/javascript" src="qrc:/chat/conversation.js"></script>
</head>
<style>
.MessageAvatar {
background-size: contain;
}
</style>
<!-- Preserve the tag IDs. Everything else can be changed and rearranged -->
<body class="DefaultBackgroundColor DefaultTextColor SystemFont" onload="MessagingWidgetsSMSConversation_init()">
<div id="MessageContainerSelf" class="Message Self">
<div id="MessageSelf" class="MessagingBubbleSelfBackgroundColor MessagingBubbleBorderColor BubbleSelf">
<span id="MessageSenderNameSelf" class="MessageNameField AccentColor2 Self"></span>
<span id="MessageTextSelf" class="MessageText Self"></span>
<div class="MessageRight Self">
<img id="MessageBusinessCardImgSelf" class="MessageBusinessCardImg" src=""/>
<span id="MessageTimeStampSelf" class="MessageTimeStamp SecondaryTextColor Self SmallSystemFont">12:30 PM</span>
<span id="MessageDeliveryTimeStampSelf" class="MessageDeliveryTimeStamp SecondaryTextColor Self SmallSystemFont"> | 1:30 PM</span>
<img id="MessageStatusImgSelf" class="MessageStatusImg" src=""/>
</div>
</div>
</div>
<div id="MessageContainerOther" class="Message Other">
<div class="Avatar">
<div id="AvatarImgOther" class="MessageAvatar MessagingAvatarBorderColor DefaultBackgroundColor "></div>
</div>
<div id="MessageOther" class="MessagingBubbleOtherBackgroundColor MessagingBubbleBorderColor BubbleOther">
<div class="BubbleSpacer">
<img id="MessagePresenceOther" src="" class="MessagePresence"/>
<span id="MessageSenderNameOther" class="MessageNameField AccentColor1 Other"></span>
<span id="MessageTextOther" class="MessageText Other"></span>
<div class="MessageRight Other">
<img id="MessageBusinessCardImgOther" class="MessageBusinessCardImg" src=""/>
<span id="MessageTimeStampOther" class="MessageTimeStamp SecondaryTextColor Other SmallSystemFont">12:30 PM</span>
<span id="MessageDeliveryTimeStampOther" class="MessageDeliveryTimeStamp SecondaryTextColor Other SmallSystemFont"> | 1:30 PM</span>
<img id="MessageStatusImgOther" class="MessageStatusImg" src=""/>
</div>
</div>
</div>
</div>
</body>
</html>

@ -0,0 +1,913 @@
/**
* @file MessagingWidgetsSMSConversation.js
*
* Javascript for messaging rendering widget's ring buffer.
*/
/*
* This file is part of rtcom messaging ui
*
* Copyright (C) 2009 Nokia Corporation. All rights reserved.
*
* Contact: Naba Kumar <naba.kumar@nokia.com>
*
* This software, including documentation, is protected by copyright
* controlled by Nokia Corporation. All rights are reserved.
* Copying, including reproducing, storing, adapting or translating,
* any or all of this material requires the prior written consent of
* Nokia Corporation. This material also contains confidential
* information which may not be disclosed to others without the prior
* written consent of Nokia.
*/
/**
* Globals:
*
* @myBatchRequested:
* if HISTORY_FETCHING_NOREQUEST, no batch has been requested.
* if HISTORY_FETCHING_DONE, history fetching done; no more request to give.
* if > 0, request in progress and the amount requested.
*
* @myBatchesAdded: Number of message batches retrieved from log.
*
* @myShowTimes: Display method for time stamps, set to 'inline' to show
* and 'none' to hide
*
**/
var HISTORY_BATCH_SIZE = 30;
var HISTORY_PAGE_SIZE = 15;
var HISTORY_SCREENFULL_SIZE = 8;
var HISTORY_FETCHING_DONE = -1;
var HISTORY_FETCHING_NOREQUEST = 0;
var myBatchRequested = 0;
var myShowTimes = "inline";
var myBatchesAdded = 0;
var myMaxMessages = -1;
var markupTemplateSelf;
var markupTemplateOther;
var messagesBuffer = new Array();
var pastPresenceAnchor = new Array();
var firstFlush = true;
var flushTimeout = 0;
var lastClickedBubble = null;
var storedScreenHeight = 0;
var storedBottomElement;
/**
* MessagingWidgetsSMSConversation_alert:
* @str Parameter to set for alert() call
*
* Custom, error safe alert call. Apparently with some version mismatches, the
* alert() javascript function sometimes fails. This is to prevent alert()
* failure to prevent rest of the script execution.
*
* For functionality, that actually depends on alert() call to succeed this
* is not helpful, rather it's another way of creating a malfuction that is
* harder to detect.
**/
function MessagingWidgetsSMSConversation_alert(str)
{
alert(str);
}
/**
* MessagingWidgetsSMSConversation_init:
*
* Called when the page has actually been loaded.
* Acts as a "constructor", could be used for creating the template item and
* getting the element where we will add the children in the page.
*
* However, creating such template items doesn't seem so simple, we would
* need several of them in order to be able to keep it really usable.
**/
function MessagingWidgetsSMSConversation_init ()
{
/* Setting onscroll handler to window */
window.onscroll = MessagingWidgetsRenderer_onScroll;
/* Setting onresize handler to window */
window.onresize = MessagingWidgetsRenderer_onResize;
storedScreenHeight = screen.height;
storedWindowHeight = storedScreenHeight - 140;
/* setting body onmousedown for clearing stored message id on ui side */
document.body.onmousedown = MessagingWidgetsRenderer_messagePressBody;
if (!markupTemplateSelf)
{
markupTemplateSelf = document.getElementById("MessageContainerSelf");
markupTemplateSelf.parentNode.removeChild(markupTemplateSelf);
markupTemplateSelf.removeAttribute('id');
markupTemplateOther = document.getElementById("MessageContainerOther");
markupTemplateOther.parentNode.removeChild(markupTemplateOther);
markupTemplateOther.removeAttribute('id');
}
MessagingWidgetsRenderer_addMessage(0, "13:37", "", "dsc",
"Hallo daar!", false, "1337", "https://avatars.githubusercontent.com/u/1478325?v=4",
"", "", "", "sander@sanderf.nl", false, "ltr");
MessagingWidgetsRenderer_addMessage(0, "13:50", "", "Wizzup",
"Is het al klaar??", false, "1338", "https://avatars.githubusercontent.com/u/517897?v=4",
"", "", "", "wizzup@wizzup.org", false, "ltr");
MessagingWidgetsRenderer_addMessage(0, "13:52", "", "Wizzup",
"#duurtlang", false, "1338", "https://avatars.githubusercontent.com/u/517897?v=4",
"", "", "", "wizzup@wizzup.org", false, "ltr");
}
/**
* MessagingWidgetsRenderer_messageClicked:
* @event:
* @id:
*
* Message area clicked
**/
function MessagingWidgetsRenderer_messageClicked(event)
{
var x = event.target;
var idstr;
/* Only handle clicks on message blocks, not on URIs */
if (x.href == "" || (!x.href && !x.parentNode.href)){
}else{
return true;
}
idstr = "file://id:"+event.currentTarget.id;
MessagingWidgetsSMSConversation_alert(idstr);
MessagingWidgetsRenderer_clearHighlight(event.currentTarget.id);
event.returnValue = true;
event.cancelBubble = false;
}
function MessagingWidgetsRenderer_messagePress(event)
{
var idstr;
idstr = "file://pre-id:"+event.currentTarget.id;
MessagingWidgetsSMSConversation_alert(idstr);
/* The popup menu posted from C code seems to steal events
and when the popup is closed, the message remains highlighted.
Workaround: use a 2-second timeout to clear highlight.
*/
setTimeout("MessagingWidgetsRenderer_clearHighlight()", 2000);
event.returnValue = true;
/* Canceling bubble so body onmousedown isn't called */
event.cancelBubble = true;
}
/**
* MessagingWidgetsRenderer_messagePressBubble:
* @event: An onmousedown event
* Highlight message bubble when pressed.
*/
function MessagingWidgetsRenderer_messagePressBubble(event)
{
var block;
MessagingWidgetsRenderer_clearHighlight(event.currentTarget.id);
block = document.getElementById(event.currentTarget.id);
if (block) {
block.className = block.clickedClassName;
lastClickedBubble = block;
}
event.returnValue = true;
/* Canceling bubble so body onmousedown isn't called */
event.cancelBubble = false;
}
/**
* MessagingWidgetsRenderer_messagePressBubble:
* @event: (Usually) an onmouseup event
* Message bubble is not pressed any more - clear highlighting.
*/
function MessagingWidgetsRenderer_messageReleaseBubble(event)
{
MessagingWidgetsRenderer_clearHighlight();
event.returnValue = true;
event.cancelBubble = false;
}
/**
* MessagingWidgetsRenderer_clearHighlight:
* @elem_id: (optional) Don't clear if @elem_id is currently highlighted.
*
* Remove highlighting from highlighted element, if any.
*/
function MessagingWidgetsRenderer_clearHighlight(/* [elem_id] */)
{
if (lastClickedBubble) {
if (arguments.length >= 0) {
var elem_id = arguments[0];
var elem = document.getElementById(elem_id);
if (elem && elem == lastClickedBubble) {
return;
}
}
lastClickedBubble.className = lastClickedBubble.normalClassName;
lastClickedBubble = null;
}
}
function MessagingWidgetsRenderer_messagePressBody(event)
{
var idstr;
MessagingWidgetsSMSConversation_alert("file://pre-id:None");
event.returnValue = true;
event.cancelBubble = false;
}
function MessagingWidgetsRenderer_avatarClicked(event)
{
MessagingWidgetsSMSConversation_alert(event.currentTarget.id);
event.returnValue = true;
event.cancelBubble = false;
}
/*
* Fixes presence...
*/
function
MessagingWidgetsRenderer_fixPresence (
self, presence_img, presence, contact_info_str, add_to_top)
{
var presenceID = "PresenceImg" + contact_info_str;
if (!self) {
if (presence_img) {
presence_img.id = presenceID;
if (presence != null && presence != "") {
presence_img.src = presence;
}
/* Find current presence anchor in document */
var prevPresence = document.getElementById (presenceID);
if (add_to_top) {
/* If we are adding a history, check if presence anchor is
* already present in document (presumably added at bottom
* from pending messages) or in pastPresenceAnchor which
* remebers if we already created the anchor (it should
* not be re-created if already created when populating
* history).
*/
if (prevPresence ||
pastPresenceAnchor[contact_info_str] == true) {
/*
* Presence is already anchored; remove it from this item.
*/
presence_img.parentNode.removeChild (presence_img);
} else{
/*
* There is no anchor found, either in document or in
* previously anchored, so leave presence node intact
* in this item and record that anchor is already set.
*/
pastPresenceAnchor[contact_info_str] = true;
}
} else {
/* If we found a previous presence icon, we remove that.
* this one replaces the anchor
*/
if (prevPresence) {
prevPresence.parentNode.removeChild (prevPresence);
}
}
}
} else if (presence_img) {
presence_img.parentNode.removeChild (presence_img);
}
}
/**
* MessagingWidgetsRenderer_messageNode:
* @item: The message.
* @add_to_top: Add the new message to the top of the list
*
* Creates a message node
**/
function
MessagingWidgetsRenderer_messageNode (item, add_to_top)
{
/* Top level items */
var new_message;
/* Avatar data */
var avatar_img;
/* The graphics */
var bubble_cell;
/* Presence icon and name area */
var presence_img = null;
var name_tag;
/* Message text content */
var message_txt;
/* Time stamps and potential icons */
var time_tag;
var delivery_time_tag;
var business_img;
var status_img;
var party;
var count;
if (!markupTemplateSelf) {
MessagingWidgetsSMSConversation_init();
}
if (item.type !== 0) {
MessagingWidgetsSMSConversation_alert("Only type 0 is allowed");
return;
}
if (item.self === true) {
party = "Self";
new_message = markupTemplateSelf.cloneNode(true);
/* Finally, append the whole message to the document */
new_message.id = "Message" + item.id_str;
new_message.onmousedown = MessagingWidgetsRenderer_messagePress;
/* Retrieve the elements to update */
var node_tags = new_message.getElementsByTagName('*');
for (var i = 0; i < node_tags.length; i++) {
if (node_tags[i].hasAttribute('id')) {
var id = node_tags[i].getAttribute('id');
if (id == ("AvatarImg" + party))
avatar_img = node_tags[i];
if (id == ("Message" + party))
bubble_cell = node_tags[i];
if (id == ("MessagePresence" + party))
presence_img = node_tags[i];
if (id == ("MessageSenderName" + party))
name_tag = node_tags[i];
if (id == ("MessageText" + party))
message_txt = node_tags[i];
if (id == ("MessageTimeStamp" + party))
time_tag = node_tags[i];
if (id == ("MessageBusinessCardImg" + party))
business_img = node_tags[i];
if (id == ("MessageDeliveryTimeStamp" + party))
delivery_time_tag = node_tags[i];
if (id == ("MessageStatusImg" + party))
status_img = node_tags[i];
}
}
} else {
party = "Other";
new_message = markupTemplateOther.cloneNode(true);
/* Finally, append the whole message to the document */
new_message.id = "Message" + item.id_str;
new_message.onmousedown = MessagingWidgetsRenderer_messagePress;
/* Retrieve the elements to update */
var node_tags = new_message.getElementsByTagName('*');
for (var i = 0; i < node_tags.length; i++) {
if (node_tags[i].hasAttribute('id')) {
var id = node_tags[i].getAttribute('id');
if (id == ("AvatarImg" + party))
avatar_img = node_tags[i];
if (id == ("Message" + party))
bubble_cell = node_tags[i];
if (id == ("MessagePresence" + party))
presence_img = node_tags[i];
if (id == ("MessageSenderName" + party))
name_tag = node_tags[i];
if (id == ("MessageText" + party))
message_txt = node_tags[i];
if (id == ("MessageTimeStamp" + party))
time_tag = node_tags[i];
if (id == ("MessageBusinessCardImg" + party))
business_img = node_tags[i];
if (id == ("MessageDeliveryTimeStamp" + party))
delivery_time_tag = node_tags[i];
if (id == ("MessageStatusImg" + party))
status_img = node_tags[i];
}
}
avatar_img.id = "avatar:" + item.contact_info_str;
}
bubble_cell.id = item.id_str;
message_txt.id = "MessageText" + item.id_str;
name_tag.id = "MessageSenderName" + item.id_str;
business_img.id = "MessageBusinessCardImg" + item.id_str;
time_tag.id = "MessageTimeStamp" + item.id_str;
delivery_time_tag.id = "MessageDeliveryTimeStamp" + item.id_str;
status_img.id = "MessageStatusImg" + item.id_str;
message_txt.setAttribute("dir", item.text_dir);
/* Creation of an avatar image */
if (item.self == false) {
if (item.avatar != "") {
avatar_img.style.backgroundImage = "url('"+item.avatar+"')";
avatar_img.onclick = MessagingWidgetsRenderer_avatarClicked;
}
}
/* The bubble content */
bubble_cell.normalClassName = bubble_cell.className;
bubble_cell.clickedClassName = bubble_cell.className +
"Clicked MessagingBubbleClickedBackgroundColor MessagingBubbleBorderColor";
bubble_cell.onclick = MessagingWidgetsRenderer_messageClicked;
bubble_cell.onmousedown = MessagingWidgetsRenderer_messagePressBubble;
bubble_cell.onmouseup = MessagingWidgetsRenderer_messageReleaseBubble;
if (item.name_str != "") {
name_tag.textContent = item.name_str;
}
message_txt.innerHTML = item.message_str.replace(/\t/g, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
if (item.business_icon != "") {
business_img.src = item.business_icon;
}
time_tag.style.display = myShowTimes;
time_tag.innerHTML = item.time_str;
delivery_time_tag.style.display = myShowTimes;
delivery_time_tag.innerHTML = item.delivery_str;
if (item.status_icon != "") {
status_img.src = item.status_icon;
status_img.style.display = "inline";
} else {
/* Hiding element, so it's paddings etc don't affect timestamp */
/* placement. It gets hidden in SetTimes() also */
status_img.src = "";
status_img.style.display = "none";
}
/* FIXME: Move it somewhere appropriate */
MessagingWidgetsRenderer_fixPresence(item.self, presence_img, item.presence,
item.contact_info_str, add_to_top);
return new_message;
}
/**
* MessagingWidgetsRenderer_messageObject:
* @type: Type of the message (normal/action/notice/autoreply)
* @time_str: The time string to show in the screen
* @delivery_str: The delivery time string to possibly show in the screen
* @name_str: The name string to show in the screen
* @message_str: The actual message to show
* @self: TRUE if message is from self
* @id_str: The ID of the message for access
* @avatar: path(/url?) to avatar image
* @presence: presence icon of sender
* @business_icon: path to business card icon
* @status_icon: path to message status icon (pending/failed)
* @contact_info_str: Additional contact information
* @text_dir: Text direction ("ltr" or "rtl")
*
* Creates a message object.
**/
function
MessagingWidgetsRenderer_messageObject (
type, time_str, delivery_str, name_str, message_str, self, id_str,
avatar, presence, business_icon, status_icon, contact_info_str, text_dir)
{
this.type = type;
this.time_str = time_str;
this.delivery_str = delivery_str;
this.name_str = name_str;
this.message_str = message_str;
this.self = self;
this.id_str = id_str;
this.avatar = avatar;
this.presence = presence;
this.business_icon = business_icon;
this.status_icon = status_icon;
this.contact_info_str = contact_info_str;
this.text_dir = text_dir;
}
/*
* Flushes the given amount of messages from the buffer to renderer
*/
function
MessagingWidgetsRenderer_flushBuffer (amount)
{
if (messagesBuffer.length > 0) {
if (amount < 0)
amount = messagesBuffer.length;
var fragment = document.createDocumentFragment();
for (var i = 0; i < amount; i++) {
if (messagesBuffer.length <= 0)
break;
var item = messagesBuffer.shift();
new_message = MessagingWidgetsRenderer_messageNode (item, true);
if (fragment.childNodes.length > 0)
fragment.insertBefore(new_message, fragment.firstChild);
else
fragment.appendChild(new_message);
}
/* Restore scroll position */
var savedScrollPos =
document.body.scrollHeight - window.pageYOffset;
document.body.insertBefore(fragment, document.body.firstChild);
window.scrollTo(0, (document.body.scrollHeight - savedScrollPos));
}
}
/* Scroll event handler to potentially add more past history */
function
MessagingWidgetsRenderer_onScroll ()
{
MessagingWidgetsRenderer_clearHighlight();
/* Buffer flushing if there isn't already one running. */
if (window.pageYOffset < 100 && messagesBuffer.length > 0) {
/* Add a page of messages (about 4 screen-full) to renderer */
MessagingWidgetsRenderer_flushBuffer(HISTORY_PAGE_SIZE);
}
/* If we run out of messages in buffer and history hasn't finished,
* request for more
*/
if (messagesBuffer.length == 0 &&
myBatchRequested == HISTORY_FETCHING_NOREQUEST &&
myBatchesAdded > 0)
{
myBatchRequested = HISTORY_BATCH_SIZE;
alert("history-request:" + HISTORY_BATCH_SIZE);
}
obj=document.elementFromPoint(120, window.innerHeight-16);
if(obj.id != "")
storedBottomElement = obj;
}
/* When conversation view editor expands/shrinks, scroll accordingly to */
/* keep the the bottom position of the screen fixed. */
function
MessagingWidgetsRenderer_onResize (event)
{
if( storedScreenHeight != screen.height)
{
storedBottomElement.scrollIntoView(false);
storedScreenHeight = screen.height;
storedWindowHeight = window.innerHeight;
}
if (Math.abs(storedWindowHeight - window.innerHeight) != 0) {
window.scrollBy(0, storedWindowHeight - window.innerHeight);
storedWindowHeight = window.innerHeight;
}
}
/**
* MessagingWidgetsRenderer_addMessage:
* @type: Type of the message (normal/action/notice/autoreply)
* @time_str: The time string to show in the screen
* @delivery_str: The delivery time string to possibly show in the screen
* @name_str: The name string to show in the screen
* @message_str: The actual message to show
* @self: TRUE if message is from self
* @id_str: The ID of the message for access
* @avatar: path(/url?) to avatar image
* @presence: presence icon of sender
* @business_icon: path to business card icon
* @status_icon: path to message status icon (pending/failed)
* @contact_info_str: Additional contact information
* @add_to_top: Add the new message to the top of the list
* @text_dir: Text direction ("ltr" or "rtl")
*
* Queues messages to buffer and triggers flush schedule. Also forces
* an immediate flush if there are 8 messages already in buffer for
* the first time. It's a screenful of messages shown to the user in
* first opportunity.
**/
function
MessagingWidgetsRenderer_addMessage (
type, time_str, delivery_str, name_str, message_str, self, id_str,
avatar, presence, business_icon, status_icon, contact_info_str, add_to_top,
text_dir)
{
var item =
new MessagingWidgetsRenderer_messageObject (type, time_str,
delivery_str,
name_str, message_str,
self, id_str, avatar,
presence, business_icon,
status_icon,
contact_info_str,
text_dir);
if (add_to_top) {
/* Queue the top (history) message in buffer. */
messagesBuffer[messagesBuffer.length] = item;
/* Force flush if there's already screenful of messages to show for
* the first time.
*/
if (firstFlush == true &&
messagesBuffer.length >= HISTORY_SCREENFULL_SIZE)
{
firstFlush = false;
MessagingWidgetsRenderer_flushBuffer(HISTORY_SCREENFULL_SIZE);
}
} else {
/* If the message is bottom, add it directly without queuing. */
var new_message =
MessagingWidgetsRenderer_messageNode (item, false);
document.body.appendChild (new_message);
/* scrolling to new message, if the view is close to bottom, or */
/* sent by self. If not, we don't scroll */
if (document.body.scrollHeight - window.pageYOffset < (screen.height-140)*2 || self) {
new_message.scrollIntoView (false);
}
}
}
/**
* MessagingWidgetsRenderer_batchAdded:
* @messages_fetched: Number of messages fetched from log. Note that all
* fetched messages are not necessarily added to the view.
*
* History batch has been added to renderer
**/
function MessagingWidgetsRenderer_batchAdded (messages_fetched)
{
myBatchesAdded++;
/* Force flush if there hasn't been anything shown yet.
* This happens because the first batch was smaller than
* HISTORY_SCREENFULL_SIZE.
*/
if (firstFlush == true && messagesBuffer.length >= 0) {
firstFlush = false;
MessagingWidgetsRenderer_flushBuffer(-1);
}
/* If there was no request made, then it's the first batch pushed.
* The subsequent batch is requested after a delay of 1s to allow
* first screenfull to be rendered properly.
*/
if (myBatchRequested == HISTORY_FETCHING_NOREQUEST) {
if (flushTimeout != 0)
clearTimeout(flushTimeout);
flushTimeout = setTimeout("MessagingWidgetsRenderer_onScroll();",
1000);
} else if (myBatchRequested > 0) {
/* If there was a request, check if we got everything.
* If fetched messages is the amount requested, we could
* continue fetching more, otherwise there is no more history
* to fetch.
*/
if (messages_fetched < myBatchRequested) {
myBatchRequested = HISTORY_FETCHING_DONE; /* No more history */
} else {
myBatchRequested = HISTORY_FETCHING_NOREQUEST; /* Batch delivered */
}
/* Check if anything needs to be rendered at this scroll position */
MessagingWidgetsRenderer_onScroll();
}
}
/**
* MessagingWidgetsRenderer_deleteMessage:
*
* @id_str: The ID of the message to delete
*
* Removes a message from the message area
**/
function MessagingWidgetsRenderer_deleteMessage (id_str)
{
var txt;
var node = null;
MessagingWidgetsSMSConversation_alert(
"MessagingWidgetsRenderer_deleteMessage("+id_str+") called.");
txt = "Message"+id_str;
node = document.getElementById(txt);
if (node == null) {
MessagingWidgetsSMSConversation_alert (
"No messages with id: " + id_str);
return;
}
try {
document.body.removeChild (node);
window.scrollBy (0,0);
} catch (e) {
MessagingWidgetsSMSConversation_alert (
"Message " + index + " removal failed: " + e);
}
return;
}
/**
* MessagingWidgetsRenderer_showDeliveryTimes:
*
* @visibility: Set to 'inline' to show delivery time stamps. Set to
* 'none' not to show them.
*
* Set if delivery time stamps should be visible
**/
function MessagingWidgetsRenderer_showDeliveryTimes (visibility)
{
var times;
if (visibility != "inline" && visibility != "none") {
MessagingWidgetsSMSConversation_alert(
"MessagingWidgetsRenderer_showDeliveryTimes: Illegal parameter: " +
visibility);
return;
}
myShowTimes = visibility;
times = document.getElementsByTagName("span");
if (times == null) {
return;
}
for (i = 0; i < times.length; i++) {
if (times[i].className.indexOf ("MessageDeliveryTimeStamp") != -1) {
times[i].style.display = myShowTimes;
}
}
return;
}
/**
* MessagingWidgetsRenderer_setTimes:
*
* @id_str: id of the message
* @time_str: message time stamp
* @delivery_str: message delivery time stamp
* @status_icon: path+name of a status icon (pending/failed)
*
* Set time stamps and status icon
**/
function MessagingWidgetsRenderer_setTimes (id_str, time_str, delivery_str,
status_icon)
{
var icon;
// Weird new browser behaviour here. Looks like if the src of the status
// icon is set to not valid icon value, the browser keeps displaying the old
// valid icon. Only when you put to the src a valid icon does it change.
// Worked around this by hiding the image altogether if the icon is set
// to "".
icon = document.getElementById("MessageStatusImg"+id_str);
if (icon != null) {
icon.src = status_icon;
if (status_icon == "") {
icon.style.display = "none";
} else {
icon.style.display = "inline";
}
}
document.getElementById("MessageTimeStamp"+id_str).innerHTML = time_str;
document.getElementById("MessageDeliveryTimeStamp"+id_str).innerHTML =
delivery_str;
return;
}
/**
* MessagingWidgetsRenderer_setPresence:
* @contact_info: The contact info for presence icon
* @presence: Presence icon path
*
* Sets the presence icon of @contact_info to @presence
**/
function MessagingWidgetsRenderer_setPresence (contact_info, presence)
{
var presenceImg = document.getElementById ("PresenceImg" + contact_info);
if (presenceImg != null) {
presenceImg.src = presence;
} else {
/* Find in buffer */
for (var i = 0; i < messagesBuffer.length; i++) {
if (messagesBuffer[i].contact_info_str == contact_info) {
messagesBuffer[i].presence = presence;
break;
}
}
}
}
/**
* MessagingWidgetsRenderer_setMaxMessages:
*
* @max: maximum number of messages
*
* Sets the maximum number of messages (default is 50)
**/
function MessagingWidgetsRenderer_setMaxMessages (max)
{
var count;
myMaxMessages = max;
count = document.body.childNodes.count;
if (count >= myMaxMessages) {
var i;
for (i = count - myMaxMessages + 1; i > 0; i--) {
document.body.removeChild (document.body.firstChild);
}
}
return;
}
/**
* MessagingWidgetsRenderer_setCSS:
*
* @file: Path of theme CSS file
*
* Sets the theme CSS file to the current page.
*
* FIXME: Should use the .styleSheets property of the document
**/
function MessagingWidgetsRenderer_setCSS (file)
{
document.getElementById("ThemeCSSLink").href = file;
MessagingWidgetsSMSConversation_alert("set: "+file+" as theme CSS file.");
return;
}
/**
* MessagingWidgetsRenderer_addBatch:
*
* @messages: Array of messages to add
*
* Adds several messages to view
*
**/
function MessagingWidgetsRenderer_addBatch (messages)
{
var len = messages.length;
var i;
// starting from 1, because of the extra ',' at the beginning due to
// performance optimizations
for(i=1; i<len; i++) {
// Calling addMessage for each batched call. Converting strings
// representing bool/int parameters
MessagingWidgetsRenderer_addMessage(Number(messages[i][0]),
messages[i][1], messages[i][2], messages[i][3], messages[i][4],
(messages[i][5] === 'true'), messages[i][6], messages[i][7],
messages[i][8], messages[i][9], messages[i][10], messages[i][11],
(messages[i][12]) === 'true', messages[i][13]);
}
return;
}

@ -0,0 +1,215 @@
/*
This file contains CSS definitions for all the Maemo desktop theme colors and fonts.
Theme Name : Nokia Nseries
Installed in : @CSS_FULL_DIR@
*/
/* COLORS */
/* Normal Text Colors */
.DefaultTextColor {
color: #ffffff;
}
.SecondaryTextColor {
color: #999999;
}
.ActiveTextColor {
color: #37b4fc;
}
.DisabledTextColor {
color: #666666;
}
.PaintedTextColor {
color: #00101a;
}
/* Reversed Text Colors */
.ReversedTextColor {
color: #000000;
}
.ReversedSecondaryTextColor {
color: #666666;
}
.ReversedActiveTextColor {
color: #00a0fc;
}
.ReversedDisabledTextColor {
color: #808080;
}
.ReversedPaintedTextColor {
color: #ffffff;
}
/* Background colors */
.DefaultBackgroundColor {
background: #000000;
}
.DarkerBackgroundColor {
background: #000000;
}
.ReversedBackgroundColor {
background: #ffffff;
}
/* Selections */
.SelectionColor {
color: #37b4fc;
}
.ReversedSelectionColor {
color: #37b4fc;
}
/* Media colors */
.ContentBackgroundColor {
background: #000000;
}
.ContentFrameColor {
background: #000000;
}
.ContentSelectionColor {
background: #ffffff;
}
/* Framework stuff */
.TitleTextColor {
color: #ffffff;
}
.ButtonTextColor {
color: #ffffff;
}
.ButtonTextPressedColor {
color: #ffffff;
}
.ButtonTextDisabledColor {
color: #666666;
}
/* Crayons */
.AccentColor1 {
color: #86d5fc;
}
.AccentColor2 {
color: #00639e;
}
.AccentColor3 {
color: #00639e;
}
.AttentionColor {
color: #e3002a;
}
/* Notification Colors */
.NotificationBackgroundColor {
color: #efcb00;
}
.NotificationTextColor {
color: #491b03;
}
.NotificationSecondaryTextColor {
color: #783800;
}
/* Messaging UI specific colours */
.MessagingViewBackgroundColor {
background-color: #3f3f3d;
}
.MessagingBubbleSelfBackgroundColor {
background-color: #30302f;
}
.MessagingBubbleOtherBackgroundColor {
background-color: #000000;
}
.MessagingBubbleClickedBackgroundColor {
background-color: #37b4fc;
}
.MessagingBubbleBorderColor {
border-color: #30302f;
}
.MessagingAvatarBorderColor {
border-color: #999999;
}
.MessagingAvatarBorderMaskColor {
outline-color: #000000;
}
a:link {
color: #86d5fc;
}
/* FONTS */
/* legacy */
.osso-SystemFont {
font: 18px "Nokia Sans"
}
.osso-EmpSystemFont {
font: bold 18px "Nokia Sans"
}
.osso-LargeFont {
font: 26px "Nokia Sans"
}
.osso-SmallFont {
font: 13px "Nokia Sans"
}
.osso-HWRFont1 {
font: 52px "Nokia Sans"
}
.osso-HWRFont2 {
font: 38px "Nokia Sans"
}
.osso-TitleFont {
font: 18px "Nokia Sans"
}
.osso-ButtonFont {
font: 18px "Nokia Sans"
}
/* new fonts for fremantle */
.SystemFont {
font: 24px "Nokia Sans"
}
.EmpSystemFont {
font: bold 24px "Nokia Sans"
}
.LargeSystemFont {
font: 35px "Nokia Sans"
}
.SmallSystemFont {
font: 18px "Nokia Sans"
}
.EmpSmallSystemFont {
font: bold 18px "Nokia Sans"
}
.X-LargeSystemFont {
font: 42px "Nokia Sans"
}
.XX-LargeSystemFont {
font: 70px "Nokia Sans"
}
.XXX-LargeSystemFont {
font: 100px "Nokia Sans"
}

@ -0,0 +1,520 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/flags">
<file alias="gl.svg">svg/gl.svg</file>
<file alias="no.svg">svg/no.svg</file>
<file alias="gb-sct.svg">svg/gb-sct.svg</file>
<file alias="au.svg">svg/au.svg</file>
<file alias="pf.svg">svg/pf.svg</file>
<file alias="es.svg">svg/es.svg</file>
<file alias="nz.svg">svg/nz.svg</file>
<file alias="ao.svg">svg/ao.svg</file>
<file alias="bt.svg">svg/bt.svg</file>
<file alias="mz.svg">svg/mz.svg</file>
<file alias="kh.svg">svg/kh.svg</file>
<file alias="gb-nir.svg">svg/gb-nir.svg</file>
<file alias="io.svg">svg/io.svg</file>
<file alias="gn.svg">svg/gn.svg</file>
<file alias="ye.svg">svg/ye.svg</file>
<file alias="cc.svg">svg/cc.svg</file>
<file alias="bv.svg">svg/bv.svg</file>
<file alias="ru.svg">svg/ru.svg</file>
<file alias="hu.svg">svg/hu.svg</file>
<file alias="sl.svg">svg/sl.svg</file>
<file alias="cv.svg">svg/cv.svg</file>
<file alias="gb-wls.svg">svg/gb-wls.svg</file>
<file alias="dk.svg">svg/dk.svg</file>
<file alias="mf.svg">svg/mf.svg</file>
<file alias="cn.svg">svg/cn.svg</file>
<file alias="aw.svg">svg/aw.svg</file>
<file alias="gh.svg">svg/gh.svg</file>
<file alias="ua.svg">svg/ua.svg</file>
<file alias="th.svg">svg/th.svg</file>
<file alias="nc.svg">svg/nc.svg</file>
<file alias="nr.svg">svg/nr.svg</file>
<file alias="ai.svg">svg/ai.svg</file>
<file alias="tg.svg">svg/tg.svg</file>
<file alias="ae.svg">svg/ae.svg</file>
<file alias="bs.svg">svg/bs.svg</file>
<file alias="is.svg">svg/is.svg</file>
<file alias="mm.svg">svg/mm.svg</file>
<file alias="sd.svg">svg/sd.svg</file>
<file alias="dj.svg">svg/dj.svg</file>
<file alias="tw.svg">svg/tw.svg</file>
<file alias="sy.svg">svg/sy.svg</file>
<file alias="es-ga.svg">svg/es-ga.svg</file>
<file alias="pn.svg">svg/pn.svg</file>
<file alias="bo.svg">svg/bo.svg</file>
<file alias="rs.svg">svg/rs.svg</file>
<file alias="na.svg">svg/na.svg</file>
<file alias="it.svg">svg/it.svg</file>
<file alias="cx.svg">svg/cx.svg</file>
<file alias="ni.svg">svg/ni.svg</file>
<file alias="gu.svg">svg/gu.svg</file>
<file alias="ph.svg">svg/ph.svg</file>
<file alias="mv.svg">svg/mv.svg</file>
<file alias="us.svg">svg/us.svg</file>
<file alias="mo.svg">svg/mo.svg</file>
<file alias="va.svg">svg/va.svg</file>
<file alias="cf.svg">svg/cf.svg</file>
<file alias="cl.svg">svg/cl.svg</file>
<file alias="ss.svg">svg/ss.svg</file>
<file alias="ad.svg">svg/ad.svg</file>
<file alias="ws.svg">svg/ws.svg</file>
<file alias="gy.svg">svg/gy.svg</file>
<file alias="bl.svg">svg/bl.svg</file>
<file alias="tz.svg">svg/tz.svg</file>
<file alias="cw.svg">svg/cw.svg</file>
<file alias="je.svg">svg/je.svg</file>
<file alias="uz.svg">svg/uz.svg</file>
<file alias="li.svg">svg/li.svg</file>
<file alias="bz.svg">svg/bz.svg</file>
<file alias="sx.svg">svg/sx.svg</file>
<file alias="kg.svg">svg/kg.svg</file>
<file alias="bi.svg">svg/bi.svg</file>
<file alias="pw.svg">svg/pw.svg</file>
<file alias="pm.svg">svg/pm.svg</file>
<file alias="um.svg">svg/um.svg</file>
<file alias="nf.svg">svg/nf.svg</file>
<file alias="bm.svg">svg/bm.svg</file>
<file alias="wf.svg">svg/wf.svg</file>
<file alias="gf.svg">svg/gf.svg</file>
<file alias="sg.svg">svg/sg.svg</file>
<file alias="lc.svg">svg/lc.svg</file>
<file alias="pa.svg">svg/pa.svg</file>
<file alias="ke.svg">svg/ke.svg</file>
<file alias="ma.svg">svg/ma.svg</file>
<file alias="to.svg">svg/to.svg</file>
<file alias="bq.svg">svg/bq.svg</file>
<file alias="sm.svg">svg/sm.svg</file>
<file alias="py.svg">svg/py.svg</file>
<file alias="gb-eng.svg">svg/gb-eng.svg</file>
<file alias="md.svg">svg/md.svg</file>
<file alias="gt.svg">svg/gt.svg</file>
<file alias="sr.svg">svg/sr.svg</file>
<file alias="vn.svg">svg/vn.svg</file>
<file alias="re.svg">svg/re.svg</file>
<file alias="ci.svg">svg/ci.svg</file>
<file alias="gq.svg">svg/gq.svg</file>
<file alias="yt.svg">svg/yt.svg</file>
<file alias="mp.svg">svg/mp.svg</file>
<file alias="tj.svg">svg/tj.svg</file>
<file alias="fk.svg">svg/fk.svg</file>
<file alias="so.svg">svg/so.svg</file>
<file alias="lr.svg">svg/lr.svg</file>
<file alias="bn.svg">svg/bn.svg</file>
<file alias="gp.svg">svg/gp.svg</file>
<file alias="bh.svg">svg/bh.svg</file>
<file alias="by.svg">svg/by.svg</file>
<file alias="bj.svg">svg/bj.svg</file>
<file alias="be.svg">svg/be.svg</file>
<file alias="jo.svg">svg/jo.svg</file>
<file alias="vu.svg">svg/vu.svg</file>
<file alias="vi.svg">svg/vi.svg</file>
<file alias="gw.svg">svg/gw.svg</file>
<file alias="ec.svg">svg/ec.svg</file>
<file alias="hm.svg">svg/hm.svg</file>
<file alias="nu.svg">svg/nu.svg</file>
<file alias="mn.svg">svg/mn.svg</file>
<file alias="tf.svg">svg/tf.svg</file>
<file alias="kz.svg">svg/kz.svg</file>
<file alias="fj.svg">svg/fj.svg</file>
<file alias="iq.svg">svg/iq.svg</file>
<file alias="bb.svg">svg/bb.svg</file>
<file alias="st.svg">svg/st.svg</file>
<file alias="cr.svg">svg/cr.svg</file>
<file alias="ro.svg">svg/ro.svg</file>
<file alias="dz.svg">svg/dz.svg</file>
<file alias="tv.svg">svg/tv.svg</file>
<file alias="ve.svg">svg/ve.svg</file>
<file alias="sh.svg">svg/sh.svg</file>
<file alias="gs.svg">svg/gs.svg</file>
<file alias="fi.svg">svg/fi.svg</file>
<file alias="ck.svg">svg/ck.svg</file>
<file alias="ps.svg">svg/ps.svg</file>
<file alias="cz.svg">svg/cz.svg</file>
<file alias="uy.svg">svg/uy.svg</file>
<file alias="lv.svg">svg/lv.svg</file>
<file alias="ie.svg">svg/ie.svg</file>
<file alias="sz.svg">svg/sz.svg</file>
<file alias="eg.svg">svg/eg.svg</file>
<file alias="mk.svg">svg/mk.svg</file>
<file alias="un.svg">svg/un.svg</file>
<file alias="vc.svg">svg/vc.svg</file>
<file alias="tk.svg">svg/tk.svg</file>
<file alias="gg.svg">svg/gg.svg</file>
<file alias="lk.svg">svg/lk.svg</file>
<file alias="in.svg">svg/in.svg</file>
<file alias="zm.svg">svg/zm.svg</file>
<file alias="tn.svg">svg/tn.svg</file>
<file alias="pt.svg">svg/pt.svg</file>
<file alias="cm.svg">svg/cm.svg</file>
<file alias="tr.svg">svg/tr.svg</file>
<file alias="ht.svg">svg/ht.svg</file>
<file alias="pe.svg">svg/pe.svg</file>
<file alias="bf.svg">svg/bf.svg</file>
<file alias="br.svg">svg/br.svg</file>
<file alias="ga.svg">svg/ga.svg</file>
<file alias="km.svg">svg/km.svg</file>
<file alias="sc.svg">svg/sc.svg</file>
<file alias="ax.svg">svg/ax.svg</file>
<file alias="ng.svg">svg/ng.svg</file>
<file alias="gd.svg">svg/gd.svg</file>
<file alias="ms.svg">svg/ms.svg</file>
<file alias="lu.svg">svg/lu.svg</file>
<file alias="il.svg">svg/il.svg</file>
<file alias="mc.svg">svg/mc.svg</file>
<file alias="do.svg">svg/do.svg</file>
<file alias="ba.svg">svg/ba.svg</file>
<file alias="sj.svg">svg/sj.svg</file>
<file alias="td.svg">svg/td.svg</file>
<file alias="qa.svg">svg/qa.svg</file>
<file alias="gi.svg">svg/gi.svg</file>
<file alias="ar.svg">svg/ar.svg</file>
<file alias="sk.svg">svg/sk.svg</file>
<file alias="bg.svg">svg/bg.svg</file>
<file alias="az.svg">svg/az.svg</file>
<file alias="kw.svg">svg/kw.svg</file>
<file alias="za.svg">svg/za.svg</file>
<file alias="my.svg">svg/my.svg</file>
<file alias="id.svg">svg/id.svg</file>
<file alias="om.svg">svg/om.svg</file>
<file alias="fo.svg">svg/fo.svg</file>
<file alias="mu.svg">svg/mu.svg</file>
<file alias="cg.svg">svg/cg.svg</file>
<file alias="ir.svg">svg/ir.svg</file>
<file alias="mr.svg">svg/mr.svg</file>
<file alias="ky.svg">svg/ky.svg</file>
<file alias="vg.svg">svg/vg.svg</file>
<file alias="es-ct.svg">svg/es-ct.svg</file>
<file alias="kr.svg">svg/kr.svg</file>
<file alias="er.svg">svg/er.svg</file>
<file alias="me.svg">svg/me.svg</file>
<file alias="bw.svg">svg/bw.svg</file>
<file alias="zw.svg">svg/zw.svg</file>
<file alias="jp.svg">svg/jp.svg</file>
<file alias="ls.svg">svg/ls.svg</file>
<file alias="ch.svg">svg/ch.svg</file>
<file alias="pk.svg">svg/pk.svg</file>
<file alias="eh.svg">svg/eh.svg</file>
<file alias="dm.svg">svg/dm.svg</file>
<file alias="pg.svg">svg/pg.svg</file>
<file alias="se.svg">svg/se.svg</file>
<file alias="xk.svg">svg/xk.svg</file>
<file alias="im.svg">svg/im.svg</file>
<file alias="ki.svg">svg/ki.svg</file>
<file alias="ag.svg">svg/ag.svg</file>
<file alias="sn.svg">svg/sn.svg</file>
<file alias="gb.svg">svg/gb.svg</file>
<file alias="am.svg">svg/am.svg</file>
<file alias="tt.svg">svg/tt.svg</file>
<file alias="mq.svg">svg/mq.svg</file>
<file alias="et.svg">svg/et.svg</file>
<file alias="hn.svg">svg/hn.svg</file>
<file alias="mh.svg">svg/mh.svg</file>
<file alias="tl.svg">svg/tl.svg</file>
<file alias="ly.svg">svg/ly.svg</file>
<file alias="jm.svg">svg/jm.svg</file>
<file alias="af.svg">svg/af.svg</file>
<file alias="aq.svg">svg/aq.svg</file>
<file alias="mw.svg">svg/mw.svg</file>
<file alias="kn.svg">svg/kn.svg</file>
<file alias="tm.svg">svg/tm.svg</file>
<file alias="as.svg">svg/as.svg</file>
<file alias="cu.svg">svg/cu.svg</file>
<file alias="si.svg">svg/si.svg</file>
<file alias="gr.svg">svg/gr.svg</file>
<file alias="hr.svg">svg/hr.svg</file>
<file alias="kp.svg">svg/kp.svg</file>
<file alias="de.svg">svg/de.svg</file>
<file alias="bd.svg">svg/bd.svg</file>
<file alias="rw.svg">svg/rw.svg</file>
<file alias="sa.svg">svg/sa.svg</file>
<file alias="mg.svg">svg/mg.svg</file>
<file alias="np.svg">svg/np.svg</file>
<file alias="nl.svg">svg/nl.svg</file>
<file alias="al.svg">svg/al.svg</file>
<file alias="ge.svg">svg/ge.svg</file>
<file alias="gm.svg">svg/gm.svg</file>
<file alias="mt.svg">svg/mt.svg</file>
<file alias="pl.svg">svg/pl.svg</file>
<file alias="cy.svg">svg/cy.svg</file>
<file alias="co.svg">svg/co.svg</file>
<file alias="ne.svg">svg/ne.svg</file>
<file alias="sv.svg">svg/sv.svg</file>
<file alias="la.svg">svg/la.svg</file>
<file alias="at.svg">svg/at.svg</file>
<file alias="lb.svg">svg/lb.svg</file>
<file alias="pr.svg">svg/pr.svg</file>
<file alias="hk.svg">svg/hk.svg</file>
<file alias="lt.svg">svg/lt.svg</file>
<file alias="fr.svg">svg/fr.svg</file>
<file alias="sb.svg">svg/sb.svg</file>
<file alias="ca.svg">svg/ca.svg</file>
<file alias="mx.svg">svg/mx.svg</file>
<file alias="cd.svg">svg/cd.svg</file>
<file alias="fm.svg">svg/fm.svg</file>
<file alias="ml.svg">svg/ml.svg</file>
<file alias="eu.svg">svg/eu.svg</file>
<file alias="tc.svg">svg/tc.svg</file>
<file alias="ug.svg">svg/ug.svg</file>
<file alias="ee.svg">svg/ee.svg</file>
<file alias="rs.png">png/rs.png</file>
<file alias="ml.png">png/ml.png</file>
<file alias="ve.png">png/ve.png</file>
<file alias="ws.png">png/ws.png</file>
<file alias="na.png">png/na.png</file>
<file alias="cd.png">png/cd.png</file>
<file alias="tc.png">png/tc.png</file>
<file alias="gf.png">png/gf.png</file>
<file alias="ro.png">png/ro.png</file>
<file alias="lk.png">png/lk.png</file>
<file alias="sg.png">png/sg.png</file>
<file alias="ng.png">png/ng.png</file>
<file alias="au.png">png/au.png</file>
<file alias="vi.png">png/vi.png</file>
<file alias="kh.png">png/kh.png</file>
<file alias="bt.png">png/bt.png</file>
<file alias="pr.png">png/pr.png</file>
<file alias="it.png">png/it.png</file>
<file alias="sj.png">png/sj.png</file>
<file alias="gh.png">png/gh.png</file>
<file alias="gi.png">png/gi.png</file>
<file alias="ar.png">png/ar.png</file>
<file alias="kp.png">png/kp.png</file>
<file alias="cf.png">png/cf.png</file>
<file alias="bb.png">png/bb.png</file>
<file alias="dj.png">png/dj.png</file>
<file alias="gm.png">png/gm.png</file>
<file alias="af.png">png/af.png</file>
<file alias="la.png">png/la.png</file>
<file alias="us-ca.png">png/us-ca.png</file>
<file alias="hm.png">png/hm.png</file>
<file alias="ht.png">png/ht.png</file>
<file alias="by.png">png/by.png</file>
<file alias="jo.png">png/jo.png</file>
<file alias="az.png">png/az.png</file>
<file alias="cw.png">png/cw.png</file>
<file alias="im.png">png/im.png</file>
<file alias="fr.png">png/fr.png</file>
<file alias="il.png">png/il.png</file>
<file alias="gb-nir.png">png/gb-nir.png</file>
<file alias="ug.png">png/ug.png</file>
<file alias="cz.png">png/cz.png</file>
<file alias="kr.png">png/kr.png</file>
<file alias="hn.png">png/hn.png</file>
<file alias="nc.png">png/nc.png</file>
<file alias="st.png">png/st.png</file>
<file alias="ch.png">png/ch.png</file>
<file alias="tr.png">png/tr.png</file>
<file alias="al.png">png/al.png</file>
<file alias="nl.png">png/nl.png</file>
<file alias="mx.png">png/mx.png</file>
<file alias="td.png">png/td.png</file>
<file alias="ss.png">png/ss.png</file>
<file alias="kw.png">png/kw.png</file>
<file alias="bd.png">png/bd.png</file>
<file alias="gb-wls.png">png/gb-wls.png</file>
<file alias="uz.png">png/uz.png</file>
<file alias="rw.png">png/rw.png</file>
<file alias="ga.png">png/ga.png</file>
<file alias="vn.png">png/vn.png</file>
<file alias="ne.png">png/ne.png</file>
<file alias="hu.png">png/hu.png</file>
<file alias="gr.png">png/gr.png</file>
<file alias="tf.png">png/tf.png</file>
<file alias="ge.png">png/ge.png</file>
<file alias="lgbt.png">png/lgbt.png</file>
<file alias="so.png">png/so.png</file>
<file alias="ls.png">png/ls.png</file>
<file alias="io.png">png/io.png</file>
<file alias="za.png">png/za.png</file>
<file alias="cx.png">png/cx.png</file>
<file alias="mt.png">png/mt.png</file>
<file alias="ph.png">png/ph.png</file>
<file alias="ax.png">png/ax.png</file>
<file alias="km.png">png/km.png</file>
<file alias="lv.png">png/lv.png</file>
<file alias="bn.png">png/bn.png</file>
<file alias="pn.png">png/pn.png</file>
<file alias="vg.png">png/vg.png</file>
<file alias="bs.png">png/bs.png</file>
<file alias="fo.png">png/fo.png</file>
<file alias="ag.png">png/ag.png</file>
<file alias="co.png">png/co.png</file>
<file alias="pe.png">png/pe.png</file>
<file alias="sx.png">png/sx.png</file>
<file alias="yt.png">png/yt.png</file>
<file alias="bg.png">png/bg.png</file>
<file alias="um.png">png/um.png</file>
<file alias="ie.png">png/ie.png</file>
<file alias="gq.png">png/gq.png</file>
<file alias="sb.png">png/sb.png</file>
<file alias="cr.png">png/cr.png</file>
<file alias="lt.png">png/lt.png</file>
<file alias="fk.png">png/fk.png</file>
<file alias="pm.png">png/pm.png</file>
<file alias="kn.png">png/kn.png</file>
<file alias="th.png">png/th.png</file>
<file alias="sn.png">png/sn.png</file>
<file alias="iq.png">png/iq.png</file>
<file alias="fj.png">png/fj.png</file>
<file alias="bf.png">png/bf.png</file>
<file alias="my.png">png/my.png</file>
<file alias="hr.png">png/hr.png</file>
<file alias="lr.png">png/lr.png</file>
<file alias="gn.png">png/gn.png</file>
<file alias="nu.png">png/nu.png</file>
<file alias="pf.png">png/pf.png</file>
<file alias="np.png">png/np.png</file>
<file alias="aw.png">png/aw.png</file>
<file alias="ps.png">png/ps.png</file>
<file alias="si.png">png/si.png</file>
<file alias="sr.png">png/sr.png</file>
<file alias="jp.png">png/jp.png</file>
<file alias="tz.png">png/tz.png</file>
<file alias="id.png">png/id.png</file>
<file alias="mh.png">png/mh.png</file>
<file alias="mc.png">png/mc.png</file>
<file alias="qa.png">png/qa.png</file>
<file alias="to.png">png/to.png</file>
<file alias="mw.png">png/mw.png</file>
<file alias="pl.png">png/pl.png</file>
<file alias="mz.png">png/mz.png</file>
<file alias="je.png">png/je.png</file>
<file alias="as.png">png/as.png</file>
<file alias="sy.png">png/sy.png</file>
<file alias="tl.png">png/tl.png</file>
<file alias="tn.png">png/tn.png</file>
<file alias="dz.png">png/dz.png</file>
<file alias="ki.png">png/ki.png</file>
<file alias="cc.png">png/cc.png</file>
<file alias="mk.png">png/mk.png</file>
<file alias="ke.png">png/ke.png</file>
<file alias="ca.png">png/ca.png</file>
<file alias="cu.png">png/cu.png</file>
<file alias="mm.png">png/mm.png</file>
<file alias="pa.png">png/pa.png</file>
<file alias="gg.png">png/gg.png</file>
<file alias="sk.png">png/sk.png</file>
<file alias="sz.png">png/sz.png</file>
<file alias="cm.png">png/cm.png</file>
<file alias="bh.png">png/bh.png</file>
<file alias="gb-eng.png">png/gb-eng.png</file>
<file alias="ua.png">png/ua.png</file>
<file alias="is.png">png/is.png</file>
<file alias="pt.png">png/pt.png</file>
<file alias="ky.png">png/ky.png</file>
<file alias="pg.png">png/pg.png</file>
<file alias="fi.png">png/fi.png</file>
<file alias="cg.png">png/cg.png</file>
<file alias="sv.png">png/sv.png</file>
<file alias="ms.png">png/ms.png</file>
<file alias="cl.png">png/cl.png</file>
<file alias="bi.png">png/bi.png</file>
<file alias="re.png">png/re.png</file>
<file alias="mu.png">png/mu.png</file>
<file alias="pk.png">png/pk.png</file>
<file alias="hk.png">png/hk.png</file>
<file alias="gp.png">png/gp.png</file>
<file alias="xk.png">png/xk.png</file>
<file alias="mq.png">png/mq.png</file>
<file alias="do.png">png/do.png</file>
<file alias="gu.png">png/gu.png</file>
<file alias="tt.png">png/tt.png</file>
<file alias="dk.png">png/dk.png</file>
<file alias="md.png">png/md.png</file>
<file alias="in.png">png/in.png</file>
<file alias="er.png">png/er.png</file>
<file alias="mf.png">png/mf.png</file>
<file alias="gl.png">png/gl.png</file>
<file alias="cn.png">png/cn.png</file>
<file alias="gb-sct.png">png/gb-sct.png</file>
<file alias="mr.png">png/mr.png</file>
<file alias="mg.png">png/mg.png</file>
<file alias="nf.png">png/nf.png</file>
<file alias="mv.png">png/mv.png</file>
<file alias="lc.png">png/lc.png</file>
<file alias="eu.png">png/eu.png</file>
<file alias="tm.png">png/tm.png</file>
<file alias="tw.png">png/tw.png</file>
<file alias="ye.png">png/ye.png</file>
<file alias="om.png">png/om.png</file>
<file alias="pw.png">png/pw.png</file>
<file alias="li.png">png/li.png</file>
<file alias="sc.png">png/sc.png</file>
<file alias="tj.png">png/tj.png</file>
<file alias="ir.png">png/ir.png</file>
<file alias="bo.png">png/bo.png</file>
<file alias="dm.png">png/dm.png</file>
<file alias="bj.png">png/bj.png</file>
<file alias="gb-zet.png">png/gb-zet.png</file>
<file alias="gs.png">png/gs.png</file>
<file alias="ly.png">png/ly.png</file>
<file alias="me.png">png/me.png</file>
<file alias="lu.png">png/lu.png</file>
<file alias="sh.png">png/sh.png</file>
<file alias="gw.png">png/gw.png</file>
<file alias="eg.png">png/eg.png</file>
<file alias="mo.png">png/mo.png</file>
<file alias="se.png">png/se.png</file>
<file alias="py.png">png/py.png</file>
<file alias="ee.png">png/ee.png</file>
<file alias="br.png">png/br.png</file>
<file alias="vu.png">png/vu.png</file>
<file alias="bl.png">png/bl.png</file>
<file alias="ma.png">png/ma.png</file>
<file alias="mn.png">png/mn.png</file>
<file alias="tk.png">png/tk.png</file>
<file alias="ni.png">png/ni.png</file>
<file alias="ck.png">png/ck.png</file>
<file alias="ec.png">png/ec.png</file>
<file alias="no.png">png/no.png</file>
<file alias="zm.png">png/zm.png</file>
<file alias="gy.png">png/gy.png</file>
<file alias="wf.png">png/wf.png</file>
<file alias="kz.png">png/kz.png</file>
<file alias="sl.png">png/sl.png</file>
<file alias="us.png">png/us.png</file>
<file alias="gd.png">png/gd.png</file>
<file alias="sd.png">png/sd.png</file>
<file alias="sm.png">png/sm.png</file>
<file alias="ci.png">png/ci.png</file>
<file alias="mp.png">png/mp.png</file>
<file alias="zw.png">png/zw.png</file>
<file alias="ao.png">png/ao.png</file>
<file alias="de.png">png/de.png</file>
<file alias="ad.png">png/ad.png</file>
<file alias="cv.png">png/cv.png</file>
<file alias="ae.png">png/ae.png</file>
<file alias="tv.png">png/tv.png</file>
<file alias="nz.png">png/nz.png</file>
<file alias="sa.png">png/sa.png</file>
<file alias="et.png">png/et.png</file>
<file alias="nr.png">png/nr.png</file>
<file alias="va.png">png/va.png</file>
<file alias="gt.png">png/gt.png</file>
<file alias="at.png">png/at.png</file>
<file alias="jm.png">png/jm.png</file>
<file alias="es.png">png/es.png</file>
<file alias="gb.png">png/gb.png</file>
<file alias="bz.png">png/bz.png</file>
<file alias="ba.png">png/ba.png</file>
<file alias="kg.png">png/kg.png</file>
<file alias="am.png">png/am.png</file>
<file alias="lb.png">png/lb.png</file>
<file alias="vc.png">png/vc.png</file>
<file alias="ai.png">png/ai.png</file>
<file alias="bw.png">png/bw.png</file>
<file alias="be.png">png/be.png</file>
<file alias="tg.png">png/tg.png</file>
<file alias="ru.png">png/ru.png</file>
<file alias="cy.png">png/cy.png</file>
<file alias="bm.png">png/bm.png</file>
<file alias="bv.png">png/bv.png</file>
<file alias="fm.png">png/fm.png</file>
<file alias="uy.png">png/uy.png</file>
</qresource>
</RCC>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save