Bugzilla – Attachment 13556 Details for
Bug 7882
Add ability to move and reorder fields and subfields in MARC editor
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Rebase for master -- DO NOT USE
Rebase-for-master.patch (text/plain), 23.22 KB, created by
Elliott Davis
on 2012-11-20 14:57:13 UTC
(
hide
)
Description:
Rebase for master -- DO NOT USE
Filename:
MIME Type:
Creator:
Elliott Davis
Created:
2012-11-20 14:57:13 UTC
Size:
23.22 KB
patch
obsolete
>From b1f14d33484093fba2e3b2908a0f1eb18e1be5d4 Mon Sep 17 00:00:00 2001 >From: Elliott Davis <elliott@bywatersolutions.com> >Date: Mon, 1 Oct 2012 23:39:29 -0500 >Subject: [PATCH] Rebase for master > >http://bugs.koha-community.org/show_bug.cgi?id=7882 > >http://bugs.koha-community.org/show_bug.cgi?id=7883 >--- > koha-tmpl/intranet-tmpl/prog/en/css/addbiblio.css | 6 +- > .../prog/en/modules/cataloguing/addbiblio.tt | 408 ++++++++++++++++++- > .../intranet-tmpl/prog/img/cursor_split_16.png | Bin 0 -> 3206 bytes > 3 files changed, 391 insertions(+), 23 deletions(-) > create mode 100644 koha-tmpl/intranet-tmpl/prog/img/cursor_split_16.png > >diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/addbiblio.css b/koha-tmpl/intranet-tmpl/prog/en/css/addbiblio.css >index d35a471..d3002be 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/css/addbiblio.css >+++ b/koha-tmpl/intranet-tmpl/prog/en/css/addbiblio.css >@@ -1,7 +1,11 @@ > #addbibliotabs { > margin-top : 1em; > } >- >+ul li.tag { >+ list-style-type:none; >+ padding:0 0 0 25px; >+ background: url("../../img/cursor_split_16.png") no-repeat left bottom; >+} > #addbibliotabs .ui-tabs-panel { > float : left; > } >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt >index 7d54142..26b7b89 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt >@@ -8,10 +8,26 @@ > //<![CDATA[ > > $(document).ready(function() { >- $('#addbibliotabs').tabs().bind('show.ui-tabs', function(e, ui) { >- $("#"+ui.panel.id+" input:eq(0)").focus(); >- }); >- >+ var $tabs = $('#addbibliotabs').tabs(); >+ $( "ul.sortable_field", $tabs ).sortable().disableSelection(); >+ $( "ul.sortable_subfield", $tabs ).sortable().disableSelection(); >+ >+ $('.tag').each(function() { >+ var field_id = this.getAttribute('id').substring(0, 7); >+ if (field_id in fields_in_use) { >+ fields_in_use[field_id]++; >+ } else { >+ fields_in_use[field_id] = 1; >+ } >+ }); >+ $('.subfield_line').each(function() { >+ var field_id = this.getAttribute('id').substring(0, 12); >+ if (field_id in fields_in_use) { >+ fields_in_use[field_id]++; >+ } else { >+ fields_in_use[field_id] = 1; >+ } >+ }); > /* check cookie to hide/show marcdocs*/ > if($.cookie("marcdocs_[% borrowernumber %]") == 'false'){ > hideMARCdocLinks(); >@@ -245,6 +261,350 @@ function Changefwk(FwkList) { > f.submit(); > } > >+// returns the subfieldcode based upon subfieldid writing >+function getSubfieldcode(tagsubfieldid){ >+ // 3 : tag +3 : tagnumber +4 : number of _ +8 subfield -1 begins at 0 >+ return tagsubfieldid.substr(3+3+4+8-1,1); >+} >+ >+// Take the base of tagsubfield information (removing the subfieldcodes and subfieldindexes) >+// returns the filter >+function getTagInputnameFilter(tagsubfieldid){ >+ var tagsubfield=tagsubfieldid.substr(0,tagsubfieldid.lastIndexOf("_")); >+ var tagcode=tagsubfield.substr(tagsubfield.lastIndexOf("_")); >+ tagsubfield=tagsubfield.substr(0,tagsubfield.lastIndexOf("_")); >+ tagsubfield=tagsubfield.substr(0,tagsubfield.lastIndexOf("_")); >+ tagsubfield=tagsubfield+"_."+tagcode; >+ return tagsubfield; >+} >+ >+function openAuth(tagsubfieldid,authtype) { >+ // let's take the base of tagsubfield information (removing the indexes and the codes >+ var element=document.getElementById(tagsubfieldid); >+ var tagsubfield=getTagInputnameFilter(tagsubfieldid); >+ var elementsubfcode=getSubfieldcode(element.name); >+ var mainmainstring=element.value; >+ var mainstring=""; >+ var inputs = element.parentNode.parentNode.getElementsByTagName("input"); >+ >+ for (var myindex =0; myindex<inputs.length;myindex++){ >+ if (inputs[myindex].name && inputs[myindex].name.match(tagsubfield)){ >+ var subfieldcode=getSubfieldcode(inputs[myindex].name); >+ if (isNaN(parseInt(subfieldcode)) && inputs[myindex].value != "" && subfieldcode!=elementsubfcode){ >+ mainstring=inputs[myindex].value+" "+mainstring; >+ } >+ } >+ } >+ newin=window.open("../authorities/auth_finder.pl?authtypecode="+ authtype+ "&index="+tagsubfieldid+"&value_mainstr="+encodeURI(mainmainstring)+"&value_main="+encodeURI(mainstring), "_blank",'width=700,height=550,toolbar=false,scrollbars=yes'); >+} >+ >+ >+function ExpandField(index) { >+ var original = document.getElementById(index); //original <div> >+ var divs = original.getElementsByTagName('div'); >+ for(var i=0,divslen = divs.length ; i<divslen ; i++){ // foreach div >+ if(divs[i].getAttribute('id').match(/^subfield/)){ // if it s a subfield >+ if (divs[i].style.display == 'block') { >+ divs[i].style.display = 'none'; >+ } else { >+ divs[i].style.display = 'block'; >+ } >+ } >+ } >+} >+ >+/** >+ * To clone a field or a subfield by clicking on '+' button >+ */ >+function CloneField(index) { >+ var original = document.getElementById(index); //original <div> >+ fields_in_use[index.substr(0, 7)]++; >+ var clone = original.cloneNode(true); >+ var new_key = CreateKey(); >+ var new_id = original.getAttribute('id')+new_key; >+ >+ clone.setAttribute('id',new_id); // setting a new id for the parent div >+ >+ var divs = clone.getElementsByTagName('div'); >+ >+ [% UNLESS ( hide_marc ) %] // No indicator if hide_marc >+ // setting a new name for the new indicator >+ for(var i=0; i < 2; i++) { >+ var indicator = clone.getElementsByTagName('input')[i]; >+ indicator.setAttribute('name',indicator.getAttribute('name')+new_key); >+ } >+ [% END %] >+ >+ // settings all subfields >+ for(var i=0,divslen = divs.length ; i<divslen ; i++){ // foreach div >+ if(divs[i].getAttribute("id").match(/^subfield/)){ // if it s a subfield >+ >+ // set the attribute for the new 'div' subfields >+ divs[i].setAttribute('id',divs[i].getAttribute('id')+new_key); >+ >+ var inputs = divs[i].getElementsByTagName('input'); >+ var id_input = ""; >+ >+ for( j = 0 ; j < inputs.length ; j++ ) { >+ if(inputs[j].getAttribute("id") && inputs[j].getAttribute("id").match(/^tag_/) ){ >+ inputs[j].value = ""; >+ } >+ } >+ >+ inputs[0].setAttribute('id',inputs[0].getAttribute('id')+new_key); >+ inputs[0].setAttribute('name',inputs[0].getAttribute('name')+new_key); >+ var id_input; >+ try { >+ id_input = inputs[1].getAttribute('id')+new_key; >+ inputs[1].setAttribute('id',id_input); >+ inputs[1].setAttribute('name',inputs[1].getAttribute('name')+new_key); >+ } catch(e) { >+ try{ // it s a select if it is not an input >+ var selects = divs[i].getElementsByTagName('select'); >+ id_input = selects[0].getAttribute('id')+new_key; >+ selects[0].setAttribute('id',id_input); >+ selects[0].setAttribute('name',selects[0].getAttribute('name')+new_key); >+ }catch(e2){ // it is a textarea if it s not a select or an input >+ var textaeras = divs[i].getElementsByTagName('textarea'); >+ id_input = textaeras[0].getAttribute('id')+new_key; >+ textaeras[0].setAttribute('id',id_input); >+ textaeras[0].setAttribute('name',textaeras[0].getAttribute('name')+new_key); >+ } >+ } >+ >+ [% UNLESS ( advancedMARCEditor ) %] >+ // when cloning a subfield, re set its label too. >+ var labels = divs[i].getElementsByTagName('label'); >+ labels[0].setAttribute('for',id_input); >+ [% END %] >+ >+ [% UNLESS ( hide_marc ) %] >+ // updating javascript parameters on button up >+ var imgs = divs[i].getElementsByTagName('img'); >+ imgs[0].setAttribute('onclick',"upSubfield(\'"+divs[i].getAttribute('id')+"\');"); >+ [% END %] >+ >+ // setting its '+' and '-' buttons >+ try { >+ var anchors = divs[i].getElementsByTagName('a'); >+ for (var j = 0; j < anchors.length; j++) { >+ if(anchors[j].getAttribute('class') == 'buttonPlus'){ >+ anchors[j].setAttribute('onclick',"CloneSubfield('" + divs[i].getAttribute('id') + "')"); >+ } else if (anchors[j].getAttribute('class') == 'buttonMinus') { >+ anchors[j].setAttribute('onclick',"UnCloneField('" + divs[i].getAttribute('id') + "')"); >+ } >+ } >+ } >+ catch(e){ >+ // do nothig if ButtonPlus & CloneButtonPlus don t exist. >+ } >+ >+ // button ... >+ var spans=0; >+ try { >+ spans = divs[i].getElementsByTagName('a'); >+ } catch(e) { >+ // no spans >+ } >+ if(spans){ >+ var buttonDot; >+ if(!CloneButtonPlus){ // it s impossible to have + ... (buttonDot AND buttonPlus) >+ buttonDot = spans[0]; >+ if(buttonDot){ >+ // 2 possibilities : >+ try{ >+ var buttonDotOnClick = buttonDot.getAttribute('onclick'); >+ if(buttonDotOnClick.match('Clictag')){ // -1- It s a plugin >+ var re = /\('.*'\)/i; >+ buttonDotOnClick = buttonDotOnClick.replace(re,"('"+inputs[1].getAttribute('id')+"')"); >+ if(buttonDotOnClick){ >+ buttonDot.setAttribute('onclick',buttonDotOnClick); >+ } >+ } else { >+ if(buttonDotOnClick.match('Dopop')) { // -2- It's a auth value >+ var re1 = /&index=.*',/; >+ var re2 = /,.*\)/; >+ >+ buttonDotOnClick = buttonDotOnClick.replace(re1,"&index="+inputs[1].getAttribute('id')+"',"); >+ buttonDotOnClick = buttonDotOnClick.replace(re2,",'"+inputs[1].getAttribute('id')+"')"); >+ >+ if(buttonDotOnClick){ >+ buttonDot.setAttribute('onclick',buttonDotOnClick); >+ } >+ } >+ } >+ try { >+ // do not copy the script section. >+ var script = spans[0].getElementsByTagName('script')[0]; >+ spans[0].removeChild(script); >+ } catch(e) { >+ // do nothing if there is no script >+ } >+ }catch(e){} >+ } >+ } >+ } >+ [% UNLESS ( hide_marc ) %] >+ var buttonUp = divs[i].getElementsByTagName('img')[0]; >+ buttonUp.setAttribute('onclick',"upSubfield('" + divs[i].getAttribute('id') + "')"); >+ [% END %] >+ >+ } else { // it's a indicator div >+ if(divs[i].getAttribute('id').match(/^div_indicator/)){ >+ var inputs = divs[i].getElementsByTagName('input'); >+ inputs[0].setAttribute('id',inputs[0].getAttribute('id')+new_key); >+ inputs[1].setAttribute('id',inputs[1].getAttribute('id')+new_key); >+ >+ var CloneButtonPlus; >+ try { >+ var anchors = divs[i].getElementsByTagName('a'); >+ for (var j = 0; j < anchors.length; j++) { >+ if (anchors[j].getAttribute('class') == 'buttonPlus') { >+ anchors[j].setAttribute('onclick',"CloneField('" + new_id + "')"); >+ } else if (anchors[j].getAttribute('class') == 'buttonMinus') { >+ anchors[j].setAttribute('onclick',"UnCloneField('" + new_id + "')"); >+ } else if (anchors[j].getAttribute('class') == 'expandfield') { >+ anchors[j].setAttribute('onclick',"ExpandField('" + new_id + "')"); >+ } >+ } >+ } >+ catch(e){ >+ // do nothig CloneButtonPlus doesn't exist. >+ } >+ >+ } >+ } >+ } >+ >+ // insert this line on the page >+ original.parentNode.insertBefore(clone,original.nextSibling); >+} >+ >+function CloneSubfield(index){ >+ var original = document.getElementById(index); //original <div> >+ fields_in_use[index.substr(0, 12)]++; >+ var clone = original.cloneNode(true); >+ var new_key = CreateKey(); >+ var new_id = original.getAttribute('id')+new_key; >+ // set the attribute for the new 'div' subfields >+ var inputs = clone.getElementsByTagName('input'); >+ var selects = clone.getElementsByTagName('select'); >+ var textareas = clone.getElementsByTagName('textarea'); >+ var linkid; >+ >+ // input >+ var id_input = ""; >+ for(var i=0,len=inputs.length; i<len ; i++ ){ >+ id_input = inputs[i].getAttribute('id')+new_key; >+ inputs[i].setAttribute('id',id_input); >+ inputs[i].setAttribute('name',inputs[i].getAttribute('name')+new_key); >+ linkid = id_input; >+ } >+ >+ // select >+ for(var i=0,len=selects.length; i<len ; i++ ){ >+ id_input = selects[i].getAttribute('id')+new_key; >+ selects[i].setAttribute('id',selects[i].getAttribute('id')+new_key); >+ selects[i].setAttribute('name',selects[i].getAttribute('name')+new_key); >+ } >+ >+ // textarea >+ for(var i=0,len=textareas.length; i<len ; i++ ){ >+ id_input = textareas[i].getAttribute('id')+new_key; >+ textareas[i].setAttribute('id',textareas[i].getAttribute('id')+new_key); >+ textareas[i].setAttribute('name',textareas[i].getAttribute('name')+new_key); >+ } >+ >+ // Changing the "..." link's onclick attribute for plugin callback >+ var links = clone.getElementsByTagName('a'); >+ var link = links[0]; >+ var buttonDotOnClick = link.getAttribute('onclick'); >+ if(buttonDotOnClick.match('Clictag')){ // -1- It s a plugin >+ var re = /\('.*'\)/i; >+ buttonDotOnClick = buttonDotOnClick.replace(re,"('"+linkid+"')"); >+ if(buttonDotOnClick){ >+ link.setAttribute('onclick',buttonDotOnClick); >+ } >+ } >+ >+ >+ [% UNLESS ( advancedMARCEditor ) %] >+ // when cloning a subfield, reset its label too. >+ var label = clone.getElementsByTagName('label')[0]; >+ label.setAttribute('for',id_input); >+ [% END %] >+ >+ // setting a new id for the parent div >+ clone.setAttribute('id',new_id); >+ >+ try { >+ var buttonUp = clone.getElementsByTagName('img')[0]; >+ buttonUp.setAttribute('onclick',"upSubfield('" + new_id + "')"); >+ var anchors = clone.getElementsByTagName('a'); >+ if(anchors.length){ >+ for(var i = 0 ,lenanchors = anchors.length ; i < lenanchors ; i++){ >+ if(anchors[i].getAttribute('class') == 'buttonPlus'){ >+ anchors[i].setAttribute('onclick',"CloneSubfield('" + new_id + "')"); >+ } else if (anchors[i].getAttribute('class') == 'buttonMinus') { >+ anchors[i].setAttribute('onclick',"UnCloneField('" + new_id + "')"); >+ } >+ } >+ } >+ } >+ catch(e){ >+ // do nothig if ButtonPlus & CloneButtonPlus don't exist. >+ } >+ // insert this line on the page >+ original.parentNode.insertBefore(clone,original.nextSibling); >+} >+ >+ /** >+ * This function removes or clears unwanted subfields >+ */ >+function UnCloneField(index) { >+ var original = document.getElementById(index); >+ var field_id; >+ if (index.match("tag")) { >+ field_id = index.substr(0, 7); >+ } else { >+ field_id = index.substr(0, 12); >+ } >+ if (1 == fields_in_use[field_id]) { >+ // clear inputs, but don't delete >+ $(":input.input_marceditor", original).each(function(){ >+ // thanks to http://www.learningjquery.com/2007/08/clearing-form-data for >+ // hint about clearing selects correctly >+ var type = this.type; >+ var tag = this.tagName.toLowerCase(); >+ if (type == 'text' || type == 'password' || tag == 'textarea') { >+ this.value = ""; >+ } else if (type == 'checkbox' || type == 'radio') { >+ this.checked = false; >+ } else if (tag == 'select') { >+ this.selectedIndex = -1; >+ } >+ }); >+ $(":input.indicator", original).val(""); >+ } else { >+ original.parentNode.removeChild(original); >+ fields_in_use[field_id]--; >+ } >+} >+ >+/** >+ * This function create a random number >+ */ >+function CreateKey(){ >+ return parseInt(Math.random() * 100000); >+} >+ >+ >+function unHideSubfield(index,labelindex) { // FIXME :: is it used ? >+ subfield = document.getElementById(index); >+ subfield.style.display = 'block'; >+ label = document.getElementById(labelindex); >+ label.style.display='none'; >+} > //]]> > </script> > <link type="text/css" rel="stylesheet" href="[% themelang %]/css/addbiblio.css" /> >@@ -420,11 +780,17 @@ function Changefwk(FwkList) { > </ul> > > [% FOREACH BIG_LOO IN BIG_LOOP %] >- <div id="tab[% BIG_LOO.number %]XX"> >+<!-- hide every tab except the 1st --> >+[% IF ( BIG_LOO.number ) %] >+ <ul id="tab[% BIG_LOO.number %]XX" class="sortable_field"> >+[% ELSE %] >+ <ul id="tab[% BIG_LOO.number %]XX" class="sortable_field"> >+[% END %] >+ > > [% FOREACH innerloo IN BIG_LOO.innerloop %] >- [% IF ( innerloo.tag ) %] >- <div class="tag" id="tag_[% innerloo.tag %]_[% innerloo.index %][% innerloo.random %]"> >+ [% IF ( innerloo.tag ) %] >+ <li class="tag" id="tag_[% innerloo.tag %]_[% innerloo.index %][% innerloo.random %]"> > <div class="tag_title" id="div_indicator_tag_[% innerloo.tag %]_[% innerloo.index %][% innerloo.random %]"> > [% UNLESS hide_marc %] > [% IF advancedMARCEditor %] >@@ -504,10 +870,10 @@ function Changefwk(FwkList) { > </span> > > </div> >- >+ <ul class="sortable_subfield"> > [% FOREACH subfield_loo IN innerloo.subfield_loop %] > <!-- One line on the marc editor --> >- <div class="subfield_line" style="[% subfield_loo.visibility %]" id="subfield[% subfield_loo.tag %][% subfield_loo.subfield %][% subfield_loo.random %]"> >+ <li class="subfield_line" style="[% subfield_loo.visibility %]; float: left; clear: left; width: 100%;" id="subfield[% subfield_loo.tag %][% subfield_loo.subfield %][% subfield_loo.random %]"> > > [% UNLESS advancedMARCEditor %] > [% IF ( subfield_loo.fixedfield ) %]<label for="tag_[% subfield_loo.tag %]_subfield_[% subfield_loo.subfield %]_[% subfield_loo.index %]_[% subfield_loo.index_subfield %]" style="display:none;" class="labelsubfield"> >@@ -516,11 +882,11 @@ function Changefwk(FwkList) { > [% END %] > > [% UNLESS hide_marc %] >- <span class="subfieldcode"> >- [% IF ( subfield_loo.fixedfield ) %] >- <img class="buttonUp" style="display:none;" src="/intranet-tmpl/prog/img/up.png" onclick="upSubfield('subfield[% subfield_loo.tag %][% subfield_loo.subfield %][% subfield_loo.random %]')" alt="Move Up" title="Move Up" /> >+ <span class="subfieldcode">[% IF ( subfield_loo.fixedfield ) %] >+ <img class="buttonUp" style="display:none;" src="[% themelang %]/../img/cursor_split_16.png" alt="Move" title="Move" /> > [% ELSE %] >- <img class="buttonUp" src="/intranet-tmpl/prog/img/up.png" onclick="upSubfield('subfield[% subfield_loo.tag %][% subfield_loo.subfield %][% subfield_loo.random %]')" alt="Move Up" title="Move Up" /> >+ <img class="buttonUp" src="[% themelang %]/../img/cursor_split_16.png" alt="Move" title="Move" /> >+ > [% END %] > <input type="text" > title="[% subfield_loo.marc_lib_plain %]" >@@ -559,17 +925,15 @@ function Changefwk(FwkList) { > [% END %] > </span> > >- </div> >+ </li> > <!-- End of the line --> > [% END %] >- >- </div> >- [% END %]<!-- if innerloo.tag --> >- [% END %]<!-- BIG_LOO.innerloop --> >- </div> >-[% END %]<!-- BIG_LOOP --> >- >-</div><!-- tabs --> >+ </ul> >+ [% END %]<!-- tag --> >+ [% END %] >+ </li> >+</ul> >+[% END %] > > <!-- Fields for fast add cataloguing --> > <input type="hidden" name="barcode" value="[% barcode %]" /> >diff --git a/koha-tmpl/intranet-tmpl/prog/img/cursor_split_16.png b/koha-tmpl/intranet-tmpl/prog/img/cursor_split_16.png >new file mode 100644 >index 0000000000000000000000000000000000000000..dc6d31da4d557a413f132153e916ee5dc18a0423 >GIT binary patch >literal 3206 >zcmd5<U5Fc16rNQqcDrqtib5;c>-5E+CiAzuNroib+5B`vyW2I*(tQxx$;{p4x|5mo >z&dnyf$W{~z1s~c~L@9^`A4PmnD5$hxWm}(o_Qe&YKDMO~g4(WUW|DNW8?{gnmu!+d >z_nhzh&bjBFdvk7P`tZ)deS;jw?JP`Yi|{$@{Xe-4-uK_#&^d0$EGf;gxv8V7;nbqK >z>6CG_Rjb21$0f&Gb=_FN43%+(*eU+jmsfa1%oKlObV{76XK<BFE>nDbdAejQFBl1v >zA5RY^TPgt5Fw;@1X4$UVO7T9f3g5lQ0*`zXwvggAj}XmG&7h1!F&c@=Q8{9WV+tBo >zqROZ|CXXCMvM9y{F(xQtM2f4DtV(gz{^QewC`rwEwV2Jf>0p%NtBloEL1;Fc(WVl0 >zXho0`iG(1^f-FbCBH}LDOm9VO_kafxU}UjtP*P{av5|+Vmz@Sn@jT3<Hh8`2FvqPr >z^)7|&wzCHL6S~ua6cvTAW1-HB5y*=dX4e<E3}2kfOd)LHyZhPe0RjK6Zx3%vuWw-l >z<Eg2CHm}us;9Ztmgm~Mz>r3F4mg-n2V%KR<1Lqd8%?^aaG>xu*y+JKMIMWcYg==8y >zf=H={5=0hBrOMo{TVGo0+XSB79IIM`RUPWiI4<$l462DTlqD1!%%Q%j2euiCO#;Dr >z6;S~x7M|A)9EC;OWSG?%24i@KI+sOBjEEAve5>#hsRf&1%L1;3ZXL$9x2$yn%oVB! >zm=K#f1@&&~O!rVja7sy*R7Fvxk(WhD6-6K2UoiC;#7b=4$~s2F%UL0t;$bFg5>u6x >z(R@CyWa3gjmd#00BBxCx#B5BA#kG85L<_+@qI<!1nQj}n!%l#GREx_a86~F0@^Ozn >zE=!r*$b_7U<&-fH;cq0A>`9WJNrz?}*lh+Y*z=CRnR;!AX3`8{ODTSa>Xioe!$4bY >zW(>!KEJ|ZyJ7axpGK>OFW*Hk*RK)d0*&;??yj)Eu)(M9~6I##@^(l$X;Ip)C-lv2F >zuZN&yu!57sh5B3a9|eu&I6fVWf}utHBp~E(I297(SFfutVl&X%nIe6b;h~BE)CAzo >zDu#{Gtz)?)iK-k|N2O5Vb&ZXxZdbgz7rZ|0)h!=H)^3oGCOngu<B}#S*@>WfwFLBa >zB`0c<JgQ9Ov%R5j5e_>>l2keI-wXfO!tYtmO~U(b^@qrKQt*zTPUR$pt+kaj4V4k- >zWT8saEY@3T-npe(u&mHUA|^DwhQ;`FZ@Hs+iZLPv9D6Qi0kK8esJ@I2Y*Ogq^c1*_ >z@@vopLmDRZO0R~r2i*(X*$C-w%j}&GMja%dHcaFZn-5Ow5P3&ww_^Jzpj0I;f)}f{ >z1D~f(4M7_Z9SjfB;(B?BqJ9!Pe7?lZl02D)ca}IbB(bxmU5RPU!Y$o4F-1p+3uonG >zKc<eG&lE=WSb_sGMAFgKCF!3Bzdw^j4A-w(&9PmiF-A$b;opI#9XsMZ$J8LYg{B>p >z#gr`S3>@5k5<8^6#E>MfF&6zJT%C3G3NB$<bN@eL|4v;HV(3-~l7nY(+k}g*(7oxx >zpnF%wHZ)KQH{tJ3e$s+l^j?;mW5=C&*3>EHf(vh<23aU#-CR0-11G^~t&r79tsly# >zJ{lH(e&^i_7tZ~9^X7-#wV{(&R=%EG9T*%OytA>faq{-9AIG0SyVlp&Tet81(HzRW >zU*CK6`t{4)2fO8=i|RAUw8)hQP@228>(Jxl=bxTjU0vO{b3=J$-;TG%vzIRYv@w3> >zzIf`JGaL86eQDRwtNF77%>jBazW&)S+;fS2YmbR9-hHdOef##6)txh?(x1DJBoAF# >z8Q!z!_hYLAS3kb^#(SSXHTm7q{pr^)Ute4MjjIm7kcfS?a&P(hu?9D=jnnU+J+D6d >S#jN-9p^%%-emZgL&A$L4Jm=T| > >literal 0 >HcmV?d00001 > >-- >1.7.2.5
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 7882
:
13184
|
13556
|
13789
|
14202
|
14908
|
18024
|
18025
|
18026
|
18027
|
22835
|
22836
|
23517
|
23521
|
23984
|
24227
|
24228
|
94638
|
94837
|
96344
|
96352
|
96384
|
96541
|
96542
|
96633
|
96634
|
96635