From df00d3b046ee7b88eaf068b802411814ac97dfd2 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 29 Jun 2016 12:00:16 -0700 Subject: [PATCH] Going to have to continue to use the old MAC web-container-based UI on Macs prior to 10.10 even when the new UI comes out, and the new UI is not ready yet anyway, so resurrect this. --- .../bin/ZeroTier One.app/Contents/Info.plist | 59 + .../Contents/MacOS/ZeroTier One | Bin 0 -> 152736 bytes .../bin/ZeroTier One.app/Contents/PkgInfo | 1 + .../Contents/Resources/ZeroTierIcon.icns | Bin 0 -> 125598 bytes .../Contents/Resources/en.lproj/Credits.rtf | 13 + .../Resources/en.lproj/InfoPlist.strings | Bin 0 -> 92 bytes .../Contents/Resources/en.lproj/MainMenu.nib | Bin 0 -> 25269 bytes .../Contents/Resources/en.lproj/Window.nib | Bin 0 -> 3616 bytes .../Contents/_CodeSignature/CodeResources | 187 + .../mac/mac-ui-macgap1-wrapper/src/LICENSE | 25 + .../src/MacGap.xcodeproj/project.pbxproj | 489 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/MacGap.xccheckout | 41 + .../UserInterfaceState.xcuserstate | Bin 0 -> 46675 bytes .../WorkspaceSettings.xcsettings | 10 + .../UserInterfaceState.xcuserstate | Bin 0 -> 27811 bytes .../WorkspaceSettings.xcsettings | 10 + .../src/MacGap/AppDelegate.h | 18 + .../src/MacGap/AppDelegate.m | 159 + .../src/MacGap/Classes/CallbackDelegate.h | 20 + .../src/MacGap/Classes/CallbackDelegate.m | 168 + .../src/MacGap/Classes/Commands/App.h | 21 + .../src/MacGap/Classes/Commands/App.m | 128 + .../src/MacGap/Classes/Commands/Command.h | 18 + .../src/MacGap/Classes/Commands/Command.m | 28 + .../src/MacGap/Classes/Commands/Dock.h | 11 + .../src/MacGap/Classes/Commands/Dock.m | 31 + .../MacGap/Classes/Commands/MenuItemProxy.h | 31 + .../MacGap/Classes/Commands/MenuItemProxy.m | 150 + .../src/MacGap/Classes/Commands/MenuProxy.h | 31 + .../src/MacGap/Classes/Commands/MenuProxy.m | 233 ++ .../src/MacGap/Classes/Commands/Notice.h | 26 + .../src/MacGap/Classes/Commands/Notice.m | 108 + .../src/MacGap/Classes/Commands/Path.h | 21 + .../src/MacGap/Classes/Commands/Path.m | 53 + .../src/MacGap/Classes/Commands/Sound.h | 17 + .../src/MacGap/Classes/Commands/Sound.m | 97 + .../MacGap/Classes/Commands/UserDefaults.h | 43 + .../MacGap/Classes/Commands/UserDefaults.m | 211 + .../src/MacGap/Classes/Commands/fonts.h | 9 + .../src/MacGap/Classes/Commands/fonts.m | 48 + .../src/MacGap/Classes/Constants.h | 7 + .../src/MacGap/Classes/ContentView.h | 15 + .../src/MacGap/Classes/ContentView.m | 68 + .../src/MacGap/Classes/JSEventHelper.h | 20 + .../src/MacGap/Classes/JSEventHelper.m | 41 + .../src/MacGap/Classes/Utils.h | 20 + .../src/MacGap/Classes/Utils.m | 93 + .../src/MacGap/Classes/WebViewDelegate.h | 49 + .../src/MacGap/Classes/WebViewDelegate.m | 206 + .../src/MacGap/Classes/Window.h | 23 + .../src/MacGap/Classes/Window.m | 94 + .../src/MacGap/Clipboard.h | 10 + .../src/MacGap/Clipboard.m | 51 + .../src/MacGap/MacGap-Info.plist | 39 + .../src/MacGap/MacGap-Prefix.pch | 15 + .../src/MacGap/WindowController.h | 13 + .../src/MacGap/WindowController.m | 54 + .../src/MacGap/en.lproj/Credits.rtf | 13 + .../src/MacGap/en.lproj/InfoPlist.strings | 2 + .../src/MacGap/en.lproj/MainMenu.xib | 3404 +++++++++++++++++ .../src/MacGap/en.lproj/Window.xib | 44 + .../mac-ui-macgap1-wrapper/src/MacGap/main.m | 14 + .../mac/mac-ui-macgap1-wrapper/src/README.md | 6 + ext/installfiles/mac/ui/Makefile | 6 + ext/installfiles/mac/ui/README.md | 10 + ext/installfiles/mac/ui/ZeroTierNetwork.jsx | 74 + ext/installfiles/mac/ui/ZeroTierNode.jsx | 158 + ext/installfiles/mac/ui/index.html | 58 + ext/installfiles/mac/ui/main.js | 51 + ext/installfiles/mac/ui/react.min.js | 15 + ext/installfiles/mac/ui/simpleajax.min.js | 2 + ext/installfiles/mac/ui/zerotier.css | 199 + ext/installfiles/mac/ui/ztui.min.js | 1 + 74 files changed, 7397 insertions(+) create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Info.plist create mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/MacOS/ZeroTier One create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/PkgInfo create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/ZeroTierIcon.icns create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/Credits.rtf create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/InfoPlist.strings create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/MainMenu.nib create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/Window.nib create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/_CodeSignature/CodeResources create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/LICENSE create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.pbxproj create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcshareddata/MacGap.xccheckout create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/Alex.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/api.xcuserdatad/WorkspaceSettings.xcsettings create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/WorkspaceSettings.xcsettings create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/AppDelegate.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/AppDelegate.m create mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/CallbackDelegate.h create mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/CallbackDelegate.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/App.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/App.m create mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Command.h create mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Command.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Dock.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Dock.m create mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.h create mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.m create mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuProxy.h create mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuProxy.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Notice.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Notice.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Path.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Path.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/UserDefaults.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/UserDefaults.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/fonts.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/fonts.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Constants.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/ContentView.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/ContentView.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/JSEventHelper.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/JSEventHelper.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Utils.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Utils.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/WebViewDelegate.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/WebViewDelegate.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Window.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Window.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Clipboard.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Clipboard.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/MacGap-Info.plist create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/MacGap-Prefix.pch create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/WindowController.h create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/WindowController.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/Credits.rtf create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/InfoPlist.strings create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/MainMenu.xib create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/Window.xib create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/main.m create mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/README.md create mode 100644 ext/installfiles/mac/ui/Makefile create mode 100644 ext/installfiles/mac/ui/README.md create mode 100644 ext/installfiles/mac/ui/ZeroTierNetwork.jsx create mode 100644 ext/installfiles/mac/ui/ZeroTierNode.jsx create mode 100644 ext/installfiles/mac/ui/index.html create mode 100644 ext/installfiles/mac/ui/main.js create mode 100644 ext/installfiles/mac/ui/react.min.js create mode 100644 ext/installfiles/mac/ui/simpleajax.min.js create mode 100644 ext/installfiles/mac/ui/zerotier.css create mode 100644 ext/installfiles/mac/ui/ztui.min.js diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Info.plist b/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Info.plist new file mode 100644 index 000000000..c67923c7d --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Info.plist @@ -0,0 +1,59 @@ + + + + + BuildMachineOSBuild + 15B42 + CFBundleDevelopmentRegion + en + CFBundleExecutable + ZeroTier One + CFBundleIconFile + ZeroTierIcon + CFBundleIdentifier + com.zerotier.ZeroTier-One + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ZeroTier One + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 7B1005 + DTPlatformVersion + GM + DTSDKBuild + 15A278 + DTSDKName + macosx10.11 + DTXcode + 0711 + DTXcodeBuild + 7B1005 + LSApplicationCategoryType + public.app-category.utilities + LSMinimumSystemVersion + 10.7 + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/MacOS/ZeroTier One b/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/MacOS/ZeroTier One new file mode 100755 index 0000000000000000000000000000000000000000..8e38b861af65b371afeb86780235a6ab74bc69c0 GIT binary patch literal 152736 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%0AuM3O=1{ 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 $xp?i+Hc?!uGoqy$>n)YyyV$jauy5A+?D^`nV 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 literal 0 HcmV?d00001 diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/MainMenu.nib b/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/MainMenu.nib new file mode 100644 index 0000000000000000000000000000000000000000..bac7faa79fa4fccf2c974d8a953c76c5d540416f GIT binary patch literal 25269 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

r%2G`RXKZ4CV*xXezJ0b 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 QOiW;kfzb>?!$|Ha05Uv7od5s; literal 0 HcmV?d00001 diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/_CodeSignature/CodeResources b/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/_CodeSignature/CodeResources new file mode 100644 index 000000000..5e334db0c --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/_CodeSignature/CodeResources @@ -0,0 +1,187 @@ + + + + + files + + Resources/ZeroTierIcon.icns + + 430Gd+4+jnim7WxXEEugp6G+Tgk= + + Resources/en.lproj/Credits.rtf + + hash + + ePttkAH2X1GJ6OL0UhDBAktxB3Y= + + optional + + + Resources/en.lproj/InfoPlist.strings + + hash + + MiLKDDnrUKr4EmuvhS5VQwxHGK8= + + optional + + + Resources/en.lproj/MainMenu.nib + + hash + + 8JZXf4/3df3LD+o74Y8WM0dV8io= + + optional + + + Resources/en.lproj/Window.nib + + hash + + aP0mIANPPnnTMmxYlELioz9ZO1I= + + optional + + + + files2 + + Resources/ZeroTierIcon.icns + + 430Gd+4+jnim7WxXEEugp6G+Tgk= + + Resources/en.lproj/Credits.rtf + + hash + + ePttkAH2X1GJ6OL0UhDBAktxB3Y= + + optional + + + Resources/en.lproj/InfoPlist.strings + + hash + + MiLKDDnrUKr4EmuvhS5VQwxHGK8= + + optional + + + Resources/en.lproj/MainMenu.nib + + hash + + 8JZXf4/3df3LD+o74Y8WM0dV8io= + + optional + + + Resources/en.lproj/Window.nib + + hash + + aP0mIANPPnnTMmxYlELioz9ZO1I= + + optional + + + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/LICENSE b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/LICENSE new file mode 100644 index 000000000..c7fd4a4a5 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/LICENSE @@ -0,0 +1,25 @@ +MacGap was ported from phonegap-mac, and is under the same license (MIT) + +The MIT License +***************** + +Copyright (c) <2012> + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.pbxproj b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.pbxproj new file mode 100644 index 000000000..775c59641 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.pbxproj @@ -0,0 +1,489 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1495814F15C15CCC00E1CFE5 /* Notice.m in Sources */ = {isa = PBXBuildFile; fileRef = 1495814E15C15CCC00E1CFE5 /* Notice.m */; }; + 6F169DA718CC332E005EDDF3 /* Command.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F169DA618CC332E005EDDF3 /* Command.m */; }; + 6F169DAA18CC35FD005EDDF3 /* CallbackDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F169DA918CC35FD005EDDF3 /* CallbackDelegate.m */; }; + 6F169DAC18CD8A4A005EDDF3 /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F169DAB18CD8A4A005EDDF3 /* JavaScriptCore.framework */; }; + 6F169DB118CD906F005EDDF3 /* MenuItemProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F169DAE18CD906F005EDDF3 /* MenuItemProxy.m */; }; + 6F169DB218CD906F005EDDF3 /* MenuProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F169DB018CD906F005EDDF3 /* MenuProxy.m */; }; + 6FD672B618FE618E00C0DAAD /* UserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD672B518FE618E00C0DAAD /* UserDefaults.m */; }; + 6FD6E4ED18C2D48C00DFFBE6 /* fonts.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FD6E4EC18C2D48C00DFFBE6 /* fonts.m */; }; + 88746BEE14CCA435001E160E /* JSEventHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 88746BED14CCA435001E160E /* JSEventHelper.m */; }; + 88C0646014BDE10A00E4BCE2 /* Window.m in Sources */ = {isa = PBXBuildFile; fileRef = 88C0645F14BDE10A00E4BCE2 /* Window.m */; }; + 88C0646614BDEC5800E4BCE2 /* Window.xib in Resources */ = {isa = PBXBuildFile; fileRef = 88C0646414BDEC5800E4BCE2 /* Window.xib */; }; + 88C0646D14BDF6A600E4BCE2 /* WindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88C0646C14BDF6A600E4BCE2 /* WindowController.m */; }; + C14EFCA71B0986AF00894B5F /* ZeroTierIcon.icns in Resources */ = {isa = PBXBuildFile; fileRef = C14EFCA61B0986AF00894B5F /* ZeroTierIcon.icns */; }; + C1C2B9911AFB0CF10060D7C2 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C1C2B9901AFB0CF10060D7C2 /* Security.framework */; }; + F2B80016179E0FC100B069A8 /* Clipboard.m in Sources */ = {isa = PBXBuildFile; fileRef = F2B80015179E0FC100B069A8 /* Clipboard.m */; }; + FA32509D14BA813600BF0781 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA32509C14BA813600BF0781 /* WebKit.framework */; }; + FA3250C314BA85E700BF0781 /* ContentView.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3250BC14BA85E700BF0781 /* ContentView.m */; }; + FA3250C514BA85E700BF0781 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3250BE14BA85E700BF0781 /* Utils.m */; }; + FA3250C714BA85E700BF0781 /* WebViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3250C014BA85E700BF0781 /* WebViewDelegate.m */; }; + FA3250D314BA860800BF0781 /* App.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3250C914BA860800BF0781 /* App.m */; }; + FA3250D514BA860800BF0781 /* Dock.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3250CB14BA860800BF0781 /* Dock.m */; }; + FA3250D914BA860800BF0781 /* Path.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3250CF14BA860800BF0781 /* Path.m */; }; + FA3250DB14BA860800BF0781 /* Sound.m in Sources */ = {isa = PBXBuildFile; fileRef = FA3250D114BA860800BF0781 /* Sound.m */; }; + FA3F7742168F70790027B324 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA3F7741168F70780027B324 /* Cocoa.framework */; }; + FAE451C914BA79C600190544 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = FAE451C714BA79C600190544 /* InfoPlist.strings */; }; + FAE451CB14BA79C600190544 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = FAE451CA14BA79C600190544 /* main.m */; }; + FAE451CF14BA79C600190544 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = FAE451CD14BA79C600190544 /* Credits.rtf */; }; + FAE451D214BA79C600190544 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = FAE451D114BA79C600190544 /* AppDelegate.m */; }; + FAE451D514BA79C600190544 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = FAE451D314BA79C600190544 /* MainMenu.xib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + FA3250DD14BA876F00BF0781 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1495814D15C15CCC00E1CFE5 /* Notice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Notice.h; path = Classes/Commands/Notice.h; sourceTree = ""; }; + 1495814E15C15CCC00E1CFE5 /* Notice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Notice.m; path = Classes/Commands/Notice.m; sourceTree = ""; }; + 6F169DA518CC332E005EDDF3 /* Command.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Command.h; path = Classes/Commands/Command.h; sourceTree = ""; }; + 6F169DA618CC332E005EDDF3 /* Command.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Command.m; path = Classes/Commands/Command.m; sourceTree = ""; }; + 6F169DA818CC35FD005EDDF3 /* CallbackDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CallbackDelegate.h; path = Classes/CallbackDelegate.h; sourceTree = ""; }; + 6F169DA918CC35FD005EDDF3 /* CallbackDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CallbackDelegate.m; path = Classes/CallbackDelegate.m; sourceTree = ""; }; + 6F169DAB18CD8A4A005EDDF3 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + 6F169DAD18CD906F005EDDF3 /* MenuItemProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MenuItemProxy.h; path = Classes/Commands/MenuItemProxy.h; sourceTree = ""; }; + 6F169DAE18CD906F005EDDF3 /* MenuItemProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MenuItemProxy.m; path = Classes/Commands/MenuItemProxy.m; sourceTree = ""; }; + 6F169DAF18CD906F005EDDF3 /* MenuProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MenuProxy.h; path = Classes/Commands/MenuProxy.h; sourceTree = ""; }; + 6F169DB018CD906F005EDDF3 /* MenuProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MenuProxy.m; path = Classes/Commands/MenuProxy.m; sourceTree = ""; }; + 6FD672B418FE618E00C0DAAD /* UserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UserDefaults.h; path = Classes/Commands/UserDefaults.h; sourceTree = ""; }; + 6FD672B518FE618E00C0DAAD /* UserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = UserDefaults.m; path = Classes/Commands/UserDefaults.m; sourceTree = ""; }; + 6FD6E4EB18C2D48200DFFBE6 /* fonts.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fonts.h; path = Classes/Commands/fonts.h; sourceTree = ""; }; + 6FD6E4EC18C2D48C00DFFBE6 /* fonts.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = fonts.m; path = Classes/Commands/fonts.m; sourceTree = ""; }; + 88746BEC14CCA435001E160E /* JSEventHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSEventHelper.h; path = Classes/JSEventHelper.h; sourceTree = ""; }; + 88746BED14CCA435001E160E /* JSEventHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = JSEventHelper.m; path = Classes/JSEventHelper.m; sourceTree = ""; }; + 88C0645E14BDE10A00E4BCE2 /* Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Window.h; path = Classes/Window.h; sourceTree = ""; }; + 88C0645F14BDE10A00E4BCE2 /* Window.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Window.m; path = Classes/Window.m; sourceTree = ""; }; + 88C0646514BDEC5800E4BCE2 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/Window.xib; sourceTree = ""; }; + 88C0646B14BDF6A600E4BCE2 /* WindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WindowController.h; sourceTree = ""; }; + 88C0646C14BDF6A600E4BCE2 /* WindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WindowController.m; sourceTree = ""; }; + C14EFCA61B0986AF00894B5F /* ZeroTierIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = ZeroTierIcon.icns; path = ../../../../artwork/ZeroTierIcon.icns; sourceTree = ""; }; + C1C2B9901AFB0CF10060D7C2 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + F2B80014179E0FC100B069A8 /* Clipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Clipboard.h; sourceTree = ""; }; + F2B80015179E0FC100B069A8 /* Clipboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Clipboard.m; sourceTree = ""; }; + FA32509C14BA813600BF0781 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; + FA3250BA14BA85E700BF0781 /* Constants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Constants.h; path = Classes/Constants.h; sourceTree = ""; }; + FA3250BB14BA85E700BF0781 /* ContentView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ContentView.h; path = Classes/ContentView.h; sourceTree = ""; }; + FA3250BC14BA85E700BF0781 /* ContentView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = ContentView.m; path = Classes/ContentView.m; sourceTree = ""; }; + FA3250BD14BA85E700BF0781 /* Utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = Classes/Utils.h; sourceTree = ""; }; + FA3250BE14BA85E700BF0781 /* Utils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = Classes/Utils.m; sourceTree = ""; }; + FA3250BF14BA85E700BF0781 /* WebViewDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WebViewDelegate.h; path = Classes/WebViewDelegate.h; sourceTree = ""; }; + FA3250C014BA85E700BF0781 /* WebViewDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = WebViewDelegate.m; path = Classes/WebViewDelegate.m; sourceTree = ""; }; + FA3250C814BA860800BF0781 /* App.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = App.h; path = Classes/Commands/App.h; sourceTree = ""; }; + FA3250C914BA860800BF0781 /* App.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = App.m; path = Classes/Commands/App.m; sourceTree = ""; }; + FA3250CA14BA860800BF0781 /* Dock.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Dock.h; path = Classes/Commands/Dock.h; sourceTree = ""; }; + FA3250CB14BA860800BF0781 /* Dock.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Dock.m; path = Classes/Commands/Dock.m; sourceTree = ""; }; + FA3250CE14BA860800BF0781 /* Path.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Path.h; path = Classes/Commands/Path.h; sourceTree = ""; }; + FA3250CF14BA860800BF0781 /* Path.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Path.m; path = Classes/Commands/Path.m; sourceTree = ""; }; + FA3250D014BA860800BF0781 /* Sound.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Sound.h; path = Classes/Commands/Sound.h; sourceTree = ""; }; + FA3250D114BA860800BF0781 /* Sound.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = Sound.m; path = Classes/Commands/Sound.m; sourceTree = ""; }; + FA3F7741168F70780027B324 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; + FAE451BA14BA79C600190544 /* ZeroTier One.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "ZeroTier One.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + FAE451BE14BA79C600190544 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + FAE451C114BA79C600190544 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + FAE451C214BA79C600190544 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + FAE451C314BA79C600190544 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + FAE451C614BA79C600190544 /* MacGap-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "MacGap-Info.plist"; sourceTree = ""; }; + FAE451C814BA79C600190544 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + FAE451CA14BA79C600190544 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + FAE451CC14BA79C600190544 /* MacGap-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MacGap-Prefix.pch"; sourceTree = ""; }; + FAE451CE14BA79C600190544 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; + FAE451D014BA79C600190544 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + FAE451D114BA79C600190544 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + FAE451D414BA79C600190544 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + FAE451B714BA79C600190544 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C1C2B9911AFB0CF10060D7C2 /* Security.framework in Frameworks */, + 6F169DAC18CD8A4A005EDDF3 /* JavaScriptCore.framework in Frameworks */, + FA3F7742168F70790027B324 /* Cocoa.framework in Frameworks */, + FA32509D14BA813600BF0781 /* WebKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + FA3250E014BA87B800BF0781 /* Classes */ = { + isa = PBXGroup; + children = ( + FA3250E114BA87DD00BF0781 /* Commands */, + FA3250BA14BA85E700BF0781 /* Constants.h */, + 6F169DA818CC35FD005EDDF3 /* CallbackDelegate.h */, + 6F169DA918CC35FD005EDDF3 /* CallbackDelegate.m */, + FA3250BB14BA85E700BF0781 /* ContentView.h */, + FA3250BC14BA85E700BF0781 /* ContentView.m */, + FA3250BF14BA85E700BF0781 /* WebViewDelegate.h */, + FA3250C014BA85E700BF0781 /* WebViewDelegate.m */, + 88C0646B14BDF6A600E4BCE2 /* WindowController.h */, + 88C0646C14BDF6A600E4BCE2 /* WindowController.m */, + ); + name = Classes; + sourceTree = ""; + }; + FA3250E114BA87DD00BF0781 /* Commands */ = { + isa = PBXGroup; + children = ( + 6F169DA518CC332E005EDDF3 /* Command.h */, + 6F169DA618CC332E005EDDF3 /* Command.m */, + 1495814D15C15CCC00E1CFE5 /* Notice.h */, + 1495814E15C15CCC00E1CFE5 /* Notice.m */, + FA3250CA14BA860800BF0781 /* Dock.h */, + FA3250CB14BA860800BF0781 /* Dock.m */, + 6FD6E4EB18C2D48200DFFBE6 /* fonts.h */, + 6FD6E4EC18C2D48C00DFFBE6 /* fonts.m */, + FA3250BD14BA85E700BF0781 /* Utils.h */, + FA3250BE14BA85E700BF0781 /* Utils.m */, + 6FD672B418FE618E00C0DAAD /* UserDefaults.h */, + 6FD672B518FE618E00C0DAAD /* UserDefaults.m */, + FA3250CE14BA860800BF0781 /* Path.h */, + FA3250CF14BA860800BF0781 /* Path.m */, + FA3250D014BA860800BF0781 /* Sound.h */, + FA3250D114BA860800BF0781 /* Sound.m */, + FA3250C814BA860800BF0781 /* App.h */, + FA3250C914BA860800BF0781 /* App.m */, + 6F169DAD18CD906F005EDDF3 /* MenuItemProxy.h */, + 6F169DAE18CD906F005EDDF3 /* MenuItemProxy.m */, + 6F169DAF18CD906F005EDDF3 /* MenuProxy.h */, + 6F169DB018CD906F005EDDF3 /* MenuProxy.m */, + 88C0645E14BDE10A00E4BCE2 /* Window.h */, + 88C0645F14BDE10A00E4BCE2 /* Window.m */, + 88746BEC14CCA435001E160E /* JSEventHelper.h */, + 88746BED14CCA435001E160E /* JSEventHelper.m */, + F2B80014179E0FC100B069A8 /* Clipboard.h */, + F2B80015179E0FC100B069A8 /* Clipboard.m */, + ); + name = Commands; + sourceTree = ""; + }; + FAE451AF14BA79C600190544 = { + isa = PBXGroup; + children = ( + FA3F7741168F70780027B324 /* Cocoa.framework */, + FAE451C414BA79C600190544 /* MacGap */, + FAE451BD14BA79C600190544 /* Frameworks */, + FAE451BB14BA79C600190544 /* Products */, + ); + sourceTree = ""; + }; + FAE451BB14BA79C600190544 /* Products */ = { + isa = PBXGroup; + children = ( + FAE451BA14BA79C600190544 /* ZeroTier One.app */, + ); + name = Products; + sourceTree = ""; + }; + FAE451BD14BA79C600190544 /* Frameworks */ = { + isa = PBXGroup; + children = ( + C1C2B9901AFB0CF10060D7C2 /* Security.framework */, + 6F169DAB18CD8A4A005EDDF3 /* JavaScriptCore.framework */, + FA32509C14BA813600BF0781 /* WebKit.framework */, + FAE451BE14BA79C600190544 /* Cocoa.framework */, + FAE451C014BA79C600190544 /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + FAE451C014BA79C600190544 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + FAE451C114BA79C600190544 /* AppKit.framework */, + FAE451C214BA79C600190544 /* CoreData.framework */, + FAE451C314BA79C600190544 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + FAE451C414BA79C600190544 /* MacGap */ = { + isa = PBXGroup; + children = ( + FA3250E014BA87B800BF0781 /* Classes */, + FAE451D014BA79C600190544 /* AppDelegate.h */, + FAE451D114BA79C600190544 /* AppDelegate.m */, + C14EFCA61B0986AF00894B5F /* ZeroTierIcon.icns */, + FAE451D314BA79C600190544 /* MainMenu.xib */, + 88C0646414BDEC5800E4BCE2 /* Window.xib */, + FAE451C514BA79C600190544 /* Supporting Files */, + ); + path = MacGap; + sourceTree = ""; + }; + FAE451C514BA79C600190544 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + FAE451C614BA79C600190544 /* MacGap-Info.plist */, + FAE451C714BA79C600190544 /* InfoPlist.strings */, + FAE451CA14BA79C600190544 /* main.m */, + FAE451CC14BA79C600190544 /* MacGap-Prefix.pch */, + FAE451CD14BA79C600190544 /* Credits.rtf */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + FAE451B914BA79C600190544 /* MacGap */ = { + isa = PBXNativeTarget; + buildConfigurationList = FAE451D814BA79C600190544 /* Build configuration list for PBXNativeTarget "MacGap" */; + buildPhases = ( + FAE451B814BA79C600190544 /* Resources */, + FAE451B614BA79C600190544 /* Sources */, + FAE451B714BA79C600190544 /* Frameworks */, + FA3250DD14BA876F00BF0781 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MacGap; + productName = MacGap; + productReference = FAE451BA14BA79C600190544 /* ZeroTier One.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + FAE451B114BA79C600190544 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0710; + ORGANIZATIONNAME = Twitter; + }; + buildConfigurationList = FAE451B414BA79C600190544 /* Build configuration list for PBXProject "MacGap" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = FAE451AF14BA79C600190544; + productRefGroup = FAE451BB14BA79C600190544 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + FAE451B914BA79C600190544 /* MacGap */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + FAE451B814BA79C600190544 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C14EFCA71B0986AF00894B5F /* ZeroTierIcon.icns in Resources */, + FAE451C914BA79C600190544 /* InfoPlist.strings in Resources */, + FAE451CF14BA79C600190544 /* Credits.rtf in Resources */, + FAE451D514BA79C600190544 /* MainMenu.xib in Resources */, + 88C0646614BDEC5800E4BCE2 /* Window.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + FAE451B614BA79C600190544 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6F169DAA18CC35FD005EDDF3 /* CallbackDelegate.m in Sources */, + FA3250D314BA860800BF0781 /* App.m in Sources */, + FA3250D514BA860800BF0781 /* Dock.m in Sources */, + FA3250D914BA860800BF0781 /* Path.m in Sources */, + FA3250DB14BA860800BF0781 /* Sound.m in Sources */, + FA3250C314BA85E700BF0781 /* ContentView.m in Sources */, + FA3250C514BA85E700BF0781 /* Utils.m in Sources */, + FA3250C714BA85E700BF0781 /* WebViewDelegate.m in Sources */, + FAE451CB14BA79C600190544 /* main.m in Sources */, + 6F169DB118CD906F005EDDF3 /* MenuItemProxy.m in Sources */, + FAE451D214BA79C600190544 /* AppDelegate.m in Sources */, + 6F169DA718CC332E005EDDF3 /* Command.m in Sources */, + 6FD672B618FE618E00C0DAAD /* UserDefaults.m in Sources */, + 88C0646014BDE10A00E4BCE2 /* Window.m in Sources */, + 6F169DB218CD906F005EDDF3 /* MenuProxy.m in Sources */, + 88C0646D14BDF6A600E4BCE2 /* WindowController.m in Sources */, + 6FD6E4ED18C2D48C00DFFBE6 /* fonts.m in Sources */, + 88746BEE14CCA435001E160E /* JSEventHelper.m in Sources */, + 1495814F15C15CCC00E1CFE5 /* Notice.m in Sources */, + F2B80016179E0FC100B069A8 /* Clipboard.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 88C0646414BDEC5800E4BCE2 /* Window.xib */ = { + isa = PBXVariantGroup; + children = ( + 88C0646514BDEC5800E4BCE2 /* en */, + ); + name = Window.xib; + sourceTree = ""; + }; + FAE451C714BA79C600190544 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + FAE451C814BA79C600190544 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + FAE451CD14BA79C600190544 /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + FAE451CE14BA79C600190544 /* en */, + ); + name = Credits.rtf; + sourceTree = ""; + }; + FAE451D314BA79C600190544 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + FAE451D414BA79C600190544 /* en */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + FAE451D614BA79C600190544 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "ZeroTier One"; + SDKROOT = ""; + }; + name = Debug; + }; + FAE451D714BA79C600190544 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_VERSION = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_NAME = "ZeroTier One"; + SDKROOT = ""; + }; + name = Release; + }; + FAE451D914BA79C600190544 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "compiler-default"; + CLANG_CXX_LIBRARY = "compiler-default"; + COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/MacGap\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "MacGap/MacGap-Prefix.pch"; + GCC_VERSION = ""; + INFOPLIST_FILE = "MacGap/MacGap-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_BUNDLE_IDENTIFIER = "com.zerotier.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "ZeroTier One"; + SDKROOT = macosx; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + FAE451DA14BA79C600190544 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "compiler-default"; + CLANG_CXX_LIBRARY = "compiler-default"; + COMBINE_HIDPI_IMAGES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/MacGap\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "MacGap/MacGap-Prefix.pch"; + GCC_VERSION = ""; + INFOPLIST_FILE = "MacGap/MacGap-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.7; + PRODUCT_BUNDLE_IDENTIFIER = "com.zerotier.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_NAME = "ZeroTier One"; + SDKROOT = macosx; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + FAE451B414BA79C600190544 /* Build configuration list for PBXProject "MacGap" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FAE451D614BA79C600190544 /* Debug */, + FAE451D714BA79C600190544 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FAE451D814BA79C600190544 /* Build configuration list for PBXNativeTarget "MacGap" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FAE451D914BA79C600190544 /* Debug */, + FAE451DA14BA79C600190544 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = FAE451B114BA79C600190544 /* Project object */; +} diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..88f36fc7b --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcshareddata/MacGap.xccheckout b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcshareddata/MacGap.xccheckout new file mode 100644 index 000000000..7fdde8531 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcshareddata/MacGap.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + 4D486E78-E297-4CC3-AAAE-1A58EDAC87E6 + IDESourceControlProjectName + MacGap + IDESourceControlProjectOriginsDictionary + + ABA3617E9F0148F844A82502F0D808DE6591AA97 + http://adam.ierymenko@git.int.zerotier.com/zerotier/zerotierone + + IDESourceControlProjectPath + ext/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj + IDESourceControlProjectRelativeInstallPathDictionary + + ABA3617E9F0148F844A82502F0D808DE6591AA97 + ../../../../.. + + IDESourceControlProjectURL + http://adam.ierymenko@git.int.zerotier.com/zerotier/zerotierone + IDESourceControlProjectVersion + 111 + IDESourceControlProjectWCCIdentifier + ABA3617E9F0148F844A82502F0D808DE6591AA97 + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + ABA3617E9F0148F844A82502F0D808DE6591AA97 + IDESourceControlWCCName + ZeroTierOne + + + + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/Alex.xcuserdatad/UserInterfaceState.xcuserstate b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/Alex.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..20281812beaefed26ed5a7ceb16e431be71ad75f GIT binary patch literal 46675 zcmYc)$jK}&F)+Boz{tSFz|6qHz{pTA7)%+=7|a|of*u!~_g!ybmc4Eq@NGaP0(&TxX^G{bp@+YEOY?lRnC zxX-ebJa_?Ynt;|s=@jBgp=G5%xx&&0sQ$i&3N%*4XP!NkYJ&m_Pk!6eBf#U#xn z!=%Wh&ZNPl%Vf%A#$?W9!DPu~&E(AF!W6+2$rQyD%@o5F%M`~H&y>KF!j#37&6LBG z%T&lz%2dfz%hbr!#MI2x&eY8`lW7*yY^FI(bD8Eb&1YK5w2Wyr(`KeEOk0_@F>Pns z&vbz4Ak$H%Q%t9s&M;kJy2^Bo={nO5raMe;nBFqIV|vf@f$1aDC#KI#Kbd|p{by!p z=3wSz=3*9N7G@SB4r2~y zj$n>tPGnAEPG(ML&SB1F&SNfPE@!S_u4Jxd;b#$M5n+*Fkz|o&kz-L}QD#wR(O}VG z(Pc4YF=8=eF=w%6v0-swab$62abxjf@n-R731A6f31x|7iDHRkiDyY>Nny!g$z;i8 z$zv&EDP}2WsbHyLsby(oX<}((X=mwX>0z0`GLdB}%QTi*EVEhWvn*g)!m^ZQCCe(7 zbu8;yHnVJD*}<}tWiQJsaeq8(14zn^>D!TUc9J+gK;DPG+6LI+b-A>vYx`tV>vzvMys?&boqi zCF?5IZLHf_cd+hc-Nm|_br0(a)|0HKSWmN_VLi)wj`ck2ZPq)icUfPuzG8jN`knO$ z>rd8SY;0`oY#eNyY@%#pY~pMZY$|N3Y-(&qY{qORY^H3EY))*>Y%Xj8Y=LY+Y{6{t zYzb_MY)Nd%Y$)6(_ zZD8BTwux;s+kUnKYzNuSvYlf)&vt?B4%=O}du*@RUbDSn`@!~;?HAi`c6N3Sc20IK zb}@Ewb_sSBc2#yYc6D}Rb`y3}c1Lz6c4u}M_5k)k_8|6P_IUOL_C)qv_B{4{_G@(SCvCn2-&c1?uCHq$PZS33Gcd#E}KgxcL{W$vx_LJO^ZT36tciCUEzhZyQ{)YVr`%m^??7unKIXE~tIk-5)IK(+5I3zh#In+4R zIgB|>I7~UrIGi|~Ib1kgIRZI?ID$DsI1)G#Ig&W?IPy6PI0`vxIqEp-IT|>6IC?qy zIA(Fo=9t5=f@3AeDvs40+c|b{?BqDgag5_Q#|e%r99KE6aXjL9%<+Wd1II^>PaK~) z{&O;LGIBC;@^SKW3UCT?%5uta%5!RS>Tv3E>Tz0eT65ZP+H!hwdU1MlhI2-6MslWd zrg5foW^k5pmU5PHmUA|9ws5v`wsB74oXk0eb1LUT&PAMyIhSy5;M~Hwm2)TOF3x?N z`#BGD9^pL2d7AS)=XK7zoDVslalYYv%lVP>JLfMh1};V}RxWNXJ}wb12`)J<1uiu% zEiP>?Q!Xkijlu6tZhx!!Yq;QGk*iR&}h7p|{d|G62s8M&FbdANDG`M8C+#kkeD z)wwmeHMzAoZ*gmL>vJ1%8*`g*J94{nM{-ATM{~z;$8yJU$8#reCvqoor*YSC*K*f! z*K;>;H*z;|H*>dew{o{}_i#_-p2A7E9rt_g58NNQzjOcK{>S~Fhm(hkhnq*3M}$X) zN0vvKN0UdN$CSsK$A-s=$Bid|Cxj=GCypncCyghaCzmIWr-Y}Hr;4YCr?W6 zWuBKjuXtYbyy1Dv^N!~|&j+55JfC6o6t4oW z2CpWs7OxSnF|P@)4X-V)9j`raIBx`RBySXNG;a)VEN>idJZ}PTB5x{hHg67Z5pOYX zEpHufJ#PbV3-2`E>AW*|XY$VCoy|LkcP{Td-c`J-dDrl+<=xJ^gLgmgVcz4sr+Clu zUf{jRdzJSZ?=9YYy!Uw@@IK*v!TXZ;BkylMMm`QcZazLfK|T>aQ9emNIX)#mH9jpq zBR*q36Fw_GYd%*#H$Hbh4?Z8hIKFtk1inPRB)(+66uwlxG`<|ZT)q;%a=r?_YQ7r2 zdcG#UX1;d54!%izlli9bP34=(H;Zo`-+aEceCznu^KIbU$hV1a2j5P<{d@=bj`5x5 zyUcfm?<(J2zI%N4`JVE<;`_w+nePkVAHKhQ|M=PX+4(v61^5N|rTOLg4f&1uE%2j`B(F=;orf(lYbZgZvH*|NBEEOALBp8e~$kS|6Trj{P+1E@IT~##Q&K8Isa?^ zH~b&?Kk|PKRmm&O$+^tH$-u?H&A`LJ&ma`;7p#|^T3H!NU|z%^z#!Pb(#Y)AurXdh#M8w!JijQrxF9h()g?cdDC^a#=AU`v&q}VaJB(p5B zBsC>oK*}XGEwMDG#5EHK{Z`Ju@#oJTosPzuYM` zBe5(qzbIZn1Z+fVP-&h^YH>+sUSdgReqIbjFgQ6QH8(Y0Ko-Slx1z+{)ZomjRJiH< zut0+tUK}rA;FDNf;+&sbkds=Hni2qN3>TNA=9NH9bV@8vO#xexSyCC4T998<5-%VT zl$xBH2X#KoK&a~-3kuxwlS_*|^L#V&GU0xS7Z5?=JLl&W=jWty!Xm|n!I?pC8G|i@ z9fLiC1A`-jQ-e^0aDzyLXoFaT_%a3;23H0*26qMz2G0hGhL(o@Mn>sIrt^(VZ$aT~ z6p@^tlB(zF;_97QqUW5SoS*2KSCX1u1P&rSNI1hB3XzW&ko0tM4J^$}&i2XA&xR<0 zs*D#fhZqPZjRT7EK^=qO(gKk8p=#i!p{R)$Py_Q}PJtK;R~wvPT9lmXoS%{!FQAT3 zp-+A~OjEpoK0cKQBX!e?@^f|lJe^=+8pIIJptpn}m?4BAlp(A^vO%Unu0df5Lj*%4 zLli@FgHnTCLs&yzgZ^cPI0kNpc!mUqM1~|#o=i$CPL1{p)+e)_2TFtXZF|zRjwuBvn;TA}$2e|~<$YQXO^6>)p_>6@53rb=29GZ|EtCKgpLW?0Oylp!m|FBl;PGh;c!3Wymnfz=Ef8T6Ji ztYKKou#RCp!-fW<2IB^k2Ga(!r3{-GHZyEt*vhc2!Mwqu!Lq@s!L~s^Dk?ue*DW!* zB)=%yIW?~&wI~2oH^d95KqJZ}Bp)6Kknj%3FU|zH%{Q?iUO*gFo}{LP>C^!92=aL zFkEA}&Txg{W`lEsYlBmR7dZYQ>5g8h_5sLy4;x$>YywSTu6@ezftY zix^%qylU`h@C3Pz#1sfK@jb%_)ByR+@C8-iJHua4D*D0jli?S`Z-ze&-VHttz72j2 z{!1DDG5lv_U}R)uY6xfuYzS%yZU}7{RH?`kl!}ba3=ye_k%y5N;z4jKViaIFwvbV< zA*8`3&=49ZjG~NU5G61HNk%yay(NrNjM9uUjIs^k4G|5I4N*%N)9_gL*@8Ls3H|C@$!hR$y)` zW-MpWTg+I(Sjt$|P|{G^P_~$18e=76RfBFrc|!%*P4EI9sX`;KmV?>az}ScyL@kW1 zr~(~~eW0|{$=Jo%&Dg`(+fda|-B8m|+fcWZv7d1Q<3z?ujFTJc8yXrK8=4xL2UpsG z)>LM&dWvx_<2;D>AZceIs2~T|Q?LM8%D4=o04A`KaW#Y9LdI1MtqU2~G_<2Mc^Nl? zTWW0tT58aCUqNY7PG+(`w40^tlbDxMoSayYs#lPg4zq0w<2I0OTN^qSGH!3^1jjn8 zZi6-Jee#pRos(jSA9geJEM(l%(AA)Eg>gUQ0mg$2+zhIWhZ&DB9*q|eL++^rB&MhO zm4cdektLbAsl_FUxdqWF(5`T3kWWKzLr+6@Lm%bdQFh$2t4sV3yQu&Jxb|l}#dtbi zKnB?{=)PIZc!u#TLlyy5@dCmwVIk;xVWD@P@d_w^Utqk*c!}|H!-R%O4O1GXEn&RM zc#ZKor zaI)bPC=Kg?`=PMzFsLb-UxYJR#|vm+QLa}E?g9H`7MJK17vyA?lx3!t#|vm%^d+nsb!h@rNtqMMd_)~kqKweKvKMb3dA62FCJFo@ycT+AfPBo{9r3sC|M6!fgPm`R>V0hEpLE5nSv>VnmY-)h}SC7e%L1+<^ zK9fPi+J<$Dn2eZ=8`d{$XxJF*5*C8!)5Z%3xP*m(O!Q4m&&w<+O-T(w~FuW%6UtTfyYUO!VQ<6whJ6i(8;&#_Z8+9& z9OQWkH%C_!Q$r^ULlY-Qb4zD40|P@#15*=|cmV}SY+$5yx6GW9)FSWHN_ZB*P~wtV zoSc(ioSNd7n44Pcomy$6XAmy{v&$UQE|`=hRw-j6Qv(+lkd%eFnVW%ulbeCLg(1Q~ zGmsRjjE4OU2O17G9Eum< z2MtGN=A2Dggi1w@_m3n~?yO7l{3QWb(yA*D!h6j;>CN`XDINNZp;e5k|rA(8VrZ7!qn#MG};bOz3 zhC2;+8=irZjxHpGp}7^3+hHXhil8&3$RnZXC9yEYrW{Wl02vJ>Sg6JeNJ4xFPTs+( zB_)}8>Co~X7HkWc7J-VBg$!vR!^4IL4fjD+1_iATWyfv(MaeFWhheTg%X9%$ahzj1-|(p6 z@gk;+OqUv-G(5$uIIuVwT6MsTy2*44H8tO5dcvT$jOiZJeWnLY51Ae@J#Ki>@Ur1m z!|R4O4R4n*J!N{v^qlDh(@UmT4euJ>H~eV$*~rM)$jAhWz#*Hiu{j*tSiq8mVY32M z$p>GUzJc<=*M<)ZnZ7rC1O+3meDE8T5B@OyZTQsi4W18}8JL+FgcdO~GBY)NZuqi@ z$%vV?VSU3_BJu&eR)wYpW^QIaG@}F>);D|yWdmqEiaQ%Hi!$^qWEN}qg_I4LC7Gp| zrI~me{xWl#nXVpeKc((rE)vkJ3n!~aG` zh6a6jn~7l3XVzxcK}q_|`pgEX0>;c140=nLO_)uY&6v#_8Ce<`SsNMI8X4J_Fk3QP zF*QR>?AFN01@a7zbja+*aBLB? zH?vP8BX=VsKO!aiGY5f^PXKdZBO^~EBQGc|hBT~iWaJ|!F-9@RVwe^WGEIQE^q2xl zkExA}!pI3SgE^Bqi;1_9QLK?sw2@H+lqOBd>3@Nm^QR5=d}ytQ1z|pO5hPI-HY{mm z6ko(#%v{pQDAC9$Nm8<`Vn%JOFxN33W6)bK;Lcpn+`!z(+{E0>+``<-+{WC_+`-(* z+{N6@+{4_<+{fI{Jb`&4^CafU%u|@BGEZZk&OC#8Ci5)j+01j8=Q7V@p3l61c_H&6 z=EclQn3pmyV_wd@f_WwLD(2P9YnazEuVY@%yn%Tm^Csra%v+eZGH+wv&b)(pC-W}m z-OPKK_cHHe-p_o1`5^Nl=EKZKn2$Cx$}}>{H8LtRGAcDPsx&gHH8N^6GHNw4>NGOy zH8L7BG8#29nlv(+H8NT>GFmk<+B7oSH8MIhGCDOfx->GnH8OfMGI}*K`ZO~7H8KV? zG6pp=hBPvUH8MstGDbBr#xydY`4RJD<|oWgnV&H~XMVx_ zlKB<$Yvwo1Z<*gQzi0ly{E_(+^JnHS%wL(mF@Ip#NNon-^e7?$RyUtB-zL$)5xUI z$fVN9q~6G+-N>ZZ$Yj*WWY)-J*~nzm$mGz-LinFiZ@tEG|jS)%VFvDoQM>)CVu9Ci#zXsrqlIOqJ_T+mpjzI#!Ac@C<~<9=f3=nK{L%4z_|As7u^9E;P~*PR#?Y;Q=A=9$I|xZ*Ppf5hVm&0vVx<^5Vy11pfFr)(g&GE>5N1LP70?O})MStj zG1s1ex!8l&E7-LxHLt`YHK!o82-Vyih`EkbEC*1+xDaB#Gf|7BFp~r{JRA!OP;*)t z#8_7X`4%-ekn=4{3af^g<{mFVR9hBriQND(%QIde9U}qYu02Vs%0NSW!KulmMVTd) zsL|O9vE7?MlE#+1afVJ8#7tiTNe`Nqp%nHcjgmC_A?Es1ko3Y+lR#xUyfj9M)hQ73 z1LFleFk%9!e#aIT7_P@sdd!3v9~>{>g3owJ62z$C&|QuaGV>rthsF!2V;EgpT%@0w zmz-0Yk_yT$A(aKGXf?)Si0*I#@da@h$PCc(L<}DXB$i~L=D8IRb0Y~fYoG}LZzfp_ zF)EtEWQr1Kn;>S!#tT?r1R7FwL%a=-51grfJH)tn3hG^y)VK#?ULt{l5E^<=3L{oP z1tE&D2O-8L#|soy=z=G3byG5n6N`&ebCYr^t@QPaOA?c_Lzr zAU7zFK^&4AFW`nR_=(DGAYY=y?P-YN=@fNxP)xi4F)@=sqXLpzaAp!L#llsH!P)Tw zHu%B;)nG_B3|CwI7R1P0vMW0jpWla=mQQgb4aL+a5K{}OSeT=j{}N(;alC*t@xcnq zKInxlN)CDlF}XBeAPK`{YE{?~zCM1S75OL@e}-6GP9O5YeMRqSM zJH+UEqEZXIEh!PSC5R*Fzluy`A1{I;Hc_pAmAxguTRTW}t zH-Q!hS}gw> zn5@OD6%2YySW8$-S<6_<8yQzOGOlT4T-(UFZV788YZZeIYfU5L`bNeL;60_AK$ENz z0Y#a)iA9yLHG3hjMZoa_Driz+nZ=n&IjPPWiA9OYC8FOJp~>3L+5_@T2Wuy5 z7i)JTKf$hZ@}d$U8`G1X>< zrWQI1h88C9#pSFsS?7U#F^hFJ>m1g(jf}e+8TT|Y?rmh;w}f>*>jH=`_BS#f7;s-~ z>(9@PJC+#-t8weY)tOpwzPc|~1YGgd!$arQ6>tWU- z3_7gG8X34iA=ltdBv#g4L)etWP0EU1?;zieyyb^6R#m&;T}q zoAieDBgiDI1(H!|J;2k^}X$nu4woh*wZt4+;x6f7)_Ya^?TO)Pa3 z3=s+MHyZ=URBQ>4jggIsL5Gc{k@0pT;~lW6cfqFaYTJ6?(iNy*Elg`8s?7~dkiw6R zi;W+rp#p4z3_5JWjg0pj86SWReF!nML;6%fU1YVfsg8oBkzs8_H8`Ui!2Hi9$p+eR z#)_@1Vv}c6fQ01ZM#d-bklb?hsdUf&h2W4hG&Y2rq|T;;(|NjVdJH;j291o*8X2F1 zo%aIbyq2HF$$k(&n;KZwMphe|8WZ)AMc$oLv;>Kl-$ z+xiRtEYEU?t~NC>)=@AtGXk4yWM;0TU)>PZY)(sA6CdNi4CTK{57Q#JM+S4BbHqzM80`B2SY|}v| zVNG8%*k&^5u+45{VrgVz1-Xui4dl9Q{l(f>zK4PX&(OfkqBgSH+{{=U~Juq|z5;%H>zY-HkUWa3`Jww!GRgAUuOMkby{(0ZzkjZAz4T5Rt=bMg4H z`;dS!v8auxHZe3sPSso3c7j3(Yfjn4wi^=G0*y?9h_Jr$K}Yw(c8HOt@UoWe5ZiH( zN!ZF-wi9e88FbiAH!=w~GKql0S`-x4TTYu<&3Sq)5}c+?!KI?9sX4OqF0x$%8HzOm zue05NI8VHhNdoS?ZT8>8mv&p-`MwuC!)`nMuT4acV`VTuJ$VhDd zWM^V$X3$}0ZDdkxWKsefsSGl5TYt$Xap4DGBh3xLH8Q9Wgg5cnx!DD9nkmRG1o5zH zBa<4EhYQp8yjl+lJ0mlMQIhQ7dIVeCvdgn8FzB!=H8N>5GHHUHrv-A}meXcgbHuX1 z&a*HCWg}w~GvtOey9T>1PWS1t>qFe9)5xTYZBuwUwOcqG~E?ByG?iH|+mWcKvdlGv(Ce`zKJgx zY?3h|^RgGPmx4^fmZaIs*vlDo*ee^EY#W*E!2Yy{__Kq3a^p*gQN|#D8kr*(OMy9|#(tXp0>~3**w3<`V?W=>6xPTT-pCZu$P~GR{UZA%1|9Y*jZ9IE zOwr)5i5bw^@=Tr11c@R@{2E&rf?BM`=E&_G_IvE$z6rMalKlz$QwAOO=Z#EpjZE=i z-z0!z`pSnbF~@#DOf@h!0-0(6YEmG==q)?AM#0wNVgJnjg+Yh?TO(6aBU3Wi)D*C( zS6}9DJM02B)yT-w1Y{~|E13Nc2hK``gNcKgL5G92ktwZ_DIIKT2FTQH{Ux^!?30hF zHZrp`2PaEVsc39&h@7)IxH&*I3)Z5RLy$v=L5D-6ktwT@DI08X4#?mwyKh+5)HZ;# zwuvdIA!1~VVx|;_JSYoc%Z(fg9Ey;%p4Z5f4^8W!{$qYktyMrwwTY>@rH+EJ0V2_H zXmEh*7Hs7ihaQJMgARvbBU51`QxVvO#b6iiYJ0in)@85@&5S@UG)C#6ahP-1fLw^x zOj`~+1|1HEMyAq6rZTXZ?yg`4n`vwe&fx~g?Hdj^4sVc|*a{8~9}Zsz9S;9S zrpiX9DzKT=U^7n}*kvt-H0dBMauXCILph>w8X3(I0}065My5J=KyEp$$-3ofVPv(X zk&c3?3B1$Ck<0-)g97Wg9Y-cd7K08)P9sx8BU2;Tbxjc0=|#TolLY(N)D)b9OhDxu zy!Fgc#8Hl`Fz2Y?sASOLsBUCxX=G{z8`=goboXiRyq~8ah8mjGMpYYw@{gejylcbJ z$kB$=)OL;zh_5>unK}`^-hFYwz4nb@Lk*1)CiQbn!5My2Ii^8O>TYD}L6~&f%vSYu z2G}GcQ+SJ$V=l)ckV#k*%wmou3_2Xk8kzbUnfk##odEXfuJ*^3m9^2;#%7>UGq3>X zYZD8U7+%A%5vRGEI5tCEIH{3oGQx$sYUF>mCtc+y1N+DZNbAPf z7~bgQxXy70WD>SQk>f7MJ%~wj8ky!IOuG7F#)})fz-6K#Xv6_JX3O!E;}ys#tTFML z;|+rj$Gb+R`Hf5q!2Vna_UEp4*Mg>X;hpCBW#2Hh`?-wZk& ze;b(=H!>{&8@Uv0AdB=p}F_GU#w7H!|&MWZDb%=RS}>x12VuFIcSyHpR4JLG zR3Mz0oOw9S%;zj%(BUj~Tf(`Fb2;Y< z&XtW!7aEx^H8NdkWV*J5b2aB0&b6HD8kuf1GTm=vdeX@B5@r7m=VtIk8q>vi0VCJ~ zzMTAYD}8-OXLBF*ma? zbTiU*bpyG`)zVql$;8=M*T}-v&CSTw*vZY(8QGvi5QDB`806?^Y-r|U;;d_FX5px7 z;$&o~YiZ=>r0Z;HVdCuQXkz5%XbdfpIgfH4XV6>7d90D?=0eUBjZC*d?SA+{RFV&oJ~X{gpkJ^jXrB&9nNMn7 zI_M}y0VJ`o#GKMp0Y(9iMy9*qBN#aEao&$cQm}~g0YetD07TUz&c~2rjeHOXox;4d znDYteQ_$ffpkt4)$m2bAg!4J)OHlB=Xk>b@kn>d|(?eo{?;R-k-ZwHm!WMixIKRO{ z=yD^|V?+r3;JhQi*~oMk7IVKj|AMUk)5!F6A?LqFCh*Y>1Y(YhiJ@m97jq-ib8J@c z<>G=_eYKJ41>9;b9?m-g5(ulg__+i@R)Z4_mrx_qE6_ogTnyY?piS0XVvS6%u^E4e zOBQDQ^+u*QaN|L7k7T$amokIiLN297rgsauR2rE+pk!z+O-QPLA1@GwG3Q^FSfrnp zp99_qS8S|G3$EPwXACz8IOV|H4iOj3S$c6GHy8DaJ-S}Be)FPRnya&?h1_+ zE^{s`2E9dG7F?E%OrIN>zAWOh=CWyI`r63!4U{wlJzZQ~Qp+-vQ(@^ZUO*Hs<_Nk8 zq$Cx5OlrJ0ea!i~&g zjm(mb%rcG43aAm52#K&i@pRko$OTy!!t{@t>nXV)3p|(^sI%ILs{kA<%uEE<;bC9l z;hc|HH;B9FuGGt)CllpUH5fDa>qGhpemg{vK8Mk`laBQtj+GtVNf4zA8dX5L0- zKBCQ-z%?0U#zc@A0$?+ya7}Gw7Hnh|f|&ug7tVk=U^dr0kY*$Y%;#Fr$Sl&xEDGAK zkIUUlxmKWQTgkPmky*TvSpuK7^<0}k+K`;OnQKcUvs5FqG(K%Rx%Pmx?E?8w7VN{l zT>BcC7YaNi{k|(Ftqp=fRqlMh+&$(W3y=-LGYGl@KWY$^C^_uGq*V{&B-9~1;MrM6b>8pm} z1QbUG6lLav_I$+)XyaGtl$e|yoLZ1rlvn~fDPI%6YKR@+wu>_4m@o#0K!s57$t|!1 z`i<)sHZT0<`os0Nk=d}3*{G4(xItgpK>(b?7=o-6P|I>|W^Q&YCUA3bb8>SvGMhFs zn>8|N@4;q+C){*U-dvUOd#UMH*TW@Pp!Ybh-5O4Z{6`!!t5VQe&Xb2nJmj;bg!d zz}&!fNlo3z80Nl3Mp~ED)J@G$&ih_u3KF!ij293>3KY6v-yi>$P;ipLA^`vrTa zR;H$a+YDu?MHg-DLW=V9OBxs%I2Z&Oq!^SLbQz2o%o$u6ycvQRq8XAH@)-&liWy27 z>KWP?`WR+1%wd?vumF4l`ErJp3>z4BFdSq!!Elk`2E#*!Ck)RRUNHP&WMt%F6lIiQ zlxNgn)MqqjbYXO7^knpA3}B34jAl$=%w;TKEM@Fs>}6cUxP@^$;~q!=GciJF274$C zr5N`$GFyNf<=n#DBC+t((_9iu5*Kp|bBi)$h4}@8c+i}|EzT{+ptp?cIkzOY6xT~` z8E#o{7Po3-wr*tBX=Ju(WVT(#EzhmMt;ns!t-!6&$ZXfhY~RT2(8%lrX4r$Wz7qaC z3fkuvFF-(%OJWJ=CI$Q^ffNOoROS#?30i&#R;ld30STT<+&T>0+`8O)prl`tnVSk4 zTrYXl`Y)uB*%12b4rCzc z+ze1oM9~=UWawmMZed`lYv^X?tZU-p>ZEIFYUrrzY+&Z%>S*Zb=ICe{FQ9{L0K^uA z<)L|*g{7&;M?%WO(nKnD=R&UkfS41KpP!SISmap@T`vo%8KH8CNlqwIV%4B=PeY4Z z9ffK`69WU#`WKVhT1W&ZGxRLv_G)DIYS4g1P&#)ZgWgK+4DL+sEbeUX9PV81Jnnq% zf=1?`M&{r~=8#6_&_?F4M&|HF=7>h-$VTR!hST!W8!;GHI4QiP( zA&v>;UI0>>2vSib4nv~Y9n)6BXfEq zbH+06HQZ~t*Kx1s-oU-FkvX%Gd3Gc7ibm#5jm$e5nRkLB5OVq_?8+E;5bMD&=ztv% zimAjYu_QUeEi*3#cA_h$lHkhRr2L$C0U7XdgqZT+(`n$Bet^yqg{BtVMnaa3!$M&f z_fZDDRouI|_i*p!-p9S4`vCVr?nB&%xsNn5XEicsH!|lmGUqlj=QT3tH!>GAG8Z;7 z7d0{$ui`$&pu>FvbdwVIY3?)JXSvUDpKk=6fwi%bxfE0;F>Y*RE^lP6X=HA1WbSQb z?r#7WOweo^l$u-usUbr1iWAFHQ($9bkW*7L^U_`OK$m-@Kw6LRaCHR_gr%l{&!2Tl zO#>aO13qUpGcP?jwFFYuL2fw0Z6fFt>|keK(A`a?#h4ZffwCU>9N^Rx$juzZkjtx3 zEDtG4O^p}eM^XzB0hM(`ITxZ_*we)o#ays2M8E}=0jQiZGBVLoFgJ!5Q+K)VEofve zgVbLSxF3f41qY{=EaH9yJ1P}YnmqxPW=|WLD?oRSri~)}kgWf_O-bUt@g*?WM%-sknGad_&lzAg_&q9#% zn?U6V&f=2Cmd769GKWUyK7`Ahd0Zfe7=q)R$DRA$avl#JPaZEGZyp~WUmm|k<_V3= z6C0T)H8M|WWS-W@Jfo3$COGwQF>vz)G8|jT{j!m{vcU#oKq#mLehKQRg3<>}Gzu)r z69Y;$%##~zps@nck^oOuJSiXr&}22W!3G}05QP~G#}D0{lN!pmxS)`lIB47uS4Qt)6=m62aw4DXqPTEv)Yf>H}|5|dLQ zJvz`GPuQ#j)e|rk>ew9wEwY00%fZ9`p#4FzSXF||g0$>Zu*y5<=j0?76sM-R7v+~0 z6vqqj7bKQsxaAkY4sX7~GnIjxXBy9R&f7dQIB#*@it-DFjljnE1qUVOrKdXQm*$m3 z_yt2|9vYdKf=eu(Sv<3&pi>N>VvA=ELlzSM63;XSZpITl^BS3#L)0(eSqPrV@P%CV z1oj!|aA=-IJd42%c6g@;CWT}iEIlmcSqn-J%XpUatl(M6vx;Xm&zeT&m5t1+8ktu& zGOuZ5UfamLu912Dat37vWu6TT$~>DG8o`$Y3N$ir05#Y)HmHNrhJL&NC^PkqH45j3Uq#-PtpanC;U@1_I18x?8`rrYHB_*jv zd9aiLYU!gJ08JJUVbE<;NCrS#3!ru#sMJr)%u6jQ2H6A2v-=p1EoiWT7r%#iKx?6S z4)Yx0Im&aak$H0?^Oi>Dt&PmvmN4irs4}SXoCbwaFDU112jv`4@&lO-G7)sAUlI7~ z!*q~U;Hw`+T%6oPz{h;}7X_B4mZm~dCFr6^EW)56uVBytA)vvrqSRv0#oyrCM}R3_ zfM7cemKLt?++)yN$#a$G8qal}8$368Zt>jaxx;g}k$G1m^X^9GJ&nwJ8=3btGVgC> zKG4W~u#x%DN(LRC2RsjX9`QV8(BXN?pu+>+55j!7k@-j?^RY%|&|a)YX7E%j^Er^m zK~8loD#|ZHZ(V>I&0&z8eUK&)XbJ}`P#^QwBb;^ zfGl*x8~Z6gkRvO~`d6rHBL7AQI`d950m zZ!|LBgjo#laX~CDfQ)*^3s@pw;D~M8Gql{$$JG<#b>Q`8&|Agp$m_)G%SYGi)g$o!;{`ROWNA6{QxKL%w6Ro+0} zAl_i!5C-K&=4Xw}&l_3z8w4798(Cx7=lziQVUWW-;{`ws zY^c@X-V!Jf;{^o4?DW(kq#iD)*g-PEJvA@0v>4Pv$;dBC9@>nWJv1^CXmLP z!JxO0H@%Vh#X{c9M&_3wf2%@_g!b!k`5tCOE^j`_h`dJTR||Oy8kt`==!byjRblca zycG;Wi+M|V%XrHhncp-rziniGx0tt*L6x__-ag)b-U+-DdCYky^G<1G{?W+% zvyu64BMVm}b5A1+cOwf=gMJLCFa!-E6jM9Sohp1@?)KUPCmn7w+ zf_jLc8Zur$64n!hoQ=%?8hVkhs6`1Nmwb?sdhm7)d_)710(LU=EaBb7yPJ0p@7_ihhDH{qMi%Bq z7M2E$OS}gdxOvQZ4@Du_35r-oaFdSr2=7tI9aD&CgtTA4Ex3Th%%VlS$3Sg6P(K}~ z8i*~tyoW$tK^8_Zm+2Dkp@yf8P#*6&-b0Nntc@&;u+AswW-i79yq9<{GbA*!us5=B zG%!%{45$o<|E}}iz`o375${cqx3Jxx1<`q%_fEWk26&ADsAUFCsfZvzP3?<#?}CgY zT7A5LltU)y-qN(h7C#5JgFRUQ3C^fGnIvFzY4=Q2e1r%WSu;B{t==`EgSZxKe zOR|wgx{*Z?In(~({R_#ojVuz4EJCn61`Z!SCWf9Re9U|-e5`zIjV!{AEFz68qKzzK zNI3>v{z1|*55A<$Cj?5`;sla5NQF(mN*WIVx;z<8pOMGE8r=>`Uf%j7{Z_r8%u z05n*X%87B0P1GKb3e)eF=~7*;!_2sLt>SKlRBR|p9Z8WMaYIle3~HBLA@?Q zN})wEpEjQ!gWe)O9X{Pg7P&?i`9%z>duJ^G{9L`nf`Xh>J#d#3RM>$R2c#AmLvD}Pi|}+p%Cvmxd>Oo3__7#O8(FLx zS&TrLmc@|lijgl5l+E+`3it~7iW*sr8(B;nSIxdJdFeTs#TlC5x{R+9q|U67g)s(M6V}3Up!q)|qgvR$dcFmG%NX>Q@-5_B z#J8Al3E$F27S~1=w?-ECMi!4o7SE;J3VbWL75G;1tp?46vv`3?pGFoxP_e=fDHPrE zlS_+1J(9?<#G*`46SX)BA_Ec(ch1i%&IiqAgVx7_I~AZFMLfJ00xQBc^KAtcFIyT} zyccpSG%|x{-KF40f(}fAjRpiK=NF{H^zGu?1JbvBTHZ-OHjkc zSQNJ@JJg`ew((u#yNROn7T@hgmXJo4(1wlCQ0IXHLfN6F0l9O`_kiya$c3Pb!}uOI zvV_B2_zdL2=X@_3St1%)q7g29&G!z)p7(qo8d)M6S)v*?MuKKqQZh^OiLwmk-S9K>vox|K zG_oW%=*NPi7IqQ5l05@_do4dFKMzPB7pM|RYGhGd#Lvsm*T|CG$WqmyAL$6XJuok^ z1QxaYLi}P_Y7~BP233B^MwS#%jZ)FD5uE7xWf+bvXBTHE$OF1Z6@k1tO;2k2QB9-5m--LGyLjtHs z&2MDMXk_7RU})%txXqHGXA!>@zjY%^W+O`uyjtS7<9A@tTgY$U$da{?-?5P;8)S)4 z9&&#!J})sBH0kCS>{w8clbH-2IM9PlEc3hZdw@)EZ)C|`$nV+6lGmUgm6?*7SCW~Q znOYPtU=5u`g|&g9)dJ{%GDv6NIk6-)J-?_@50bYs^Ya`_OY(CQOEQx$L;4QVa=_2s^L5lMNNZe;|DmmN^aj$Vt1GzYo@0Xl-PvgS8eQ{+rCuvxI*N|5W~I{L>p*>Kj=a z8(EqfS(>4BKmROHP2E63-H)ZZ=U)Ocqy?k8=U)Lynr+aeNu}zZe=Ywe2B9VV>-g96 zZ{Xk9$kNfs(%Hz;)yUGlgrSjt3;#y`Z4K&;EIo}Z-Hj|0K_w=9+k|f_=&EbPC_pi2 zUc||xGN~vNv?8w*yfhzFmx20tkfliQ#SEacyo>V7GE+b~SIpDNIWey+u^3e`v>xN% z%YOh=lJ4W*-^kM2$kMln{~-UNMwb3YmIAH4gyF@&lK&RVcH}yFG36$|Y z{?q(tPzBEOUuDo+%720XBL5}+%luawStd2IOm1YE(#SHkk!9La{%ic#`EM{Z^51G? zncm1UqmgAMD5z#N=to86=jXa5CYR(FMLVa03MBAVtMLLV&@gie$%o%H5Aiyz4)IMa zh!+qCb%0Y-Lh=iIK;;cg6KHw|vSh&%uL1CNt5MZPrj|MiCI;|*i~LXcpQ8Hm1^-Kk z05R=1{`Zg!KbK1FH~vqc%>B8MWj^lq8@Q-KUB1cxga2nJc(@R}f>V+~i9wsel);L@ zp0k;=lXDv9JkFJz8#uReZs**|xsUSz=V8vHoOigGxdgb>xiq=7xpcYoxeU3CxlFmt zxh%P?xoo*YxWc$1xT3gXxe~aNxze~YxpKJjxr(?-xVpJka2?{h$@Pqzja!1-n>&rW zfqOdl4DO}eo4B`dZ{yy2Mw6$Z^<@JjMZ^UCsS@fz{k@jCE2@w)J~^G@KM&AWtm74Lf9t-Skq zPxGGTJSLqK1^M!-|ROTb&eS0G9tRUlm;Qy^O)S0G=YN}xudPM|@cNuWib zO<Vbp-VU%>}IlZ3OKE9Rjc{c zI|aK1djMq+Ma@nSh*#bTvm(#J-As7iSUY7Z(&478ey47nc-Q5myt}5Z4md5!Vwp5Vsb07taMM98 zL;R@tCGpGRSH!Q0-xq%*{zUwl_-FAi;$OwTORz|=OK?i?NbpGrNXSaaODIYxOQcE^ zNt8;IOH@hJNYqKpl2|OUOk#z^Dv8|^S0wI9ypnh$@lN7{#3xA;Nn1&KNe{_%$vnwk z$;FZzBzH>gmfS13U-F>jDakXE=OiykUY5Kn`AG7K%+PTE1*NxD#a zj`S(%pE3$Eo-#o)p)%nzkuq5_B{F3)6*5&aH8PuJ_Q;%+IVW>L=90{HnVT}VW$wy6 zk$EliPnK1dPgYOXR5nyLTed>BTDDfULAFV@MRtblLfK`qD`Z#6u94j-yHECj>>=6X zvL|Iv%bu0JE&ERPz3dM;MmaV)VL1soDLENAMLA_TRXKGz136ncKe+(8Ah{5^Fu4f1 zD7hH9IJtbeLb+nOQn_-uO1WyeTDf|;M!7k1`{mxsbI2>p+sQ}DH_7+QPmrG|KUsc` z{9^f~^2_B{%CDB+D}Pn~f&5GPZ}NW?m=y#R1Qmo7L=+SiloXT|R27UAj1^22%oLmz zTohat+!g#35*6|k@)ZgciWKS<8Wb88niVD}%vPAIFkfMz!eWJ`3L6wQDQr>Lrm#a{ zm%<)}H;UqlZi=Of^AvX}9#=f2ct-KO;zh;Fiq924D1KG^uJ}{&w-SdEuM)qKppux9 zgp!n!jFOg;t&*LRyHbc!q*Am}tWuIvic*?VhEkzYn^M2hB&8`z)0CDgtyEgAv{q@o z(i^3(%1p}a%ACsF$^yzl$|A~Q%CgET%9hFw%D&2e%KplM%5los%DKw<%7x0s%B9NX z$}P%m${osG%00^c%9E6*C?8RNuOg@7t5U17Oy!Wud6i2lS5&U6+*G-(@?PbK%3qcL zs*I}4ssgH_s^Y4Ws&c9ds!FOVsz$1=s(z}`stKw|swt|Os@bZ!s`;uFs=cbyRA;Kr zR-LQ5PIZIoCerm@f>rhkIy>Y?fp>e1?P>WS*f>gDPU z>aFS>>fP$S>a*16t1nVts=i8njrw}^jq3Z=FR9;Ff1&mg*Wl2Q z)lk#W)X>q;)3DcY(s0%A(D2e|(&*Nhp)pruzQ!VrO(EVQh(?6e%UT(sP^ytI6^0222As<&Nlm);+JPJM2DUVQ<5Fa2=+Nd0L2IQ@D0 ztM%9Fuh-wC|4#q6{$Kt7222KC2H^&g2GIs_1`7<<8mu?iXt2fLry-jmhas0Cuc5DD zlwpivoMEEjQo~J#TMV}u?lk;s#AU=|#AhUE6l;`alw*`(#*!J*sQ^< z$*je!-R!v86|-w*H_UFEin#*3Q<^w$*l$?G)Q- zwli(-*}k@YYx~~zlbxxZlbws5o1Ld!zug?Wd3Foz7TZ0w`(*dU?wj3DdrNyadk=dr zdtdu5`|0*G?PuH1v%h8k-2SEgYx{Q&$qoe$MGhqng#l^+V#nYwVWsb{ImlZCn zUDmm5blK&y*X4lAVV7erCtM!8a=A*lI=Fhe2Dt{i#<*s>7P*$XR=8HX*15L3cDeSt zPH>&%I>mLp>owOWZai+HZc1+YZWeCVZgy^tZZ2-VZUJt=ZeeZ_Zc%QfZgbpLxm|L* z?e^5|liP2%f9{O#Ebi>?0`9`@V(yae((bbE7Vh!xx$aZl=eaL;-{QX4{eb&n_harS z-7mRcb-&?$+x?#V1NYw^N*)Ft5gv&iSsuk64IZ5yJs$lYlRTz+%=1|2vBYD!$4ZaY z9$P&2d7SpR;&I*Mmd9O>2Ocjy-gvzC_~h}$M)idoJ)?<+<7OfagiiGoI%? zFL_?|yyyAQ^NHtk&sUyrJimJW_u}vp^^)^a^iuIs_tNq*_A>Lb^s@1?^K$U=^a}Ed z_sa0f_R8}r^eXYH^=j~H_GDS;x*4}h1XWEeO?E>j(8pSI^}iQ>zdb1uRC7% zy&ihK^7`h@;LYnT<}K+h<1O#4Fwn0?H%Hs=$+-A>s{bo>|N$v z@7?6x>fPbp<=x}G-20sO9Um4SULSEE6(3z610Q1_GapMICm&ZI49TPe7{A0OZ`^(t@c~%x6SW>-$}n~e)s(z`91Y};rH6_i{E#@ zUw(i6{`)ifbNP$-EBb5s>-rn`8~dC2+xt8DyZU?hd-?nLhx*6)XZx4|Be3p{Ez#e@;~c;!T+-V9sm3OkNltdzwm$M|Jnaf0Be9y zfOLRdfMS43fO>#IfN_9XfMtMnfNg+VKtMojKw3a%Ku$n@Kv6(-KwUs%KubV-Kxe?D zfY|{{12zTh4%ioPFyKhQ@qh~fmjkW^+zhxKa5vytz?VSAK(0XEK!HHvK(RpiK&3#{ zK#f4{K;1yIK>I+?z_7shz@)&`z>L7`z>>i7z^cI7z=pu4!0x~)fpY^_1#S-97PvET zPvHK*6M?4#&jnr#yc~En@Lu5az%PM+gBXICgV=&NgM@-agCv5agJgr`gEWE+gY1Ib zgS>)#g93trgJOc>gOY+$gEE4$f{KG`f?9(n1FNzn434MCfOwgv4B+8wkv z=vdJCpgTcNgI)x^4tf{#G3Zy&-(ZGd=3us9j$pxH>0s4hqhRY`yI{v)mtgncfZ*WZ zu;9qx=-}AkwBUl^+Tga}&fuQl{@_W$vxDaaFAQE1ygYbi@TTB>!N-HI1m6vQ5d1j! zS@6r?Pr+YjyWM;^skfk9jLRN>Y3)vpBD`aoTfsn%? zM?)TjvWJR>+J?G?282e1riT`U7KfIFR)*GuwuW|uc8B(bP7IwKIwy2l=!Vd}p~pf` zhMoyMA9^YDcIds(hoMhGpNGB-{S^8qj4ez!OeRb|Oest?Oe4%N%p}Y_%qq+_%s$K` zEHo@WEGMiqtRk#BtS+oEtShWHY(m)NuxVj4!WM?D3fmlZAnat=nXvO=m%^@w-3xmd z_9X0i*vqijVPC=-!}-F+!==Jy!xh4n!*#;-!;QjC!!5$C!kxo?!b8K8!n4Ek!VAMo z!pp-O!kfd}!aKuz!u!Ifhc5_U8NMxifB2#Bqv0pQPlsO#zaD-o{BHPz@JHdV!@q?8 ziQtS7iV%&Eh>(tui%^fyiqMTPh%kyUiLi}uj|ho~jYx<{j!28hj3|mIji`vIj;M=h zi0F)%6fq}aWyGe4tr0sSc1P@sI395-;%vl)h|3XIBkn~!kN6bvKawMoJCZL_Fj6E^ zHc}x{IZ`cBBT_5UIMOE4GcqVLG%_MGIx;RYJu)jYH?knID6%B7HnJ^pa^#%I`H_nv zmqxCL+!(nfa(m>i$i0#KBTqzLiM$v2I`T{8_sCz7f1?L5zsE7e zF~_mRamMk)iN;C9Nyo{>DaI+s>BO1F*~WRr1;>TOMaIR%#m8mDWyj^k6~>jsmBrP^ z^~BAHTN<}6Ze!e*xb1Pf;tt0hi#r*2ChmOP#kgB>kK^9N{fuXdXN~8G=Z@!#7mt^U zmyK75SB_VW*NeA~ca0B&Q{!09{ z_#5%J69f`u6XX*V6I2o+6Vehg60#C<6BZ?`PuP^OHDO1>?u5MwHxnKuJWY6!@G9Yd zqEMntqI{xaqEe!2qDG==qGw`EVq9WEVsc_mVnt$YVrSx{#MOzL5>F>SOnjI4G4V^{ z_rza`f087U6q8hv)RQ!m?2;UloReIV+>^YL!jmGCVv;hGa+30sijqo`%9AE1%}JV{ zv?ysw($1tkN&AxaCml*Unsh1YO49YDCrQtfUM0Ov`jGS~>37nqpnJWq!(mr^r)#C_q#LDMraPs3r$?m6rYEE)r)Q*Rr{|>?q?e`Fr+1`J zO`nxMH+@0+()1PStJBw}Z%f~wekT25`jzzS>37oar$0)6lKwXRTLyCmM+SEWUxsjo zScYVVbcRZXZiZEceTGwpYlc^bZ$>~yP)0;XVn$X*c}7h}eMVD8dq!7AZ$^K{jEsdD zt1{MRtk2k(u`lCj#)*v68Rs&tX57fQopCqgex^{SZl+tNe`Z8xbY@&;VrEKaT4r%( zRc38wLuPYkS7vYKgv`mAQ#1EvzR8lvQp{4$(#$f;vdwbHa?Wzg^34j!3eF14ipWaL zO3BL3s>rI(YRYQO>d5NPnv^v)Yev?rti@TYvNmV!&XvxU%T>=c&9%vO&JDcLL!L)oU|vXGY+g!UW?pSx zeO^c2+`I*Oi}RM{t;}1Kw?1!E-qySwdAsxW=AFtrlXoufLf+lHcX=Q4zT|z+`<3@M zpCO+)pDkZJUn*ZVUm;&PUo~GNUn^fXUq9b2KPkU1e}DeF0)YaZ0{4Q1g3N-Pg8YKQ zg1Ul<1yc&97tAV{Td<&Dalx{Jl?7`G_7@y1I9zb7;AFv>g7XCz3$7GgFSuFosgSi$ zu+XtEq_DYgTH(^d&4tGcuM}P{yjggs@P6UL!dHdw3qKWpE&N`@Qp8!rUBp`?R3uU) zUL;whRHR>IQe;+SQDj?WU*uHeQsi3{Rg_+oRg_y)P*hx0R#aKkR@7P4Q`BEHsc34^ zjG|dZdy5_vGZf1g8y5!`Clr?!R}@zl*A+Jww-mP*cNO;*Pbi*TyrOt@@w(!T#aoKE z7w;4hHX7>%BrPE7SmToKES-Pimf9avp zBc-QHZEMq8REaNK^E)y%0ER!o!EK?~{E7L2pE^{bz zE^{mMF7qo3EDJ7+Da$O&Da$V_Dl083FKa1lFY7AnEt^m_sce4PqOv7r%ga`ktts1C zwx?`=*`czdWyi~|lwB{oRd%=RLD{3SZ{^J8Y~`HgJmvi5g5`4M^5qKUO6A(+R^_(k z4&~0}ZsnfkKIQ)9LFLiqapj5S$>llah2i&-P37(7UFE&y{pHij=a;W2UtPYg zd}H~R@@?h&%TJV_FTYfNwfsi;t@5|!-^%}1FjO#CuvKtW2v&$yNLI*H$W>@om{qt| zcvN^-_*Dc}gj9rAL{(%~WLM->6jT&flvPwzR9DniEUq|S@urfm(xNh=vc7U+<)X^9 zmAfhrS01Z8UwNzYe&wsm&z0XQ|5piDNmc1pSys7Kg;qsWMOVdDC03EJLn!8$~+NZj>x~96ey1u%hy0>~-^~~xy)$^+tRj;mI zSG}QnQ}x#B?bX+--_@|zDAXv`xYh*Kq}F8AWY^@?6xNi~l-E?%)YdfAOs<($GqYw+ z&HS20HA`z&)U2*qSF@q!bj_`rcePBlQni}3wzZM9d9|&zeYF#7r_@fX-B!E5_CW2S z+S9e?YA@DauDw%xzxGk>liH89-)eu>{;6ZEW3FSXldO}flc`g!Q>)Xc zGp)0zv#PVLbEtEw^R5f33$2T&i>`~U%c{$-E37N7tEj84tE+3Mn_M@iZe`uNx(#)k z>bBSIs@q$)zwT_^wYtZ3FX~>^y{Y?H_oeQ8-OqZSdeQp8`ndYy`m*}U`kMOs`lkBU z`i}bU`o8*!^~>s4)~~5wU%#<_bN#mZo%MU__tzh+KV1K;{(l2kgG7UJgLOk-Lux}! zLx01ZhPe&%8WuFHZP?JTxnWzw&W7C$j~hNTd~W#G@U!7h!@ox6MuA50MyW>GMukT8 zMy*DjM*T*^#@NQv#@@zhjWZkPG|p>W-MFi9Z{vZ+!;QxpPd1)uJl}Y)@nPeW#^;T% z8s9d4X#CvxwTY>TuSv7Xwkfiyys5cqYSW^o)lKV~Ha2Z(+TL`a>2TArrjt!)n$9&{ zZ+g)5vgu#5V6#HAakGDOP;+Q=M00d=Y;%9}jOK;SOPZHAuWDY~yuNuy^Wo-W%_o~L zHGgdW)*{*>*P_^>(xTg<-(u8a-D20`*y7O=+7i(c-4fffvSm}tiI%f1k6Yffinq$N zy0@mZ_O{Myozpt6bz$qO*0rr0S~szs;j9uq~o3rLDbf za@*9l8Ev!M=Cy5Z+t#+TZBN_&wu5b_+Ag$c35@Tb~tpncDQ$Vb@+6obo6x0?3mLrzhhCy(vIaFYdUsz9OyXQajfHH$Ayl| z9alSUblmD>>y+y>>$LB5>U8aN?+oco?o8{s=qZes=xo`rpmdE!r*KE!C~ut=6sCZP0Do?a=Mq?b_YmJ*9hg_q^_f-AlSx zcdzZ<(7m~PYxn-{6WtHH-*tcJ{?z@o$Gpd($GOL?$D=2qC%31fr@E)Er?ID{r@d!V z&(xk7J+ph}^(^dJ+_SZ3f6u9&OFgf9e)RnA`Pa+X%hJo%tK4hQYuszrYuRhvYug*x z8`qoIo7|h$o7tP)Thd$EThm+L+t}OJJGpmi@ATd|z4Ln)^)Bh%)VsU)MDN+&^Su{) zul3&Sz0-TI_f_xbK88N#KGr^tKJGr=KCwROKDj={KIJ}xKGQz)KFdD4KF2>095orEh!RuD(5er~1zK-RXPS_oVN6 z-euNv?YHQ+?zipt>W}P?>5uPE>QC*@ z=+ExY>#yx^=x^?C>+kIE>F@8K)IX(vS^w_-ef;KsQrT=^X&k1}J6ej3SFqmLG!EA!%1nUWI6Iv!roG@j=^a(R3N=#Ips5jAYqRB+_ ziB=PxC%R4aoai&rZ(_j2$cf1lODDEZ+%R$P#QhTwPCPR4?8FNbFHgKW@y*1alNcs3 zPhy+IIZ0rW@FdYm5|gARDNj`8f(3MZ9J zDxXv}sb*6Bq{d0pCe55QXVUyhizY3Zw06?ANjoR)nY4e>p-D$3ot<=H(&b5SCVids zW76-*ER)$Lb50hTEIL_YvixM7$@-IxCYwwyo7_CPXLA4KNt35eo-ujh16tyYZQ}m`7PBEKeImKp*-IRza`BQ49)K00J(lDiWO5c?JDHEs6 zo3e7snknn2Y?`ul%8n_AryQGda>|)0=cZhoa(T+VDX*pqPSu_oG&Oo^+SKByB~weM zmQQV&+B&suYRA-tQ`b%1Fm=<^ty8~GW0=M~jcppoG=*tK)6A#Yf*0s9Ffl=B{$CIp IMozN_0249hqyPW_ literal 0 HcmV?d00001 diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/api.xcuserdatad/WorkspaceSettings.xcsettings b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/api.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..659c8766e --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/api.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/UserInterfaceState.xcuserstate b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..822ed3cb6581b8e606bab5208852eff2f504b0a4 GIT binary patch literal 27811 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 literal 0 HcmV?d00001 diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/WorkspaceSettings.xcsettings b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..6ff33e603 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + IDEWorkspaceUserSettings_HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + IDEWorkspaceUserSettings_SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/AppDelegate.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/AppDelegate.h new file mode 100644 index 000000000..bf7370b50 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/AppDelegate.h @@ -0,0 +1,18 @@ +// +// AppDelegate.h +// MacGap +// +// Created by Alex MacCaw on 08/01/2012. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import +#import "Classes/ContentView.h" + +#import "WindowController.h" + +@interface AppDelegate : NSObject + +@property (retain, nonatomic) WindowController *windowController; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/AppDelegate.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/AppDelegate.m new file mode 100644 index 000000000..45923bb36 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/AppDelegate.m @@ -0,0 +1,159 @@ +// +// AppDelegate.m +// MacGap +// +// Created by Alex MacCaw on 08/01/2012. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import "AppDelegate.h" +#include +#include + +@implementation AppDelegate + +@synthesize windowController; + +- (void) applicationWillFinishLaunching:(NSNotification *)aNotification +{ +} + +-(BOOL)applicationShouldHandleReopen:(NSApplication*)application + hasVisibleWindows:(BOOL)visibleWindows{ + if(!visibleWindows){ + [self.windowController.window makeKeyAndOrderFront: nil]; + } + return YES; +} + +- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication { + return YES; +} + +- (void) applicationDidFinishLaunching:(NSNotification *)aNotification { + char buf[16384],userAuthTokenPath[4096]; + struct stat systemAuthTokenStat,userAuthTokenStat; + + FILE *pf = fopen("/Library/Application Support/ZeroTier/One/zerotier-one.port","r"); + long port = 9993; // default + if (pf) { + long n = fread(buf,1,sizeof(buf)-1,pf); + if (n > 0) { + buf[n] = (char)0; + port = strtol(buf,(char **)0,10); + } + fclose(pf); + } + + char url[16384]; + memset(url,0,sizeof(url)); + + const char *homeDir = getenv("HOME"); + if (homeDir) { + snprintf(userAuthTokenPath,sizeof(userAuthTokenPath),"%s/Library/Application Support/ZeroTier/One/authtoken.secret",homeDir); + + bool userAuthTokenOutOfDate = false; + memset(&systemAuthTokenStat,0,sizeof(systemAuthTokenStat)); + memset(&userAuthTokenStat,0,sizeof(userAuthTokenStat)); + if (stat("/Library/Application Support/ZeroTier/One/authtoken.secret",&systemAuthTokenStat) == 0) { + if (stat(userAuthTokenPath,&userAuthTokenStat) == 0) { + if (userAuthTokenStat.st_mtimespec.tv_sec < systemAuthTokenStat.st_mtimespec.tv_sec) + userAuthTokenOutOfDate = true; + } + } + + if (!userAuthTokenOutOfDate) { + pf = fopen(userAuthTokenPath,"r"); + if (pf) { + long n = fread(buf,1,sizeof(buf)-1,pf); + if (n > 0) { + buf[n] = (char)0; + snprintf(url,sizeof(url),"http://127.0.0.1:%ld/index.html?authToken=%s",port,buf); + } + fclose(pf); + } + } + } + + if (!url[0]) { + // Create authorization reference + OSStatus status; + AuthorizationRef authorizationRef; + + // AuthorizationCreate and pass NULL as the initial + // AuthorizationRights set so that the AuthorizationRef gets created + // successfully, and then later call AuthorizationCopyRights to + // determine or extend the allowable rights. + // http://developer.apple.com/qa/qa2001/qa1172.html + status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef); + if (status != errAuthorizationSuccess) + { + NSLog(@"Error Creating Initial Authorization: %d", status); + return; + } + + // kAuthorizationRightExecute == "system.privilege.admin" + AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0}; + AuthorizationRights rights = {1, &right}; + AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | + kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights; + + // Call AuthorizationCopyRights to determine or extend the allowable rights. + status = AuthorizationCopyRights(authorizationRef, &rights, NULL, flags, NULL); + if (status != errAuthorizationSuccess) + { + NSLog(@"Copy Rights Unsuccessful: %d", status); + return; + } + + // use rm tool with -rf + char *tool = "/bin/cat"; + char *args[] = {"/Library/Application Support/ZeroTier/One/authtoken.secret", NULL}; + FILE *pipe = NULL; + + status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, kAuthorizationFlagDefaults, args, &pipe); + if (status != errAuthorizationSuccess) + { + NSLog(@"Error: %d", status); + } + + if (pipe) { + long n = (long)fread(buf,1,sizeof(buf)-1,pipe); + if (n > 0) { + buf[n] = (char)0; + snprintf(url,sizeof(url),"http://127.0.0.1:%ld/index.html?authToken=%s",port,buf); + + if (homeDir) { + snprintf(userAuthTokenPath,sizeof(userAuthTokenPath),"%s/Library/Application Support/ZeroTier",homeDir); + mkdir(userAuthTokenPath,0755); + snprintf(userAuthTokenPath,sizeof(userAuthTokenPath),"%s/Library/Application Support/ZeroTier/One",homeDir); + mkdir(userAuthTokenPath,0755); + snprintf(userAuthTokenPath,sizeof(userAuthTokenPath),"%s/Library/Application Support/ZeroTier/One/authtoken.secret",homeDir); + pf = fopen(userAuthTokenPath,"w"); + if (pf) { + fwrite(buf,1,strlen(buf),pf); + fclose(pf); + chmod(userAuthTokenPath,0600); + } + } + } + fclose(pipe); + } + + // The only way to guarantee that a credential acquired when you + // request a right is not shared with other authorization instances is + // to destroy the credential. To do so, call the AuthorizationFree + // function with the flag kAuthorizationFlagDestroyRights. + // http://developer.apple.com/documentation/Security/Conceptual/authorization_concepts/02authconcepts/chapter_2_section_7.html + status = AuthorizationFree(authorizationRef, kAuthorizationFlagDestroyRights); + } + + NSString *urlStr = [[NSString alloc] initWithCString:url]; + self.windowController = [[WindowController alloc] initWithURL: urlStr]; + [self.windowController showWindow: [NSApplication sharedApplication].delegate]; + self.windowController.contentView.webView.alphaValue = 1.0; + self.windowController.contentView.alphaValue = 1.0; + [self.windowController showWindow:self]; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/CallbackDelegate.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/CallbackDelegate.h new file mode 100755 index 000000000..0f31ee417 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/CallbackDelegate.h @@ -0,0 +1,20 @@ +// +// CallbackDelegate.h +// MacGap +// +// Created by Joe Hildebrand on 1/10/12. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import "Command.h" + +@interface CallbackDelegate : Command { +} + +@property JSObjectRef callback; + +- (id) initWithContext:(JSContextRef)aContext forCallback:(WebScriptObject*)aCallback; +- (id) call; +- (id) callWithParams:(id)firstOrNil, ... NS_REQUIRES_NIL_TERMINATION; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/CallbackDelegate.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/CallbackDelegate.m new file mode 100755 index 000000000..5ce8fbe33 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/CallbackDelegate.m @@ -0,0 +1,168 @@ +// +// CallbackDelegate.m +// MacGap +// +// Created by Joe Hildebrand on 1/10/12. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import "CallbackDelegate.h" +#import + +@implementation CallbackDelegate + +@synthesize callback; + +- (id) initWithContext:(JSContextRef)aContext forCallback:(WebScriptObject*)aCallback +{ + if (!aCallback) + return nil; + if ([aCallback isKindOfClass:[WebUndefined class]]) + return nil; + + self = [super initWithContext:aContext]; + if (!self) + return nil; + + callback = [aCallback JSObject]; + JSValueProtect(context, callback); + return self; +} + +- (void) dealloc +{ + if (callback) + { + JSValueUnprotect(context, callback); + callback = nil; + } +} + +- (id) objectFromValue:(JSValueRef)val +{ + JSStringRef jstr; + NSString *rets; + + switch(JSValueGetType(context, val)) + { + case kJSTypeUndefined: + case kJSTypeNull: + return nil; + case kJSTypeBoolean: + return [NSNumber numberWithBool:JSValueToBoolean(context, val)]; + case kJSTypeNumber: + return [NSNumber numberWithDouble:JSValueToNumber(context, val, NULL)]; + case kJSTypeString: + jstr = JSValueToStringCopy(context, val, NULL); + size_t sz = JSStringGetMaximumUTF8CStringSize(jstr); + char *buf = (char*)malloc(sz); + JSStringGetUTF8CString(jstr, buf, sz); + rets = [NSString stringWithUTF8String:buf]; + free(buf); + return rets; + case kJSTypeObject: + // TODO: dictionary or something + return nil; + default: + NSAssert(false, @"Invalid JavaScript type"); + return nil; + } +} + +- (JSValueRef) valueFromObject:(id)obj +{ + JSValueRef val = nil; + if (!obj) + { + val = JSValueMakeNull(context); + } + else if ([obj isKindOfClass:[NSString class]]) + { + JSStringRef jstr = JSStringCreateWithUTF8CString([obj UTF8String]); + val = JSValueMakeString(context, jstr); + JSStringRelease(jstr); + } + else if ([obj isKindOfClass:[NSNumber class]]) + { + val = JSValueMakeNumber(context, [obj doubleValue]); + } + else if ([obj isKindOfClass:[NSDictionary class]]) + { + JSObjectRef o = JSObjectMake(context, NULL, NULL); + for (NSString *key in obj) + { + JSStringRef kstr = JSStringCreateWithUTF8CString([key UTF8String]); + JSValueRef v = [self valueFromObject:[obj objectForKey:key]]; + + JSObjectSetProperty(context, o, kstr, v, kJSPropertyAttributeNone, NULL); + JSStringRelease(kstr); + } + val = o; + } + else if ([obj isKindOfClass:[NSArray class]]) + { + NSUInteger pcount = [obj count]; + JSValueRef jsArgs[pcount]; + NSUInteger i=0; + for (id v in obj) + { + jsArgs[i++] = [self valueFromObject:v]; + } + val = JSObjectMakeArray(context, pcount, jsArgs, NULL); + } + else if ([obj isKindOfClass:[NSDate class]]) + { + NSTimeInterval secs = [obj timeIntervalSince1970]; + JSValueRef jsArgs[1]; + // call the Date(milliseconds) constructor in JS + jsArgs[0] = JSValueMakeNumber(context, secs * 1000.0); + val = JSObjectMakeDate(context, 1, jsArgs, NULL); + } + else + { + NSLog(@"Warning: unknown object type for: %@", obj); + val = JSValueMakeUndefined(context); + } + return val; +} + +- (id) call +{ + NSAssert(callback, @"Callback required"); + if (!JSObjectIsFunction(context, callback)) + return nil; + + JSValueRef jsArgs[0]; + JSValueRef ret = JSObjectCallAsFunction(context, callback, NULL, 0, jsArgs, NULL); + return [self objectFromValue:ret]; +} + +- (id) callWithParams:(id)firstOrNil, ... +{ + NSAssert(callback, @"Callback required"); + if (!JSObjectIsFunction(context, callback)) + return nil; + NSUInteger pcount = 0; + id p; + va_list args; + va_start(args, firstOrNil); + for (p=firstOrNil; p; p=va_arg(args, id)) + { + pcount++; + } + va_end(args); + + JSValueRef jsArgs[pcount]; + NSUInteger j = 0; + va_start(args, firstOrNil); + for (p=firstOrNil; p; p=va_arg(args, id)) + { + jsArgs[j++] = [self valueFromObject:p]; + } + va_end(args); + + JSValueRef ret = JSObjectCallAsFunction(context, callback, NULL, j, jsArgs, NULL); + return [self objectFromValue:ret]; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/App.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/App.h new file mode 100644 index 000000000..f65ba61e1 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/App.h @@ -0,0 +1,21 @@ +#import + +#import "WindowController.h" + +@interface App : NSObject { + +} + +@property (nonatomic, retain) WebView *webView; + +- (id) initWithWebView:(WebView *)view; + +- (void) terminate; +- (void) activate; +- (void) hide; +- (void) unhide; +- (void) beep; +- (void) bounce; +- (void) setCustomUserAgent:(NSString *)userAgentString; +- (NSNumber*) systemIdleTime; +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/App.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/App.m new file mode 100644 index 000000000..6d47a17e1 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/App.m @@ -0,0 +1,128 @@ +#import "App.h" + +#import "JSEventHelper.h" + +@implementation App + +@synthesize webView; + +- (id) initWithWebView:(WebView *) view{ + self = [super init]; + + if (self) { + self.webView = view; + [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver: self + selector: @selector(receiveSleepNotification:) + name: NSWorkspaceWillSleepNotification object: NULL]; + [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver: self + selector: @selector(receiveWakeNotification:) + name: NSWorkspaceDidWakeNotification object: NULL]; + [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver: self + selector: @selector(receiveActivateNotification:) + name: NSWorkspaceDidActivateApplicationNotification object: NULL]; + } + + return self; +} + +- (void) terminate { + [NSApp terminate:nil]; +} + +- (void) activate { + [NSApp activateIgnoringOtherApps:YES]; +} + +- (void) hide { + [NSApp hide:nil]; +} + +- (void) unhide { + [NSApp unhide:nil]; +} + +- (void)beep { + NSBeep(); +} + +- (void) bounce { + [NSApp requestUserAttention:NSInformationalRequest]; +} + +- (void)setCustomUserAgent:(NSString *)userAgentString { + [self.webView setCustomUserAgent: userAgentString]; +} + +- (void) open:(NSString*)url { + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]]; +} + +- (void) launch:(NSString *)name { + [[NSWorkspace sharedWorkspace] launchApplication:name]; +} + +- (void)receiveSleepNotification:(NSNotification*)note{ + [JSEventHelper triggerEvent:@"sleep" forWebView:self.webView]; +} + +- (void) receiveWakeNotification:(NSNotification*)note{ + [JSEventHelper triggerEvent:@"wake" forWebView:self.webView]; +} + +- (void) receiveActivateNotification:(NSNotification*)notification{ + NSDictionary* userInfo = [notification userInfo]; + NSRunningApplication* runningApplication = [userInfo objectForKey:NSWorkspaceApplicationKey]; + if (runningApplication) { + NSMutableDictionary* applicationDidGetFocusDict = [[NSMutableDictionary alloc] initWithCapacity:2]; + [applicationDidGetFocusDict setObject:runningApplication.localizedName + forKey:@"localizedName"]; + [applicationDidGetFocusDict setObject:[runningApplication.bundleURL absoluteString] + forKey:@"bundleURL"]; + + [JSEventHelper triggerEvent:@"appActivated" withArgs:applicationDidGetFocusDict forWebView:self.webView]; + } +} + + + + +/* + To get the elapsed time since the previous input event—keyboard, mouse, or tablet—specify kCGAnyInputEventType. + */ +- (NSNumber*)systemIdleTime { + CFTimeInterval timeSinceLastEvent = CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateHIDSystemState, kCGAnyInputEventType); + + return [NSNumber numberWithDouble:timeSinceLastEvent]; +} + + + + ++ (NSString*) webScriptNameForSelector:(SEL)selector +{ + id result = nil; + + if (selector == @selector(open:)) { + result = @"open"; + } else if (selector == @selector(launch:)) { + result = @"launch"; + } else if (selector == @selector(setCustomUserAgent:)) { + result = @"setCustomUserAgent"; + } else if (selector == @selector(systemIdleTime)) { + result = @"systemIdleTime"; + } + + return result; +} + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector +{ + return NO; +} + ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name +{ + return YES; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Command.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Command.h new file mode 100755 index 000000000..65d6b6d48 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Command.h @@ -0,0 +1,18 @@ +// +// Command.h +// MacGap +// +// Created by Joe Hildebrand on 1/10/12. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import +#import + +@interface Command : NSObject { + JSContextRef context; +} + +- (id) initWithContext:(JSContextRef)aContext; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Command.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Command.m new file mode 100755 index 000000000..39b85630a --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Command.m @@ -0,0 +1,28 @@ +// +// Command.m +// MacGap +// +// Created by Joe Hildebrand on 1/10/12. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import "Command.h" +#import + +@implementation Command + +- (id) initWithContext:(JSContextRef)aContext { + self = [super init]; + if (!self) + return nil; + context = aContext; + JSGlobalContextRetain((JSGlobalContextRef)context); + return self; +} + +- (void)dealloc +{ + if (context) + JSGlobalContextRelease((JSGlobalContextRef)context); +} +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Dock.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Dock.h new file mode 100644 index 000000000..b3c533d79 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Dock.h @@ -0,0 +1,11 @@ +#import + +@interface Dock : NSObject { + +} +- (void) setBadge:(NSString*)value; +- (NSString *) badge; + +@property (readwrite, copy) NSString *badge; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Dock.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Dock.m new file mode 100644 index 000000000..a4494d165 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Dock.m @@ -0,0 +1,31 @@ +#import "Dock.h" + +@implementation Dock + +@synthesize badge; + +- (void) setBadge:(NSString *)value +{ + NSDockTile *tile = [[NSApplication sharedApplication] dockTile]; + [tile setBadgeLabel:value]; +} + +- (NSString *) badge +{ + NSDockTile *tile = [[NSApplication sharedApplication] dockTile]; + return [tile badgeLabel]; +} + +#pragma mark WebScripting Protocol + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector +{ + return NO; +} + ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name +{ + return NO; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.h new file mode 100755 index 000000000..d765978fa --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.h @@ -0,0 +1,31 @@ +// +// MenuItemProxy.h +// MacGap +// +// Created by Joe Hildebrand on 1/15/12. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import "Command.h" +#import "CallbackDelegate.h" + +@class MenuProxy; + +@interface MenuItemProxy : Command { + NSMenuItem *item; + CallbackDelegate *callback; +} + ++ (MenuItemProxy*) proxyWithContext:(JSContextRef)aContext andMenuItem:(NSMenuItem*)anItem; + +- (MenuProxy*)addSubmenu; + +- (void) remove; +- (void) setCallback:(WebScriptObject*)aCallback; +- (void) setKey:(NSString*)keyCommand; +- (void) setTitle:(NSString*)title; +- (void) enable; +- (void) disable; +- (MenuProxy*)submenu; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.m new file mode 100755 index 000000000..7b9702cc4 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.m @@ -0,0 +1,150 @@ +// +// MenuItemProxy.m +// MacGap +// +// Created by Joe Hildebrand on 1/15/12. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import "MenuItemProxy.h" +#import "MenuProxy.h" + +@implementation MenuItemProxy + +- (id) initWithContext:(JSContextRef)aContext andMenuItem:(NSMenuItem*)anItem +{ + NSAssert(anItem, @"anItem required"); + self = [super initWithContext:aContext]; + if (!self) + return nil; + item = anItem; + item.representedObject = self; + + return self; +} + ++ (MenuItemProxy*) proxyWithContext:(JSContextRef)aContext andMenuItem:(NSMenuItem*)anItem +{ + MenuItemProxy *proxy = [anItem representedObject]; + if (proxy) + { + NSLog(@"MIP Cache hit"); + NSAssert([proxy class] == [MenuItemProxy class], @"Bad proxy"); + return proxy; + } + return [[MenuItemProxy alloc] initWithContext:aContext andMenuItem:anItem]; +} + +- (NSString*) description +{ + return [item description]; +} + +- (MenuProxy*)addSubmenu +{ + NSMenu *s = [item submenu]; + if (!s) + { + s = [[NSMenu alloc] initWithTitle:@"FFFFFFOOOOO"]; + [item setSubmenu:s]; + } + return [MenuProxy proxyWithContext:context andMenu:s]; +} + +- (void) remove +{ + NSMenu *menu = [item menu]; + [menu removeItem:item]; +} + +- (void)callCallback:(id)sender +{ + [callback callWithParams:[sender title], nil]; +} + +- (void) setCallback:(WebScriptObject*)aCallback +{ + NSAssert(item, @"item required"); + callback = [[CallbackDelegate alloc] initWithContext:context forCallback:aCallback]; + [item setAction:@selector(callCallback:)]; + [item setTarget:self]; +} + +- (void)setKey:(NSString*)keyCommand +{ + NSString *aKey = [MenuProxy getKeyFromString:keyCommand]; + [item setKeyEquivalent:aKey]; + + NSUInteger modifiers = [MenuProxy getModifiersFromString:keyCommand]; + [item setKeyEquivalentModifierMask:modifiers]; +} + +- (void) setTitle:(NSString*)title +{ + [item setTitle:title]; +} + +- (MenuProxy*)submenu; +{ + // TODO: make this work as a property + NSMenu *s = [item submenu]; + if (!s) + return nil; + return [MenuProxy proxyWithContext:context andMenu:s]; +} + +- (void) enable +{ + [item setEnabled:YES]; +} + +- (void) disable +{ + [item setEnabled:NO]; +} + +#pragma mark WebScripting protocol + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector +{ + return [self webScriptNameForSelector:selector] == nil; +} + ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name +{ + return YES; +} + ++ (NSString*) webScriptNameForSelector:(SEL)selector +{ + id result = nil; + + if (selector == @selector(addSubmenu)) { + result = @"addSubmenu"; + } + else if (selector == @selector(remove)) { + result = @"remove"; + } + else if (selector == @selector(setCallback:)) { + result = @"setCallback"; + } + else if (selector == @selector(setKey:)) { + result = @"setKey"; + } + else if (selector == @selector(setTitle:)) { + result = @"setTitle"; + } + else if (selector == @selector(submenu)) { + result = @"submenu"; + } + else if (selector == @selector(enable)) { + result = @"enable"; + } + else if (selector == @selector(disable)) { + result = @"disable"; + } + + return result; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuProxy.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuProxy.h new file mode 100755 index 000000000..afd6c6edb --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuProxy.h @@ -0,0 +1,31 @@ +// +// MenuProxy.h +// MacGap +// +// Created by Joe Hildebrand on 1/14/12. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import "Command.h" + +@class MenuItemProxy; + +@interface MenuProxy : Command { + NSMenu *menu; +} + ++ (MenuProxy*)proxyWithContext:(JSContextRef)aContext andMenu:(NSMenu*)aMenu; + +- (MenuItemProxy*)addItemWithTitle:(NSString*)title + keyEquivalent:(NSString*)aKey + callback:(WebScriptObject*)aCallback + atIndex:(NSInteger)index; + +- (MenuItemProxy*)addSeparator; +- (MenuItemProxy*)itemForKey:(id)key; +- (MenuProxy*)removeItem:(id)key; + ++ (NSString*)getKeyFromString:(NSString*)keyCommand; ++ (NSUInteger*)getModifiersFromString:(NSString*)keyCommand; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuProxy.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuProxy.m new file mode 100755 index 000000000..5bc10a763 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuProxy.m @@ -0,0 +1,233 @@ +// +// MenuProxy.m +// MacGap +// +// Created by Joe Hildebrand on 1/14/12. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import +#import + +#import "MenuProxy.h" +#import "MenuItemProxy.h" + +static char REPRESENTED_OBJECT; + +@interface NSMenu (represented) +@property (strong) id representedObject; +@end + +@implementation NSMenu (represented) + +- (id) representedObject +{ + return objc_getAssociatedObject(self, &REPRESENTED_OBJECT); +} + +- (void) setRepresentedObject:(id)representedObject +{ + objc_setAssociatedObject(self, + &REPRESENTED_OBJECT, + representedObject, + OBJC_ASSOCIATION_RETAIN); +} + +@end + +@implementation MenuProxy + +- (id) initWithContext:(JSContextRef)aContext andMenu:(NSMenu*)aMenu +{ + self = [super initWithContext:aContext]; + if (!self) + return nil; + menu = aMenu; + menu.representedObject = self; + return self; +} + ++ (MenuProxy*)proxyWithContext:(JSContextRef)aContext andMenu:(NSMenu*)aMenu +{ + // singleton-ish. + MenuProxy *ret = [aMenu representedObject]; + if (ret) + { + NSLog(@"MP cache hit"); + return ret; + } + return [[MenuProxy alloc] initWithContext:aContext andMenu:aMenu]; +} + +- (void) dealloc +{ + menu.representedObject = nil; +} + +- (NSString*) description +{ + return [menu description]; +} + +static BOOL isNullish(id o) +{ + if (!o) + return YES; + if ([o isKindOfClass:[WebUndefined class]]) + return YES; + return NO; +} + +- (MenuItemProxy*)addItemWithTitle:(NSString*)title + keyEquivalent:(NSString*)keyCommand + callback:(WebScriptObject*)aCallback + atIndex:(NSInteger)index +{ + if (isNullish(title)) + title = @""; + + NSString *aKey = [MenuProxy getKeyFromString:keyCommand]; + NSMenuItem *item = nil; + + if(index) { + item = [menu insertItemWithTitle:title action:nil keyEquivalent:aKey atIndex:index ]; + } else { + item = [menu addItemWithTitle:title action:nil keyEquivalent:aKey ]; + + } + + // Set the modifiers. + NSUInteger modifiers = [MenuProxy getModifiersFromString:keyCommand]; + [item setKeyEquivalentModifierMask:modifiers]; + + if(!menu.supermenu) { + NSMenu *s = [[NSMenu alloc] initWithTitle:title]; + [item setSubmenu:s]; + } + + MenuItemProxy *mip = [MenuItemProxy proxyWithContext:context andMenuItem:item]; + if (!isNullish(aCallback)) + [mip setCallback:aCallback]; + + + return mip; +} + ++ (NSString*)getKeyFromString:(NSString*)keyCommand { + if (isNullish(keyCommand)) + keyCommand = @""; + + // Obtain the key (if there are modifiers, it will be the last character). + NSString *aKey = @""; + if ([keyCommand length] > 0) { + aKey = [keyCommand substringFromIndex:[keyCommand length] - 1]; + } + + return aKey; +} + ++ (NSUInteger*)getModifiersFromString:(NSString*)keyCommand { + // aKeys may optionally specify one or more modifiers. + NSUInteger modifiers = 0; + + if ([keyCommand rangeOfString:@"caps"].location != NSNotFound) modifiers += NSAlphaShiftKeyMask; + if ([keyCommand rangeOfString:@"shift"].location != NSNotFound) modifiers += NSShiftKeyMask; + if ([keyCommand rangeOfString:@"cmd"].location != NSNotFound) modifiers += NSCommandKeyMask; + if ([keyCommand rangeOfString:@"ctrl"].location != NSNotFound) modifiers += NSControlKeyMask; + if ([keyCommand rangeOfString:@"opt"].location != NSNotFound) modifiers += NSAlternateKeyMask; + if ([keyCommand rangeOfString:@"alt"].location != NSNotFound) modifiers += NSAlternateKeyMask; + + return modifiers; +} + +- (MenuItemProxy*)addSeparator +{ + NSMenuItem *sep = [NSMenuItem separatorItem]; + [menu addItem:sep]; + return [MenuItemProxy proxyWithContext:context andMenuItem:sep]; +} + +- (MenuItemProxy*)itemForKey:(id)key +{ + if (isNullish(key)) + return nil; + NSMenuItem *item = nil; + if ([key isKindOfClass:[NSNumber class]]) + { + item = [menu itemAtIndex:[key intValue]]; + } + else if ([key isKindOfClass:[NSString class]]) + { + item = [menu itemWithTitle:key]; + if (!item) + { + // Try again, with ... appended. e.g. "Save..." + item = [menu itemWithTitle: + [key stringByAppendingString:@"\u2026"]]; + } + } + if (!item) + return nil; + + return [MenuItemProxy proxyWithContext:context andMenuItem:item]; +} + +- (MenuProxy*)removeItem:(id)key +{ + if (isNullish(key)) + return nil; + + NSMenuItem *item = nil; + if ([key isKindOfClass:[NSNumber class]]) + { + item = [menu itemAtIndex:[key intValue]]; + } + else if ([key isKindOfClass:[NSString class]]) + { + item = [menu itemWithTitle:key]; + if (!item) + { + // Try again, with ... appended. e.g. "Save..." + item = [menu itemWithTitle: + [key stringByAppendingString:@"\u2026"]]; + } + } + if (!item) + return nil; + + [menu removeItem:item]; + return [MenuProxy proxyWithContext:context andMenu:menu]; +} + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector +{ + return [self webScriptNameForSelector:selector] == nil; +} + ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name +{ + return YES; +} + ++ (NSString*) webScriptNameForSelector:(SEL)selector +{ + id result = nil; + + if (selector == @selector(addItemWithTitle:keyEquivalent:callback:atIndex:)) { + result = @"addItem"; + } + else if (selector == @selector(addSeparator)) { + result = @"addSeparator"; + } + else if (selector == @selector(itemForKey:)) { + result = @"getItem"; + } + else if (selector == @selector(removeItem:)) { + result = @"removeMenu"; + } + + return result; +} + + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Notice.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Notice.h new file mode 100644 index 000000000..51077a434 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Notice.h @@ -0,0 +1,26 @@ +// +// Notice.h +// MacGap +// +// Created by Christian Sullivan on 7/26/12. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import +#import "WindowController.h" + +#define APP_NOTICE_NOTIFICATION @"Notice" + +@interface Notice : NSObject { + +} + +@property (nonatomic, retain) WebView *webView; + +- (id) initWithWebView:(WebView *)view; +- (void) notify:(NSDictionary*)message; +- (void) close:(NSString*)notificationId; ++ (BOOL) available; + +@end + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Notice.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Notice.m new file mode 100644 index 000000000..a4095f9f2 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Notice.m @@ -0,0 +1,108 @@ +// +// Notice.m +// MacGap +// +// Created by Christian Sullivan on 7/26/12. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import "Notice.h" + +#import "JSEventHelper.h" + +@implementation Notice + +- (id) initWithWebView:(WebView*)view +{ + if(self = [super init]) { + self.webView = view; + [[NSUserNotificationCenter defaultUserNotificationCenter] setDelegate:self]; + } + return self; +} + +- (void) notify:(NSDictionary *)message { + NSUserNotification *notification = [[NSUserNotification alloc] init]; + [notification setTitle:[message valueForKey:@"title"]]; + [notification setInformativeText:[message valueForKey:@"content"]]; + [notification setDeliveryDate:[NSDate dateWithTimeInterval:0 sinceDate:[NSDate date]]]; + BOOL playSound = true; // optional parameter, false only when {sound: false} + @try { + NSNumber *s = [message valueForKey:@"sound"]; + if ([[s className] isEqual: @"__NSCFBoolean"]) { + playSound = [s boolValue]; + } + } + @catch (NSException *exception) { + } + if (playSound) { + [notification setSoundName:NSUserNotificationDefaultSoundName]; + } + NSString *id = @""; // optional, needed for close + @try { + id = [message valueForKey:@"id"]; + } + @catch (NSException *exception) { + } + [notification setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:id, @"id", nil]]; + NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; + [center scheduleNotification:notification]; +} + +// close all notifications with id == notificationId or close all notifications if notificationId == "*" +- (void) close:(NSString*)notificationId { + NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter]; + for(NSUserNotification * deliveredNote in center.deliveredNotifications) { + if ([notificationId isEqualToString:@"*"] || [deliveredNote.userInfo[@"id"] isEqualToString:notificationId]) { + [center removeDeliveredNotification: deliveredNote]; + } + } +} + ++ (BOOL) available { + if ([NSUserNotificationCenter respondsToSelector:@selector(defaultUserNotificationCenter)]) + return YES; + + return NO; +} + +- (void) userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification +{ + NSString *notificationId = [notification.userInfo valueForKey:@"id"]; + [JSEventHelper triggerEvent:@"macgap.notify.activated" forDetail:notificationId forWebView:self.webView]; +} + +#pragma mark WebScripting Protocol + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector +{ + BOOL result = YES; + if (selector == @selector(notify:)) + result = NO; + if (selector == @selector(close:)) + result = NO; + + return result; +} + ++ (NSString*) webScriptNameForSelector:(SEL)selector +{ + id result = nil; + + if (selector == @selector(notify:)) { + result = @"notify"; + } + if (selector == @selector(close:)) { + result = @"close"; + } + + return result; +} + +// right now exclude all properties (eg keys) ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name +{ + return YES; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Path.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Path.h new file mode 100644 index 000000000..f931340d0 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Path.h @@ -0,0 +1,21 @@ +#import + +@interface Path : NSObject { + +} + +- (NSString *) application; +- (NSString *) resource; +- (NSString *) documents; +- (NSString *) library; +- (NSString *) home; +- (NSString *) temp; + +@property (readonly,copy) NSString* application; +@property (readonly,copy) NSString* resource; +@property (readonly,copy) NSString* documents; +@property (readonly,copy) NSString* library; +@property (readonly,copy) NSString* home; +@property (readonly,copy) NSString* temp; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Path.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Path.m new file mode 100644 index 000000000..8c54100f7 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Path.m @@ -0,0 +1,53 @@ +#import "Path.h" + +@implementation Path + +@synthesize application; +@synthesize resource; +@synthesize documents; +@synthesize library; +@synthesize home; +@synthesize temp; + +- (NSString *)application { + return [[NSBundle mainBundle] bundlePath]; +} + +- (NSString *)resource { + return [[NSBundle mainBundle] resourcePath]; +} + +- (NSString *)documents { + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + return [paths objectAtIndex:0]; +} + +- (NSString *)library { + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); + NSLog( @"%@", paths ); + return [paths objectAtIndex:0]; +} + +- (NSString *)home { + return NSHomeDirectory(); +} + +- (NSString *)temp { + return NSTemporaryDirectory(); +} + +#pragma mark WebScripting Protocol + +/* checks whether a selector is acceptable to be called from JavaScript */ ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector +{ + return NO; +} + +// right now exclude all properties (eg keys) ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name +{ + return NO; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.h new file mode 100644 index 000000000..067076439 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.h @@ -0,0 +1,17 @@ +#import +#import "Command.h" +#import "CallbackDelegate.h" + + +@interface Sound : Command { + +} + +// pending callbacks for sounds being played, to keep +// ARC from freeing them too early +@property (nonatomic, strong) NSMutableSet *pending; + +- (void) play:(NSString*)file onComplete:(WebScriptObject*)callback; +- (void) playSystem:(NSString*)name onComplete:(WebScriptObject*)callback; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m new file mode 100644 index 000000000..9f4a44dbc --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m @@ -0,0 +1,97 @@ +#import "Sound.h" + + +@interface PlayDelegate : CallbackDelegate { +} + +@property (nonatomic, weak) Sound *sound; + +- (id) initWithContext:(JSContextRef)aContext + forCallback:(WebScriptObject*)aCallback + withSound:(Sound*)aSound; +@end + +@implementation PlayDelegate + +@synthesize sound; + +- (id) initWithContext:(JSContextRef)aContext + forCallback:(WebScriptObject*)aCallback + withSound:(Sound*)aSound +{ + self = [super initWithContext:aContext forCallback:aCallback]; + if (!self) + return nil; + sound = aSound; + return self; +} + +- (void)sound:(NSSound *)aSound didFinishPlaying:(BOOL)finishedPlaying { + [self callWithParams:[aSound name], nil]; + [sound.pending removeObject:self]; +} + +@end + +@implementation Sound + +@synthesize pending; + +- (id) initWithContext:(JSContextRef)aContext { + self = [super initWithContext:aContext]; + if (!self) { + return nil; + } + + pending = [NSMutableSet new]; + return self; +} + +- (void) playSound:(NSSound*)sound onComplete:(WebScriptObject*)callback { + if (callback != (id)[WebUndefined undefined]) { + PlayDelegate *d = [[PlayDelegate alloc] initWithContext:context + forCallback:callback + withSound:self]; + [pending addObject:d]; + [sound setDelegate:d]; + } + [sound play]; +} + +- (void) play:(NSString*)file onComplete:(WebScriptObject*)callback { + NSURL* fileUrl = [NSURL fileURLWithPath:[[Utils sharedInstance] pathForResource:file]]; + DebugNSLog(@"Sound file:%@", [fileUrl description]); + + NSSound* sound = [[NSSound alloc] initWithContentsOfURL:fileUrl byReference:YES]; + [self playSound:sound onComplete:callback]; +} + +- (void) playSystem:(NSString*)name onComplete:(WebScriptObject*)callback { + NSSound *systemSound = [NSSound soundNamed:name]; + [self playSound:systemSound onComplete:callback]; +} + +#pragma mark WebScripting Protocol + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector { + return [self webScriptNameForSelector:selector] == nil; +} + ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name { + return YES; +} + ++ (NSString*) webScriptNameForSelector:(SEL)selector { + id result = nil; + + if (selector == @selector(play:onComplete:)) { + result = @"play"; + } + else if (selector == @selector(playSystem:onComplete:)) { + result = @"playSystem"; + } + + return result; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/UserDefaults.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/UserDefaults.h new file mode 100644 index 000000000..269191b39 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/UserDefaults.h @@ -0,0 +1,43 @@ +// +// UserDefaults.h +// MacGap +// +// Created by Jeff Hanbury on 16/04/2014. +// Copyright (c) 2014 Twitter. All rights reserved. +// + +#import + +#import "WindowController.h" + +@interface UserDefaults : NSObject + +@property (nonatomic, retain) WebView *webView; + +- (id) initWithWebView:(WebView *)view; +- (NSString*) getMyDefaults; +- (NSDictionary*) myDefaultsDictionary; +- (void) removeObjectForKey:(NSString*)key; +- (NSArray*) getUserDefaultsKeys; + +- (NSString*) addPrefix:(NSString*)key; + +- (void) setString:(NSString*)key withValue:(NSString*)value; +- (NSString*) getString:(NSString*)key; + +- (void) setInteger:(NSString*)key withValue:(NSString*)value; +- (NSNumber*) getInteger:(NSString*)key; + +- (void) setBool:(NSString*)key withValue:(NSString*)value; +- (NSNumber*) getBool:(NSString*)key; + +- (void) setFloat:(NSString*)key withValue:(NSString*)value; +- (NSNumber*) getFloat:(NSString*)key; + +// Could also be implemented: +//– setObject:forKey: +//– setDouble:forKey: +//– setURL:forKey: + +@end + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/UserDefaults.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/UserDefaults.m new file mode 100644 index 000000000..485687108 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/UserDefaults.m @@ -0,0 +1,211 @@ +// +// UserDefaults.m +// MacGap +// +// Created by Jeff Hanbury on 16/04/2014. +// Copyright (c) 2014 Twitter. All rights reserved. +// + +#import "UserDefaults.h" +#import "JSEventHelper.h" + +@interface UserDefaults() { + +} + +-(void) setupNotificationCenter; + +@end + + +@implementation UserDefaults + +- (id) initWithWebView:(WebView *) view{ + self = [super init]; + + if (self) { + self.webView = view; + [self setupNotificationCenter]; + } + + return self; +} + + +-(void) setupNotificationCenter{ + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(defaultsChanged:) + name:NSUserDefaultsDidChangeNotification + object:nil]; +} + +- (void)defaultsChanged:(NSNotification *)notification { + NSDictionary* returnDict = [self myDefaultsDictionary]; + [JSEventHelper triggerEvent:@"userDefaultsChanged" withArgs:returnDict forWebView:self.webView]; +} + +- (NSString*) getMyDefaults { + NSDictionary* myDefaults = [self myDefaultsDictionary]; + + return [[Utils sharedInstance] convertDictionaryToJSON:myDefaults]; +} + +- (NSDictionary*) myDefaultsDictionary { + NSString* prefix = [kWebScriptNamespace stringByAppendingString:@"_"]; + NSMutableDictionary* returnDict = [[NSMutableDictionary alloc] init]; + + // Get the user defaults. + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + + // Build up a dictionary containing just the items beginning with our + // prefix. + for (NSString* key in [self getUserDefaultsKeys]) { + if ([key hasPrefix:prefix]) { + id val = [defaults valueForKey:key]; + [returnDict setObject:val forKey:key]; + } + } + + return returnDict; +} + +- (NSArray*) getUserDefaultsKeys { + NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; + return [[prefs dictionaryRepresentation] allKeys]; +} + +- (void) removeObjectForKey:(NSString*)key { + NSString* prefixedKey; + prefixedKey = [self addPrefix:key]; + + [[NSUserDefaults standardUserDefaults] removeObjectForKey:prefixedKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; +} + +// Check we have a standard prefix for JS-modified keys, for security purposes. +// If not, add it. This stops JavaScript from ever being able to modify keys +// it did not create. +- (NSString*) addPrefix:(NSString*)key { + NSString* prefix; + prefix = [kWebScriptNamespace stringByAppendingString:@"_"]; + + if (![key hasPrefix:prefix]) { + key = [prefix stringByAppendingString:key]; + } + return key; +} + +// String + +- (void) setString:(NSString*)key withValue:(NSString*)value { + NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; + NSString* prefixedKey; + prefixedKey = [self addPrefix:key]; + [prefs setObject:value forKey:prefixedKey]; +} + +- (NSString*) getString:(NSString *)key { + NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; + return [prefs stringForKey:key]; +} + +// All the following must convert their type to NSNumber for JavaScript. + +// Integer + +- (void) setInteger:(NSString*)key withValue:(NSString*)value { + NSString* prefixedKey; + prefixedKey = [self addPrefix:key]; + + NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; + NSInteger myInt = [value intValue]; + [prefs setInteger:myInt forKey:prefixedKey]; +} + +- (NSNumber*) getInteger:(NSString *)key { + NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; + return [NSNumber numberWithInteger:[prefs integerForKey:key]]; +} + +// Boolean + +- (void) setBool:(NSString*)key withValue:(NSString*)value { + NSString* prefixedKey; + prefixedKey = [self addPrefix:key]; + + NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; + BOOL myBool = [value boolValue]; + [prefs setBool:myBool forKey:prefixedKey]; +} + +- (NSNumber*) getBool:(NSString *)key { + NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; + return [NSNumber numberWithBool:[prefs boolForKey:key]]; +} + +// Float + +- (void) setFloat:(NSString*)key withValue:(NSString*)value { + NSString* prefixedKey; + prefixedKey = [self addPrefix:key]; + + NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; + float myFloat = [value floatValue]; + [prefs setFloat:myFloat forKey:prefixedKey]; +} + +- (NSNumber*) getFloat:(NSString *)key { + NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; + return [NSNumber numberWithFloat:[prefs floatForKey:key]]; +} + + +#pragma mark WebScripting Protocol + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector { + return NO; +} + ++ (NSString*) webScriptNameForSelector:(SEL)selector { + id result = nil; + + if (selector == @selector(getMyDefaults)) { + result = @"getMyDefaults"; + } + + if (selector == @selector(removeObjectForKey:)) { + result = @"removeObjectForKey"; + } + + else if (selector == @selector(setString:withValue:)) { + result = @"setString"; + } else if (selector == @selector(getString:)) { + result = @"getString"; + } + + else if (selector == @selector(setInteger:withValue:)) { + result = @"setInteger"; + } else if (selector == @selector(getInteger:)) { + result = @"getInteger"; + } + + else if (selector == @selector(setBool:withValue:)) { + result = @"setBool"; + } else if (selector == @selector(getBool:)) { + result = @"getBool"; + } + + else if (selector == @selector(setFloat:withValue:)) { + result = @"setFloat"; + } else if (selector == @selector(getFloat:)) { + result = @"getFloat"; + } + + return result; +} + ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name { + return NO; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/fonts.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/fonts.h new file mode 100644 index 000000000..62c7b7e83 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/fonts.h @@ -0,0 +1,9 @@ +@interface Fonts : NSObject { +} + +- (NSArray*) availableFonts; +- (NSArray*) availableFontFamilies; +- (NSArray*) availableMembersOfFontFamily:(NSString*)fontFamily; +- (CGFloat) defaultLineHeightForFont:(NSString *)theFontName ofSize:(CGFloat)theFontSize; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/fonts.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/fonts.m new file mode 100644 index 000000000..b17818a53 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/fonts.m @@ -0,0 +1,48 @@ +#import "fonts.h" + +@implementation Fonts + + +- (NSArray*) availableFonts { + return [[NSFontManager sharedFontManager] availableFonts]; +} + +- (NSArray*) availableFontFamilies { + return [[NSFontManager sharedFontManager] availableFontFamilies]; +} + +- (NSArray*) availableMembersOfFontFamily:(NSString *)fontFamily { + return [[NSFontManager sharedFontManager] availableMembersOfFontFamily:fontFamily]; +} + +- (CGFloat) defaultLineHeightForFont:(NSString*)theFontName ofSize:(CGFloat)theFontSize { + NSFont *theFont = [NSFont fontWithName:theFontName size:theFontSize]; + NSLayoutManager *lm = [[NSLayoutManager alloc] init]; + + return [lm defaultLineHeightForFont:theFont]; +} + + +#pragma mark WebScripting Protocol + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector { + return NO; +} + ++ (NSString*) webScriptNameForSelector:(SEL)selector { + id result = nil; + + if (selector == @selector(availableMembersOfFontFamily:)) { + result = @"availableMembersOfFontFamily"; + } else if (selector == @selector(defaultLineHeightForFont:ofSize:)) { + result = @"defaultLineHeightForFont"; + } + + return result; +} + ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name { + return NO; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Constants.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Constants.h new file mode 100644 index 000000000..1fe59d6cc --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Constants.h @@ -0,0 +1,7 @@ +// Application constants + +#define kStartPage @"http://127.0.0.1:9993/" + +#define kStartFolder @"." + +#define kWebScriptNamespace @"macgap" \ No newline at end of file diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/ContentView.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/ContentView.h new file mode 100644 index 000000000..65890a5ee --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/ContentView.h @@ -0,0 +1,15 @@ +#import +#import + +@class WebViewDelegate; + +@interface ContentView : NSView { + IBOutlet WebView* webView; + WebViewDelegate* delegate; +} + +@property (retain) WebView* webView; +@property (retain) WebViewDelegate* delegate; +@property (strong) IBOutlet NSMenu *mainMenu; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/ContentView.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/ContentView.m new file mode 100644 index 000000000..6558a191f --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/ContentView.m @@ -0,0 +1,68 @@ +#import "ContentView.h" +#import "WebViewDelegate.h" +#import "AppDelegate.h" +#import "JSEventHelper.h" + +@interface WebPreferences (WebPreferencesPrivate) + - (void)_setLocalStorageDatabasePath:(NSString *)path; + - (void) setLocalStorageEnabled: (BOOL) localStorageEnabled; + - (void) setDatabasesEnabled:(BOOL)databasesEnabled; + - (void) setDeveloperExtrasEnabled:(BOOL)developerExtrasEnabled; + - (void) setWebGLEnabled:(BOOL)webGLEnabled; + - (void) setOfflineWebApplicationCacheEnabled:(BOOL)offlineWebApplicationCacheEnabled; +@end + +@implementation ContentView + +@synthesize webView, delegate, mainMenu; + +- (void) awakeFromNib +{ + WebPreferences *webPrefs = [WebPreferences standardPreferences]; + + NSString *cappBundleName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]; + NSString *applicationSupportFile = [@"~/Library/Application Support/" stringByExpandingTildeInPath]; + NSString *savePath = [NSString pathWithComponents:[NSArray arrayWithObjects:applicationSupportFile, cappBundleName, @"LocalStorage", nil]]; + [webPrefs _setLocalStorageDatabasePath:savePath]; + [webPrefs setLocalStorageEnabled:YES]; + [webPrefs setDatabasesEnabled:YES]; + [webPrefs setDeveloperExtrasEnabled:[[NSUserDefaults standardUserDefaults] boolForKey: @"developer"]]; + [webPrefs setOfflineWebApplicationCacheEnabled:YES]; + [webPrefs setWebGLEnabled:YES]; + + [self.webView setPreferences:webPrefs]; + + NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage + sharedHTTPCookieStorage]; + [cookieStorage setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; + + [self.webView setApplicationNameForUserAgent: @"MacGap"]; + + self.delegate = [[WebViewDelegate alloc] initWithMenu:[NSApp mainMenu]]; +// [self.webView setFrameLoadDelegate:self.delegate]; +// [self.webView setUIDelegate:self.delegate]; +// [self.webView setResourceLoadDelegate:self.delegate]; +// [self.webView setDownloadDelegate:self.delegate]; +// [self.webView setPolicyDelegate:self.delegate]; + [self.webView setDrawsBackground:NO]; + [self.webView setShouldCloseWithWindow:NO]; + + [self.webView setGroupName:@"MacGap"]; + +} + +- (void) windowResized:(NSNotification*)notification; +{ + NSWindow* window = (NSWindow*)notification.object; + NSSize size = [window frame].size; + + DebugNSLog(@"window width = %f, window height = %f", size.width, size.height); + + bool isFullScreen = (window.styleMask & NSFullScreenWindowMask) == NSFullScreenWindowMask; + int titleBarHeight = isFullScreen ? 0 : [[Utils sharedInstance] titleBarHeight:window]; + + [self.webView setFrame:NSMakeRect(0, 0, size.width, size.height - titleBarHeight)]; + [JSEventHelper triggerEvent:@"orientationchange" forWebView:self.webView]; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/JSEventHelper.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/JSEventHelper.h new file mode 100644 index 000000000..401f3e396 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/JSEventHelper.h @@ -0,0 +1,20 @@ +// +// Helper.h +// MacGap +// +// Created by Liam Kaufman Simpkins on 12-01-22. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import +#import "WindowController.h" + +@interface JSEventHelper : NSObject + ++ (void) triggerEvent:(NSString *)event forWebView:(WebView *)webView; ++ (void) triggerEvent:(NSString *)event withArgs:(NSDictionary *)args forWebView:(WebView *)webView; ++ (void) triggerEvent:(NSString *)event withArgs:(NSDictionary *)args forObject:(NSString *)objName forWebView:(WebView *)webView; ++ (void) triggerEvent:(NSString *)event forDetail:(NSString *)detail forWebView:(WebView *)webView; ++ (void) triggerEvent:(NSString *)event forDetail:(NSString *)detail forObject:(NSString *)objName forWebView:(WebView *)webView; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/JSEventHelper.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/JSEventHelper.m new file mode 100644 index 000000000..65406b3c0 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/JSEventHelper.m @@ -0,0 +1,41 @@ +// +// Helper.m +// MacGap +// +// Created by Liam Kaufman Simpkins on 12-01-22. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import "JSEventHelper.h" + +@implementation JSEventHelper + ++ (void) triggerEvent:(NSString *)event forWebView:(WebView *)webView { + [self triggerEvent:event withArgs:[NSMutableDictionary dictionary] forObject:@"document" forWebView:webView]; +} + ++ (void) triggerEvent:(NSString *)event withArgs:(NSDictionary *)args forWebView:(WebView *)webView { + [self triggerEvent:event withArgs:args forObject:@"document" forWebView:webView]; +} + ++ (void) triggerEvent:(NSString *)event withArgs:(NSDictionary *)args forObject:(NSString *)objName forWebView:(WebView *)webView { + + // Convert args Dictionary to JSON. + NSString* jsonString = [[Utils sharedInstance] convertDictionaryToJSON:args]; + + // Create the event JavaScript and run it. + NSString * str = [NSString stringWithFormat:@"var e = document.createEvent('Events'); e.initEvent('%@', true, false); e.data=%@; %@.dispatchEvent(e); ", event, jsonString, objName]; + [webView stringByEvaluatingJavaScriptFromString:str]; +} + ++ (void) triggerEvent:(NSString *)event forDetail:(NSString *)detail forWebView:(WebView *)webView { + [self triggerEvent:event forDetail:detail forObject:@"document" forWebView:webView]; +} + ++ (void) triggerEvent:(NSString *)event forDetail:(NSString *)detail forObject:(NSString *)objName forWebView:(WebView *)webView { + NSString *detailEscaped = [detail stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; + NSString *str = [NSString stringWithFormat:@"var e = new CustomEvent('%@', { 'detail': decodeURIComponent(\"%@\") }); %@.dispatchEvent(e); ", event, detailEscaped, objName]; + [webView stringByEvaluatingJavaScriptFromString:str]; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Utils.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Utils.h new file mode 100644 index 000000000..f573d881a --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Utils.h @@ -0,0 +1,20 @@ +#import +#import + +#define DEG_EPS 0.001 +#define fequal(a,b) (fabs((a) - (b)) < DEG_EPS) +#define fequalzero(a) (fabs(a) < DEG_EPS) + +@class LoadingView; + +@interface Utils : NSObject { +} + +- (float) titleBarHeight:(NSWindow*)aWindow; +- (NSString*) pathForResource:(NSString*)resourcepath; +- (NSString*) convertDictionaryToJSON:(NSDictionary*)dict; +- (NSArray*) convertJSarrayToNSArray:(WebScriptObject*)jsArray; + ++ (Utils*) sharedInstance; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Utils.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Utils.m new file mode 100644 index 000000000..8d85c2949 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Utils.m @@ -0,0 +1,93 @@ +#import "Utils.h" +#import + +static Utils* sharedInstance = nil; + +@implementation Utils + +- (float) titleBarHeight:(NSWindow*)aWindow +{ + NSRect frame = [aWindow frame]; + NSRect contentRect = [NSWindow contentRectForFrameRect: frame + styleMask: NSTitledWindowMask]; + + return (frame.size.height - contentRect.size.height); +} + +- (NSString*) pathForResource:(NSString*)resourcepath +{ + NSBundle * mainBundle = [NSBundle mainBundle]; + NSMutableArray *directoryParts = [NSMutableArray arrayWithArray:[resourcepath componentsSeparatedByString:@"/"]]; + NSString *filename = [directoryParts lastObject]; + [directoryParts removeLastObject]; + + NSString *directoryStr = [NSString stringWithFormat:@"%@/%@", kStartFolder, [directoryParts componentsJoinedByString:@"/"]]; + return [mainBundle pathForResource:filename + ofType:@"" + inDirectory:directoryStr]; +} + +- (NSString*) convertDictionaryToJSON:(NSDictionary*)dict { + // Convert defaults Dictionary to JSON. + NSError *error; + NSData *jsonData = [NSJSONSerialization + dataWithJSONObject:dict + options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string + error:&error]; + + NSString *jsonString; + if (! jsonData) { + NSLog(@"Got an error converting to JSON: %@", error); + } + else { + jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + } + + return jsonString; +} + +// Convert JavaScript array (arrives as a WebScriptObject) into an NSArray of strings. +- (NSArray*) convertJSarrayToNSArray:(WebScriptObject*)jsArray { + NSInteger count = [[jsArray valueForKey:@"length"] integerValue]; + + NSMutableArray *args = [NSMutableArray array]; + for (int i = 0; i < count; i++) { + NSString *item = [jsArray webScriptValueAtIndex:i]; + if ([item isKindOfClass:[NSString class]]) { + [args addObject:item]; + } + } + + return args; +} + +#pragma mark - +#pragma mark Singleton methods + ++ (Utils*) sharedInstance +{ + @synchronized(self) + { + if (sharedInstance == nil){ + sharedInstance = [[Utils alloc] init]; + } + } + return sharedInstance; +} + ++ (id) allocWithZone:(NSZone *)zone { + @synchronized(self) { + if (sharedInstance == nil) { + sharedInstance = [super allocWithZone:zone]; + return sharedInstance; // assignment and return on first allocation + } + } + return nil; // on subsequent allocation attempts return nil +} + +- (id) copyWithZone:(NSZone *)zone +{ + return self; +} + +@end \ No newline at end of file diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/WebViewDelegate.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/WebViewDelegate.h new file mode 100644 index 000000000..49c6da6b9 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/WebViewDelegate.h @@ -0,0 +1,49 @@ +#import +#import + +@class Sound; +@class Dock; +@class Growl; +@class Notice; +@class Path; +@class App; +@class Window; +@class Clipboard; +@class Fonts; +@class MenuProxy; +@class UserDefaults; + +@class WindowController; + +@interface WebViewDelegate : NSObject { + Sound* sound; + Dock* dock; + Growl* growl; + Notice* notice; + Path* path; + App* app; + Window* window; + Clipboard* clipboard; + Fonts* fonts; + NSMenu *mainMenu; + UserDefaults* userDefaults; +} + + + +@property (nonatomic, retain) Sound* sound; +@property (nonatomic, retain) Dock* dock; +@property (nonatomic, retain) Growl* growl; +@property (nonatomic, retain) Notice* notice; +@property (nonatomic, retain) Path* path; +@property (nonatomic, retain) App* app; +@property (nonatomic, retain) Window* window; +@property (nonatomic, retain) Clipboard* clipboard; +@property (nonatomic, retain) Fonts* fonts; +@property (nonatomic, retain) MenuProxy* menu; +@property (nonatomic, retain) UserDefaults* userDefaults; + +@property (nonatomic, retain) WindowController *requestedWindow; + +- (id) initWithMenu:(NSMenu*)menu; +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/WebViewDelegate.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/WebViewDelegate.m new file mode 100644 index 000000000..505780183 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/WebViewDelegate.m @@ -0,0 +1,206 @@ +#import "WebViewDelegate.h" +#import "Sound.h" +#import "Dock.h" +#import "Notice.h" +#import "Path.h" +#import "App.h" +#import "Window.h" +#import "WindowController.h" +#import "Clipboard.h" +#import "Fonts.h" +#import "MenuProxy.h" +#import "UserDefaults.h" + +@implementation WebViewDelegate + +@synthesize sound; +@synthesize dock; +@synthesize growl; +@synthesize notice; +@synthesize path; +@synthesize app; +@synthesize window; +@synthesize requestedWindow; +@synthesize clipboard; +@synthesize fonts; +@synthesize menu; +@synthesize userDefaults; + +- (id) initWithMenu:(NSMenu*)aMenu +{ + self = [super init]; + if (!self) + return nil; + + mainMenu = aMenu; + return self; +} + +- (void) webView:(WebView*)webView didClearWindowObject:(WebScriptObject*)windowScriptObject forFrame:(WebFrame *)frame +{ + JSContextRef context = [frame globalContext]; + if (self.sound == nil) { self.sound = [[Sound alloc] initWithContext:context]; } + if (self.dock == nil) { self.dock = [Dock new]; } + if (self.path == nil) { self.path = [Path new]; } + if (self.clipboard == nil) { self.clipboard = [Clipboard new]; } + if (self.fonts == nil) { self.fonts = [Fonts new]; } + + if (self.notice == nil && [Notice available] == YES) { + self.notice = [[Notice alloc] initWithWebView:webView]; + } + + if (self.app == nil) { + self.app = [[App alloc] initWithWebView:webView]; + } + + if (self.window == nil) { + self.window = [[Window alloc] initWithWebView:webView]; + } + + if (self.menu == nil) { + self.menu = [MenuProxy proxyWithContext:context andMenu:mainMenu]; + } + + if (self.userDefaults == nil) { + self.userDefaults = [[UserDefaults alloc] initWithWebView:webView]; + } + + [windowScriptObject setValue:self forKey:kWebScriptNamespace]; +} + + +- (void)webView:(WebView *)sender runOpenPanelForFileButtonWithResultListener:(id < WebOpenPanelResultListener >)resultListener allowMultipleFiles:(BOOL)allowMultipleFiles{ + + NSOpenPanel * openDlg = [NSOpenPanel openPanel]; + + [openDlg setCanChooseFiles:YES]; + [openDlg setCanChooseDirectories:NO]; + + [openDlg beginWithCompletionHandler:^(NSInteger result){ + if (result == NSFileHandlingPanelOKButton) { + NSArray * files = [[openDlg URLs] valueForKey: @"relativePath"]; + [resultListener chooseFilenames: files]; + } else { + [resultListener cancel]; + } + }]; +} + +- (void) webView:(WebView*)webView addMessageToConsole:(NSDictionary*)message +{ + if (![message isKindOfClass:[NSDictionary class]]) { + return; + } + + NSLog(@"JavaScript console: %@:%@: %@", + [[message objectForKey:@"sourceURL"] lastPathComponent], // could be nil + [message objectForKey:@"lineNumber"], + [message objectForKey:@"message"]); +} + +- (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame +{ + NSAlert *alert = [[NSAlert alloc] init]; + [alert addButtonWithTitle:@"OK"]; + [alert setMessageText:message]; + [alert setAlertStyle:NSWarningAlertStyle]; + [alert runModal]; +} + +- (BOOL)webView:(WebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame +{ + NSAlert *alert = [[NSAlert alloc] init]; + [alert addButtonWithTitle:@"Yes"]; + [alert addButtonWithTitle:@"No"]; + [alert setMessageText:message]; + [alert setAlertStyle:NSWarningAlertStyle]; + + if ([alert runModal] == NSAlertFirstButtonReturn) + return YES; + else + return NO; +} + +/* + By default the size of a database is set to 0 [1]. When a database is being created + it calls this delegate method to get an increase in quota size - or call an error. + PS this method is defined in WebUIDelegatePrivate and may make it difficult, but + not impossible [2], to get an app accepted into the mac app store. + + Further reading: + [1] http://stackoverflow.com/questions/353808/implementing-a-webview-database-quota-delegate + [2] http://stackoverflow.com/questions/4527905/how-do-i-enable-local-storage-in-my-webkit-based-application/4608549#4608549 + */ +- (void)webView:(WebView *)sender frame:(WebFrame *)frame exceededDatabaseQuotaForSecurityOrigin:(id) origin database:(NSString *)databaseIdentifier +{ + static const unsigned long long defaultQuota = 5 * 1024 * 1024; + if ([origin respondsToSelector: @selector(setQuota:)]) { + [origin performSelector:@selector(setQuota:) withObject:[NSNumber numberWithLongLong: defaultQuota]]; + } else { + NSLog(@"could not increase quota for %lld", defaultQuota); + } +} + +- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems +{ + NSMutableArray *webViewMenuItems = [defaultMenuItems mutableCopy]; + + if (webViewMenuItems) + { + NSEnumerator *itemEnumerator = [defaultMenuItems objectEnumerator]; + NSMenuItem *menuItem = nil; + while ((menuItem = [itemEnumerator nextObject])) + { + NSInteger tag = [menuItem tag]; + + switch (tag) + { + case WebMenuItemTagOpenLinkInNewWindow: + case WebMenuItemTagDownloadLinkToDisk: + case WebMenuItemTagCopyLinkToClipboard: + case WebMenuItemTagOpenImageInNewWindow: + case WebMenuItemTagDownloadImageToDisk: + case WebMenuItemTagCopyImageToClipboard: + case WebMenuItemTagOpenFrameInNewWindow: + case WebMenuItemTagGoBack: + case WebMenuItemTagGoForward: + case WebMenuItemTagStop: + case WebMenuItemTagOpenWithDefaultApplication: + case WebMenuItemTagReload: + [webViewMenuItems removeObjectIdenticalTo: menuItem]; + } + } + } + + return webViewMenuItems; +} + +- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request{ + requestedWindow = [[WindowController alloc] initWithRequest:request]; + return requestedWindow.contentView.webView; +} + +- (void)webViewShow:(WebView *)sender{ + [requestedWindow showWindow:sender]; +} + +- (void)webView:(WebView *)webView decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id < WebPolicyDecisionListener >)listener +{ + [[NSWorkspace sharedWorkspace] openURL:[request URL]]; + [listener ignore]; +} + +#pragma mark WebScripting protocol + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector +{ + return YES; +} + ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name +{ + return NO; +} + + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Window.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Window.h new file mode 100644 index 000000000..f721376e0 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Window.h @@ -0,0 +1,23 @@ +#import + +#import "WindowController.h" + +@interface Window : NSObject{ + CGRect _oldRestoreFrame; +} + +@property (retain, nonatomic) WindowController *windowController; +@property (nonatomic, retain) WebView *webView; + +- (id) initWithWebView:(WebView *)view; +- (void) open:(NSDictionary *)properties; +- (void) move:(NSDictionary *)properties; +- (void) resize:(NSDictionary *) properties; +- (Boolean) isMaximized; +- (CGFloat) getX; +- (CGFloat) getY; +- (void) maximize; +- (void) restore; +- (void) toggleFullscreen; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Window.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Window.m new file mode 100644 index 000000000..2444f62ea --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Window.m @@ -0,0 +1,94 @@ +#import "Window.h" + +@implementation Window + +@synthesize windowController, webView; + +- (id) initWithWebView:(WebView*)view +{ + if(self = [super init]) { + self.webView = view; + } + return self; +} + +- (void) open:(NSDictionary *)properties +{ + self.windowController = [[WindowController alloc] initWithURL:[properties valueForKey:@"url"]]; + [self.windowController showWindow: [NSApplication sharedApplication].delegate]; + [self.windowController.window makeKeyWindow]; +} + +- (void) minimize { + [[NSApp mainWindow] miniaturize:[NSApp mainWindow]]; +} + +- (void) toggleFullscreen { + [[NSApp mainWindow] toggleFullScreen:[NSApp mainWindow]]; +} + +- (void) maximize { + CGRect a = [NSApp mainWindow].frame; + _oldRestoreFrame = CGRectMake(a.origin.x, a.origin.y, a.size.width, a.size.height); + [[NSApp mainWindow] setFrame:[[NSScreen mainScreen] visibleFrame] display:YES]; +} + +- (Boolean) isMaximized { + NSRect a = [NSApp mainWindow].frame; + NSRect b = [[NSScreen mainScreen] visibleFrame]; + return a.origin.x == b.origin.x && a.origin.y == b.origin.y && a.size.width == b.size.width && a.size.height == b.size.height; +} + +- (CGFloat) getX { + NSRect frame = [self.webView window].frame; + return frame.origin.x; +} + +- (CGFloat) getY { + NSRect frame = [self.webView window].frame; + return frame.origin.y; +} + +- (void) move:(NSDictionary *)properties +{ + NSRect frame = [self.webView window].frame; + frame.origin.x = [[properties valueForKey:@"x"] doubleValue]; + frame.origin.y = [[properties valueForKey:@"y"] doubleValue]; + [[self.webView window] setFrame:frame display:YES]; + +} + +- (void) resize:(NSDictionary *) properties +{ + NSRect frame = [self.webView window].frame; + frame.size.width = [[properties valueForKey:@"width"] doubleValue]; + frame.size.height = [[properties valueForKey:@"height"] doubleValue]; + [[self.webView window] setFrame:frame display:YES]; +} + + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector +{ + return NO; +} + ++ (NSString*) webScriptNameForSelector:(SEL)selector{ + id result = nil; + + if (selector == @selector(open:)) { + result = @"open"; + }else if (selector == @selector(move:)){ + result = @"move"; + }else if (selector == @selector(resize:)){ + result = @"resize"; + } + + return result; +} + ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name +{ + return YES; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Clipboard.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Clipboard.h new file mode 100644 index 000000000..6c1a2f513 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Clipboard.h @@ -0,0 +1,10 @@ +#import + +@interface Clipboard : NSObject { + +} + +- (void) copy:(NSString*)text; +- (NSString *) paste; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Clipboard.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Clipboard.m new file mode 100644 index 000000000..1c18dea38 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Clipboard.m @@ -0,0 +1,51 @@ +// +// clipboard.m +// MacGap +// +// Created by David Zorychta on 2013-07-22. +// Copyright (c) 2013 Twitter. All rights reserved. +// + +#import "Clipboard.h" + +@implementation Clipboard + +- (void) copy:(NSString*)text { + [[NSPasteboard generalPasteboard] clearContents]; + [[NSPasteboard generalPasteboard] setString:text forType:NSStringPboardType]; +} + +- (NSString *) paste { + NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; + NSArray *classArray = [NSArray arrayWithObject:[NSString class]]; + NSDictionary *options = [NSDictionary dictionary]; + BOOL ok = [pasteboard canReadObjectForClasses:classArray options:options]; + if (ok) { + NSArray *objectsToPaste = [pasteboard readObjectsForClasses:classArray options:options]; + return (NSString *) [objectsToPaste objectAtIndex:0]; + } + return @""; +} + ++ (NSString*) webScriptNameForSelector:(SEL)selector +{ + id result = nil; + + if (selector == @selector(copy:)) { + result = @"copy"; + } + + return result; +} + ++ (BOOL) isSelectorExcludedFromWebScript:(SEL)selector +{ + return NO; +} + ++ (BOOL) isKeyExcludedFromWebScript:(const char*)name +{ + return YES; +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/MacGap-Info.plist b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/MacGap-Info.plist new file mode 100644 index 000000000..7f71ea229 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/MacGap-Info.plist @@ -0,0 +1,39 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ZeroTier One + CFBundleIconFile + ZeroTierIcon + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ZeroTier One + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSApplicationCategoryType + public.app-category.utilities + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/MacGap-Prefix.pch b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/MacGap-Prefix.pch new file mode 100644 index 000000000..ad05e8420 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/MacGap-Prefix.pch @@ -0,0 +1,15 @@ +// +// Prefix header for all source files of the 'MacGap' target in the 'MacGap' project +// + +#ifdef __OBJC__ + #ifdef _DEBUG + #define DebugNSLog(format, ...) NSLog(format, ## __VA_ARGS__) + #else + #define DebugNSLog(format, ...) + #endif + + #import + #import "Constants.h" + #import "Utils.h" +#endif diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/WindowController.h b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/WindowController.h new file mode 100644 index 000000000..72927effa --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/WindowController.h @@ -0,0 +1,13 @@ +#import +#import "ContentView.h" + +@interface WindowController : NSWindowController { + +} + +- (id) initWithURL:(NSString *) url; +- (id) initWithRequest: (NSURLRequest *)request; +@property (retain) NSURL * url; +@property (retain) IBOutlet ContentView *contentView; + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/WindowController.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/WindowController.m new file mode 100644 index 000000000..2765a2e3c --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/WindowController.m @@ -0,0 +1,54 @@ +#import "WindowController.h" + + +@interface WindowController() { + +} + +-(void) notificationCenter; + +@end + +@implementation WindowController + +@synthesize contentView, url; + +- (id) initWithURL:(NSString *) relativeURL{ + self = [super initWithWindowNibName:@"Window"]; + self.url = [NSURL URLWithString:relativeURL relativeToURL:[[NSBundle mainBundle] resourceURL]]; + + [self.window setFrameAutosaveName:@"MacGapWindow"]; + [self notificationCenter]; + + return self; +} + +-(id) initWithRequest: (NSURLRequest *)request{ + self = [super initWithWindowNibName:@"Window"]; + [self notificationCenter]; + [[self.contentView.webView mainFrame] loadRequest:request]; + + return self; +} + +-(void) notificationCenter{ + [[NSNotificationCenter defaultCenter] addObserver:self.contentView + selector:@selector(windowResized:) + name:NSWindowDidResizeNotification + object:[self window]]; +} + +- (void)windowDidLoad +{ + [super windowDidLoad]; + + if (self.url != nil) { + [self.contentView.webView setMainFrameURL:[self.url absoluteString]]; + } + + + // Implement this method to handle any initialization after your + // window controller's window has been loaded from its nib file. +} + +@end diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/Credits.rtf b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/Credits.rtf new file mode 100644 index 000000000..6f388f662 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/Credits.rtf @@ -0,0 +1,13 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1347\cocoasubrtf570 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\vieww9600\viewh8400\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 + +\f0\b\fs24 \cf0 (c)2011-2015 ZeroTier, Inc.\ +Licensed under the GNU GPLv3\ +\ +UI Wrapper MacGap (c) Twitter, Inc.\ +Licensed under the MIT License\ +http://macgap.com/\ +} \ No newline at end of file diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/InfoPlist.strings b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/InfoPlist.strings new file mode 100644 index 000000000..477b28ff8 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/MainMenu.xib b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/MainMenu.xib new file mode 100644 index 000000000..dd67a86ae --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/MainMenu.xib @@ -0,0 +1,3404 @@ + + + + 1070 + 14D136 + 7702 + 1347.57 + 758.70 + + com.apple.InterfaceBuilder.CocoaPlugin + 7702 + + + NSCustomObject + NSMenu + NSMenuItem + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AppDelegate + + + AMainMenu + + + + ZeroTier One + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + + ZeroTier One + + + + About ZeroTier One + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + + Services + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide ZeroTier One + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit ZeroTier One + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + + File + + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + + Open Recent + + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save… + s + 1048576 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + + Edit + + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Paste and Match Style + V + 1572864 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + + Find + + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find and Replace… + f + 1572864 + 2147483647 + + + 12 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + + Spelling and Grammar + + + + Show Spelling and Grammar + : + 1048576 + 2147483647 + + + + + + Check Document Now + ; + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + Correct Spelling Automatically + + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + + Substitutions + + + + Show Substitutions + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Dashes + + 2147483647 + + + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + Text Replacement + + 2147483647 + + + + + + + + + Transformations + + 2147483647 + + + submenuAction: + + + Transformations + + + + Make Upper Case + + 2147483647 + + + + + + Make Lower Case + + 2147483647 + + + + + + Capitalize + + 2147483647 + + + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + + Speech + + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + + Format + + + + Font + + 2147483647 + + + submenuAction: + + + Font + + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + + Kern + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + + Ligature + + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + + Baseline + + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + + Text + + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Writing Direction + + 2147483647 + + + submenuAction: + + + Writing Direction + + + + YES + Paragraph + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Selection + + 2147483647 + + + + + + CURlZmF1bHQ + + 2147483647 + + + + + + CUxlZnQgdG8gUmlnaHQ + + 2147483647 + + + + + + CVJpZ2h0IHRvIExlZnQ + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + + View + + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + + Window + + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 2147483647 + + + submenuAction: + + + Help + + + + ZeroTier One Help + ? + 1048576 + 2147483647 + + + + + _NSHelpMenu + + + + _NSMainMenu + + + + + + + terminate: + + + + 449 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + delegate + + + + 547 + + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + saveDocument: + + + + 362 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + toggleAutomaticSpellingCorrection: + + + + 456 + + + + orderFrontSubstitutionsPanel: + + + + 458 + + + + toggleAutomaticDashSubstitution: + + + + 461 + + + + toggleAutomaticTextReplacement: + + + + 463 + + + + uppercaseWord: + + + + 464 + + + + capitalizeWord: + + + + 467 + + + + lowercaseWord: + + + + 468 + + + + pasteAsPlainText: + + + + 486 + + + + performFindPanelAction: + + + + 487 + + + + performFindPanelAction: + + + + 488 + + + + performFindPanelAction: + + + + 489 + + + + showHelp: + + + + 493 + + + + alignCenter: + + + + 518 + + + + pasteRuler: + + + + 519 + + + + toggleRuler: + + + + 520 + + + + alignRight: + + + + 521 + + + + copyRuler: + + + + 522 + + + + alignJustified: + + + + 523 + + + + alignLeft: + + + + 524 + + + + makeBaseWritingDirectionNatural: + + + + 525 + + + + makeBaseWritingDirectionLeftToRight: + + + + 526 + + + + makeBaseWritingDirectionRightToLeft: + + + + 527 + + + + makeTextWritingDirectionNatural: + + + + 528 + + + + makeTextWritingDirectionLeftToRight: + + + + 529 + + + + makeTextWritingDirectionRightToLeft: + + + + 530 + + + + performFindPanelAction: + + + + 535 + + + + delegate + + + + 545 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + + + + + + + + + + + + 19 + + + + + + + + 56 + + + + + + + + 217 + + + + + + + + 83 + + + + + + + + 81 + + + + + + + + + + + + + + + + + 75 + + + + + 78 + + + + + 72 + + + + + 82 + + + + + 124 + + + + + + + + 77 + + + + + 73 + + + + + 79 + + + + + 112 + + + + + 74 + + + + + 125 + + + + + + + + 126 + + + + + 205 + + + + + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + + + + + + 216 + + + + + + + + 200 + + + + + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 57 + + + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + + + 144 + + + + + 129 + + + + + 143 + + + + + 236 + + + + + 131 + + + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + + + + + + 296 + + + + + + + + + 297 + + + + + 298 + + + + + 211 + + + + + + + + 212 + + + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + + + + + + 349 + + + + + + + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 375 + + + + + + + + 376 + + + + + + + + + 377 + + + + + + + + 388 + + + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + + + + + + 398 + + + + + + + + 399 + + + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 450 + + + + + + + + 451 + + + + + + + + + + 452 + + + + + 453 + + + + + 454 + + + + + 457 + + + + + 459 + + + + + 460 + + + + + 462 + + + + + 465 + + + + + 466 + + + + + 485 + + + + + 490 + + + + + + + + 491 + + + + + + + + 492 + + + + + 496 + + + + + + + + 497 + + + + + + + + + + + + + + + + + 498 + + + + + 499 + + + + + 500 + + + + + 501 + + + + + 502 + + + + + 503 + + + + + + + + 504 + + + + + 505 + + + + + 506 + + + + + 507 + + + + + 508 + + + + + + + + + + + + + + + + 509 + + + + + 510 + + + + + 511 + + + + + 512 + + + + + 513 + + + + + 514 + + + + + 515 + + + + + 516 + + + + + 517 + + + + + 534 + + + + + 546 + + + + + + + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 547 + + + + + AppDelegate + NSObject + + IBProjectSource + ../MacGap/AppDelegate.h + + + + + + NSApplication + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSApplication.h + + + + NSBrowser + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSBrowser.h + + + + NSControl + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSControl.h + + + + NSDocument + NSObject + + id + id + id + id + id + id + + + + printDocument: + id + + + revertDocumentToSaved: + id + + + runPageLayout: + id + + + saveDocument: + id + + + saveDocumentAs: + id + + + saveDocumentTo: + id + + + + IBFrameworkSource + AppKit.framework/Headers/NSDocument.h + + + + NSDocumentController + NSObject + + id + id + id + id + + + + clearRecentDocuments: + id + + + newDocument: + id + + + openDocument: + id + + + saveAllDocuments: + id + + + + IBFrameworkSource + AppKit.framework/Headers/NSDocumentController.h + + + + NSFormatter + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFormatter.h + + + + NSMatrix + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSMatrix.h + + + + NSMenu + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenu.h + + + + NSMenuItem + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSMenuItem.h + + + + NSMovieView + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSMovieView.h + + + + NSPopover + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSPopover.h + + + + NSResponder + NSObject + + IBFrameworkSource + AppKit.framework/Headers/NSResponder.h + + + + NSTableView + NSControl + + IBFrameworkSource + AppKit.framework/Headers/NSTableView.h + + + + NSText + NSView + + IBFrameworkSource + AppKit.framework/Headers/NSText.h + + + + NSTextView + NSText + + IBFrameworkSource + AppKit.framework/Headers/NSTextView.h + + + + NSView + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSView.h + + + + NSViewController + NSResponder + + view + NSView + + + view + + view + NSView + + + + IBFrameworkSource + AppKit.framework/Headers/NSViewController.h + + + + NSWindow + NSResponder + + IBFrameworkSource + AppKit.framework/Headers/NSWindow.h + + + + WebView + NSView + + id + id + id + id + id + id + id + id + id + id + id + + + + goBack: + id + + + goForward: + id + + + makeTextLarger: + id + + + makeTextSmaller: + id + + + makeTextStandardSize: + id + + + reload: + id + + + reloadFromOrigin: + id + + + stopLoading: + id + + + takeStringURLFrom: + id + + + toggleContinuousSpellChecking: + id + + + toggleSmartInsertDelete: + id + + + + IBFrameworkSource + WebKit.framework/Headers/WebView.h + + + + + 0 + IBCocoaFramework + NO + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + {12, 12} + {10, 2} + + + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/Window.xib b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/Window.xib new file mode 100644 index 000000000..fa70acaa5 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/Window.xib @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/main.m b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/main.m new file mode 100644 index 000000000..4ad50ad59 --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/main.m @@ -0,0 +1,14 @@ +// +// main.m +// MacGap +// +// Created by Alex MacCaw on 08/01/2012. +// Copyright (c) 2012 Twitter. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/README.md b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/README.md new file mode 100644 index 000000000..daf3eae9c --- /dev/null +++ b/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/README.md @@ -0,0 +1,6 @@ +Mac Web UI Wrapper +====== + +This is a modified version of MacGap1 which launches a WebKit view and accesses the local ZeroTier service at its web URL. It builds the URL from the authtoken.secret file in the system home (or the user home) and the zerotier-one.port file that ZeroTier creates to advertise its control port. + +It's based on the original MacGap1 source by Twitter, Inc. which is licensed under the MIT license. diff --git a/ext/installfiles/mac/ui/Makefile b/ext/installfiles/mac/ui/Makefile new file mode 100644 index 000000000..4be03228b --- /dev/null +++ b/ext/installfiles/mac/ui/Makefile @@ -0,0 +1,6 @@ +all: + mkdir -p build + jsx --target es3 -x jsx . ./build + rm -f ztui.min.js + minify build/*.js >>ztui.min.js + rm -rf build diff --git a/ext/installfiles/mac/ui/README.md b/ext/installfiles/mac/ui/README.md new file mode 100644 index 000000000..bd5eddb63 --- /dev/null +++ b/ext/installfiles/mac/ui/README.md @@ -0,0 +1,10 @@ +ZeroTier HTML5 UI +====== + +This is the new (as of 1.0.3) ZeroTier One UI. It's implemented in HTML5 and React. + +If you make changes to the .jsx files, type 'make'. You will need NodeJS, react-tools, and minify installed and available in your path. + +For this to work, these files must be installed in the 'ui' subfolder of the ZeroTier home path. For development it's nice to symlink this to the 'ui' folder in your working directory. If the 'ui' subfolder is not present, the UI static files will not be served by the embedded web server. + +Packaging for Mac and Windows is accomplished by way of the wrappers in ext/. For Mac this is done with a modified version of MacGap. Windows uses a custom project that embeds a web view. diff --git a/ext/installfiles/mac/ui/ZeroTierNetwork.jsx b/ext/installfiles/mac/ui/ZeroTierNetwork.jsx new file mode 100644 index 000000000..f842d7587 --- /dev/null +++ b/ext/installfiles/mac/ui/ZeroTierNetwork.jsx @@ -0,0 +1,74 @@ +var ZeroTierNetwork = React.createClass({ + getInitialState: function() { + return {}; + }, + + leaveNetwork: function(event) { + Ajax.call({ + url: 'network/'+this.props.nwid+'?auth='+this.props.authToken, + cache: false, + type: 'DELETE', + success: function(data) { + if (this.props.onNetworkDeleted) + this.props.onNetworkDeleted(this.props.nwid); + }.bind(this), + error: function(error) { + }.bind(this) + }); + event.preventDefault(); + }, + + render: function() { + return ( +

