Revision: 29248
http://sourceforge.net/p/bibdesk/svn/29248
Author: hofman
Date: 2025-04-30 16:30:40 +0000 (Wed, 30 Apr 2025)
Log Message:
-----------
Support authentication for SRU groups
Modified Paths:
--------------
trunk/bibdesk/BDSKSRUGroupServer.h
trunk/bibdesk/BDSKSRUGroupServer.m
trunk/bibdesk/BDSKSearchGroup.m
trunk/bibdesk/BDSKSearchGroupSheetController.h
trunk/bibdesk/BDSKSearchGroupSheetController.m
trunk/bibdesk/BDSKServerInfo.m
trunk/bibdesk/Base.lproj/BDSKSearchGroupSheet.xib
Modified: trunk/bibdesk/BDSKSRUGroupServer.h
===================================================================
--- trunk/bibdesk/BDSKSRUGroupServer.h 2025-04-30 15:31:47 UTC (rev 29247)
+++ trunk/bibdesk/BDSKSRUGroupServer.h 2025-04-30 16:30:40 UTC (rev 29248)
@@ -56,6 +56,8 @@
NSInteger requestedResults;
NSInteger downloadState;
NSString *errorMessage;
+ NSString *user;
+ NSString *password;
}
@property (class, nonatomic, readonly) NSArray *supportedRecordSyntaxes;
Modified: trunk/bibdesk/BDSKSRUGroupServer.m
===================================================================
--- trunk/bibdesk/BDSKSRUGroupServer.m 2025-04-30 15:31:47 UTC (rev 29247)
+++ trunk/bibdesk/BDSKSRUGroupServer.m 2025-04-30 16:30:40 UTC (rev 29248)
@@ -145,11 +145,22 @@
}
- (void)startDownloadForRange:(NSRange)range {
+ if (needsReset) {
+ NSString *aUser = nil;
+ NSString *aPassword = nil;
+ [[self serverInfo] getUsername:&aUser password:&aPassword];
+ user = aUser;
+ password = aPassword;
+ }
NSString *query = [self searchQueryWithRange:range];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[self
serverURL]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded; charset=utf-8"
forHTTPHeaderField:@"Content-type"];
[request setHTTPBody:[query dataUsingEncoding:NSUTF8StringEncoding]];
+ if (user && password) {
+ NSString *authString = [[[NSString stringWithFormat:@"%@:%@", user,
password] dataUsingEncoding:NSUTF8StringEncoding]
base64EncodedStringWithOptions:0];
+ [request setValue:[NSString stringWithFormat:@"Basic %@", authString]
forHTTPHeaderField:@"Authorization"];
+ }
[download cancel];
download = [[BDSKDownloader sharedDownloader]
startDataDownloadWithRequest:request delegate:self];
}
Modified: trunk/bibdesk/BDSKSearchGroup.m
===================================================================
--- trunk/bibdesk/BDSKSearchGroup.m 2025-04-30 15:31:47 UTC (rev 29247)
+++ trunk/bibdesk/BDSKSearchGroup.m 2025-04-30 16:30:40 UTC (rev 29248)
@@ -55,10 +55,10 @@
#import "NSFileManager_BDSKExtensions.h"
NSString *BDSKSearchGroupEntrez = @"entrez";
+NSString *BDSKSearchGroupZoom = @"zoom";
NSString *BDSKSearchGroupSRU = @"sru";
-NSString *BDSKSearchGroupZoom = @"zoom";
+NSString *BDSKSearchGroupDBLP = @"dblp";
NSString *BDSKSearchGroupISI = @"isi";
-NSString *BDSKSearchGroupDBLP = @"dblp";
NSString *BDSKSearchGroupURLScheme = @"x-bdsk-search";
@@ -419,15 +419,10 @@
[dictionary setValue:aName ?: aDatabase forKey:@"name"];
[dictionary setValue:aDatabase forKey:@"database"];
[dictionary setValue:aSearchTerm forKey:@"search term"];
- if ([aType isEqualToString:BDSKSearchGroupZoom]) {
+ if ([aType isEqualToString:BDSKSearchGroupZoom] || [aType
isEqualToString:BDSKSearchGroupSRU]) {
[dictionary setValue:aHost forKey:@"host"];
[dictionary setValue:aPort forKey:@"port"];
[dictionary setValue:options forKey:@"options"];
- } else if ([aType isEqualToString:BDSKSearchGroupSRU]) {
- [dictionary setValue:aHost forKey:@"host"];
- [dictionary setValue:aPort forKey:@"port"];
- if ([options count] > 0)
- [dictionary setValue:options forKey:@"options"];
} else if ([aType isEqualToString:BDSKSearchGroupISI] && [options count] >
0) {
[dictionary setValue:options forKey:@"options"];
}
@@ -442,12 +437,12 @@
serverClass = [BDSKEntrezGroupServer class];
else if ([aType isEqualToString:BDSKSearchGroupZoom])
serverClass = [BDSKZoomGroupServer class];
+ else if ([aType isEqualToString:BDSKSearchGroupSRU])
+ serverClass = [BDSKSRUGroupServer class];
+ else if ([aType isEqualToString:BDSKSearchGroupDBLP])
+ serverClass = [BDSKDBLPGroupServer class];
else if ([aType isEqualToString:BDSKSearchGroupISI])
serverClass = [BDSKISIGroupServer class];
- else if ([aType isEqualToString:BDSKSearchGroupDBLP])
- serverClass = [BDSKDBLPGroupServer class];
- else if ([aType isEqualToString:BDSKSearchGroupSRU])
- serverClass = [BDSKSRUGroupServer class];
else
BDSKASSERT_NOT_REACHED("unknown search group type");
return [[serverClass alloc] initWithGroup:group serverInfo:info];
Modified: trunk/bibdesk/BDSKSearchGroupSheetController.h
===================================================================
--- trunk/bibdesk/BDSKSearchGroupSheetController.h 2025-04-30 15:31:47 UTC
(rev 29247)
+++ trunk/bibdesk/BDSKSearchGroupSheetController.h 2025-04-30 16:30:40 UTC
(rev 29248)
@@ -113,10 +113,10 @@
@property (nonatomic, getter=isEditable) BOOL editable;
@property (nonatomic, getter=isResettable) BOOL resettable;
@property (nonatomic, readonly, getter=isZoom) BOOL zoom;
+@property (nonatomic, readonly, getter=isSRU) BOOL SRU;
@property (nonatomic, readonly, getter=isISI) BOOL ISI;
-@property (nonatomic, readonly, getter=isSRU) BOOL SRU;
-@property (nonatomic, readonly, getter=isZoomOrISI) BOOL zoomOrISI;
@property (nonatomic, readonly, getter=isZoomOrSRU) BOOL zoomOrSRU;
+@property (nonatomic, readonly, getter=isZoomOrISI) BOOL zoomOrSRUOrISI;
@property (nonatomic, strong) NSString *type;
Modified: trunk/bibdesk/BDSKSearchGroupSheetController.m
===================================================================
--- trunk/bibdesk/BDSKSearchGroupSheetController.m 2025-04-30 15:31:47 UTC
(rev 29247)
+++ trunk/bibdesk/BDSKSearchGroupSheetController.m 2025-04-30 16:30:40 UTC
(rev 29248)
@@ -55,13 +55,13 @@
@implementation BDSKSearchGroupSheetController
@synthesize serverPopup, nameField, addressField, portField, databaseField,
passwordField, userField, syntaxPopup, encodingComboBox,
removeDiacriticsButton, liteButton, editButton, addRemoveButton, serverView,
revealButton, okButton, cancelButton, bottomConstraint, objectController,
custom, editable, resettable;
-@dynamic zoom, ISI, SRU, zoomOrISI, zoomOrSRU, typeTag, databases, serverInfo,
undoManager;
+@dynamic zoom, SRU, ISI, zoomOrSRU, zoomOrSRUOrISI, typeTag, databases,
serverInfo, undoManager;
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
if ([@"type" isEqualToString:key])
keyPaths = [keyPaths setByAddingObject:@"serverInfo"];
- else if ([[NSSet setWithObjects:@"typeTag", @"zoom", @"ISI", @"SRU",
@"zoomOrISI", @"zoomOrSRU", @"databases", nil] containsObject:key])
+ else if ([[NSSet setWithObjects:@"typeTag", @"zoom", @"SRU", @"ISI",
@"zoomOrSRU", @"zoomOrSRUOrISI", @"databases", nil] containsObject:key])
keyPaths = [keyPaths setByAddingObject:@"type"];
return keyPaths;
}
@@ -338,14 +338,14 @@
- (BOOL)isZoom { return [serverInfo isZoom]; }
-- (BOOL)isISI { return [serverInfo isISI]; }
-
- (BOOL)isSRU { return [serverInfo isSRU]; }
-- (BOOL)isZoomOrISI { return [serverInfo isZoom] || [serverInfo isISI]; }
+- (BOOL)isISI { return [serverInfo isISI]; }
- (BOOL)isZoomOrSRU { return [serverInfo isZoom] || [serverInfo isSRU]; }
+- (BOOL)isZoomOrSRUOrISI { return [serverInfo isZoom] || [serverInfo isSRU] ||
[serverInfo isISI]; }
+
- (BDSKServerInfo *)serverInfo { return serverInfo; }
- (void)setServerInfo:(BDSKServerInfo *)info;
Modified: trunk/bibdesk/BDSKServerInfo.m
===================================================================
--- trunk/bibdesk/BDSKServerInfo.m 2025-04-30 15:31:47 UTC (rev 29247)
+++ trunk/bibdesk/BDSKServerInfo.m 2025-04-30 16:30:40 UTC (rev 29248)
@@ -88,15 +88,14 @@
+ (instancetype)defaultServerInfoWithType:(NSString *)aType;
{
- BOOL isZoom = [aType isEqualToString:BDSKSearchGroupZoom];
- BOOL isSRU = [aType isEqualToString:BDSKSearchGroupSRU];
+ BOOL isZoomOrSRU = [aType isEqualToString:BDSKSearchGroupZoom] || [aType
isEqualToString:BDSKSearchGroupSRU];
return [[[self class] alloc] initWithType:aType
name:DEFAULT_NAME
database:DEFAULT_DATABASE
- host:isZoom || isSRU ? DEFAULT_HOST :
nil
- port:isZoom || isSRU ? DEFAULT_PORT :
nil
- options:isZoom ? @{} : nil];
+ host:isZoomOrSRU ? DEFAULT_HOST : nil
+ port:isZoomOrSRU ? DEFAULT_PORT : nil
+ options:isZoomOrSRU ? @{} : nil];
}
- (instancetype)initWithType:(NSString *)aType name:(NSString *)aName
database:(NSString *)aDbase host:(NSString *)aHost port:(NSString *)aPort
options:(NSDictionary *)opts;
@@ -115,16 +114,12 @@
password = [[opts objectForKey:PASSWORD_KEY] copy];
options = [opts count] > 0 ? [opts mutableCopy] : nil;
[options removeObjectForKey:PASSWORD_KEY];
- } else if ([self isZoom]) {
+ } else if ([self isZoom] || [self isSRU]) {
host = [aHost copy];
port = [aPort copy];
password = [[opts objectForKey:PASSWORD_KEY] copy];
options = [opts mutableCopy];
[options removeObjectForKey:PASSWORD_KEY];
- } else if ([self isSRU]) {
- host = [aHost copy];
- port = [aPort copy];
- options = [opts count] > 0 ? [opts mutableCopy] : nil;
} else {
self = nil;
}
@@ -250,7 +245,7 @@
- (BOOL)isLite { return [[options objectForKey:LITE_KEY] boolValue]; }
- (NSDictionary *)options {
- return ([self isZoom] || [options count] > 0) ? [options copy] : nil;
+ return ([self isZoom] || [self isSRU] || [options count] > 0) ? [options
copy] : nil;
}
- (BOOL)isEntrez { return [[self type] isEqualToString:BDSKSearchGroupEntrez];
}
@@ -264,18 +259,18 @@
return BDSKServerTypeEntrez;
if ([self isZoom])
return BDSKServerTypeZoom;
+ if ([self isSRU])
+ return BDSKServerTypeSRU;
+ if ([self isDBLP])
+ return BDSKServerTypeDBLP;
if ([self isISI])
return BDSKServerTypeISI;
- if ([self isDBLP])
- return BDSKServerTypeDBLP;
- if ([self isSRU])
- return BDSKServerTypeSRU;
BDSKASSERT_NOT_REACHED("Unknown search type");
return BDSKServerTypeEntrez;
}
- (BOOL)getUsername:(NSString **)outUsername password:(NSString **)outPassword
{
- if ([self isZoom] == NO && [self isISI] == NO)
+ if ([self isZoom] == NO && [self isSRU] == NO && [self isISI] == NO)
return NO;
NSString *user = [self username];
if (user == nil)
@@ -303,7 +298,7 @@
}
- (void)savePasswordInKeychain {
- if ([self isZoom] == NO && [self isISI] == NO)
+ if ([self isZoom] == NO && [self isSRU] == NO && [self isISI] == NO)
return;
// don't get the password from the keychain
[passwordLock lockForReading];
@@ -412,7 +407,7 @@
- (void)setType:(NSString *)newType {
if ([type isEqualToString:newType] == NO) {
type = newType;
- if ([self isZoom]) {
+ if ([self isZoom] || [self isSRU]) {
if (host == nil)
[self setHost:DEFAULT_HOST];
if (port == nil)
@@ -419,11 +414,6 @@
[self setPort:DEFAULT_PORT];
password = nil;
options = [[NSMutableDictionary alloc] init];
- } else if ([self isSRU]) {
- if (host == nil)
- [self setHost:DEFAULT_HOST];
- if (port == nil)
- [self setPort:DEFAULT_PORT];
} else {
password = nil;
options = nil;
Modified: trunk/bibdesk/Base.lproj/BDSKSearchGroupSheet.xib
===================================================================
--- trunk/bibdesk/Base.lproj/BDSKSearchGroupSheet.xib 2025-04-30 15:31:47 UTC
(rev 29247)
+++ trunk/bibdesk/Base.lproj/BDSKSearchGroupSheet.xib 2025-04-30 16:30:40 UTC
(rev 29248)
@@ -162,15 +162,8 @@
<connections>
<accessibilityConnection
property="title" destination="200" id="527"/>
<binding destination="-2"
name="enabled" keyPath="editable" id="463"/>
- <binding destination="569"
name="value" keyPath="selection.password" id="582">
+ <binding destination="-2"
name="enabled2" keyPath="zoomOrSRUOrISI" previousBinding="463" id="kfd-LC-U9b">
<dictionary key="options">
- <integer
key="NSConditionallySetsEditable" value="0"/>
- <string
key="NSNullPlaceholder">Password</string>
- <integer
key="NSValidatesImmediately" value="1"/>
- </dictionary>
- </binding>
- <binding destination="-2"
name="enabled2" keyPath="zoomOrISI" previousBinding="463" id="983">
- <dictionary key="options">
<integer
key="NSMultipleValuesPlaceholder" value="-1"/>
<integer
key="NSNoSelectionPlaceholder" value="-1"/>
<integer
key="NSNotApplicablePlaceholder" value="-1"/>
@@ -177,11 +170,18 @@
<integer
key="NSNullPlaceholder" value="-1"/>
</dictionary>
</binding>
- <binding destination="-2"
name="hidden" keyPath="zoomOrISI" previousBinding="983" id="984">
+ <binding destination="-2"
name="hidden" keyPath="zoomOrSRUOrISI" previousBinding="kfd-LC-U9b"
id="S0U-3a-9WO">
<dictionary key="options">
<string
key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
+ <binding destination="569"
name="value" keyPath="selection.password" id="582">
+ <dictionary key="options">
+ <integer
key="NSConditionallySetsEditable" value="0"/>
+ <string
key="NSNullPlaceholder">Password</string>
+ <integer
key="NSValidatesImmediately" value="1"/>
+ </dictionary>
+ </binding>
<outlet property="nextKeyView"
destination="250" id="268"/>
</connections>
</textField>
@@ -193,7 +193,7 @@
<color key="backgroundColor"
name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
- <binding destination="-2"
name="hidden" keyPath="zoomOrISI" id="971">
+ <binding destination="-2"
name="hidden" keyPath="zoomOrSRUOrISI" id="3Ei-Eq-Hn3">
<dictionary key="options">
<string
key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
@@ -240,15 +240,8 @@
<connections>
<accessibilityConnection
property="title" destination="195" id="526"/>
<binding destination="-2"
name="enabled" keyPath="editable" id="461"/>
- <binding destination="569"
name="value" keyPath="selection.username" id="580">
+ <binding destination="-2"
name="enabled2" keyPath="zoomOrSRUOrISI" previousBinding="461" id="Jeq-bz-OJp">
<dictionary key="options">
- <integer
key="NSConditionallySetsEditable" value="0"/>
- <string
key="NSNullPlaceholder">User Name</string>
- <integer
key="NSValidatesImmediately" value="1"/>
- </dictionary>
- </binding>
- <binding destination="-2"
name="enabled2" keyPath="zoomOrISI" previousBinding="461" id="981">
- <dictionary key="options">
<integer
key="NSMultipleValuesPlaceholder" value="-1"/>
<integer
key="NSNoSelectionPlaceholder" value="-1"/>
<integer
key="NSNotApplicablePlaceholder" value="-1"/>
@@ -255,11 +248,18 @@
<integer
key="NSNullPlaceholder" value="-1"/>
</dictionary>
</binding>
- <binding destination="-2"
name="hidden" keyPath="zoomOrISI" previousBinding="981" id="982">
+ <binding destination="-2"
name="hidden" keyPath="zoomOrSRUOrISI" previousBinding="Jeq-bz-OJp"
id="5qM-9P-0IQ">
<dictionary key="options">
<string
key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
+ <binding destination="569"
name="value" keyPath="selection.username" id="580">
+ <dictionary key="options">
+ <integer
key="NSConditionallySetsEditable" value="0"/>
+ <string
key="NSNullPlaceholder">User Name</string>
+ <integer
key="NSValidatesImmediately" value="1"/>
+ </dictionary>
+ </binding>
<outlet property="nextKeyView"
destination="197" id="203"/>
</connections>
</textField>
@@ -344,7 +344,7 @@
<color key="backgroundColor"
name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<connections>
- <binding destination="-2"
name="hidden" keyPath="zoomOrISI" id="972">
+ <binding destination="-2"
name="hidden" keyPath="zoomOrSRUOrISI" id="9qR-dP-YL2">
<dictionary key="options">
<string
key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
@@ -646,8 +646,8 @@
</connections>
</comboBox>
<button toolTip="Use https"
translatesAutoresizingMaskIntoConstraints="NO" id="nTD-tF-zzg">
- <rect key="frame" x="96" y="67"
width="58" height="16"/>
- <buttonCell key="cell" type="check"
title="Secure" bezelStyle="regularSquare" imagePosition="left" alignment="left"
controlSize="small" state="on" inset="2" id="8yH-PP-g6U">
+ <rect key="frame" x="96" y="17"
width="58" height="16"/>
+ <buttonCell key="cell" type="check"
title="Secure" bezelStyle="regularSquare" imagePosition="left" alignment="left"
controlSize="small" inset="2" id="8yH-PP-g6U">
<behavior key="behavior"
changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font"
metaFont="message" size="11"/>
</buttonCell>
@@ -660,12 +660,12 @@
<integer
key="NSNullPlaceholder" value="-1"/>
</dictionary>
</binding>
- <binding destination="-2"
name="enabled" keyPath="editable" id="7lm-7C-ADf"/>
<binding destination="-2"
name="hidden" keyPath="SRU" previousBinding="Fuf-uY-G8r" id="Mz7-eb-7dl">
<dictionary key="options">
<string
key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary>
</binding>
+ <binding destination="-2"
name="enabled" keyPath="editable" id="7lm-7C-ADf"/>
<binding destination="569"
name="value" keyPath="selection.secure" id="Woe-P1-njP"/>
</connections>
</button>
@@ -683,7 +683,6 @@
<constraint firstItem="250"
firstAttribute="firstBaseline" secondItem="296" secondAttribute="firstBaseline"
id="2qw-YB-6Ae"/>
<constraint firstItem="194"
firstAttribute="leading" secondItem="3BL-J9-tal" secondAttribute="leading"
id="3BB-IE-AFV"/>
<constraint firstItem="250"
firstAttribute="top" secondItem="316" secondAttribute="bottom" constant="8"
symbolic="YES" id="3on-5G-TpL"/>
- <constraint firstItem="nTD-tF-zzg"
firstAttribute="leading" secondItem="3BL-J9-tal" secondAttribute="leading"
id="3qP-Bm-ARu"/>
<constraint firstAttribute="bottom"
secondItem="260" secondAttribute="bottom" constant="8" id="3z6-1F-2WX"/>
<constraint firstItem="201"
firstAttribute="top" secondItem="194" secondAttribute="bottom" constant="8"
symbolic="YES" id="4Zv-6g-ZoO"/>
<constraint firstAttribute="trailing"
relation="greaterThanOrEqual" secondItem="985" secondAttribute="trailing"
constant="20" symbolic="YES" id="4l5-LZ-0F0"/>
@@ -694,11 +693,11 @@
<constraint firstItem="275"
firstAttribute="leading" relation="greaterThanOrEqual" secondItem="189"
secondAttribute="leading" constant="32" id="8lq-5S-qhX"/>
<constraint firstAttribute="trailing"
relation="greaterThanOrEqual" secondItem="247" secondAttribute="trailing"
constant="20" symbolic="YES" id="8xy-y2-7Ym"/>
<constraint firstItem="258"
firstAttribute="top" secondItem="250" secondAttribute="bottom" constant="8"
symbolic="YES" id="9ip-xN-yVd"/>
- <constraint firstAttribute="trailing"
relation="greaterThanOrEqual" secondItem="nTD-tF-zzg"
secondAttribute="trailing" constant="20" symbolic="YES" id="9xE-Gs-7Kh"/>
<constraint firstItem="316"
firstAttribute="leading" secondItem="189" secondAttribute="leading"
constant="12" id="Aq1-KC-EzH"/>
<constraint firstItem="201"
firstAttribute="leading" secondItem="3BL-J9-tal" secondAttribute="leading"
id="BId-hK-GcU"/>
<constraint firstAttribute="trailing"
secondItem="260" secondAttribute="trailing" constant="12" id="BVi-Ww-Jq8"/>
<constraint firstItem="305"
firstAttribute="firstBaseline" secondItem="304" secondAttribute="firstBaseline"
id="BZM-at-pYv"/>
+ <constraint firstItem="nTD-tF-zzg"
firstAttribute="leading" secondItem="303" secondAttribute="leading"
id="Bpd-PV-MnA"/>
<constraint firstItem="192"
firstAttribute="leading" secondItem="190" secondAttribute="trailing"
constant="8" symbolic="YES" id="DyR-Qs-7KC"/>
<constraint firstItem="190"
firstAttribute="leading" relation="greaterThanOrEqual" secondItem="189"
secondAttribute="leading" constant="32" id="E0u-Kl-X2F"/>
<constraint firstItem="uYk-gJ-82e"
firstAttribute="firstBaseline" secondItem="199" secondAttribute="firstBaseline"
id="Eb0-nK-vjH"/>
@@ -710,6 +709,7 @@
<constraint firstItem="303"
firstAttribute="leading" secondItem="304" secondAttribute="trailing"
constant="8" symbolic="YES" id="IDj-VH-hv1"/>
<constraint firstItem="247"
firstAttribute="width" secondItem="250" secondAttribute="width"
id="Ivv-WU-XAN"/>
<constraint firstItem="316"
firstAttribute="top" secondItem="189" secondAttribute="top" constant="4"
id="JQx-Np-uyM"/>
+ <constraint firstAttribute="trailing"
relation="greaterThanOrEqual" secondItem="nTD-tF-zzg"
secondAttribute="trailing" constant="20" symbolic="YES" id="JZL-9S-O07"/>
<constraint firstItem="194"
firstAttribute="top" secondItem="uYk-gJ-82e" secondAttribute="bottom"
constant="8" symbolic="YES" id="Lqq-gp-DLz"/>
<constraint firstItem="192"
firstAttribute="firstBaseline" secondItem="190" secondAttribute="firstBaseline"
id="N4D-Zj-4Ed"/>
<constraint firstItem="Let-vJ-J5z"
firstAttribute="firstBaseline" secondItem="753" secondAttribute="firstBaseline"
id="O6h-Dy-rhd"/>
@@ -730,7 +730,7 @@
<constraint firstItem="277"
firstAttribute="top" secondItem="201" secondAttribute="bottom" constant="8"
symbolic="YES" id="Ywb-yl-dZO"/>
<constraint firstItem="258"
firstAttribute="leading" secondItem="189" secondAttribute="leading"
constant="12" id="akZ-6M-6Ke"/>
<constraint firstAttribute="trailing"
secondItem="258" secondAttribute="trailing" constant="12" id="bcf-zK-Eeb"/>
- <constraint firstItem="nTD-tF-zzg"
firstAttribute="firstBaseline" secondItem="195" secondAttribute="firstBaseline"
id="dMp-mu-0lU"/>
+ <constraint firstItem="nTD-tF-zzg"
firstAttribute="firstBaseline" secondItem="304" secondAttribute="firstBaseline"
id="dde-dy-mHp"/>
<constraint firstAttribute="trailing"
relation="greaterThanOrEqual" secondItem="8U9-Rn-xYX"
secondAttribute="trailing" constant="20" symbolic="YES" id="esF-2B-ds7"/>
<constraint firstItem="8U9-Rn-xYX"
firstAttribute="leading" secondItem="RmO-um-4HP" secondAttribute="trailing"
constant="8" symbolic="YES" id="f2m-Sw-3hc"/>
<constraint firstItem="318"
firstAttribute="leading" secondItem="189" secondAttribute="leading"
constant="20" symbolic="YES" id="fDF-1D-GZm"/>
@@ -769,6 +769,7 @@
</customView>
</subviews>
<constraints>
+ <constraint firstAttribute="trailing"
secondItem="189" secondAttribute="trailing" id="CZ0-DF-QOP"/>
<constraint firstAttribute="bottom"
secondItem="189" secondAttribute="bottom" id="CgE-6E-jUn"/>
<constraint firstItem="189" firstAttribute="top"
secondItem="myG-64-rV4" secondAttribute="top" id="fOM-21-A4b"/>
<constraint firstItem="189"
firstAttribute="leading" secondItem="myG-64-rV4" secondAttribute="leading"
id="g0A-I2-CUf"/>
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit