Revision: 23974
          http://sourceforge.net/p/bibdesk/svn/23974
Author:   hofman
Date:     2019-07-09 17:14:13 +0000 (Tue, 09 Jul 2019)
Log Message:
-----------
Add an authentication panel for downloads, more or less copied from webkit

Modified Paths:
--------------
    trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj

Added Paths:
-----------
    trunk/bibdesk/BDSKAuthenticationController.h
    trunk/bibdesk/BDSKAuthenticationController.m
    trunk/bibdesk/BDSKAuthenticationHandler.h
    trunk/bibdesk/BDSKAuthenticationHandler.m
    trunk/bibdesk/English.lproj/AuthenticationPanel.xib
    trunk/bibdesk/French.lproj/AuthenticationPanel.xib
    trunk/bibdesk/German.lproj/AuthenticationPanel.xib

Added: trunk/bibdesk/BDSKAuthenticationController.h
===================================================================
--- trunk/bibdesk/BDSKAuthenticationController.h                                
(rev 0)
+++ trunk/bibdesk/BDSKAuthenticationController.h        2019-07-09 17:14:13 UTC 
(rev 23974)
@@ -0,0 +1,58 @@
+//
+//  BDSKAuthenticationController.h
+//  BibDesk
+//
+//  Created by Christiaan Hofman on 09/07/2019.
+/*
+ This software is Copyright (c) 2019
+ Christiaan Hofman. All rights reserved.
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 
+ - Neither the name of Christiaan Hofman nor the names of any
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+ 
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <Cocoa/Cocoa.h>
+#import "BDSKDownloader.h"
+
+
+@interface BDSKAuthenticationController : NSWindowController {
+    IBOutlet NSTextField *mainLabelField;
+    IBOutlet NSTextField *smallLabelField;
+    IBOutlet NSTextField *passwordField;
+    IBOutlet NSTextField *userField;
+    IBOutlet NSButton *rememberButton;
+    BOOL usingSheet;
+}
+
+- (void)runAuthentication:(NSURLAuthenticationChallenge *)challenge 
window:(NSWindow *)window completionHandler:(void 
(^)(BDSKDownloaderAuthChallengeDisposition disposition, NSURLCredential 
*credential))completionHandler;
+
+@end
+
+@interface BDSKNonBlockingPanel : NSPanel
+@end
+

Added: trunk/bibdesk/BDSKAuthenticationController.m
===================================================================
--- trunk/bibdesk/BDSKAuthenticationController.m                                
(rev 0)
+++ trunk/bibdesk/BDSKAuthenticationController.m        2019-07-09 17:14:13 UTC 
(rev 23974)
@@ -0,0 +1,149 @@
+//
+//  BDSKAuthenticationController.m
+//  BibDesk
+//
+//  Created by Christiaan Hofman on 09/07/2019.
+/*
+ This software is Copyright (c) 2019
+ Christiaan Hofman. All rights reserved.
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 
+ - Neither the name of Christiaan Hofman nor the names of any
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+ 
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "BDSKAuthenticationController.h"
+#import "NSWindowController_BDSKExtensions.h"
+
+
+@implementation BDSKAuthenticationController
+
+- (NSString *)windowNibName { return @"AuthenticationPanel"; }
+
+- (void)setUpForChallenge:(NSURLAuthenticationChallenge *)challenge {
+    NSWindow *window = [self window];
+    NSURLProtectionSpace *space = [challenge protectionSpace];
+    NSString *host = [space host];
+    NSString *realm = [space realm];
+    NSString *message;
+    
+    if ([space port] != 0)
+        host = [host stringByAppendingFormat:@":%ld", (long)[space port]];
+    
+    if ([challenge previousFailureCount] == 0) {
+        if ([space isProxy])
+            message = [NSString stringWithFormat:NSLocalizedString(@"To view 
this page, you need to log in to the %@ proxy server %@.", @"prompt string in 
authentication panel"), [space proxyType], host];
+        else
+            message = [NSString stringWithFormat:NSLocalizedString(@"To view 
this page, you need to log in to area “%@” on %@.", @"prompt string in 
authentication panel"), realm, host];
+    } else {
+        if ([space isProxy])
+            message = [NSString stringWithFormat:NSLocalizedString(@"The name 
or password entered for the %@ proxy server %@ was incorrect. Please try 
again.", @"prompt string in authentication panel"), [space proxyType], host];
+        else
+            message = [NSString stringWithFormat:NSLocalizedString(@"The name 
or password entered for area “%@” on %@ was incorrect. Please try again.", 
@"prompt string in authentication panel"), realm, host];
+    }
+    
+    [mainLabelField setStringValue:message];
+    
+    NSRect windowFrame = [window frame];
+    NSRect frame = [mainLabelField frame];
+    NSSize bestSize = [mainLabelField intrinsicContentSize];
+    float heightDelta = bestSize.height - NSHeight(frame);
+    frame.size.height += heightDelta;
+    frame.origin.y -= heightDelta;
+    [mainLabelField setFrame:frame];
+    windowFrame.size.height += heightDelta;
+    [window setFrame:windowFrame display:NO];
+
+    if ([space receivesCredentialSecurely])
+        [smallLabelField setStringValue:
+         NSLocalizedString(@"Your login information will be sent securely.", 
@"message in authentication panel")];
+    else
+        [smallLabelField setStringValue:
+         NSLocalizedString(@"Your password will be sent in the clear.", 
@"message in authentication panel")];
+    
+    if ([[challenge proposedCredential] user] != nil) {
+        [userField setStringValue:[[challenge proposedCredential] user]];
+        [window setInitialFirstResponder:passwordField];
+    } else {
+        [userField setStringValue:@""];
+        [window setInitialFirstResponder:userField];
+    }
+}
+
+- (NSURLCredential *)credential {
+    return [NSURLCredential credentialWithUser:[userField stringValue] 
password:[passwordField stringValue] persistence:([rememberButton state] == 
NSOnState) ? NSURLCredentialPersistencePermanent : 
NSURLCredentialPersistenceForSession];
+}
+
+- (void)runAuthentication:(NSURLAuthenticationChallenge *)challenge 
window:(NSWindow *)window completionHandler:(void 
(^)(BDSKDownloaderAuthChallengeDisposition disposition, NSURLCredential 
*credential))completionHandler {
+    [self setUpForChallenge:challenge];
+    
+    if (window) {
+        usingSheet = YES;
+        [self beginSheetModalForWindow:window completionHandler:^(NSInteger 
result){
+            if (result == NSOKButton)
+                
completionHandler(BDSKDownloaderAuthChallengeCancelAuthenticationChallenge, 
[self credential]);
+            else
+                
completionHandler(BDSKDownloaderAuthChallengeCancelAuthenticationChallenge, 
nil);
+        }];
+    } else {
+        usingSheet = NO;
+        if ([NSApp runModalForWindow:[self window]] == NSOKButton)
+            
completionHandler(BDSKDownloaderAuthChallengeCancelAuthenticationChallenge, 
[self credential]);
+        else
+            
completionHandler(BDSKDownloaderAuthChallengeCancelAuthenticationChallenge, 
nil);
+    }
+}
+
+- (IBAction)dismiss:(id)sender {
+    if (usingSheet) {
+        [super dismiss:sender];
+    } else {
+        [NSApp stopModalWithCode:[sender tag]];
+        [[self window] orderOut:self];
+    }
+}
+
+@end
+
+@implementation BDSKNonBlockingPanel
+
+- (BOOL)_blocksActionWhenModal:(SEL)theAction
+{
+    // This override of a private AppKit method allows the user to quit when a 
login dialog
+    // is onscreen, which is nice in general but in particular prevents 
pathological cases
+    // like 3744583 from requiring a Force Quit.
+    //
+    // It would be nice to allow closing the individual window as well as 
quitting the app when
+    // a login sheet is up, but this _blocksActionWhenModal: mechanism doesn't 
support that.
+    // This override matches those in NSOpenPanel and NSToolbarConfigPanel.
+    if (theAction == @selector(terminate:)) {
+        return NO;
+    }
+    return YES;
+}
+
+@end

Added: trunk/bibdesk/BDSKAuthenticationHandler.h
===================================================================
--- trunk/bibdesk/BDSKAuthenticationHandler.h                           (rev 0)
+++ trunk/bibdesk/BDSKAuthenticationHandler.h   2019-07-09 17:14:13 UTC (rev 
23974)
@@ -0,0 +1,52 @@
+//
+//  BDSKAuthenticationHandler.h
+//  BibDesk
+//
+//  Created by Christiaan Hofman on 09/07/2019.
+/*
+ This software is Copyright (c) 2019
+ Christiaan Hofman. All rights reserved.
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 
+ - Neither the name of Christiaan Hofman nor the names of any
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+ 
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <Cocoa/Cocoa.h>
+#import "BDSKDownloader.h"
+
+
+@interface BDSKAuthenticationHandler : NSObject {
+    NSMapTable *controllers;
+    NSMapTable *queues;
+}
+
++ (id)sharedHandler;
+
+- (void)startAuthentication:(NSURLAuthenticationChallenge *)challenge 
window:(NSWindow *)window completionHandler:(void 
(^)(BDSKDownloaderAuthChallengeDisposition disposition, NSURLCredential 
*credential))completionHandler;
+
+@end

Added: trunk/bibdesk/BDSKAuthenticationHandler.m
===================================================================
--- trunk/bibdesk/BDSKAuthenticationHandler.m                           (rev 0)
+++ trunk/bibdesk/BDSKAuthenticationHandler.m   2019-07-09 17:14:13 UTC (rev 
23974)
@@ -0,0 +1,130 @@
+//
+//  BDSKAuthenticationHandler.m
+//  BibDesk
+//
+//  Created by Christiaan Hofman on 09/07/2019.
+/*
+ This software is Copyright (c) 2019
+ Christiaan Hofman. All rights reserved.
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 
+ - Neither the name of Christiaan Hofman nor the names of any
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+ 
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "BDSKAuthenticationHandler.h"
+#import "BDSKAuthenticationController.h"
+
+#define CHALLENGE_KEY @"challenge"
+#define COMPLETIONHANDLER_KEY @"completionHandler"
+
+@implementation BDSKAuthenticationHandler
+
++ (id)sharedHandler {
+    static BDSKAuthenticationHandler *sharedHandler = nil;
+    if (sharedHandler == nil)
+        sharedHandler = [[self alloc] init];
+    return sharedHandler;
+}
+
+- (id)init {
+    self = [super init];
+    if (self) {
+        NSPointerFunctionsOptions options = NSPointerFunctionsStrongMemory | 
NSPointerFunctionsObjectPersonality;
+        controllers = [[NSMapTable alloc] initWithKeyOptions:options 
valueOptions:options capacity:0];
+        queues = [[NSMapTable alloc] initWithKeyOptions:options 
valueOptions:options capacity:0];
+    }
+    return self;
+}
+
+
+- (void)dealloc {
+    BDSKDESTROY(controllers);
+    BDSKDESTROY(queues);
+    [super dealloc];
+}
+
+- (void)enqueueChallenge:(NSURLAuthenticationChallenge *)challenge 
forWindow:(NSWindow *)window completionHandler:(void 
(^)(BDSKDownloaderAuthChallengeDisposition disposition, NSURLCredential 
*credential))completionHandler {
+    id key = window ?: (id)[NSNull null];
+    NSMutableArray *queue = [queues objectForKey:key];
+    if (queue == nil) {
+        queue = [[NSMutableArray alloc] init];
+        [queues setObject:queue forKey:key];
+        [queue release];
+    }
+    [queue addObject:[NSDictionary dictionaryWithObjectsAndKeys:challenge, 
CHALLENGE_KEY, [[(id)completionHandler copy] autorelease], 
COMPLETIONHANDLER_KEY, nil]];
+}
+
+- (void)tryNextChallengeForWindow:(NSWindow *)window {
+    id key = window ?: (id)[NSNull null];
+    NSMutableArray *queue = [queues objectForKey:key];
+    if (queue == nil)
+        return;
+    
+    NSDictionary *challengeAndHandler = [[queue firstObject] retain];
+    [queue removeObjectAtIndex:0];
+    if ([queue count] == 0)
+        [queues removeObjectForKey:key];
+    
+    NSURLAuthenticationChallenge *challenge = [challengeAndHandler 
objectForKey:CHALLENGE_KEY];
+    void (^completionHandler)(BDSKDownloaderAuthChallengeDisposition 
disposition, NSURLCredential *credential) = [challengeAndHandler 
objectForKey:COMPLETIONHANDLER_KEY];
+    
+    NSURLCredential *latestCredential = [[NSURLCredentialStorage 
sharedCredentialStorage] defaultCredentialForProtectionSpace:[challenge 
protectionSpace]];
+    
+    if ([latestCredential hasPassword])
+        completionHandler(BDSKDownloaderAuthChallengeUseCredential, 
latestCredential);
+    else
+        [self startAuthentication:challenge window:window 
completionHandler:completionHandler];
+    
+    [challengeAndHandler release];
+}
+
+- (void)startAuthentication:(NSURLAuthenticationChallenge *)challenge 
window:(NSWindow *)window completionHandler:(void 
(^)(BDSKDownloaderAuthChallengeDisposition disposition, NSURLCredential 
*credential))completionHandler {
+    
+    if ([controllers objectForKey:window] != nil) {
+        [self enqueueChallenge:challenge forWindow:window 
completionHandler:completionHandler];
+        return;
+    }
+    
+    if ([window attachedSheet] != nil) {
+        
completionHandler(BDSKDownloaderAuthChallengeCancelAuthenticationChallenge, 
nil);
+        return;
+    }
+    
+    BDSKAuthenticationController *controller = [[BDSKAuthenticationController 
alloc] init];
+    id key = window ?: (id)[NSNull null];
+    [controllers setObject:controller forKey:key];
+    
+    [controller runAuthentication:challenge window:window 
completionHandler:^(BDSKDownloaderAuthChallengeDisposition disposition, 
NSURLCredential *credential){
+            [controllers removeObjectForKey:key];
+            completionHandler(disposition, credential);
+            [self tryNextChallengeForWindow:window];
+        }];
+    [controller release];
+}
+
+@end

Modified: trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj
===================================================================
--- trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj     2019-07-09 06:30:44 UTC 
(rev 23973)
+++ trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj     2019-07-09 17:14:13 UTC 
(rev 23974)
@@ -480,6 +480,11 @@
                CE51616D22CD4E7D00832F3E /* BDSKDownloadCommand.m in Sources */ 