+ ); + } +}); diff --git a/ext/installfiles/mac/ui/ZeroTierNode.jsx b/ext/installfiles/mac/ui/ZeroTierNode.jsx new file mode 100644 index 000000000..b4c292203 --- /dev/null +++ b/ext/installfiles/mac/ui/ZeroTierNode.jsx @@ -0,0 +1,158 @@ +var ZeroTierNode = React.createClass({ + getInitialState: function() { + return { + address: '----------', + online: false, + version: '_._._', + _networks: [], + _peers: [] + }; + }, + + ago: function(ms) { + if (ms > 0) { + var tmp = Math.round((Date.now() - ms) / 1000); + return ((tmp > 0) ? tmp : 0); + } else return 0; + }, + + updatePeers: function() { + Ajax.call({ + url: 'peer?auth='+this.props.authToken, + cache: false, + type: 'GET', + success: function(data) { + if (data) { + var pl = JSON.parse(data); + if (Array.isArray(pl)) { + this.setState({_peers: pl}); + } + } + }.bind(this), + error: function() { + }.bind(this) + }); + }, + updateNetworks: function() { + Ajax.call({ + url: 'network?auth='+this.props.authToken, + cache: false, + type: 'GET', + success: function(data) { + if (data) { + var nwl = JSON.parse(data); + if (Array.isArray(nwl)) { + this.setState({_networks: nwl}); + } + } + }.bind(this), + error: function() { + }.bind(this) + }); + }, + updateAll: function() { + Ajax.call({ + url: 'status?auth='+this.props.authToken, + cache: false, + type: 'GET', + success: function(data) { + this.alertedToFailure = false; + if (data) { + var status = JSON.parse(data); + this.setState(status); + document.title = 'ZeroTier One [' + status.address + ']'; + } + this.updateNetworks(); + this.updatePeers(); + }.bind(this), + error: function() { + this.setState(this.getInitialState()); + if (!this.alertedToFailure) { + this.alertedToFailure = true; + alert('Authorization token invalid or ZeroTier One service not running.'); + } + }.bind(this) + }); + }, + joinNetwork: function(event) { + event.preventDefault(); + if ((this.networkToJoin)&&(this.networkToJoin.length === 16)) { + Ajax.call({ + url: 'network/'+this.networkToJoin+'?auth='+this.props.authToken, + cache: false, + type: 'POST', + success: function(data) { + this.networkToJoin = ''; + if (this.networkInputElement) + this.networkInputElement.value = ''; + this.updateNetworks(); + }.bind(this), + error: function() { + }.bind(this) + }); + } else { + alert('To join a network, enter its 16-digit network ID.'); + } + }, + handleNetworkIdEntry: function(event) { + this.networkInputElement = event.target; + var nid = this.networkInputElement.value; + if (nid) { + nid = nid.toLowerCase(); + var nnid = ''; + for(var i=0;((i= 0) + nnid += nid.charAt(i); + } + this.networkToJoin = nnid; + this.networkInputElement.value = nnid; + } else { + this.networkToJoin = ''; + this.networkInputElement.value = ''; + } + }, + + handleNetworkDelete: function(nwid) { + var networks = []; + for(var i=0;i +
+
+
+ { + this.state._networks.map(function(network) { + network['authToken'] = this.props.authToken; + network['onNetworkDeleted'] = this.handleNetworkDelete; + return React.createElement('div',{className: 'network',key: network.nwid},React.createElement(ZeroTierNetwork,network)); + }.bind(this)) + } +
+
+
+
+
+ {this.state.address}  {this.state.online ? (this.state.tcpFallbackActive ? 'TUNNELED' : 'ONLINE') : 'OFFLINE'}  {this.state.version} +
+
+
+
+
+ + ); + } +}); diff --git a/ext/installfiles/mac/ui/index.html b/ext/installfiles/mac/ui/index.html new file mode 100644 index 000000000..44edb399f --- /dev/null +++ b/ext/installfiles/mac/ui/index.html @@ -0,0 +1,58 @@ + + + + + + + ZeroTier One + + + + + + +
+ + + diff --git a/ext/installfiles/mac/ui/main.js b/ext/installfiles/mac/ui/main.js new file mode 100644 index 000000000..a1647127b --- /dev/null +++ b/ext/installfiles/mac/ui/main.js @@ -0,0 +1,51 @@ +/* + * ZeroTier One - Network Virtualization Everywhere + * Copyright (C) 2011-2015 ZeroTier, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * -- + * + * ZeroTier may be used and distributed under the terms of the GPLv3, which + * are available at: http://www.gnu.org/licenses/gpl-3.0.html + * + * If you would like to embed ZeroTier into a commercial application or + * redistribute it in a modified binary form, please contact ZeroTier Networks + * LLC. Start here: http://www.zerotier.com/ + */ + +function getUrlParameter(parameter) +{ + var currLocation = window.location.search; + if (currLocation.indexOf('?') < 0) + return ''; + var parArr = currLocation.split("?")[1].split("&"); + for(var i = 0; i < parArr.length; i++){ + parr = parArr[i].split("="); + if (parr[0] == parameter) { + return decodeURIComponent(parr[1]); + } + } + return ''; +} + +var ztAuthToken = getUrlParameter('authToken'); +if ((!ztAuthToken)||(ztAuthToken.length <= 0)) { + ztAuthToken = prompt('No authToken specified in URL. Enter token from\nauthtoken.secret to authorize.'); +} + +React.render( + React.createElement(ZeroTierNode, {authToken: ztAuthToken}), + document.getElementById('main') +); diff --git a/ext/installfiles/mac/ui/react.min.js b/ext/installfiles/mac/ui/react.min.js new file mode 100644 index 000000000..9040c970f --- /dev/null +++ b/ext/installfiles/mac/ui/react.min.js @@ -0,0 +1,15 @@ +/** + * React v0.13.2 + * + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.React=e()}}(function(){return function e(t,n,r){function o(a,u){if(!n[a]){if(!t[a]){var s="function"==typeof require&&require;if(!u&&s)return s(a,!0);if(i)return i(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[a]={exports:{}};t[a][0].call(c.exports,function(e){var n=t[a][1][e];return o(n?n:e)},c,c.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a8&&11>=x),N=32,I=String.fromCharCode(N),T=f.topLevelTypes,R={beforeInput:{phasedRegistrationNames:{bubbled:C({onBeforeInput:null}),captured:C({onBeforeInputCapture:null})},dependencies:[T.topCompositionEnd,T.topKeyPress,T.topTextInput,T.topPaste]},compositionEnd:{phasedRegistrationNames:{bubbled:C({onCompositionEnd:null}),captured:C({onCompositionEndCapture:null})},dependencies:[T.topBlur,T.topCompositionEnd,T.topKeyDown,T.topKeyPress,T.topKeyUp,T.topMouseDown]},compositionStart:{phasedRegistrationNames:{bubbled:C({onCompositionStart:null}),captured:C({onCompositionStartCapture:null})},dependencies:[T.topBlur,T.topCompositionStart,T.topKeyDown,T.topKeyPress,T.topKeyUp,T.topMouseDown]},compositionUpdate:{phasedRegistrationNames:{bubbled:C({onCompositionUpdate:null}),captured:C({onCompositionUpdateCapture:null})},dependencies:[T.topBlur,T.topCompositionUpdate,T.topKeyDown,T.topKeyPress,T.topKeyUp,T.topMouseDown]}},P=!1,w=null,O={eventTypes:R,extractEvents:function(e,t,n,r){return[l(e,t,n,r),d(e,t,n,r)]}};t.exports=O},{139:139,15:15,20:20,21:21,22:22,91:91,95:95}],4:[function(e,t,n){"use strict";function r(e,t){return e+t.charAt(0).toUpperCase()+t.substring(1)}var o={boxFlex:!0,boxFlexGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,strokeDashoffset:!0,strokeOpacity:!0,strokeWidth:!0},i=["Webkit","ms","Moz","O"];Object.keys(o).forEach(function(e){i.forEach(function(t){o[r(t,e)]=o[e]})});var a={background:{backgroundImage:!0,backgroundPosition:!0,backgroundRepeat:!0,backgroundColor:!0},border:{borderWidth:!0,borderStyle:!0,borderColor:!0},borderBottom:{borderBottomWidth:!0,borderBottomStyle:!0,borderBottomColor:!0},borderLeft:{borderLeftWidth:!0,borderLeftStyle:!0,borderLeftColor:!0},borderRight:{borderRightWidth:!0,borderRightStyle:!0,borderRightColor:!0},borderTop:{borderTopWidth:!0,borderTopStyle:!0,borderTopColor:!0},font:{fontStyle:!0,fontVariant:!0,fontWeight:!0,fontSize:!0,lineHeight:!0,fontFamily:!0}},u={isUnitlessNumber:o,shorthandPropertyExpansions:a};t.exports=u},{}],5:[function(e,t,n){"use strict";var r=e(4),o=e(21),i=(e(106),e(111)),a=e(131),u=e(141),s=(e(150),u(function(e){return a(e)})),l="cssFloat";o.canUseDOM&&void 0===document.documentElement.style.cssFloat&&(l="styleFloat");var c={createMarkupForStyles:function(e){var t="";for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];null!=r&&(t+=s(n)+":",t+=i(n,r)+";")}return t||null},setValueForStyles:function(e,t){var n=e.style;for(var o in t)if(t.hasOwnProperty(o)){var a=i(o,t[o]);if("float"===o&&(o=l),a)n[o]=a;else{var u=r.shorthandPropertyExpansions[o];if(u)for(var s in u)n[s]="";else n[o]=""}}}};t.exports=c},{106:106,111:111,131:131,141:141,150:150,21:21,4:4}],6:[function(e,t,n){"use strict";function r(){this._callbacks=null,this._contexts=null}var o=e(28),i=e(27),a=e(133);i(r.prototype,{enqueue:function(e,t){this._callbacks=this._callbacks||[],this._contexts=this._contexts||[],this._callbacks.push(e),this._contexts.push(t)},notifyAll:function(){var e=this._callbacks,t=this._contexts;if(e){a(e.length===t.length),this._callbacks=null,this._contexts=null;for(var n=0,r=e.length;r>n;n++)e[n].call(t[n]);e.length=0,t.length=0}},reset:function(){this._callbacks=null,this._contexts=null},destructor:function(){this.reset()}}),o.addPoolingTo(r),t.exports=r},{133:133,27:27,28:28}],7:[function(e,t,n){"use strict";function r(e){return"SELECT"===e.nodeName||"INPUT"===e.nodeName&&"file"===e.type}function o(e){var t=x.getPooled(T.change,P,e);E.accumulateTwoPhaseDispatches(t),_.batchedUpdates(i,t)}function i(e){C.enqueueEvents(e),C.processEventQueue()}function a(e,t){R=e,P=t,R.attachEvent("onchange",o)}function u(){R&&(R.detachEvent("onchange",o),R=null,P=null)}function s(e,t,n){return e===I.topChange?n:void 0}function l(e,t,n){e===I.topFocus?(u(),a(t,n)):e===I.topBlur&&u()}function c(e,t){R=e,P=t,w=e.value,O=Object.getOwnPropertyDescriptor(e.constructor.prototype,"value"),Object.defineProperty(R,"value",k),R.attachEvent("onpropertychange",d)}function p(){R&&(delete R.value,R.detachEvent("onpropertychange",d),R=null,P=null,w=null,O=null)}function d(e){if("value"===e.propertyName){var t=e.srcElement.value;t!==w&&(w=t,o(e))}}function f(e,t,n){return e===I.topInput?n:void 0}function h(e,t,n){e===I.topFocus?(p(),c(t,n)):e===I.topBlur&&p()}function m(e,t,n){return e!==I.topSelectionChange&&e!==I.topKeyUp&&e!==I.topKeyDown||!R||R.value===w?void 0:(w=R.value,P)}function v(e){return"INPUT"===e.nodeName&&("checkbox"===e.type||"radio"===e.type)}function g(e,t,n){return e===I.topClick?n:void 0}var y=e(15),C=e(17),E=e(20),b=e(21),_=e(85),x=e(93),D=e(134),M=e(136),N=e(139),I=y.topLevelTypes,T={change:{phasedRegistrationNames:{bubbled:N({onChange:null}),captured:N({onChangeCapture:null})},dependencies:[I.topBlur,I.topChange,I.topClick,I.topFocus,I.topInput,I.topKeyDown,I.topKeyUp,I.topSelectionChange]}},R=null,P=null,w=null,O=null,S=!1;b.canUseDOM&&(S=D("change")&&(!("documentMode"in document)||document.documentMode>8));var A=!1;b.canUseDOM&&(A=D("input")&&(!("documentMode"in document)||document.documentMode>9));var k={get:function(){return O.get.call(this)},set:function(e){w=""+e,O.set.call(this,e)}},L={eventTypes:T,extractEvents:function(e,t,n,o){var i,a;if(r(t)?S?i=s:a=l:M(t)?A?i=f:(i=m,a=h):v(t)&&(i=g),i){var u=i(e,t,n);if(u){var c=x.getPooled(T.change,u,o);return E.accumulateTwoPhaseDispatches(c),c}}a&&a(e,t,n)}};t.exports=L},{134:134,136:136,139:139,15:15,17:17,20:20,21:21,85:85,93:93}],8:[function(e,t,n){"use strict";var r=0,o={createReactRootIndex:function(){return r++}};t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e,t,n){e.insertBefore(t,e.childNodes[n]||null)}var o=e(12),i=e(70),a=e(145),u=e(133),s={dangerouslyReplaceNodeWithMarkup:o.dangerouslyReplaceNodeWithMarkup,updateTextContent:a,processUpdates:function(e,t){for(var n,s=null,l=null,c=0;ct||o.hasOverloadedBooleanValue[e]&&t===!1}var o=e(10),i=e(143),a=(e(150),{createMarkupForID:function(e){return o.ID_ATTRIBUTE_NAME+"="+i(e)},createMarkupForProperty:function(e,t){if(o.isStandardName.hasOwnProperty(e)&&o.isStandardName[e]){if(r(e,t))return"";var n=o.getAttributeName[e];return o.hasBooleanValue[e]||o.hasOverloadedBooleanValue[e]&&t===!0?n:n+"="+i(t)}return o.isCustomAttribute(e)?null==t?"":e+"="+i(t):null},setValueForProperty:function(e,t,n){if(o.isStandardName.hasOwnProperty(t)&&o.isStandardName[t]){var i=o.getMutationMethod[t];if(i)i(e,n);else if(r(t,n))this.deleteValueForProperty(e,t);else if(o.mustUseAttribute[t])e.setAttribute(o.getAttributeName[t],""+n);else{var a=o.getPropertyName[t];o.hasSideEffects[t]&&""+e[a]==""+n||(e[a]=n)}}else o.isCustomAttribute(t)&&(null==n?e.removeAttribute(t):e.setAttribute(t,""+n))},deleteValueForProperty:function(e,t){if(o.isStandardName.hasOwnProperty(t)&&o.isStandardName[t]){var n=o.getMutationMethod[t];if(n)n(e,void 0);else if(o.mustUseAttribute[t])e.removeAttribute(o.getAttributeName[t]);else{var r=o.getPropertyName[t],i=o.getDefaultValueForProperty(e.nodeName,r);o.hasSideEffects[t]&&""+e[r]===i||(e[r]=i)}}else o.isCustomAttribute(t)&&e.removeAttribute(t)}});t.exports=a},{10:10,143:143,150:150}],12:[function(e,t,n){"use strict";function r(e){return e.substring(1,e.indexOf(" "))}var o=e(21),i=e(110),a=e(112),u=e(125),s=e(133),l=/^(<[^ \/>]+)/,c="data-danger-index",p={dangerouslyRenderMarkup:function(e){s(o.canUseDOM);for(var t,n={},p=0;ps;s++){var c=u[s];if(c){var p=c.extractEvents(e,t,n,o);p&&(a=i(a,p))}}return a},enqueueEvents:function(e){e&&(l=i(l,e))},processEventQueue:function(){var e=l;l=null,a(e,c),u(!l)},__purge:function(){s={}},__getListenerBank:function(){return s}};t.exports=d},{103:103,118:118,133:133,18:18,19:19}],18:[function(e,t,n){"use strict";function r(){if(u)for(var e in s){var t=s[e],n=u.indexOf(e);if(a(n>-1),!l.plugins[n]){a(t.extractEvents),l.plugins[n]=t;var r=t.eventTypes;for(var i in r)a(o(r[i],t,i))}}}function o(e,t,n){a(!l.eventNameDispatchConfigs.hasOwnProperty(n)),l.eventNameDispatchConfigs[n]=e;var r=e.phasedRegistrationNames;if(r){for(var o in r)if(r.hasOwnProperty(o)){var u=r[o];i(u,t,n)}return!0}return e.registrationName?(i(e.registrationName,t,n),!0):!1}function i(e,t,n){a(!l.registrationNameModules[e]),l.registrationNameModules[e]=t,l.registrationNameDependencies[e]=t.eventTypes[n].dependencies}var a=e(133),u=null,s={},l={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},injectEventPluginOrder:function(e){a(!u),u=Array.prototype.slice.call(e),r()},injectEventPluginsByName:function(e){var t=!1;for(var n in e)if(e.hasOwnProperty(n)){var o=e[n];s.hasOwnProperty(n)&&s[n]===o||(a(!s[n]),s[n]=o,t=!0)}t&&r()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return l.registrationNameModules[t.registrationName]||null;for(var n in t.phasedRegistrationNames)if(t.phasedRegistrationNames.hasOwnProperty(n)){var r=l.registrationNameModules[t.phasedRegistrationNames[n]];if(r)return r}return null},_resetEventPlugins:function(){u=null;for(var e in s)s.hasOwnProperty(e)&&delete s[e];l.plugins.length=0;var t=l.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var r=l.registrationNameModules;for(var o in r)r.hasOwnProperty(o)&&delete r[o]}};t.exports=l},{133:133}],19:[function(e,t,n){"use strict";function r(e){return e===v.topMouseUp||e===v.topTouchEnd||e===v.topTouchCancel}function o(e){return e===v.topMouseMove||e===v.topTouchMove}function i(e){return e===v.topMouseDown||e===v.topTouchStart}function a(e,t){var n=e._dispatchListeners,r=e._dispatchIDs;if(Array.isArray(n))for(var o=0;oe&&n[e]===o[e];e++);var a=r-e;for(t=1;a>=t&&n[r-t]===o[i-t];t++);var u=t>1?1-t:void 0;return this._fallbackText=o.slice(e,u),this._fallbackText}}),o.addPoolingTo(r),t.exports=r},{128:128,27:27,28:28}],23:[function(e,t,n){"use strict";var r,o=e(10),i=e(21),a=o.injection.MUST_USE_ATTRIBUTE,u=o.injection.MUST_USE_PROPERTY,s=o.injection.HAS_BOOLEAN_VALUE,l=o.injection.HAS_SIDE_EFFECTS,c=o.injection.HAS_NUMERIC_VALUE,p=o.injection.HAS_POSITIVE_NUMERIC_VALUE,d=o.injection.HAS_OVERLOADED_BOOLEAN_VALUE;if(i.canUseDOM){var f=document.implementation;r=f&&f.hasFeature&&f.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")}var h={isCustomAttribute:RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/),Properties:{accept:null,acceptCharset:null,accessKey:null,action:null,allowFullScreen:a|s,allowTransparency:a,alt:null,async:s,autoComplete:null,autoPlay:s,cellPadding:null,cellSpacing:null,charSet:a,checked:u|s,classID:a,className:r?a:u,cols:a|p,colSpan:null,content:null,contentEditable:null,contextMenu:a,controls:u|s,coords:null,crossOrigin:null,data:null,dateTime:a,defer:s,dir:null,disabled:a|s,download:d,draggable:null,encType:null,form:a,formAction:a,formEncType:a,formMethod:a,formNoValidate:s,formTarget:a,frameBorder:a,headers:null,height:a,hidden:a|s,high:null,href:null,hrefLang:null,htmlFor:null,httpEquiv:null,icon:null,id:u,label:null,lang:null,list:a,loop:u|s,low:null,manifest:a,marginHeight:null,marginWidth:null,max:null,maxLength:a,media:a,mediaGroup:null,method:null,min:null,multiple:u|s,muted:u|s,name:null,noValidate:s,open:s,optimum:null,pattern:null,placeholder:null,poster:null,preload:null,radioGroup:null,readOnly:u|s,rel:null,required:s,role:a,rows:a|p,rowSpan:null,sandbox:null,scope:null,scoped:s,scrolling:null,seamless:a|s,selected:u|s,shape:null,size:a|p,sizes:a,span:p,spellCheck:null,src:null,srcDoc:u,srcSet:a,start:c,step:null,style:null,tabIndex:null,target:null,title:null,type:null,useMap:null,value:u|l,width:a,wmode:a,autoCapitalize:null,autoCorrect:null,itemProp:a,itemScope:a|s,itemType:a,itemID:a,itemRef:a,property:null,unselectable:a},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMPropertyNames:{autoCapitalize:"autocapitalize",autoComplete:"autocomplete",autoCorrect:"autocorrect",autoFocus:"autofocus",autoPlay:"autoplay",encType:"encoding",hrefLang:"hreflang",radioGroup:"radiogroup",spellCheck:"spellcheck",srcDoc:"srcdoc",srcSet:"srcset"}};t.exports=h},{10:10,21:21}],24:[function(e,t,n){"use strict";function r(e){l(null==e.props.checkedLink||null==e.props.valueLink)}function o(e){r(e),l(null==e.props.value&&null==e.props.onChange)}function i(e){r(e),l(null==e.props.checked&&null==e.props.onChange)}function a(e){this.props.valueLink.requestChange(e.target.value)}function u(e){this.props.checkedLink.requestChange(e.target.checked)}var s=e(76),l=e(133),c={button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0},p={Mixin:{propTypes:{value:function(e,t,n){return!e[t]||c[e.type]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")},checked:function(e,t,n){return!e[t]||e.onChange||e.readOnly||e.disabled?null:new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")},onChange:s.func}},getValue:function(e){return e.props.valueLink?(o(e),e.props.valueLink.value):e.props.value},getChecked:function(e){return e.props.checkedLink?(i(e),e.props.checkedLink.value):e.props.checked},getOnChange:function(e){return e.props.valueLink?(o(e),a):e.props.checkedLink?(i(e),u):e.props.onChange}};t.exports=p},{133:133,76:76}],25:[function(e,t,n){"use strict";function r(e){e.remove()}var o=e(30),i=e(103),a=e(118),u=e(133),s={trapBubbledEvent:function(e,t){u(this.isMounted());var n=this.getDOMNode();u(n);var r=o.trapBubbledEvent(e,t,n);this._localEventListeners=i(this._localEventListeners,r)},componentWillUnmount:function(){this._localEventListeners&&a(this._localEventListeners,r)}};t.exports=s},{103:103,118:118,133:133,30:30}],26:[function(e,t,n){"use strict";var r=e(15),o=e(112),i=r.topLevelTypes,a={eventTypes:null,extractEvents:function(e,t,n,r){if(e===i.topTouchStart){var a=r.target;a&&!a.onclick&&(a.onclick=o)}}};t.exports=a},{112:112,15:15}],27:[function(e,t,n){"use strict";function r(e,t){if(null==e)throw new TypeError("Object.assign target cannot be null or undefined");for(var n=Object(e),r=Object.prototype.hasOwnProperty,o=1;ol;l++){var d=u[l];i.hasOwnProperty(d)&&i[d]||(d===s.topWheel?c("wheel")?v.ReactEventListener.trapBubbledEvent(s.topWheel,"wheel",n):c("mousewheel")?v.ReactEventListener.trapBubbledEvent(s.topWheel,"mousewheel",n):v.ReactEventListener.trapBubbledEvent(s.topWheel,"DOMMouseScroll",n):d===s.topScroll?c("scroll",!0)?v.ReactEventListener.trapCapturedEvent(s.topScroll,"scroll",n):v.ReactEventListener.trapBubbledEvent(s.topScroll,"scroll",v.ReactEventListener.WINDOW_HANDLE):d===s.topFocus||d===s.topBlur?(c("focus",!0)?(v.ReactEventListener.trapCapturedEvent(s.topFocus,"focus",n),v.ReactEventListener.trapCapturedEvent(s.topBlur,"blur",n)):c("focusin")&&(v.ReactEventListener.trapBubbledEvent(s.topFocus,"focusin",n),v.ReactEventListener.trapBubbledEvent(s.topBlur,"focusout",n)),i[s.topBlur]=!0,i[s.topFocus]=!0):h.hasOwnProperty(d)&&v.ReactEventListener.trapBubbledEvent(d,h[d],n),i[d]=!0)}},trapBubbledEvent:function(e,t,n){ +return v.ReactEventListener.trapBubbledEvent(e,t,n)},trapCapturedEvent:function(e,t,n){return v.ReactEventListener.trapCapturedEvent(e,t,n)},ensureScrollValueMonitoring:function(){if(!d){var e=s.refreshScrollValues;v.ReactEventListener.monitorScrollValue(e),d=!0}},eventNameDispatchConfigs:i.eventNameDispatchConfigs,registrationNameModules:i.registrationNameModules,putListener:i.putListener,getListener:i.getListener,deleteListener:i.deleteListener,deleteAllListeners:i.deleteAllListeners});t.exports=v},{102:102,134:134,15:15,17:17,18:18,27:27,59:59}],31:[function(e,t,n){"use strict";var r=e(79),o=e(116),i=e(132),a=e(147),u={instantiateChildren:function(e,t,n){var r=o(e);for(var a in r)if(r.hasOwnProperty(a)){var u=r[a],s=i(u,null);r[a]=s}return r},updateChildren:function(e,t,n,u){var s=o(t);if(!s&&!e)return null;var l;for(l in s)if(s.hasOwnProperty(l)){var c=e&&e[l],p=c&&c._currentElement,d=s[l];if(a(p,d))r.receiveComponent(c,d,n,u),s[l]=c;else{c&&r.unmountComponent(c,l);var f=i(d,null);s[l]=f}}for(l in e)!e.hasOwnProperty(l)||s&&s.hasOwnProperty(l)||r.unmountComponent(e[l]);return s},unmountChildren:function(e){for(var t in e){var n=e[t];r.unmountComponent(n)}}};t.exports=u},{116:116,132:132,147:147,79:79}],32:[function(e,t,n){"use strict";function r(e,t){this.forEachFunction=e,this.forEachContext=t}function o(e,t,n,r){var o=e;o.forEachFunction.call(o.forEachContext,t,r)}function i(e,t,n){if(null==e)return e;var i=r.getPooled(t,n);f(e,o,i),r.release(i)}function a(e,t,n){this.mapResult=e,this.mapFunction=t,this.mapContext=n}function u(e,t,n,r){var o=e,i=o.mapResult,a=!i.hasOwnProperty(n);if(a){var u=o.mapFunction.call(o.mapContext,t,r);i[n]=u}}function s(e,t,n){if(null==e)return e;var r={},o=a.getPooled(r,t,n);return f(e,u,o),a.release(o),d.create(r)}function l(e,t,n,r){return null}function c(e,t){return f(e,l,null)}var p=e(28),d=e(61),f=e(149),h=(e(150),p.twoArgumentPooler),m=p.threeArgumentPooler;p.addPoolingTo(r,h),p.addPoolingTo(a,m);var v={forEach:i,map:s,count:c};t.exports=v},{149:149,150:150,28:28,61:61}],33:[function(e,t,n){"use strict";function r(e,t){var n=D.hasOwnProperty(t)?D[t]:null;N.hasOwnProperty(t)&&y(n===_.OVERRIDE_BASE),e.hasOwnProperty(t)&&y(n===_.DEFINE_MANY||n===_.DEFINE_MANY_MERGED)}function o(e,t){if(t){y("function"!=typeof t),y(!d.isValidElement(t));var n=e.prototype;t.hasOwnProperty(b)&&M.mixins(e,t.mixins);for(var o in t)if(t.hasOwnProperty(o)&&o!==b){var i=t[o];if(r(n,o),M.hasOwnProperty(o))M[o](e,i);else{var a=D.hasOwnProperty(o),l=n.hasOwnProperty(o),c=i&&i.__reactDontBind,p="function"==typeof i,f=p&&!a&&!l&&!c;if(f)n.__reactAutoBindMap||(n.__reactAutoBindMap={}),n.__reactAutoBindMap[o]=i,n[o]=i;else if(l){var h=D[o];y(a&&(h===_.DEFINE_MANY_MERGED||h===_.DEFINE_MANY)),h===_.DEFINE_MANY_MERGED?n[o]=u(n[o],i):h===_.DEFINE_MANY&&(n[o]=s(n[o],i))}else n[o]=i}}}}function i(e,t){if(t)for(var n in t){var r=t[n];if(t.hasOwnProperty(n)){var o=n in M;y(!o);var i=n in e;y(!i),e[n]=r}}}function a(e,t){y(e&&t&&"object"==typeof e&&"object"==typeof t);for(var n in t)t.hasOwnProperty(n)&&(y(void 0===e[n]),e[n]=t[n]);return e}function u(e,t){return function(){var n=e.apply(this,arguments),r=t.apply(this,arguments);if(null==n)return r;if(null==r)return n;var o={};return a(o,n),a(o,r),o}}function s(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function l(e,t){var n=t.bind(e);return n}function c(e){for(var t in e.__reactAutoBindMap)if(e.__reactAutoBindMap.hasOwnProperty(t)){var n=e.__reactAutoBindMap[t];e[t]=l(e,f.guard(n,e.constructor.displayName+"."+t))}}var p=e(34),d=(e(39),e(55)),f=e(58),h=e(65),m=e(66),v=(e(75),e(74),e(84)),g=e(27),y=e(133),C=e(138),E=e(139),b=(e(150),E({mixins:null})),_=C({DEFINE_ONCE:null,DEFINE_MANY:null,OVERRIDE_BASE:null,DEFINE_MANY_MERGED:null}),x=[],D={mixins:_.DEFINE_MANY,statics:_.DEFINE_MANY,propTypes:_.DEFINE_MANY,contextTypes:_.DEFINE_MANY,childContextTypes:_.DEFINE_MANY,getDefaultProps:_.DEFINE_MANY_MERGED,getInitialState:_.DEFINE_MANY_MERGED,getChildContext:_.DEFINE_MANY_MERGED,render:_.DEFINE_ONCE,componentWillMount:_.DEFINE_MANY,componentDidMount:_.DEFINE_MANY,componentWillReceiveProps:_.DEFINE_MANY,shouldComponentUpdate:_.DEFINE_ONCE,componentWillUpdate:_.DEFINE_MANY,componentDidUpdate:_.DEFINE_MANY,componentWillUnmount:_.DEFINE_MANY,updateComponent:_.OVERRIDE_BASE},M={displayName:function(e,t){e.displayName=t},mixins:function(e,t){if(t)for(var n=0;n";return this._createOpenTagMarkupAndPutListeners(t)+this._createContentMarkup(t,n)+o},_createOpenTagMarkupAndPutListeners:function(e){var t=this._currentElement.props,n="<"+this._tag;for(var r in t)if(t.hasOwnProperty(r)){var i=t[r];if(null!=i)if(b.hasOwnProperty(r))o(this._rootNodeID,r,i,e);else{r===x&&(i&&(i=this._previousStyleCopy=m({},t.style)),i=u.createMarkupForStyles(i));var a=l.createMarkupForProperty(r,i);a&&(n+=" "+a)}}if(e.renderToStaticMarkup)return n+">";var s=l.createMarkupForID(this._rootNodeID);return n+" "+s+">"},_createContentMarkup:function(e,t){var n="";("listing"===this._tag||"pre"===this._tag||"textarea"===this._tag)&&(n="\n");var r=this._currentElement.props,o=r.dangerouslySetInnerHTML;if(null!=o){if(null!=o.__html)return n+o.__html}else{var i=_[typeof r.children]?r.children:null,a=null!=i?null:r.children;if(null!=i)return n+v(i);if(null!=a){var u=this.mountChildren(a,e,t);return n+u.join("")}}return n},receiveComponent:function(e,t,n){var r=this._currentElement;this._currentElement=e,this.updateComponent(t,r,e,n)},updateComponent:function(e,t,n,o){r(this._currentElement.props),this._updateDOMProperties(t.props,e),this._updateDOMChildren(t.props,e,o)},_updateDOMProperties:function(e,t){var n,r,i,a=this._currentElement.props;for(n in e)if(!a.hasOwnProperty(n)&&e.hasOwnProperty(n))if(n===x){var u=this._previousStyleCopy;for(r in u)u.hasOwnProperty(r)&&(i=i||{},i[r]="");this._previousStyleCopy=null}else b.hasOwnProperty(n)?C(this._rootNodeID,n):(s.isStandardName[n]||s.isCustomAttribute(n))&&M.deletePropertyByID(this._rootNodeID,n);for(n in a){var l=a[n],c=n===x?this._previousStyleCopy:e[n];if(a.hasOwnProperty(n)&&l!==c)if(n===x)if(l?l=this._previousStyleCopy=m({},l):this._previousStyleCopy=null,c){for(r in c)!c.hasOwnProperty(r)||l&&l.hasOwnProperty(r)||(i=i||{},i[r]="");for(r in l)l.hasOwnProperty(r)&&c[r]!==l[r]&&(i=i||{},i[r]=l[r])}else i=l;else b.hasOwnProperty(n)?o(this._rootNodeID,n,l,t):(s.isStandardName[n]||s.isCustomAttribute(n))&&M.updatePropertyByID(this._rootNodeID,n,l)}i&&M.updateStylesByID(this._rootNodeID,i)},_updateDOMChildren:function(e,t,n){var r=this._currentElement.props,o=_[typeof e.children]?e.children:null,i=_[typeof r.children]?r.children:null,a=e.dangerouslySetInnerHTML&&e.dangerouslySetInnerHTML.__html,u=r.dangerouslySetInnerHTML&&r.dangerouslySetInnerHTML.__html,s=null!=o?null:e.children,l=null!=i?null:r.children,c=null!=o||null!=a,p=null!=i||null!=u;null!=s&&null==l?this.updateChildren(null,t,n):c&&!p&&this.updateTextContent(""),null!=i?o!==i&&this.updateTextContent(""+i):null!=u?a!==u&&M.updateInnerHTMLByID(this._rootNodeID,u):null!=l&&this.updateChildren(l,t,n)},unmountComponent:function(){this.unmountChildren(),c.deleteAllListeners(this._rootNodeID),p.unmountIDFromEnvironment(this._rootNodeID),this._rootNodeID=null}},h.measureMethods(a,"ReactDOMComponent",{mountComponent:"mountComponent",updateComponent:"updateComponent"}),m(a.prototype,a.Mixin,f.Mixin),a.injection={injectIDOperations:function(e){a.BackendIDOperations=M=e}},t.exports=a},{10:10,11:11,114:114,133:133,134:134,139:139,150:150,27:27,30:30,35:35,5:5,68:68,69:69,73:73}],43:[function(e,t,n){"use strict";var r=e(15),o=e(25),i=e(29),a=e(33),u=e(55),s=u.createFactory("form"),l=a.createClass({displayName:"ReactDOMForm",tagName:"FORM",mixins:[i,o],render:function(){return s(this.props)},componentDidMount:function(){this.trapBubbledEvent(r.topLevelTypes.topReset,"reset"),this.trapBubbledEvent(r.topLevelTypes.topSubmit,"submit")}});t.exports=l},{15:15,25:25,29:29,33:33,55:55}],44:[function(e,t,n){"use strict";var r=e(5),o=e(9),i=e(11),a=e(68),u=e(73),s=e(133),l=e(144),c={dangerouslySetInnerHTML:"`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.",style:"`style` must be set using `updateStylesByID()`."},p={updatePropertyByID:function(e,t,n){var r=a.getNode(e);s(!c.hasOwnProperty(t)),null!=n?i.setValueForProperty(r,t,n):i.deleteValueForProperty(r,t)},deletePropertyByID:function(e,t,n){var r=a.getNode(e);s(!c.hasOwnProperty(t)),i.deleteValueForProperty(r,t,n)},updateStylesByID:function(e,t){var n=a.getNode(e);r.setValueForStyles(n,t)},updateInnerHTMLByID:function(e,t){var n=a.getNode(e);l(n,t)},updateTextContentByID:function(e,t){var n=a.getNode(e);o.updateTextContent(n,t)},dangerouslyReplaceNodeWithMarkupByID:function(e,t){var n=a.getNode(e);o.dangerouslyReplaceNodeWithMarkup(n,t)},dangerouslyProcessChildrenUpdates:function(e,t){for(var n=0;nl;l++){var h=s[l];if(h!==i&&h.form===i.form){var v=c.getID(h);f(v);var g=m[v];f(g),p.asap(r,g)}}}return t}});t.exports=v},{11:11,133:133,2:2,24:24,27:27,29:29,33:33,55:55,68:68,85:85}],48:[function(e,t,n){"use strict";var r=e(29),o=e(33),i=e(55),a=(e(150),i.createFactory("option")),u=o.createClass({displayName:"ReactDOMOption",tagName:"OPTION",mixins:[r],componentWillMount:function(){},render:function(){return a(this.props,this.props.children)}});t.exports=u},{150:150,29:29,33:33,55:55}],49:[function(e,t,n){"use strict";function r(){if(this._pendingUpdate){this._pendingUpdate=!1;var e=u.getValue(this);null!=e&&this.isMounted()&&i(this,e)}}function o(e,t,n){if(null==e[t])return null;if(e.multiple){if(!Array.isArray(e[t]))return new Error("The `"+t+"` prop supplied to must be a scalar value if `multiple` is false.")}function i(e,t){var n,r,o,i=e.getDOMNode().options;if(e.props.multiple){for(n={},r=0,o=t.length;o>r;r++)n[""+t[r]]=!0;for(r=0,o=i.length;o>r;r++){var a=n.hasOwnProperty(i[r].value);i[r].selected!==a&&(i[r].selected=a)}}else{for(n=""+t,r=0,o=i.length;o>r;r++)if(i[r].value===n)return void(i[r].selected=!0);i.length&&(i[0].selected=!0)}}var a=e(2),u=e(24),s=e(29),l=e(33),c=e(55),p=e(85),d=e(27),f=c.createFactory("select"),h=l.createClass({displayName:"ReactDOMSelect",tagName:"SELECT",mixins:[a,u.Mixin,s],propTypes:{defaultValue:o,value:o},render:function(){var e=d({},this.props);return e.onChange=this._handleChange,e.value=null,f(e,this.props.children)},componentWillMount:function(){this._pendingUpdate=!1},componentDidMount:function(){var e=u.getValue(this);null!=e?i(this,e):null!=this.props.defaultValue&&i(this,this.props.defaultValue)},componentDidUpdate:function(e){var t=u.getValue(this);null!=t?(this._pendingUpdate=!1,i(this,t)):!e.multiple!=!this.props.multiple&&(null!=this.props.defaultValue?i(this,this.props.defaultValue):i(this,this.props.multiple?[]:""))},_handleChange:function(e){var t,n=u.getOnChange(this);return n&&(t=n.call(this,e)),this._pendingUpdate=!0,p.asap(r,this),t}});t.exports=h},{2:2,24:24,27:27,29:29,33:33,55:55,85:85}],50:[function(e,t,n){"use strict";function r(e,t,n,r){return e===n&&t===r}function o(e){var t=document.selection,n=t.createRange(),r=n.text.length,o=n.duplicate();o.moveToElementText(e),o.setEndPoint("EndToStart",n);var i=o.text.length,a=i+r;return{start:i,end:a}}function i(e){var t=window.getSelection&&window.getSelection();if(!t||0===t.rangeCount)return null;var n=t.anchorNode,o=t.anchorOffset,i=t.focusNode,a=t.focusOffset,u=t.getRangeAt(0),s=r(t.anchorNode,t.anchorOffset,t.focusNode,t.focusOffset),l=s?0:u.toString().length,c=u.cloneRange();c.selectNodeContents(e),c.setEnd(u.startContainer,u.startOffset);var p=r(c.startContainer,c.startOffset,c.endContainer,c.endOffset),d=p?0:c.toString().length,f=d+l,h=document.createRange();h.setStart(n,o),h.setEnd(i,a);var m=h.collapsed;return{start:m?f:d,end:m?d:f}}function a(e,t){var n,r,o=document.selection.createRange().duplicate();"undefined"==typeof t.end?(n=t.start,r=n):t.start>t.end?(n=t.end,r=t.start):(n=t.start,r=t.end),o.moveToElementText(e),o.moveStart("character",n),o.setEndPoint("EndToStart",o),o.moveEnd("character",r-n),o.select()}function u(e,t){if(window.getSelection){var n=window.getSelection(),r=e[c()].length,o=Math.min(t.start,r),i="undefined"==typeof t.end?o:Math.min(t.end,r);if(!n.extend&&o>i){var a=i;i=o,o=a}var u=l(e,o),s=l(e,i);if(u&&s){var p=document.createRange();p.setStart(u.node,u.offset),n.removeAllRanges(),o>i?(n.addRange(p),n.extend(s.node,s.offset)):(p.setEnd(s.node,s.offset),n.addRange(p))}}}var s=e(21),l=e(126),c=e(128),p=s.canUseDOM&&"selection"in document&&!("getSelection"in window),d={getOffsets:p?o:i,setOffsets:p?a:u};t.exports=d},{126:126,128:128,21:21}],51:[function(e,t,n){"use strict";var r=e(11),o=e(35),i=e(42),a=e(27),u=e(114),s=function(e){};a(s.prototype,{construct:function(e){this._currentElement=e,this._stringText=""+e,this._rootNodeID=null,this._mountIndex=0},mountComponent:function(e,t,n){this._rootNodeID=e;var o=u(this._stringText);return t.renderToStaticMarkup?o:""+o+""},receiveComponent:function(e,t){if(e!==this._currentElement){this._currentElement=e;var n=""+e;n!==this._stringText&&(this._stringText=n,i.BackendIDOperations.updateTextContentByID(this._rootNodeID,n))}},unmountComponent:function(){o.unmountIDFromEnvironment(this._rootNodeID)}}),t.exports=s},{11:11,114:114,27:27,35:35,42:42}],52:[function(e,t,n){"use strict";function r(){this.isMounted()&&this.forceUpdate()}var o=e(2),i=e(11),a=e(24),u=e(29),s=e(33),l=e(55),c=e(85),p=e(27),d=e(133),f=(e(150),l.createFactory("textarea")),h=s.createClass({displayName:"ReactDOMTextarea",tagName:"TEXTAREA",mixins:[o,a.Mixin,u],getInitialState:function(){var e=this.props.defaultValue,t=this.props.children;null!=t&&(d(null==e),Array.isArray(t)&&(d(t.length<=1),t=t[0]),e=""+t),null==e&&(e="");var n=a.getValue(this);return{initialValue:""+(null!=n?n:e)}},render:function(){var e=p({},this.props);return d(null==e.dangerouslySetInnerHTML),e.defaultValue=null,e.value=null,e.onChange=this._handleChange,f(e,this.state.initialValue)},componentDidUpdate:function(e,t,n){var r=a.getValue(this);if(null!=r){var o=this.getDOMNode();i.setValueForProperty(o,"value",""+r)}},_handleChange:function(e){var t,n=a.getOnChange(this);return n&&(t=n.call(this,e)),c.asap(r,this),t}});t.exports=h},{11:11,133:133,150:150,2:2,24:24,27:27,29:29,33:33,55:55,85:85}],53:[function(e,t,n){"use strict";function r(){this.reinitializeTransaction()}var o=e(85),i=e(101),a=e(27),u=e(112),s={initialize:u,close:function(){d.isBatchingUpdates=!1}},l={initialize:u,close:o.flushBatchedUpdates.bind(o)},c=[l,s];a(r.prototype,i.Mixin,{getTransactionWrappers:function(){return c}});var p=new r,d={isBatchingUpdates:!1,batchedUpdates:function(e,t,n,r,o){var i=d.isBatchingUpdates;d.isBatchingUpdates=!0,i?e(t,n,r,o):p.perform(e,null,t,n,r,o)}};t.exports=d},{101:101,112:112,27:27,85:85}],54:[function(e,t,n){"use strict";function r(e){return h.createClass({tagName:e.toUpperCase(),render:function(){return new T(e,null,null,null,null,this.props)}})}function o(){P.EventEmitter.injectReactEventListener(R),P.EventPluginHub.injectEventPluginOrder(s),P.EventPluginHub.injectInstanceHandle(w),P.EventPluginHub.injectMount(O),P.EventPluginHub.injectEventPluginsByName({SimpleEventPlugin:L,EnterLeaveEventPlugin:l,ChangeEventPlugin:a,MobileSafariClickEventPlugin:d,SelectEventPlugin:A,BeforeInputEventPlugin:i}),P.NativeComponent.injectGenericComponentClass(g),P.NativeComponent.injectTextComponentClass(I),P.NativeComponent.injectAutoWrapper(r),P.Class.injectMixin(f),P.NativeComponent.injectComponentClasses({button:y,form:C,iframe:_,img:E,input:x,option:D,select:M,textarea:N,html:F("html"),head:F("head"),body:F("body")}),P.DOMProperty.injectDOMPropertyConfig(p),P.DOMProperty.injectDOMPropertyConfig(U),P.EmptyComponent.injectEmptyComponent("noscript"),P.Updates.injectReconcileTransaction(S),P.Updates.injectBatchingStrategy(v),P.RootIndex.injectCreateReactRootIndex(c.canUseDOM?u.createReactRootIndex:k.createReactRootIndex),P.Component.injectEnvironment(m),P.DOMComponent.injectIDOperations(b)}var i=e(3),a=e(7),u=e(8),s=e(13),l=e(14),c=e(21),p=e(23),d=e(26),f=e(29),h=e(33),m=e(35),v=e(53),g=e(42),y=e(41),C=e(43),E=e(46),b=e(44),_=e(45),x=e(47),D=e(48),M=e(49),N=e(52),I=e(51),T=e(55),R=e(60),P=e(62),w=e(64),O=e(68),S=e(78),A=e(87),k=e(88),L=e(89),U=e(86),F=e(109);t.exports={inject:o}},{109:109,13:13,14:14,21:21,23:23,26:26,29:29,3:3,33:33,35:35,41:41,42:42,43:43,44:44,45:45,46:46,47:47,48:48,49:49,51:51,52:52,53:53,55:55,60:60,62:62,64:64,68:68,7:7,78:78,8:8,86:86,87:87,88:88, +89:89}],55:[function(e,t,n){"use strict";var r=e(38),o=e(39),i=e(27),a=(e(150),{key:!0,ref:!0}),u=function(e,t,n,r,o,i){this.type=e,this.key=t,this.ref=n,this._owner=r,this._context=o,this.props=i};u.prototype={_isReactElement:!0},u.createElement=function(e,t,n){var i,s={},l=null,c=null;if(null!=t){c=void 0===t.ref?null:t.ref,l=void 0===t.key?null:""+t.key;for(i in t)t.hasOwnProperty(i)&&!a.hasOwnProperty(i)&&(s[i]=t[i])}var p=arguments.length-2;if(1===p)s.children=n;else if(p>1){for(var d=Array(p),f=0;p>f;f++)d[f]=arguments[f+2];s.children=d}if(e&&e.defaultProps){var h=e.defaultProps;for(i in h)"undefined"==typeof s[i]&&(s[i]=h[i])}return new u(e,l,c,o.current,r.current,s)},u.createFactory=function(e){var t=u.createElement.bind(null,e);return t.type=e,t},u.cloneAndReplaceProps=function(e,t){var n=new u(e.type,e.key,e.ref,e._owner,e._context,t);return n},u.cloneElement=function(e,t,n){var r,s=i({},e.props),l=e.key,c=e.ref,p=e._owner;if(null!=t){void 0!==t.ref&&(c=t.ref,p=o.current),void 0!==t.key&&(l=""+t.key);for(r in t)t.hasOwnProperty(r)&&!a.hasOwnProperty(r)&&(s[r]=t[r])}var d=arguments.length-2;if(1===d)s.children=n;else if(d>1){for(var f=Array(d),h=0;d>h;h++)f[h]=arguments[h+2];s.children=f}return new u(e.type,l,c,p,e._context,s)},u.isValidElement=function(e){var t=!(!e||!e._isReactElement);return t},t.exports=u},{150:150,27:27,38:38,39:39}],56:[function(e,t,n){"use strict";function r(){if(y.current){var e=y.current.getName();if(e)return" Check the render method of `"+e+"`."}return""}function o(e){var t=e&&e.getPublicInstance();if(!t)return void 0;var n=t.constructor;return n?n.displayName||n.name||void 0:void 0}function i(){var e=y.current;return e&&o(e)||void 0}function a(e,t){e._store.validated||null!=e.key||(e._store.validated=!0,s('Each child in an array or iterator should have a unique "key" prop.',e,t))}function u(e,t,n){D.test(e)&&s("Child objects should have non-numeric keys so ordering is preserved.",t,n)}function s(e,t,n){var r=i(),a="string"==typeof n?n:n.displayName||n.name,u=r||a,s=_[e]||(_[e]={});if(!s.hasOwnProperty(u)){s[u]=!0;var l="";if(t&&t._owner&&t._owner!==y.current){var c=o(t._owner);l=" It was passed a child from "+c+"."}}}function l(e,t){if(Array.isArray(e))for(var n=0;n");var u="";o&&(u=" The element was created by "+o+".")}}function d(e,t){return e!==e?t!==t:0===e&&0===t?1/e===1/t:e===t}function f(e){if(e._store){var t=e._store.originalProps,n=e.props;for(var r in n)n.hasOwnProperty(r)&&(t.hasOwnProperty(r)&&d(t[r],n[r])||(p(r,e),t[r]=n[r]))}}function h(e){if(null!=e.type){var t=C.getComponentClassForElement(e),n=t.displayName||t.name;t.propTypes&&c(n,t.propTypes,e.props,g.prop),"function"==typeof t.getDefaultProps}}var m=e(55),v=e(61),g=e(75),y=(e(74),e(39)),C=e(71),E=e(124),b=e(133),_=(e(150),{}),x={},D=/^\d+$/,M={},N={checkAndWarnForMutatedProps:f,createElement:function(e,t,n){var r=m.createElement.apply(this,arguments);if(null==r)return r;for(var o=2;oo;o++){t=e.ancestors[o];var a=p.getID(t)||"";v._handleTopLevel(e.topLevelType,t,a,e.nativeEvent)}}function a(e){var t=m(window);e(t)}var u=e(16),s=e(21),l=e(28),c=e(64),p=e(68),d=e(85),f=e(27),h=e(123),m=e(129);f(o.prototype,{destructor:function(){this.topLevelType=null,this.nativeEvent=null,this.ancestors.length=0}}),l.addPoolingTo(o,l.twoArgumentPooler);var v={_enabled:!0,_handleTopLevel:null,WINDOW_HANDLE:s.canUseDOM?window:null,setHandleTopLevel:function(e){v._handleTopLevel=e},setEnabled:function(e){v._enabled=!!e},isEnabled:function(){return v._enabled},trapBubbledEvent:function(e,t,n){var r=n;return r?u.listen(r,t,v.dispatchEvent.bind(null,e)):null},trapCapturedEvent:function(e,t,n){var r=n;return r?u.capture(r,t,v.dispatchEvent.bind(null,e)):null},monitorScrollValue:function(e){var t=a.bind(null,e);u.listen(window,"scroll",t)},dispatchEvent:function(e,t){if(v._enabled){var n=o.getPooled(e,t);try{d.batchedUpdates(i,n)}finally{o.release(n)}}}};t.exports=v},{123:123,129:129,16:16,21:21,27:27,28:28,64:64,68:68,85:85}],61:[function(e,t,n){"use strict";var r=(e(55),e(150),{create:function(e){return e},extract:function(e){return e},extractIfFragment:function(e){return e}});t.exports=r},{150:150,55:55}],62:[function(e,t,n){"use strict";var r=e(10),o=e(17),i=e(36),a=e(33),u=e(57),s=e(30),l=e(71),c=e(42),p=e(73),d=e(81),f=e(85),h={Component:i.injection,Class:a.injection,DOMComponent:c.injection,DOMProperty:r.injection,EmptyComponent:u.injection,EventPluginHub:o.injection,EventEmitter:s.injection,NativeComponent:l.injection,Perf:p.injection,RootIndex:d.injection,Updates:f.injection};t.exports=h},{10:10,17:17,30:30,33:33,36:36,42:42,57:57,71:71,73:73,81:81,85:85}],63:[function(e,t,n){"use strict";function r(e){return i(document.documentElement,e)}var o=e(50),i=e(107),a=e(117),u=e(119),s={hasSelectionCapabilities:function(e){return e&&("INPUT"===e.nodeName&&"text"===e.type||"TEXTAREA"===e.nodeName||"true"===e.contentEditable)},getSelectionInformation:function(){var e=u();return{focusedElem:e,selectionRange:s.hasSelectionCapabilities(e)?s.getSelection(e):null}},restoreSelection:function(e){var t=u(),n=e.focusedElem,o=e.selectionRange;t!==n&&r(n)&&(s.hasSelectionCapabilities(n)&&s.setSelection(n,o),a(n))},getSelection:function(e){var t;if("selectionStart"in e)t={start:e.selectionStart,end:e.selectionEnd};else if(document.selection&&"INPUT"===e.nodeName){var n=document.selection.createRange();n.parentElement()===e&&(t={start:-n.moveStart("character",-e.value.length),end:-n.moveEnd("character",-e.value.length)})}else t=o.getOffsets(e);return t||{start:0,end:0}},setSelection:function(e,t){var n=t.start,r=t.end;if("undefined"==typeof r&&(r=n),"selectionStart"in e)e.selectionStart=n,e.selectionEnd=Math.min(r,e.value.length);else if(document.selection&&"INPUT"===e.nodeName){var i=e.createTextRange();i.collapse(!0),i.moveStart("character",n),i.moveEnd("character",r-n),i.select()}else o.setOffsets(e,t)}};t.exports=s},{107:107,117:117,119:119,50:50}],64:[function(e,t,n){"use strict";function r(e){return f+e.toString(36)}function o(e,t){return e.charAt(t)===f||t===e.length}function i(e){return""===e||e.charAt(0)===f&&e.charAt(e.length-1)!==f}function a(e,t){return 0===t.indexOf(e)&&o(t,e.length)}function u(e){return e?e.substr(0,e.lastIndexOf(f)):""}function s(e,t){if(d(i(e)&&i(t)),d(a(e,t)),e===t)return e;var n,r=e.length+h;for(n=r;n=a;a++)if(o(e,a)&&o(t,a))r=a;else if(e.charAt(a)!==t.charAt(a))break;var u=e.substr(0,r);return d(i(u)),u}function c(e,t,n,r,o,i){e=e||"",t=t||"",d(e!==t);var l=a(t,e);d(l||a(e,t));for(var c=0,p=l?u:s,f=e;;f=p(f,t)){var h;if(o&&f===e||i&&f===t||(h=n(f,l,r)),h===!1||f===t)break;d(c++1){var t=e.indexOf(f,1);return t>-1?e.substr(0,t):e}return null},traverseEnterLeave:function(e,t,n,r,o){var i=l(e,t);i!==e&&c(e,i,n,r,!1,!0),i!==t&&c(i,t,n,o,!0,!1)},traverseTwoPhase:function(e,t,n){e&&(c("",e,t,n,!0,!1),c(e,"",t,n,!1,!0))},traverseAncestors:function(e,t,n){c("",e,t,n,!0,!1)},_getFirstCommonAncestorID:l,_getNextDescendantID:s,isAncestorIDOf:a,SEPARATOR:f};t.exports=v},{133:133,81:81}],65:[function(e,t,n){"use strict";var r={remove:function(e){e._reactInternalInstance=void 0},get:function(e){return e._reactInternalInstance},has:function(e){return void 0!==e._reactInternalInstance},set:function(e,t){e._reactInternalInstance=t}};t.exports=r},{}],66:[function(e,t,n){"use strict";var r={currentlyMountingInstance:null,currentlyUnmountingInstance:null};t.exports=r},{}],67:[function(e,t,n){"use strict";var r=e(104),o={CHECKSUM_ATTR_NAME:"data-react-checksum",addChecksumToMarkup:function(e){var t=r(e);return e.replace(">"," "+o.CHECKSUM_ATTR_NAME+'="'+t+'">')},canReuseMarkup:function(e,t){var n=t.getAttribute(o.CHECKSUM_ATTR_NAME);n=n&&parseInt(n,10);var i=r(e);return i===n}};t.exports=o},{104:104}],68:[function(e,t,n){"use strict";function r(e,t){for(var n=Math.min(e.length,t.length),r=0;n>r;r++)if(e.charAt(r)!==t.charAt(r))return r;return e.length===t.length?-1:n}function o(e){var t=R(e);return t&&K.getID(t)}function i(e){var t=a(e);if(t)if(L.hasOwnProperty(t)){var n=L[t];n!==e&&(w(!c(n,t)),L[t]=e)}else L[t]=e;return t}function a(e){return e&&e.getAttribute&&e.getAttribute(k)||""}function u(e,t){var n=a(e);n!==t&&delete L[n],e.setAttribute(k,t),L[t]=e}function s(e){return L.hasOwnProperty(e)&&c(L[e],e)||(L[e]=K.findReactNodeByID(e)),L[e]}function l(e){var t=b.get(e)._rootNodeID;return C.isNullComponentID(t)?null:(L.hasOwnProperty(t)&&c(L[t],t)||(L[t]=K.findReactNodeByID(t)),L[t])}function c(e,t){if(e){w(a(e)===t);var n=K.findReactContainerForID(t);if(n&&T(n,e))return!0}return!1}function p(e){delete L[e]}function d(e){var t=L[e];return t&&c(t,e)?void(W=t):!1}function f(e){W=null,E.traverseAncestors(e,d);var t=W;return W=null,t}function h(e,t,n,r,o){var i=D.mountComponent(e,t,r,I);e._isTopLevel=!0,K._mountImageIntoNode(i,n,o)}function m(e,t,n,r){var o=N.ReactReconcileTransaction.getPooled();o.perform(h,null,e,t,n,o,r),N.ReactReconcileTransaction.release(o)}var v=e(10),g=e(30),y=(e(39),e(55)),C=(e(56),e(57)),E=e(64),b=e(65),_=e(67),x=e(73),D=e(79),M=e(84),N=e(85),I=e(113),T=e(107),R=e(127),P=e(132),w=e(133),O=e(144),S=e(147),A=(e(150),E.SEPARATOR),k=v.ID_ATTRIBUTE_NAME,L={},U=1,F=9,B={},V={},j=[],W=null,K={_instancesByReactRootID:B,scrollMonitor:function(e,t){t()},_updateRootComponent:function(e,t,n,r){return K.scrollMonitor(n,function(){M.enqueueElementInternal(e,t),r&&M.enqueueCallbackInternal(e,r)}),e},_registerComponent:function(e,t){w(t&&(t.nodeType===U||t.nodeType===F)),g.ensureScrollValueMonitoring();var n=K.registerContainer(t);return B[n]=e,n},_renderNewRootComponent:function(e,t,n){var r=P(e,null),o=K._registerComponent(r,t);return N.batchedUpdates(m,r,o,t,n),r},render:function(e,t,n){w(y.isValidElement(e));var r=B[o(t)];if(r){var i=r._currentElement;if(S(i,e))return K._updateRootComponent(r,e,t,n).getPublicInstance();K.unmountComponentAtNode(t)}var a=R(t),u=a&&K.isRenderedByReact(a),s=u&&!r,l=K._renderNewRootComponent(e,t,s).getPublicInstance();return n&&n.call(l),l},constructAndRenderComponent:function(e,t,n){var r=y.createElement(e,t);return K.render(r,n)},constructAndRenderComponentByID:function(e,t,n){var r=document.getElementById(n);return w(r),K.constructAndRenderComponent(e,t,r)},registerContainer:function(e){var t=o(e);return t&&(t=E.getReactRootIDFromNodeID(t)),t||(t=E.createReactRootID()),V[t]=e,t},unmountComponentAtNode:function(e){w(e&&(e.nodeType===U||e.nodeType===F));var t=o(e),n=B[t];return n?(K.unmountComponentFromNode(n,e),delete B[t],delete V[t],!0):!1},unmountComponentFromNode:function(e,t){for(D.unmountComponent(e),t.nodeType===F&&(t=t.documentElement);t.lastChild;)t.removeChild(t.lastChild)},findReactContainerForID:function(e){var t=E.getReactRootIDFromNodeID(e),n=V[t];return n},findReactNodeByID:function(e){var t=K.findReactContainerForID(e);return K.findComponentRoot(t,e)},isRenderedByReact:function(e){if(1!==e.nodeType)return!1;var t=K.getID(e);return t?t.charAt(0)===A:!1},getFirstReactDOM:function(e){for(var t=e;t&&t.parentNode!==t;){if(K.isRenderedByReact(t))return t;t=t.parentNode}return null},findComponentRoot:function(e,t){var n=j,r=0,o=f(t)||e;for(n[0]=o.firstChild,n.length=1;r>",_=u(),x=d(),D={array:o("array"),bool:o("boolean"),func:o("function"),number:o("number"),object:o("object"),string:o("string"),any:i(),arrayOf:a,element:_,instanceOf:s,node:x,objectOf:c,oneOf:l,oneOfType:p,shape:f};t.exports=D},{112:112,55:55,61:61,74:74}],77:[function(e,t,n){"use strict";function r(){this.listenersToPut=[]}var o=e(28),i=e(30),a=e(27);a(r.prototype,{enqueuePutListener:function(e,t,n){this.listenersToPut.push({rootNodeID:e,propKey:t,propValue:n})},putListeners:function(){for(var e=0;en;n++){var r=g[n],o=r._pendingCallbacks;if(r._pendingCallbacks=null,f.performUpdateIfNecessary(r,e.reconcileTransaction),o)for(var i=0;i":">","<":"<",'"':""","'":"'"},a=/[&><"']/g;t.exports=o},{}],115:[function(e,t,n){"use strict";function r(e){return null==e?null:u(e)?e:o.has(e)?i.getNodeFromInstance(e):(a(null==e.render||"function"!=typeof e.render),void a(!1))}{var o=(e(39),e(65)),i=e(68),a=e(133),u=e(135);e(150)}t.exports=r},{133:133,135:135,150:150,39:39,65:65,68:68}],116:[function(e,t,n){"use strict";function r(e,t,n){var r=e,o=!r.hasOwnProperty(n);o&&null!=t&&(r[n]=t)}function o(e){if(null==e)return e;var t={};return i(e,r,t),t}{var i=e(149);e(150)}t.exports=o},{149:149,150:150}],117:[function(e,t,n){"use strict";function r(e){try{e.focus()}catch(t){}}t.exports=r},{}],118:[function(e,t,n){"use strict";var r=function(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)};t.exports=r},{}],119:[function(e,t,n){function r(){try{return document.activeElement||document.body}catch(e){return document.body}}t.exports=r},{}],120:[function(e,t,n){"use strict";function r(e){var t,n=e.keyCode;return"charCode"in e?(t=e.charCode,0===t&&13===n&&(t=13)):t=n,t>=32||13===t?t:0}t.exports=r},{}],121:[function(e,t,n){"use strict";function r(e){if(e.key){var t=i[e.key]||e.key;if("Unidentified"!==t)return t}if("keypress"===e.type){var n=o(e);return 13===n?"Enter":String.fromCharCode(n)}return"keydown"===e.type||"keyup"===e.type?a[e.keyCode]||"Unidentified":""}var o=e(120),i={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},a={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};t.exports=r},{120:120}],122:[function(e,t,n){"use strict";function r(e){var t=this,n=t.nativeEvent;if(n.getModifierState)return n.getModifierState(e);var r=i[e];return r?!!n[r]:!1}function o(e){return r}var i={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};t.exports=o},{}],123:[function(e,t,n){"use strict";function r(e){var t=e.target||e.srcElement||window;return 3===t.nodeType?t.parentNode:t}t.exports=r},{}],124:[function(e,t,n){"use strict";function r(e){var t=e&&(o&&e[o]||e[i]);return"function"==typeof t?t:void 0}var o="function"==typeof Symbol&&Symbol.iterator,i="@@iterator";t.exports=r},{}],125:[function(e,t,n){function r(e){return i(!!a),d.hasOwnProperty(e)||(e="*"),u.hasOwnProperty(e)||("*"===e?a.innerHTML="":a.innerHTML="<"+e+">",u[e]=!a.firstChild),u[e]?d[e]:null}var o=e(21),i=e(133),a=o.canUseDOM?document.createElement("div"):null,u={circle:!0,defs:!0,ellipse:!0,g:!0,line:!0,linearGradient:!0,path:!0,polygon:!0,polyline:!0,radialGradient:!0,rect:!0,stop:!0,text:!0},s=[1,'"],l=[1,"","
"],c=[3,"","
"],p=[1,"",""],d={"*":[1,"?
","
"],area:[1,"",""],col:[2,"","
"],legend:[1,"
","
"],param:[1,"",""],tr:[2,"","
"],optgroup:s,option:s,caption:l,colgroup:l,tbody:l,tfoot:l,thead:l,td:c,th:c,circle:p,defs:p,ellipse:p,g:p,line:p,linearGradient:p,path:p,polygon:p,polyline:p,radialGradient:p,rect:p,stop:p,text:p};t.exports=r},{133:133,21:21}],126:[function(e,t,n){"use strict";function r(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function o(e){for(;e;){if(e.nextSibling)return e.nextSibling;e=e.parentNode}}function i(e,t){for(var n=r(e),i=0,a=0;n;){if(3===n.nodeType){if(a=i+n.textContent.length,t>=i&&a>=t)return{node:n,offset:t-i};i=a}n=r(o(n))}}t.exports=i},{}],127:[function(e,t,n){"use strict";function r(e){return e?e.nodeType===o?e.documentElement:e.firstChild:null}var o=9;t.exports=r},{}],128:[function(e,t,n){"use strict";function r(){return!i&&o.canUseDOM&&(i="textContent"in document.documentElement?"textContent":"innerText"),i}var o=e(21),i=null;t.exports=r},{21:21}],129:[function(e,t,n){"use strict";function r(e){return e===window?{x:window.pageXOffset||document.documentElement.scrollLeft,y:window.pageYOffset||document.documentElement.scrollTop}:{x:e.scrollLeft,y:e.scrollTop}}t.exports=r},{}],130:[function(e,t,n){function r(e){return e.replace(o,"-$1").toLowerCase()}var o=/([A-Z])/g;t.exports=r},{}],131:[function(e,t,n){"use strict";function r(e){return o(e).replace(i,"-ms-")}var o=e(130),i=/^ms-/;t.exports=r},{130:130}],132:[function(e,t,n){"use strict";function r(e){return"function"==typeof e&&"undefined"!=typeof e.prototype&&"function"==typeof e.prototype.mountComponent&&"function"==typeof e.prototype.receiveComponent}function o(e,t){var n;if((null===e||e===!1)&&(e=a.emptyElement),"object"==typeof e){var o=e;n=t===o.type&&"string"==typeof o.type?u.createInternalComponent(o):r(o.type)?new o.type(o):new c}else"string"==typeof e||"number"==typeof e?n=u.createInstanceForText(e):l(!1);return n.construct(e),n._mountIndex=0,n._mountImage=null,n}var i=e(37),a=e(57),u=e(71),s=e(27),l=e(133),c=(e(150),function(){});s(c.prototype,i.Mixin,{_instantiateReactComponent:o}),t.exports=o},{133:133,150:150,27:27,37:37,57:57,71:71}],133:[function(e,t,n){"use strict";var r=function(e,t,n,r,o,i,a,u){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,r,o,i,a,u],c=0;s=new Error("Invariant Violation: "+t.replace(/%s/g,function(){return l[c++]}))}throw s.framesToPop=1,s}};t.exports=r},{}],134:[function(e,t,n){"use strict";function r(e,t){if(!i.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,r=n in document;if(!r){var a=document.createElement("div");a.setAttribute(n,"return;"),r="function"==typeof a[n]}return!r&&o&&"wheel"===e&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r}var o,i=e(21);i.canUseDOM&&(o=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0),t.exports=r},{21:21}],135:[function(e,t,n){function r(e){return!(!e||!("function"==typeof Node?e instanceof Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName))}t.exports=r},{}],136:[function(e,t,n){"use strict";function r(e){return e&&("INPUT"===e.nodeName&&o[e.type]||"TEXTAREA"===e.nodeName)}var o={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};t.exports=r},{}],137:[function(e,t,n){function r(e){return o(e)&&3==e.nodeType}var o=e(135);t.exports=r},{135:135}],138:[function(e,t,n){"use strict";var r=e(133),o=function(e){var t,n={};r(e instanceof Object&&!Array.isArray(e));for(t in e)e.hasOwnProperty(t)&&(n[t]=t);return n};t.exports=o},{133:133}],139:[function(e,t,n){var r=function(e){var t;for(t in e)if(e.hasOwnProperty(t))return t;return null};t.exports=r},{}],140:[function(e,t,n){"use strict";function r(e,t,n){if(!e)return null;var r={};for(var i in e)o.call(e,i)&&(r[i]=t.call(n,e[i],i,e));return r}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],141:[function(e,t,n){"use strict";function r(e){var t={};return function(n){return t.hasOwnProperty(n)||(t[n]=e.call(this,n)),t[n]}}t.exports=r},{}],142:[function(e,t,n){"use strict";function r(e){return i(o.isValidElement(e)),e}var o=e(55),i=e(133);t.exports=r},{133:133,55:55}],143:[function(e,t,n){"use strict";function r(e){return'"'+o(e)+'"'}var o=e(114);t.exports=r},{114:114}],144:[function(e,t,n){"use strict";var r=e(21),o=/^[ \r\n\t\f]/,i=/<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,a=function(e,t){e.innerHTML=t};if("undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction&&(a=function(e,t){MSApp.execUnsafeLocalFunction(function(){e.innerHTML=t})}),r.canUseDOM){var u=document.createElement("div");u.innerHTML=" ",""===u.innerHTML&&(a=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),o.test(t)||"<"===t[0]&&i.test(t)){e.innerHTML="\ufeff"+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t})}t.exports=a},{21:21}],145:[function(e,t,n){"use strict";var r=e(21),o=e(114),i=e(144),a=function(e,t){e.textContent=t};r.canUseDOM&&("textContent"in document.documentElement||(a=function(e,t){i(e,o(t))})),t.exports=a},{114:114,144:144,21:21}],146:[function(e,t,n){"use strict";function r(e,t){if(e===t)return!0;var n;for(n in e)if(e.hasOwnProperty(n)&&(!t.hasOwnProperty(n)||e[n]!==t[n]))return!1;for(n in t)if(t.hasOwnProperty(n)&&!e.hasOwnProperty(n))return!1;return!0}t.exports=r},{}],147:[function(e,t,n){"use strict";function r(e,t){if(null!=e&&null!=t){var n=typeof e,r=typeof t;if("string"===n||"number"===n)return"string"===r||"number"===r;if("object"===r&&e.type===t.type&&e.key===t.key){var o=e._owner===t._owner;return o}}return!1}e(150);t.exports=r},{150:150}],148:[function(e,t,n){function r(e){var t=e.length;if(o(!Array.isArray(e)&&("object"==typeof e||"function"==typeof e)),o("number"==typeof t),o(0===t||t-1 in e),e.hasOwnProperty)try{return Array.prototype.slice.call(e)}catch(n){}for(var r=Array(t),i=0;t>i;i++)r[i]=e[i];return r}var o=e(133);t.exports=r},{133:133}],149:[function(e,t,n){"use strict";function r(e){return v[e]}function o(e,t){return e&&null!=e.key?a(e.key):t.toString(36)}function i(e){return(""+e).replace(g,r)}function a(e){return"$"+i(e)}function u(e,t,n,r,i){var s=typeof e;if(("undefined"===s||"boolean"===s)&&(e=null),null===e||"string"===s||"number"===s||l.isValidElement(e))return r(i,e,""===t?h+o(e,0):t,n),1;var p,v,g,y=0;if(Array.isArray(e))for(var C=0;C=200&&c.status<300||c.status===304){var a=d.dataType=="xml"?c.responseXML:c.responseText;if(d.dataType=="json")a=b.parseJSON(a);if(b.isFunction(d.success))d.success.call(d,a,c.status,c)}else{if(b.isFunction(d.error))d.error.call(d,c,c.status)}if(b.isFunction(d.complete))d.complete.call(d,c,c.status)}};this.xhr=c;if(!d.cache)d.url+=(d.url.indexOf("?")>-1?"&":"?")+"_nocache="+(new Date).getTime();if(d.data){if(d.type=="GET"){d.url+=(d.url.indexOf("?")>-1?"&":"?")+this.param(d.data);d.data=null}else{d.data=this.param(d.data)}}c.open(d.type,d.url,d.async);c.setRequestHeader("Content-type",d.contentType);if(d.dataType&&d.accepts[d.dataType])c.setRequestHeader("Accept",d.accepts[d.dataType]);if(d.async){c.onreadystatechange=e;c.send(d.data)}else{c.send(d.data);e()}return this},get:function(a,b,c){if(this.isFunction(b)){c=b;b=null}return this.call({url:a,type:"GET",data:b,success:c})},post:function(a,b,c){if(this.isFunction(b)){c=b;b=null}return this.call({url:a,type:"POST",data:b,success:c})},load:function(a,b,c,d){if(typeof a=="string")a=document.getElementById(a);return this.call({url:b,type:c?"POST":"GET",data:c||null,complete:d||null,success:function(b){try{a.innerHTML=b}catch(c){var d=document.createElement("div");d.innerHTML=b;while(a.firstChild)a.removeChild(a.firstChild);for(var e=0,f=d.childNodes.length;e .middle { + width: 100%; + height: 100%; + padding: 0; + margin: 0; + overflow: hidden; + display: table-row; +} +.zeroTierNode > .middle > .middleCell { + width: 100%; + height: 100%; + display: table-cell; + border-bottom: 1px solid #cfcfcf; +} +.zeroTierNode > .middle > .middleCell > .middleScroll { + display: block; + width: 100%; + height: 100%; + padding: 0; + margin: 0; + overflow: scroll; + overflow-x: hidden; + overflow-y: scroll; + background: #dddddd; +} +.zeroTierNode > .middle > .middleCell > .middleScroll > .networks { + display: block; + width: 100%; + padding: 0 0 0.25rem 0; + margin: 0; + border: 0; + text-align: left; + border-collapse: collapse; +} +.zeroTierNode > .middle > .middleCell > .middleScroll > .networks > .network { + display: block; + border-top: 0.12rem solid #dddddd; + border-bottom: 0.12rem solid #dddddd; + padding: 0.25rem; + background: #ffffff; +} + +.zeroTierNode > .bottom { + font-size: 12pt; + width: 100%; + overflow: hidden; + display: table-row; + color: #000000; + background: #dfdfdf; +} +.zeroTierNode > .bottom > .left { + text-align: left; + white-space: nowrap; + float: left; + padding: 0 0 0 0.5rem; + font-size: 12pt; + height: 100%; +} +.zeroTierNode > .bottom > .left > .statusLine { + font-family: monospace; + white-space: nowrap; + font-size: 11pt; + height: 100%; +} +.zeroTierNode > .bottom > .right { + text-align: right; + height: 100%; + white-space: nowrap; + float: right; + font-size: 12pt; + background: #ffffff; +} +.zeroTierNode > .bottom > .right form { + height: 100%; +} +.zeroTierNode > .bottom > .right input { + font-family: monospace; + font-size: 12pt; + background: #ffffff; + color: #000000; + outline: none; + outline-style: none; + box-shadow: 0; + border: 0; + margin: 0; + padding: 0 0.25rem 0 0.25rem; + display: inline; + height: 100%; +} +.zeroTierNode > .bottom > .right button { + display: inline-block; + font-size: 12pt; + background: #ffb354; + border: 1px solid #ffb354; + color: #000000; + margin: 0; + padding: 0.05rem 0.75rem 0.05rem 0.75rem; + outline: none; + outline-style: none; + height: 100%; +} +.zeroTierNode > .bottom > .right button:hover { + cursor: pointer; + outline: none; + outline-style: none; + border: 1px solid #000000; +} + +.zeroTierNetwork { + padding: 0; + margin: 0; + display: inline-block; + text-align: right; + width: 100%; + position: relative; +} +.zeroTierNetwork .networkInfo { + padding: 0 0 0.25rem 0; + text-align: left; + font-size: 12pt; +} +.zeroTierNetwork .networkInfo .networkId { + font-size: 11pt; + font-family: monospace; + color: #000000; +} +.zeroTierNetwork .networkInfo .networkName { + padding: 0 0 0 1rem; + float: right; + font-size: 12pt; +} +.zeroTierNetwork .networkProps { + width: 100%; + display: table; + padding: 0; + margin: 0 auto 0 auto; + border-top: 1px solid #999999; + border-bottom: 1px solid #999999; +} +.zeroTierNetwork .networkProps > .row { + display: table-row; +} +.zeroTierNetwork .networkProps > .row > .name { + display: table-cell; + font-size: 10pt; + padding: 0.1rem 0.5rem 0.1rem 0.5rem; +} +.zeroTierNetwork .networkProps > .row > .value { + font-size: 10pt; + display: table-cell; + padding: 0.1rem 0.5rem 0.1rem 0.5rem; + background: #eeeeee; +} +.zeroTierNetwork .ipList { +} +.zeroTierNetwork .ipAddress { + font-family: monospace; + font-size: 10pt; +} +.zeroTierNetwork .leaveNetworkButton { + padding: 0.25rem 0.5rem 0.25rem 0.5rem; + margin: 0.25rem 0 0 0; + font-size: 9pt; + background: #ffffff; + outline: none; + background: #ffb354; + border: 1px solid #ffb354; + cursor: pointer; +} +.zeroTierNetwork .leaveNetworkButton:hover { + border: 1px solid #000000; +} diff --git a/ext/installfiles/mac/ui/ztui.min.js b/ext/installfiles/mac/ui/ztui.min.js new file mode 100644 index 000000000..17982839e --- /dev/null +++ b/ext/installfiles/mac/ui/ztui.min.js @@ -0,0 +1 @@ +var ZeroTierNetwork=React.createClass({displayName:"ZeroTierNetwork",getInitialState:function(){return{}},leaveNetwork:function(e){Ajax.call({url:"network/"+this.props.nwid+"?auth="+this.props.authToken,cache:!1,type:"DELETE",success:function(e){this.props.onNetworkDeleted&&this.props.onNetworkDeleted(this.props.nwid)}.bind(this),error:function(e){}.bind(this)}),e.preventDefault()},render:function(){return React.createElement("div",{className:"zeroTierNetwork"},React.createElement("div",{className:"networkInfo"},React.createElement("span",{className:"networkId"},this.props.nwid)," ",React.createElement("span",{className:"networkName"},this.props.name)),React.createElement("div",{className:"networkProps"},React.createElement("div",{className:"row"},React.createElement("div",{className:"name"},"Status"),React.createElement("div",{className:"value"},this.props.status)),React.createElement("div",{className:"row"},React.createElement("div",{className:"name"},"Type"),React.createElement("div",{className:"value"},this.props.type)),React.createElement("div",{className:"row"},React.createElement("div",{className:"name"},"MAC"),React.createElement("div",{className:"value zeroTierAddress"},this.props.mac)),React.createElement("div",{className:"row"},React.createElement("div",{className:"name"},"MTU"),React.createElement("div",{className:"value"},this.props.mtu)),React.createElement("div",{className:"row"},React.createElement("div",{className:"name"},"Broadcast"),React.createElement("div",{className:"value"},this.props.broadcastEnabled?"ENABLED":"DISABLED")),React.createElement("div",{className:"row"},React.createElement("div",{className:"name"},"Bridging"),React.createElement("div",{className:"value"},this.props.bridge?"ACTIVE":"DISABLED")),React.createElement("div",{className:"row"},React.createElement("div",{className:"name"},"Device"),React.createElement("div",{className:"value"},this.props.portDeviceName?this.props.portDeviceName:"(none)")),React.createElement("div",{className:"row"},React.createElement("div",{className:"name"},"Managed IPs"),React.createElement("div",{className:"value ipList"},this.props.assignedAddresses.map(function(e){return React.createElement("div",{key:e,className:"ipAddress"},e)})))),React.createElement("button",{type:"button",className:"leaveNetworkButton",onClick:this.leaveNetwork},"Leave Network"))}}); var ZeroTierNode=React.createClass({displayName:"ZeroTierNode",getInitialState:function(){return{address:"----------",online:!1,version:"_._._",_networks:[],_peers:[]}},ago:function(e){if(e>0){var t=Math.round((Date.now()-e)/1e3);return t>0?t:0}return 0},updatePeers:function(){Ajax.call({url:"peer?auth="+this.props.authToken,cache:!1,type:"GET",success:function(e){if(e){var t=JSON.parse(e);Array.isArray(t)&&this.setState({_peers:t})}}.bind(this),error:function(){}.bind(this)})},updateNetworks:function(){Ajax.call({url:"network?auth="+this.props.authToken,cache:!1,type:"GET",success:function(e){if(e){var t=JSON.parse(e);Array.isArray(t)&&this.setState({_networks:t})}}.bind(this),error:function(){}.bind(this)})},updateAll:function(){Ajax.call({url:"status?auth="+this.props.authToken,cache:!1,type:"GET",success:function(e){if(this.alertedToFailure=!1,e){var t=JSON.parse(e);this.setState(t),document.title="ZeroTier One ["+t.address+"]"}this.updateNetworks(),this.updatePeers()}.bind(this),error:function(){this.setState(this.getInitialState()),this.alertedToFailure||(this.alertedToFailure=!0,alert("Authorization token invalid or ZeroTier One service not running."))}.bind(this)})},joinNetwork:function(e){e.preventDefault(),this.networkToJoin&&16===this.networkToJoin.length?Ajax.call({url:"network/"+this.networkToJoin+"?auth="+this.props.authToken,cache:!1,type:"POST",success:function(e){this.networkToJoin="",this.networkInputElement&&(this.networkInputElement.value=""),this.updateNetworks()}.bind(this),error:function(){}.bind(this)}):alert("To join a network, enter its 16-digit network ID.")},handleNetworkIdEntry:function(e){this.networkInputElement=e.target;var t=this.networkInputElement.value;if(t){t=t.toLowerCase();for(var n="",a=0;aa;++a)"0123456789abcdef".indexOf(t.charAt(a))>=0&&(n+=t.charAt(a));this.networkToJoin=n,this.networkInputElement.value=n}else this.networkToJoin="",this.networkInputElement.value=""},handleNetworkDelete:function(e){for(var t=[],n=0;n