Comparar commits

..

35 Commits

Autor SHA1 Mensagem Data
sualko aa8bcf52de build v0.8.0 2014-07-02 12:10:13 +02:00
sualko 2060b8ac69 add translation for vCard 2014-07-02 12:09:46 +02:00
sualko 8776ad565d add expand triangle 2014-07-02 11:34:45 +02:00
Klaus 2e94cf6ba0 Add missing spanish translation 2014-06-30 13:15:31 +02:00
sualko 89bd4cdc48 build v0.8.0-beta 2014-06-27 15:34:27 +02:00
sualko 9d87d90141 adjust jsxc root and add sound files 2014-06-27 12:26:14 +02:00
sualko b6e4a6baca fix priority issue (46116a3e8d) 2014-06-27 12:18:43 +02:00
sualko 4dc319502f looking for username and password field (fix #47) 2014-06-26 15:17:55 +02:00
sualko 98e9f77074 use browser input check for contact dialog 2014-06-26 15:00:22 +02:00
sualko 37ac46f55b Add hint if roster is empty 2014-06-26 13:15:44 +02:00
sualko 92309b90be Add fingerprint explanation 2014-06-26 12:36:50 +02:00
sualko dc1a79e294 Add hint to browser-allow-button 2014-06-26 11:49:59 +02:00
sualko 5813f336a2 add close button to verification 2014-06-25 15:18:48 +02:00
sualko 46116a3e8d add support for priorities (#48) 2014-06-25 15:13:02 +02:00
sualko cfc9d5a77d show notice if no vCard is available 2014-06-25 12:51:22 +02:00
sualko 08c660a1ae fix chat in video window 2014-06-25 12:40:01 +02:00
sualko 2140f8ad72 grayscale for one-side subscription 2014-06-25 12:14:15 +02:00
Klaus de2eb4c7ba Merge pull request #50 from sualko/expand_roster_item
Merge expandable roster
2014-06-25 12:00:55 +02:00
sualko 075f29b040 fix rename field 2014-06-25 11:54:26 +02:00
sualko 2ceb2ab3a6 gui fixes
- enable/disable video icon
- adjust window highlighting
- css clean up
2014-06-23 13:52:38 +02:00
sualko 21153db52d add icons to expand item 2014-06-12 14:18:33 +02:00
sualko 45ed711ad8 add expand icon 2014-06-12 13:01:51 +02:00
sualko bdf8ead441 clean up stylesheet 2014-06-12 12:09:48 +02:00
Klaus Herberth 73116b0b33 fix ie input field 2014-06-12 00:08:41 +02:00
sualko 995133c4d2 enhance window icons 2014-06-10 16:37:22 +02:00
sualko 4d396d4133 fix margin between sys and normal msg 2014-06-10 12:33:49 +02:00
sualko de1c264c2b minor window design changes 2014-06-06 15:18:42 +02:00
sualko c6e050ab7c fix multiple emoticon issues
- change default replacement according to XEP-0038
- handle multiple emoticons (prevent double replacement)
- add thumbsdown, rose, music
2014-06-06 10:22:10 +02:00
sualko 97555780c5 enhance window design 2014-06-05 14:51:40 +02:00
Klaus 14338ededa Merge pull request #41 from johangm90/master
Change chat message design
2014-06-04 18:38:45 +02:00
sualko e7b087e8fe Add function to display vCard 2014-06-04 17:33:38 +02:00
johangm90 94f49dabef New chat window design 2014-06-03 18:56:28 -05:00
Klaus c0cd443a3d Merge pull request #40 from johangm90/master
add spanish translation
2014-06-03 15:21:00 +02:00
johangm90 2f023cda05 spanish translation
spanish translation

spanish translation
2014-06-03 08:03:08 -05:00
Klaus 03ca06ce25 Remove redundant content (homepage) 2014-06-02 00:40:37 +02:00
36 arquivos alterados com 2610 adições e 801 exclusões
+16 -1
Ver Arquivo
@@ -1,3 +1,18 @@
v0.8.0 / 2014-07-02
===
- add spanish translation
- add vCard view
- add more emoticons
- add grayscale to buddies without subscription
- add settings for priorities
- add hint if roster is empty
- add sound files
- new chat window design
- enhanced roster design
- fix emoticon replacement (XEP-0038)
- fix some ui issues (explanations,...)
- fix issue with password only field
v0.7.2 / 2014-05-28
===
- fix login issue
@@ -69,4 +84,4 @@ v0.5.1 / 2014-01-27
- handle already attached submit events on login form
- style changes
- fix webrtc startup
- don't block application on dsa key generation
- don't block application on dsa key generation
+1 -1
Ver Arquivo
@@ -20,7 +20,7 @@ module.exports = function(grunt) {
main: {
files: [ {
expand: true,
src: [ 'lib/strophe.jingle/*.js', 'lib/otr/build/**', 'lib/otr/lib/dsa-webworker.js', 'lib/otr/lib/sm-webworker.js', 'lib/otr/lib/const.js', 'lib/otr/lib/helpers.js', 'lib/otr/lib/dsa.js', 'lib/otr/vendor/*.js', 'lib/*.js', 'jsxc.lib.js', 'jsxc.lib.webrtc.js', '*.css', 'LICENSE', 'img/**' ],
src: [ 'lib/strophe.jingle/*.js', 'lib/otr/build/**', 'lib/otr/lib/dsa-webworker.js', 'lib/otr/lib/sm-webworker.js', 'lib/otr/lib/const.js', 'lib/otr/lib/helpers.js', 'lib/otr/lib/dsa.js', 'lib/otr/vendor/*.js', 'lib/*.js', 'jsxc.lib.js', 'jsxc.lib.webrtc.js', '*.css', 'LICENSE', 'img/**', 'sound/**' ],
dest: 'build/'
} ]
}
+1 -37
Ver Arquivo
@@ -1,44 +1,8 @@
# JavaScript XMPP Client
__Beware! This is beta software.__
Real-time chat app. This app requires an external XMPP server (openfire, ejabberd etc.).
### Features
- integration into existing UI
- one-to-one conversation (XMPP)
- encrypted one-to-one conversation (OTR)
- use of whitespace tags to start a OTR session
- user verification (SMP)
- encrypted one-to-one video call (WebRTC)
- [TURN REST API](http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00)
- fullscreen mode
- snapshots
- automatic link-detection
- emotions
- roster management
- multi-language support (de, en)
- multi-tab support
### Supported protocols
- XMPP Core (RFC6120)
- XMPP IM (RFC6121)
- Bidirectional-streams Over Synchronous HTTP (XEP-0124)
- XMPP Over BOSH (XEP-0206)
- Service Discovery (XEP-0030)
- CAP (XEP-0127)
- Jingle (XEP-0166)
- Jingle RTP Sessions (XEP-0167)
### Supported browsers
- Full support for __Chrome__ and __Firefox__.
- __IE__ doesn't support multiple tabs, WebRTC, and Notifications.
- __Safari__ doesn't support WebRTC and (before Safari 7) Notifications.
### Planned features
- multi user chat
- video conference
- encrypted file transfer
You find a list of features, supported protocols and browsers at the homepage of __[Javascript XMPP Client](http://www.jsxc.org)__.
## Developer notes
+9 -72
Ver Arquivo
@@ -1,97 +1,34 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="535.00458"
height="510.4368"
id="svg3896"
version="1.1"
inkscape:version="0.48+devel r"
sodipodi:docname="camera_icon_grey.svg">
<defs
id="defs3898" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="369.28572"
inkscape:cy="50.436783"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="954"
inkscape:window-height="711"
inkscape:window-x="129"
inkscape:window-y="144"
inkscape:window-maximized="0" />
id="svg2"
width="20"
height="20">
<metadata
id="metadata3901">
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-5.7142771,-72.362177)">
<rect
style="fill:#808080;stroke:none;stroke-width:1.6172694;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect3904"
width="290.51404"
height="294.08438"
x="86.054779"
y="292.97778" />
transform="matrix(0.03788594,0,0,0.03788594,-0.41340793,-2.6310716)">
<path
style="fill:#808080;stroke:none"
d="m 292.28572,420.35915 229.57599,-101.39986 0,232.54576 -233.04644,-102.93271 z"
id="path3906"
inkscape:connector-curvature="0" />
<path
sodipodi:type="arc"
style="fill:#808080;stroke:none"
id="path3908"
sodipodi:cx="242.85715"
sodipodi:cy="315.21933"
sodipodi:rx="117.14286"
sodipodi:ry="117.14286"
d="M 360.00001,315.21933 A 117.14286,117.14286 0 0 1 242.85715,432.36219 117.14286,117.14286 0 0 1 125.71429,315.21933 117.14286,117.14286 0 0 1 242.85715,198.07647 117.14286,117.14286 0 0 1 360.00001,315.21933 Z"
transform="matrix(1.1334136,0,0,1.1663886,-136.76164,-155.82534)" />
<a
id="a3912"
style="fill:#808080;stroke:none"
transform="matrix(0.86859739,0,0,0.89386794,47.913668,10.526572)">
<path
sodipodi:type="arc"
style="fill:#808080;stroke:none"
id="path3910"
sodipodi:cx="242.85715"
sodipodi:cy="315.21933"
sodipodi:rx="117.14286"
sodipodi:ry="117.14286"
d="M 360.00001,315.21933 A 117.14286,117.14286 0 0 1 242.85715,432.36219 117.14286,117.14286 0 0 1 125.71429,315.21933 117.14286,117.14286 0 0 1 242.85715,198.07647 117.14286,117.14286 0 0 1 360.00001,315.21933 Z"
transform="matrix(1.304878,0,0,1.304878,3.67247,-186.10345)" />
</a>
d="m 361.65148,313.51768 177.16074,-131.78516 0,302.22999 L 358.97338,350.18517 Z M 10.911922,182.40634 l 378.372678,0 0,302.65582 -378.372678,0 z" />
</g>
</svg>

Antes

Largura:  |  Altura:  |  Tamanho: 3.3 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 1010 B

+16 -41
Ver Arquivo
@@ -13,8 +13,8 @@
height="510.4368"
id="svg3896"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="camera_icon.svg">
inkscape:version="0.48+devel r"
sodipodi:docname="camera_icon_white.svg">
<defs
id="defs3898" />
<sodipodi:namedview
@@ -24,9 +24,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="369.28572"
inkscape:cy="50.436783"
inkscape:zoom="0.98994949"
inkscape:cx="353.91934"
inkscape:cy="233.8456"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
@@ -34,11 +34,11 @@
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="954"
inkscape:window-height="711"
inkscape:window-x="833"
inkscape:window-y="106"
inkscape:window-maximized="0" />
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1" />
<metadata
id="metadata3901">
<rdf:RDF>
@@ -57,41 +57,16 @@
id="layer1"
transform="translate(-5.7142771,-72.362177)">
<rect
style="fill:#ffffff;stroke:#ffffff;stroke-width:1.61726940000000008;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
style="fill:#ffffff;stroke:none;stroke-width:1.6172694;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3904"
width="290.51404"
height="294.08438"
x="86.054779"
y="292.97778" />
width="378.37268"
height="302.65582"
x="10.911922"
y="182.40634" />
<path
style="fill:#ffffff;stroke:none"
d="m 292.28572,420.35915 229.57599,-101.39986 0,232.54576 -233.04644,-102.93271 z"
d="m 361.65148,313.51768 177.16074,-131.78516 0,302.22999 -179.83884,-133.77734 z"
id="path3906"
inkscape:connector-curvature="0" />
<path
sodipodi:type="arc"
style="fill:#ffffff;stroke:none"
id="path3908"
sodipodi:cx="242.85715"
sodipodi:cy="315.21933"
sodipodi:rx="117.14286"
sodipodi:ry="117.14286"
d="m 360.00001,315.21933 a 117.14286,117.14286 0 1 1 -234.28572,0 117.14286,117.14286 0 1 1 234.28572,0 z"
transform="matrix(1.1334136,0,0,1.1663886,-136.76164,-155.82534)" />
<a
id="a3912"
style="fill:#ffffff"
transform="matrix(0.86859739,0,0,0.89386794,47.913668,10.526572)">
<path
sodipodi:type="arc"
style="fill:#ffffff;stroke:none"
id="path3910"
sodipodi:cx="242.85715"
sodipodi:cy="315.21933"
sodipodi:rx="117.14286"
sodipodi:ry="117.14286"
d="m 360.00001,315.21933 c 0,64.69622 -52.44665,117.14286 -117.14286,117.14286 -64.69622,0 -117.14286,-52.44664 -117.14286,-117.14286 0,-64.69622 52.44664,-117.14286 117.14286,-117.14286 64.69621,0 117.14286,52.44664 117.14286,117.14286 z"
transform="matrix(1.304878,0,0,1.304878,3.67247,-186.10345)" />
</a>
</g>
</svg>

Antes

Largura:  |  Altura:  |  Tamanho: 3.2 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 2.1 KiB

Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 1.5 KiB

+30 -10
Ver Arquivo
@@ -14,7 +14,7 @@
inkscape:version="0.48+devel r"
width="15"
height="15"
sodipodi:docname="padlock_open-white.svg">
sodipodi:docname="padlock_close_green.svg">
<metadata
id="metadata3047">
<rdf:RDF>
@@ -42,25 +42,45 @@
inkscape:window-height="1056"
id="namedview3043"
showgrid="false"
inkscape:zoom="44.500587"
inkscape:cx="6.292871"
inkscape:cy="6.4926565"
inkscape:zoom="32"
inkscape:cx="12.823367"
inkscape:cy="8.9449238"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="svg3041"
borderlayer="true" />
<rect
style="fill:#009800;stroke:#009800;stroke-width:0.92522794"
style="fill:#44aa00;stroke:#44aa00;stroke-width:0.92522794"
id="rect3051"
width="10.232394"
height="6.4687548"
x="2.5534275"
y="8.074255" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-color:currentColor;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#009800;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.90384686;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 7.5078125,2.6797098 C 5.0260054,2.6797098 3.491603,3.472493 2.75,4.621116 2.008397,5.7697391 2.0878906,7.0238438 2.0878906,7.699241 l 1.9042969,0 c 0,-0.7329344 0.013699,-1.5125503 0.3574219,-2.0449218 0.3437231,-0.5323715 1.0433343,-1.0703125 3.1582031,-1.0703125 2.0264219,0 2.9669635,0.6265545 3.4326915,1.3827484 0.465728,0.7561939 0.400333,1.7142789 0.400333,1.7142789 0.04517,1.7732263 -0.06599,4.303173 0.0049,5.535784 l 0.05274,0.898438 0.898437,0 0.945445,-0.0031 0.01,-6.4361369 c 0,0 0.06201,-1.6621328 -0.685321,-2.8754827 C 11.819768,3.587152 10.078064,2.6797098 7.5078125,2.6797098 Z"
id="path3848"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssccssscccccccs" />
style="fill:none;fill-opacity:1;stroke:#44aa00;stroke-width:2.08827519;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4101"
sodipodi:type="arc"
sodipodi:cx="7.6713805"
sodipodi:cy="6.7928491"
sodipodi:rx="4.534133"
sodipodi:ry="4.5301714"
sodipodi:start="3.1415927"
sodipodi:end="0"
d="M 3.1372476,6.7928489 A 4.534133,4.5301714 0 0 1 7.6713806,2.2626777 4.534133,4.5301714 0 0 1 12.205513,6.7928491"
sodipodi:open="true" />
<rect
style="fill:#44aa00;fill-opacity:1;stroke:none;stroke-width:1.39526081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4153"
width="2.0906768"
height="1.0984892"
x="2.0913804"
y="6.7554431" />
<rect
y="6.7632556"
x="11.157786"
height="1.0984892"
width="2.0906768"
id="rect4155"
style="fill:#44aa00;fill-opacity:1;stroke:none;stroke-width:1.39526081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</svg>

Antes

Largura:  |  Altura:  |  Tamanho: 3.3 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 2.7 KiB

+38 -10
Ver Arquivo
@@ -14,7 +14,7 @@
inkscape:version="0.48+devel r"
width="15"
height="15"
sodipodi:docname="padlock_open-white.svg">
sodipodi:docname="padlock_close_grey.svg">
<metadata
id="metadata3047">
<rdf:RDF>
@@ -42,9 +42,9 @@
inkscape:window-height="1056"
id="namedview3043"
showgrid="false"
inkscape:zoom="44.500587"
inkscape:cx="6.292871"
inkscape:cy="6.4926565"
inkscape:zoom="32"
inkscape:cx="12.792117"
inkscape:cy="8.9449238"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
@@ -57,10 +57,38 @@
height="6.4687548"
x="2.5534275"
y="8.074255" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-color:currentColor;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.90384686;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 7.5078125,2.6797098 C 5.0260054,2.6797098 3.491603,3.472493 2.75,4.621116 2.008397,5.7697391 2.0878906,7.0238438 2.0878906,7.699241 l 1.9042969,0 c 0,-0.7329344 0.013699,-1.5125503 0.3574219,-2.0449218 0.3437231,-0.5323715 1.0433343,-1.0703125 3.1582031,-1.0703125 2.0264219,0 2.9669635,0.6265545 3.4326915,1.3827484 0.465728,0.7561939 0.400333,1.7142789 0.400333,1.7142789 0.04517,1.7732263 -0.06599,4.303173 0.0049,5.535784 l 0.05274,0.898438 0.898437,0 0.945445,-0.0031 0.01,-6.4361369 c 0,0 0.06201,-1.6621328 -0.685321,-2.8754827 C 11.819768,3.587152 10.078064,2.6797098 7.5078125,2.6797098 Z"
id="path3848"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssccssscccccccs" />
<a
id="a4157"
style="fill:none;stroke:#808080">
<path
sodipodi:open="true"
d="M 3.1372476,6.7928489 A 4.534133,4.5301714 0 0 1 7.6713806,2.2626777 4.534133,4.5301714 0 0 1 12.205513,6.7928491"
sodipodi:end="0"
sodipodi:start="3.1415927"
sodipodi:ry="4.5301714"
sodipodi:rx="4.534133"
sodipodi:cy="6.7928491"
sodipodi:cx="7.6713805"
sodipodi:type="arc"
id="path4101"
style="fill:none;fill-opacity:1;stroke:#808080;stroke-width:2.08827519;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</a>
<g
id="g4170"
style="fill:#808080">
<rect
y="6.7554431"
x="2.0913804"
height="1.0984892"
width="2.0906768"
id="rect4153"
style="fill:#808080;fill-opacity:1;stroke:none;stroke-width:1.39526081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#808080;fill-opacity:1;stroke:none;stroke-width:1.39526081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4155"
width="2.0906768"
height="1.0984892"
x="11.157786"
y="6.7632556" />
</g>
</svg>

Antes

Largura:  |  Altura:  |  Tamanho: 3.3 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 2.8 KiB

+39 -11
Ver Arquivo
@@ -14,7 +14,7 @@
inkscape:version="0.48+devel r"
width="15"
height="15"
sodipodi:docname="padlock_open-white.svg">
sodipodi:docname="padlock_close_orange.svg">
<metadata
id="metadata3047">
<rdf:RDF>
@@ -42,25 +42,53 @@
inkscape:window-height="1056"
id="namedview3043"
showgrid="false"
inkscape:zoom="44.500587"
inkscape:cx="6.292871"
inkscape:cy="6.4926565"
inkscape:zoom="32"
inkscape:cx="12.792117"
inkscape:cy="8.9449238"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="svg3041"
borderlayer="true" />
<rect
style="fill:#ff9955;stroke:#ff9955;stroke-width:0.92522794"
style="fill:#ff7f2a;stroke:#ff7f2a;stroke-width:0.92522794"
id="rect3051"
width="10.232394"
height="6.4687548"
x="2.5534275"
y="8.074255" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-color:currentColor;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ff9955;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.90384686;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 7.5078125,2.6797098 C 5.0260054,2.6797098 3.491603,3.472493 2.75,4.621116 2.008397,5.7697391 2.0878906,7.0238438 2.0878906,7.699241 l 1.9042969,0 c 0,-0.7329344 0.013699,-1.5125503 0.3574219,-2.0449218 0.3437231,-0.5323715 1.0433343,-1.0703125 3.1582031,-1.0703125 2.0264219,0 2.9669635,0.6265545 3.4326915,1.3827484 0.465728,0.7561939 0.400333,1.7142789 0.400333,1.7142789 0.04517,1.7732263 -0.06599,4.303173 0.0049,5.535784 l 0.05274,0.898438 0.898437,0 0.945445,-0.0031 0.01,-6.4361369 c 0,0 0.06201,-1.6621328 -0.685321,-2.8754827 C 11.819768,3.587152 10.078064,2.6797098 7.5078125,2.6797098 Z"
id="path3848"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssccssscccccccs" />
<a
id="a4157"
style="fill:none;stroke:#ff7f2a">
<path
sodipodi:open="true"
d="M 3.1372476,6.7928489 A 4.534133,4.5301714 0 0 1 7.6713806,2.2626777 4.534133,4.5301714 0 0 1 12.205513,6.7928491"
sodipodi:end="0"
sodipodi:start="3.1415927"
sodipodi:ry="4.5301714"
sodipodi:rx="4.534133"
sodipodi:cy="6.7928491"
sodipodi:cx="7.6713805"
sodipodi:type="arc"
id="path4101"
style="fill:none;fill-opacity:1;stroke:#ff7f2a;stroke-width:2.08827519;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</a>
<g
id="g4170"
style="fill:#ff7f2a">
<rect
y="6.7554431"
x="2.0913804"
height="1.0984892"
width="2.0906768"
id="rect4153"
style="fill:#ff7f2a;fill-opacity:1;stroke:none;stroke-width:1.39526081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#ff7f2a;fill-opacity:1;stroke:none;stroke-width:1.39526081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4155"
width="2.0906768"
height="1.0984892"
x="11.157786"
y="6.7632556" />
</g>
</svg>

Antes

Largura:  |  Altura:  |  Tamanho: 3.3 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 2.8 KiB

Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 560 B

+66
Ver Arquivo
@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="25"
height="25"
id="svg2"
version="1.1"
inkscape:version="0.48+devel r"
viewBox="0 0 25 25.000001"
sodipodi:docname="speech_balloon_white.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="22.4"
inkscape:cx="25.186628"
inkscape:cy="14.479999"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-228.24219,-320.66798)">
<path
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 240.77627,324.02578 a 12.489309,7.9254426 0 0 0 -12.48944,7.92538 12.489309,7.9254426 0 0 0 5.26146,6.45637 c -0.17862,1.91196 -1.06119,3.95363 -3.14604,4.64437 2.54121,-0.11444 5.60026,-1.93057 7.47209,-3.40137 a 12.489309,7.9254426 0 0 0 2.90193,0.22616 12.489309,7.9254426 0 0 0 12.48928,-7.92553 12.489309,7.9254426 0 0 0 -12.48928,-7.92538 z"
id="path4101"
inkscape:connector-curvature="0" />
</g>
</svg>

Depois

Largura:  |  Altura:  |  Tamanho: 2.3 KiB

+450 -132
Ver Arquivo
@@ -38,6 +38,10 @@ p.jsxc_center {
min-width: 300px;
}
#jsxc_dialog p {
margin-bottom: 1em;
}
#jsxc_dialog h3 {
font-size: 120%;
font-weight: bold;
@@ -48,7 +52,11 @@ p.jsxc_center {
#jsxc_dialog p input {
margin-bottom: 5px;
width: 60%;
outline: none;
outline: none;
}
#jsxc_dialog p input[type="submit"] {
width: auto;
}
#jsxc_dialog p label {
@@ -63,7 +71,40 @@ p.jsxc_center {
}
#jsxc_dialog p.jsxc_maxWidth {
max-width: 500px;
max-width: 500px;
}
#jsxc_dialog fieldset {
border: 2px solid #ccc;
}
#jsxc_dialog legend {
padding: 0px 10px;
font-weight: bold;
}
#jsxc_dialog input {
outline: none;
}
#jsxc_dialog input:invalid {
border:1px solid red;
}
#jsxc_dialog .jsxc_fieldsetPriority {
width: 200px;
padding: 10px;
border-radius: 3px;
}
#jsxc_dialog .jsxc_fieldsetPriority label {
display: inline-block;
width: 100px;
}
#jsxc_dialog .jsxc_fieldsetPriority input[type="Number"] {
display: inline-block;
width: 50px;
}
/*############################
@@ -76,8 +117,11 @@ li .jsxc_name {
text-overflow: ellipsis;
white-space: nowrap;
}
li .jsxc_name:hover {
color: #FAFAFA;
}
.jsxc_avatar, ul#jsxc_buddylist li:hover .jsxc_avatar {
.jsxc_avatar,ul#jsxc_buddylist li:hover .jsxc_avatar {
width: 25px;
height: 25px;
line-height: 25px;
@@ -150,10 +194,11 @@ div#jsxc_roster .jsxc_wait h3 {
/** Input field for alias renaming */
#jsxc_roster input {
position: absolute;
top: 50%;
left: 31px;
top: 2px;
width: 157px;
height: 22px;
height: 18px;
margin-top: -11px;
padding: 2px;
border: 0px;
background-image: none;
@@ -162,11 +207,22 @@ div#jsxc_roster .jsxc_wait h3 {
-moz-box-shadow: inset 0 0 5px #888;
-webkit-box-shadow: inset 0 0 5px #888;
box-shadow: inner 0 0 5px #888;
outline: none;
outline: none;
}
#jsxc_roster .jsxc_expand input {
left: 51px;
width: 137px;
}
div#jsxc_roster p {
color: #939393;
padding: 10px;
}
div#jsxc_roster p a {
color: #b1b1b1;
text-decoration: underline;
}
div#jsxc_roster>.jsxc_bottom {
@@ -219,7 +275,7 @@ div#jsxc_roster>.jsxc_bottom li {
white-space: nowrap;
}
div#jsxc_roster>.jsxc_bottom li:hover:not(.jsxc_disabled) {
div#jsxc_roster>.jsxc_bottom li:hover:not(.jsxc_disabled ) {
color: #fff;
background-color: #3F8FBA;
}
@@ -238,6 +294,7 @@ div#jsxc_roster>.jsxc_bottom ul li:last-child {
width: 30px;
}
/** own avatar */
#jsxc_avatar {
float: left;
margin: 0px 2px;
@@ -311,61 +368,150 @@ ul#jsxc_buddylist li {
line-height: 30px;
padding-left: 3px;
z-index: 85;
overflow: hidden;
}
ul#jsxc_buddylist .jsxc_name {
padding-right: 30px;
}
ul#jsxc_buddylist li.jsxc_expand {
height: 54px;
}
ul#jsxc_buddylist li.jsxc_expand .jsxc_avatar, ul#jsxc_buddylist li.jsxc_expand .jsxc_avatar img {
width: 48px;
height: 48px;
}
#jsxc_buddylist .jsxc_control {
position:absolute;
width: 30px;
height: 30px;
top: 0px;
right: 0px;
cursor: pointer;
}
#jsxc_buddylist .jsxc_control:after {
content: '▾';
position: absolute;
left: 50%;
top: 15px;
width: 16px;
height: 16px;
line-height: 16px;
text-align: center;
margin-left: -8px;
margin-top: -8px;
border-radius: 8px;
color: #c1c1c1;
background-color: rgba(150, 150, 150, 0.5);
opacity: 0.6;
-webkit-transition: -webkit-transform 0.5s;
transition: transform 0.5s;
}
#jsxc_buddylist .jsxc_control:hover:after {
color: #fff;
opacity: 1.0;
}
#jsxc_buddylist li.jsxc_expand .jsxc_control:after {
/* content: '▴'; */
-ms-transform:rotate(180deg); /* IE 9 */
-webkit-transform:rotate(180deg);
transform:rotate(180deg);
}
#jsxc_buddylist .jsxc_options {
height: 20px;
float: left;
border-radius:2px;
background-color: rgba(150, 150, 150, 0.5);
}
#jsxc_buddylist .jsxc_options > div {
height: 20px;
width: 20px;
float: left;
margin-right:0px 1px;
background-repeat: no-repeat;
background-position: center center;
opacity: 0.6;
cursor: pointer;
}
#jsxc_buddylist .jsxc_options > div:hover {
opacity: 1;
}
#jsxc_buddylist .jsxc_chaticon {
background-image: url('img/speech_balloon_white.svg');
background-size: 15px 15px;
}
#jsxc_buddylist .jsxc_videoicon {
background-image: url('img/camera_icon_white.svg');
background-size: 13px 13px;
}
#jsxc_buddylist .jsxc_vcardicon {
font-size: 15px;
line-height: 20px;
text-align: center;
color: #fff;
font-weight: bold;
font-family: serif;
}
ul#jsxc_buddylist li:hover {
color: #FAFAFA;
}
ul#jsxc_buddylist li.jsxc_oneway {
ul#jsxc_buddylist .jsxc_oneway {
opacity: 0.7;
}
ul#jsxc_buddylist .jsxc_options {
height: 30px;
.jsxc_oneway .jsxc_avatar {
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: grayscale(100%);
}
ul#jsxc_buddylist .jsxc_right {
float:left;
}
ul#jsxc_buddylist .jsxc_right {
float: right;
overflow: hidden;
transition: width 2s;
width: 0px;
-webkit-transition: width .5s; /* Safari */
white-space: nowrap;
margin-right: 6px;
}
ul#jsxc_buddylist .jsxc_options div {
line-height: 30px;
height: 30px;
width: 20px;
cursor: pointer;
opacity: 0.7;
display: inline-block;
ul#jsxc_buddylist .jsxc_right div {
font-weight: bold;
text-align: center;
font-size: 17px;
overflow: hidden;
font-size: 13px;
line-height: 20px;
color: #fff;
}
ul#jsxc_buddylist li[data-type="chat"]:hover .jsxc_options {
width: 50px;
ul#jsxc_buddylist li[data-type!="chat"] .jsxc_right {
display: none;
}
ul#jsxc_buddylist .jsxc_options div:hover {
ul#jsxc_buddylist .jsxc_right div:hover {
opacity: 1.0;
}
ul#jsxc_buddylist .jsxc_rename {
/* background-image: url('../img/edit.png'); */
/* background-repeat: no-repeat; */
/* background-position: center center; */
/* background-size: 15px 15px; */
transform: scaleX(-1);
}
ul#jsxc_buddylist .jsxc_delete {
/* text-transform: lowercase; */
/* font-weight: bold; */
/* vertical-align: middle; */
/* font-size: 17px; */
}
#jsxc_roster .jsxc_avatar {
position: relative;
cursor: pointer;
}
#jsxc_roster .jsxc_avatar img {
cursor: pointer;
}
div#jsxc_toggleRoster {
@@ -409,29 +555,32 @@ div#jsxc_windowList>ul>li {
margin: 0px;
display: block;
float: right;
width: 200px;
width: 250px;
background-color: #282323;
height: 30px;
position: relative;
overflow: visible;
margin-right: 5px;
box-shadow: 0px 0px 5px #000;
cursor: pointer;
}
div#jsxc_windowList>ul>li.jsxc_min {
width: 200px;
}
/*############################
*######### Window ###########
*############################*/
div.jsxc_bar {
background-color: #282323;
cursor: pointer;
height: 30px;
line-height: 30px;
margin-left: 2px;
line-height: 26px;
padding: 2px;
color: #939393;
}
div.jsxc_bar:hover {
color: #FAFAFA;
width: 100%;
box-sizing: border-box;
overflow: hidden;
}
div.jsxc_cycle {
@@ -453,64 +602,135 @@ div#jsxc_windowList>ul>li.jsxc_unreadMsg .jsxc_cycle {
/** Contains text area */
div.jsxc_window {
display: none;
width: 200px;
height: 255px;
position: absolute;
bottom: 30px;
bottom: 0px;
left: 0px;
right: 0px;
height: auto;
background-color: #A4A4A4;
box-shadow: 0px 0px 5px #000;
z-index: 80;
cursor: default;
cursor: default;
}
div.jsxc_window .jsxc_tools {
div.jsxc_window .jsxc_emoticons {
height: 30px;
width: 30px;
position: absolute;
top: 240px;
right: 0px;
cursor: pointer;
}
div.jsxc_window .jsxc_emoticons:after {
content: ' ';
background-image: url('img/smiley.png');
background-position: center center;
background-repeat: no-repeat;
height: 30px;
width: 30px;
opacity: 0.3;
position: absolute;
top: 0px;
left: 0px;
width: 200px;
height: 23px;
background-color: #282323;
box-shadow: 0px 5px 5px -5px #000;
}
div.jsxc_window .jsxc_emoticons:hover:after {
opacity: 0.5;
}
div.jsxc_window .jsxc_emoticons ul {
display: none;
position: absolute;
bottom: 33px;
right: 3px;
width: 210px;
background-color: rgba(40, 35, 35, 0.8);
padding: 3px;
border-radius: 3px;
z-index: 200;
}
div.jsxc_window .jsxc_emoticons ul:after {
content: '';
position: absolute;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 6px solid rgba(40, 35, 35, 0.8);
display: block;
width: 0;
z-index: 1;
right: 6px;
bottom: -6px;
}
div.jsxc_window .jsxc_emoticons li {
float: right;
cursor: pointer;
}
div.jsxc_window .jsxc_emoticons img {
cursor: pointer;
border-radius: 3px;
}
div.jsxc_window .jsxc_emoticons img:hover {
background-color: rgba(255, 255, 255, 0.8);
}
/** groups elements, which will be hidden, if the window is minimized. */
.jsxc_window .jsxc_fade {
position: relative;
}
.jsxc_window .jsxc_gradient {
position: absolute;
top: 0px;
left: 0px;
right: 0px;
height: 15px;
z-index: 100;
background: -moz-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(164,
164, 164, 1)), color-stop(100%, rgba(40, 35, 35, 0)));
/* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* IE10+ */
background: linear-gradient(to bottom, #a4a4a4 0%, rgba(40, 35, 35, 0)
100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a4a4a4',
endColorstr='#00282323', GradientType=0); /* IE6-9 */
}
div.jsxc_window .jsxc_avatar {
margin-top: 1px;
}
div.jsxc_window .jsxc_textarea {
width: 200px;
height: 200px;
width: 100%;
height: 100%;
overflow: hidden;
padding: 3px;
}
div.jsxc_window .slimScrollDiv {
position: absolute;
top: 22px;
left: 0px;
margin: 0px 0px 6px 0px;
}
div.jsxc_chatmessage,input.jsxc_chatmessage {
margin: 5px;
border-radius: 5px !important;
padding: 3px;
width: 157px;
div.jsxc_chatmessage {
margin: 3px;
padding: 4px;
padding-right: 10px;
max-width: 76%;
word-wrap: break-word;
background-color: #fff;
position: relative;
outline: none;
}
div.jsxc_chatmessage.jsxc_received {
}
div.jsxc_chatmessage.jsxc_received:before {
content: '✓';
position: absolute;
bottom: 2px;
left: 4px;
font-size: 10px;
line-height: 10px;
color: green;
outline: none;
clear: both;
}
div.jsxc_chatmessage a {
@@ -524,66 +744,131 @@ div.jsxc_chatmessage img {
}
/** incoming message */
div.jsxc_in,input.jsxc_in {
text-align: left;
margin-right: 30px;
border: 1px solid blue;
div.jsxc_in {
float: left;
position: relative;
margin-left: 10px;
background: #f1f7fd;
border: solid 1px #a6b8c9;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
div.jsxc_in:after {
content: '';
position: absolute;
border-style: solid;
border-width: 5px 6px 5px 0;
border-color: transparent #f1f7fd;
display: block;
width: 0;
z-index: 1;
left: -6px;
bottom: 10px;
}
div.jsxc_out.jsxc_received:before {
content: '✓';
position: absolute;
bottom: 2px;
right: 2px;
font-size: 12px;
line-height: 12px;
color: green;
}
/** outgoing message */
div.jsxc_out,input.jsxc_out {
text-align: right;
margin-left: 30px;
border: 1px solid green !important;
div.jsxc_out {
float: right;
position: relative;
margin-right: 10px;
background: #e6ffd1;
border: solid 1px #b4d89f;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
div.jsxc_out:after {
content: '';
position: absolute;
border-style: solid;
border-width: 5px 0 5px 6px;
border-color: transparent #e6ffd1;
display: block;
width: 0;
z-index: 1;
right: -6px;
bottom: 10px;
}
/** system message */
div.jsxc_sys {
width: 182px;
border: 1px solid black;
width: auto;
max-width: none;
padding-right: 4px;
box-sizing: border-box;
margin-right: 3px;
border-radius: 3px;
}
.jsxc_window input.jsxc_textinput {
position: absolute;
top: 226px;
left: 30px;
width: 157px;
height: 16px;
width: 100%;
height: 30px;
margin: 0px;
line-height: 16px;
outline:none;
}
.jsxc_window .jsxc_close {
text-transform: uppercase;
color: #939393;
font-family: Arial;
font-weight: bold;
line-height: 17px;
cursor: pointer;
float: right;
padding: 3px;
padding-right: 40px;
outline: none;
border-radius: 0px;
box-sizing: border-box;
text-align: right;
}
.jsxc_window .jsxc_close:hover {
color: #FAFAFA;
.jsxc_window ::-webkit-input-placeholder {
color: #000;
opacity: 0.3;
}
.jsxc_window ::-moz-placeholder {
color: #000;
opacity: 0.3;
} /* firefox 19+ */
.jsxc_window :-ms-input-placeholder {
color: rgba(0, 0, 0, 0.4);
} /* ie */
.jsxc_window input:-moz-placeholder {
color: #000;
opacity: 0.3;
}
div.jsxc_window .jsxc_tools {
height: 26px;
float: right;
}
.jsxc_min .jsxc_tools {
display: none;
}
div.jsxc_window .jsxc_tools > div {
width: 17px;
height: 26px;
display: block;
float: left;
color: #939393;
font-family: Arial;
line-height: 26px;
cursor: pointer;
text-align: center;
}
div.jsxc_settings {
color: #939393;
font-family: Arial;
line-height: 17px;
cursor: pointer;
background-image: url('img/gear_grey.svg');
background-size: 15px 15px;
background-repeat: no-repeat;
background-position: center center;
width: 17px;
height: 17px;
display: block;
float: left;
overflow: visible;
padding: 3px;
}
div.jsxc_settings:hover,div.jsxc_settings.hover {
@@ -595,10 +880,10 @@ div.jsxc_settings ul {
padding: 0px;
margin: 0px;
position: absolute;
top: 23px;
top: 30px;
left: 0px;
box-shadow: 0px 5px 5px -5px #000;
z-index: 90;
z-index: 110;
overflow: visible;
background-color: #282323;
display: none;
@@ -610,13 +895,14 @@ div.jsxc_settings li {
padding-left: 10px;
height: 30px;
line-height: 30px;
text-align: left;
}
div.jsxc_settings li:first-child {
border-top: 1px solid #ccc;
}
div.jsxc_settings li:hover:not(.jsxc_disabled){
div.jsxc_settings li:hover:not(.jsxc_disabled ){
color: #fff;
background-color: #3F8FBA;
}
@@ -627,15 +913,14 @@ div.jsxc_settings li.jsxc_disabled {
}
div.jsxc_transfer {
padding: 3px;
width: 17px;
height: 17px;
background-image: url('img/padlock_open_grey.svg');
background-repeat: no-repeat;
background-position: center center;
background-size: 15px 15px;
cursor: pointer;
float: left;
background-size: 12px 12px;
}
div.jsxc_transfer:hover {
background-image: url('img/padlock_open_white.svg');
}
div.jsxc_transfer.jsxc_fin {
@@ -650,6 +935,39 @@ div.jsxc_transfer.jsxc_enc.jsxc_trust {
background-image: url('img/padlock_close_green.svg');
}
#colorbox, #cboxWrapper {
outline: none;
.jsxc_window .jsxc_close {
font-size: 20px;
}
.jsxc_window .jsxc_close:hover {
color: #FAFAFA;
}
#colorbox,#cboxWrapper {
outline: none;
}
/*############################
*######### Other ############
*############################*/
ul.jsxc_vCard {
min-width: 400px;
}
ul.jsxc_vCard ul {
margin-left: 20px;
}
ul.jsxc_vCard li {
cursor: default !important;
}
ul.jsxc_vCard strong {
}
img.jsxc_vCard {
float: right;
max-width: 200px;
max-height: 200px;
}
+557 -72
Ver Arquivo
@@ -1,5 +1,5 @@
/**
* jsxc v0.7.2 - 2014-05-28
* jsxc v0.8.0 - 2014-07-02
*
* Copyright (c) 2014 Klaus Herberth <klaus@jsxc.org> <br>
* Released under the MIT license
@@ -7,7 +7,7 @@
* Please see http://www.jsxc.org/
*
* @author Klaus Herberth <klaus@jsxc.org>
* @version 0.7.2
* @version 0.8.0
*/
var jsxc;
@@ -22,7 +22,7 @@ var jsxc;
*/
jsxc = {
/** Version of jsxc */
version: '0.7.2',
version: '0.8.0',
/** True if i'm the master */
master: false,
@@ -234,7 +234,7 @@ var jsxc;
if (!jsxc.storage.getItem('rid') || !jsxc.storage.getItem('sid') || !jsxc.restore) {
// Looking for a login form
if (!jsxc.options.loginForm.form || !jsxc.el_exists(jsxc.options.loginForm.form)) {
if (!jsxc.options.loginForm.form || !(jsxc.el_exists(jsxc.options.loginForm.form) && jsxc.el_exists(jsxc.options.loginForm.jid) && jsxc.el_exists(jsxc.options.loginForm.pass))) {
if (jsxc.options.displayRosterMinimized()) {
// Show minimized roster
@@ -474,8 +474,11 @@ var jsxc;
restoreRoster: function() {
var buddies = jsxc.storage.getUserItem('buddylist');
if (!buddies) {
if (!buddies || buddies.length === 0) {
jsxc.debug('No saved buddylist.');
jsxc.gui.roster.empty();
return;
}
@@ -539,6 +542,7 @@ var jsxc;
* Escapes some characters to HTML character
*/
escapeHTML: function(text) {
text = text.replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>');
return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
},
@@ -709,7 +713,7 @@ var jsxc;
*/
jsxc.gui = {
/** Smilie token to file mapping */
emotions: [ [ ':-) :)', 'smile.png' ], [ ':-D :D', 'grin.png' ], [ ':-( :(', 'sad.png' ], [ ';-) ;)', 'wink.png' ], [ ':-P :P', 'tonguesmile.png' ], [ '=-O', 'surprised.png' ], [ ':kiss: :-*', 'kiss.png' ], [ '8-) :cool:', 'sunglassess.png' ], [ ':\'-(', 'crysad.png' ], [ ':-/', 'doubt.png' ], [ 'O:-) O:)', 'angel.png' ], [ ':-X :X', 'zip.png' ], [ '>:o', 'angry.png' ], [ ':yes:', 'thumbsup.png' ], [ ':beer:', 'beer.png' ], [ ':devil:', 'devil.png' ], [ ':kissing:', 'kissing.png' ], [ ':love:', 'love.png' ], [ ':zzz:', 'tired.png' ] ],
emotions: [ [ 'O:-) O:)', 'angel.png' ], [ '>:-( >:( &gt;:-( &gt;:(', 'angry.png' ], [ ':-) :)', 'smile.png' ], [ ':-D :D', 'grin.png' ], [ ':-( :(', 'sad.png' ], [ ';-) ;)', 'wink.png' ], [ ':-P :P', 'tonguesmile.png' ], [ '=-O', 'surprised.png' ], [ ':kiss: :-*', 'kiss.png' ], [ '8-) :cool:', 'sunglassess.png' ], [ ':\'-( :\'( :&amp;apos;-(', 'crysad.png' ], [ ':-/', 'doubt.png' ], [ ':-X :X', 'zip.png' ], [ ':yes:', 'thumbsup.png' ], [ ':no:', 'thumbsdown.png' ], [ ':beer:', 'beer.png' ], [ ':devil:', 'devil.png' ], [ ':kiss: :kissing:', 'kissing.png' ], [ '@->-- :rose: @-&gt;--', 'rose.png' ], [ ':music:', 'music.png' ], [ ':love:', 'love.png' ], [ ':zzz:', 'tired.png' ] ],
/**
* Creates application skeleton.
@@ -719,12 +723,15 @@ var jsxc;
init: function() {
$('body').append($(jsxc.gui.template.get('windowList')));
jsxc.gui.tooltip('#jsxc_windowList');
jsxc.gui.roster.init();
// prepare regexp for emotions
$.each(jsxc.gui.emotions, function(i, val) {
// escape characters
var reg = val[0].replace(/(\/|\||\*|\.|\+|\?|\^|\$|\(|\)|\[|\]|\{|\})/g, '\\$1');
reg = '(' + reg.split(' ').join(')|(') + ')';
reg = '(' + reg.split(' ').join('|') + ')';
jsxc.gui.emotions[i][2] = new RegExp(reg, 'g');
});
@@ -733,6 +740,23 @@ var jsxc;
jsxc.gui.buddyTemplate = $(jsxc.gui.template.get('rosterBuddy'));
},
/**
* Init tooltip plugin for given jQuery selector.
*
* @param {String} selector jQuery selector
* @memberOf jsxc.gui
*/
tooltip: function(selector) {
$(selector).tooltip({
show: {
delay: 600
},
content: function() {
return $(this).attr('title').replace(/\n/g, '<br />');
}
});
},
/**
* Updates Information in roster and chatbar
*
@@ -758,8 +782,8 @@ var jsxc;
ue.removeClass('jsxc_' + jsxc.CONST.STATUS.join(' jsxc_')).addClass('jsxc_' + jsxc.CONST.STATUS[data.status]);
// Change name and add title
ue.find('.jsxc_name').text(data.name).attr('title', 'is ' + jsxc.CONST.STATUS[data.status]);
bullet.attr('title', 'is ' + jsxc.CONST.STATUS[data.status]);
ue.find('.jsxc_name').text(data.name).attr('title', jsxc.l.is + ' ' + jsxc.CONST.STATUS[data.status]);
bullet.attr('title', jsxc.l.is + ' ' + jsxc.CONST.STATUS[data.status]);
// Update gui according to encryption state
switch (data.msgstate) {
@@ -784,14 +808,14 @@ var jsxc;
if (data.trust) {
we.find('.jsxc_transfer').addClass('jsxc_trust').attr('title', jsxc.l.your_buddy_is_verificated);
} else {
we.find('.jsxc_transfer').removeClass('jsxc_trust').attr('title', '');
we.find('.jsxc_transfer').removeClass('jsxc_trust');
}
// update gui according to subscription state
if (data.sub && data.sub !== 'both') {
ri.addClass('jsxc_oneway');
ue.addClass('jsxc_oneway');
} else {
ri.removeClass('jsxc_oneway');
ue.removeClass('jsxc_oneway');
}
var info = '<b>' + Strophe.getBareJidFromJid(data.jid) + '</b>\n';
@@ -967,9 +991,7 @@ var jsxc;
return;
}
jsxc.gui.dialog.open(jsxc.gui.template.get('authenticationDialog', cid), {
'noClose': true
});
jsxc.gui.dialog.open(jsxc.gui.template.get('authenticationDialog', cid));
// Add handler
@@ -1112,7 +1134,7 @@ var jsxc;
}
});
$('#jsxc_dialog .creation').click(function() {
$('#jsxc_dialog form').submit(function() {
var username = $('#jsxc_username').val();
var alias = $('#jsxc_alias').val();
@@ -1133,6 +1155,8 @@ var jsxc;
jsxc.xmpp.addBuddy(username, alias);
jsxc.gui.dialog.close();
return false;
});
},
@@ -1268,6 +1292,146 @@ var jsxc;
jsxc.gui.dialog.open('<div class="jsxc_log">' + userInfo + '<h3>Log</h3><pre>' + jsxc.escapeHTML(jsxc.log) + '</pre></div>');
},
/**
* Show vCard of user with the given bar jid.
*
* @memberOf jsxc.gui
* @param {String} bjid Bar jid
*/
showVcard: function(bjid) {
jsxc.gui.dialog.open(jsxc.gui.template.get('vCard', jsxc.jidToCid(bjid)));
var printProp = function(el, depth) {
var content = '';
el.each(function() {
var item = $(this);
var children = $(this).children();
content += '<li>';
var prop = jsxc.translate('%%' + item[0].tagName + '%%');
if (prop !== ' ') {
content += '<strong>' + prop + ':</strong> ';
}
if (item[0].tagName === 'PHOTO') {
} else if (children.length > 0) {
content += '<ul>';
content += printProp(children, depth + 1);
content += '</ul>';
} else if (item.text() !== '') {
content += jsxc.escapeHTML(item.text());
}
content += '</li>';
if (depth === 0 && $('#jsxc_dialog ul.jsxc_vCard').length > 0) {
$('#jsxc_dialog ul.jsxc_vCard').append(content);
content = '';
}
});
if (depth > 0) {
return content;
}
};
var failedToLoad = function() {
if ($('#jsxc_dialog ul.jsxc_vCard').length === 0) {
return;
}
$('#jsxc_dialog p').remove();
var content = '<p>';
content += jsxc.translate('%%Sorry, we couldn\'t load any vCard.%%');
content += '</p>';
$('#jsxc_dialog').append(content);
};
jsxc.xmpp.conn.vcard.get(function(stanza) {
if ($('#jsxc_dialog ul.jsxc_vCard').length === 0) {
return;
}
if ($(stanza).find('vCard').length === 0) {
failedToLoad();
return;
}
$('#jsxc_dialog p').remove();
var photo = $(stanza).find("vCard > PHOTO");
if (photo.length > 0) {
var img = photo.find('BINVAL').text();
var type = photo.find('TYPE').text();
var src = 'data:' + type + ';base64,' + img;
$('#jsxc_dialog h3').prepend('<img class="jsxc_vCard" src="' + src + '" alt="avatar" />');
}
printProp($(stanza).find('vcard > *'), 0);
}, bjid, failedToLoad);
},
showSettings: function() {
jsxc.gui.dialog.open(jsxc.gui.template.get('settings'));
$('#jsxc_dialog form').each(function() {
var self = $(this);
self.find('input[type!="submit"]').each(function() {
var id = this.id.split("-");
var prop = id[0];
var key = id[1];
var data = jsxc.options.get(prop);
if (data && data[key]) {
$(this).val(data[key]);
}
});
});
$('#jsxc_dialog form').submit(function() {
var self = $(this);
var data = {};
self.find('input[type!="submit"]').each(function() {
var id = this.id.split("-");
var prop = id[0];
var key = id[1];
var val = $(this).val();
if (!data[prop]) {
data[prop] = {};
}
data[prop][key] = val;
});
$.each(data, function(key, val) {
jsxc.options.set(key, val);
});
setTimeout(function() {
self.find('input[type="submit"]').effect('highlight', {
color: 'green'
}, 4000);
}, 200);
return false;
});
},
/**
* Change own presence to pres.
*
@@ -1337,6 +1501,10 @@ var jsxc;
$('#jsxc_buddylist').addClass('jsxc_hideOffline');
}
$('#jsxc_menu .jsxc_settings').click(function() {
jsxc.gui.showSettings();
});
$('#jsxc_menu .jsxc_hideOffline').click(function() {
var hideOffline = !jsxc.options.get('hideOffline');
@@ -1418,14 +1586,7 @@ var jsxc;
jsxc.gui.updateAvatar($('#jsxc_avatar'), jsxc.storage.getItem('jid'), 'own');
});
$('#jsxc_roster').tooltip({
show: {
delay: 600
},
content: function() {
return $(this).attr('title').replace(/\n/g, '<br />');
}
});
jsxc.gui.tooltip('#jsxc_roster');
jsxc.notice.load();
@@ -1447,6 +1608,10 @@ var jsxc;
jsxc.gui.window.open(cid);
});
bud.find('.jsxc_chaticon').click(function() {
jsxc.gui.window.open(cid);
});
bud.find('.jsxc_rename').click(function() {
jsxc.gui.roster.rename(cid);
return false;
@@ -1457,12 +1622,31 @@ var jsxc;
return false;
});
var expandClick = function() {
bud.trigger('extra.jsxc');
bud.toggleClass('jsxc_expand');
jsxc.gui.updateAvatar(bud, data.jid, data.avatar);
return false;
};
bud.find('.jsxc_control').click(expandClick);
bud.dblclick(expandClick);
bud.find('.jsxc_vcardicon').click(function() {
jsxc.gui.showVcard(data.jid);
return false;
});
jsxc.gui.update(cid);
// update scrollbar
$('#jsxc_buddylist').slimScroll({
scrollTo: '0px'
});
$(document).trigger('add.roster.jsxc', [ cid, data, bud ]);
},
/**
@@ -1548,7 +1732,7 @@ var jsxc;
*/
rename: function(cid) {
var name = $('#' + cid + ' .jsxc_name');
var options = $('#' + cid + ' .jsxc_options');
var options = $('#' + cid).find('.jsxc_options, .jsxc_control');
var input = $('<input type="text" name="name"/>');
options.hide();
@@ -1638,9 +1822,27 @@ var jsxc;
$('#jsxc_roster .slimScrollDiv').remove();
$('#jsxc_roster > .jsxc_bottom').remove();
$('#jsxc_roster').append($(document.createElement('p')).text(jsxc.l.no_connection).append($(document.createElement('a')).attr('href', '#').text(jsxc.l.relogin).click(function() {
$('#jsxc_roster').append($('<p>' + jsxc.l.no_connection + '</p>').append(' <a>' + jsxc.l.relogin + '</a>').click(function() {
jsxc.gui.showLoginBox();
})));
}));
},
/**
* Shows a text with link to add a new buddy.
*
* @memberOf jsxc.gui.roster
*/
empty: function() { console.trace();
var text = $('<p>' + jsxc.l.Your_roster_is_empty_add_a + '</p>');
var link = $('<a>' + jsxc.l.new_buddy + '</a>');
link.click(function() {
jsxc.gui.showContactDialog();
});
text.append(link);
text.append('.');
$('#jsxc_roster').prepend(text);
}
};
@@ -1771,6 +1973,10 @@ var jsxc;
jsxc.gui.window.clear(cid);
});
win.find('.jsxc_tools').click(function() {
return false;
});
win.find('.jsxc_textinput').keyup(function(ev) {
var body = $(this).val();
@@ -1792,11 +1998,11 @@ var jsxc;
});
win.find('.jsxc_textarea').slimScroll({
height: '200px',
height: '234px',
distance: '3px'
});
win.find('.jsxc_window').hide();
win.find('.jsxc_fade').hide();
win.find('.jsxc_name').disableSelection();
@@ -1820,6 +2026,18 @@ var jsxc;
}
}
$.each(jsxc.gui.emotions, function(i, val) {
var ins = val[0].split(' ')[0];
var li = $('<li><img alt="' + ins + '" title="' + ins + '" src="' + jsxc.options.root + '/img/emotions/' + val[1] + '"/></li>');
li.click(function() {
win.find('input').val(win.find('input').val() + ins);
win.find('input').focus();
});
win.find('.jsxc_emoticons ul').append(li);
});
jsxc.gui.toggleList.call(win.find('.jsxc_emoticons'));
jsxc.gui.window.restoreChat(cid);
jsxc.gui.update(cid);
@@ -1886,7 +2104,7 @@ var jsxc;
* @param {String} cid CSS compatible jid
*/
toggle: function(cid) {
if (jsxc.gui.getWindow(cid).find('.jsxc_window').is(':hidden')) {
if (jsxc.gui.getWindow(cid).find('.jsxc_fade').is(':hidden')) {
jsxc.gui.window.show(cid);
} else {
jsxc.gui.window.hide(cid);
@@ -1913,7 +2131,8 @@ var jsxc;
*/
_show: function(cid) {
var win = jsxc.gui.getWindow(cid);
$('#jsxc_window_' + cid + ' .jsxc_window').slideDown();
$('#jsxc_window_' + cid + ' .jsxc_fade').slideDown();
win.removeClass('jsxc_min');
// remove unread flag
win.removeClass('jsxc_unreadMsg');
@@ -1945,7 +2164,9 @@ var jsxc;
* @param {String} cid
*/
_hide: function(cid) {
$('#jsxc_window_' + cid + ' .jsxc_window').slideUp();
$('#jsxc_window_' + cid + ' .jsxc_fade').slideUp();
$('#jsxc_window_' + cid).addClass('jsxc_min');
jsxc.gui.getWindow(cid).trigger('hidden.window.jsxc');
},
@@ -1955,9 +2176,13 @@ var jsxc;
* @param {type} cid
*/
highlight: function(cid) {
$('#jsxc_window_' + cid + ' ').effect('highlight', {
color: 'orange'
}, 2000);
var el = $('#jsxc_window_' + cid + ' .jsxc_bar');
if (!el.is(':animated')) {
el.effect('highlight', {
color: 'orange'
}, 2000);
}
},
/**
@@ -2031,7 +2256,7 @@ var jsxc;
}
if (direction === 'out' && jsxc.master) {
jsxc.buddyList[cid].sendMsg(msg, uid);
jsxc.buddyList[cid].sendMsg(html_msg, uid);
}
jsxc.gui.window._postMessage(cid, post);
@@ -2070,7 +2295,17 @@ var jsxc;
});
$.each(jsxc.gui.emotions, function(i, val) {
msg = msg.replace(val[2], '<img alt="$1" title="$1" src="' + jsxc.options.root + '/img/emotions/' + val[1] + '"/>');
msg = msg.replace(val[2], function(match, p1) {
// escape value for alt and title, this prevents double
// replacement
var esc = '', i;
for (i = 0; i < p1.length; i++) {
esc += '&#' + p1.charCodeAt(i) + ';';
}
return '<img alt="' + esc + '" title="' + esc + '" src="' + jsxc.options.root + '/img/emotions/' + val[1] + '"/>';
});
});
var msgDiv = $("<div>");
@@ -2082,12 +2317,16 @@ var jsxc;
msgDiv.addClass('jsxc_received');
}
if (direction === 'sys') {
$('#jsxc_window_' + cid + ' .jsxc_textarea').append('<div style="clear:both"/>');
}
$('#jsxc_window_' + cid + ' .jsxc_textarea').append(msgDiv);
jsxc.gui.window.scrollDown(cid);
// if window is hidden set unread flag
if (win.find('.jsxc_window').is(':hidden') && jsxc.restoreCompleted && !restore) {
if (win.find('.jsxc_fade').is(':hidden') && jsxc.restoreCompleted && !restore) {
win.addClass('jsxc_unreadMsg');
jsxc.storage.updateUserItem('window_' + cid, 'unread', true);
}
@@ -2219,33 +2458,38 @@ var jsxc;
<p class="jsxc_right"><a href="#" class="button jsxc_close">%%Close%%</a> <a href="#" class="button creation">%%Compare%%</a></p>\
</div>',
fingerprintsDialog: '<div>\
<p class="jsxc_maxWidth">%%A_fingerprint_%%</p>\
<p><strong>%%Your_fingerprint%%</strong><br />\
<span style="text-transform:uppercase">{{my_priv_fingerprint}}</span></p>\
<p><strong>%%Buddy_fingerprint%%</strong><br />\
<span style="text-transform:uppercase">{{cid_priv_fingerprint}}</span></p><br />\
<p class="jsxc_right"><a href="#" class="button jsxc_close">%%Close%%</a></p>\
</div>',
chatWindow: '<li>\
<div class="jsxc_bar">\
<div class="jsxc_avatar">☺</div>\
<div class="jsxc_name"/>\
<div class="jsxc_cycle"/>\
</div>\
chatWindow: '<li class="jsxc_min">\
<div class="jsxc_window">\
<div class="jsxc_tools">\
<div class="jsxc_settings">\
<ul>\
<li class="jsxc_fingerprints">%%Fingerprints%%</li>\
<li class="jsxc_verification">%%Authentifikation%%</li>\
<li class="jsxc_transfer">%%start_private%%</li>\
<li class="jsxc_clear">%%clear_history%%</li>\
</ul>\
</div>\
<div class="jsxc_transfer"/>\
<div class="jsxc_close">X</div>\
<div class="jsxc_bar">\
<div class="jsxc_avatar">☺</div>\
<div class="jsxc_tools">\
<div class="jsxc_settings">\
<ul>\
<li class="jsxc_fingerprints">%%Fingerprints%%</li>\
<li class="jsxc_verification">%%Authentifikation%%</li>\
<li class="jsxc_transfer">%%start_private%%</li>\
<li class="jsxc_clear">%%clear_history%%</li>\
</ul>\
</div>\
<div class="jsxc_transfer"/>\
<div class="jsxc_close">×</div>\
</div>\
<div class="jsxc_name"/>\
<div class="jsxc_cycle"/>\
</div>\
<div class="jsxc_fade">\
<div class="jsxc_gradient"/>\
<div class="jsxc_textarea"/>\
<div class="jsxc_emoticons"><ul/></div>\
<input type="text" class="jsxc_textinput" placeholder="...%%Message%%" />\
</div>\
<div class="jsxc_textarea"/>\
<input type="text" class="jsxc_textinput jsxc_chatmessage jsxc_out" placeholder="...%%Message%%"/>\
</div>\
</li>',
roster: '<div id="jsxc_roster">\
@@ -2257,6 +2501,7 @@ var jsxc;
<div id="jsxc_menu">\
<span></span>\
<ul>\
<li class="jsxc_settings">%%Settings%%</li>\
<li class="jsxc_muteNotification">%%Mute%%</li>\
<li class="jsxc_addBuddy">%%Add_buddy%%</li>\
<li class="jsxc_hideOffline">%%Hide offline%%</li>\
@@ -2287,11 +2532,16 @@ var jsxc;
</div>',
rosterBuddy: '<li>\
<div class="jsxc_avatar">☺</div>\
<div class="jsxc_options">\
<div class="jsxc_control"></div>\
<div class="jsxc_name"/>\
<div class="jsxc_options jsxc_right">\
<div class="jsxc_rename" title="%%rename_buddy%%">✎</div>\
<div class="jsxc_delete" title="%%delete_buddy%%">✘</div>\
</div>\
<div class="jsxc_name"/>\
<div class="jsxc_options jsxc_left">\
<div class="jsxc_chaticon" title="%%send_message%%"/>\
<div class="jsxc_vcardicon" title="%%get_info%%">i</div>\
</div>\
</li>',
loginBox: '<h3>%%Login%%</h3>\
<form method="get">\
@@ -2306,13 +2556,15 @@ var jsxc;
</form>',
contactDialog: '<h3>%%Add_buddy%%</h3>\
<p class=".jsxc_explanation">%%Type_in_the_full_username_%%</p>\
<form>\
<p><label for="jsxc_username">* %%Username%%:</label>\
<input type="text" name="username" id="jsxc_username" required="required" /></p>\
<input type="email" name="username" id="jsxc_username" required="required" /></p>\
<p><label for="jsxc_alias">%%Alias%%:</label>\
<input type="text" name="alias" id="jsxc_alias" /></p>\
<p class="jsxc_right">\
<a href="#" class="button jsxc_close">%%Close%%</a> <a href="#" class="button creation">%%Add%%</a>\
</p>',
<input class="button" type="submit" value="%%Add%%" />\
</p>\
<form>',
approveDialog: '<h3>%%Subscription_request%%</h3>\
<p>%%You_have_a_request_from%% <b class="jsxc_their_jid"></b>.</p>\
<p class="jsxc_right"><a href="#" class="button jsxc_deny">%%Deny%%</a> <a href="#" class="button creation jsxc_approve">%%Approve%%</a></p>',
@@ -2347,7 +2599,23 @@ var jsxc;
<br />\
<b>Credential: </b> <a href="http://www.beepzoid.com/old-phones/" target="_blank">David English (Ringtone)</a>,\
<a href="https://soundcloud.com/freefilmandgamemusic/ping-1?in=freefilmandgamemusic/sets/free-notification-sounds-and" target="_blank">CameronMusic (Ping)</a></p>\
<p class="jsxc_right"><a class="button jsxc_debuglog" href="#">Show debug log</a></p>'
<p class="jsxc_right"><a class="button jsxc_debuglog" href="#">Show debug log</a></p>',
vCard: '<h3>vCard %%from%% {{cid_name}}</h3>\
<ul class="jsxc_vCard"></ul>\
<p><img src="{{root}}/img/loading.gif" alt="wait" width="32px" height="32px" /> %%Please_wait%%...</p>',
settings: '<h3>%%User_settings%%</h3>\
<p></p>\
<form>\
<fieldset class="jsxc_fieldsetPriority">\
<legend>%%Priority%%</legend>\
<label for="priority-online">%%Online%%</label><input type="number" value="0" id="priority-online" min="-128" max="127" step="1" required="required"/>\
<label for="priority-chat">%%Chatty%%</label><input type="number" value="0" id="priority-chat" min="-128" max="127" step="1" required="required"/>\
<label for="priority-away">%%Away%%</label><input type="number" value="0" id="priority-away" min="-128" max="127" step="1" required="required"/>\
<label for="priority-xa">%%Extended_away%%</label><input type="number" value="0" id="priority-xa" min="-128" max="127" step="1" required="required"/>\
<label for="priority-dnd">%%dnd%%</label><input type="number" value="0" id="priority-dnd" min="-128" max="127" step="1" required="required"/>\
<input type="submit" value="%%Save%%"/>\
</fieldset>\
</form>'
};
/**
@@ -2530,6 +2798,8 @@ var jsxc;
// pres first after roster is ready
$(document).one('cloaded.roster.jsxc', jsxc.xmpp.sendPres);
$('#jsxc_roster > p:first').remove();
var iq = $iq({
type: 'get'
}).c('query', {
@@ -2579,8 +2849,8 @@ var jsxc;
pres.c('show').t(presState).up();
}
var priority = jsxc.storage.getUserItem('priority');
if (priority !== null) {
var priority = jsxc.options.get('priority');
if (priority && typeof priority[presState] !== 'undefined' && parseInt(priority[presState]) !== 0) {
pres.c('priority').t(priority[presState]).up();
}
@@ -2683,6 +2953,10 @@ var jsxc;
jsxc.gui.roster.add(cid);
});
if(buddies.length === 0) {
jsxc.gui.roster.empty();
}
jsxc.storage.setUserItem('buddylist', buddies);
jsxc.debug('Roster loaded');
@@ -2756,6 +3030,12 @@ var jsxc;
}
}
});
if (!jsxc.storage.getUserItem('buddylist') || jsxc.storage.getUserItem('buddylist').length === 0) {
jsxc.gui.roster.empty();
} else {
$('#jsxc_roster > p:first').remove();
}
// preserve handler
return true;
@@ -3603,7 +3883,7 @@ var jsxc;
data.fingerprint = jsxc.buddyList[cid].their_priv_pk.fingerprint();
data.msgstate = OTR.CONST.MSGSTATE_ENCRYPTED;
var msg = (jsxc.buddyList[cid].trust ? jsxc.l.Verified : jsxc.l.Unverified) + ' ' + jsxc.l.private_conversation_started + data.jid;
var msg = (jsxc.buddyList[cid].trust ? jsxc.l.Verified : jsxc.l.Unverified) + ' ' + jsxc.l.private_conversation_started;
jsxc.gui.window.postMessage(cid, 'sys', msg);
break;
case OTR.CONST.STATUS_END_OTR:
@@ -3856,7 +4136,7 @@ var jsxc;
// try to create web-worker
try {
worker = new Worker(jsxc.options.root + '/js/jsxc/lib/otr/build/dsa-webworker.js');
worker = new Worker(jsxc.options.root + '/lib/otr/build/dsa-webworker.js');
} catch (err) {
jsxc.warn('Couldn\'t create web-worker.', err);
}
@@ -3882,7 +4162,7 @@ var jsxc;
// start worker
worker.postMessage({
imports: [ jsxc.options.root + '/js/jsxc/lib/otr/vendor/salsa20.js', jsxc.options.root + '/js/jsxc/lib/otr/vendor/bigint.js', jsxc.options.root + '/js/jsxc/lib/otr/vendor/crypto.js', jsxc.options.root + '/js/jsxc/lib/otr/vendor/eventemitter.js', jsxc.options.root + '/js/jsxc/lib/otr/lib/const.js', jsxc.options.root + '/js/jsxc/lib/otr/lib/helpers.js', jsxc.options.root + '/js/jsxc/lib/otr/lib/dsa.js' ],
imports: [ jsxc.options.root + '/lib/otr/vendor/salsa20.js', jsxc.options.root + '/lib/otr/vendor/bigint.js', jsxc.options.root + '/lib/otr/vendor/crypto.js', jsxc.options.root + '/lib/otr/vendor/eventemitter.js', jsxc.options.root + '/lib/otr/lib/const.js', jsxc.options.root + '/lib/otr/lib/helpers.js', jsxc.options.root + '/lib/otr/lib/dsa.js' ],
seed: BigInt.getSeed(),
debug: true
});
@@ -4314,7 +4594,7 @@ var jsxc;
trying_to_start_private_conversation: 'Trying to start private conversation!',
Verified: 'Verified',
Unverified: 'Unverified',
private_conversation_started: 'private conversation started with ',
private_conversation_started: 'private conversation started.',
private_conversation_aborted: 'Private conversation aborted!',
your_buddy_closed_the_private_conversation_you_should_do_the_same: 'Your buddy closed the private conversation! You should do the same.',
conversation_is_now_verified: 'Conversation is now verified.',
@@ -4368,6 +4648,9 @@ var jsxc;
New_message_from: 'New message from',
Should_we_notify_you_: 'Should we notify you about new messages in the future?',
Please_accept_: 'Please click the "Allow" button at the top.',
Hide_offline: 'Hide offline',
Show_offline: 'Show offline',
About: 'About',
dnd: 'Do Not Disturb',
Mute: 'Mute',
Unmute: 'Unmute',
@@ -4392,7 +4675,42 @@ var jsxc;
Confirm: 'Confirm',
Dismiss: 'Dismiss',
Remove: 'Remove',
Online_help: 'Online help'
Online_help: 'Online help',
FN: 'Full Name',
N: ' ',
FAMILY: 'Family Name',
GIVEN: 'Given Name',
NICKNAME: 'Nickname',
URL: 'URL',
ADR: 'Address',
STREET: 'Street Address',
EXTADD: 'Extended Address',
LOCALITY: 'Locality',
REGION: 'Region',
PCODE: 'Postal Code',
CTRY: 'Country',
TEL: 'Telephone',
NUMBER: 'Number',
EMAIL: 'Email',
USERID: ' ',
ORG: 'Organization',
ORGNAME: 'Name',
ORGUNIT: 'Unit',
TITLE: 'Job Title',
ROLE: 'Role',
BDAY: 'Birthday',
DESC: 'Description',
PHOTO: ' ',
send_message: 'send message',
get_info: 'get info',
Settings: 'Settings',
Priority: 'Priority',
Save: 'Save',
User_settings: 'User settings',
A_fingerprint_: 'A fingerprint is used to make sure that the person you are talking to is who he or she is saying.',
Your_roster_is_empty_add_a: 'Your roster is empty, add a ',
new_buddy: 'new buddy',
is: 'is'
},
de: {
please_wait_until_we_logged_you_in: 'Bitte warte bis wir dich eingeloggt haben.',
@@ -4413,7 +4731,7 @@ var jsxc;
trying_to_start_private_conversation: 'Versuche private Konversation zu starten.',
Verified: 'Verifiziert',
Unverified: 'Unverifiziert',
private_conversation_started: 'Private Konversation gestartet mit ',
private_conversation_started: 'Private Konversation gestartet.',
private_conversation_aborted: 'Private Konversation abgebrochen.',
your_buddy_closed_the_private_conversation_you_should_do_the_same: 'Dein Freund hat die private Konversation beendet. Das solltest du auch tun!',
conversation_is_now_verified: 'Konversation ist jetzt verifiziert',
@@ -4495,7 +4813,174 @@ var jsxc;
Confirm: 'Bestätigen',
Dismiss: 'Ablehnen',
Remove: 'Löschen',
Online_help: 'Online Hilfe'
Online_help: 'Online Hilfe',
FN: 'Name',
N: ' ',
FAMILY: 'Familienname',
GIVEN: 'Vorname',
NICKNAME: 'Spitzname',
URL: 'URL',
ADR: 'Adresse',
STREET: 'Straße',
EXTADD: 'Zusätzliche Adresse',
LOCALITY: 'Ortschaft',
REGION: 'Region',
PCODE: 'Postleitzahl',
CTRY: 'Land',
TEL: 'Telefon',
NUMBER: 'Nummer',
EMAIL: 'E-Mail',
USERID: ' ',
ORG: 'Organisation',
ORGNAME: 'Name',
ORGUNIT: 'Abteilung',
TITLE: 'Titel',
ROLE: 'Rolle',
BDAY: 'Geburtstag',
DESC: 'Beschreibung',
PHOTO: ' ',
send_message: 'Sende Nachricht',
get_info: 'Benutzerinformationen',
Settings: 'Einstellungen',
Priority: 'Priorität',
Save: 'Speichern',
User_settings: 'Benutzereinstellungen',
A_fingerprint_: 'Ein Fingerabdruck wird dazu benutzt deinen Gesprächspartner zu identifizieren.',
is: 'ist'
},
es: {
please_wait_until_we_logged_you_in: 'Por favor, espere...',
your_connection_is_unencrypted: 'Su conexión no está cifrada.',
your_connection_is_encrypted: 'Su conexión está cifrada.',
your_buddy_closed_the_private_connection: 'Su amigo ha cerrado la conexión privada.',
start_private: 'Iniciar privado',
close_private: 'Cerrar privado',
your_buddy_is_verificated: 'Tu amigo está verificado.',
you_have_only_a_subscription_in_one_way: 'Sólo tienes una suscripción de un modo.',
verification_query_sent: 'Consulta de verificación enviada.',
your_message_wasnt_send_please_end_your_private_conversation: 'Su mensaje no fue enviado. Por favor, termine su conversación privada.',
unencrypted_message_received: 'Mensaje no cifrado recibido:',
your_message_wasnt_send_because_you_have_no_valid_subscription: 'Su mensaje no se ha enviado, porque usted no tiene suscripción válida.',
no_available: 'No disponible',
no_connection: 'Sin conexión!',
relogin: 'iniciar sesión nuevamente',
trying_to_start_private_conversation: 'Intentando iniciar una conversación privada!',
Verified: 'Verificado',
Unverified: 'No verificado',
private_conversation_started: 'se inició una conversación privada.',
private_conversation_aborted: 'Conversación privada abortada!',
your_buddy_closed_the_private_conversation_you_should_do_the_same: 'Su amigo cerró la conversación privada! Usted debería hacer lo mismo.',
conversation_is_now_verified: 'La conversación es ahora verificada.',
verification_fails: 'Fallo la verificación.',
your_buddy_is_attempting_to_determine_: 'Tu amigo está tratando de determinar si él o ella está realmente hablando con usted.',
to_authenticate_to_your_buddy: 'Para autenticar a su amigo, ',
enter_the_answer_and_click_answer: 'introduce la respuesta y haga clic en Contestar.',
enter_the_secret: 'especifique el secreto.',
now_we_will_create_your_private_key_: 'Ahora vamos a crear su clave privada. Esto puede tomar algún tiempo.',
Authenticating_a_buddy_helps_: 'Autenticación de un amigo ayuda a garantizar que la persona que está hablando es quien él o ella está diciendo.',
How_do_you_want_to_authenticate_your_buddy: '¿Cómo desea autenticar {{cid_name}} (<b>{{cid_jid}}</b>)?',
Select_method: 'Escoja un método...',
Manual: 'Manual',
Question: 'Pregunta',
Secret: 'Secreto',
To_verify_the_fingerprint_: 'Para verificar la firma digital, póngase en contacto con su amigo a través de algún otro canal autenticado, como el teléfono.',
Your_fingerprint: 'Tu firma digital',
Buddy_fingerprint: 'firma digital de tu amigo',
Close: 'Cerrar',
Compared: 'Comparado',
To_authenticate_using_a_question_: 'Para autenticar mediante una pregunta, elegir una pregunta cuya respuesta se conoce sólo usted y su amigo.',
Ask: 'Preguntar',
To_authenticate_pick_a_secret_: 'Para autenticar, elija un secreto conocido sólo por usted y su amigo.',
Compare: 'Comparar',
Fingerprints: 'Firmas digitales',
Authentifikation: 'Autenticación',
Message: 'Mensaje',
Add_buddy: 'Añadir amigo',
rename_buddy: 'renombrar amigo',
delete_buddy: 'eliminar amigo',
Login: 'Iniciar Sesión',
Username: 'Usuario',
Password: 'Contraseña',
Cancel: 'Cancelar',
Connect: 'Conectar',
Type_in_the_full_username_: 'Escriba el usuario completo y un alias opcional.',
Alias: 'Alias',
Add: 'Añadir',
Subscription_request: 'Solicitud de suscripción',
You_have_a_request_from: 'Tienes una petición de',
Deny: 'Rechazar',
Approve: 'Aprobar',
Remove_buddy: 'Eliminar amigo',
You_are_about_to_remove_: 'Vas a eliminar a {{cid_name}} (<b>{{cid_jid}}</b>) de tu lista de amigos. Todas las conversaciones relacionadas serán cerradas.',
Continue: 'Continuar',
Please_wait: 'Espere por favor',
Login_failed: 'Fallo el inicio de sesión',
Sorry_we_cant_authentikate_: 'Lo sentimos, no podemos autentificarlo en nuestro servidor de chat. ¿Tal vez la contraseña es incorrecta?',
Retry: 'Reintentar',
clear_history: 'Borrar el historial',
New_message_from: 'Nuevo mensaje de',
Should_we_notify_you_: '¿Debemos notificarle sobre nuevos mensajes en el futuro?',
Please_accept_: 'Por favor, haga clic en el botón "Permitir" en la parte superior.',
dnd: 'No Molestar',
Mute: 'Desactivar sonido',
Unmute: 'Activar sonido',
Subscription: 'Suscripción',
both: 'ambos',
Status: 'Estado',
online: 'en línea',
chat: 'chat',
away: 'ausente',
xa: 'mas ausente',
offline: 'desconectado',
none: 'nadie',
Unknown_instance_tag: 'Etiqueta de instancia desconocida.',
Not_of_our_latest_keys: 'No de nuestra ultima tecla.',
Received_an_unreadable_encrypted_message: 'Se recibió un mensaje cifrado ilegible.',
Online: 'En linea',
Chatty: 'Hablador',
Away: 'Ausente',
Extended_away: 'Mas ausente',
Offline: 'Desconectado',
Friendship_request: 'Solicitud de amistad',
Confirm: 'Confirmar',
Dismiss: 'Rechazar',
Remove: 'Eliminar',
Online_help: 'Ayuda en línea',
FN: 'Nombre completo ',
N: ' ',
FAMILY: 'Apellido',
GIVEN: 'Nombre',
NICKNAME: 'Apodar',
URL: 'URL',
ADR: 'Dirección',
STREET: 'Calle',
EXTADD: 'Extendido dirección',
LOCALITY: 'Población',
REGION: 'Región',
PCODE: 'Código postal',
CTRY: 'País',
TEL: 'Teléfono',
NUMBER: 'Número',
EMAIL: 'Emilio',
USERID: ' ',
ORG: 'Organización',
ORGNAME: 'Nombre',
ORGUNIT: 'Departamento',
TITLE: 'Título',
ROLE: 'Rol',
BDAY: 'Cumpleaños',
DESC: 'Descripción',
PHOTO: ' ',
send_message: 'mandar un texto',
get_info: 'obtener información',
Settings: 'Ajustes',
Priority: 'Prioridad',
Save: 'Guardar',
User_settings: 'Configuración de usuario',
A_fingerprint_: 'La huella digital se utiliza para que puedas estar seguro que la persona con la que estas hablando es quien realmente dice ser',
Your_roster_is_empty_add_a: 'Tu lista de amigos esta vacia',
new_buddy: 'Nuevo amigo',
is: 'es'
}
};
}(jQuery));
+69 -25
Ver Arquivo
@@ -1,5 +1,5 @@
/**
* jsxc v0.7.2 - 2014-05-28
* jsxc v0.8.0 - 2014-07-02
*
* Copyright (c) 2014 Klaus Herberth <klaus@jsxc.org> <br>
* Released under the MIT license
@@ -7,7 +7,7 @@
* Please see http://www.jsxc.org/
*
* @author Klaus Herberth <klaus@jsxc.org>
* @version 0.7.2
* @version 0.8.0
*/
/* jsxc, Strophe, SDPUtil, getUserMediaWithConstraints, setupRTC, jQuery */
@@ -172,6 +172,32 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
});
},
/**
* Add "video" button to roster
*
* @private
* @memberOf jsxc.webrtc
* @param event
* @param cid cid of roster item
* @param data data wich belongs to cid
* @param el the roster item
*/
onAddRosterItem: function(event, cid, data, el) {
var self = jsxc.webrtc;
var videoIcon = $('<div class="jsxc_video jsxc_disabled" title="' + jsxc.l.Start_video_call + '"></div>');
console.log(data);
videoIcon.click(function() {
self.startCall(data.jid);
return false;
});
el.find('.jsxc_options.jsxc_left').append(videoIcon);
el.on('extra.jsxc', function() {
self.updateIcon(cid);
});
},
/**
* Add "video" button to window menu.
*
@@ -193,27 +219,26 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
var div = $('<div>').addClass('jsxc_video');
win.find('.jsxc_transfer:eq(1)').after(div);
self.updateWindow(win);
self.updateIcon(jsxc.jidToCid(win.data('jid')));
},
/**
* Enable or disable "video" button and assign full jid.
* Enable or disable "video" icon and assign full jid.
*
* @memberOf jsxc.webrtc
* @param win jQuery window object
* @param cid CSS conform jid
*/
updateWindow: function(win) {
if (!win || win.length === 0) {
return;
}
updateIcon: function(cid) {
var self = jsxc.webrtc;
var jid = win.data('jid');
var li = win.find('.jsxc_video');
var win = jsxc.gui.getWindow(cid);
var jid = win.data('jid') || jsxc.storage.getUserItem('buddy_' + cid).jid;
var el = win.find('.jsxc_video').add('#' + cid + ' .jsxc_video');
// only start video call to a full jid
if (Strophe.getResourceFromJid(jid) === null) {
var cid = jsxc.jidToCid(jid);
var res = jsxc.storage.getUserItem('buddy_' + cid).res;
if (Array.isArray(res) && res.length === 1) {
@@ -221,19 +246,19 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
}
}
li.off('click');
el.off('click');
if (self.conn.caps.hasFeatureByJid(jid, self.reqVideoFeatures)) {
li.click(function() {
el.click(function() {
self.startCall(jid);
});
li.removeClass('jsxc_disabled');
el.removeClass('jsxc_disabled');
li.attr('title', jsxc.translate('%%Start video call%%'));
el.attr('title', jsxc.translate('%%Start video call%%'));
} else {
li.addClass('jsxc_disabled');
el.addClass('jsxc_disabled');
li.attr('title', jsxc.translate('%%Video call not possible.%%'));
el.attr('title', jsxc.translate('%%Video call not possible.%%'));
}
},
@@ -250,7 +275,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
var bJid = Strophe.getBareJidFromJid(from);
if (self.chatJids[bJid] !== from) {
self.updateWindow(jsxc.gui.getWindow(jsxc.jidToCid(bJid)));
self.updateIcon(jsxc.jidToCid(bJid));
self.chatJids[bJid] = from;
}
},
@@ -312,11 +337,8 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
*/
onCaps: function(event, jid) {
var self = jsxc.webrtc;
var win = jsxc.gui.getWindow(jsxc.jidToCid(jid));
if (win.length > 0) {
self.updateWindow(win);
}
self.updateIcon(jsxc.jidToCid(jid));
},
/**
@@ -799,13 +821,14 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
if (RTC !== null) {
RTCPeerconnection = RTC.peerconnection;
$(document).on('add.roster.jsxc', jsxc.webrtc.onAddRosterItem);
$(document).on('init.window.jsxc', jsxc.webrtc.initWindow);
$(document).on('attached.jsxc', jsxc.webrtc.init);
}
});
$.extend(jsxc.l10n.en, {
Please_allow_access_to_microphone_and_camera: 'Please allow access to microphone and camera.',
Please_allow_access_to_microphone_and_camera: 'Please click the "Allow" button at the top, to allow access to microphone and camera.',
Incoming_call: 'Incoming call',
from: 'from',
Do_you_want_to_accept_the_call_from: 'Do you want to accept the call from',
@@ -826,7 +849,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
});
$.extend(jsxc.l10n.de, {
Please_allow_access_to_microphone_and_camera: 'Bitte erlaube den Zugriff auf Kamera und Mikrofon.',
Please_allow_access_to_microphone_and_camera: 'Bitte klick auf den "Zulassen" Button oben, um den Zugriff auf Kamera und Mikrofon zu erlauben.',
Incoming_call: 'Eingehender Anruf',
from: 'von',
Do_you_want_to_accept_the_call_from: 'Möchtest Du den Anruf annehmen von',
@@ -845,4 +868,25 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
Video_call_not_possible: 'Videoanruf nicht verfügbar',
Start_video_call: 'Starte Videoanruf'
});
$.extend(jsxc.l10n.es, {
Please_allow_access_to_microphone_and_camera: 'Por favor, permitir el acceso al micrófono y la cámara.',
Incoming_call: 'Llamada entrante',
from: 'de',
Do_you_want_to_accept_the_call_from: 'Desea aceptar la llamada de',
Reject: 'Rechazar',
Accept: 'Aceptar',
hang_up: 'colgar',
snapshot: 'instantánea',
mute_my_audio: 'silenciar mi audio',
pause_my_video: 'pausar mi vídeo',
fullscreen: 'pantalla completa',
Info: 'Info',
Local_IP: 'IP local',
Remote_IP: 'IP remota',
Local_Fingerprint: 'Firma digital local',
Remote_Fingerprint: 'Firma digital remota',
Video_call_not_possible: 'Llamada de vídeo no es posible',
Start_video_call: 'Iniciar llamada de vídeo'
});
}(jQuery));
+13 -10
Ver Arquivo
@@ -115,17 +115,17 @@ div:fullscreen.jsxc_localvideo {
.jsxc_chatarea {
position: relative;
height: 255px;
height: 270px;
display: none;
background-color: #A4A4A4;
}
.jsxc_chatarea ul {
.jsxc_chatarea > ul {
position: absolute;
left: 50%;
top: 0px;
width: 200px;
height: 255px;
width: 250px;
height: 270px;
list-style: none;
padding: 0px;
margin: 0px 0px 0px -100px;
@@ -153,18 +153,21 @@ div:fullscreen.jsxc_localvideo {
}
div.jsxc_video {
padding: 3px;
width: 17px;
height: 17px;
background-image: url('img/camera_icon_grey.svg');
background-repeat: no-repeat;
background-position: center center;
background-size: 15px 15px;
cursor: pointer;
float: left;
}
div.jsxc_video:not(.jsxc_disabled):hover, #jsxc_buddylist .jsxc_options .jsxc_video {
background-image: url('img/camera_icon_white.svg');
}
div.jsxc_video.jsxc_disabled {
opacity: 0.5;
cursor: default;
cursor: default !important;
}
#jsxc_buddylist .jsxc_options .jsxc_video.jsxc_disabled {
opacity: 0.2;
}
Arquivo binário não exibido.
Arquivo binário não exibido.
+11
Ver Arquivo
@@ -0,0 +1,11 @@
Rotary-Phone6.mp3
===
Creator: David English
Source: http://www.beepzoid.com/old-phones/
License: unknown
Ping1.mp3
===
Creator: CameronMusic
Source: https://soundcloud.com/freefilmandgamemusic/ping-1?in=freefilmandgamemusic/sets/free-notification-sounds-and
License: cc 3.0, http://creativecommons.org/licenses/by/3.0/
Arquivo binário não exibido.
+9 -72
Ver Arquivo
@@ -1,97 +1,34 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="535.00458"
height="510.4368"
id="svg3896"
version="1.1"
inkscape:version="0.48+devel r"
sodipodi:docname="camera_icon_grey.svg">
<defs
id="defs3898" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="369.28572"
inkscape:cy="50.436783"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="954"
inkscape:window-height="711"
inkscape:window-x="129"
inkscape:window-y="144"
inkscape:window-maximized="0" />
id="svg2"
width="20"
height="20">
<metadata
id="metadata3901">
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-5.7142771,-72.362177)">
<rect
style="fill:#808080;stroke:none;stroke-width:1.6172694;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect3904"
width="290.51404"
height="294.08438"
x="86.054779"
y="292.97778" />
transform="matrix(0.03788594,0,0,0.03788594,-0.41340793,-2.6310716)">
<path
style="fill:#808080;stroke:none"
d="m 292.28572,420.35915 229.57599,-101.39986 0,232.54576 -233.04644,-102.93271 z"
id="path3906"
inkscape:connector-curvature="0" />
<path
sodipodi:type="arc"
style="fill:#808080;stroke:none"
id="path3908"
sodipodi:cx="242.85715"
sodipodi:cy="315.21933"
sodipodi:rx="117.14286"
sodipodi:ry="117.14286"
d="M 360.00001,315.21933 A 117.14286,117.14286 0 0 1 242.85715,432.36219 117.14286,117.14286 0 0 1 125.71429,315.21933 117.14286,117.14286 0 0 1 242.85715,198.07647 117.14286,117.14286 0 0 1 360.00001,315.21933 Z"
transform="matrix(1.1334136,0,0,1.1663886,-136.76164,-155.82534)" />
<a
id="a3912"
style="fill:#808080;stroke:none"
transform="matrix(0.86859739,0,0,0.89386794,47.913668,10.526572)">
<path
sodipodi:type="arc"
style="fill:#808080;stroke:none"
id="path3910"
sodipodi:cx="242.85715"
sodipodi:cy="315.21933"
sodipodi:rx="117.14286"
sodipodi:ry="117.14286"
d="M 360.00001,315.21933 A 117.14286,117.14286 0 0 1 242.85715,432.36219 117.14286,117.14286 0 0 1 125.71429,315.21933 117.14286,117.14286 0 0 1 242.85715,198.07647 117.14286,117.14286 0 0 1 360.00001,315.21933 Z"
transform="matrix(1.304878,0,0,1.304878,3.67247,-186.10345)" />
</a>
d="m 361.65148,313.51768 177.16074,-131.78516 0,302.22999 L 358.97338,350.18517 Z M 10.911922,182.40634 l 378.372678,0 0,302.65582 -378.372678,0 z" />
</g>
</svg>

Antes

Largura:  |  Altura:  |  Tamanho: 3.3 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 1010 B

+16 -41
Ver Arquivo
@@ -13,8 +13,8 @@
height="510.4368"
id="svg3896"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="camera_icon.svg">
inkscape:version="0.48+devel r"
sodipodi:docname="camera_icon_white.svg">
<defs
id="defs3898" />
<sodipodi:namedview
@@ -24,9 +24,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="369.28572"
inkscape:cy="50.436783"
inkscape:zoom="0.98994949"
inkscape:cx="353.91934"
inkscape:cy="233.8456"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
@@ -34,11 +34,11 @@
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="954"
inkscape:window-height="711"
inkscape:window-x="833"
inkscape:window-y="106"
inkscape:window-maximized="0" />
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1" />
<metadata
id="metadata3901">
<rdf:RDF>
@@ -57,41 +57,16 @@
id="layer1"
transform="translate(-5.7142771,-72.362177)">
<rect
style="fill:#ffffff;stroke:#ffffff;stroke-width:1.61726940000000008;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
style="fill:#ffffff;stroke:none;stroke-width:1.6172694;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3904"
width="290.51404"
height="294.08438"
x="86.054779"
y="292.97778" />
width="378.37268"
height="302.65582"
x="10.911922"
y="182.40634" />
<path
style="fill:#ffffff;stroke:none"
d="m 292.28572,420.35915 229.57599,-101.39986 0,232.54576 -233.04644,-102.93271 z"
d="m 361.65148,313.51768 177.16074,-131.78516 0,302.22999 -179.83884,-133.77734 z"
id="path3906"
inkscape:connector-curvature="0" />
<path
sodipodi:type="arc"
style="fill:#ffffff;stroke:none"
id="path3908"
sodipodi:cx="242.85715"
sodipodi:cy="315.21933"
sodipodi:rx="117.14286"
sodipodi:ry="117.14286"
d="m 360.00001,315.21933 a 117.14286,117.14286 0 1 1 -234.28572,0 117.14286,117.14286 0 1 1 234.28572,0 z"
transform="matrix(1.1334136,0,0,1.1663886,-136.76164,-155.82534)" />
<a
id="a3912"
style="fill:#ffffff"
transform="matrix(0.86859739,0,0,0.89386794,47.913668,10.526572)">
<path
sodipodi:type="arc"
style="fill:#ffffff;stroke:none"
id="path3910"
sodipodi:cx="242.85715"
sodipodi:cy="315.21933"
sodipodi:rx="117.14286"
sodipodi:ry="117.14286"
d="m 360.00001,315.21933 c 0,64.69622 -52.44665,117.14286 -117.14286,117.14286 -64.69622,0 -117.14286,-52.44664 -117.14286,-117.14286 0,-64.69622 52.44664,-117.14286 117.14286,-117.14286 64.69621,0 117.14286,52.44664 117.14286,117.14286 z"
transform="matrix(1.304878,0,0,1.304878,3.67247,-186.10345)" />
</a>
</g>
</svg>

Antes

Largura:  |  Altura:  |  Tamanho: 3.2 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 2.1 KiB

Arquivo executável
BIN
Ver Arquivo
Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 1.5 KiB

+30 -10
Ver Arquivo
@@ -14,7 +14,7 @@
inkscape:version="0.48+devel r"
width="15"
height="15"
sodipodi:docname="padlock_open-white.svg">
sodipodi:docname="padlock_close_green.svg">
<metadata
id="metadata3047">
<rdf:RDF>
@@ -42,25 +42,45 @@
inkscape:window-height="1056"
id="namedview3043"
showgrid="false"
inkscape:zoom="44.500587"
inkscape:cx="6.292871"
inkscape:cy="6.4926565"
inkscape:zoom="32"
inkscape:cx="12.823367"
inkscape:cy="8.9449238"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="svg3041"
borderlayer="true" />
<rect
style="fill:#009800;stroke:#009800;stroke-width:0.92522794"
style="fill:#44aa00;stroke:#44aa00;stroke-width:0.92522794"
id="rect3051"
width="10.232394"
height="6.4687548"
x="2.5534275"
y="8.074255" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-color:currentColor;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#009800;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.90384686;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 7.5078125,2.6797098 C 5.0260054,2.6797098 3.491603,3.472493 2.75,4.621116 2.008397,5.7697391 2.0878906,7.0238438 2.0878906,7.699241 l 1.9042969,0 c 0,-0.7329344 0.013699,-1.5125503 0.3574219,-2.0449218 0.3437231,-0.5323715 1.0433343,-1.0703125 3.1582031,-1.0703125 2.0264219,0 2.9669635,0.6265545 3.4326915,1.3827484 0.465728,0.7561939 0.400333,1.7142789 0.400333,1.7142789 0.04517,1.7732263 -0.06599,4.303173 0.0049,5.535784 l 0.05274,0.898438 0.898437,0 0.945445,-0.0031 0.01,-6.4361369 c 0,0 0.06201,-1.6621328 -0.685321,-2.8754827 C 11.819768,3.587152 10.078064,2.6797098 7.5078125,2.6797098 Z"
id="path3848"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssccssscccccccs" />
style="fill:none;fill-opacity:1;stroke:#44aa00;stroke-width:2.08827519;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4101"
sodipodi:type="arc"
sodipodi:cx="7.6713805"
sodipodi:cy="6.7928491"
sodipodi:rx="4.534133"
sodipodi:ry="4.5301714"
sodipodi:start="3.1415927"
sodipodi:end="0"
d="M 3.1372476,6.7928489 A 4.534133,4.5301714 0 0 1 7.6713806,2.2626777 4.534133,4.5301714 0 0 1 12.205513,6.7928491"
sodipodi:open="true" />
<rect
style="fill:#44aa00;fill-opacity:1;stroke:none;stroke-width:1.39526081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4153"
width="2.0906768"
height="1.0984892"
x="2.0913804"
y="6.7554431" />
<rect
y="6.7632556"
x="11.157786"
height="1.0984892"
width="2.0906768"
id="rect4155"
style="fill:#44aa00;fill-opacity:1;stroke:none;stroke-width:1.39526081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</svg>

Antes

Largura:  |  Altura:  |  Tamanho: 3.3 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 2.7 KiB

+38 -10
Ver Arquivo
@@ -14,7 +14,7 @@
inkscape:version="0.48+devel r"
width="15"
height="15"
sodipodi:docname="padlock_open-white.svg">
sodipodi:docname="padlock_close_grey.svg">
<metadata
id="metadata3047">
<rdf:RDF>
@@ -42,9 +42,9 @@
inkscape:window-height="1056"
id="namedview3043"
showgrid="false"
inkscape:zoom="44.500587"
inkscape:cx="6.292871"
inkscape:cy="6.4926565"
inkscape:zoom="32"
inkscape:cx="12.792117"
inkscape:cy="8.9449238"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
@@ -57,10 +57,38 @@
height="6.4687548"
x="2.5534275"
y="8.074255" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-color:currentColor;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.90384686;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 7.5078125,2.6797098 C 5.0260054,2.6797098 3.491603,3.472493 2.75,4.621116 2.008397,5.7697391 2.0878906,7.0238438 2.0878906,7.699241 l 1.9042969,0 c 0,-0.7329344 0.013699,-1.5125503 0.3574219,-2.0449218 0.3437231,-0.5323715 1.0433343,-1.0703125 3.1582031,-1.0703125 2.0264219,0 2.9669635,0.6265545 3.4326915,1.3827484 0.465728,0.7561939 0.400333,1.7142789 0.400333,1.7142789 0.04517,1.7732263 -0.06599,4.303173 0.0049,5.535784 l 0.05274,0.898438 0.898437,0 0.945445,-0.0031 0.01,-6.4361369 c 0,0 0.06201,-1.6621328 -0.685321,-2.8754827 C 11.819768,3.587152 10.078064,2.6797098 7.5078125,2.6797098 Z"
id="path3848"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssccssscccccccs" />
<a
id="a4157"
style="fill:none;stroke:#808080">
<path
sodipodi:open="true"
d="M 3.1372476,6.7928489 A 4.534133,4.5301714 0 0 1 7.6713806,2.2626777 4.534133,4.5301714 0 0 1 12.205513,6.7928491"
sodipodi:end="0"
sodipodi:start="3.1415927"
sodipodi:ry="4.5301714"
sodipodi:rx="4.534133"
sodipodi:cy="6.7928491"
sodipodi:cx="7.6713805"
sodipodi:type="arc"
id="path4101"
style="fill:none;fill-opacity:1;stroke:#808080;stroke-width:2.08827519;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</a>
<g
id="g4170"
style="fill:#808080">
<rect
y="6.7554431"
x="2.0913804"
height="1.0984892"
width="2.0906768"
id="rect4153"
style="fill:#808080;fill-opacity:1;stroke:none;stroke-width:1.39526081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#808080;fill-opacity:1;stroke:none;stroke-width:1.39526081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4155"
width="2.0906768"
height="1.0984892"
x="11.157786"
y="6.7632556" />
</g>
</svg>

Antes

Largura:  |  Altura:  |  Tamanho: 3.3 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 2.8 KiB

+39 -11
Ver Arquivo
@@ -14,7 +14,7 @@
inkscape:version="0.48+devel r"
width="15"
height="15"
sodipodi:docname="padlock_open-white.svg">
sodipodi:docname="padlock_close_orange.svg">
<metadata
id="metadata3047">
<rdf:RDF>
@@ -42,25 +42,53 @@
inkscape:window-height="1056"
id="namedview3043"
showgrid="false"
inkscape:zoom="44.500587"
inkscape:cx="6.292871"
inkscape:cy="6.4926565"
inkscape:zoom="32"
inkscape:cx="12.792117"
inkscape:cy="8.9449238"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="svg3041"
borderlayer="true" />
<rect
style="fill:#ff9955;stroke:#ff9955;stroke-width:0.92522794"
style="fill:#ff7f2a;stroke:#ff7f2a;stroke-width:0.92522794"
id="rect3051"
width="10.232394"
height="6.4687548"
x="2.5534275"
y="8.074255" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-color:currentColor;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;baseline-shift:baseline;text-anchor:start;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ff9955;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.90384686;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="M 7.5078125,2.6797098 C 5.0260054,2.6797098 3.491603,3.472493 2.75,4.621116 2.008397,5.7697391 2.0878906,7.0238438 2.0878906,7.699241 l 1.9042969,0 c 0,-0.7329344 0.013699,-1.5125503 0.3574219,-2.0449218 0.3437231,-0.5323715 1.0433343,-1.0703125 3.1582031,-1.0703125 2.0264219,0 2.9669635,0.6265545 3.4326915,1.3827484 0.465728,0.7561939 0.400333,1.7142789 0.400333,1.7142789 0.04517,1.7732263 -0.06599,4.303173 0.0049,5.535784 l 0.05274,0.898438 0.898437,0 0.945445,-0.0031 0.01,-6.4361369 c 0,0 0.06201,-1.6621328 -0.685321,-2.8754827 C 11.819768,3.587152 10.078064,2.6797098 7.5078125,2.6797098 Z"
id="path3848"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssccssscccccccs" />
<a
id="a4157"
style="fill:none;stroke:#ff7f2a">
<path
sodipodi:open="true"
d="M 3.1372476,6.7928489 A 4.534133,4.5301714 0 0 1 7.6713806,2.2626777 4.534133,4.5301714 0 0 1 12.205513,6.7928491"
sodipodi:end="0"
sodipodi:start="3.1415927"
sodipodi:ry="4.5301714"
sodipodi:rx="4.534133"
sodipodi:cy="6.7928491"
sodipodi:cx="7.6713805"
sodipodi:type="arc"
id="path4101"
style="fill:none;fill-opacity:1;stroke:#ff7f2a;stroke-width:2.08827519;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</a>
<g
id="g4170"
style="fill:#ff7f2a">
<rect
y="6.7554431"
x="2.0913804"
height="1.0984892"
width="2.0906768"
id="rect4153"
style="fill:#ff7f2a;fill-opacity:1;stroke:none;stroke-width:1.39526081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="fill:#ff7f2a;fill-opacity:1;stroke:none;stroke-width:1.39526081;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4155"
width="2.0906768"
height="1.0984892"
x="11.157786"
y="6.7632556" />
</g>
</svg>

Antes

Largura:  |  Altura:  |  Tamanho: 3.3 KiB

Depois

Largura:  |  Altura:  |  Tamanho: 2.8 KiB

BIN
Ver Arquivo
Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 560 B

+66
Ver Arquivo
@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="25"
height="25"
id="svg2"
version="1.1"
inkscape:version="0.48+devel r"
viewBox="0 0 25 25.000001"
sodipodi:docname="speech_balloon_white.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="22.4"
inkscape:cx="25.186628"
inkscape:cy="14.479999"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-228.24219,-320.66798)">
<path
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 240.77627,324.02578 a 12.489309,7.9254426 0 0 0 -12.48944,7.92538 12.489309,7.9254426 0 0 0 5.26146,6.45637 c -0.17862,1.91196 -1.06119,3.95363 -3.14604,4.64437 2.54121,-0.11444 5.60026,-1.93057 7.47209,-3.40137 a 12.489309,7.9254426 0 0 0 2.90193,0.22616 12.489309,7.9254426 0 0 0 12.48928,-7.92553 12.489309,7.9254426 0 0 0 -12.48928,-7.92538 z"
id="path4101"
inkscape:connector-curvature="0" />
</g>
</svg>

Depois

Largura:  |  Altura:  |  Tamanho: 2.3 KiB

+450 -132
Ver Arquivo
@@ -38,6 +38,10 @@ p.jsxc_center {
min-width: 300px;
}
#jsxc_dialog p {
margin-bottom: 1em;
}
#jsxc_dialog h3 {
font-size: 120%;
font-weight: bold;
@@ -48,7 +52,11 @@ p.jsxc_center {
#jsxc_dialog p input {
margin-bottom: 5px;
width: 60%;
outline: none;
outline: none;
}
#jsxc_dialog p input[type="submit"] {
width: auto;
}
#jsxc_dialog p label {
@@ -63,7 +71,40 @@ p.jsxc_center {
}
#jsxc_dialog p.jsxc_maxWidth {
max-width: 500px;
max-width: 500px;
}
#jsxc_dialog fieldset {
border: 2px solid #ccc;
}
#jsxc_dialog legend {
padding: 0px 10px;
font-weight: bold;
}
#jsxc_dialog input {
outline: none;
}
#jsxc_dialog input:invalid {
border:1px solid red;
}
#jsxc_dialog .jsxc_fieldsetPriority {
width: 200px;
padding: 10px;
border-radius: 3px;
}
#jsxc_dialog .jsxc_fieldsetPriority label {
display: inline-block;
width: 100px;
}
#jsxc_dialog .jsxc_fieldsetPriority input[type="Number"] {
display: inline-block;
width: 50px;
}
/*############################
@@ -76,8 +117,11 @@ li .jsxc_name {
text-overflow: ellipsis;
white-space: nowrap;
}
li .jsxc_name:hover {
color: #FAFAFA;
}
.jsxc_avatar, ul#jsxc_buddylist li:hover .jsxc_avatar {
.jsxc_avatar,ul#jsxc_buddylist li:hover .jsxc_avatar {
width: 25px;
height: 25px;
line-height: 25px;
@@ -150,10 +194,11 @@ div#jsxc_roster .jsxc_wait h3 {
/** Input field for alias renaming */
#jsxc_roster input {
position: absolute;
top: 50%;
left: 31px;
top: 2px;
width: 157px;
height: 22px;
height: 18px;
margin-top: -11px;
padding: 2px;
border: 0px;
background-image: none;
@@ -162,11 +207,22 @@ div#jsxc_roster .jsxc_wait h3 {
-moz-box-shadow: inset 0 0 5px #888;
-webkit-box-shadow: inset 0 0 5px #888;
box-shadow: inner 0 0 5px #888;
outline: none;
outline: none;
}
#jsxc_roster .jsxc_expand input {
left: 51px;
width: 137px;
}
div#jsxc_roster p {
color: #939393;
padding: 10px;
}
div#jsxc_roster p a {
color: #b1b1b1;
text-decoration: underline;
}
div#jsxc_roster>.jsxc_bottom {
@@ -219,7 +275,7 @@ div#jsxc_roster>.jsxc_bottom li {
white-space: nowrap;
}
div#jsxc_roster>.jsxc_bottom li:hover:not(.jsxc_disabled) {
div#jsxc_roster>.jsxc_bottom li:hover:not(.jsxc_disabled ) {
color: #fff;
background-color: #3F8FBA;
}
@@ -238,6 +294,7 @@ div#jsxc_roster>.jsxc_bottom ul li:last-child {
width: 30px;
}
/** own avatar */
#jsxc_avatar {
float: left;
margin: 0px 2px;
@@ -311,61 +368,150 @@ ul#jsxc_buddylist li {
line-height: 30px;
padding-left: 3px;
z-index: 85;
overflow: hidden;
}
ul#jsxc_buddylist .jsxc_name {
padding-right: 30px;
}
ul#jsxc_buddylist li.jsxc_expand {
height: 54px;
}
ul#jsxc_buddylist li.jsxc_expand .jsxc_avatar, ul#jsxc_buddylist li.jsxc_expand .jsxc_avatar img {
width: 48px;
height: 48px;
}
#jsxc_buddylist .jsxc_control {
position:absolute;
width: 30px;
height: 30px;
top: 0px;
right: 0px;
cursor: pointer;
}
#jsxc_buddylist .jsxc_control:after {
content: '▾';
position: absolute;
left: 50%;
top: 15px;
width: 16px;
height: 16px;
line-height: 16px;
text-align: center;
margin-left: -8px;
margin-top: -8px;
border-radius: 8px;
color: #c1c1c1;
background-color: rgba(150, 150, 150, 0.5);
opacity: 0.6;
-webkit-transition: -webkit-transform 0.5s;
transition: transform 0.5s;
}
#jsxc_buddylist .jsxc_control:hover:after {
color: #fff;
opacity: 1.0;
}
#jsxc_buddylist li.jsxc_expand .jsxc_control:after {
/* content: '▴'; */
-ms-transform:rotate(180deg); /* IE 9 */
-webkit-transform:rotate(180deg);
transform:rotate(180deg);
}
#jsxc_buddylist .jsxc_options {
height: 20px;
float: left;
border-radius:2px;
background-color: rgba(150, 150, 150, 0.5);
}
#jsxc_buddylist .jsxc_options > div {
height: 20px;
width: 20px;
float: left;
margin-right:0px 1px;
background-repeat: no-repeat;
background-position: center center;
opacity: 0.6;
cursor: pointer;
}
#jsxc_buddylist .jsxc_options > div:hover {
opacity: 1;
}
#jsxc_buddylist .jsxc_chaticon {
background-image: url('img/speech_balloon_white.svg');
background-size: 15px 15px;
}
#jsxc_buddylist .jsxc_videoicon {
background-image: url('img/camera_icon_white.svg');
background-size: 13px 13px;
}
#jsxc_buddylist .jsxc_vcardicon {
font-size: 15px;
line-height: 20px;
text-align: center;
color: #fff;
font-weight: bold;
font-family: serif;
}
ul#jsxc_buddylist li:hover {
color: #FAFAFA;
}
ul#jsxc_buddylist li.jsxc_oneway {
ul#jsxc_buddylist .jsxc_oneway {
opacity: 0.7;
}
ul#jsxc_buddylist .jsxc_options {
height: 30px;
.jsxc_oneway .jsxc_avatar {
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: grayscale(100%);
}
ul#jsxc_buddylist .jsxc_right {
float:left;
}
ul#jsxc_buddylist .jsxc_right {
float: right;
overflow: hidden;
transition: width 2s;
width: 0px;
-webkit-transition: width .5s; /* Safari */
white-space: nowrap;
margin-right: 6px;
}
ul#jsxc_buddylist .jsxc_options div {
line-height: 30px;
height: 30px;
width: 20px;
cursor: pointer;
opacity: 0.7;
display: inline-block;
ul#jsxc_buddylist .jsxc_right div {
font-weight: bold;
text-align: center;
font-size: 17px;
overflow: hidden;
font-size: 13px;
line-height: 20px;
color: #fff;
}
ul#jsxc_buddylist li[data-type="chat"]:hover .jsxc_options {
width: 50px;
ul#jsxc_buddylist li[data-type!="chat"] .jsxc_right {
display: none;
}
ul#jsxc_buddylist .jsxc_options div:hover {
ul#jsxc_buddylist .jsxc_right div:hover {
opacity: 1.0;
}
ul#jsxc_buddylist .jsxc_rename {
/* background-image: url('../img/edit.png'); */
/* background-repeat: no-repeat; */
/* background-position: center center; */
/* background-size: 15px 15px; */
transform: scaleX(-1);
}
ul#jsxc_buddylist .jsxc_delete {
/* text-transform: lowercase; */
/* font-weight: bold; */
/* vertical-align: middle; */
/* font-size: 17px; */
}
#jsxc_roster .jsxc_avatar {
position: relative;
cursor: pointer;
}
#jsxc_roster .jsxc_avatar img {
cursor: pointer;
}
div#jsxc_toggleRoster {
@@ -409,29 +555,32 @@ div#jsxc_windowList>ul>li {
margin: 0px;
display: block;
float: right;
width: 200px;
width: 250px;
background-color: #282323;
height: 30px;
position: relative;
overflow: visible;
margin-right: 5px;
box-shadow: 0px 0px 5px #000;
cursor: pointer;
}
div#jsxc_windowList>ul>li.jsxc_min {
width: 200px;
}
/*############################
*######### Window ###########
*############################*/
div.jsxc_bar {
background-color: #282323;
cursor: pointer;
height: 30px;
line-height: 30px;
margin-left: 2px;
line-height: 26px;
padding: 2px;
color: #939393;
}
div.jsxc_bar:hover {
color: #FAFAFA;
width: 100%;
box-sizing: border-box;
overflow: hidden;
}
div.jsxc_cycle {
@@ -453,64 +602,135 @@ div#jsxc_windowList>ul>li.jsxc_unreadMsg .jsxc_cycle {
/** Contains text area */
div.jsxc_window {
display: none;
width: 200px;
height: 255px;
position: absolute;
bottom: 30px;
bottom: 0px;
left: 0px;
right: 0px;
height: auto;
background-color: #A4A4A4;
box-shadow: 0px 0px 5px #000;
z-index: 80;
cursor: default;
cursor: default;
}
div.jsxc_window .jsxc_tools {
div.jsxc_window .jsxc_emoticons {
height: 30px;
width: 30px;
position: absolute;
top: 240px;
right: 0px;
cursor: pointer;
}
div.jsxc_window .jsxc_emoticons:after {
content: ' ';
background-image: url('img/smiley.png');
background-position: center center;
background-repeat: no-repeat;
height: 30px;
width: 30px;
opacity: 0.3;
position: absolute;
top: 0px;
left: 0px;
width: 200px;
height: 23px;
background-color: #282323;
box-shadow: 0px 5px 5px -5px #000;
}
div.jsxc_window .jsxc_emoticons:hover:after {
opacity: 0.5;
}
div.jsxc_window .jsxc_emoticons ul {
display: none;
position: absolute;
bottom: 33px;
right: 3px;
width: 210px;
background-color: rgba(40, 35, 35, 0.8);
padding: 3px;
border-radius: 3px;
z-index: 200;
}
div.jsxc_window .jsxc_emoticons ul:after {
content: '';
position: absolute;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 6px solid rgba(40, 35, 35, 0.8);
display: block;
width: 0;
z-index: 1;
right: 6px;
bottom: -6px;
}
div.jsxc_window .jsxc_emoticons li {
float: right;
cursor: pointer;
}
div.jsxc_window .jsxc_emoticons img {
cursor: pointer;
border-radius: 3px;
}
div.jsxc_window .jsxc_emoticons img:hover {
background-color: rgba(255, 255, 255, 0.8);
}
/** groups elements, which will be hidden, if the window is minimized. */
.jsxc_window .jsxc_fade {
position: relative;
}
.jsxc_window .jsxc_gradient {
position: absolute;
top: 0px;
left: 0px;
right: 0px;
height: 15px;
z-index: 100;
background: -moz-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(164,
164, 164, 1)), color-stop(100%, rgba(40, 35, 35, 0)));
/* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(164, 164, 164, 1) 0%,
rgba(40, 35, 35, 0) 100%); /* IE10+ */
background: linear-gradient(to bottom, #a4a4a4 0%, rgba(40, 35, 35, 0)
100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a4a4a4',
endColorstr='#00282323', GradientType=0); /* IE6-9 */
}
div.jsxc_window .jsxc_avatar {
margin-top: 1px;
}
div.jsxc_window .jsxc_textarea {
width: 200px;
height: 200px;
width: 100%;
height: 100%;
overflow: hidden;
padding: 3px;
}
div.jsxc_window .slimScrollDiv {
position: absolute;
top: 22px;
left: 0px;
margin: 0px 0px 6px 0px;
}
div.jsxc_chatmessage,input.jsxc_chatmessage {
margin: 5px;
border-radius: 5px !important;
padding: 3px;
width: 157px;
div.jsxc_chatmessage {
margin: 3px;
padding: 4px;
padding-right: 10px;
max-width: 76%;
word-wrap: break-word;
background-color: #fff;
position: relative;
outline: none;
}
div.jsxc_chatmessage.jsxc_received {
}
div.jsxc_chatmessage.jsxc_received:before {
content: '✓';
position: absolute;
bottom: 2px;
left: 4px;
font-size: 10px;
line-height: 10px;
color: green;
outline: none;
clear: both;
}
div.jsxc_chatmessage a {
@@ -524,66 +744,131 @@ div.jsxc_chatmessage img {
}
/** incoming message */
div.jsxc_in,input.jsxc_in {
text-align: left;
margin-right: 30px;
border: 1px solid blue;
div.jsxc_in {
float: left;
position: relative;
margin-left: 10px;
background: #f1f7fd;
border: solid 1px #a6b8c9;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
div.jsxc_in:after {
content: '';
position: absolute;
border-style: solid;
border-width: 5px 6px 5px 0;
border-color: transparent #f1f7fd;
display: block;
width: 0;
z-index: 1;
left: -6px;
bottom: 10px;
}
div.jsxc_out.jsxc_received:before {
content: '✓';
position: absolute;
bottom: 2px;
right: 2px;
font-size: 12px;
line-height: 12px;
color: green;
}
/** outgoing message */
div.jsxc_out,input.jsxc_out {
text-align: right;
margin-left: 30px;
border: 1px solid green !important;
div.jsxc_out {
float: right;
position: relative;
margin-right: 10px;
background: #e6ffd1;
border: solid 1px #b4d89f;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
div.jsxc_out:after {
content: '';
position: absolute;
border-style: solid;
border-width: 5px 0 5px 6px;
border-color: transparent #e6ffd1;
display: block;
width: 0;
z-index: 1;
right: -6px;
bottom: 10px;
}
/** system message */
div.jsxc_sys {
width: 182px;
border: 1px solid black;
width: auto;
max-width: none;
padding-right: 4px;
box-sizing: border-box;
margin-right: 3px;
border-radius: 3px;
}
.jsxc_window input.jsxc_textinput {
position: absolute;
top: 226px;
left: 30px;
width: 157px;
height: 16px;
width: 100%;
height: 30px;
margin: 0px;
line-height: 16px;
outline:none;
}
.jsxc_window .jsxc_close {
text-transform: uppercase;
color: #939393;
font-family: Arial;
font-weight: bold;
line-height: 17px;
cursor: pointer;
float: right;
padding: 3px;
padding-right: 40px;
outline: none;
border-radius: 0px;
box-sizing: border-box;
text-align: right;
}
.jsxc_window .jsxc_close:hover {
color: #FAFAFA;
.jsxc_window ::-webkit-input-placeholder {
color: #000;
opacity: 0.3;
}
.jsxc_window ::-moz-placeholder {
color: #000;
opacity: 0.3;
} /* firefox 19+ */
.jsxc_window :-ms-input-placeholder {
color: rgba(0, 0, 0, 0.4);
} /* ie */
.jsxc_window input:-moz-placeholder {
color: #000;
opacity: 0.3;
}
div.jsxc_window .jsxc_tools {
height: 26px;
float: right;
}
.jsxc_min .jsxc_tools {
display: none;
}
div.jsxc_window .jsxc_tools > div {
width: 17px;
height: 26px;
display: block;
float: left;
color: #939393;
font-family: Arial;
line-height: 26px;
cursor: pointer;
text-align: center;
}
div.jsxc_settings {
color: #939393;
font-family: Arial;
line-height: 17px;
cursor: pointer;
background-image: url('img/gear_grey.svg');
background-size: 15px 15px;
background-repeat: no-repeat;
background-position: center center;
width: 17px;
height: 17px;
display: block;
float: left;
overflow: visible;
padding: 3px;
}
div.jsxc_settings:hover,div.jsxc_settings.hover {
@@ -595,10 +880,10 @@ div.jsxc_settings ul {
padding: 0px;
margin: 0px;
position: absolute;
top: 23px;
top: 30px;
left: 0px;
box-shadow: 0px 5px 5px -5px #000;
z-index: 90;
z-index: 110;
overflow: visible;
background-color: #282323;
display: none;
@@ -610,13 +895,14 @@ div.jsxc_settings li {
padding-left: 10px;
height: 30px;
line-height: 30px;
text-align: left;
}
div.jsxc_settings li:first-child {
border-top: 1px solid #ccc;
}
div.jsxc_settings li:hover:not(.jsxc_disabled){
div.jsxc_settings li:hover:not(.jsxc_disabled ){
color: #fff;
background-color: #3F8FBA;
}
@@ -627,15 +913,14 @@ div.jsxc_settings li.jsxc_disabled {
}
div.jsxc_transfer {
padding: 3px;
width: 17px;
height: 17px;
background-image: url('img/padlock_open_grey.svg');
background-repeat: no-repeat;
background-position: center center;
background-size: 15px 15px;
cursor: pointer;
float: left;
background-size: 12px 12px;
}
div.jsxc_transfer:hover {
background-image: url('img/padlock_open_white.svg');
}
div.jsxc_transfer.jsxc_fin {
@@ -650,6 +935,39 @@ div.jsxc_transfer.jsxc_enc.jsxc_trust {
background-image: url('img/padlock_close_green.svg');
}
#colorbox, #cboxWrapper {
outline: none;
.jsxc_window .jsxc_close {
font-size: 20px;
}
.jsxc_window .jsxc_close:hover {
color: #FAFAFA;
}
#colorbox,#cboxWrapper {
outline: none;
}
/*############################
*######### Other ############
*############################*/
ul.jsxc_vCard {
min-width: 400px;
}
ul.jsxc_vCard ul {
margin-left: 20px;
}
ul.jsxc_vCard li {
cursor: default !important;
}
ul.jsxc_vCard strong {
}
img.jsxc_vCard {
float: right;
max-width: 200px;
max-height: 200px;
}
+554 -69
Ver Arquivo
@@ -222,7 +222,7 @@ var jsxc;
if (!jsxc.storage.getItem('rid') || !jsxc.storage.getItem('sid') || !jsxc.restore) {
// Looking for a login form
if (!jsxc.options.loginForm.form || !jsxc.el_exists(jsxc.options.loginForm.form)) {
if (!jsxc.options.loginForm.form || !(jsxc.el_exists(jsxc.options.loginForm.form) && jsxc.el_exists(jsxc.options.loginForm.jid) && jsxc.el_exists(jsxc.options.loginForm.pass))) {
if (jsxc.options.displayRosterMinimized()) {
// Show minimized roster
@@ -462,8 +462,11 @@ var jsxc;
restoreRoster: function() {
var buddies = jsxc.storage.getUserItem('buddylist');
if (!buddies) {
if (!buddies || buddies.length === 0) {
jsxc.debug('No saved buddylist.');
jsxc.gui.roster.empty();
return;
}
@@ -527,6 +530,7 @@ var jsxc;
* Escapes some characters to HTML character
*/
escapeHTML: function(text) {
text = text.replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>');
return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
},
@@ -697,7 +701,7 @@ var jsxc;
*/
jsxc.gui = {
/** Smilie token to file mapping */
emotions: [ [ ':-) :)', 'smile.png' ], [ ':-D :D', 'grin.png' ], [ ':-( :(', 'sad.png' ], [ ';-) ;)', 'wink.png' ], [ ':-P :P', 'tonguesmile.png' ], [ '=-O', 'surprised.png' ], [ ':kiss: :-*', 'kiss.png' ], [ '8-) :cool:', 'sunglassess.png' ], [ ':\'-(', 'crysad.png' ], [ ':-/', 'doubt.png' ], [ 'O:-) O:)', 'angel.png' ], [ ':-X :X', 'zip.png' ], [ '>:o', 'angry.png' ], [ ':yes:', 'thumbsup.png' ], [ ':beer:', 'beer.png' ], [ ':devil:', 'devil.png' ], [ ':kissing:', 'kissing.png' ], [ ':love:', 'love.png' ], [ ':zzz:', 'tired.png' ] ],
emotions: [ [ 'O:-) O:)', 'angel.png' ], [ '>:-( >:( &gt;:-( &gt;:(', 'angry.png' ], [ ':-) :)', 'smile.png' ], [ ':-D :D', 'grin.png' ], [ ':-( :(', 'sad.png' ], [ ';-) ;)', 'wink.png' ], [ ':-P :P', 'tonguesmile.png' ], [ '=-O', 'surprised.png' ], [ ':kiss: :-*', 'kiss.png' ], [ '8-) :cool:', 'sunglassess.png' ], [ ':\'-( :\'( :&amp;apos;-(', 'crysad.png' ], [ ':-/', 'doubt.png' ], [ ':-X :X', 'zip.png' ], [ ':yes:', 'thumbsup.png' ], [ ':no:', 'thumbsdown.png' ], [ ':beer:', 'beer.png' ], [ ':devil:', 'devil.png' ], [ ':kiss: :kissing:', 'kissing.png' ], [ '@->-- :rose: @-&gt;--', 'rose.png' ], [ ':music:', 'music.png' ], [ ':love:', 'love.png' ], [ ':zzz:', 'tired.png' ] ],
/**
* Creates application skeleton.
@@ -707,12 +711,15 @@ var jsxc;
init: function() {
$('body').append($(jsxc.gui.template.get('windowList')));
jsxc.gui.tooltip('#jsxc_windowList');
jsxc.gui.roster.init();
// prepare regexp for emotions
$.each(jsxc.gui.emotions, function(i, val) {
// escape characters
var reg = val[0].replace(/(\/|\||\*|\.|\+|\?|\^|\$|\(|\)|\[|\]|\{|\})/g, '\\$1');
reg = '(' + reg.split(' ').join(')|(') + ')';
reg = '(' + reg.split(' ').join('|') + ')';
jsxc.gui.emotions[i][2] = new RegExp(reg, 'g');
});
@@ -721,6 +728,23 @@ var jsxc;
jsxc.gui.buddyTemplate = $(jsxc.gui.template.get('rosterBuddy'));
},
/**
* Init tooltip plugin for given jQuery selector.
*
* @param {String} selector jQuery selector
* @memberOf jsxc.gui
*/
tooltip: function(selector) {
$(selector).tooltip({
show: {
delay: 600
},
content: function() {
return $(this).attr('title').replace(/\n/g, '<br />');
}
});
},
/**
* Updates Information in roster and chatbar
*
@@ -746,8 +770,8 @@ var jsxc;
ue.removeClass('jsxc_' + jsxc.CONST.STATUS.join(' jsxc_')).addClass('jsxc_' + jsxc.CONST.STATUS[data.status]);
// Change name and add title
ue.find('.jsxc_name').text(data.name).attr('title', 'is ' + jsxc.CONST.STATUS[data.status]);
bullet.attr('title', 'is ' + jsxc.CONST.STATUS[data.status]);
ue.find('.jsxc_name').text(data.name).attr('title', jsxc.l.is + ' ' + jsxc.CONST.STATUS[data.status]);
bullet.attr('title', jsxc.l.is + ' ' + jsxc.CONST.STATUS[data.status]);
// Update gui according to encryption state
switch (data.msgstate) {
@@ -772,14 +796,14 @@ var jsxc;
if (data.trust) {
we.find('.jsxc_transfer').addClass('jsxc_trust').attr('title', jsxc.l.your_buddy_is_verificated);
} else {
we.find('.jsxc_transfer').removeClass('jsxc_trust').attr('title', '');
we.find('.jsxc_transfer').removeClass('jsxc_trust');
}
// update gui according to subscription state
if (data.sub && data.sub !== 'both') {
ri.addClass('jsxc_oneway');
ue.addClass('jsxc_oneway');
} else {
ri.removeClass('jsxc_oneway');
ue.removeClass('jsxc_oneway');
}
var info = '<b>' + Strophe.getBareJidFromJid(data.jid) + '</b>\n';
@@ -955,9 +979,7 @@ var jsxc;
return;
}
jsxc.gui.dialog.open(jsxc.gui.template.get('authenticationDialog', cid), {
'noClose': true
});
jsxc.gui.dialog.open(jsxc.gui.template.get('authenticationDialog', cid));
// Add handler
@@ -1100,7 +1122,7 @@ var jsxc;
}
});
$('#jsxc_dialog .creation').click(function() {
$('#jsxc_dialog form').submit(function() {
var username = $('#jsxc_username').val();
var alias = $('#jsxc_alias').val();
@@ -1121,6 +1143,8 @@ var jsxc;
jsxc.xmpp.addBuddy(username, alias);
jsxc.gui.dialog.close();
return false;
});
},
@@ -1256,6 +1280,146 @@ var jsxc;
jsxc.gui.dialog.open('<div class="jsxc_log">' + userInfo + '<h3>Log</h3><pre>' + jsxc.escapeHTML(jsxc.log) + '</pre></div>');
},
/**
* Show vCard of user with the given bar jid.
*
* @memberOf jsxc.gui
* @param {String} bjid Bar jid
*/
showVcard: function(bjid) {
jsxc.gui.dialog.open(jsxc.gui.template.get('vCard', jsxc.jidToCid(bjid)));
var printProp = function(el, depth) {
var content = '';
el.each(function() {
var item = $(this);
var children = $(this).children();
content += '<li>';
var prop = jsxc.translate('%%' + item[0].tagName + '%%');
if (prop !== ' ') {
content += '<strong>' + prop + ':</strong> ';
}
if (item[0].tagName === 'PHOTO') {
} else if (children.length > 0) {
content += '<ul>';
content += printProp(children, depth + 1);
content += '</ul>';
} else if (item.text() !== '') {
content += jsxc.escapeHTML(item.text());
}
content += '</li>';
if (depth === 0 && $('#jsxc_dialog ul.jsxc_vCard').length > 0) {
$('#jsxc_dialog ul.jsxc_vCard').append(content);
content = '';
}
});
if (depth > 0) {
return content;
}
};
var failedToLoad = function() {
if ($('#jsxc_dialog ul.jsxc_vCard').length === 0) {
return;
}
$('#jsxc_dialog p').remove();
var content = '<p>';
content += jsxc.translate('%%Sorry, we couldn\'t load any vCard.%%');
content += '</p>';
$('#jsxc_dialog').append(content);
};
jsxc.xmpp.conn.vcard.get(function(stanza) {
if ($('#jsxc_dialog ul.jsxc_vCard').length === 0) {
return;
}
if ($(stanza).find('vCard').length === 0) {
failedToLoad();
return;
}
$('#jsxc_dialog p').remove();
var photo = $(stanza).find("vCard > PHOTO");
if (photo.length > 0) {
var img = photo.find('BINVAL').text();
var type = photo.find('TYPE').text();
var src = 'data:' + type + ';base64,' + img;
$('#jsxc_dialog h3').prepend('<img class="jsxc_vCard" src="' + src + '" alt="avatar" />');
}
printProp($(stanza).find('vcard > *'), 0);
}, bjid, failedToLoad);
},
showSettings: function() {
jsxc.gui.dialog.open(jsxc.gui.template.get('settings'));
$('#jsxc_dialog form').each(function() {
var self = $(this);
self.find('input[type!="submit"]').each(function() {
var id = this.id.split("-");
var prop = id[0];
var key = id[1];
var data = jsxc.options.get(prop);
if (data && data[key]) {
$(this).val(data[key]);
}
});
});
$('#jsxc_dialog form').submit(function() {
var self = $(this);
var data = {};
self.find('input[type!="submit"]').each(function() {
var id = this.id.split("-");
var prop = id[0];
var key = id[1];
var val = $(this).val();
if (!data[prop]) {
data[prop] = {};
}
data[prop][key] = val;
});
$.each(data, function(key, val) {
jsxc.options.set(key, val);
});
setTimeout(function() {
self.find('input[type="submit"]').effect('highlight', {
color: 'green'
}, 4000);
}, 200);
return false;
});
},
/**
* Change own presence to pres.
*
@@ -1325,6 +1489,10 @@ var jsxc;
$('#jsxc_buddylist').addClass('jsxc_hideOffline');
}
$('#jsxc_menu .jsxc_settings').click(function() {
jsxc.gui.showSettings();
});
$('#jsxc_menu .jsxc_hideOffline').click(function() {
var hideOffline = !jsxc.options.get('hideOffline');
@@ -1406,14 +1574,7 @@ var jsxc;
jsxc.gui.updateAvatar($('#jsxc_avatar'), jsxc.storage.getItem('jid'), 'own');
});
$('#jsxc_roster').tooltip({
show: {
delay: 600
},
content: function() {
return $(this).attr('title').replace(/\n/g, '<br />');
}
});
jsxc.gui.tooltip('#jsxc_roster');
jsxc.notice.load();
@@ -1435,6 +1596,10 @@ var jsxc;
jsxc.gui.window.open(cid);
});
bud.find('.jsxc_chaticon').click(function() {
jsxc.gui.window.open(cid);
});
bud.find('.jsxc_rename').click(function() {
jsxc.gui.roster.rename(cid);
return false;
@@ -1445,12 +1610,31 @@ var jsxc;
return false;
});
var expandClick = function() {
bud.trigger('extra.jsxc');
bud.toggleClass('jsxc_expand');
jsxc.gui.updateAvatar(bud, data.jid, data.avatar);
return false;
};
bud.find('.jsxc_control').click(expandClick);
bud.dblclick(expandClick);
bud.find('.jsxc_vcardicon').click(function() {
jsxc.gui.showVcard(data.jid);
return false;
});
jsxc.gui.update(cid);
// update scrollbar
$('#jsxc_buddylist').slimScroll({
scrollTo: '0px'
});
$(document).trigger('add.roster.jsxc', [ cid, data, bud ]);
},
/**
@@ -1536,7 +1720,7 @@ var jsxc;
*/
rename: function(cid) {
var name = $('#' + cid + ' .jsxc_name');
var options = $('#' + cid + ' .jsxc_options');
var options = $('#' + cid).find('.jsxc_options, .jsxc_control');
var input = $('<input type="text" name="name"/>');
options.hide();
@@ -1626,9 +1810,27 @@ var jsxc;
$('#jsxc_roster .slimScrollDiv').remove();
$('#jsxc_roster > .jsxc_bottom').remove();
$('#jsxc_roster').append($(document.createElement('p')).text(jsxc.l.no_connection).append($(document.createElement('a')).attr('href', '#').text(jsxc.l.relogin).click(function() {
$('#jsxc_roster').append($('<p>' + jsxc.l.no_connection + '</p>').append(' <a>' + jsxc.l.relogin + '</a>').click(function() {
jsxc.gui.showLoginBox();
})));
}));
},
/**
* Shows a text with link to add a new buddy.
*
* @memberOf jsxc.gui.roster
*/
empty: function() { console.trace();
var text = $('<p>' + jsxc.l.Your_roster_is_empty_add_a + '</p>');
var link = $('<a>' + jsxc.l.new_buddy + '</a>');
link.click(function() {
jsxc.gui.showContactDialog();
});
text.append(link);
text.append('.');
$('#jsxc_roster').prepend(text);
}
};
@@ -1759,6 +1961,10 @@ var jsxc;
jsxc.gui.window.clear(cid);
});
win.find('.jsxc_tools').click(function() {
return false;
});
win.find('.jsxc_textinput').keyup(function(ev) {
var body = $(this).val();
@@ -1780,11 +1986,11 @@ var jsxc;
});
win.find('.jsxc_textarea').slimScroll({
height: '200px',
height: '234px',
distance: '3px'
});
win.find('.jsxc_window').hide();
win.find('.jsxc_fade').hide();
win.find('.jsxc_name').disableSelection();
@@ -1808,6 +2014,18 @@ var jsxc;
}
}
$.each(jsxc.gui.emotions, function(i, val) {
var ins = val[0].split(' ')[0];
var li = $('<li><img alt="' + ins + '" title="' + ins + '" src="' + jsxc.options.root + '/img/emotions/' + val[1] + '"/></li>');
li.click(function() {
win.find('input').val(win.find('input').val() + ins);
win.find('input').focus();
});
win.find('.jsxc_emoticons ul').append(li);
});
jsxc.gui.toggleList.call(win.find('.jsxc_emoticons'));
jsxc.gui.window.restoreChat(cid);
jsxc.gui.update(cid);
@@ -1874,7 +2092,7 @@ var jsxc;
* @param {String} cid CSS compatible jid
*/
toggle: function(cid) {
if (jsxc.gui.getWindow(cid).find('.jsxc_window').is(':hidden')) {
if (jsxc.gui.getWindow(cid).find('.jsxc_fade').is(':hidden')) {
jsxc.gui.window.show(cid);
} else {
jsxc.gui.window.hide(cid);
@@ -1901,7 +2119,8 @@ var jsxc;
*/
_show: function(cid) {
var win = jsxc.gui.getWindow(cid);
$('#jsxc_window_' + cid + ' .jsxc_window').slideDown();
$('#jsxc_window_' + cid + ' .jsxc_fade').slideDown();
win.removeClass('jsxc_min');
// remove unread flag
win.removeClass('jsxc_unreadMsg');
@@ -1933,7 +2152,9 @@ var jsxc;
* @param {String} cid
*/
_hide: function(cid) {
$('#jsxc_window_' + cid + ' .jsxc_window').slideUp();
$('#jsxc_window_' + cid + ' .jsxc_fade').slideUp();
$('#jsxc_window_' + cid).addClass('jsxc_min');
jsxc.gui.getWindow(cid).trigger('hidden.window.jsxc');
},
@@ -1943,9 +2164,13 @@ var jsxc;
* @param {type} cid
*/
highlight: function(cid) {
$('#jsxc_window_' + cid + ' ').effect('highlight', {
color: 'orange'
}, 2000);
var el = $('#jsxc_window_' + cid + ' .jsxc_bar');
if (!el.is(':animated')) {
el.effect('highlight', {
color: 'orange'
}, 2000);
}
},
/**
@@ -2019,7 +2244,7 @@ var jsxc;
}
if (direction === 'out' && jsxc.master) {
jsxc.buddyList[cid].sendMsg(msg, uid);
jsxc.buddyList[cid].sendMsg(html_msg, uid);
}
jsxc.gui.window._postMessage(cid, post);
@@ -2058,7 +2283,17 @@ var jsxc;
});
$.each(jsxc.gui.emotions, function(i, val) {
msg = msg.replace(val[2], '<img alt="$1" title="$1" src="' + jsxc.options.root + '/img/emotions/' + val[1] + '"/>');
msg = msg.replace(val[2], function(match, p1) {
// escape value for alt and title, this prevents double
// replacement
var esc = '', i;
for (i = 0; i < p1.length; i++) {
esc += '&#' + p1.charCodeAt(i) + ';';
}
return '<img alt="' + esc + '" title="' + esc + '" src="' + jsxc.options.root + '/img/emotions/' + val[1] + '"/>';
});
});
var msgDiv = $("<div>");
@@ -2070,12 +2305,16 @@ var jsxc;
msgDiv.addClass('jsxc_received');
}
if (direction === 'sys') {
$('#jsxc_window_' + cid + ' .jsxc_textarea').append('<div style="clear:both"/>');
}
$('#jsxc_window_' + cid + ' .jsxc_textarea').append(msgDiv);
jsxc.gui.window.scrollDown(cid);
// if window is hidden set unread flag
if (win.find('.jsxc_window').is(':hidden') && jsxc.restoreCompleted && !restore) {
if (win.find('.jsxc_fade').is(':hidden') && jsxc.restoreCompleted && !restore) {
win.addClass('jsxc_unreadMsg');
jsxc.storage.updateUserItem('window_' + cid, 'unread', true);
}
@@ -2207,33 +2446,38 @@ var jsxc;
<p class="jsxc_right"><a href="#" class="button jsxc_close">%%Close%%</a> <a href="#" class="button creation">%%Compare%%</a></p>\
</div>',
fingerprintsDialog: '<div>\
<p class="jsxc_maxWidth">%%A_fingerprint_%%</p>\
<p><strong>%%Your_fingerprint%%</strong><br />\
<span style="text-transform:uppercase">{{my_priv_fingerprint}}</span></p>\
<p><strong>%%Buddy_fingerprint%%</strong><br />\
<span style="text-transform:uppercase">{{cid_priv_fingerprint}}</span></p><br />\
<p class="jsxc_right"><a href="#" class="button jsxc_close">%%Close%%</a></p>\
</div>',
chatWindow: '<li>\
<div class="jsxc_bar">\
<div class="jsxc_avatar">☺</div>\
<div class="jsxc_name"/>\
<div class="jsxc_cycle"/>\
</div>\
chatWindow: '<li class="jsxc_min">\
<div class="jsxc_window">\
<div class="jsxc_tools">\
<div class="jsxc_settings">\
<ul>\
<li class="jsxc_fingerprints">%%Fingerprints%%</li>\
<li class="jsxc_verification">%%Authentifikation%%</li>\
<li class="jsxc_transfer">%%start_private%%</li>\
<li class="jsxc_clear">%%clear_history%%</li>\
</ul>\
</div>\
<div class="jsxc_transfer"/>\
<div class="jsxc_close">X</div>\
<div class="jsxc_bar">\
<div class="jsxc_avatar">☺</div>\
<div class="jsxc_tools">\
<div class="jsxc_settings">\
<ul>\
<li class="jsxc_fingerprints">%%Fingerprints%%</li>\
<li class="jsxc_verification">%%Authentifikation%%</li>\
<li class="jsxc_transfer">%%start_private%%</li>\
<li class="jsxc_clear">%%clear_history%%</li>\
</ul>\
</div>\
<div class="jsxc_transfer"/>\
<div class="jsxc_close">×</div>\
</div>\
<div class="jsxc_name"/>\
<div class="jsxc_cycle"/>\
</div>\
<div class="jsxc_fade">\
<div class="jsxc_gradient"/>\
<div class="jsxc_textarea"/>\
<div class="jsxc_emoticons"><ul/></div>\
<input type="text" class="jsxc_textinput" placeholder="...%%Message%%" />\
</div>\
<div class="jsxc_textarea"/>\
<input type="text" class="jsxc_textinput jsxc_chatmessage jsxc_out" placeholder="...%%Message%%"/>\
</div>\
</li>',
roster: '<div id="jsxc_roster">\
@@ -2245,6 +2489,7 @@ var jsxc;
<div id="jsxc_menu">\
<span></span>\
<ul>\
<li class="jsxc_settings">%%Settings%%</li>\
<li class="jsxc_muteNotification">%%Mute%%</li>\
<li class="jsxc_addBuddy">%%Add_buddy%%</li>\
<li class="jsxc_hideOffline">%%Hide offline%%</li>\
@@ -2275,11 +2520,16 @@ var jsxc;
</div>',
rosterBuddy: '<li>\
<div class="jsxc_avatar">☺</div>\
<div class="jsxc_options">\
<div class="jsxc_control"></div>\
<div class="jsxc_name"/>\
<div class="jsxc_options jsxc_right">\
<div class="jsxc_rename" title="%%rename_buddy%%">✎</div>\
<div class="jsxc_delete" title="%%delete_buddy%%">✘</div>\
</div>\
<div class="jsxc_name"/>\
<div class="jsxc_options jsxc_left">\
<div class="jsxc_chaticon" title="%%send_message%%"/>\
<div class="jsxc_vcardicon" title="%%get_info%%">i</div>\
</div>\
</li>',
loginBox: '<h3>%%Login%%</h3>\
<form method="get">\
@@ -2294,13 +2544,15 @@ var jsxc;
</form>',
contactDialog: '<h3>%%Add_buddy%%</h3>\
<p class=".jsxc_explanation">%%Type_in_the_full_username_%%</p>\
<form>\
<p><label for="jsxc_username">* %%Username%%:</label>\
<input type="text" name="username" id="jsxc_username" required="required" /></p>\
<input type="email" name="username" id="jsxc_username" required="required" /></p>\
<p><label for="jsxc_alias">%%Alias%%:</label>\
<input type="text" name="alias" id="jsxc_alias" /></p>\
<p class="jsxc_right">\
<a href="#" class="button jsxc_close">%%Close%%</a> <a href="#" class="button creation">%%Add%%</a>\
</p>',
<input class="button" type="submit" value="%%Add%%" />\
</p>\
<form>',
approveDialog: '<h3>%%Subscription_request%%</h3>\
<p>%%You_have_a_request_from%% <b class="jsxc_their_jid"></b>.</p>\
<p class="jsxc_right"><a href="#" class="button jsxc_deny">%%Deny%%</a> <a href="#" class="button creation jsxc_approve">%%Approve%%</a></p>',
@@ -2335,7 +2587,23 @@ var jsxc;
<br />\
<b>Credential: </b> <a href="http://www.beepzoid.com/old-phones/" target="_blank">David English (Ringtone)</a>,\
<a href="https://soundcloud.com/freefilmandgamemusic/ping-1?in=freefilmandgamemusic/sets/free-notification-sounds-and" target="_blank">CameronMusic (Ping)</a></p>\
<p class="jsxc_right"><a class="button jsxc_debuglog" href="#">Show debug log</a></p>'
<p class="jsxc_right"><a class="button jsxc_debuglog" href="#">Show debug log</a></p>',
vCard: '<h3>vCard %%from%% {{cid_name}}</h3>\
<ul class="jsxc_vCard"></ul>\
<p><img src="{{root}}/img/loading.gif" alt="wait" width="32px" height="32px" /> %%Please_wait%%...</p>',
settings: '<h3>%%User_settings%%</h3>\
<p></p>\
<form>\
<fieldset class="jsxc_fieldsetPriority">\
<legend>%%Priority%%</legend>\
<label for="priority-online">%%Online%%</label><input type="number" value="0" id="priority-online" min="-128" max="127" step="1" required="required"/>\
<label for="priority-chat">%%Chatty%%</label><input type="number" value="0" id="priority-chat" min="-128" max="127" step="1" required="required"/>\
<label for="priority-away">%%Away%%</label><input type="number" value="0" id="priority-away" min="-128" max="127" step="1" required="required"/>\
<label for="priority-xa">%%Extended_away%%</label><input type="number" value="0" id="priority-xa" min="-128" max="127" step="1" required="required"/>\
<label for="priority-dnd">%%dnd%%</label><input type="number" value="0" id="priority-dnd" min="-128" max="127" step="1" required="required"/>\
<input type="submit" value="%%Save%%"/>\
</fieldset>\
</form>'
};
/**
@@ -2518,6 +2786,8 @@ var jsxc;
// pres first after roster is ready
$(document).one('cloaded.roster.jsxc', jsxc.xmpp.sendPres);
$('#jsxc_roster > p:first').remove();
var iq = $iq({
type: 'get'
}).c('query', {
@@ -2567,8 +2837,8 @@ var jsxc;
pres.c('show').t(presState).up();
}
var priority = jsxc.storage.getUserItem('priority');
if (priority !== null) {
var priority = jsxc.options.get('priority');
if (priority && typeof priority[presState] !== 'undefined' && parseInt(priority[presState]) !== 0) {
pres.c('priority').t(priority[presState]).up();
}
@@ -2671,6 +2941,10 @@ var jsxc;
jsxc.gui.roster.add(cid);
});
if(buddies.length === 0) {
jsxc.gui.roster.empty();
}
jsxc.storage.setUserItem('buddylist', buddies);
jsxc.debug('Roster loaded');
@@ -2744,6 +3018,12 @@ var jsxc;
}
}
});
if (!jsxc.storage.getUserItem('buddylist') || jsxc.storage.getUserItem('buddylist').length === 0) {
jsxc.gui.roster.empty();
} else {
$('#jsxc_roster > p:first').remove();
}
// preserve handler
return true;
@@ -3591,7 +3871,7 @@ var jsxc;
data.fingerprint = jsxc.buddyList[cid].their_priv_pk.fingerprint();
data.msgstate = OTR.CONST.MSGSTATE_ENCRYPTED;
var msg = (jsxc.buddyList[cid].trust ? jsxc.l.Verified : jsxc.l.Unverified) + ' ' + jsxc.l.private_conversation_started + data.jid;
var msg = (jsxc.buddyList[cid].trust ? jsxc.l.Verified : jsxc.l.Unverified) + ' ' + jsxc.l.private_conversation_started;
jsxc.gui.window.postMessage(cid, 'sys', msg);
break;
case OTR.CONST.STATUS_END_OTR:
@@ -3844,7 +4124,7 @@ var jsxc;
// try to create web-worker
try {
worker = new Worker(jsxc.options.root + '/js/jsxc/lib/otr/build/dsa-webworker.js');
worker = new Worker(jsxc.options.root + '/lib/otr/build/dsa-webworker.js');
} catch (err) {
jsxc.warn('Couldn\'t create web-worker.', err);
}
@@ -3870,7 +4150,7 @@ var jsxc;
// start worker
worker.postMessage({
imports: [ jsxc.options.root + '/js/jsxc/lib/otr/vendor/salsa20.js', jsxc.options.root + '/js/jsxc/lib/otr/vendor/bigint.js', jsxc.options.root + '/js/jsxc/lib/otr/vendor/crypto.js', jsxc.options.root + '/js/jsxc/lib/otr/vendor/eventemitter.js', jsxc.options.root + '/js/jsxc/lib/otr/lib/const.js', jsxc.options.root + '/js/jsxc/lib/otr/lib/helpers.js', jsxc.options.root + '/js/jsxc/lib/otr/lib/dsa.js' ],
imports: [ jsxc.options.root + '/lib/otr/vendor/salsa20.js', jsxc.options.root + '/lib/otr/vendor/bigint.js', jsxc.options.root + '/lib/otr/vendor/crypto.js', jsxc.options.root + '/lib/otr/vendor/eventemitter.js', jsxc.options.root + '/lib/otr/lib/const.js', jsxc.options.root + '/lib/otr/lib/helpers.js', jsxc.options.root + '/lib/otr/lib/dsa.js' ],
seed: BigInt.getSeed(),
debug: true
});
@@ -4302,7 +4582,7 @@ var jsxc;
trying_to_start_private_conversation: 'Trying to start private conversation!',
Verified: 'Verified',
Unverified: 'Unverified',
private_conversation_started: 'private conversation started with ',
private_conversation_started: 'private conversation started.',
private_conversation_aborted: 'Private conversation aborted!',
your_buddy_closed_the_private_conversation_you_should_do_the_same: 'Your buddy closed the private conversation! You should do the same.',
conversation_is_now_verified: 'Conversation is now verified.',
@@ -4356,6 +4636,9 @@ var jsxc;
New_message_from: 'New message from',
Should_we_notify_you_: 'Should we notify you about new messages in the future?',
Please_accept_: 'Please click the "Allow" button at the top.',
Hide_offline: 'Hide offline',
Show_offline: 'Show offline',
About: 'About',
dnd: 'Do Not Disturb',
Mute: 'Mute',
Unmute: 'Unmute',
@@ -4380,7 +4663,42 @@ var jsxc;
Confirm: 'Confirm',
Dismiss: 'Dismiss',
Remove: 'Remove',
Online_help: 'Online help'
Online_help: 'Online help',
FN: 'Full Name',
N: ' ',
FAMILY: 'Family Name',
GIVEN: 'Given Name',
NICKNAME: 'Nickname',
URL: 'URL',
ADR: 'Address',
STREET: 'Street Address',
EXTADD: 'Extended Address',
LOCALITY: 'Locality',
REGION: 'Region',
PCODE: 'Postal Code',
CTRY: 'Country',
TEL: 'Telephone',
NUMBER: 'Number',
EMAIL: 'Email',
USERID: ' ',
ORG: 'Organization',
ORGNAME: 'Name',
ORGUNIT: 'Unit',
TITLE: 'Job Title',
ROLE: 'Role',
BDAY: 'Birthday',
DESC: 'Description',
PHOTO: ' ',
send_message: 'send message',
get_info: 'get info',
Settings: 'Settings',
Priority: 'Priority',
Save: 'Save',
User_settings: 'User settings',
A_fingerprint_: 'A fingerprint is used to make sure that the person you are talking to is who he or she is saying.',
Your_roster_is_empty_add_a: 'Your roster is empty, add a ',
new_buddy: 'new buddy',
is: 'is'
},
de: {
please_wait_until_we_logged_you_in: 'Bitte warte bis wir dich eingeloggt haben.',
@@ -4401,7 +4719,7 @@ var jsxc;
trying_to_start_private_conversation: 'Versuche private Konversation zu starten.',
Verified: 'Verifiziert',
Unverified: 'Unverifiziert',
private_conversation_started: 'Private Konversation gestartet mit ',
private_conversation_started: 'Private Konversation gestartet.',
private_conversation_aborted: 'Private Konversation abgebrochen.',
your_buddy_closed_the_private_conversation_you_should_do_the_same: 'Dein Freund hat die private Konversation beendet. Das solltest du auch tun!',
conversation_is_now_verified: 'Konversation ist jetzt verifiziert',
@@ -4483,7 +4801,174 @@ var jsxc;
Confirm: 'Bestätigen',
Dismiss: 'Ablehnen',
Remove: 'Löschen',
Online_help: 'Online Hilfe'
Online_help: 'Online Hilfe',
FN: 'Name',
N: ' ',
FAMILY: 'Familienname',
GIVEN: 'Vorname',
NICKNAME: 'Spitzname',
URL: 'URL',
ADR: 'Adresse',
STREET: 'Straße',
EXTADD: 'Zusätzliche Adresse',
LOCALITY: 'Ortschaft',
REGION: 'Region',
PCODE: 'Postleitzahl',
CTRY: 'Land',
TEL: 'Telefon',
NUMBER: 'Nummer',
EMAIL: 'E-Mail',
USERID: ' ',
ORG: 'Organisation',
ORGNAME: 'Name',
ORGUNIT: 'Abteilung',
TITLE: 'Titel',
ROLE: 'Rolle',
BDAY: 'Geburtstag',
DESC: 'Beschreibung',
PHOTO: ' ',
send_message: 'Sende Nachricht',
get_info: 'Benutzerinformationen',
Settings: 'Einstellungen',
Priority: 'Priorität',
Save: 'Speichern',
User_settings: 'Benutzereinstellungen',
A_fingerprint_: 'Ein Fingerabdruck wird dazu benutzt deinen Gesprächspartner zu identifizieren.',
is: 'ist'
},
es: {
please_wait_until_we_logged_you_in: 'Por favor, espere...',
your_connection_is_unencrypted: 'Su conexión no está cifrada.',
your_connection_is_encrypted: 'Su conexión está cifrada.',
your_buddy_closed_the_private_connection: 'Su amigo ha cerrado la conexión privada.',
start_private: 'Iniciar privado',
close_private: 'Cerrar privado',
your_buddy_is_verificated: 'Tu amigo está verificado.',
you_have_only_a_subscription_in_one_way: 'Sólo tienes una suscripción de un modo.',
verification_query_sent: 'Consulta de verificación enviada.',
your_message_wasnt_send_please_end_your_private_conversation: 'Su mensaje no fue enviado. Por favor, termine su conversación privada.',
unencrypted_message_received: 'Mensaje no cifrado recibido:',
your_message_wasnt_send_because_you_have_no_valid_subscription: 'Su mensaje no se ha enviado, porque usted no tiene suscripción válida.',
no_available: 'No disponible',
no_connection: 'Sin conexión!',
relogin: 'iniciar sesión nuevamente',
trying_to_start_private_conversation: 'Intentando iniciar una conversación privada!',
Verified: 'Verificado',
Unverified: 'No verificado',
private_conversation_started: 'se inició una conversación privada.',
private_conversation_aborted: 'Conversación privada abortada!',
your_buddy_closed_the_private_conversation_you_should_do_the_same: 'Su amigo cerró la conversación privada! Usted debería hacer lo mismo.',
conversation_is_now_verified: 'La conversación es ahora verificada.',
verification_fails: 'Fallo la verificación.',
your_buddy_is_attempting_to_determine_: 'Tu amigo está tratando de determinar si él o ella está realmente hablando con usted.',
to_authenticate_to_your_buddy: 'Para autenticar a su amigo, ',
enter_the_answer_and_click_answer: 'introduce la respuesta y haga clic en Contestar.',
enter_the_secret: 'especifique el secreto.',
now_we_will_create_your_private_key_: 'Ahora vamos a crear su clave privada. Esto puede tomar algún tiempo.',
Authenticating_a_buddy_helps_: 'Autenticación de un amigo ayuda a garantizar que la persona que está hablando es quien él o ella está diciendo.',
How_do_you_want_to_authenticate_your_buddy: '¿Cómo desea autenticar {{cid_name}} (<b>{{cid_jid}}</b>)?',
Select_method: 'Escoja un método...',
Manual: 'Manual',
Question: 'Pregunta',
Secret: 'Secreto',
To_verify_the_fingerprint_: 'Para verificar la firma digital, póngase en contacto con su amigo a través de algún otro canal autenticado, como el teléfono.',
Your_fingerprint: 'Tu firma digital',
Buddy_fingerprint: 'firma digital de tu amigo',
Close: 'Cerrar',
Compared: 'Comparado',
To_authenticate_using_a_question_: 'Para autenticar mediante una pregunta, elegir una pregunta cuya respuesta se conoce sólo usted y su amigo.',
Ask: 'Preguntar',
To_authenticate_pick_a_secret_: 'Para autenticar, elija un secreto conocido sólo por usted y su amigo.',
Compare: 'Comparar',
Fingerprints: 'Firmas digitales',
Authentifikation: 'Autenticación',
Message: 'Mensaje',
Add_buddy: 'Añadir amigo',
rename_buddy: 'renombrar amigo',
delete_buddy: 'eliminar amigo',
Login: 'Iniciar Sesión',
Username: 'Usuario',
Password: 'Contraseña',
Cancel: 'Cancelar',
Connect: 'Conectar',
Type_in_the_full_username_: 'Escriba el usuario completo y un alias opcional.',
Alias: 'Alias',
Add: 'Añadir',
Subscription_request: 'Solicitud de suscripción',
You_have_a_request_from: 'Tienes una petición de',
Deny: 'Rechazar',
Approve: 'Aprobar',
Remove_buddy: 'Eliminar amigo',
You_are_about_to_remove_: 'Vas a eliminar a {{cid_name}} (<b>{{cid_jid}}</b>) de tu lista de amigos. Todas las conversaciones relacionadas serán cerradas.',
Continue: 'Continuar',
Please_wait: 'Espere por favor',
Login_failed: 'Fallo el inicio de sesión',
Sorry_we_cant_authentikate_: 'Lo sentimos, no podemos autentificarlo en nuestro servidor de chat. ¿Tal vez la contraseña es incorrecta?',
Retry: 'Reintentar',
clear_history: 'Borrar el historial',
New_message_from: 'Nuevo mensaje de',
Should_we_notify_you_: '¿Debemos notificarle sobre nuevos mensajes en el futuro?',
Please_accept_: 'Por favor, haga clic en el botón "Permitir" en la parte superior.',
dnd: 'No Molestar',
Mute: 'Desactivar sonido',
Unmute: 'Activar sonido',
Subscription: 'Suscripción',
both: 'ambos',
Status: 'Estado',
online: 'en línea',
chat: 'chat',
away: 'ausente',
xa: 'mas ausente',
offline: 'desconectado',
none: 'nadie',
Unknown_instance_tag: 'Etiqueta de instancia desconocida.',
Not_of_our_latest_keys: 'No de nuestra ultima tecla.',
Received_an_unreadable_encrypted_message: 'Se recibió un mensaje cifrado ilegible.',
Online: 'En linea',
Chatty: 'Hablador',
Away: 'Ausente',
Extended_away: 'Mas ausente',
Offline: 'Desconectado',
Friendship_request: 'Solicitud de amistad',
Confirm: 'Confirmar',
Dismiss: 'Rechazar',
Remove: 'Eliminar',
Online_help: 'Ayuda en línea',
FN: 'Nombre completo ',
N: ' ',
FAMILY: 'Apellido',
GIVEN: 'Nombre',
NICKNAME: 'Apodar',
URL: 'URL',
ADR: 'Dirección',
STREET: 'Calle',
EXTADD: 'Extendido dirección',
LOCALITY: 'Población',
REGION: 'Región',
PCODE: 'Código postal',
CTRY: 'País',
TEL: 'Teléfono',
NUMBER: 'Número',
EMAIL: 'Emilio',
USERID: ' ',
ORG: 'Organización',
ORGNAME: 'Nombre',
ORGUNIT: 'Departamento',
TITLE: 'Título',
ROLE: 'Rol',
BDAY: 'Cumpleaños',
DESC: 'Descripción',
PHOTO: ' ',
send_message: 'mandar un texto',
get_info: 'obtener información',
Settings: 'Ajustes',
Priority: 'Prioridad',
Save: 'Guardar',
User_settings: 'Configuración de usuario',
A_fingerprint_: 'La huella digital se utiliza para que puedas estar seguro que la persona con la que estas hablando es quien realmente dice ser',
Your_roster_is_empty_add_a: 'Tu lista de amigos esta vacia',
new_buddy: 'Nuevo amigo',
is: 'es'
}
};
}(jQuery));
+67 -23
Ver Arquivo
@@ -160,6 +160,32 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
});
},
/**
* Add "video" button to roster
*
* @private
* @memberOf jsxc.webrtc
* @param event
* @param cid cid of roster item
* @param data data wich belongs to cid
* @param el the roster item
*/
onAddRosterItem: function(event, cid, data, el) {
var self = jsxc.webrtc;
var videoIcon = $('<div class="jsxc_video jsxc_disabled" title="' + jsxc.l.Start_video_call + '"></div>');
console.log(data);
videoIcon.click(function() {
self.startCall(data.jid);
return false;
});
el.find('.jsxc_options.jsxc_left').append(videoIcon);
el.on('extra.jsxc', function() {
self.updateIcon(cid);
});
},
/**
* Add "video" button to window menu.
*
@@ -181,27 +207,26 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
var div = $('<div>').addClass('jsxc_video');
win.find('.jsxc_transfer:eq(1)').after(div);
self.updateWindow(win);
self.updateIcon(jsxc.jidToCid(win.data('jid')));
},
/**
* Enable or disable "video" button and assign full jid.
* Enable or disable "video" icon and assign full jid.
*
* @memberOf jsxc.webrtc
* @param win jQuery window object
* @param cid CSS conform jid
*/
updateWindow: function(win) {
if (!win || win.length === 0) {
return;
}
updateIcon: function(cid) {
var self = jsxc.webrtc;
var jid = win.data('jid');
var li = win.find('.jsxc_video');
var win = jsxc.gui.getWindow(cid);
var jid = win.data('jid') || jsxc.storage.getUserItem('buddy_' + cid).jid;
var el = win.find('.jsxc_video').add('#' + cid + ' .jsxc_video');
// only start video call to a full jid
if (Strophe.getResourceFromJid(jid) === null) {
var cid = jsxc.jidToCid(jid);
var res = jsxc.storage.getUserItem('buddy_' + cid).res;
if (Array.isArray(res) && res.length === 1) {
@@ -209,19 +234,19 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
}
}
li.off('click');
el.off('click');
if (self.conn.caps.hasFeatureByJid(jid, self.reqVideoFeatures)) {
li.click(function() {
el.click(function() {
self.startCall(jid);
});
li.removeClass('jsxc_disabled');
el.removeClass('jsxc_disabled');
li.attr('title', jsxc.translate('%%Start video call%%'));
el.attr('title', jsxc.translate('%%Start video call%%'));
} else {
li.addClass('jsxc_disabled');
el.addClass('jsxc_disabled');
li.attr('title', jsxc.translate('%%Video call not possible.%%'));
el.attr('title', jsxc.translate('%%Video call not possible.%%'));
}
},
@@ -238,7 +263,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
var bJid = Strophe.getBareJidFromJid(from);
if (self.chatJids[bJid] !== from) {
self.updateWindow(jsxc.gui.getWindow(jsxc.jidToCid(bJid)));
self.updateIcon(jsxc.jidToCid(bJid));
self.chatJids[bJid] = from;
}
},
@@ -300,11 +325,8 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
*/
onCaps: function(event, jid) {
var self = jsxc.webrtc;
var win = jsxc.gui.getWindow(jsxc.jidToCid(jid));
if (win.length > 0) {
self.updateWindow(win);
}
self.updateIcon(jsxc.jidToCid(jid));
},
/**
@@ -787,13 +809,14 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
if (RTC !== null) {
RTCPeerconnection = RTC.peerconnection;
$(document).on('add.roster.jsxc', jsxc.webrtc.onAddRosterItem);
$(document).on('init.window.jsxc', jsxc.webrtc.initWindow);
$(document).on('attached.jsxc', jsxc.webrtc.init);
}
});
$.extend(jsxc.l10n.en, {
Please_allow_access_to_microphone_and_camera: 'Please allow access to microphone and camera.',
Please_allow_access_to_microphone_and_camera: 'Please click the "Allow" button at the top, to allow access to microphone and camera.',
Incoming_call: 'Incoming call',
from: 'from',
Do_you_want_to_accept_the_call_from: 'Do you want to accept the call from',
@@ -814,7 +837,7 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
});
$.extend(jsxc.l10n.de, {
Please_allow_access_to_microphone_and_camera: 'Bitte erlaube den Zugriff auf Kamera und Mikrofon.',
Please_allow_access_to_microphone_and_camera: 'Bitte klick auf den "Zulassen" Button oben, um den Zugriff auf Kamera und Mikrofon zu erlauben.',
Incoming_call: 'Eingehender Anruf',
from: 'von',
Do_you_want_to_accept_the_call_from: 'Möchtest Du den Anruf annehmen von',
@@ -833,4 +856,25 @@ jsxc.gui.template.videoWindow = '<div class="jsxc_webrtc">\
Video_call_not_possible: 'Videoanruf nicht verfügbar',
Start_video_call: 'Starte Videoanruf'
});
$.extend(jsxc.l10n.es, {
Please_allow_access_to_microphone_and_camera: 'Por favor, permitir el acceso al micrófono y la cámara.',
Incoming_call: 'Llamada entrante',
from: 'de',
Do_you_want_to_accept_the_call_from: 'Desea aceptar la llamada de',
Reject: 'Rechazar',
Accept: 'Aceptar',
hang_up: 'colgar',
snapshot: 'instantánea',
mute_my_audio: 'silenciar mi audio',
pause_my_video: 'pausar mi vídeo',
fullscreen: 'pantalla completa',
Info: 'Info',
Local_IP: 'IP local',
Remote_IP: 'IP remota',
Local_Fingerprint: 'Firma digital local',
Remote_Fingerprint: 'Firma digital remota',
Video_call_not_possible: 'Llamada de vídeo no es posible',
Start_video_call: 'Iniciar llamada de vídeo'
});
}(jQuery));
+13 -10
Ver Arquivo
@@ -115,17 +115,17 @@ div:fullscreen.jsxc_localvideo {
.jsxc_chatarea {
position: relative;
height: 255px;
height: 270px;
display: none;
background-color: #A4A4A4;
}
.jsxc_chatarea ul {
.jsxc_chatarea > ul {
position: absolute;
left: 50%;
top: 0px;
width: 200px;
height: 255px;
width: 250px;
height: 270px;
list-style: none;
padding: 0px;
margin: 0px 0px 0px -100px;
@@ -153,18 +153,21 @@ div:fullscreen.jsxc_localvideo {
}
div.jsxc_video {
padding: 3px;
width: 17px;
height: 17px;
background-image: url('img/camera_icon_grey.svg');
background-repeat: no-repeat;
background-position: center center;
background-size: 15px 15px;
cursor: pointer;
float: left;
}
div.jsxc_video:not(.jsxc_disabled):hover, #jsxc_buddylist .jsxc_options .jsxc_video {
background-image: url('img/camera_icon_white.svg');
}
div.jsxc_video.jsxc_disabled {
opacity: 0.5;
cursor: default;
cursor: default !important;
}
#jsxc_buddylist .jsxc_options .jsxc_video.jsxc_disabled {
opacity: 0.2;
}
+1 -1
Ver Arquivo
@@ -1,6 +1,6 @@
{
"name": "jsxc",
"version": "0.7.2",
"version": "0.8.0",
"description": "Real-time chat app",
"homepage": "http://www.jsxc.org/",
"bugs": "https://github.com/sualko/jsxc/issues",
BIN
Ver Arquivo
Arquivo binário não exibido.
Arquivo binário não exibido.
+11
Ver Arquivo
@@ -0,0 +1,11 @@
Rotary-Phone6.mp3
===
Creator: David English
Source: http://www.beepzoid.com/old-phones/
License: unknown
Ping1.mp3
===
Creator: CameronMusic
Source: https://soundcloud.com/freefilmandgamemusic/ping-1?in=freefilmandgamemusic/sets/free-notification-sounds-and
License: cc 3.0, http://creativecommons.org/licenses/by/3.0/
Arquivo binário não exibido.