= {isa = PBXBuildFile; fileRef = CE51616B22CD4E7D00832F3E /* 
BDSKDownloadCommand.m */; };
                CE51922109E5755600E97C3A /* BDSKFindFieldEditor.m in Sources */ 
= {isa = PBXBuildFile; fileRef = CE51921F09E5755600E97C3A /* 
BDSKFindFieldEditor.m */; };
                CE522F761D5CA7FE00348D7D /* BDSKDOIParser.m in Sources */ = 
{isa = PBXBuildFile; fileRef = CE522F741D5CA7FE00348D7D /* BDSKDOIParser.m */; 
};
+               CE5417CA22D4DA7700867189 /* BDSKAuthenticationHandler.h in 
Headers */ = {isa = PBXBuildFile; fileRef = CE5417C822D4DA7700867189 /* 
BDSKAuthenticationHandler.h */; };
+               CE5417CB22D4DA7700867189 /* BDSKAuthenticationHandler.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CE5417C922D4DA7700867189 /* 
BDSKAuthenticationHandler.m */; };
+               CE5417E322D4DA9500867189 /* BDSKAuthenticationController.h in 
Headers */ = {isa = PBXBuildFile; fileRef = CE5417E122D4DA9500867189 /* 
BDSKAuthenticationController.h */; };
+               CE5417E422D4DA9500867189 /* BDSKAuthenticationController.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CE5417E222D4DA9500867189 /* 
BDSKAuthenticationController.m */; };
+               CE5417E722D5020400867189 /* AuthenticationPanel.xib in 
Resources */ = {isa = PBXBuildFile; fileRef = CE5417E922D5020400867189 /* 
AuthenticationPanel.xib */; };
                CE564D260AECBA5B002F0A24 /* NSScanner_BDSKExtensions.m in 
Sources */ = {isa = PBXBuildFile; fileRef = CE564D240AECBA5B002F0A24 /* 
NSScanner_BDSKExtensions.m */; };
                CE565BC00AEF848B002F0A24 /* BDSKPublicationsArray.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = CE565BBE0AEF848B002F0A24 /* 
BDSKPublicationsArray.m */; };
                CE56D6510A2DAB55003CE000 /* BDSKDocumentController.m in Sources 
*/ = {isa = PBXBuildFile; fileRef = CE56D6500A2DAB55003CE000 /* 
BDSKDocumentController.m */; };
@@ -1443,6 +1448,13 @@
                CE51921F09E5755600E97C3A /* BDSKFindFieldEditor.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= BDSKFindFieldEditor.m; sourceTree = "<group>"; };
                CE522F731D5CA7FD00348D7D /* BDSKDOIParser.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
BDSKDOIParser.h; sourceTree = "<group>"; };
                CE522F741D5CA7FE00348D7D /* BDSKDOIParser.m */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path 
