}
},
get destinations() {
+ function fetchDestination(ref) {
+ var dest = xref.fetchIfRef(ref);
+ return IsDict(dest) ? dest.get('D') : dest;
+ }
+
var xref = this.xref;
var dests = {}, nameTreeRef, nameDictionaryRef;
var obj = this.catDict.get('Names');
if (nameDictionaryRef) {
// reading simple destination dictionary
- obj = xref.fetch(nameDictionaryRef);
+ obj = xref.fetchIfRef(nameDictionaryRef);
obj.forEach(function(key, value) {
if (!value) return;
- dests[key] = xref.fetch(value).get('D');
+ dests[key] = fetchDestination(value);
});
}
if (nameTreeRef) {
}
var names = obj.get('Names');
for (i = 0, n = names.length; i < n; i += 2) {
- var dest = xref.fetch(names[i + 1]);
- dests[names[i]] = IsDict(dest) ? dest.get('D') : dest;
+ dests[names[i]] = fetchDestination(names[i + 1]);
}
}
}
return; // invalid destination
// dest array looks like that: <page-ref> </XYZ|FitXXX> <args..>
var destRef = dest[0];
- var pageNumber = this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'];
+ var pageNumber = destRef instanceof Object ?
+ this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : (destRef + 1);
if (pageNumber) {
this.page = pageNumber;
// TODO scroll to specific region on the page, the precise scaling