File: Zend_ProgressBar_Adapter_JsPush.xml

package info (click to toggle)
zendframework 1.12.9%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 133,584 kB
  • sloc: xml: 1,311,829; php: 570,173; sh: 170; makefile: 125; sql: 121
file content (191 lines) | stat: -rw-r--r-- 6,489 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 21825 -->
<!-- Reviewed: no -->
<sect3 id="zend.progressbar.adapter.jspush">
    <title>Zend_ProgressBar_Adapter_JsPush</title>

    <para>
        <classname>Zend_ProgressBar_Adapter_JsPush</classname> to adapter pozwalający na
        aktualizację paska postępu w przeglądarce poprzez JavaScript Push. To oznacza, że
        nie jest potrzebne nowe połączenie na potrzeby przesyłu danych o postępie operacji.
        Proces pracujący po stronie serwera komunikuje się bezpośrednio z przeglądarką
        użytkownika.
    </para>

    <para>
        Opcje adaptera można ustawiać za pomocą metod <code>set*</code> albo przez podanie
        tablicy asocjacyjnej lub obiektu <classname>Zend_Config</classname> w pierwszym parametrze
        konstruktora. Dostępne opcje to:
    </para>

    <itemizedlist>
        <listitem>
            <para>
                <code>updateMethodName</code>: Metoda JavaScript, która zostanie wywołana
                przy każdej aktualizacji paska postępu. Domyślnie jest to
                <classname>Zend_ProgressBar_Update</classname>.
            </para>
        </listitem>

        <listitem>
            <para>
                <code>finishMethodName</code>: Metoda JavaScript, która zostanie wywołana
                po zakończeniu prowadzonej operacji. Domyślna wartość to
                <constant>NULL</constant>, co oznacza brak reakcji.
            </para>
        </listitem>
    </itemizedlist>

    <para>
        Użycie tego adaptera jest dość proste. Na początku należy utworzyć pasek postępu w
        przeglądarce za pomocą poleceń JavaScript lub <acronym>HTML</acronym>. Następnie należy
        zdefiniować metodę JavaScript wywoływaną przy aktualizacji oraz (opcjonalnie)
        po skończeniu działania. Obie powinny przyjmować pojedynczy argument - obiekt
        <acronym>JSON</acronym>. Aby otworzyć połączenie należy wywołać długo trwającą akcję
        w ukrytym obiekcie <code>iframe</code> lub <code>object</code>. Podczas wykonywania
        tego procesu przy każdej aktualizacji adapter będzie wywoływał odpowiednią metodę
        przekazując do niej obiekt <acronym>JSON</acronym> o następujących parametrach:
    </para>

    <itemizedlist>
        <listitem>
            <para>
                <code>current</code>: Obecna wartość absolutna
            </para>
        </listitem>

        <listitem>
            <para>
                <code>max</code>: Maksymalna wartość absolutna
            </para>
        </listitem>

        <listitem>
            <para>
                <code>percent</code>: Obliczony procent postępu
            </para>
        </listitem>

        <listitem>
            <para>
                <code>timeTaken</code>: Czas trwania procesu (do obecnej chwili)
            </para>
        </listitem>

        <listitem>
            <para>
                <code>timeRemaining</code>: Oszacowanie czasu pozostałego do końca
            </para>
        </listitem>

        <listitem>
            <para>
                <code>text</code>: Opcjonalna wiadomość dotycząca stanu postępu
            </para>
        </listitem>
    </itemizedlist>

    <example id="zend.progressbar-adapter.jspush.example">
        <title>Podstawowy przykład kodu po stronie klienta</title>

        <para>
            Ten przykład ilustruje prosty kod <acronym>HTML</acronym>, <acronym>CSS</acronym>
            oraz JavaScript do użytku z adapterem JsPush
        </para>

        <programlisting language="html"><![CDATA[
<div id="zend-progressbar-container">
    <div id="zend-progressbar-done"></div>
</div>

<iframe src="long-running-process.php" id="long-running-process"></iframe>
]]></programlisting>

        <programlisting language="css"><![CDATA[
#long-running-process {
    position: absolute;
    left: -100px;
    top: -100px;

    width: 1px;
    height: 1px;
}

#zend-progressbar-container {
    width: 100px;
    height: 30px;

    border: 1px solid #000000;
    background-color: #ffffff;
}

#zend-progressbar-done {
    width: 0;
    height: 30px;

    background-color: #000000;
}
]]></programlisting>

        <programlisting language="javascript"><![CDATA[
function Zend_ProgressBar_Update(data)
{
    document.getElementById('zend-progressbar-done').style.width = data.percent + '%';
}
]]></programlisting>

        <para>
            Powyższy kod tworzy prosty pojemnik z czarną granicą oraz blok wskazujący
            zaawansowanie procesu. Należy pamiętać by nie ukrywać elementów
            <code>iframe</code> lub <code>object</code> poprzez <code>display: none;</code>
            ponieważ w takiej sytuacji niektóre przeglądarki jak Safari 2 w ogóle nie pobiorą
            tych elementów.
        </para>

        <para>
            Zamiast własnoręcznie tworzyć pasek postępu, można skorzystać z jednej z wielu
            dostępnych bibliotek JavaScript, takich jak Dojo czy jQuery. Np.:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    Dojo: <ulink
                        url="http://dojotoolkit.org/book/dojo-book-0-9/part-2-dijit/user-assistance-and-feedback/progress-bar" />
                </para>
            </listitem>

            <listitem>
                <para>
                    jQuery: <ulink url="http://t.wits.sg/2008/06/20/jquery-progress-bar-11/" />
                </para>
            </listitem>

            <listitem>
                <para>
                    MooTools: <ulink url="http://davidwalsh.name/dw-content/progress-bar.php" />
                </para>
            </listitem>

            <listitem>
                <para>
                    Prototype: <ulink url="http://livepipe.net/control/progressbar" />
                </para>
            </listitem>
        </itemizedlist>
    </example>

    <note>
        <title>Odstęp czasowy pomiędzy aktualizacjami</title>

        <para>
            Należy upewnić się, że nie jest tworzona zbyt duża ilość aktualizacji. Każda z nich
            powinna przesyłać dane o wielkości co najmniej 1kB. Dla przeglądarki Safari jest to
            niezbędny warunek do wykonania polecenia wywołania funkcji. Internet Explorer ma
            podobne ograniczenie - w jego przypadku jest to 256 Bajtów.
        </para>
    </note>
</sect3>
<!--
vim:se ts=4 sw=4 et:
-->