= BDSKDOIParser.m; sourceTree = "<group>"; };
+               CE5417C822D4DA7700867189 /* BDSKAuthenticationHandler.h */ = 
{isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
BDSKAuthenticationHandler.h; sourceTree = "<group>"; };
+               CE5417C922D4DA7700867189 /* BDSKAuthenticationHandler.m */ = 
{isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = 
BDSKAuthenticationHandler.m; sourceTree = "<group>"; };
+               CE5417E122D4DA9500867189 /* BDSKAuthenticationController.h */ = 
{isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 
BDSKAuthenticationController.h; sourceTree = "<group>"; };
+               CE5417E222D4DA9500867189 /* BDSKAuthenticationController.m */ = 
{isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = 
BDSKAuthenticationController.m; sourceTree = "<group>"; };
+               CE5417E822D5020400867189 /* English */ = {isa = 
PBXFileReference; lastKnownFileType = file.xib; name = English; path = 
English.lproj/AuthenticationPanel.xib; sourceTree = "<group>"; };
+               CE5417EA22D5022E00867189 /* French */ = {isa = 
PBXFileReference; lastKnownFileType = file.xib; name = French; path = 
French.lproj/AuthenticationPanel.xib; sourceTree = "<group>"; };
+               CE5417EB22D5023100867189 /* German */ = {isa = 
PBXFileReference; lastKnownFileType = file.xib; name = German; path = 
German.lproj/AuthenticationPanel.xib; sourceTree = "<group>"; };
                CE564D230AECBA5B002F0A24 /* NSScanner_BDSKExtensions.h */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; 
