@@ -1157,12 +1157,16 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement {
1157
1157
// NOTE: We cannot set the values using `element.value` below, since it
1158
1158
// prevents the AnnotationLayer rasterizer in `test/driver.js`
1159
1159
// from parsing the elements correctly for the reference tests.
1160
- // #1737 modified by ngx-extended-pdf-viewer
1160
+ // #1737 + #1887 modified by ngx-extended-pdf-viewer
1161
1161
const angularData = window . getFormValueFromAngular ( this . data . fieldName ) ;
1162
- const storedData = angularData . value ? angularData : storage . getValue ( id , {
1162
+ const formData = storage . getValue ( id , {
1163
1163
value : this . data . fieldValue
1164
1164
} ) ;
1165
- // #1737 end of modification by ngx-extended-pdf-viewer
1165
+ const storedData = angularData . value ? angularData : formData ;
1166
+ if ( angularData !== formData ) {
1167
+ storage . setValue ( id , { value : angularData . value } ) ;
1168
+ }
1169
+ // #1737 + #1887 end of modification by ngx-extended-pdf-viewer
1166
1170
let textContent = storedData . value || "" ;
1167
1171
const maxLen = storage . getValue ( id , {
1168
1172
charLimit : this . data . maxLen ,
@@ -1507,25 +1511,27 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
1507
1511
const data = this . data ;
1508
1512
const id = data . id ;
1509
1513
1510
- // #1737 modified by ngx-extended-pdf-viewer
1514
+ // #1737, #1887 modified by ngx-extended-pdf-viewer
1511
1515
const angularData = window . getFormValueFromAngular ( this . data . fieldName ) ;
1516
+ const formValue = storage . getValue ( id , {
1517
+ value : data . exportValue === data . fieldValue ,
1518
+ } ) . value ;
1512
1519
let angularValue = undefined ;
1513
1520
if ( angularData . value ) {
1514
1521
angularValue = angularData . value === true || angularData . value === data . exportValue ;
1515
1522
}
1516
1523
let value =
1517
1524
angularValue !== undefined
1518
1525
? angularValue
1519
- : storage . getValue ( id , {
1520
- value : data . exportValue === data . fieldValue ,
1521
- } ) . value ;
1522
- // #1737 end of modification by ngx-extended-pdf-viewer
1523
- if ( typeof value === "string" ) {
1526
+ : formValue ;
1527
+ // #1737, #1887 end of modification by ngx-extended-pdf-viewer
1528
+ let updateAngularValueNecessary = false ;
1529
+ if ( typeof value === "string" || angularData !== formValue ) {
1524
1530
// The value has been changed through js and set in annotationStorage.
1525
1531
value = value !== "Off" ;
1526
1532
storage . setValue ( id , { value } ) ;
1527
1533
// #1737 modified by ngx-extended-pdf-viewer
1528
- window . updateAngularFormValue ( id , { value } ) ;
1534
+ updateAngularValueNecessary = true ;
1529
1535
// #1737 end of modification by ngx-extended-pdf-viewer
1530
1536
}
1531
1537
@@ -1571,7 +1577,12 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
1571
1577
// #1737 modified by ngx-extended-pdf-viewer
1572
1578
window . registerAcroformField ( id , element , value ? data . exportValue : false ) ;
1573
1579
element . addEventListener ( "updateFromAngular" , newvalue => storage . setValue ( id , { value : newvalue . detail } ) ) ;
1574
- // #1737 end of modification by ngx-extended-pdf-viewer
1580
+ // #1887 end of modification by ngx-extended-pdf-viewer
1581
+ if ( updateAngularValueNecessary ) {
1582
+ window . updateAngularFormValue ( id , { value } ) ;
1583
+ }
1584
+ // #1887 end of modification by ngx-extended-pdf-viewer
1585
+
1575
1586
if ( this . enableScripting && this . hasJSActions ) {
1576
1587
element . addEventListener ( "updatefromsandbox" , jsEvent => {
1577
1588
const actions = {
@@ -1620,22 +1631,22 @@ class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
1620
1631
const storage = this . annotationStorage ;
1621
1632
const data = this . data ;
1622
1633
const id = data . id ;
1623
- // #1737 modified by ngx-extended-pdf-viewer
1634
+ // #1737, #1887 modified by ngx-extended-pdf-viewer
1624
1635
const angularData = window . getFormValueFromAngular ( this . data . fieldName ) ;
1625
-
1636
+ const formValue = storage . getValue ( id , {
1637
+ value : data . fieldValue === data . buttonValue ,
1638
+ } ) . value ;
1626
1639
let value =
1627
1640
angularData . value ??
1628
- storage . getValue ( id , {
1629
- value : data . fieldValue === data . buttonValue ,
1630
- } ) . value ;
1631
- if ( typeof value === "string" ) {
1641
+ formValue ;
1642
+ if ( typeof value === "string" || angularData !== formValue ) {
1632
1643
// The value has been changed through js and set in annotationStorage.
1633
1644
value = value === data . buttonValue ; // TODO: this line in pdf.js seems to be buggy
1634
1645
storage . setValue ( id , { value } ) ;
1635
1646
} else if ( value ) {
1636
1647
window . updateAngularFormValue ( id , { value : data . buttonValue } ) ;
1637
1648
}
1638
- // #1737 end of modification by ngx-extended-pdf-viewer
1649
+ // #1737, #1887 end of modification by ngx-extended-pdf-viewer
1639
1650
1640
1651
const element = document . createElement ( "input" ) ;
1641
1652
GetElementsByNameSet . add ( element ) ;
@@ -1760,15 +1771,19 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
1760
1771
const storage = this . annotationStorage ;
1761
1772
const id = this . data . id ;
1762
1773
1763
- // #1737 modified by ngx-extended-pdf-viewer
1774
+ // #1737, #1887 modified by ngx-extended-pdf-viewer
1764
1775
const angularData = window . getFormValueFromAngular ( this . data . fieldName ) ;
1765
1776
1777
+ const formData = storage . getValue ( id , {
1778
+ value : this . data . fieldValue ,
1779
+ } ) ;
1766
1780
const storedData = angularData . value
1767
1781
? angularData
1768
- : storage . getValue ( id , {
1769
- value : this . data . fieldValue ,
1770
- } ) ;
1771
- // #1737 end of modification by ngx-extended-pdf-viewer
1782
+ : formData ;
1783
+ if ( angularData !== formData ) {
1784
+ storage . setValue ( id , { value : angularData . value } ) ;
1785
+ }
1786
+ // #1737, #1887 end of modification by ngx-extended-pdf-viewer
1772
1787
1773
1788
const selectElement = document . createElement ( "select" ) ;
1774
1789
GetElementsByNameSet . add ( selectElement ) ;
0 commit comments