1var plugin_ikso_konfirmo = jQuery.cookie('DW_PLUGIN_IKSO_NE_MONTRU_DENOVE');
2var plugin_ikso_dialogo_jam_aperis = false;
3
4jQuery(function() {
5    if (typeof plugin_ikso_konfirmo === "undefined") {
6        // kuketo mankas, enmetu <div>-on kun teksto por la modala dialogo fine de la paĝo
7        jQuery(
8              '<div id="plugin_ikso__modala_dialogo" title="Avizo" style="display:none;overflow-x:auto">'
9            + '<table style="margin:0 auto;border:0px !important">'
10            + '<tr>'
11            + '<td colspan="6" style="border:0px !important">En iu ajn tekstokampo vi povas tajpi laŭ la "X-kodo":</td>'
12            + '</tr>'
13            + '<tr>'
14            + '<td style="border:0px !important">cx&nbsp;&rarr;&nbsp;ĉ</td>'
15            + '<td style="border:0px !important">gx&nbsp;&rarr;&nbsp;ĝ</td>'
16            + '<td style="border:0px !important">hx&nbsp;&rarr;&nbsp;ĥ</td>'
17            + '<td style="border:0px !important">jx&nbsp;&rarr;&nbsp;ĵ</td>'
18            + '<td style="border:0px !important">sx&nbsp;&rarr;&nbsp;ŝ</td>'
19            + '<td style="border:0px !important">ux&nbsp;&rarr;&nbsp;ŭ</td>'
20            + '</tr>'
21            + '<tr>'
22            + '<td colspan="6" style="border:0px !important;padding-top:1.5em">Tajpu aldonan ikson por malĉapeligi literon:</td>'
23            + '</tr>'
24            + '<tr>'
25            + '<td style="border:0px !important">ĉx&nbsp;&rarr;&nbsp;cx</td>'
26            + '<td style="border:0px !important">ĝx&nbsp;&rarr;&nbsp;gx</td>'
27            + '<td style="border:0px !important">ĥx&nbsp;&rarr;&nbsp;hx</td>'
28            + '<td style="border:0px !important">ĵx&nbsp;&rarr;&nbsp;jx</td>'
29            + '<td style="border:0px !important">ŝx&nbsp;&rarr;&nbsp;sx</td>'
30            + '<td style="border:0px !important">ŭx&nbsp;&rarr;&nbsp;ux</td>'
31            + '</tr>'
32            + '</table>'
33            + '</div>'
34        ).appendTo('body');
35    }
36
37    // kaptu eventojn en ĉiuj tekstokampoj
38    jQuery('input[type="text"],textarea')
39        .not('#plugin__captcha_wrapper > input.edit') // krom kampoj por testo CAPTCHA
40        .each(function() {
41
42        // fokuso: montru la modalan dialogon se necese
43        jQuery(this).focus(function(event) {
44            if (typeof plugin_ikso_konfirmo === "undefined" && !plugin_ikso_dialogo_jam_aperis) {
45                plugin_ikso_dialogo_jam_aperis = true;
46                jQuery("#plugin_ikso__modala_dialogo").dialog({
47                    modal: true, resizable: false, width: 'auto', height: 'auto', closeText: 'Fermi',
48                    buttons: {
49
50                        // kreu kuketon por ne montri la modalan dialogon dum tuta jaro kaj fermu la dialogon
51                        "Mi komprenis, ne montru tion denove": function() {
52                            jQuery.cookie('DW_PLUGIN_IKSO_NE_MONTRU_DENOVE', true, {
53                                expires: 365,
54                                path:    (typeof DOKU_COOKIE_PARAM.path === "undefined"
55                                          ? JSINFO.DOKU_COOKIE_PARAM.path : DOKU_COOKIE_PARAM.path),
56                                secure:  (typeof DOKU_COOKIE_PARAM.secure === "undefined"
57                                          ? JSINFO.DOKU_COOKIE_PARAM.secure : DOKU_COOKIE_PARAM.secure)
58                            });
59                            jQuery(this).dialog("close");
60                        },
61
62                        // simple fermu la dialogon
63                        "Rememoru min poste": function() {
64                            jQuery(this).dialog("close");
65                        }
66                    },
67
68                    // lasu "Rememoru min poste" elektita post apero
69                    open: function() {
70                        jQuery(this).parent().find('.ui-dialog-buttonpane button:eq(1)').focus();
71                    }
72                });
73            }
74        });
75
76        // tajpado: ĉapeligu la kampon se la lasta signo estis ikso
77        jQuery(this).keyup(function(event) {
78            if (event.which == 88) { // x
79                Cxapelado_Cxapeligi(event.target);
80            } else if (event.which == 229) {
81                // http://stackoverflow.com/questions/26123177/android-chrome-keypress-event-is-not-returning-any-key-data-jquery
82                var currentCursorPos = jQuery(this)[0].selectionStart;
83                var val = jQuery(this).val();
84                var firstPrevious = val.charAt(currentCursorPos - 1);
85                if (firstPrevious == 'x' || firstPrevious == 'X') {
86                    Cxapelado_Cxapeligi(event.target);
87                }
88            }
89        });
90    });
91});
92
93// code below taken from WordPress plugin Cxapelado 0.3
94// suba kodo ĉerpita el WordPress-a kromaĵo Cxapelado 0.3
95// https://wordpress.org/plugins/cxapelado/
96
97function Cxapelado_Cxapeligi(kampo) {
98    if (kampo.selectionStart || kampo.selectionStart == "0") {
99        var ekPoz = kampo.selectionStart;
100        if (ekPoz > 1) {
101            var literox = kampo.value.substr(ekPoz-2,2);
102            var literou = Cxapelado_VereCxapeligi(literox);
103            kampo.value = kampo.value.substr(0,ekPoz-2) + literou + kampo.value.substr(ekPoz);
104            var celoPoz = ekPoz-(literox.length-literou.length);
105            Cxapelado_kreiElektajxon(kampo,celoPoz,celoPoz);
106        }
107    } else if (document.selection) {
108        var markilo = "\x7f"; // Retropaŝa signo - uzata nur ĉar apenaŭ estas risko, ke ĝi estas uzata intence de la uzanto
109        var markiloREG = new RegExp(markilo);
110        var rng = document.selection.createRange();
111        rng.text = markilo;
112        rng.select();
113        var loko = kampo.value.indexOf(markilo);
114        kampo.value = kampo.value.replace(markiloREG,'');
115        if (loko > 1) {
116            var komenco = kampo.value.substr(1,loko);
117            var l = 0;
118            var linioj;
119            if (linioj = komenco.match(/\n/g)) {
120                l = linioj.length;
121            }
122            var literox = kampo.value.substr(loko-2,2);
123            var literou = Cxapelado_VereCxapeligi(literox);
124            kampo.value = kampo.value.substr(0,loko-2) + literou + kampo.value.substr(loko);
125            var celoPoz = loko-l-(literox.length-literou.length);
126            Cxapelado_kreiElektajxon(kampo,celoPoz,celoPoz);
127        } else {
128            Cxapelado_kreiElektajxon(kampo,loko,loko);
129        }
130    }
131}
132
133var Cxapelado_literoj = new Object;
134Cxapelado_literoj.cxRX = /c[Xx]/g;
135Cxapelado_literoj.gxRX = /g[Xx]/g;
136Cxapelado_literoj.hxRX = /h[Xx]/g;
137Cxapelado_literoj.jxRX = /j[Xx]/g;
138Cxapelado_literoj.sxRX = /s[Xx]/g;
139Cxapelado_literoj.uxRX = /u[Xx]/g;
140Cxapelado_literoj.CxRX = /C[Xx]/g;
141Cxapelado_literoj.GxRX = /G[Xx]/g;
142Cxapelado_literoj.HxRX = /H[Xx]/g;
143Cxapelado_literoj.JxRX = /J[Xx]/g;
144Cxapelado_literoj.SxRX = /S[Xx]/g;
145Cxapelado_literoj.UxRX = /U[Xx]/g;
146Cxapelado_literoj.cxxRX = /ĉ([Xx])/g;
147Cxapelado_literoj.gxxRX = /ĝ([Xx])/g;
148Cxapelado_literoj.hxxRX = /ĥ([Xx])/g;
149Cxapelado_literoj.jxxRX = /ĵ([Xx])/g;
150Cxapelado_literoj.sxxRX = /ŝ([Xx])/g;
151Cxapelado_literoj.uxxRX = /ŭ([Xx])/g;
152Cxapelado_literoj.CxxRX = /Ĉ([Xx])/g;
153Cxapelado_literoj.GxxRX = /Ĝ([Xx])/g;
154Cxapelado_literoj.HxxRX = /Ĥ([Xx])/g;
155Cxapelado_literoj.JxxRX = /Ĵ([Xx])/g;
156Cxapelado_literoj.SxxRX = /Ŝ([Xx])/g;
157Cxapelado_literoj.UxxRX = /Ŭ([Xx])/g;
158function Cxapelado_VereCxapeligi(t) {
159    t = t.replace(Cxapelado_literoj.cxRX,"ĉ");
160    t = t.replace(Cxapelado_literoj.gxRX,"ĝ");
161    t = t.replace(Cxapelado_literoj.hxRX,"ĥ");
162    t = t.replace(Cxapelado_literoj.jxRX,"ĵ");
163    t = t.replace(Cxapelado_literoj.sxRX,"ŝ");
164    t = t.replace(Cxapelado_literoj.uxRX,"ŭ");
165    t = t.replace(Cxapelado_literoj.CxRX,"Ĉ");
166    t = t.replace(Cxapelado_literoj.GxRX,"Ĝ");
167    t = t.replace(Cxapelado_literoj.HxRX,"Ĥ");
168    t = t.replace(Cxapelado_literoj.JxRX,"Ĵ");
169    t = t.replace(Cxapelado_literoj.SxRX,"Ŝ");
170    t = t.replace(Cxapelado_literoj.UxRX,"Ŭ");
171    t = t.replace(Cxapelado_literoj.cxxRX,"c$1");
172    t = t.replace(Cxapelado_literoj.gxxRX,"g$1");
173    t = t.replace(Cxapelado_literoj.hxxRX,"h$1");
174    t = t.replace(Cxapelado_literoj.jxxRX,"j$1");
175    t = t.replace(Cxapelado_literoj.sxxRX,"s$1");
176    t = t.replace(Cxapelado_literoj.uxxRX,"u$1");
177    t = t.replace(Cxapelado_literoj.CxxRX,"C$1");
178    t = t.replace(Cxapelado_literoj.GxxRX,"G$1");
179    t = t.replace(Cxapelado_literoj.HxxRX,"H$1");
180    t = t.replace(Cxapelado_literoj.JxxRX,"J$1");
181    t = t.replace(Cxapelado_literoj.SxxRX,"S$1");
182    t = t.replace(Cxapelado_literoj.UxxRX,"U$1");
183    return t;
184}
185
186function Cxapelado_kreiElektajxon(input, selectionStart, selectionEnd) {
187    if (input && input.setSelectionRange) {
188        input.focus();
189        input.setSelectionRange(selectionStart, selectionEnd);
190    } else if (input && input.createTextRange) {
191        var range = input.createTextRange();
192        range.collapse(true);
193        range.moveEnd("character", selectionEnd);
194        range.moveStart("character", selectionStart);
195        range.select();
196    }
197}
198