path = NSScanner_BDSKExtensions.h; sourceTree = "<group>"; };
                CE564D240AECBA5B002F0A24 /* NSScanner_BDSKExtensions.m */ = 
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = 
sourcecode.c.objc; path = NSScanner_BDSKExtensions.m; sourceTree = "<group>"; };
                CE565BBD0AEF848B002F0A24 /* BDSKPublicationsArray.h */ = {isa = 
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 
BDSKPublicationsArray.h; sourceTree = "<group>"; };
@@ -2268,6 +2280,7 @@
                                F9BF481E0BD69F6F0071094F /* MODS2MARC21slim.xsl 
*/,
                                F9022DDA0758089500C3F701 /* Images */,
                                CEB2A6E316401085001A9D6A /* BibDesk.help */,
+                               CE5417E922D5020400867189 /* 
AuthenticationPanel.xib */,
                                CEB5D5901072AE350001C135 /* AutoFile.xib */,
                                CEB5D5921072AE350001C135 /* 
AutoFileProgress.xib */,
                                CEB5D5961072AE350001C135 /* 
BDSKCharacterConversion.xib */,
@@ -2802,6 +2815,10 @@
                                3B91DD46162225850088206D /* 
WOKMWSAuthenticateService.m */,
                                CEBF7AE618F2EB6300012ECD /* 
WokSearchLiteService.m */,
                                3B91DD48162225850088206D /* WokSearchService.m 
*/,
+                               CE5417C822D4DA7700867189 /* 
BDSKAuthenticationHandler.h */,
+                               CE5417C922D4DA7700867189 /* 
BDSKAuthenticationHandler.m */,
+                               CE5417E122D4DA9500867189 /* 
BDSKAuthenticationController.h */,
+                               CE5417E222D4DA9500867189 /* 
BDSKAuthenticationController.m */,
                        );
                        name = Networking;
                        sourceTree = "<group>";
