From 2eaff6d4843f420ff63c1b7b42e86028fa162f80 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 22 Dec 2016 16:36:38 -0800 Subject: [PATCH 01/14] Fix to characteristcs in rules engine. --- node/Network.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/Network.cpp b/node/Network.cpp index 1f8e7ebfe..e8b103bac 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -498,7 +498,7 @@ static _doZtFilterResult _doZtFilter( } } } - thisRuleMatches = (uint8_t)((cf | rules[rn].v.characteristics) != 0); + thisRuleMatches = (uint8_t)((cf & rules[rn].v.characteristics) != 0); FILTER_TRACE("%u %s %c (%.16llx | %.16llx)!=0 -> %u",rn,_rtn(rt),(((rules[rn].t & 0x80) != 0) ? '!' : '='),cf,rules[rn].v.characteristics,(unsigned int)thisRuleMatches); } break; case ZT_NETWORK_RULE_MATCH_FRAME_SIZE_RANGE: From fe530548bbc8d4d0e274f814718fad579a012812 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 22 Dec 2016 16:57:45 -0800 Subject: [PATCH 02/14] Fix MATCH_RANDOM in controller. --- controller/EmbeddedNetworkController.cpp | 1 + node/Network.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/controller/EmbeddedNetworkController.cpp b/controller/EmbeddedNetworkController.cpp index df20d4ce5..01a7152c7 100644 --- a/controller/EmbeddedNetworkController.cpp +++ b/controller/EmbeddedNetworkController.cpp @@ -428,6 +428,7 @@ static bool _parseRule(json &r,ZT_VirtualNetworkRule &rule) } else if (t == "MATCH_RANDOM") { rule.t |= ZT_NETWORK_RULE_MATCH_RANDOM; rule.v.randomProbability = (uint32_t)(_jI(r["probability"],0ULL) & 0xffffffffULL); + return true; } else if (t == "MATCH_TAGS_DIFFERENCE") { rule.t |= ZT_NETWORK_RULE_MATCH_TAGS_DIFFERENCE; rule.v.tag.id = (uint32_t)(_jI(r["id"],0ULL) & 0xffffffffULL); diff --git a/node/Network.cpp b/node/Network.cpp index e8b103bac..2488bea20 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -111,6 +111,7 @@ static const void _dumpFilterTrace(const char *ruleName,uint8_t thisSetMatches,b ); if (msg) printf(" + (%s)" ZT_EOL_S,msg); + fflush(stdout); } #else #define FILTER_TRACE(f,...) {} From 6b12d86209e9e2097d33c8ffee888294c6c4fba4 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 22 Dec 2016 18:06:35 -0800 Subject: [PATCH 03/14] Add a workaround for an edge case in TEE/REDIRECT if we are the inbound destination and teeing is only being done on the outbound side. --- node/Network.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/node/Network.cpp b/node/Network.cpp index 2488bea20..45ffc993b 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -178,6 +178,9 @@ static _doZtFilterResult _doZtFilter( std::vector dlog; #endif // ZT_RULES_ENGINE_DEBUGGING + // Set to true if we are a TEE/REDIRECT/WATCH target + bool superAccept = false; + // The default match state for each set of entries starts as 'true' since an // ACTION with no MATCH entries preceding it is always taken. uint8_t thisSetMatches = 1; @@ -199,7 +202,7 @@ static _doZtFilterResult _doZtFilter( #ifdef ZT_RULES_ENGINE_DEBUGGING _dumpFilterTrace("ACTION_ACCEPT",thisSetMatches,inbound,ztSource,ztDest,macSource,macDest,dlog,frameLen,etherType,(const char *)0); #endif // ZT_RULES_ENGINE_DEBUGGING - return DOZTFILTER_ACCEPT; // match, accept packet + return (superAccept ? DOZTFILTER_SUPER_ACCEPT : DOZTFILTER_ACCEPT); // match, accept packet // These are initially handled together since preliminary logic is common case ZT_NETWORK_RULE_ACTION_TEE: @@ -264,6 +267,22 @@ static _doZtFilterResult _doZtFilter( continue; } } else { + // If this is an incoming packet and we are a TEE or REDIRECT target, we should + // super-accept if we accept at all. This will cause us to accept redirected or + // tee'd packets in spite of MAC and ZT addressing checks. + if (inbound) { + switch(rt) { + case ZT_NETWORK_RULE_ACTION_TEE: + case ZT_NETWORK_RULE_ACTION_WATCH: + case ZT_NETWORK_RULE_ACTION_REDIRECT: + if (RR->identity.address() == rules[rn].v.fwd.address) + superAccept = true; + break; + default: + break; + } + } + #ifdef ZT_RULES_ENGINE_DEBUGGING _dumpFilterTrace(_rtn(rt),thisSetMatches,inbound,ztSource,ztDest,macSource,macDest,dlog,frameLen,etherType,(const char *)0); dlog.clear(); @@ -541,12 +560,12 @@ static _doZtFilterResult _doZtFilter( thisRuleMatches = 0; } } else { - if (inbound) { + if ((inbound)&&(!superAccept)) { thisRuleMatches = 0; FILTER_TRACE("%u %s %c remote tag %u not found -> 0 (inbound side is strict)",rn,_rtn(rt),(((rules[rn].t & 0x80) != 0) ? '!' : '='),(unsigned int)rules[rn].v.tag.id); } else { thisRuleMatches = 1; - FILTER_TRACE("%u %s %c remote tag %u not found -> 1 (outbound side is not strict)",rn,_rtn(rt),(((rules[rn].t & 0x80) != 0) ? '!' : '='),(unsigned int)rules[rn].v.tag.id); + FILTER_TRACE("%u %s %c remote tag %u not found -> 1 (outbound side and TEE/REDIRECT targets are not strict)",rn,_rtn(rt),(((rules[rn].t & 0x80) != 0) ? '!' : '='),(unsigned int)rules[rn].v.tag.id); } } } else { From 0d066e3b08b723dc5fe3630fbf6a6d2a5a3f0baf Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 22 Dec 2016 18:26:43 -0800 Subject: [PATCH 04/14] Fix JSON parse bug in REDIRECT target. --- controller/EmbeddedNetworkController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controller/EmbeddedNetworkController.cpp b/controller/EmbeddedNetworkController.cpp index 01a7152c7..ee2437775 100644 --- a/controller/EmbeddedNetworkController.cpp +++ b/controller/EmbeddedNetworkController.cpp @@ -310,7 +310,7 @@ static bool _parseRule(json &r,ZT_VirtualNetworkRule &rule) return true; } else if (t == "ACTION_REDIRECT") { rule.t |= ZT_NETWORK_RULE_ACTION_REDIRECT; - rule.v.fwd.address = Utils::hexStrToU64(_jS(r["zt"],"0").c_str()) & 0xffffffffffULL; + rule.v.fwd.address = Utils::hexStrToU64(_jS(r["address"],"0").c_str()) & 0xffffffffffULL; rule.v.fwd.flags = (uint32_t)(_jI(r["flags"],0ULL) & 0xffffffffULL); return true; } else if (t == "ACTION_DEBUG_LOG") { From c8554504f3a1203470a46749253564d3fe697ee3 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 22 Dec 2016 18:37:46 -0800 Subject: [PATCH 05/14] . --- node/Network.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/Network.cpp b/node/Network.cpp index 45ffc993b..8b0f20559 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -240,7 +240,7 @@ static _doZtFilterResult _doZtFilter( return DOZTFILTER_REDIRECT; } else { #ifdef ZT_RULES_ENGINE_DEBUGGING - _dumpFilterTrace("ACTION_TEE",thisSetMatches,inbound,ztSource,ztDest,macSource,macDest,dlog,frameLen,etherType,(const char *)0); + _dumpFilterTrace(_rtn(rt),thisSetMatches,inbound,ztSource,ztDest,macSource,macDest,dlog,frameLen,etherType,(const char *)0); dlog.clear(); #endif // ZT_RULES_ENGINE_DEBUGGING cc = fwdAddr; From bf2b9e3692c1a20dd7af3d8bfca4b6c591cd2214 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 22 Dec 2016 18:52:34 -0800 Subject: [PATCH 06/14] Auto-authorize new members on public networks properly. --- controller/EmbeddedNetworkController.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/controller/EmbeddedNetworkController.cpp b/controller/EmbeddedNetworkController.cpp index ee2437775..bed76df77 100644 --- a/controller/EmbeddedNetworkController.cpp +++ b/controller/EmbeddedNetworkController.cpp @@ -1287,7 +1287,8 @@ void EmbeddedNetworkController::_request( authorizedBy = "memberIsAuthorized"; } else if (!_jB(network["private"],true)) { authorizedBy = "networkIsPublic"; - if (!member.count("authorized")) + json &ahist = member["authHistory"]; + if ((!ahist.is_array())||(ahist.size() == 0)) autoAuthorized = true; } else { char presentedAuth[512]; From d94d04d7d52ecec7ad6661e23d578702241b5125 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 23 Dec 2016 13:52:41 -0800 Subject: [PATCH 07/14] Bump to 1.1.17 for pre-1.2.0 beta. --- version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.h b/version.h index 737b3783a..118ac7614 100644 --- a/version.h +++ b/version.h @@ -32,6 +32,6 @@ /** * Revision */ -#define ZEROTIER_ONE_VERSION_REVISION 15 +#define ZEROTIER_ONE_VERSION_REVISION 17 #endif From 5bff70194b8c6928e0c828139652fd881dcf3afb Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 23 Dec 2016 14:30:27 -0800 Subject: [PATCH 08/14] Ship pre-build man pages. We stopped doing this for a bit due to nit-picky Debian craziness but since we are not targeting core Debian at the moment bring it back. --- .gitignore | 3 -- doc/zerotier-cli.1 | 83 +++++++++++++++++++++++++++++++++ doc/zerotier-idtool.1 | 84 ++++++++++++++++++++++++++++++++++ doc/zerotier-one.8 | 104 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 271 insertions(+), 3 deletions(-) create mode 100644 doc/zerotier-cli.1 create mode 100644 doc/zerotier-idtool.1 create mode 100644 doc/zerotier-one.8 diff --git a/.gitignore b/.gitignore index d368697c5..eb07dd4db 100755 --- a/.gitignore +++ b/.gitignore @@ -69,9 +69,6 @@ zt1-src.tar.gz *.rpm *.autosave *.tmp -doc/*.1 -doc/*.2 -doc/*.8 .depend node_modules debian/files diff --git a/doc/zerotier-cli.1 b/doc/zerotier-cli.1 new file mode 100644 index 000000000..167109ec9 --- /dev/null +++ b/doc/zerotier-cli.1 @@ -0,0 +1,83 @@ +.TH "ZEROTIER\-CLI" "1" "December 2016" "" "" +.SH "NAME" +\fBzerotier-cli\fR \- control local ZeroTier virtual network service +.SH SYNOPSIS +.P +\fBzerotier\-cli\fP [\-switches] [arguments] +.SH DESCRIPTION +.P +\fBzerotier\-cli\fR provides a simple command line interface to the local JSON API of the ZeroTier virtual network endpoint service zerotier\-one(8)\. +.P +By default \fBzerotier\-cli\fR must be run as root or with \fBsudo\fP\|\. If you want to allow an unprivileged user to use \fBzerotier\-cli\fR to control the system ZeroTier service, you can create a local copy of the ZeroTier service authorization token in the user's home directory: +.P +.RS 2 +.nf +sudo cp /var/lib/zerotier\-one/authtoken\.secret /home/user/\.zeroTierOneAuthToken +chown user /home/user/\.zeroTierOneAuthToken +chmod 0600 /home/user/\.zeroTierOneAuthToken +.fi +.RE +.P +(The location of ZeroTier's service home may differ by platform\. See zerotier\-one(8)\.) +.P +Note that this gives the user the power to connect or disconnect the system to or from any virtual network, which is a significant permission\. +.P +\fBzerotier\-cli\fR has several command line arguments that are visible in \fBhelp\fP output\. The two most commonly used are \fB\-j\fP for raw JSON output and \fB\-D\fP to specify an alternative ZeroTier service working directory\. Raw JSON output is easier to parse in scripts and also contains verbose details not present in the tabular output\. The \fB\-D\fP option specifies where the service's zerotier\-one\.port and authtoken\.secret files are located if the service is not running at the default location for your system\. +.SH COMMANDS +.RS 0 +.IP \(bu 2 +\fBhelp\fP: +Displays \fBzerotier\-cli\fR help\. +.IP \(bu 2 +\fBinfo\fP: +Shows information about this device including its 10\-digit ZeroTier address and apparent connection status\. Use \fB\-j\fP for more verbose output\. +.IP \(bu 2 +\fBlistpeers\fP: +This command lists the ZeroTier VL1 (virtual layer 1, the peer to peer network) peers this service knows about and has recently (within the past 30 minutes or so) communicated with\. These are not necessarily all the devices on your virtual network(s), and may also include a few devices not on any virtual network you've joined\. These are typically either root servers or network controllers\. +.IP \(bu 2 +\fBlistnetworks\fP: +This lists the networks your system belongs to and some information about them, such as any ZeroTier\-managed IP addresses you have been assigned\. (IP addresses assigned manually to ZeroTier interfaces will not be listed here\. Use the standard network interface commands to see these\.) +.IP \(bu 2 +\fBjoin\fP: +To join a network just use \fBjoin\fP and its 16\-digit hex network ID\. That's it\. Then use \fBlistnetworks\fP to see the status\. You'll either get a reply from the network controller with a certificate and other info such as IP assignments, or you'll get "access denied\." In this case you'll need the administrator of this network to authorize your device by its 10\-digit device ID (visible with \fBinfo\fP) on the network's controller\. +.IP \(bu 2 +\fBleave\fP: +Leaving a network is as easy as joining it\. This disconnects from the network and deletes its interface from the system\. Note that peers on the network may hang around in \fBlistpeers\fP for up to 30 minutes until they time out due to lack of traffic\. But if they no longer share a network with you, they can't actually communicate with you in any meaningful way\. + +.RE +.SH EXAMPLES +.P +Join "Earth," ZeroTier's big public party line network: +.P +.RS 2 +.nf +$ sudo zerotier\-cli join 8056c2e21c000001 +$ sudo zerotier\-cli listnetworks +( wait until you get an Earth IP ) +$ ping earth\.zerotier\.net +( you should now be able to ping our Earth test IP ) +.fi +.RE +.P +Leave "Earth": +.P +.RS 2 +.nf +$ sudo zerotier\-cli leave 8056c2e21c000001 +.fi +.RE +.P +List VL1 peers: +.P +.RS 2 +.nf +$ sudo zerotier\-cli listpeers +.fi +.RE +.SH COPYRIGHT +.P +(c)2011\-2016 ZeroTier, Inc\. \-\- https://www\.zerotier\.com/ \-\- https://github\.com/zerotier +.SH SEE ALSO +.P +zerotier\-one(8), zerotier\-idtool(1) + diff --git a/doc/zerotier-idtool.1 b/doc/zerotier-idtool.1 new file mode 100644 index 000000000..fbc367a6a --- /dev/null +++ b/doc/zerotier-idtool.1 @@ -0,0 +1,84 @@ +.TH "ZEROTIER\-IDTOOL" "1" "December 2016" "" "" +.SH "NAME" +\fBzerotier-idtool\fR \- tool for creating and manipulating ZeroTier identities +.SH SYNOPSIS +.P +\fBzerotier\-idtool\fP [args] +.SH DESCRIPTION +.P +\fBzerotier\-idtool\fR is a command line utility for doing things with ZeroTier identities\. A ZeroTier identity consists of a public/private key pair (or just the public if it's only an identity\.public) and a 10\-digit hexadecimal ZeroTier address derived from the public key by way of a proof of work based hash function\. +.SH COMMANDS +.P +When command arguments call for a public or secret (full) identity, the identity can be specified as a path to a file or directly on the command line\. +.RS 0 +.IP \(bu 2 +\fBhelp\fP: +Display help\. (Also running with no command does this\.) +.IP \(bu 2 +\fBgenerate\fP [secret file] [public file] [vanity]: +Generate a new ZeroTier identity\. If a secret file is specified, the full identity including the private key will be written to this file\. If the public file is specified, the public portion will be written there\. If no file paths are specified the full secret identity is output to STDOUT\. The vanity prefix is a series of hexadecimal digits that the generated identity's address should start with\. Typically this isn't used, and if it's specified generation can take a very long time due to the intrinsic cost of generating identities with their proof of work function\. Generating an identity with a known 16\-bit (4 digit) prefix on a 2\.8ghz Core i5 (using one core) takes an average of two hours\. +.IP \(bu 2 +\fBvalidate\fP : +Locally validate an identity's key and proof of work function correspondence\. +.IP \(bu 2 +\fBgetpublic\fP : +Extract the public portion of an identity\.secret and print to STDOUT\. +.IP \(bu 2 +\fBsign\fP : +Sign a file's contents with SHA512+ECC\-256 (ed25519)\. The signature is output in hex to STDOUT\. +.IP \(bu 2 +\fBverify\fP : +Verify a signature created with \fBsign\fP\|\. +.IP \(bu 2 +\fBmkcom\fP [id,value,maxdelta] [\|\.\.\.]: +Create and sign a network membership certificate\. This is not generally useful since network controllers do this automatically and is included mostly for testing purposes\. + +.RE +.SH EXAMPLES +.P +Generate and dump a new identity: +.P +.RS 2 +.nf +$ zerotier\-idtool generate +.fi +.RE +.P +Generate and write a new identity, both secret and public parts: +.P +.RS 2 +.nf +$ zerotier\-idtool generate identity\.secret identity\.public +.fi +.RE +.P +Generate a vanity address that begins with the hex digits "beef" (this will take a while!): +.P +.RS 2 +.nf +$ zerotier\-idtool generate beef\.secret beef\.public beef +.fi +.RE +.P +Sign a file with an identity's secret key: +.P +.RS 2 +.nf +$ zerotier\-idtool sign identity\.secret last_will_and_testament\.txt +.fi +.RE +.P +Verify a file's signature with a public key: +.P +.RS 2 +.nf +$ zerotier\-idtool verify identity\.public last_will_and_testament\.txt +.fi +.RE +.SH COPYRIGHT +.P +(c)2011\-2016 ZeroTier, Inc\. \-\- https://www\.zerotier\.com/ \-\- https://github\.com/zerotier +.SH SEE ALSO +.P +zerotier\-one(8), zerotier\-cli(1) + diff --git a/doc/zerotier-one.8 b/doc/zerotier-one.8 new file mode 100644 index 000000000..4ad7a15d0 --- /dev/null +++ b/doc/zerotier-one.8 @@ -0,0 +1,104 @@ +.TH "ZEROTIER\-ONE" "8" "December 2016" "" "" +.SH "NAME" +\fBzerotier-one\fR \- ZeroTier virtual network endpoint service +.SH SYNOPSIS +.P +\fBzerotier\-one\fP [\-switches] [working directory] +.SH DESCRIPTION +.P +\fBzerotier\-one\fR is the service/daemon responsible for connecting a Unix (Linux/BSD/OSX) system to one or more ZeroTier virtual networks and presenting those networks to the system as virtual network ports\. You can think of it as a peer to peer VPN client\. +.P +It's typically run by init systems like systemd (Linux) or launchd (Mac) rather than directly by the user, and it must be run as root unless you give it the \fB\-U\fP switch and don't plan on actually joining networks (e\.g\. to run a network controller microservice only)\. +.P +The \fBzerotier\-one\fR service keeps its state and other files in a working directory\. If this directory is not specified at launch it defaults to "/var/lib/zerotier\-one" on Linux, "/Library/Application Support/ZeroTier/One" on Mac, and "/var/db/zerotier\-one" on FreeBSD and other similar BSDs\. The working directory should persist\. It shouldn't be automatically cleaned by system cleanup daemons or stored in a volatile location\. Loss of its identity\.secret file results in loss of this system's unique 10\-digit ZeroTier address and key\. +.P +Multiple instances of \fBzerotier\-one\fR can be run on the same system as long as they are run with different primary ports (see switches) and a different working directory\. But since a single service can join any number of networks, typically there's no point in doing this\. +.P +The \fBzerotier\-one\fR service is controlled via a JSON API available at 127\.0\.0\.1: with the default primary port being 9993\. Access to this API requires an authorization token normally found in the authtoken\.secret file in the service's working directory\. On some platforms access may be guarded by other measures such as socket peer UID/GID lookup if additional security options are enabled (this is not the default)\. +.P +The first time the service is started in a fresh working directory, it generates a ZeroTier identity\. On slow systems this process can take ten seconds or more due to an anti\-DDOS/anti\-counterfeit proof of work function used by ZeroTier in address generation\. This only happens once, and once generated the result is saved in identity\.secret in the working directory\. This file represents and defines/claims your ZeroTier address and associated ECC\-256 key pair\. +.SH SWITCHES +.RS 0 +.IP \(bu 2 +\fB\-h\fP: +Display help\. +.IP \(bu 2 +\fB\-v\fP: +Display ZeroTier One version\. +.IP \(bu 2 +\fB\-U\fP: +Skip privilege check and allow to be run by non\-privileged user\. This is typically used when \fBzerotier\-one\fR is built with the network controller option included\. In this case the ZeroTier service might only be acting as a network controller and might never actually join networks, in which case it does not require elevated system permissions\. +.IP \(bu 2 +\fB\-p\fP: +Specify a different primary port\. If this is not given the default is 9993\. If zero is given a random port is chosen each time\. +.IP \(bu 2 +\fB\-d\fP: +Fork and run as a daemon\. +.IP \(bu 2 +\fB\-i\fP: +Invoke the \fBzerotier\-idtool\fR personality, in which case the binary behaves like zerotier\-idtool(1)\. This happens automatically if the name of the binary (or a symlink to it) is zerotier\-idtool\. +.IP \(bu 2 +\fB\-q\fP: +Invoke the \fBzerotier\-cli\fR personality, in which case the binary behaves like zerotier\-cli(1)\. This happens automatically if the name of the binary (or a symlink to it) is zerotier\-cli\. + +.RE +.SH EXAMPLES +.P +Run as daemon with OS default working directory and default port: +.P +.RS 2 +.nf +$ sudo zerotier\-one \-d +.fi +.RE +.P +Run as daemon with a different working directory and port: +.P +.RS 2 +.nf +$ sudo zerotier\-one \-d \-p12345 /tmp/zerotier\-working\-directory\-test +.fi +.RE +.SH FILES +.P +These are found in the service's working directory\. +.RS 0 +.IP \(bu 2 +\fBidentity\.public\fP: +The public portion of your ZeroTier identity, which is your 10\-digit hex address and the associated public key\. +.IP \(bu 2 +\fBidentity\.secret\fP: +Your full ZeroTier identity including its private key\. This file identifies the system on the network, which means you can move a ZeroTier address around by copying this file and you should back up this file if you want to save your system's static ZeroTier address\. This file must be protected, since theft of its secret key will allow anyone to impersonate your device on any network and decrypt traffic\. For network controllers this file is particularly sensitive since it constitutes the private key for a certificate authority for the controller's networks\. +.IP \(bu 2 +\fBauthtoken\.secret\fP: +The secret token used to authenticate requests to the service's local JSON API\. If it does not exist it is generated from a secure random source on service start\. To use, send it in the "X\-ZT1\-Auth" header with HTTP requests to 127\.0\.0\.1:\|\. +.IP \(bu 2 +\fBdevicemap\fP: +Remembers mappings of zt# interface numbers to ZeroTier networks so they'll persist across restarts\. On some systems that support longer interface names that can encode the network ID (such as FreeBSD) this file may not be present\. +.IP \(bu 2 +\fBzerotier\-one\.pid\fP: +ZeroTier's PID\. This file is deleted on normal shutdown\. +.IP \(bu 2 +\fBzerotier\-one\.port\fP: +ZeroTier's primary port, which is also where its JSON API is found at 127\.0\.0\.1:\|\. This file is created on startup and is read by zerotier\-cli(1) to determine where it should find the control API\. +.IP \(bu 2 +\fBcontroller\.db\fP: +If the ZeroTier One service is built with the network controller enabled, this file contains the controller's SQLite3 database\. +.IP \(bu 2 +\fBcontroller\.db\.backup\fP: +If the ZeroTier One service is built with the network controller enabled, it periodically backs up its controller\.db database in this file (currently every 5 minutes if there have been changes)\. Since this file is not a currently in use SQLite3 database it's safer to back up without corruption\. On new backups the file is rotated out rather than being rewritten in place\. +.IP \(bu 2 +\fBiddb\.d/\fP (directory): +Caches the public identity of every peer ZeroTier has spoken with in the last 60 days\. This directory and its contents can be deleted, but this may result in slower connection initations since it will require that we go out and re\-fetch full identities for peers we're speaking to\. +.IP \(bu 2 +\fBnetworks\.d\fP (directory): +This caches network configurations and certificate information for networks you belong to\. ZeroTier scans this directory for \|\.conf files on startup to recall its networks, so "touch"ing an empty \|\.conf file in this directory is a way of pre\-configuring ZeroTier to join a specific network on startup without using the API\. If the config file is empty ZeroTIer will just fetch it from the network's controller\. + +.RE +.SH COPYRIGHT +.P +(c)2011\-2016 ZeroTier, Inc\. \-\- https://www\.zerotier\.com/ \-\- https://github\.com/zerotier +.SH SEE ALSO +.P +zerotier\-cli(1), zerotier\-idtool(1) + From 6b5d6efe6c9d597c49b3fe57d6c40342b226556f Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 23 Dec 2016 14:33:04 -0800 Subject: [PATCH 09/14] Retire old build farm (something new is coming) and update makefile for linux to not auto-build doc. --- {linux-build-farm => attic/linux-build-farm}/README.md | 0 .../linux-build-farm}/amazon-2016.03/x64/Dockerfile | 0 {linux-build-farm => attic/linux-build-farm}/build.sh | 0 .../linux-build-farm}/centos-6/x64/Dockerfile | 0 .../linux-build-farm}/centos-6/x86/Dockerfile | 0 .../linux-build-farm}/centos-7/x64/Dockerfile | 0 .../linux-build-farm}/centos-7/x86/Dockerfile | 0 .../linux-build-farm}/debian-jessie/x64/Dockerfile | 0 .../linux-build-farm}/debian-jessie/x86/Dockerfile | 0 .../linux-build-farm}/debian-stretch/x64/Dockerfile | 0 .../linux-build-farm}/debian-stretch/x86/Dockerfile | 0 .../linux-build-farm}/debian-wheezy/x64/Dockerfile | 0 .../linux-build-farm}/debian-wheezy/x86/Dockerfile | 0 .../linux-build-farm}/fedora-22/x64/Dockerfile | 0 .../linux-build-farm}/fedora-22/x86/Dockerfile | 0 .../linux-build-farm}/make-apt-repos.sh | 0 .../linux-build-farm}/make-rpm-repos.sh | 0 .../other/zerotier-containerized/Dockerfile | 0 .../other/zerotier-containerized/main.sh | 0 .../linux-build-farm}/ubuntu-trusty/x64/Dockerfile | 0 .../linux-build-farm}/ubuntu-trusty/x86/Dockerfile | 0 .../linux-build-farm}/ubuntu-wily/x64/Dockerfile | 0 .../linux-build-farm}/ubuntu-wily/x86/Dockerfile | 0 .../linux-build-farm}/ubuntu-xenial/x64/Dockerfile | 0 .../linux-build-farm}/ubuntu-xenial/x86/Dockerfile | 0 make-linux.mk | 8 ++------ 26 files changed, 2 insertions(+), 6 deletions(-) rename {linux-build-farm => attic/linux-build-farm}/README.md (100%) rename {linux-build-farm => attic/linux-build-farm}/amazon-2016.03/x64/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/build.sh (100%) rename {linux-build-farm => attic/linux-build-farm}/centos-6/x64/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/centos-6/x86/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/centos-7/x64/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/centos-7/x86/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/debian-jessie/x64/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/debian-jessie/x86/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/debian-stretch/x64/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/debian-stretch/x86/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/debian-wheezy/x64/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/debian-wheezy/x86/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/fedora-22/x64/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/fedora-22/x86/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/make-apt-repos.sh (100%) rename {linux-build-farm => attic/linux-build-farm}/make-rpm-repos.sh (100%) rename {linux-build-farm => attic/linux-build-farm}/other/zerotier-containerized/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/other/zerotier-containerized/main.sh (100%) rename {linux-build-farm => attic/linux-build-farm}/ubuntu-trusty/x64/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/ubuntu-trusty/x86/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/ubuntu-wily/x64/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/ubuntu-wily/x86/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/ubuntu-xenial/x64/Dockerfile (100%) rename {linux-build-farm => attic/linux-build-farm}/ubuntu-xenial/x86/Dockerfile (100%) diff --git a/linux-build-farm/README.md b/attic/linux-build-farm/README.md similarity index 100% rename from linux-build-farm/README.md rename to attic/linux-build-farm/README.md diff --git a/linux-build-farm/amazon-2016.03/x64/Dockerfile b/attic/linux-build-farm/amazon-2016.03/x64/Dockerfile similarity index 100% rename from linux-build-farm/amazon-2016.03/x64/Dockerfile rename to attic/linux-build-farm/amazon-2016.03/x64/Dockerfile diff --git a/linux-build-farm/build.sh b/attic/linux-build-farm/build.sh similarity index 100% rename from linux-build-farm/build.sh rename to attic/linux-build-farm/build.sh diff --git a/linux-build-farm/centos-6/x64/Dockerfile b/attic/linux-build-farm/centos-6/x64/Dockerfile similarity index 100% rename from linux-build-farm/centos-6/x64/Dockerfile rename to attic/linux-build-farm/centos-6/x64/Dockerfile diff --git a/linux-build-farm/centos-6/x86/Dockerfile b/attic/linux-build-farm/centos-6/x86/Dockerfile similarity index 100% rename from linux-build-farm/centos-6/x86/Dockerfile rename to attic/linux-build-farm/centos-6/x86/Dockerfile diff --git a/linux-build-farm/centos-7/x64/Dockerfile b/attic/linux-build-farm/centos-7/x64/Dockerfile similarity index 100% rename from linux-build-farm/centos-7/x64/Dockerfile rename to attic/linux-build-farm/centos-7/x64/Dockerfile diff --git a/linux-build-farm/centos-7/x86/Dockerfile b/attic/linux-build-farm/centos-7/x86/Dockerfile similarity index 100% rename from linux-build-farm/centos-7/x86/Dockerfile rename to attic/linux-build-farm/centos-7/x86/Dockerfile diff --git a/linux-build-farm/debian-jessie/x64/Dockerfile b/attic/linux-build-farm/debian-jessie/x64/Dockerfile similarity index 100% rename from linux-build-farm/debian-jessie/x64/Dockerfile rename to attic/linux-build-farm/debian-jessie/x64/Dockerfile diff --git a/linux-build-farm/debian-jessie/x86/Dockerfile b/attic/linux-build-farm/debian-jessie/x86/Dockerfile similarity index 100% rename from linux-build-farm/debian-jessie/x86/Dockerfile rename to attic/linux-build-farm/debian-jessie/x86/Dockerfile diff --git a/linux-build-farm/debian-stretch/x64/Dockerfile b/attic/linux-build-farm/debian-stretch/x64/Dockerfile similarity index 100% rename from linux-build-farm/debian-stretch/x64/Dockerfile rename to attic/linux-build-farm/debian-stretch/x64/Dockerfile diff --git a/linux-build-farm/debian-stretch/x86/Dockerfile b/attic/linux-build-farm/debian-stretch/x86/Dockerfile similarity index 100% rename from linux-build-farm/debian-stretch/x86/Dockerfile rename to attic/linux-build-farm/debian-stretch/x86/Dockerfile diff --git a/linux-build-farm/debian-wheezy/x64/Dockerfile b/attic/linux-build-farm/debian-wheezy/x64/Dockerfile similarity index 100% rename from linux-build-farm/debian-wheezy/x64/Dockerfile rename to attic/linux-build-farm/debian-wheezy/x64/Dockerfile diff --git a/linux-build-farm/debian-wheezy/x86/Dockerfile b/attic/linux-build-farm/debian-wheezy/x86/Dockerfile similarity index 100% rename from linux-build-farm/debian-wheezy/x86/Dockerfile rename to attic/linux-build-farm/debian-wheezy/x86/Dockerfile diff --git a/linux-build-farm/fedora-22/x64/Dockerfile b/attic/linux-build-farm/fedora-22/x64/Dockerfile similarity index 100% rename from linux-build-farm/fedora-22/x64/Dockerfile rename to attic/linux-build-farm/fedora-22/x64/Dockerfile diff --git a/linux-build-farm/fedora-22/x86/Dockerfile b/attic/linux-build-farm/fedora-22/x86/Dockerfile similarity index 100% rename from linux-build-farm/fedora-22/x86/Dockerfile rename to attic/linux-build-farm/fedora-22/x86/Dockerfile diff --git a/linux-build-farm/make-apt-repos.sh b/attic/linux-build-farm/make-apt-repos.sh similarity index 100% rename from linux-build-farm/make-apt-repos.sh rename to attic/linux-build-farm/make-apt-repos.sh diff --git a/linux-build-farm/make-rpm-repos.sh b/attic/linux-build-farm/make-rpm-repos.sh similarity index 100% rename from linux-build-farm/make-rpm-repos.sh rename to attic/linux-build-farm/make-rpm-repos.sh diff --git a/linux-build-farm/other/zerotier-containerized/Dockerfile b/attic/linux-build-farm/other/zerotier-containerized/Dockerfile similarity index 100% rename from linux-build-farm/other/zerotier-containerized/Dockerfile rename to attic/linux-build-farm/other/zerotier-containerized/Dockerfile diff --git a/linux-build-farm/other/zerotier-containerized/main.sh b/attic/linux-build-farm/other/zerotier-containerized/main.sh similarity index 100% rename from linux-build-farm/other/zerotier-containerized/main.sh rename to attic/linux-build-farm/other/zerotier-containerized/main.sh diff --git a/linux-build-farm/ubuntu-trusty/x64/Dockerfile b/attic/linux-build-farm/ubuntu-trusty/x64/Dockerfile similarity index 100% rename from linux-build-farm/ubuntu-trusty/x64/Dockerfile rename to attic/linux-build-farm/ubuntu-trusty/x64/Dockerfile diff --git a/linux-build-farm/ubuntu-trusty/x86/Dockerfile b/attic/linux-build-farm/ubuntu-trusty/x86/Dockerfile similarity index 100% rename from linux-build-farm/ubuntu-trusty/x86/Dockerfile rename to attic/linux-build-farm/ubuntu-trusty/x86/Dockerfile diff --git a/linux-build-farm/ubuntu-wily/x64/Dockerfile b/attic/linux-build-farm/ubuntu-wily/x64/Dockerfile similarity index 100% rename from linux-build-farm/ubuntu-wily/x64/Dockerfile rename to attic/linux-build-farm/ubuntu-wily/x64/Dockerfile diff --git a/linux-build-farm/ubuntu-wily/x86/Dockerfile b/attic/linux-build-farm/ubuntu-wily/x86/Dockerfile similarity index 100% rename from linux-build-farm/ubuntu-wily/x86/Dockerfile rename to attic/linux-build-farm/ubuntu-wily/x86/Dockerfile diff --git a/linux-build-farm/ubuntu-xenial/x64/Dockerfile b/attic/linux-build-farm/ubuntu-xenial/x64/Dockerfile similarity index 100% rename from linux-build-farm/ubuntu-xenial/x64/Dockerfile rename to attic/linux-build-farm/ubuntu-xenial/x64/Dockerfile diff --git a/linux-build-farm/ubuntu-xenial/x86/Dockerfile b/attic/linux-build-farm/ubuntu-xenial/x86/Dockerfile similarity index 100% rename from linux-build-farm/ubuntu-xenial/x86/Dockerfile rename to attic/linux-build-farm/ubuntu-xenial/x86/Dockerfile diff --git a/make-linux.mk b/make-linux.mk index ceb97a8a5..ed8ec44bf 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -113,7 +113,7 @@ endif #LDFLAGS= #STRIP=echo -all: one manpages +all: one one: $(OBJS) service/OneService.o one.o osdep/LinuxEthernetTap.o osdep/LinuxDropPrivileges.o $(CXX) $(CXXFLAGS) $(LDFLAGS) -o zerotier-one $(OBJS) service/OneService.o one.o osdep/LinuxEthernetTap.o osdep/LinuxDropPrivileges.o $(LDLIBS) @@ -131,13 +131,9 @@ manpages: FORCE doc: manpages clean: FORCE - rm -rf *.so *.o node/*.o controller/*.o osdep/*.o service/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o ext/miniupnpc/*.o ext/libnatpmp/*.o $(OBJS) zerotier-one zerotier-idtool zerotier-cli zerotier-selftest build-* ZeroTierOneInstaller-* *.deb *.rpm .depend doc/*.1 doc/*.2 doc/*.8 debian/files debian/zerotier-one*.debhelper debian/zerotier-one.substvars debian/*.log debian/zerotier-one + rm -rf *.so *.o node/*.o controller/*.o osdep/*.o service/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o ext/miniupnpc/*.o ext/libnatpmp/*.o $(OBJS) zerotier-one zerotier-idtool zerotier-cli zerotier-selftest build-* ZeroTierOneInstaller-* *.deb *.rpm .depend debian/files debian/zerotier-one*.debhelper debian/zerotier-one.substvars debian/*.log debian/zerotier-one doc/node_modules distclean: clean - rm -rf doc/node_modules - find linux-build-farm -type f -name '*.deb' -print0 | xargs -0 rm -fv - find linux-build-farm -type f -name '*.rpm' -print0 | xargs -0 rm -fv - find linux-build-farm -type f -name 'zt1-src.tar.gz' | xargs rm -fv realclean: distclean From 5ec84653740710972aa0a6bcc62679e1e0dbfa08 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 23 Dec 2016 14:38:36 -0800 Subject: [PATCH 10/14] Remove dead Mac stuff. --- .../bin/ZeroTier One.app/Contents/Info.plist | 59 - .../Contents/MacOS/ZeroTier One | Bin 152736 -> 0 bytes .../bin/ZeroTier One.app/Contents/PkgInfo | 1 - .../Contents/Resources/ZeroTierIcon.icns | Bin 125598 -> 0 bytes .../Contents/Resources/en.lproj/Credits.rtf | 13 - .../Resources/en.lproj/InfoPlist.strings | Bin 92 -> 0 bytes .../Contents/Resources/en.lproj/MainMenu.nib | Bin 25269 -> 0 bytes .../Contents/Resources/en.lproj/Window.nib | Bin 3616 -> 0 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 46675 -> 0 bytes .../WorkspaceSettings.xcsettings | 10 - .../UserInterfaceState.xcuserstate | Bin 27811 -> 0 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/postinst.sh | 2 +- 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 - 75 files changed, 1 insertion(+), 7398 deletions(-) delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Info.plist delete mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/MacOS/ZeroTier One delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/PkgInfo delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/ZeroTierIcon.icns delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/Credits.rtf delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/InfoPlist.strings delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/MainMenu.nib delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/Window.nib delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/_CodeSignature/CodeResources delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/LICENSE delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.pbxproj delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcshareddata/MacGap.xccheckout delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/Alex.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/api.xcuserdatad/WorkspaceSettings.xcsettings delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/WorkspaceSettings.xcsettings delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/AppDelegate.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/AppDelegate.m delete mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/CallbackDelegate.h delete mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/CallbackDelegate.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/App.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/App.m delete mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Command.h delete mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Command.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Dock.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Dock.m delete mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.h delete mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.m delete mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuProxy.h delete mode 100755 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuProxy.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Notice.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Notice.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Path.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Path.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/UserDefaults.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/UserDefaults.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/fonts.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/fonts.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Constants.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/ContentView.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/ContentView.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/JSEventHelper.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/JSEventHelper.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Utils.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Utils.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/WebViewDelegate.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/WebViewDelegate.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Window.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Window.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Clipboard.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Clipboard.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/MacGap-Info.plist delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/MacGap-Prefix.pch delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/WindowController.h delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/WindowController.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/Credits.rtf delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/InfoPlist.strings delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/MainMenu.xib delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/Window.xib delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/main.m delete mode 100644 ext/installfiles/mac/mac-ui-macgap1-wrapper/src/README.md delete mode 100644 ext/installfiles/mac/ui/Makefile delete mode 100644 ext/installfiles/mac/ui/README.md delete mode 100644 ext/installfiles/mac/ui/ZeroTierNetwork.jsx delete mode 100644 ext/installfiles/mac/ui/ZeroTierNode.jsx delete mode 100644 ext/installfiles/mac/ui/index.html delete mode 100644 ext/installfiles/mac/ui/main.js delete mode 100644 ext/installfiles/mac/ui/react.min.js delete mode 100644 ext/installfiles/mac/ui/simpleajax.min.js delete mode 100644 ext/installfiles/mac/ui/zerotier.css delete 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 deleted file mode 100644 index c67923c7d..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Info.plist +++ /dev/null @@ -1,59 +0,0 @@ - - - - - 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 deleted file mode 100755 index 8e38b861af65b371afeb86780235a6ab74bc69c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152736 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 z 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 diff --git a/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/Credits.rtf b/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/Credits.rtf deleted file mode 100644 index 6f388f662..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/Credits.rtf +++ /dev/null @@ -1,13 +0,0 @@ -{\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/bin/ZeroTier One.app/Contents/Resources/en.lproj/InfoPlist.strings b/ext/installfiles/mac/mac-ui-macgap1-wrapper/bin/ZeroTier One.app/Contents/Resources/en.lproj/InfoPlist.strings deleted file mode 100644 index 5e45963c382ba690b781b953a00585212b898ac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92 zcmW-XQ3`+{5C!MkQ~2$No+IcIkqMDxWCV8j>LCj|yTg2Mz+o9F%uHlf9u}h9EuK`F a!Y*1dX%G66ZqL#C$|bw0ZoP5@jOGW1ArT7z 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 deleted file mode 100644 index bac7faa79fa4fccf2c974d8a953c76c5d540416f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25269 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 n)F - - - - 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 deleted file mode 100644 index c7fd4a4a5..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -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 deleted file mode 100644 index 775c59641..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.pbxproj +++ /dev/null @@ -1,489 +0,0 @@ -// !$*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 deleted file mode 100644 index 88f36fc7b..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - 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 deleted file mode 100644 index 7fdde8531..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcshareddata/MacGap.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ - - - - - 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 deleted file mode 100644 index 20281812beaefed26ed5a7ceb16e431be71ad75f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46675 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 - - - - 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 deleted file mode 100644 index 822ed3cb6581b8e606bab5208852eff2f504b0a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27811 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 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 deleted file mode 100644 index 6ff33e603..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap.xcodeproj/project.xcworkspace/xcuserdata/liamks.xcuserdatad/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,10 +0,0 @@ - - - - - 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 deleted file mode 100644 index bf7370b50..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// 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 deleted file mode 100644 index 45923bb36..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/AppDelegate.m +++ /dev/null @@ -1,159 +0,0 @@ -// -// 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 deleted file mode 100755 index 0f31ee417..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/CallbackDelegate.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// 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 deleted file mode 100755 index 5ce8fbe33..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/CallbackDelegate.m +++ /dev/null @@ -1,168 +0,0 @@ -// -// 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 deleted file mode 100644 index f65ba61e1..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/App.h +++ /dev/null @@ -1,21 +0,0 @@ -#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 deleted file mode 100644 index 6d47a17e1..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/App.m +++ /dev/null @@ -1,128 +0,0 @@ -#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 deleted file mode 100755 index 65d6b6d48..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Command.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// 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 deleted file mode 100755 index 39b85630a..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Command.m +++ /dev/null @@ -1,28 +0,0 @@ -// -// 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 deleted file mode 100644 index b3c533d79..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Dock.h +++ /dev/null @@ -1,11 +0,0 @@ -#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 deleted file mode 100644 index a4494d165..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Dock.m +++ /dev/null @@ -1,31 +0,0 @@ -#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 deleted file mode 100755 index d765978fa..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// 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 deleted file mode 100755 index 7b9702cc4..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuItemProxy.m +++ /dev/null @@ -1,150 +0,0 @@ -// -// 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 deleted file mode 100755 index afd6c6edb..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuProxy.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// 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 deleted file mode 100755 index 5bc10a763..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/MenuProxy.m +++ /dev/null @@ -1,233 +0,0 @@ -// -// 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 deleted file mode 100644 index 51077a434..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Notice.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// 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 deleted file mode 100644 index a4095f9f2..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Notice.m +++ /dev/null @@ -1,108 +0,0 @@ -// -// 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 deleted file mode 100644 index f931340d0..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Path.h +++ /dev/null @@ -1,21 +0,0 @@ -#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 deleted file mode 100644 index 8c54100f7..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Path.m +++ /dev/null @@ -1,53 +0,0 @@ -#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 deleted file mode 100644 index 067076439..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.h +++ /dev/null @@ -1,17 +0,0 @@ -#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 deleted file mode 100644 index 9f4a44dbc..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/Sound.m +++ /dev/null @@ -1,97 +0,0 @@ -#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 deleted file mode 100644 index 269191b39..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/UserDefaults.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// 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 deleted file mode 100644 index 485687108..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/UserDefaults.m +++ /dev/null @@ -1,211 +0,0 @@ -// -// 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 deleted file mode 100644 index 62c7b7e83..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/fonts.h +++ /dev/null @@ -1,9 +0,0 @@ -@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 deleted file mode 100644 index b17818a53..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Commands/fonts.m +++ /dev/null @@ -1,48 +0,0 @@ -#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 deleted file mode 100644 index 1fe59d6cc..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Constants.h +++ /dev/null @@ -1,7 +0,0 @@ -// 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 deleted file mode 100644 index 65890a5ee..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/ContentView.h +++ /dev/null @@ -1,15 +0,0 @@ -#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 deleted file mode 100644 index 6558a191f..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/ContentView.m +++ /dev/null @@ -1,68 +0,0 @@ -#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 deleted file mode 100644 index 401f3e396..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/JSEventHelper.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// 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 deleted file mode 100644 index 65406b3c0..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/JSEventHelper.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// 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 deleted file mode 100644 index f573d881a..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Utils.h +++ /dev/null @@ -1,20 +0,0 @@ -#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 deleted file mode 100644 index 8d85c2949..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Utils.m +++ /dev/null @@ -1,93 +0,0 @@ -#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 deleted file mode 100644 index 49c6da6b9..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/WebViewDelegate.h +++ /dev/null @@ -1,49 +0,0 @@ -#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 deleted file mode 100644 index 505780183..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/WebViewDelegate.m +++ /dev/null @@ -1,206 +0,0 @@ -#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 deleted file mode 100644 index f721376e0..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Window.h +++ /dev/null @@ -1,23 +0,0 @@ -#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 deleted file mode 100644 index 2444f62ea..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Classes/Window.m +++ /dev/null @@ -1,94 +0,0 @@ -#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 deleted file mode 100644 index 6c1a2f513..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Clipboard.h +++ /dev/null @@ -1,10 +0,0 @@ -#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 deleted file mode 100644 index 1c18dea38..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/Clipboard.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// 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 deleted file mode 100644 index 7f71ea229..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/MacGap-Info.plist +++ /dev/null @@ -1,39 +0,0 @@ - - - - - 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 deleted file mode 100644 index ad05e8420..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/MacGap-Prefix.pch +++ /dev/null @@ -1,15 +0,0 @@ -// -// 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 deleted file mode 100644 index 72927effa..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/WindowController.h +++ /dev/null @@ -1,13 +0,0 @@ -#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 deleted file mode 100644 index 2765a2e3c..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/WindowController.m +++ /dev/null @@ -1,54 +0,0 @@ -#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 deleted file mode 100644 index 6f388f662..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/Credits.rtf +++ /dev/null @@ -1,13 +0,0 @@ -{\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 deleted file mode 100644 index 477b28ff8..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* 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 deleted file mode 100644 index dd67a86ae..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/MainMenu.xib +++ /dev/null @@ -1,3404 +0,0 @@ - - - - 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 deleted file mode 100644 index fa70acaa5..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/en.lproj/Window.xib +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 deleted file mode 100644 index 4ad50ad59..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/MacGap/main.m +++ /dev/null @@ -1,14 +0,0 @@ -// -// 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 deleted file mode 100644 index daf3eae9c..000000000 --- a/ext/installfiles/mac/mac-ui-macgap1-wrapper/src/README.md +++ /dev/null @@ -1,6 +0,0 @@ -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/postinst.sh b/ext/installfiles/mac/postinst.sh index da15f9c84..2e4f59162 100755 --- a/ext/installfiles/mac/postinst.sh +++ b/ext/installfiles/mac/postinst.sh @@ -22,7 +22,7 @@ if [ "$OSX_RELEASE" = "10.7" ]; then rm -f tap.kext.10_7.tar.gz fi -rm -rf node.log node.log.old root-topology shutdownIfUnreadable autoupdate.log updates.d +rm -rf node.log node.log.old root-topology shutdownIfUnreadable autoupdate.log updates.d ui peers.save chown -R 0 tap.kext chgrp -R 0 tap.kext if [ ! -f authtoken.secret ]; then diff --git a/ext/installfiles/mac/ui/Makefile b/ext/installfiles/mac/ui/Makefile deleted file mode 100644 index 4be03228b..000000000 --- a/ext/installfiles/mac/ui/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -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 deleted file mode 100644 index bd5eddb63..000000000 --- a/ext/installfiles/mac/ui/README.md +++ /dev/null @@ -1,10 +0,0 @@ -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 deleted file mode 100644 index f842d7587..000000000 --- a/ext/installfiles/mac/ui/ZeroTierNetwork.jsx +++ /dev/null @@ -1,74 +0,0 @@ -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 ( -
-
- {this.props.nwid}  - {this.props.name} -
-
-
-
Status
-
{this.props['status']}
-
-
-
Type
-
{this.props['type']}
-
-
-
MAC
-
{this.props['mac']}
-
-
-
MTU
-
{this.props['mtu']}
-
-
-
Broadcast
-
{(this.props['broadcastEnabled']) ? 'ENABLED' : 'DISABLED'}
-
-
-
Bridging
-
{(this.props['bridge']) ? 'ACTIVE' : 'DISABLED'}
-
-
-
Device
-
{(this.props['portDeviceName']) ? this.props['portDeviceName'] : '(none)'}
-
-
-
Managed IPs
-
- { - this.props['assignedAddresses'].map(function(ipAssignment) { - return ( -
{ipAssignment}
- ); - }) - } -
-
-
- -
- ); - } -}); diff --git a/ext/installfiles/mac/ui/ZeroTierNode.jsx b/ext/installfiles/mac/ui/ZeroTierNode.jsx deleted file mode 100644 index b4c292203..000000000 --- a/ext/installfiles/mac/ui/ZeroTierNode.jsx +++ /dev/null @@ -1,158 +0,0 @@ -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 deleted file mode 100644 index 44edb399f..000000000 --- a/ext/installfiles/mac/ui/index.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - ZeroTier One - - - - - - -
- - - diff --git a/ext/installfiles/mac/ui/main.js b/ext/installfiles/mac/ui/main.js deleted file mode 100644 index a1647127b..000000000 --- a/ext/installfiles/mac/ui/main.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 deleted file mode 100644 index 9040c970f..000000000 --- a/ext/installfiles/mac/ui/react.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * 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 deleted file mode 100644 index 17982839e..000000000 --- a/ext/installfiles/mac/ui/ztui.min.js +++ /dev/null @@ -1 +0,0 @@ -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 Date: Fri, 23 Dec 2016 15:11:44 -0800 Subject: [PATCH 11/14] Change org names, add makefile rule for Mac to build new UI. --- make-mac.mk | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/make-mac.mk b/make-mac.mk index ee90ae4ce..875f01e57 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -28,8 +28,8 @@ ifeq ($(ZT_OFFICIAL_RELEASE),1) ZT_USE_MINIUPNPC=1 CODESIGN=codesign PRODUCTSIGN=productsign - CODESIGN_APP_CERT="Developer ID Application: ZeroTier Networks LLC (8ZD9JUCZ4V)" - CODESIGN_INSTALLER_CERT="Developer ID Installer: ZeroTier Networks LLC (8ZD9JUCZ4V)" + CODESIGN_APP_CERT="Developer ID Application: ZeroTier, Inc (8ZD9JUCZ4V)" + CODESIGN_INSTALLER_CERT="Developer ID Installer: ZeroTier, Inc (8ZD9JUCZ4V)" endif ifeq ($(ZT_ENABLE_CLUSTER),1) @@ -61,7 +61,7 @@ endif CXXFLAGS=$(CFLAGS) -mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++ -all: one +all: one macui one: $(OBJS) service/OneService.o one.o $(CXX) $(CXXFLAGS) -o zerotier-one $(OBJS) service/OneService.o one.o $(LIBS) @@ -71,6 +71,11 @@ one: $(OBJS) service/OneService.o one.o $(CODESIGN) -f -s $(CODESIGN_APP_CERT) zerotier-one $(CODESIGN) -vvv zerotier-one +macui: FORCE + cd macui && xcodebuild -target "ZeroTier One" -configuration Release + $(CODESIGN) -f -s $(CODESIGN_APP_CERT) "macui/build/Release/ZeroTier One.app" + $(CODESIGN) -vvv "macui/build/Release/ZeroTier One.app" + cli: FORCE $(CXX) $(CXXFLAGS) -o zerotier cli/zerotier.cpp osdep/OSUtils.cpp node/InetAddress.cpp node/Utils.cpp node/Salsa20.cpp node/Identity.cpp node/SHA512.cpp node/C25519.cpp -lcurl $(STRIP) zerotier @@ -93,10 +98,9 @@ official: FORCE make ZT_OFFICIAL_RELEASE=1 mac-dist-pkg clean: - rm -rf *.dSYM build-* *.pkg *.dmg *.o node/*.o controller/*.o service/*.o osdep/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o $(OBJS) zerotier-one zerotier-idtool zerotier-selftest zerotier-cli zerotier ZeroTierOneInstaller-* mkworld doc/node_modules + rm -rf *.dSYM build-* *.pkg *.dmg *.o node/*.o controller/*.o service/*.o osdep/*.o ext/http-parser/*.o ext/lz4/*.o ext/json-parser/*.o $(OBJS) zerotier-one zerotier-idtool zerotier-selftest zerotier-cli zerotier ZeroTierOneInstaller-* mkworld doc/node_modules macui/build distclean: clean - rm -rf doc/node_modules # For those building from source -- installs signed binary tap driver in system ZT home install-mac-tap: FORCE From 24017659df4ebad3531c722374ac2f40dc9e2928 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 23 Dec 2016 15:25:04 -0800 Subject: [PATCH 12/14] Update installer, etc., for Mac. --- ext/installfiles/mac/ZeroTier One.pkgproj | 121 +--------------------- make-mac.mk | 6 +- 2 files changed, 7 insertions(+), 120 deletions(-) diff --git a/ext/installfiles/mac/ZeroTier One.pkgproj b/ext/installfiles/mac/ZeroTier One.pkgproj index d9730527a..4215fd227 100755 --- a/ext/installfiles/mac/ZeroTier One.pkgproj +++ b/ext/installfiles/mac/ZeroTier One.pkgproj @@ -37,7 +37,7 @@ GID 80 PATH - mac-ui-macgap1-wrapper/bin/ZeroTier One.app + ../../../macui/build/Release/ZeroTier One.app PATH_TYPE 1 PERMISSIONS @@ -121,119 +121,6 @@ UID 0 - - CHILDREN - - - CHILDREN - - GID - 0 - PATH - ui/index.html - PATH_TYPE - 1 - PERMISSIONS - 420 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - ui/main.js - PATH_TYPE - 1 - PERMISSIONS - 420 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - ui/react.min.js - PATH_TYPE - 1 - PERMISSIONS - 420 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - ui/simpleajax.min.js - PATH_TYPE - 1 - PERMISSIONS - 420 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - ui/zerotier.css - PATH_TYPE - 1 - PERMISSIONS - 420 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - ui/ztui.min.js - PATH_TYPE - 1 - PERMISSIONS - 420 - TYPE - 3 - UID - 0 - - - GID - 0 - PATH - ui - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 2 - UID - 0 - CHILDREN @@ -759,7 +646,7 @@ OVERWRITE_PERMISSIONS VERSION - 1.1.14 + 1.1.17 PROJECT_COMMENTS @@ -773,7 +660,7 @@ ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KPHRp dGxlPjwvdGl0bGU+CjxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29u dGVudD0iQ29jb2EgSFRNTCBXcml0ZXIiPgo8bWV0YSBuYW1lPSJD - b2NvYVZlcnNpb24iIGNvbnRlbnQ9IjE0MDQuNDciPgo8c3R5bGUg + b2NvYVZlcnNpb24iIGNvbnRlbnQ9IjE1MDQuNzYiPgo8c3R5bGUg dHlwZT0idGV4dC9jc3MiPgpwLnAxIHttYXJnaW46IDAuMHB4IDAu MHB4IDAuMHB4IDAuMHB4OyBsaW5lLWhlaWdodDogMTQuMHB4OyBm b250OiAxMi4wcHggSGVsdmV0aWNhOyBjb2xvcjogIzAwMDAwMDsg @@ -782,7 +669,7 @@ b2R5Pgo8cCBjbGFzcz0icDEiPjxzcGFuIGNsYXNzPSJzMSI+WmVy b1RpZXIgT25lIC0gTmV0d29yayBWaXJ0dWFsaXphdGlvbiBFdmVy eXdoZXJlPC9zcGFuPjwvcD4KPHAgY2xhc3M9InAxIj48c3BhbiBj - bGFzcz0iczEiPihjKTIwMTEtMjAxNiBaZXJvVGllciwgSW5jLjwv + bGFzcz0iczEiPihjKTIwMTEtMjAxNyBaZXJvVGllciwgSW5jLjwv c3Bhbj48L3A+CjxwIGNsYXNzPSJwMSI+PHNwYW4gY2xhc3M9InMx Ij5jb250YWN0QHplcm90aWVyLmNvbTwvc3Bhbj48L3A+CjxwIGNs YXNzPSJwMSI+PHNwYW4gY2xhc3M9InMxIj48YnI+Cjwvc3Bhbj48 diff --git a/make-mac.mk b/make-mac.mk index 875f01e57..0fbd38173 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -69,12 +69,12 @@ one: $(OBJS) service/OneService.o one.o ln -sf zerotier-one zerotier-idtool ln -sf zerotier-one zerotier-cli $(CODESIGN) -f -s $(CODESIGN_APP_CERT) zerotier-one - $(CODESIGN) -vvv zerotier-one + #$(CODESIGN) -vvv zerotier-one macui: FORCE cd macui && xcodebuild -target "ZeroTier One" -configuration Release $(CODESIGN) -f -s $(CODESIGN_APP_CERT) "macui/build/Release/ZeroTier One.app" - $(CODESIGN) -vvv "macui/build/Release/ZeroTier One.app" + #$(CODESIGN) -vvv "macui/build/Release/ZeroTier One.app" cli: FORCE $(CXX) $(CXXFLAGS) -o zerotier cli/zerotier.cpp osdep/OSUtils.cpp node/InetAddress.cpp node/Utils.cpp node/Salsa20.cpp node/Identity.cpp node/SHA512.cpp node/C25519.cpp -lcurl @@ -94,7 +94,7 @@ mac-dist-pkg: FORCE # For ZeroTier, Inc. to build official signed packages official: FORCE make clean - make ZT_OFFICIAL_RELEASE=1 -j 4 one + make ZT_OFFICIAL_RELEASE=1 -j 4 one macui make ZT_OFFICIAL_RELEASE=1 mac-dist-pkg clean: From 9a2b766aad60b25e76777bd6bbf226701a311d43 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Fri, 23 Dec 2016 15:57:21 -0800 Subject: [PATCH 13/14] Windows installer updates. --- ext/installfiles/windows/ZeroTier One.aip | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/ext/installfiles/windows/ZeroTier One.aip b/ext/installfiles/windows/ZeroTier One.aip index 331126e6b..a3811b805 100644 --- a/ext/installfiles/windows/ZeroTier One.aip +++ b/ext/installfiles/windows/ZeroTier One.aip @@ -26,10 +26,10 @@ - + - + @@ -58,11 +58,13 @@ - + + + @@ -71,12 +73,14 @@ - + - + + + @@ -109,6 +113,7 @@ + @@ -356,7 +361,7 @@ - + From aaf69d1aff59a244990e1c3c1de4ef6bf6ac6a3b Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Tue, 3 Jan 2017 14:03:50 -0800 Subject: [PATCH 14/14] properly quote string arguments to copyutil in case there are spaces in the path --- windows/WinUI/APIHandler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/windows/WinUI/APIHandler.cs b/windows/WinUI/APIHandler.cs index 177d336fc..a762fff7f 100644 --- a/windows/WinUI/APIHandler.cs +++ b/windows/WinUI/APIHandler.cs @@ -61,7 +61,7 @@ namespace WinUI String curPath = System.Reflection.Assembly.GetEntryAssembly().Location; int index = curPath.LastIndexOf("\\"); curPath = curPath.Substring(0, index); - ProcessStartInfo startInfo = new ProcessStartInfo(curPath + "\\copyutil.exe", globalZtDir + " " + localZtDir); + ProcessStartInfo startInfo = new ProcessStartInfo(curPath + "\\copyutil.exe", "\""+globalZtDir+"\"" + " " + "\""+localZtDir+"\""); startInfo.Verb = "runas";