From 4b6ae085fceed8ffa553d805c47857d526c33d3d Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Mon, 4 Mar 2013 18:22:36 -0700 Subject: [PATCH] Add auto-refresh and userscript options --- ConfigureSheet.nib/designable.nib | 627 ++++++++++++++++++++++++++-- ConfigureSheet.nib/keyedobjects.nib | Bin 4818 -> 13139 bytes Info.plist | 2 +- README.md | 2 +- WebSaver.xcodeproj/project.pbxproj | 18 +- WebSaverView.h | 15 +- WebSaverView.m | 123 +++++- index.html | 140 ------- 8 files changed, 725 insertions(+), 202 deletions(-) delete mode 100644 index.html diff --git a/ConfigureSheet.nib/designable.nib b/ConfigureSheet.nib/designable.nib index c6bac2b..4d2f67d 100644 --- a/ConfigureSheet.nib/designable.nib +++ b/ConfigureSheet.nib/designable.nib @@ -2,22 +2,31 @@ 1070 - 11E53 - 2182 - 1138.47 + 11G56 + 3084 + 1138.51 569.00 com.apple.InterfaceBuilder.CocoaPlugin - 2182 + 3084 + NSButton + NSButtonCell + NSCustomObject + NSMenu + NSMenuItem + NSNumberFormatter + NSPopUpButton + NSPopUpButtonCell + NSScrollView + NSScroller NSTextField + NSTextFieldCell + NSTextView + NSUserDefaultsController NSView NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSButton - NSCustomObject com.apple.InterfaceBuilder.CocoaPlugin @@ -39,7 +48,7 @@ 3 2 - {{220, 283}, {373, 125}} + {{220, 283}, {373, 425}} 1886912512 NSPanel @@ -54,7 +63,7 @@ - 256 + 289 {{275, 12}, {84, 32}} @@ -85,7 +94,7 @@ - 256 + 289 {{191, 12}, {84, 32}} @@ -108,8 +117,8 @@ - 256 - {{17, 88}, {29, 17}} + 268 + {{17, 388}, {29, 17}} @@ -120,16 +129,16 @@ URL - + 6 System controlColor - + 3 MC42NjY2NjY2NjY3AA - + 6 System controlTextColor @@ -140,13 +149,49 @@ - + + + 268 + {{17, 333}, {87, 17}} + + + + YES + + 67239424 + 4194304 + Auto-refresh + + + + + + + 268 - {{20, 58}, {333, 22}} + {{17, 278}, {73, 17}} - + + YES + + 67239424 + 4194304 + User Script + + + + + + + + + 266 + {{20, 358}, {333, 22}} + + + YES -1804468671 @@ -155,16 +200,16 @@ YES - + 6 System textBackgroundColor - + 3 MQA - + 6 System textColor @@ -172,13 +217,316 @@ + + + 274 + + + + 2304 + + + + 2322 + + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + Apple URL pasteboard type + CorePasteboardFlavorType 0x6D6F6F76 + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + NeXT font pasteboard type + NeXT ruler pasteboard type + WebURLsWithTitlesPboardType + public.url + + {316, 208} + + + + + + + + + + + + + + + 166 + + + + 316 + 1 + + + 67121123 + 0 + + + + + 6 + System + selectedTextBackgroundColor + + + + 6 + System + selectedTextColor + + + + + + + 1 + MCAwIDEAA + + + {8, -8} + 13 + + + + + + 1 + + 6 + {463, 10000000} + {223, 0} + + + + {{1, 1}, {316, 208}} + + + + _NS:11 + + + + {4, 5} + + 79691776 + + + + + + file://localhost/Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Resources/DVTIbeamCursor.tiff + + + + + 3 + MCAwAA + + + + 4 + + + + 256 + {{317, 1}, {15, 208}} + + + + + _doScroller: + 1 + 0.85256409645080566 + + + + -2147483392 + {{-100, -100}, {87, 18}} + + + + 1 + + _doScroller: + 1 + 0.94565218687057495 + + + {{20, 60}, {333, 210}} + + + + 133138 + + + + + + + 268 + {{107, 300}, {106, 26}} + + + + YES + + -2076049856 + 2048 + + + 109199360 + 129 + + + 400 + 75 + + YES + + OtherViews + + + + Disable + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + + + Seconds + + 1048576 + 2147483647 + + + _popUpItemAction: + 1 + + + + + Minutes + + 1048576 + 2147483647 + + + _popUpItemAction: + 2 + + + + + Hours + + 1048576 + 2147483647 + + + _popUpItemAction: + 3 + + + + + + -1 + 1 + YES + YES + 2 + + + + + 268 + {{20, 303}, {82, 22}} + + + + YES + + -1267728319 + 272630784 + + + + + + -∞ + + + +∞ + + #,##0.### + #,##0.### + + + + + + + + NaN + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + 3 + YES + YES + YES + + . + , + YES + YES + YES + + + YES + + + + - {373, 125} + {373, 425} - {{0, 0}, {1680, 1028}} + {{0, 0}, {2560, 1578}} {213, 129} {10000000000000, 10000000000000} YES @@ -188,6 +536,10 @@ 256 {222, 1} + + + + YES @@ -222,7 +574,39 @@ - 57 + 141 + + + + refreshInterval + + + + 142 + + + + refreshUnits + + + + 143 + + + + userScript + + + + 144 + + + + changeRefreshUnits: + + + + 145 @@ -266,10 +650,15 @@ 18 - + + + + + + @@ -336,12 +725,145 @@ + + 85 + + + + + + + + + + 86 + + + + + 87 + + + + + 88 + + + + + 90 + + + + + + + + 91 + + + + + 92 + + + + + + + + 93 + + + + + + + + 94 + + + + + + + + + + + 95 + + + + + 96 + + + + + 97 + + + + + 104 + + + + + + + + 105 + + + + + + + + 106 + + + + + 113 + + + + + 115 + + + + + + + + 116 + + + + + 120 + + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -352,13 +874,30 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - 57 + 145 @@ -373,18 +912,44 @@ WebSaverView ScreenSaverView + + changeRefreshUnits: + id + + + changeRefreshUnits: + + changeRefreshUnits: + id + + id - id + NSTextField + NSPopUpButton + NSTextField + NSTextView configSheet id + + refreshInterval + NSTextField + + + refreshUnits + NSPopUpButton + url - id + NSTextField + + + userScript + NSTextView @@ -402,5 +967,9 @@ YES 3 + + {11, 11} + {10, 3} + diff --git a/ConfigureSheet.nib/keyedobjects.nib b/ConfigureSheet.nib/keyedobjects.nib index df1c22d724bf226a64373879214b302b3118785b..535b4a4d77f6da6fc3563dd1dd0aa65abf5241b0 100644 GIT binary patch literal 13139 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 delta 3187 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 CFBundleIdentifier - com.github.gaohao.WebSaver + com.github.tlrobinson.WebSaver CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType diff --git a/README.md b/README.md index 99cec2d..c0a92a2 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Notes License ------- -Copyright (c) 2009, Thomas Robinson +Copyright (c) 2013, Thomas Robinson Copyright (c) 2012, Senseg Ltd All rights reserved. diff --git a/WebSaver.xcodeproj/project.pbxproj b/WebSaver.xcodeproj/project.pbxproj index 59a4db7..d42be0c 100644 --- a/WebSaver.xcodeproj/project.pbxproj +++ b/WebSaver.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 4D856DCE10845D98006C781A /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D856DCD10845D98006C781A /* WebKit.framework */; }; - 4D856DF31084601E006C781A /* index.html in Resources */ = {isa = PBXBuildFile; fileRef = 4D856DF21084601E006C781A /* index.html */; }; 8D255AC70486D3F9007BF209 /* WebSaver_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 32DBCFA80370C50100C91783 /* WebSaver_Prefix.pch */; }; 8D255AC80486D3F9007BF209 /* WebSaverView.h in Headers */ = {isa = PBXBuildFile; fileRef = F50079790118B23001CA0E54 /* WebSaverView.h */; }; 8D255ACA0486D3F9007BF209 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; @@ -26,9 +25,8 @@ 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 32DBCFA80370C50100C91783 /* WebSaver_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSaver_Prefix.pch; sourceTree = ""; }; 4D856DCD10845D98006C781A /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = ""; }; - 4D856DF21084601E006C781A /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; 8D255AD20486D3F9007BF209 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - 8D255AD30486D3F9007BF209 /* GitWeb.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GitWeb.saver; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D255AD30486D3F9007BF209 /* Web.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Web.saver; sourceTree = BUILT_PRODUCTS_DIR; }; EA4A502A1563C91F005E4CCA /* ConfigureSheet.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; path = ConfigureSheet.nib; sourceTree = ""; }; F50079790118B23001CA0E54 /* WebSaverView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSaverView.h; sourceTree = ""; }; F500797A0118B23001CA0E54 /* WebSaverView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WebSaverView.m; sourceTree = ""; }; @@ -73,7 +71,6 @@ isa = PBXGroup; children = ( EA4A502A1563C91F005E4CCA /* ConfigureSheet.nib */, - 4D856DF21084601E006C781A /* index.html */, 8D255AD20486D3F9007BF209 /* Info.plist */, 089C167DFE841241C02AAC07 /* InfoPlist.strings */, ); @@ -111,7 +108,7 @@ 19C28FB8FE9D52D311CA2CBB /* Products */ = { isa = PBXGroup; children = ( - 8D255AD30486D3F9007BF209 /* GitWeb.saver */, + 8D255AD30486D3F9007BF209 /* Web.saver */, ); name = Products; sourceTree = ""; @@ -156,7 +153,7 @@ name = Web; productInstallPath = "$(HOME)/Library/Screen Savers"; productName = WebSaver; - productReference = 8D255AD30486D3F9007BF209 /* GitWeb.saver */; + productReference = 8D255AD30486D3F9007BF209 /* Web.saver */; productType = "com.apple.product-type.bundle"; }; /* End PBXNativeTarget section */ @@ -189,7 +186,6 @@ buildActionMask = 2147483647; files = ( 8D255ACA0486D3F9007BF209 /* InfoPlist.strings in Resources */, - 4D856DF31084601E006C781A /* index.html in Resources */, EA4A502B1563C91F005E4CCA /* ConfigureSheet.nib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -240,7 +236,7 @@ GCC_PREFIX_HEADER = WebSaver_Prefix.pch; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Library/Screen Savers"; - PRODUCT_NAME = GitWeb; + PRODUCT_NAME = Web; WRAPPER_EXTENSION = saver; ZERO_LINK = YES; }; @@ -256,7 +252,7 @@ GCC_PREFIX_HEADER = WebSaver_Prefix.pch; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Library/Screen Savers"; - PRODUCT_NAME = GitWeb; + PRODUCT_NAME = Web; WRAPPER_EXTENSION = saver; }; name = Release; @@ -274,7 +270,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.8; ONLY_ACTIVE_ARCH = NO; PUBLIC_HEADERS_FOLDER_PATH = Info.plist; - SDKROOT = macosx; + SDKROOT = macosx10.7; }; name = Debug; }; @@ -290,7 +286,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.8; ONLY_ACTIVE_ARCH = NO; PUBLIC_HEADERS_FOLDER_PATH = Info.plist; - SDKROOT = macosx; + SDKROOT = macosx10.7; }; name = Release; }; diff --git a/WebSaverView.h b/WebSaverView.h index 1262784..3e1dc35 100644 --- a/WebSaverView.h +++ b/WebSaverView.h @@ -4,7 +4,7 @@ // // Created by Thomas Robinson on 10/13/09. // Modified by Pekka Nikander in May 2012. -// Copyright (c) 2009, 280 North. All rights reserved. +// Copyright (c) 2013, Thomas Robinson. All rights reserved. // Copyright (c) 2012, Senseg. All rights reserved. // @@ -15,8 +15,19 @@ @interface WebSaverView : ScreenSaverView { IBOutlet id configSheet; - IBOutlet id url; + + IBOutlet NSTextField *url; + IBOutlet NSTextView *userScript; + IBOutlet NSTextField *refreshInterval; + IBOutlet NSPopUpButton *refreshUnits; + + ScreenSaverDefaults *defaults; WebView *webView; + NSTimer *refreshTimer; } +- (void)loadWebView; + +- (IBAction)changeRefreshUnits:(id)sender; + @end diff --git a/WebSaverView.m b/WebSaverView.m index 77d7cd8..9cd6206 100644 --- a/WebSaverView.m +++ b/WebSaverView.m @@ -4,7 +4,7 @@ // // Created by Thomas Robinson on 10/13/09. // Modified by Pekka Nikander in May 2012. -// Copyright (c) 2009, 280 North. All rights reserved. +// Copyright (c) 2013, Thomas Robinson. All rights reserved. // Copyright (c) 2012, Senseg. All rights reserved. // @@ -12,25 +12,45 @@ #import +#define REFRESH_DISABLED 0 +#define REFRESH_SECONDS 1 +#define REFRESH_MINUTES 2 +#define REFRESH_HOURS 3 + @implementation WebSaverView -static NSString * const ModuleName = @"com.github.gaohao.WebSaver"; -static NSString * const DefaultURL = @"https://github.com/gaohao/"; +static NSString * const ModuleName = @"com.github.tlrobinson.WebSaver"; + +static NSString * const URL_KEY = @"URL"; +static NSString * const USERSCRIPT_KEY = @"UserScript"; +static NSString * const REFRESH_INTERVAL_KEY = @"RefreshInterval"; +static NSString * const REFRESH_UNITS_KEY = @"RefreshUnits"; + +static NSString * const DEFAULT_URL = @"https://github.com/tlrobinson/WebSaver"; +static NSString * const DEFAULT_USERSCRIPT = @"document.body.style.backgroundColor = 'green';"; +static double const DEFAULT_REFRESH_INTERVAL = 1.0; +static long const DEFAULT_REFRESH_UNITS = REFRESH_MINUTES; - (id)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview { self = [super initWithFrame:frame isPreview:isPreview]; if (self) { - ScreenSaverDefaults *defaults = - [ScreenSaverDefaults defaultsForModuleWithName:ModuleName]; + refreshTimer = nil; + + defaults = [ScreenSaverDefaults defaultsForModuleWithName:ModuleName]; [defaults registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys: - DefaultURL, @"URL", + DEFAULT_URL, URL_KEY, + DEFAULT_USERSCRIPT, USERSCRIPT_KEY, + [NSNumber numberWithDouble:DEFAULT_REFRESH_INTERVAL], REFRESH_INTERVAL_KEY, + [NSNumber numberWithLong:DEFAULT_REFRESH_UNITS], REFRESH_UNITS_KEY, nil]]; webView = [[WebView alloc] initWithFrame:[self bounds] frameName:nil groupName:nil]; - [webView setMainFrameURL: [defaults valueForKey: @"URL"]]; + [webView setFrameLoadDelegate:self]; [self addSubview:webView]; + + [self loadWebView]; } return self; } @@ -40,10 +60,25 @@ - (BOOL)hasConfigureSheet return YES; } -- (NSWindow *)configureSheet +- (NSString *)url +{ + return [defaults valueForKey: URL_KEY]; +} +- (long)refreshUnits +{ + return [(NSNumber *)[defaults valueForKey:REFRESH_UNITS_KEY] longValue]; +} +- (double)refreshInterval { - ScreenSaverDefaults *defaults = [ScreenSaverDefaults defaultsForModuleWithName:ModuleName]; + return [(NSNumber *)[defaults valueForKey:REFRESH_INTERVAL_KEY] doubleValue]; +} +- (NSString *)userScript +{ + return [defaults valueForKey:USERSCRIPT_KEY]; +} +- (NSWindow *)configureSheet +{ if (!configSheet) { if (![NSBundle loadNibNamed:@"ConfigureSheet" owner:self]) @@ -53,28 +88,80 @@ - (NSWindow *)configureSheet } } - [url setStringValue: [defaults valueForKey: @"URL"]]; + [url setStringValue:[self url]]; + [refreshInterval setDoubleValue:[self refreshInterval]]; + [refreshUnits selectItemWithTag:[self refreshUnits]]; + [[userScript textStorage] setAttributedString:[[NSAttributedString alloc] initWithString:[self userScript]]]; + + [self updatePanel]; return configSheet; } -// Invoked when the user clicks "OK" -- (IBAction) okClick: (id)sender +- (void)updatePanel { - ScreenSaverDefaults *defaults = [ScreenSaverDefaults defaultsForModuleWithName:ModuleName]; + [refreshInterval setEnabled:[[refreshUnits selectedItem] tag] > 0]; +} - NSString *value = [url stringValue]; - [defaults setValue: value forKey: @"URL"]; - [defaults synchronize]; - [webView setMainFrameURL: value]; +- (void)refreshWebView:(NSTimer*)theTimer +{ + [webView reload:nil]; +} - [[NSApplication sharedApplication] endSheet:configSheet]; +- (void)loadWebView +{ + [webView setMainFrameURL:[defaults valueForKey:URL_KEY]]; + + if (refreshTimer) + { + [refreshTimer invalidate]; + [refreshTimer release]; + refreshTimer = nil; + } + + long units = [self refreshUnits]; + NSTimeInterval interval = 0; + + if (units == REFRESH_SECONDS) + interval = [self refreshInterval]; + else if (units == REFRESH_MINUTES) + interval = 60 * [self refreshInterval]; + else if (units == REFRESH_HOURS) + interval = 60 * 60 * [self refreshInterval]; + + if (interval > 0) + { + refreshTimer = [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(refreshWebView:) userInfo:nil repeats:YES]; + } +} + +- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame +{ + [sender stringByEvaluatingJavaScriptFromString:[defaults valueForKey:USERSCRIPT_KEY]]; } +// IBActions + +- (IBAction) okClick:(id)sender +{ + [defaults setValue:[url stringValue] forKey:URL_KEY]; + [defaults setValue:[NSNumber numberWithDouble:[refreshInterval doubleValue]] forKey:REFRESH_INTERVAL_KEY]; + [defaults setValue:[NSNumber numberWithLong:[[refreshUnits selectedItem] tag]] forKey:REFRESH_UNITS_KEY]; + [defaults setValue:[[userScript textStorage] string] forKey:USERSCRIPT_KEY]; + [defaults synchronize]; + + [[NSApplication sharedApplication] endSheet:configSheet]; + [self loadWebView]; +} - (IBAction)cancelClick:(id)sender { [[NSApplication sharedApplication] endSheet:configSheet]; } +- (IBAction)changeRefreshUnits:(id)sender +{ + [self updatePanel]; +} + @end diff --git a/index.html b/index.html deleted file mode 100644 index 430e915..0000000 --- a/index.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - spread - - - - -

- - - - -
- -

- - -