@@ -3380,6 +3397,7 @@
                                CE2A0AC222459A4B00A8F31C /* html2tex.h in 
Headers */,
                                CE2A09D8224599B300A8F31C /* 
BDSKCondition+Scripting.h in Headers */,
                                CE2A0A1D224599EF00A8F31C /* 
BDSKISIGroupServer.h in Headers */,
+                               CE5417CA22D4DA7700867189 /* 
BDSKAuthenticationHandler.h in Headers */,
                                CE2A0AE822459A5100A8F31C /* 
NSWindowController_BDSKExtensions.h in Headers */,
                                CE2A0A44224599F600A8F31C /* 
BDSKPreferencePane.h in Headers */,
                                CE2A0AED22459A5100A8F31C /* 
WOKMWSAuthenticateService.h in Headers */,
@@ -3584,6 +3602,7 @@
                                CE2A0ABB22459A4500A8F31C /* BibPref_Files.h in 
Headers */,
                                CE2A09FD224599E100A8F31C /* BDSKFilePathCell.h 
in Headers */,
                                CE2A0A52224599F600A8F31C /* BDSKReferParser.h 
in Headers */,
+                               CE5417E322D4DA9500867189 /* 
BDSKAuthenticationController.h in Headers */,
                                CE2A0A03224599E900A8F31C /* BDSKFilter.h in 
Headers */,
                                CE2A0A9622459A3600A8F31C /* 
BDSKTypeSelectHelper.h in Headers */,
                                CE2A09D6224599B300A8F31C /* 
BDSKComplexStringFormatter.h in Headers */,
@@ -4068,6 +4087,7 @@
                                CEB5D62B1072AE360001C135 /* BibPref_Sharing.xib 
in Resources */,
                                CEB5D62C1072AE360001C135 /* BibPref_TeX.xib in 
Resources */,
                                CEB5D62F1072AE360001C135 /* BookmarksWindow.xib 
in Resources */,
+                               CE5417E722D5020400867189 /* 
AuthenticationPanel.xib in Resources */,
                                CEB5D6321072AE360001C135 /* 
ComplexStringEditor.xib in Resources */,
                                CEB5D6331072AE360001C135 /* 
DocumentInfoWindow.xib in Resources */,
                                CEB5D6341072AE360001C135 /* FileMatcher.xib in 
Resources */,
@@ -4279,6 +4299,7 @@
                                3D7406940849F5430081EC6F /* 
BDSKTypeNameFormatter.m in Sources */,
                                F97965F2086909EA00050427 /* 
BDSKFindController.m in Sources */,
                                CEEA1C1D2279947900323BB6 /* BDSKAppleScript.m 
in Sources */,
+                               CE5417E422D4DA9500867189 /* 
BDSKAuthenticationController.m in Sources */,
                                F95CC0C3087F5378002C5694 /* 
NSFileManager_BDSKExtensions.m in Sources */,
                                F9E0BCB40895ACC9005E5FAA /* BibPref_Display.m 
in Sources */,
                                F923501A089A813E00EFEB06 /* 
NSDate_BDSKExtensions.m in Sources */,
@@ -4343,6 +4364,7 @@
                                F92ECBF509DF09DA00A244D0 /* 
BDSKPasswordController.m in Sources */,
                                CE6FB32309DFFCB5005E3E14 /* 
BDSKSharingBrowser.m in Sources */,
                                F92ED7CD09E0A93400A244D0 /* BDSKSharingServer.m 
in Sources */,
+                               CE5417CB22D4DA7700867189 /* 
BDSKAuthenticationHandler.m in Sources */,
                                CE51922109E5755600E97C3A /* 
BDSKFindFieldEditor.m in Sources */,
                                CE4476DC2128907100DF38E1 /* 
DOMNode_BDSKExtensions.m in Sources */,
                                F92EF32309E6242200A244D0 /* BDSKSharedGroup.m 
in Sources */,
@@ -4681,6 +4703,16 @@
                        name = BDSKOpenAccessoryView.xib;
                        sourceTree = "<group>";
                };
