mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-08 04:20:07 +02:00
♻️ Refactor displaying domains
This commit is contained in:
@ -51,8 +51,6 @@
|
|||||||
C40C7F2927721FF600DDDCDC /* ActivePhpInstallation+Checks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */; };
|
C40C7F2927721FF600DDDCDC /* ActivePhpInstallation+Checks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */; };
|
||||||
C40C7F3027722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; };
|
C40C7F3027722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; };
|
||||||
C40C7F3127722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; };
|
C40C7F3127722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; };
|
||||||
C40D88EB27F38D7600C94B40 /* DomainListProxiesCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D88EA27F38D7600C94B40 /* DomainListProxiesCell.swift */; };
|
|
||||||
C40D88EC27F38D7600C94B40 /* DomainListProxiesCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D88EA27F38D7600C94B40 /* DomainListProxiesCell.swift */; };
|
|
||||||
C412E5FC25700D5300A1FB67 /* HomebrewPackage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */; };
|
C412E5FC25700D5300A1FB67 /* HomebrewPackage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */; };
|
||||||
C415937F27A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */; };
|
C415937F27A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */; };
|
||||||
C415938027A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */; };
|
C415938027A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */; };
|
||||||
@ -87,6 +85,8 @@
|
|||||||
C42CFB1627DFDE7900862737 /* nginx-site.test in Resources */ = {isa = PBXBuildFile; fileRef = C42CFB1527DFDE7900862737 /* nginx-site.test */; };
|
C42CFB1627DFDE7900862737 /* nginx-site.test in Resources */ = {isa = PBXBuildFile; fileRef = C42CFB1527DFDE7900862737 /* nginx-site.test */; };
|
||||||
C42CFB1827DFDFDC00862737 /* nginx-site-isolated.test in Resources */ = {isa = PBXBuildFile; fileRef = C42CFB1727DFDFDC00862737 /* nginx-site-isolated.test */; };
|
C42CFB1827DFDFDC00862737 /* nginx-site-isolated.test in Resources */ = {isa = PBXBuildFile; fileRef = C42CFB1727DFDFDC00862737 /* nginx-site-isolated.test */; };
|
||||||
C42CFB1A27DFE8BD00862737 /* NginxConfigurationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42CFB1927DFE8BD00862737 /* NginxConfigurationTest.swift */; };
|
C42CFB1A27DFE8BD00862737 /* NginxConfigurationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42CFB1927DFE8BD00862737 /* NginxConfigurationTest.swift */; };
|
||||||
|
C42F26732805B4B400938AC7 /* DomainListable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42F26722805B4B400938AC7 /* DomainListable.swift */; };
|
||||||
|
C42F26742805B4B400938AC7 /* DomainListable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42F26722805B4B400938AC7 /* DomainListable.swift */; };
|
||||||
C43603A0275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; };
|
C43603A0275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; };
|
||||||
C43603A1275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; };
|
C43603A1275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; };
|
||||||
C43A8A1A25D9CD1000591B77 /* Utility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A1925D9CD1000591B77 /* Utility.swift */; };
|
C43A8A1A25D9CD1000591B77 /* Utility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A1925D9CD1000591B77 /* Utility.swift */; };
|
||||||
@ -284,7 +284,6 @@
|
|||||||
C40C7F1D2772136000DDDCDC /* PhpEnv.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpEnv.swift; sourceTree = "<group>"; };
|
C40C7F1D2772136000DDDCDC /* PhpEnv.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpEnv.swift; sourceTree = "<group>"; };
|
||||||
C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActivePhpInstallation+Checks.swift"; sourceTree = "<group>"; };
|
C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActivePhpInstallation+Checks.swift"; sourceTree = "<group>"; };
|
||||||
C40C7F2F27722E8D00DDDCDC /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
|
C40C7F2F27722E8D00DDDCDC /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
|
||||||
C40D88EA27F38D7600C94B40 /* DomainListProxiesCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainListProxiesCell.swift; sourceTree = "<group>"; };
|
|
||||||
C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewPackage.swift; sourceTree = "<group>"; };
|
C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewPackage.swift; sourceTree = "<group>"; };
|
||||||
C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpFrameworks.swift; sourceTree = "<group>"; };
|
C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpFrameworks.swift; sourceTree = "<group>"; };
|
||||||
C415D3B62770F294005EF286 /* Actions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Actions.swift; sourceTree = "<group>"; };
|
C415D3B62770F294005EF286 /* Actions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Actions.swift; sourceTree = "<group>"; };
|
||||||
@ -312,6 +311,7 @@
|
|||||||
C42CFB1527DFDE7900862737 /* nginx-site.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-site.test"; sourceTree = "<group>"; };
|
C42CFB1527DFDE7900862737 /* nginx-site.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-site.test"; sourceTree = "<group>"; };
|
||||||
C42CFB1727DFDFDC00862737 /* nginx-site-isolated.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-site-isolated.test"; sourceTree = "<group>"; };
|
C42CFB1727DFDFDC00862737 /* nginx-site-isolated.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-site-isolated.test"; sourceTree = "<group>"; };
|
||||||
C42CFB1927DFE8BD00862737 /* NginxConfigurationTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NginxConfigurationTest.swift; sourceTree = "<group>"; };
|
C42CFB1927DFE8BD00862737 /* NginxConfigurationTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NginxConfigurationTest.swift; sourceTree = "<group>"; };
|
||||||
|
C42F26722805B4B400938AC7 /* DomainListable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainListable.swift; sourceTree = "<group>"; };
|
||||||
C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Notifications.swift"; sourceTree = "<group>"; };
|
C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Notifications.swift"; sourceTree = "<group>"; };
|
||||||
C43A8A1925D9CD1000591B77 /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = "<group>"; };
|
C43A8A1925D9CD1000591B77 /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = "<group>"; };
|
||||||
C43A8A1F25D9D1D700591B77 /* brew-formula.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "brew-formula.json"; sourceTree = "<group>"; };
|
C43A8A1F25D9D1D700591B77 /* brew-formula.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "brew-formula.json"; sourceTree = "<group>"; };
|
||||||
@ -605,7 +605,6 @@
|
|||||||
C44067F627E258410045BD4E /* DomainListPhpCell.swift */,
|
C44067F627E258410045BD4E /* DomainListPhpCell.swift */,
|
||||||
C44067F827E2585E0045BD4E /* DomainListTypeCell.swift */,
|
C44067F827E2585E0045BD4E /* DomainListTypeCell.swift */,
|
||||||
C4AC51FB27E27F47008528CA /* DomainListKindCell.swift */,
|
C4AC51FB27E27F47008528CA /* DomainListKindCell.swift */,
|
||||||
C40D88EA27F38D7600C94B40 /* DomainListProxiesCell.swift */,
|
|
||||||
);
|
);
|
||||||
path = Cells;
|
path = Cells;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -723,6 +722,7 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
C4AF9F792754499000D44ED0 /* Valet.swift */,
|
C4AF9F792754499000D44ED0 /* Valet.swift */,
|
||||||
|
C42F26722805B4B400938AC7 /* DomainListable.swift */,
|
||||||
C4C0E8D927F887BD002D32A9 /* Proxies */,
|
C4C0E8D927F887BD002D32A9 /* Proxies */,
|
||||||
C4C0E8D827F887A5002D32A9 /* Sites */,
|
C4C0E8D827F887A5002D32A9 /* Sites */,
|
||||||
);
|
);
|
||||||
@ -1100,7 +1100,6 @@
|
|||||||
C41C02A927E61A65009F26CB /* ValetSite+Fake.swift in Sources */,
|
C41C02A927E61A65009F26CB /* ValetSite+Fake.swift in Sources */,
|
||||||
C4C0E8DF27F88AEB002D32A9 /* FakeSiteScanner.swift in Sources */,
|
C4C0E8DF27F88AEB002D32A9 /* FakeSiteScanner.swift in Sources */,
|
||||||
C4F2E4372752F0870020E974 /* HomebrewDiagnostics.swift in Sources */,
|
C4F2E4372752F0870020E974 /* HomebrewDiagnostics.swift in Sources */,
|
||||||
C40D88EB27F38D7600C94B40 /* DomainListProxiesCell.swift in Sources */,
|
|
||||||
C4CCBA6C275C567B008C7055 /* PMWindowController.swift in Sources */,
|
C4CCBA6C275C567B008C7055 /* PMWindowController.swift in Sources */,
|
||||||
C4B585442770FE3900DA4FBE /* Command.swift in Sources */,
|
C4B585442770FE3900DA4FBE /* Command.swift in Sources */,
|
||||||
C44067F527E2582B0045BD4E /* DomainListNameCell.swift in Sources */,
|
C44067F527E2582B0045BD4E /* DomainListNameCell.swift in Sources */,
|
||||||
@ -1122,6 +1121,7 @@
|
|||||||
C4F30B03278E16BA00755FCE /* HomebrewService.swift in Sources */,
|
C4F30B03278E16BA00755FCE /* HomebrewService.swift in Sources */,
|
||||||
54D9E0B427E4F51E003B9AD9 /* Key.swift in Sources */,
|
54D9E0B427E4F51E003B9AD9 /* Key.swift in Sources */,
|
||||||
C4C0E8E227F88B13002D32A9 /* ValetSiteScanner.swift in Sources */,
|
C4C0E8E227F88B13002D32A9 /* ValetSiteScanner.swift in Sources */,
|
||||||
|
C42F26732805B4B400938AC7 /* DomainListable.swift in Sources */,
|
||||||
5420395F2613607600FB00FA /* Preferences.swift in Sources */,
|
5420395F2613607600FB00FA /* Preferences.swift in Sources */,
|
||||||
C48D0C9325CC804200CC7490 /* XibLoadable.swift in Sources */,
|
C48D0C9325CC804200CC7490 /* XibLoadable.swift in Sources */,
|
||||||
54FCFD2A276C8AA4004CE748 /* CheckboxPreferenceView.swift in Sources */,
|
54FCFD2A276C8AA4004CE748 /* CheckboxPreferenceView.swift in Sources */,
|
||||||
@ -1187,6 +1187,7 @@
|
|||||||
C41CA5EE2774F8EE00A2C80E /* DomainListVC+Actions.swift in Sources */,
|
C41CA5EE2774F8EE00A2C80E /* DomainListVC+Actions.swift in Sources */,
|
||||||
54D9E0B727E4F51E003B9AD9 /* HotKey.swift in Sources */,
|
54D9E0B727E4F51E003B9AD9 /* HotKey.swift in Sources */,
|
||||||
C4205A7F27F4D21800191A39 /* ValetProxy.swift in Sources */,
|
C4205A7F27F4D21800191A39 /* ValetProxy.swift in Sources */,
|
||||||
|
C42F26742805B4B400938AC7 /* DomainListable.swift in Sources */,
|
||||||
C4F780C425D80B75000DBC97 /* MainMenu.swift in Sources */,
|
C4F780C425D80B75000DBC97 /* MainMenu.swift in Sources */,
|
||||||
54FCFD2B276C8AA4004CE748 /* CheckboxPreferenceView.swift in Sources */,
|
54FCFD2B276C8AA4004CE748 /* CheckboxPreferenceView.swift in Sources */,
|
||||||
C415D3B82770F294005EF286 /* Actions.swift in Sources */,
|
C415D3B82770F294005EF286 /* Actions.swift in Sources */,
|
||||||
@ -1244,7 +1245,6 @@
|
|||||||
C417DC75277614690015E6EE /* Helpers.swift in Sources */,
|
C417DC75277614690015E6EE /* Helpers.swift in Sources */,
|
||||||
C4080FF727BD8C6400BF2C6B /* BetterAlert.swift in Sources */,
|
C4080FF727BD8C6400BF2C6B /* BetterAlert.swift in Sources */,
|
||||||
C4B97B7C275CF20A003F3378 /* App+GlobalHotkey.swift in Sources */,
|
C4B97B7C275CF20A003F3378 /* App+GlobalHotkey.swift in Sources */,
|
||||||
C40D88EC27F38D7600C94B40 /* DomainListProxiesCell.swift in Sources */,
|
|
||||||
54D9E0B327E4F51E003B9AD9 /* HotKeysController.swift in Sources */,
|
54D9E0B327E4F51E003B9AD9 /* HotKeysController.swift in Sources */,
|
||||||
C4B97B79275CF1B5003F3378 /* App+ActivationPolicy.swift in Sources */,
|
C4B97B79275CF1B5003F3378 /* App+ActivationPolicy.swift in Sources */,
|
||||||
C4CE3BBB27B324230086CA49 /* MainMenu+Switcher.swift in Sources */,
|
C4CE3BBB27B324230086CA49 /* MainMenu+Switcher.swift in Sources */,
|
||||||
|
BIN
phpmon/Assets.xcassets/IconProxy.imageset/Proxy.png
vendored
BIN
phpmon/Assets.xcassets/IconProxy.imageset/Proxy.png
vendored
Binary file not shown.
Before Width: | Height: | Size: 710 B After Width: | Height: | Size: 935 B |
Binary file not shown.
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.4 KiB |
@ -384,7 +384,7 @@
|
|||||||
<scene sceneID="4XS-kY-YIS">
|
<scene sceneID="4XS-kY-YIS">
|
||||||
<objects>
|
<objects>
|
||||||
<windowController storyboardIdentifier="domainListWindow" id="8Ec-9q-82s" customClass="DomainListWC" customModule="PHP_Monitor" customModuleProvider="target" sceneMemberID="viewController">
|
<windowController storyboardIdentifier="domainListWindow" id="8Ec-9q-82s" customClass="DomainListWC" customModule="PHP_Monitor" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
<window key="window" title="Domains" subtitle="Linked & Parked" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="raw-02-3Q1">
|
<window key="window" separatorStyle="line" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="raw-02-3Q1">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
<rect key="contentRect" x="425" y="461" width="600" height="263"/>
|
<rect key="contentRect" x="425" y="461" width="600" height="263"/>
|
||||||
@ -437,7 +437,7 @@
|
|||||||
</windowController>
|
</windowController>
|
||||||
<customObject id="VCP-dF-cqM" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
<customObject id="VCP-dF-cqM" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="-374" y="746"/>
|
<point key="canvasLocation" x="-374" y="745.5"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Window Controller-->
|
<!--Window Controller-->
|
||||||
<scene sceneID="HTI-x5-rOp">
|
<scene sceneID="HTI-x5-rOp">
|
||||||
@ -532,7 +532,7 @@ Gw
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="n5T-nn-k3j">
|
<button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="n5T-nn-k3j">
|
||||||
<rect key="frame" x="13" y="13" width="82" height="32"/>
|
<rect key="frame" x="13" y="13" width="81" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Tertiary" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="mzA-Uu-gyf">
|
<buttonCell key="cell" type="push" title="Tertiary" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="mzA-Uu-gyf">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@ -651,7 +651,7 @@ Gw
|
|||||||
<color key="fillColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="fillColor" name="windowBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</box>
|
</box>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="PVw-cM-qAB">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="PVw-cM-qAB">
|
||||||
<rect key="frame" x="363" y="13" width="104" height="32"/>
|
<rect key="frame" x="364" y="13" width="103" height="32"/>
|
||||||
<buttonCell key="cell" type="push" title="Create Link" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="WwW-Wv-I8s">
|
<buttonCell key="cell" type="push" title="Create Link" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="WwW-Wv-I8s">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@ -732,7 +732,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="900-Z2-tID">
|
<textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="900-Z2-tID">
|
||||||
<rect key="frame" x="229" y="23" width="128" height="14"/>
|
<rect key="frame" x="230" y="23" width="128" height="14"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" title="That link already exists." id="jOt-n6-TQf">
|
<textFieldCell key="cell" lineBreakMode="clipping" title="That link already exists." id="jOt-n6-TQf">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
<color key="textColor" name="systemRedColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="systemRedColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
@ -11,4 +11,5 @@ import AppKit
|
|||||||
|
|
||||||
protocol DomainListCellProtocol {
|
protocol DomainListCellProtocol {
|
||||||
func populateCell(with site: ValetSite)
|
func populateCell(with site: ValetSite)
|
||||||
|
func populateCell(with proxy: ValetProxy)
|
||||||
}
|
}
|
||||||
|
@ -30,4 +30,8 @@ class DomainListKindCell: NSTableCellView, DomainListCellProtocol
|
|||||||
|
|
||||||
imageViewType.contentTintColor = NSColor.tertiaryLabelColor
|
imageViewType.contentTintColor = NSColor.tertiaryLabelColor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func populateCell(with proxy: ValetProxy) {
|
||||||
|
imageViewType.image = NSImage(named: "IconProxy")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,10 +17,12 @@ class DomainListNameCell: NSTableCellView, DomainListCellProtocol
|
|||||||
@IBOutlet weak var labelPathName: NSTextField!
|
@IBOutlet weak var labelPathName: NSTextField!
|
||||||
|
|
||||||
func populateCell(with site: ValetSite) {
|
func populateCell(with site: ValetSite) {
|
||||||
// Show the name of the site (including tld)
|
labelSiteName.stringValue = "\(site.name).\(site.tld)"
|
||||||
labelSiteName.stringValue = "\(site.name).\(Valet.shared.config.tld)"
|
|
||||||
|
|
||||||
// Show the absolute path, except make sure to replace the /Users/username segment with ~ for readability
|
|
||||||
labelPathName.stringValue = site.absolutePathRelative
|
labelPathName.stringValue = site.absolutePathRelative
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func populateCell(with proxy: ValetProxy) {
|
||||||
|
labelSiteName.stringValue = "\(proxy.domain).\(proxy.tld)"
|
||||||
|
labelPathName.stringValue = proxy.target
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,15 @@ class DomainListPhpCell: NSTableCellView, DomainListCellProtocol
|
|||||||
imageViewPhpVersionOK.image = NSImage(named: "Checkmark")
|
imageViewPhpVersionOK.image = NSImage(named: "Checkmark")
|
||||||
imageViewPhpVersionOK.toolTip = "domain_list.tooltips.checkmark".localized(site.composerPhp)
|
imageViewPhpVersionOK.toolTip = "domain_list.tooltips.checkmark".localized(site.composerPhp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buttonPhpVersion.isHidden = false
|
||||||
|
imageViewPhpVersionOK.isHidden = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func populateCell(with proxy: ValetProxy) {
|
||||||
|
buttonPhpVersion.isHidden = true
|
||||||
|
imageViewPhpVersionOK.isHidden = true
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func pressedPhpVersion(_ sender: Any) {
|
@IBAction func pressedPhpVersion(_ sender: Any) {
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
//
|
|
||||||
// DomainListNameCell.swift
|
|
||||||
// PHP Monitor
|
|
||||||
//
|
|
||||||
// Created by Nico Verbruggen on 16/03/2022.
|
|
||||||
// Copyright © 2022 Nico Verbruggen. All rights reserved.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Cocoa
|
|
||||||
import AppKit
|
|
||||||
|
|
||||||
class DomainListProxiesCell: NSTableCellView, DomainListCellProtocol
|
|
||||||
{
|
|
||||||
static let reusableName = "domainListProxiesCell"
|
|
||||||
|
|
||||||
@IBOutlet weak var textFieldPrimary: NSTextField!
|
|
||||||
@IBOutlet weak var textFieldAdditional: NSTextField!
|
|
||||||
@IBOutlet weak var buttonProxyList: NSButton!
|
|
||||||
|
|
||||||
func populateCell(with site: ValetSite) {
|
|
||||||
/*
|
|
||||||
// Show the first proxy
|
|
||||||
textFieldPrimary.stringValue = (site.proxies.count == 0)
|
|
||||||
? ""
|
|
||||||
: site.proxies[0]
|
|
||||||
|
|
||||||
// Show additional proxy count
|
|
||||||
textFieldAdditional.stringValue = site.proxies.count > 1
|
|
||||||
? "and \(site.proxies.count - 1) more active"
|
|
||||||
: site.proxies.count == 1 ? "(active)" : ""
|
|
||||||
|
|
||||||
// Show button
|
|
||||||
buttonProxyList.isHidden = site.proxies.count == 0
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -16,9 +16,14 @@ class DomainListTLSCell: NSTableCellView, DomainListCellProtocol
|
|||||||
@IBOutlet weak var imageViewLock: NSImageView!
|
@IBOutlet weak var imageViewLock: NSImageView!
|
||||||
|
|
||||||
func populateCell(with site: ValetSite) {
|
func populateCell(with site: ValetSite) {
|
||||||
// Show the green or red lock based on whether the site was secured
|
|
||||||
imageViewLock.contentTintColor = site.secured
|
imageViewLock.contentTintColor = site.secured
|
||||||
? NSColor(named: "IconColorGreen") // green
|
? NSColor(named: "IconColorGreen")
|
||||||
|
: NSColor(named: "IconColorRed")
|
||||||
|
}
|
||||||
|
|
||||||
|
func populateCell(with proxy: ValetProxy) {
|
||||||
|
imageViewLock.contentTintColor = proxy.target.contains("https")
|
||||||
|
? NSColor(named: "IconColorGreen")
|
||||||
: NSColor(named: "IconColorRed")
|
: NSColor(named: "IconColorRed")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,4 +28,10 @@ class DomainListTypeCell: NSTableCellView, DomainListCellProtocol
|
|||||||
// PHP version
|
// PHP version
|
||||||
labelPhpVersion.stringValue = site.composerPhp == "???" ? "Any PHP" : "PHP \(site.composerPhp)"
|
labelPhpVersion.stringValue = site.composerPhp == "???" ? "Any PHP" : "PHP \(site.composerPhp)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func populateCell(with proxy: ValetProxy) {
|
||||||
|
labelDriver.stringValue = "Proxy"
|
||||||
|
labelPhpVersion.stringValue = "Active"
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource
|
|||||||
// MARK: - Variables
|
// MARK: - Variables
|
||||||
|
|
||||||
/// List of sites that will be displayed in this view. Originates from the `Valet` object.
|
/// List of sites that will be displayed in this view. Originates from the `Valet` object.
|
||||||
var sites: [ValetSite] = []
|
var domains: [DomainListable] = []
|
||||||
|
|
||||||
/// Array that contains various apps that might open a particular site directory.
|
/// Array that contains various apps that might open a particular site directory.
|
||||||
var applications: [Application] {
|
var applications: [Application] {
|
||||||
@ -38,7 +38,14 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource
|
|||||||
if tableView.selectedRow == -1 {
|
if tableView.selectedRow == -1 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return sites[tableView.selectedRow]
|
return domains[tableView.selectedRow] as? ValetSite
|
||||||
|
}
|
||||||
|
|
||||||
|
var selectedProxy: ValetProxy? {
|
||||||
|
if tableView.selectedRow == -1 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return domains[tableView.selectedRow] as? ValetProxy
|
||||||
}
|
}
|
||||||
|
|
||||||
var timer: Timer? = nil
|
var timer: Timer? = nil
|
||||||
@ -78,9 +85,10 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource
|
|||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
tableView.doubleAction = #selector(self.doubleClicked(sender:))
|
tableView.doubleAction = #selector(self.doubleClicked(sender:))
|
||||||
|
|
||||||
if !Valet.shared.sites.isEmpty {
|
if !Valet.shared.sites.isEmpty {
|
||||||
// Preloaded list
|
// Preloaded list
|
||||||
sites = Valet.shared.sites
|
domains = Valet.getDomainListable()
|
||||||
searchedFor(text: lastSearchedFor)
|
searchedFor(text: lastSearchedFor)
|
||||||
} else {
|
} else {
|
||||||
reloadSites()
|
reloadSites()
|
||||||
@ -142,7 +150,7 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource
|
|||||||
waitAndExecute {
|
waitAndExecute {
|
||||||
Valet.shared.reloadSites()
|
Valet.shared.reloadSites()
|
||||||
} completion: { [self] in
|
} completion: { [self] in
|
||||||
sites = Valet.shared.sites
|
domains = Valet.shared.sites
|
||||||
searchedFor(text: lastSearchedFor)
|
searchedFor(text: lastSearchedFor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -150,23 +158,23 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource
|
|||||||
func applySortDescriptor(_ descriptor: NSSortDescriptor) {
|
func applySortDescriptor(_ descriptor: NSSortDescriptor) {
|
||||||
sortDescriptor = descriptor
|
sortDescriptor = descriptor
|
||||||
|
|
||||||
var sorted = self.sites
|
var sorted = self.domains
|
||||||
|
|
||||||
switch descriptor.key {
|
switch descriptor.key {
|
||||||
case "Secure":
|
case "Secure":
|
||||||
sorted = self.sites.sorted { $0.secured && !$1.secured }; break
|
sorted = self.domains.sorted { $0.getListableSecured() && !$1.getListableSecured() }; break
|
||||||
case "Domain":
|
case "Domain":
|
||||||
sorted = self.sites.sorted { $0.absolutePath < $1.absolutePath }; break
|
sorted = self.domains.sorted { $0.getListableAbsolutePath() < $1.getListableAbsolutePath() }; break
|
||||||
case "PHP":
|
case "PHP":
|
||||||
sorted = self.sites.sorted { $0.servingPhpVersion < $1.servingPhpVersion }; break
|
sorted = self.domains.sorted { $0.getListablePhpVersion() < $1.getListablePhpVersion() }; break
|
||||||
case "Kind":
|
case "Kind":
|
||||||
sorted = self.sites.sorted { ($0.aliasPath == nil) && !($1.aliasPath == nil) }; break
|
sorted = self.domains.sorted { $0.getListableKind() < $1.getListableKind() }; break
|
||||||
case "Type":
|
case "Type":
|
||||||
sorted = self.sites.sorted { $0.driver ?? "ZZZ" < $1.driver ?? "ZZZ" }; break
|
sorted = self.domains.sorted { $0.getListableType() < $1.getListableType() }; break
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.sites = descriptor.ascending ? sorted.reversed() : sorted
|
self.domains = descriptor.ascending ? sorted.reversed() : sorted
|
||||||
}
|
}
|
||||||
|
|
||||||
func addedNewSite(name: String, secure: Bool) {
|
func addedNewSite(name: String, secure: Bool) {
|
||||||
@ -178,13 +186,13 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func find(_ name: String, _ secure: Bool = false) {
|
private func find(_ name: String, _ secure: Bool = false) {
|
||||||
sites = Valet.shared.sites
|
domains = Valet.getDomainListable()
|
||||||
searchedFor(text: "")
|
searchedFor(text: "")
|
||||||
if let site = sites.enumerated().first(where: { $0.element.name == name }) {
|
if let site = domains.enumerated().first(where: { $0.element.getListableName() == name }) {
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self.tableView.selectRowIndexes([site.offset], byExtendingSelection: false)
|
self.tableView.selectRowIndexes([site.offset], byExtendingSelection: false)
|
||||||
self.tableView.scrollRowToVisible(site.offset)
|
self.tableView.scrollRowToVisible(site.offset)
|
||||||
if (secure && !site.element.secured) {
|
if (secure && !site.element.getListableSecured()) {
|
||||||
self.toggleSecure()
|
self.toggleSecure()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -194,7 +202,7 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource
|
|||||||
// MARK: - Table View Delegate
|
// MARK: - Table View Delegate
|
||||||
|
|
||||||
func numberOfRows(in tableView: NSTableView) -> Int {
|
func numberOfRows(in tableView: NSTableView) -> Int {
|
||||||
return sites.count
|
return domains.count
|
||||||
}
|
}
|
||||||
|
|
||||||
func tableView(_ tableView: NSTableView, sortDescriptorsDidChange oldDescriptors: [NSSortDescriptor]) {
|
func tableView(_ tableView: NSTableView, sortDescriptorsDidChange oldDescriptors: [NSSortDescriptor]) {
|
||||||
@ -220,7 +228,13 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource
|
|||||||
guard let userCell = tableView.makeView(withIdentifier: identifier, owner: self)
|
guard let userCell = tableView.makeView(withIdentifier: identifier, owner: self)
|
||||||
as? DomainListCellProtocol else { return nil }
|
as? DomainListCellProtocol else { return nil }
|
||||||
|
|
||||||
userCell.populateCell(with: sites[row])
|
if let site = domains[row] as? ValetSite {
|
||||||
|
userCell.populateCell(with: site)
|
||||||
|
}
|
||||||
|
|
||||||
|
if let proxy = domains[row] as? ValetProxy {
|
||||||
|
userCell.populateCell(with: proxy)
|
||||||
|
}
|
||||||
|
|
||||||
return userCell as? NSView
|
return userCell as? NSView
|
||||||
}
|
}
|
||||||
@ -255,7 +269,7 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource
|
|||||||
let searchString = text.lowercased()
|
let searchString = text.lowercased()
|
||||||
|
|
||||||
if searchString.isEmpty {
|
if searchString.isEmpty {
|
||||||
sites = Valet.shared.sites
|
domains = Valet.getDomainListable()
|
||||||
|
|
||||||
reloadTable()
|
reloadTable()
|
||||||
|
|
||||||
@ -266,9 +280,9 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource
|
|||||||
.split(separator: " ")
|
.split(separator: " ")
|
||||||
.map { return String($0) }
|
.map { return String($0) }
|
||||||
|
|
||||||
sites = Valet.shared.sites.filter({ site in
|
domains = Valet.getDomainListable().filter({ site in
|
||||||
return !splitSearchString.map { searchString in
|
return !splitSearchString.map { searchString in
|
||||||
return site.name.lowercased().contains(searchString)
|
return site.getListableName().lowercased().contains(searchString)
|
||||||
}.contains(false)
|
}.contains(false)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -10,9 +10,13 @@ import Foundation
|
|||||||
|
|
||||||
class NginxConfiguration {
|
class NginxConfiguration {
|
||||||
|
|
||||||
|
/** Contents of the Nginx file in question, as a string. */
|
||||||
var contents: String!
|
var contents: String!
|
||||||
|
|
||||||
|
/** The name of the domain, usually derived from the name of the file. */
|
||||||
var domain: String
|
var domain: String
|
||||||
|
|
||||||
|
/** The TLD of the domain, usually derived from the name of the file. */
|
||||||
var tld: String
|
var tld: String
|
||||||
|
|
||||||
init(filePath: String) {
|
init(filePath: String) {
|
||||||
@ -47,7 +51,7 @@ class NginxConfiguration {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Retrieves which isolated version is active for this domain.
|
Retrieves which isolated version is active for this domain (if applicable).
|
||||||
*/
|
*/
|
||||||
lazy var isolatedVersion: String? = {
|
lazy var isolatedVersion: String? = {
|
||||||
let regex = try! NSRegularExpression(
|
let regex = try! NSRegularExpression(
|
||||||
|
25
phpmon/Domain/Integrations/Valet/DomainListable.swift
Normal file
25
phpmon/Domain/Integrations/Valet/DomainListable.swift
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
//
|
||||||
|
// DomainListable.swift
|
||||||
|
// PHP Monitor
|
||||||
|
//
|
||||||
|
// Created by Nico Verbruggen on 12/04/2022.
|
||||||
|
// Copyright © 2022 Nico Verbruggen. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
protocol DomainListable {
|
||||||
|
|
||||||
|
func getListableName() -> String
|
||||||
|
|
||||||
|
func getListableSecured() -> Bool
|
||||||
|
|
||||||
|
func getListableAbsolutePath() -> String
|
||||||
|
|
||||||
|
func getListablePhpVersion() -> String
|
||||||
|
|
||||||
|
func getListableKind() -> String
|
||||||
|
|
||||||
|
func getListableType() -> String
|
||||||
|
|
||||||
|
}
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
class ValetProxy
|
class ValetProxy: DomainListable
|
||||||
{
|
{
|
||||||
var domain: String
|
var domain: String
|
||||||
var tld: String
|
var tld: String
|
||||||
@ -19,4 +19,30 @@ class ValetProxy
|
|||||||
self.tld = configuration.tld
|
self.tld = configuration.tld
|
||||||
self.target = configuration.proxy!
|
self.target = configuration.proxy!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - DomainListable Protocol
|
||||||
|
|
||||||
|
func getListableName() -> String {
|
||||||
|
return self.domain
|
||||||
|
}
|
||||||
|
|
||||||
|
func getListableSecured() -> Bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func getListableAbsolutePath() -> String {
|
||||||
|
return self.domain
|
||||||
|
}
|
||||||
|
|
||||||
|
func getListablePhpVersion() -> String {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func getListableKind() -> String {
|
||||||
|
return "proxy"
|
||||||
|
}
|
||||||
|
|
||||||
|
func getListableType() -> String {
|
||||||
|
return "proxy"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
class ValetSite {
|
class ValetSite: DomainListable {
|
||||||
|
|
||||||
/// Name of the site. Does not include the TLD.
|
/// Name of the site. Does not include the TLD.
|
||||||
var name: String
|
var name: String
|
||||||
@ -220,7 +220,7 @@ class ValetSite {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: File Parsing
|
// MARK: - File Parsing
|
||||||
|
|
||||||
public static func isolatedVersion(_ filePath: String) -> String? {
|
public static func isolatedVersion(_ filePath: String) -> String? {
|
||||||
if Filesystem.fileExists(filePath) {
|
if Filesystem.fileExists(filePath) {
|
||||||
@ -231,4 +231,30 @@ class ValetSite {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - DomainListable Protocol
|
||||||
|
|
||||||
|
func getListableName() -> String {
|
||||||
|
return self.name
|
||||||
|
}
|
||||||
|
|
||||||
|
func getListableSecured() -> Bool {
|
||||||
|
return self.secured
|
||||||
|
}
|
||||||
|
|
||||||
|
func getListableAbsolutePath() -> String {
|
||||||
|
return self.absolutePath
|
||||||
|
}
|
||||||
|
|
||||||
|
func getListablePhpVersion() -> String {
|
||||||
|
return self.servingPhpVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
func getListableKind() -> String {
|
||||||
|
return (self.aliasPath == nil) ? "linked" : "parked"
|
||||||
|
}
|
||||||
|
|
||||||
|
func getListableType() -> String {
|
||||||
|
return self.driver ?? "ZZZ"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,10 @@ class Valet {
|
|||||||
return self.shared.features.contains(feature)
|
return self.shared.features.contains(feature)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static func getDomainListable() -> [DomainListable] {
|
||||||
|
return self.shared.sites + self.shared.proxies
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
We don't want to load the initial config.json file as soon as the class is initialised.
|
We don't want to load the initial config.json file as soon as the class is initialised.
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@
|
|||||||
// SITE LIST
|
// SITE LIST
|
||||||
|
|
||||||
"domain_list.title" = "Domains";
|
"domain_list.title" = "Domains";
|
||||||
"domain_list.subtitle" = "Linked & Parked";
|
"domain_list.subtitle" = "";
|
||||||
|
|
||||||
"domain_list.tooltips.isolated" = "This domain is isolated and using PHP %@ instead of the globally linked PHP.";
|
"domain_list.tooltips.isolated" = "This domain is isolated and using PHP %@ instead of the globally linked PHP.";
|
||||||
"domain_list.tooltips.checkmark" = "This domain is being served with a version of PHP that is compatible with this requirement (PHP %@). Click on the PHP version next to this checkmark to find out more information about how this requirement was determined.";
|
"domain_list.tooltips.checkmark" = "This domain is being served with a version of PHP that is compatible with this requirement (PHP %@). Click on the PHP version next to this checkmark to find out more information about how this requirement was determined.";
|
||||||
|
Reference in New Issue
Block a user