diff --git a/django/contrib/admin/static/admin/css/widgets.css b/django/contrib/admin/static/admin/css/widgets.css
index 4f4ea0a..7447248 100644
a
|
b
|
|
17 | 17 | margin-bottom: 5px; |
18 | 18 | } |
19 | 19 | |
| 20 | .selector-chosen select { |
| 21 | border-top: none; |
| 22 | } |
| 23 | |
20 | 24 | .selector-available h2, .selector-chosen h2 { |
21 | 25 | border: 1px solid #ccc; |
22 | 26 | } |
… |
… |
|
37 | 41 | text-align: left; |
38 | 42 | } |
39 | 43 | |
40 | | .selector .selector-chosen .selector-filter { |
41 | | padding: 4px 5px; |
| 44 | .selector .selector-filter label { |
| 45 | width: 16px; |
| 46 | padding: 2px; |
42 | 47 | } |
43 | 48 | |
44 | 49 | .selector .selector-available input { |
… |
… |
|
50 | 55 | width: 22px; |
51 | 56 | height: 50px; |
52 | 57 | background: url(../img/chooser-bg.gif) top center no-repeat; |
53 | | margin: 8em 3px 0 3px; |
| 58 | margin: 10em 5px 0 5px; |
54 | 59 | padding: 0; |
55 | 60 | } |
56 | 61 | |
… |
… |
|
61 | 66 | } |
62 | 67 | |
63 | 68 | .selector select { |
64 | | margin-bottom: 5px; |
| 69 | margin-bottom: 10px; |
65 | 70 | margin-top: 0; |
66 | 71 | } |
67 | 72 | |
… |
… |
|
74 | 79 | } |
75 | 80 | |
76 | 81 | .selector-add { |
77 | | background: url(../img/selector-add.gif) top center no-repeat; |
| 82 | background: url(../img/selector-icons.gif) 0 -161px no-repeat; |
| 83 | cursor: default; |
78 | 84 | margin-bottom: 2px; |
79 | 85 | } |
80 | 86 | |
| 87 | .selector-add.active { |
| 88 | background: url(../img/selector-icons.gif) 0 -187px no-repeat; |
| 89 | cursor: pointer; |
| 90 | } |
| 91 | |
81 | 92 | .selector-remove { |
82 | | background: url(../img/selector-remove.gif) top center no-repeat; |
| 93 | background: url(../img/selector-icons.gif) 0 -109px no-repeat; |
| 94 | cursor: default; |
| 95 | } |
| 96 | |
| 97 | .selector-remove.active { |
| 98 | background: url(../img/selector-icons.gif) 0 -135px no-repeat; |
| 99 | cursor: pointer; |
83 | 100 | } |
84 | 101 | |
85 | 102 | a.selector-chooseall, a.selector-clearall { |
86 | | display: block; |
87 | | width: 6em; |
| 103 | display: inline-block; |
88 | 104 | text-align: left; |
89 | 105 | margin-left: auto; |
90 | 106 | margin-right: auto; |
91 | 107 | font-weight: bold; |
92 | 108 | color: #666; |
| 109 | } |
| 110 | |
| 111 | a.selector-chooseall { |
| 112 | padding: 3px 18px 3px 0; |
| 113 | } |
| 114 | |
| 115 | a.selector-clearall { |
93 | 116 | padding: 3px 0 3px 18px; |
94 | 117 | } |
95 | 118 | |
96 | | a.selector-chooseall:hover, a.selector-clearall:hover { |
| 119 | a.selector-chooseall.active:hover, a.selector-clearall.active:hover { |
97 | 120 | color: #036; |
98 | 121 | } |
99 | 122 | |
100 | 123 | a.selector-chooseall { |
101 | | width: 7em; |
102 | | background: url(../img/selector-addall.gif) left center no-repeat; |
| 124 | background: url(../img/selector-icons.gif) right -263px no-repeat; |
| 125 | cursor: default; |
| 126 | } |
| 127 | |
| 128 | a.selector-chooseall.active { |
| 129 | background: url(../img/selector-icons.gif) right -289px no-repeat; |
| 130 | cursor: pointer; |
103 | 131 | } |
104 | 132 | |
105 | 133 | a.selector-clearall { |
106 | | background: url(../img/selector-removeall.gif) left center no-repeat; |
| 134 | background: url(../img/selector-icons.gif) left -211px no-repeat; |
| 135 | cursor: default; |
107 | 136 | } |
108 | 137 | |
| 138 | a.selector-clearall.active { |
| 139 | background: url(../img/selector-icons.gif) left -237px no-repeat; |
| 140 | cursor: pointer; |
| 141 | } |
109 | 142 | |
110 | 143 | /* STACKED SELECTORS */ |
111 | 144 | |
… |
… |
a.selector-clearall {
|
148 | 181 | } |
149 | 182 | |
150 | 183 | .stacked .selector-add { |
151 | | background-image: url(../img/selector_stacked-add.gif); |
| 184 | background: url(../img/selector-icons.gif) 0 -57px no-repeat; |
| 185 | cursor: default; |
| 186 | } |
| 187 | |
| 188 | .stacked .selector-add.active { |
| 189 | background: url(../img/selector-icons.gif) 0 -83px no-repeat; |
| 190 | cursor: pointer; |
152 | 191 | } |
153 | 192 | |
154 | 193 | .stacked .selector-remove { |
155 | | background-image: url(../img/selector_stacked-remove.gif); |
| 194 | background: url(../img/selector-icons.gif) 0 -5px no-repeat; |
| 195 | cursor: default; |
156 | 196 | } |
157 | 197 | |
| 198 | .stacked .selector-remove.active { |
| 199 | background: url(../img/selector-icons.gif) 0 -31px no-repeat; |
| 200 | cursor: pointer; |
| 201 | } |
158 | 202 | |
159 | 203 | /* DATE AND TIME */ |
160 | 204 | |
diff --git a/django/contrib/admin/static/admin/img/selector-add.gif b/django/contrib/admin/static/admin/img/selector-add.gif
deleted file mode 100644
index 50132d1c439494a0a19e1d280385f03d3ac5599b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 606
zcmZ?wbhEHb6krfwcoxafw(@M}n)ChZFW!3c{`tGF)3#h)y!U$bf@7^KPS-6uzUAco
zS0BDVc=>6^`De|`PR`nSy<y48zyJQd`}||`iF+NZ&i1W6H+j>g_g{XjI&`ak@yUG`
zo;EK(J#+ijhQ%lP*I%ezbo}9~&(pSE*?IQS;=MN)@4Gd3=e3%J$D5X(nz`fp(*3u$
zoqaNI*R}d3CpVpX{Q29jre&vU7apIr<J!lsKewH_U$^+g#EqBw)?Il0;oG*ePnYb!
z-Lm4$p)1etJp0(S=G=@OK%<WJZ@Ad7<ka-7SK3#edGqP}{5>~bzW=sp-|cz3uWvc?
zWa{QC$8Wq`dhpJqjhE{epV)Z(?&i~vr*FGDch`+I#~w`He7Swq*`){W^sT@6^~dl3
z|Nk@49Vq@}VPs&4WY7WG42ly5_T3GUO_4kje3Fi`Y|PEgg2Ei`p1iykJ|h0&z5Zgl
z0rM9G$k+=tamfX*T&cAxSkXVyMZhv_>sB}KZDAbD#%4hW4zfg89~5H~^<`z%<UXet
z5g~Qji=C6{hVsSR7nN=pa56sfxO3a}k(#I#1A`OGd!vi0Zy4CQ^h1CCQi#z0CC!#s
zv%_hF0>2RJ`V9$77#OFv^CvqjY0A7XSuxNk>&%VE4w{br3Jf1VK49#UQa3Uc3OT{Z
NtIjEA%EiK94FJ;24lMux
diff --git a/django/contrib/admin/static/admin/img/selector-addall.gif b/django/contrib/admin/static/admin/img/selector-addall.gif
deleted file mode 100644
index d6e7c639bb2ec270122861f054289845281fae26..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 358
zcmZ?wbhEHb6krfwxN64GwdVYqV-FVYy|wM^)3z0-CvU#|?Z@x7m1n1IyE0+p#RUf*
z*DpEQwCq&t%5&3q-kG-LYR}pWx1PLjUwNi;)tTmHr>AYX(!J*V^leu=SD$TPd3wsG
zD~tDD-+uc3vi-Mqo_}`i`pffoUcPz%`N)+gC$B$Wu={53y7Nb`JiYSZ&E<QqzJ2?C
z>gJ2jU%oBgck}JXFNZEY-hSr6{b%p@TzI-@&-ELR-)%g8_xtzn|NsAIzzr0CvM@3*
zm@(*plz{xiz}D<AyTC(7s^23z#dv0pk_YqJhXEQgyt58^?B=nX*Z9Lp`<y}Jft8}(
z>;}e*)+h-yWNC)(RZ<o*;pbO2Z81=hVyP1o5KwC|Rg@L$bT$%UXV+`dP-PdXbvEW^
uU{KPQS;D|w=wc$os;|SkSt!*th=-GdgOex9!`Mht(rAt6@e{6&4AuaOP^lOI
diff --git a/django/contrib/admin/static/admin/img/selector-icons.gif b/django/contrib/admin/static/admin/img/selector-icons.gif
new file mode 100644
index 0000000000000000000000000000000000000000..8809c4fb9acea53623b8e3b8251b72a245aa17e8
GIT binary patch
literal 2771
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
Zpam_8(T+!#coX3W$0kPo=cNV&06TG~#AN^g
literal 0
HcmV?d00001
diff --git a/django/contrib/admin/static/admin/img/selector-remove.gif b/django/contrib/admin/static/admin/img/selector-remove.gif
deleted file mode 100644
index 2b9b0a2ac35a2051834bb9a49a7d57aaeebdcb48..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 398
zcmV;90df9ENk%w1VGsZi0M$MK!NI}2yu9=C^R%?Iv9Ynv*4?eOy|A&e#l^+DySw1v
z;PCM9vb)91%*?sDx%~b8tgyARva;st@73Jn!^6YAzP`)L%gV~i`T6;>yTq=rvah$l
z-QC^j?C`?E!rI!}-rnBp>+8?Y&$F|$v%JQ(wzkK|$N2d8?d|R4>Fx3H@xZ{qud%ZB
z_V&`!(&Fap*x1<3&CRj8!??J(+uPg8$;r;n&b76*)z#I=$jG<1x5UK6zrVlr`1}9=
z{{R30A^8LW002G!EC2ui01yBW000K7K%dYz*=R~SmZ2~lJ~9pwN1*_@60%NHMxlAX
zUK2qgWbklk^e2tm$$Y6>%tp5<1a<nXK&s^aIUGGIfPVl65Ig{jFg-md0+AO0D+C7t
zm^h9-7@Ikm5eGA)2%DXb2%`}Y12?V|jx7tbJgx)`13J1or6{|)HwG^wJjKNpA;!f6
sObiY?(9k*2J6J<92{qc=+7)9?88;pm4Gk7MI$2FZMH;OKOHDxlJ9N|8EC2ui
diff --git a/django/contrib/admin/static/admin/img/selector-removeall.gif b/django/contrib/admin/static/admin/img/selector-removeall.gif
deleted file mode 100644
index 5a4421926d9c352abcf3b114ccd296197b9c9fdf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 355
zcmZ?wbhEHb6krfwxT?c&_3G8rr%&(Szkl`W)oa$Q*|TTQ&6_u`UAuPg-o0hZmTlU!
z>Bx~ID^{#HdGh3{RjW2`-1y|llXdIX?cBNZ+_`frSFT*Tbm`{Jn=f9xc=ztz_wV0-
z|Ni~?^XIp2-MVq(#`*K-_wCzv>C&Zd-@aYHe*MaoE4y~>`t<43?%lh$ZQJ(v@#E#o
zmmfcV{Kt<U|NsAIAQve9WMO1r&;ddq0Qrf5t-)bhfrpM%zlYcohlL^vC#Gs$vXGGy
zyn1TIB!+!TEDnpb7O^#&ENJoK4{*8csqi2pOybu`7av;>Y3(LiF)@D4T0VKnCT(SA
zX1)$*HBn6#jwS_7P0<=>4NmpN;)-mGISX90xU|;Ev8_pU4PxOI7UpJ&^3YJ@;Za-V
LdE}_8BZD;nhnJNG
diff --git a/django/contrib/admin/static/admin/img/selector_stacked-add.gif b/django/contrib/admin/static/admin/img/selector_stacked-add.gif
deleted file mode 100644
index 74261696522de5819780082d9d92d75f8ffdb4fc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 612
zcmZ?wbhEHb6krfwcoxdgw({()C+`>Uz23RzeCvwSk6wMQUT~~#(eW)O@4x%}qhZO(
z=4B^W9lAAn)1{a1zimDJ=;PO)eQVFX`tbe1%TKd*UVs1P$KQYdUVr@FvFhyR6ZdwU
ze>P#`rA;RvPThQ^Vacg^yRJ>!dS%hR+gr{&*>?76|N09vw_ojAb8ha=YxRpy&e(CS
zX5q0dryguM`QY`3Zw-r2%-nIkdHLz4Wv6Nu9$&Km_M1=N`!`%%e(?6hjhE^cpICbE
zPW_UT?JLi0J9WQr-Gy6EKkPjFXz{*VlQv#%T6(H>;qm&#Ct6mV*>vi0?V{s*E<9;p
zb#~+NyGsw;*?ju(++8>N)?b{q<?7_km#1&Ly5`t}{`D8X{`md>|9^%71&Tje7#SEs
z8FWCd0L2Ld`@x3LrchxXZVfp-CdTGwF-aChB`GOoO9?O0UN2rZpZN=XRJAypI8=gG
zu3D|&6>7p|?7dlrpI>J4W)?;pTi^Y@;vpg82Yh*%1Red)_zN8tI_odX#vXkAI^SWw
z8`quLnIE#U3LF+-wUd@+HWGAYV9+`IIYj*f0~?2-=O67a@_!~B5V-KDV{)@!9S?KU
zg-$*<4i1Nz9ITzZT>%EXL7SAjj`z#?N@%FQnAjwxsS!|7=<Kn~t%*zbfa8+`i`*I+
G7_0%~kOZIr
diff --git a/django/contrib/admin/static/admin/img/selector_stacked-remove.gif b/django/contrib/admin/static/admin/img/selector_stacked-remove.gif
deleted file mode 100644
index 60412cee19c6b5d2ff5d1f86f765988ddddbb6dc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 401
zcmV;C0dD?BNk%w1VGsZi0M$GI!NI}K*4@0kyz%kzt+l<hw6w9YvAesw-QC^F%F434
z#o*xJu(7i4?(VO*zpk*dxw*O3+~dH&z_PNk=IZaVyTteR_rAWq=<M+M`T6|){msqI
z%*@QJu(j~;@Y2%K&(F`cwzlHt>*eL;*Vos_$H(O9?cUzr!^6YN%ge8^vckf`>gwvV
zyvDP$v)I_!vAV;~&d%H0+sMes)z#I>$;r33x4*x?xVX5rwY9{=#P#_5|Ns9000000
z00000A^8LW002AyEC2ui01yBW000KAK%S5naXdmc6(KMjYAO&AVzD@V4lqm;hLU-|
z-jabLRNQE28e){D>0mrlZWF7McDqHrjtjIdGl3s?cnE<r00bR3000|=gfEQ}1`GlM
z5-bfC85tH04LX+-3^=By19$_crV||nIk7n&cpkE`1_}i>yf&#j1HCpm1R^ds$Tu?y
v2{Xwz1xyMMI@Q+KSVJ%eHQnCb7h_HpIV%Yq94R_BSxrJk53meNO+f%VqdU!B
diff --git a/django/contrib/admin/static/admin/js/SelectFilter2.js b/django/contrib/admin/static/admin/js/SelectFilter2.js
index b7bc9d5..2eb67e8 100644
a
|
b
|
Different than SelectFilter because this is coupled to the admin framework.
|
5 | 5 | |
6 | 6 | Requires core.js, SelectBox.js and addevent.js. |
7 | 7 | */ |
8 | | |
| 8 | (function($) { |
9 | 9 | function findForm(node) { |
10 | 10 | // returns the node of the form containing the given node |
11 | 11 | if (node.tagName.toLowerCase() != 'form') { |
… |
… |
function findForm(node) {
|
14 | 14 | return node; |
15 | 15 | } |
16 | 16 | |
17 | | var SelectFilter = { |
| 17 | window.SelectFilter = { |
18 | 18 | init: function(field_id, field_name, is_stacked, admin_media_prefix) { |
19 | 19 | if (field_id.match(/__prefix__/)){ |
20 | 20 | // Don't intialize on empty forms. |
… |
… |
var SelectFilter = {
|
44 | 44 | // <div class="selector-available"> |
45 | 45 | var selector_available = quickElement('div', selector_div, ''); |
46 | 46 | selector_available.className = 'selector-available'; |
47 | | quickElement('h2', selector_available, interpolate(gettext('Available %s'), [field_name])); |
48 | | var filter_p = quickElement('p', selector_available, ''); |
| 47 | var title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name])); |
| 48 | quickElement('img', title_available, '', 'src', admin_media_prefix + 'img/icon-unknown.gif', 'width', '10', 'height', '10', 'class', 'help help-tooltip', 'title', interpolate(gettext('This is the list of available %s. You may add some by selecting them below and then clicking the "Add" button.'), [field_name])); |
| 49 | |
| 50 | var filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter'); |
49 | 51 | filter_p.className = 'selector-filter'; |
50 | 52 | |
51 | | var search_filter_label = quickElement('label', filter_p, '', 'for', field_id + "_input", 'style', 'width:16px;padding:2px'); |
| 53 | var search_filter_label = quickElement('label', filter_p, '', 'for', field_id + "_input"); |
52 | 54 | |
53 | | var search_selector_img = quickElement('img', search_filter_label, '', 'src', admin_media_prefix + 'img/selector-search.gif'); |
54 | | search_selector_img.alt = gettext("Filter"); |
| 55 | var search_selector_img = quickElement('img', search_filter_label, '', 'src', admin_media_prefix + 'img/selector-search.gif', 'class', 'help-tooltip', 'alt', '', 'title', interpolate(gettext("Type into the filter box to narrow down the list of available %s."), [field_name])); |
55 | 56 | |
56 | 57 | filter_p.appendChild(document.createTextNode(' ')); |
57 | 58 | |
58 | | var filter_input = quickElement('input', filter_p, '', 'type', 'text'); |
| 59 | var filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter")); |
59 | 60 | filter_input.id = field_id + '_input'; |
| 61 | |
60 | 62 | selector_available.appendChild(from_box); |
61 | | var choose_all = quickElement('a', selector_available, gettext('Choose all'), 'href', 'javascript: (function(){ SelectBox.move_all("' + field_id + '_from", "' + field_id + '_to"); })()'); |
| 63 | var choose_all = quickElement('a', selector_available, gettext('Add all'), 'href', 'javascript: (function(){ SelectBox.move_all("' + field_id + '_from", "' + field_id + '_to"); SelectFilter.refresh_icons("' + field_id + '");})()', 'id', field_id + '_add_all_link'); |
62 | 64 | choose_all.className = 'selector-chooseall'; |
63 | 65 | |
64 | 66 | // <ul class="selector-chooser"> |
65 | 67 | var selector_chooser = quickElement('ul', selector_div, ''); |
66 | 68 | selector_chooser.className = 'selector-chooser'; |
67 | | var add_link = quickElement('a', quickElement('li', selector_chooser, ''), gettext('Add'), 'href', 'javascript: (function(){ SelectBox.move("' + field_id + '_from","' + field_id + '_to");})()'); |
| 69 | var add_link = quickElement('a', quickElement('li', selector_chooser, ''), gettext('Add'), 'title', gettext('Add'), 'href', 'javascript: (function(){ SelectBox.move("' + field_id + '_from","' + field_id + '_to"); SelectFilter.refresh_icons("' + field_id + '");})()', 'id', field_id + '_add_link'); |
68 | 70 | add_link.className = 'selector-add'; |
69 | | var remove_link = quickElement('a', quickElement('li', selector_chooser, ''), gettext('Remove'), 'href', 'javascript: (function(){ SelectBox.move("' + field_id + '_to","' + field_id + '_from");})()'); |
| 71 | var remove_link = quickElement('a', quickElement('li', selector_chooser, ''), gettext('Remove'), 'title', gettext('Remove'), 'href', 'javascript: (function(){ SelectBox.move("' + field_id + '_to","' + field_id + '_from"); SelectFilter.refresh_icons("' + field_id + '");})()', 'id', field_id + '_remove_link'); |
70 | 72 | remove_link.className = 'selector-remove'; |
71 | 73 | |
72 | 74 | // <div class="selector-chosen"> |
73 | 75 | var selector_chosen = quickElement('div', selector_div, ''); |
74 | 76 | selector_chosen.className = 'selector-chosen'; |
75 | | quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s'), [field_name])); |
76 | | var selector_filter = quickElement('p', selector_chosen, gettext('Select your choice(s) and click ')); |
77 | | selector_filter.className = 'selector-filter'; |
78 | | quickElement('img', selector_filter, '', 'src', admin_media_prefix + (is_stacked ? 'img/selector_stacked-add.gif':'img/selector-add.gif'), 'alt', 'Add'); |
| 77 | var title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Added %s') + ' ', [field_name])); |
| 78 | quickElement('img', title_chosen, '', 'src', admin_media_prefix + 'img/icon-unknown.gif', 'width', '10', 'height', '10', 'class', 'help help-tooltip', 'title', interpolate(gettext('This is the list of added %s. You may remove some by selecting them below and then clicking the "Remove" button.'), [field_name])); |
| 79 | |
79 | 80 | var to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', 'multiple', 'size', from_box.size, 'name', from_box.getAttribute('name')); |
80 | 81 | to_box.className = 'filtered'; |
81 | | var clear_all = quickElement('a', selector_chosen, gettext('Clear all'), 'href', 'javascript: (function() { SelectBox.move_all("' + field_id + '_to", "' + field_id + '_from");})()'); |
| 82 | var clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'href', 'javascript: (function() { SelectBox.move_all("' + field_id + '_to", "' + field_id + '_from"); SelectFilter.refresh_icons("' + field_id + '");})()', 'id', field_id + '_remove_all_link'); |
82 | 83 | clear_all.className = 'selector-clearall'; |
83 | 84 | |
84 | 85 | from_box.setAttribute('name', from_box.getAttribute('name') + '_old'); |
… |
… |
var SelectFilter = {
|
86 | 87 | // Set up the JavaScript event handlers for the select box filter interface |
87 | 88 | addEvent(filter_input, 'keyup', function(e) { SelectFilter.filter_key_up(e, field_id); }); |
88 | 89 | addEvent(filter_input, 'keydown', function(e) { SelectFilter.filter_key_down(e, field_id); }); |
89 | | addEvent(from_box, 'dblclick', function() { SelectBox.move(field_id + '_from', field_id + '_to'); }); |
90 | | addEvent(to_box, 'dblclick', function() { SelectBox.move(field_id + '_to', field_id + '_from'); }); |
| 90 | addEvent(from_box, 'change', function(e) { SelectFilter.refresh_icons(field_id) }); |
| 91 | addEvent(to_box, 'change', function(e) { SelectFilter.refresh_icons(field_id) }); |
| 92 | addEvent(from_box, 'dblclick', function() { SelectBox.move(field_id + '_from', field_id + '_to'); SelectFilter.refresh_icons(field_id); }); |
| 93 | addEvent(to_box, 'dblclick', function() { SelectBox.move(field_id + '_to', field_id + '_from'); SelectFilter.refresh_icons(field_id); }); |
91 | 94 | addEvent(findForm(from_box), 'submit', function() { SelectBox.select_all(field_id + '_to'); }); |
92 | 95 | SelectBox.init(field_id + '_from'); |
93 | 96 | SelectBox.init(field_id + '_to'); |
94 | 97 | // Move selected from_box options to to_box |
95 | 98 | SelectBox.move(field_id + '_from', field_id + '_to'); |
| 99 | |
| 100 | if (!is_stacked) { |
| 101 | // In horizontal mode, give the same height to the two boxes. |
| 102 | $(to_box).height($(filter_p).outerHeight() + $(from_box).outerHeight()); |
| 103 | } |
| 104 | |
| 105 | // Initial icon refresh |
| 106 | SelectFilter.refresh_icons(field_id); |
| 107 | }, |
| 108 | refresh_icons: function(field_id) { |
| 109 | var from = $('#' + field_id + '_from'); |
| 110 | var to = $('#' + field_id + '_to'); |
| 111 | var is_from_selected = from.find('option:selected').length > 0; |
| 112 | var is_to_selected = to.find('option:selected').length > 0; |
| 113 | // Active if at least one item is selected |
| 114 | $('#' + field_id + '_add_link').toggleClass('active', is_from_selected); |
| 115 | $('#' + field_id + '_remove_link').toggleClass('active', is_to_selected); |
| 116 | // Active if the corresponding box isn't empty |
| 117 | $('#' + field_id + '_add_all_link').toggleClass('active', from.find('option').length > 0); |
| 118 | $('#' + field_id + '_remove_all_link').toggleClass('active', to.find('option').length > 0); |
96 | 119 | }, |
97 | 120 | filter_key_up: function(event, field_id) { |
98 | | from = document.getElementById(field_id + '_from'); |
| 121 | var from = document.getElementById(field_id + '_from'); |
99 | 122 | // don't submit form if user pressed Enter |
100 | 123 | if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) { |
101 | 124 | from.selectedIndex = 0; |
… |
… |
var SelectFilter = {
|
109 | 132 | return true; |
110 | 133 | }, |
111 | 134 | filter_key_down: function(event, field_id) { |
112 | | from = document.getElementById(field_id + '_from'); |
| 135 | var from = document.getElementById(field_id + '_from'); |
113 | 136 | // right arrow -- move across |
114 | 137 | if ((event.which && event.which == 39) || (event.keyCode && event.keyCode == 39)) { |
115 | 138 | var old_index = from.selectedIndex; |
… |
… |
var SelectFilter = {
|
128 | 151 | return true; |
129 | 152 | } |
130 | 153 | } |
| 154 | |
| 155 | })(django.jQuery); |
diff --git a/docs/releases/1.4.txt b/docs/releases/1.4.txt
index d676ff0..a73d1af 100644
a
|
b
|
In case your ``ADMIN_MEDIA_PREFIX`` is set to an own domain (e.g.
|
307 | 307 | that path. The files were moved from :file:`django/contrib/admin/media/` |
308 | 308 | to :file:`django/contrib/admin/static/admin/`. |
309 | 309 | |
| 310 | Removed admin images |
| 311 | ~~~~~~~~~~~~~~~~~~~~ |
| 312 | |
| 313 | As part of an effort to improve the performance and usability of the admin's |
| 314 | vertical and horizontal "filter" interfaces, some image files were removed and |
| 315 | grouped into a single sprite file (``selector-icons.gif``): |
| 316 | ``selector-add.gif``, ``selector-addall.gif``, ``selector-remove.gif``, |
| 317 | ``selector-removeall.gif``, ``selector_stacked-add.gif`` and |
| 318 | ``selector_stacked-remove.gif``. If you used those images to customize the |
| 319 | admin you will want to replace them with your own images. |
| 320 | |
310 | 321 | Compatibility with old signed data |
311 | 322 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
312 | 323 | |