+               CE5417E922D5020400867189 /* AuthenticationPanel.xib */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               CE5417E822D5020400867189 /* English */,
+                               CE5417EA22D5022E00867189 /* French */,
+                               CE5417EB22D5023100867189 /* German */,
+                       );
+                       name = AuthenticationPanel.xib;
+                       sourceTree = "<group>";
+               };
                CE8962C40CBEC0C500EA2D98 /* TemplateOptions.strings */ = {
                        isa = PBXVariantGroup;
                        children = (

Added: trunk/bibdesk/English.lproj/AuthenticationPanel.xib
===================================================================
--- trunk/bibdesk/English.lproj/AuthenticationPanel.xib                         
(rev 0)
+++ trunk/bibdesk/English.lproj/AuthenticationPanel.xib 2019-07-09 17:14:13 UTC 
(rev 23974)
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" 
toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" 
propertyAccessControl="none" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <development version="8000" identifier="xcode"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" 
version="14490.70"/>
+        <capability name="documents saved in the Xcode 8 format" 
minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" 
customClass="BDSKAuthenticationController">
+            <connections>
+                <outlet property="passwordField" destination="Om9-Im-2TW" 
id="pG8-uY-Mx7"/>
+                <outlet property="rememberButton" destination="2eC-R6-U73" 
id="90L-9M-pGg"/>
+                <outlet property="smallLabelField" destination="R3d-dh-gcc" 
id="2DR-Xc-Fpg"/>
+                <outlet property="userField" destination="Ioj-IC-CtL" 
id="ImA-cf-RiG"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" 
customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Log In" allowsToolTipsWhenApplicationIsInactive="NO" 
autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" 
frameAutosaveName="" animationBehavior="default" id="34K-tn-3nf" 
customClass="BDSKNonBlockingPanel">
+            <windowStyleMask key="styleMask" titled="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" 
rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="93" y="112" width="423" height="231"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/>
+            <view key="contentView" id="6Qo-QZ-gQo">
+                <rect key="frame" x="0.0" y="0.0" width="423" height="231"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <textField verticalHuggingPriority="750" tag="1" 
id="Z62-kH-PWf">
+                        <rect key="frame" x="103" y="177" width="303" 
height="34"/>
+                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" flexibleMinY="YES"/>
+                        <textFieldCell key="cell" selectable="YES" 
sendsActionOnEndEditing="YES" alignment="left" tag="1" id="0hw-ga-Kc9">
+                            <font key="font" metaFont="system"/>
+                            <string key="title">To view this page, you need to 
log in to area “Some Realm” on www.server.com.
+..</string>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField verticalHuggingPriority="750" tag="2" 
id="R3d-dh-gcc">
+                        <rect key="frame" x="102" y="155" width="301" 
height="14"/>
+                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" selectable="YES" 
sendsActionOnEndEditing="YES" alignment="left" tag="2" title="Your password 
will be sent in the clear." id="81I-Nc-uVR">
+                            <font key="font" metaFont="smallSystem"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <button verticalHuggingPriority="750" tag="1" 
imageHugsTitle="YES" id="Qvu-ig-u2f">
+                        <rect key="frame" x="327" y="13" width="82" 
height="32"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMinX="YES" flexibleMaxY="YES"/>
+                        <buttonCell key="cell" type="push" title="Log In" 
bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" 
id="WG6-ms-PkY">
+                            <behavior key="behavior" pushIn="YES" 
lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="dismiss:" target="-2" 
id="4nU-2m-4Z0"/>
+                            <outlet property="nextKeyView" 
destination="Ioj-IC-CtL" id="Y8I-mu-3HM"/>
+                        </connections>
+                    </button>
+                    <textField verticalHuggingPriority="750" tag="3" 
id="Ioj-IC-CtL">
+                        <rect key="frame" x="176" y="125" width="227" 
height="22"/>
+                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" scrollable="YES" 
lineBreakMode="clipping" selectable="YES" editable="YES" 
sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" 
tag="3" drawsBackground="YES" id="7ef-3v-MIR">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" 
name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                        <connections>
+                            <outlet property="nextKeyView" 
destination="Om9-Im-2TW" id="bJf-u9-m6y"/>
+                        </connections>
+                    </textField>
+                    <textField verticalHuggingPriority="750" tag="4" 
id="Om9-Im-2TW" customClass="NSSecureTextField">
+                        <rect key="frame" x="176" y="95" width="227" 
height="22"/>
+                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" scrollable="YES" 
lineBreakMode="clipping" selectable="YES" editable="YES" 
sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" 
tag="4" drawsBackground="YES" id="u0B-cr-Qpt">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" 
name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                        <connections>
+                            <outlet property="nextKeyView" 
destination="2eC-R6-U73" id="Cke-tF-JZu"/>
+                        </connections>
+                    </textField>
+                    <textField verticalHuggingPriority="750" id="GI1-1a-b2o">
+                        <rect key="frame" x="125" y="128" width="45" 
height="17"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" 
sendsActionOnEndEditing="YES" alignment="right" title="Name:" id="pHU-K5-AZk">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField verticalHuggingPriority="750" id="YEw-eC-7Qe">
+                        <rect key="frame" x="102" y="98" width="68" 
height="17"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" 
sendsActionOnEndEditing="YES" alignment="right" title="Password:" 
id="4UH-eB-l4J">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <imageView id="E1I-PS-KYN">
+                        <rect key="frame" x="20" y="147" width="64" 
height="64"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <imageCell key="cell" refusesFirstResponder="YES" 
alignment="left" imageScaling="proportionallyDown" image="NSApplicationIcon" 
id="7n0-nd-T2u"/>
+                    </imageView>
+                    <button imageHugsTitle="YES" id="2eC-R6-U73">
+                        <rect key="frame" x="100" y="59" width="280" 
height="18"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <buttonCell key="cell" type="check" title="Remember 
this password in my keychain" bezelStyle="regularSquare" imagePosition="left" 
alignment="left" inset="2" id="m6e-0n-lXR">
+                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                            <font key="font" metaFont="system"/>
+                        </buttonCell>
+                        <connections>
+                            <outlet property="nextKeyView" 
destination="hsa-v5-1WN" id="P6r-lk-sHn"/>
+                        </connections>
+                    </button>
+                    <button verticalHuggingPriority="750" imageHugsTitle="YES" 
id="hsa-v5-1WN">
+                        <rect key="frame" x="245" y="13" width="82" 
height="32"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMinX="YES" flexibleMaxY="YES"/>
+                        <buttonCell key="cell" type="push" title="Cancel" 
bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" 
id="I2L-Go-Ine">
+                            <behavior key="behavior" pushIn="YES" 
lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="dismiss:" target="-2" 
id="PGM-KA-CaJ"/>
+                            <outlet property="nextKeyView" 
destination="Qvu-ig-u2f" id="QEn-89-K2U"/>
+                        </connections>
+                    </button>
+                </subviews>
+            </view>
+            <point key="canvasLocation" x="322.5" y="-224.5"/>
+        </window>
+    </objects>
+    <resources>
+        <image name="NSApplicationIcon" width="32" height="32"/>
+    </resources>
+</document>

Added: trunk/bibdesk/French.lproj/AuthenticationPanel.xib
===================================================================
--- trunk/bibdesk/French.lproj/AuthenticationPanel.xib                          
(rev 0)
+++ trunk/bibdesk/French.lproj/AuthenticationPanel.xib  2019-07-09 17:14:13 UTC 
(rev 23974)
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" 
toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" 
propertyAccessControl="none" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <development version="8000" identifier="xcode"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" 
version="14490.70"/>
+        <capability name="documents saved in the Xcode 8 format" 
minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" 
customClass="BDSKAuthenticationController">
+            <connections>
+                <outlet property="passwordField" destination="Om9-Im-2TW" 
id="pG8-uY-Mx7"/>
+                <outlet property="rememberButton" destination="2eC-R6-U73" 
id="90L-9M-pGg"/>
+                <outlet property="smallLabelField" destination="R3d-dh-gcc" 
id="2DR-Xc-Fpg"/>
+                <outlet property="userField" destination="Ioj-IC-CtL" 
id="ImA-cf-RiG"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" 
customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Log In" allowsToolTipsWhenApplicationIsInactive="NO" 
autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" 
frameAutosaveName="" animationBehavior="default" id="34K-tn-3nf" 
customClass="BDSKNonBlockingPanel">
+            <windowStyleMask key="styleMask" titled="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" 
rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="93" y="112" width="423" height="231"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/>
+            <view key="contentView" id="6Qo-QZ-gQo">
+                <rect key="frame" x="0.0" y="0.0" width="423" height="231"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <textField verticalHuggingPriority="750" tag="1" 
id="Z62-kH-PWf">
+                        <rect key="frame" x="103" y="177" width="303" 
height="34"/>
+                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" flexibleMinY="YES"/>
+                        <textFieldCell key="cell" selectable="YES" 
sendsActionOnEndEditing="YES" alignment="left" tag="1" id="0hw-ga-Kc9">
+                            <font key="font" metaFont="system"/>
+                            <string key="title">To view this page, you need to 
log in to area “Some Realm” on www.server.com.
+..</string>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField verticalHuggingPriority="750" tag="2" 
id="R3d-dh-gcc">
+                        <rect key="frame" x="102" y="155" width="301" 
height="14"/>
+                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" selectable="YES" 
sendsActionOnEndEditing="YES" alignment="left" tag="2" title="Your password 
will be sent in the clear." id="81I-Nc-uVR">
+                            <font key="font" metaFont="smallSystem"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <button verticalHuggingPriority="750" tag="1" 
imageHugsTitle="YES" id="Qvu-ig-u2f">
+                        <rect key="frame" x="327" y="13" width="82" 
height="32"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMinX="YES" flexibleMaxY="YES"/>
+                        <buttonCell key="cell" type="push" title="Log In" 
bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" 
id="WG6-ms-PkY">
+                            <behavior key="behavior" pushIn="YES" 
lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="dismiss:" target="-2" 
id="4nU-2m-4Z0"/>
+                            <outlet property="nextKeyView" 
destination="Ioj-IC-CtL" id="Y8I-mu-3HM"/>
+                        </connections>
+                    </button>
+                    <textField verticalHuggingPriority="750" tag="3" 
id="Ioj-IC-CtL">
+                        <rect key="frame" x="176" y="125" width="227" 
height="22"/>
+                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" scrollable="YES" 
lineBreakMode="clipping" selectable="YES" editable="YES" 
sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" 
tag="3" drawsBackground="YES" id="7ef-3v-MIR">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" 
name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                        <connections>
+                            <outlet property="nextKeyView" 
destination="Om9-Im-2TW" id="bJf-u9-m6y"/>
+                        </connections>
+                    </textField>
+                    <textField verticalHuggingPriority="750" tag="4" 
id="Om9-Im-2TW" customClass="NSSecureTextField">
+                        <rect key="frame" x="176" y="95" width="227" 
height="22"/>
+                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" scrollable="YES" 
lineBreakMode="clipping" selectable="YES" editable="YES" 
sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" 
tag="4" drawsBackground="YES" id="u0B-cr-Qpt">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" 
name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                        <connections>
+                            <outlet property="nextKeyView" 
destination="2eC-R6-U73" id="Cke-tF-JZu"/>
+                        </connections>
+                    </textField>
+                    <textField verticalHuggingPriority="750" id="GI1-1a-b2o">
+                        <rect key="frame" x="125" y="128" width="45" 
height="17"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" 
sendsActionOnEndEditing="YES" alignment="right" title="Name:" id="pHU-K5-AZk">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField verticalHuggingPriority="750" id="YEw-eC-7Qe">
+                        <rect key="frame" x="102" y="98" width="68" 
height="17"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" 
sendsActionOnEndEditing="YES" alignment="right" title="Password:" 
id="4UH-eB-l4J">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <imageView id="E1I-PS-KYN">
+                        <rect key="frame" x="20" y="147" width="64" 
height="64"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <imageCell key="cell" refusesFirstResponder="YES" 
alignment="left" imageScaling="proportionallyDown" image="NSApplicationIcon" 
id="7n0-nd-T2u"/>
+                    </imageView>
+                    <button imageHugsTitle="YES" id="2eC-R6-U73">
+                        <rect key="frame" x="100" y="59" width="280" 
height="18"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <buttonCell key="cell" type="check" title="Remember 
this password in my keychain" bezelStyle="regularSquare" imagePosition="left" 
alignment="left" inset="2" id="m6e-0n-lXR">
+                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                            <font key="font" metaFont="system"/>
+                        </buttonCell>
+                        <connections>
+                            <outlet property="nextKeyView" 
destination="hsa-v5-1WN" id="P6r-lk-sHn"/>
+                        </connections>
+                    </button>
+                    <button verticalHuggingPriority="750" imageHugsTitle="YES" 
id="hsa-v5-1WN">
+                        <rect key="frame" x="245" y="13" width="82" 
height="32"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMinX="YES" flexibleMaxY="YES"/>
+                        <buttonCell key="cell" type="push" title="Cancel" 
bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" 
id="I2L-Go-Ine">
+                            <behavior key="behavior" pushIn="YES" 
lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="dismiss:" target="-2" 
id="PGM-KA-CaJ"/>
+                            <outlet property="nextKeyView" 
destination="Qvu-ig-u2f" id="QEn-89-K2U"/>
+                        </connections>
+                    </button>
+                </subviews>
+            </view>
+            <point key="canvasLocation" x="322.5" y="-224.5"/>
+        </window>
+    </objects>
+    <resources>
+        <image name="NSApplicationIcon" width="32" height="32"/>
+    </resources>
+</document>

Added: trunk/bibdesk/German.lproj/AuthenticationPanel.xib
===================================================================
--- trunk/bibdesk/German.lproj/AuthenticationPanel.xib                          
(rev 0)
+++ trunk/bibdesk/German.lproj/AuthenticationPanel.xib  2019-07-09 17:14:13 UTC 
(rev 23974)
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" 
toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" 
propertyAccessControl="none" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <development version="8000" identifier="xcode"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" 
version="14490.70"/>
+        <capability name="documents saved in the Xcode 8 format" 
minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" 
customClass="BDSKAuthenticationController">
+            <connections>
+                <outlet property="passwordField" destination="Om9-Im-2TW" 
id="pG8-uY-Mx7"/>
+                <outlet property="rememberButton" destination="2eC-R6-U73" 
id="90L-9M-pGg"/>
+                <outlet property="smallLabelField" destination="R3d-dh-gcc" 
id="2DR-Xc-Fpg"/>
+                <outlet property="userField" destination="Ioj-IC-CtL" 
id="ImA-cf-RiG"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" 
customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Log In" allowsToolTipsWhenApplicationIsInactive="NO" 
autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" 
frameAutosaveName="" animationBehavior="default" id="34K-tn-3nf" 
customClass="BDSKNonBlockingPanel">
+            <windowStyleMask key="styleMask" titled="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" 
rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="93" y="112" width="423" height="231"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/>
+            <view key="contentView" id="6Qo-QZ-gQo">
+                <rect key="frame" x="0.0" y="0.0" width="423" height="231"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <textField verticalHuggingPriority="750" tag="1" 
id="Z62-kH-PWf">
+                        <rect key="frame" x="103" y="177" width="303" 
height="34"/>
+                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" flexibleMinY="YES"/>
+                        <textFieldCell key="cell" selectable="YES" 
sendsActionOnEndEditing="YES" alignment="left" tag="1" id="0hw-ga-Kc9">
+                            <font key="font" metaFont="system"/>
+                            <string key="title">To view this page, you need to 
log in to area “Some Realm” on www.server.com.
+..</string>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField verticalHuggingPriority="750" tag="2" 
id="R3d-dh-gcc">
+                        <rect key="frame" x="102" y="155" width="301" 
height="14"/>
+                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" selectable="YES" 
sendsActionOnEndEditing="YES" alignment="left" tag="2" title="Your password 
will be sent in the clear." id="81I-Nc-uVR">
+                            <font key="font" metaFont="smallSystem"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <button verticalHuggingPriority="750" tag="1" 
imageHugsTitle="YES" id="Qvu-ig-u2f">
+                        <rect key="frame" x="327" y="13" width="82" 
height="32"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMinX="YES" flexibleMaxY="YES"/>
+                        <buttonCell key="cell" type="push" title="Log In" 
bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" 
id="WG6-ms-PkY">
+                            <behavior key="behavior" pushIn="YES" 
lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="dismiss:" target="-2" 
id="4nU-2m-4Z0"/>
+                            <outlet property="nextKeyView" 
destination="Ioj-IC-CtL" id="Y8I-mu-3HM"/>
+                        </connections>
+                    </button>
+                    <textField verticalHuggingPriority="750" tag="3" 
id="Ioj-IC-CtL">
+                        <rect key="frame" x="176" y="125" width="227" 
height="22"/>
+                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" scrollable="YES" 
lineBreakMode="clipping" selectable="YES" editable="YES" 
sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" 
tag="3" drawsBackground="YES" id="7ef-3v-MIR">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" 
name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                        <connections>
+                            <outlet property="nextKeyView" 
destination="Om9-Im-2TW" id="bJf-u9-m6y"/>
+                        </connections>
+                    </textField>
+                    <textField verticalHuggingPriority="750" tag="4" 
id="Om9-Im-2TW" customClass="NSSecureTextField">
+                        <rect key="frame" x="176" y="95" width="227" 
height="22"/>
+                        <autoresizingMask key="autoresizingMask" 
widthSizable="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" scrollable="YES" 
lineBreakMode="clipping" selectable="YES" editable="YES" 
sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" 
tag="4" drawsBackground="YES" id="u0B-cr-Qpt">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" 
name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                        <connections>
+                            <outlet property="nextKeyView" 
destination="2eC-R6-U73" id="Cke-tF-JZu"/>
+                        </connections>
+                    </textField>
+                    <textField verticalHuggingPriority="750" id="GI1-1a-b2o">
+                        <rect key="frame" x="125" y="128" width="45" 
height="17"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" 
sendsActionOnEndEditing="YES" alignment="right" title="Name:" id="pHU-K5-AZk">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField verticalHuggingPriority="750" id="YEw-eC-7Qe">
+                        <rect key="frame" x="102" y="98" width="68" 
height="17"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <textFieldCell key="cell" 
sendsActionOnEndEditing="YES" alignment="right" title="Password:" 
id="4UH-eB-l4J">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="controlTextColor" 
catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" 
catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <imageView id="E1I-PS-KYN">
+                        <rect key="frame" x="20" y="147" width="64" 
height="64"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <imageCell key="cell" refusesFirstResponder="YES" 
alignment="left" imageScaling="proportionallyDown" image="NSApplicationIcon" 
id="7n0-nd-T2u"/>
+                    </imageView>
+                    <button imageHugsTitle="YES" id="2eC-R6-U73">
+                        <rect key="frame" x="100" y="59" width="280" 
height="18"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMaxX="YES" flexibleMaxY="YES"/>
+                        <buttonCell key="cell" type="check" title="Remember 
this password in my keychain" bezelStyle="regularSquare" imagePosition="left" 
alignment="left" inset="2" id="m6e-0n-lXR">
+                            <behavior key="behavior" changeContents="YES" 
doesNotDimImage="YES" lightByContents="YES"/>
+                            <font key="font" metaFont="system"/>
+                        </buttonCell>
+                        <connections>
+                            <outlet property="nextKeyView" 
destination="hsa-v5-1WN" id="P6r-lk-sHn"/>
+                        </connections>
+                    </button>
+                    <button verticalHuggingPriority="750" imageHugsTitle="YES" 
id="hsa-v5-1WN">
+                        <rect key="frame" x="245" y="13" width="82" 
height="32"/>
+                        <autoresizingMask key="autoresizingMask" 
flexibleMinX="YES" flexibleMaxY="YES"/>
+                        <buttonCell key="cell" type="push" title="Cancel" 
bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" 
id="I2L-Go-Ine">
+                            <behavior key="behavior" pushIn="YES" 
lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="dismiss:" target="-2" 
id="PGM-KA-CaJ"/>
+                            <outlet property="nextKeyView" 
destination="Qvu-ig-u2f" id="QEn-89-K2U"/>
+                        </connections>
+                    </button>
+                </subviews>
+            </view>
+            <point key="canvasLocation" x="322.5" y="-224.5"/>
+        </window>
+    </objects>
+    <resources>
+        <image name="NSApplicationIcon" width="32" height="32"/>
+    </resources>
+</document>

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

Reply via email to