0.7.11.5
This commit is contained in:
337
MainMenu.nib/designable.nib
generated
337
MainMenu.nib/designable.nib
generated
@@ -52,21 +52,20 @@
|
|||||||
</customObject>
|
</customObject>
|
||||||
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="ProgressBarWindow" animationBehavior="default" id="21" userLabel="ProgressWindow">
|
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="ProgressBarWindow" animationBehavior="default" id="21" userLabel="ProgressWindow">
|
||||||
<windowStyleMask key="styleMask" titled="YES" miniaturizable="YES" resizable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" miniaturizable="YES" resizable="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<rect key="contentRect" x="472" y="537" width="600" height="83"/>
|
||||||
<rect key="contentRect" x="472" y="537" width="500" height="83"/>
|
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="878"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="878"/>
|
||||||
<value key="minSize" type="size" width="500" height="83"/>
|
<value key="minSize" type="size" width="600" height="83"/>
|
||||||
<value key="maxSize" type="size" width="1200" height="83"/>
|
<value key="maxSize" type="size" width="1200" height="83"/>
|
||||||
<view key="contentView" id="2">
|
<view key="contentView" id="2">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="500" height="83"/>
|
<rect key="frame" x="0.0" y="0.0" width="600" height="83"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<progressIndicator wantsLayer="YES" verticalHuggingPriority="750" maxValue="100" bezeled="NO" indeterminate="YES" style="bar" id="204">
|
<progressIndicator wantsLayer="YES" verticalHuggingPriority="750" maxValue="100" bezeled="NO" indeterminate="YES" style="bar" id="204">
|
||||||
<rect key="frame" x="18" y="27" width="372" height="20"/>
|
<rect key="frame" x="18" y="27" width="472" height="20"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
</progressIndicator>
|
</progressIndicator>
|
||||||
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="205">
|
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="205">
|
||||||
<rect key="frame" x="18" y="55" width="465" height="17"/>
|
<rect key="frame" x="18" y="55" width="565" height="17"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" lineBreakMode="clipping" sendsActionOnEndEditing="YES" baseWritingDirection="leftToRight" alignment="left" id="472">
|
<textFieldCell key="cell" lineBreakMode="clipping" sendsActionOnEndEditing="YES" baseWritingDirection="leftToRight" alignment="left" id="472">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -75,7 +74,7 @@
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="750" id="206">
|
<button verticalHuggingPriority="750" id="206">
|
||||||
<rect key="frame" x="400" y="20" width="86" height="32"/>
|
<rect key="frame" x="500" y="20" width="86" height="32"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
|
||||||
<buttonCell key="cell" type="push" title="Quit" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="473">
|
<buttonCell key="cell" type="push" title="Quit" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="473">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
@@ -109,25 +108,25 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<scrollView autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="304">
|
<scrollView autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="304">
|
||||||
<rect key="frame" x="20" y="-203" width="455" height="202"/>
|
<rect key="frame" x="20" y="-203" width="555" height="202"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||||
<clipView key="contentView" copiesOnScroll="NO" id="2mm-QF-kpX">
|
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="2mm-QF-kpX">
|
||||||
<rect key="frame" x="1" y="1" width="453" height="200"/>
|
<rect key="frame" x="1" y="1" width="553" height="200"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textView editable="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" findStyle="panel" allowsDocumentBackgroundColorChange="YES" linkDetection="YES" id="307">
|
<textView editable="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" findStyle="panel" allowsDocumentBackgroundColorChange="YES" linkDetection="YES" id="307">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="453" height="200"/>
|
<rect key="frame" x="0.0" y="0.0" width="553" height="200"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<size key="minSize" width="453" height="200"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<size key="maxSize" width="463" height="10000000"/>
|
<size key="minSize" width="553" height="200"/>
|
||||||
<color key="insertionPointColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<size key="maxSize" width="553" height="10000000"/>
|
||||||
|
<color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="207" id="489"/>
|
<outlet property="delegate" destination="207" id="489"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textView>
|
</textView>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
</clipView>
|
</clipView>
|
||||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="481">
|
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="481">
|
||||||
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
|
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
|
||||||
@@ -143,7 +142,7 @@ Gw
|
|||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="207" id="377"/>
|
<outlet property="delegate" destination="207" id="377"/>
|
||||||
</connections>
|
</connections>
|
||||||
<point key="canvasLocation" x="67" y="301.5"/>
|
<point key="canvasLocation" x="87" y="313"/>
|
||||||
</window>
|
</window>
|
||||||
<menu title="MainMenu" systemMenu="main" id="29" userLabel="MainMenu">
|
<menu title="MainMenu" systemMenu="main" id="29" userLabel="MainMenu">
|
||||||
<items>
|
<items>
|
||||||
@@ -159,6 +158,18 @@ Gw
|
|||||||
<menuItem isSeparatorItem="YES" id="233">
|
<menuItem isSeparatorItem="YES" id="233">
|
||||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
|
<menuItem title="Preferences..." id="reA-2d-BZ0">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="menuItemSelected:" target="207" id="x6l-Tq-pHp"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Check for updates..." id="jWa-5b-mBK" userLabel="Check for updates...">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="menuItemSelected:" target="207" id="VBb-a8-Cku"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
<menuItem title="Services" id="235">
|
<menuItem title="Services" id="235">
|
||||||
<menu key="submenu" title="Services" systemMenu="services" id="234"/>
|
<menu key="submenu" title="Services" systemMenu="services" id="234"/>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
@@ -239,77 +250,218 @@ Gw
|
|||||||
</items>
|
</items>
|
||||||
</menu>
|
</menu>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Edit" id="163">
|
<menuItem title="Edit" id="OYz-zT-LAM">
|
||||||
<menu key="submenu" title="Edit" id="8AD-nO-Nv5">
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Edit" id="gbe-PM-Daj">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Undo" keyEquivalent="z" id="WsN-Bo-RAi">
|
<menuItem title="Undo" keyEquivalent="z" id="6BN-ih-O2m">
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="undo:" target="-1" id="swp-Rd-xai"/>
|
<action selector="undo:" target="-1" id="oH0-3R-wus"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Redo" keyEquivalent="z" id="lwR-9k-Jds">
|
<menuItem title="Redo" keyEquivalent="z" id="TgQ-5S-p2w">
|
||||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="redo:" target="-1" id="t0d-JF-Jxf"/>
|
<action selector="redo:" target="-1" id="bxh-7G-6rR"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem isSeparatorItem="YES" id="f7y-jW-w4a">
|
<menuItem isSeparatorItem="YES" id="ktb-NS-TU3"/>
|
||||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
<menuItem title="Cut" keyEquivalent="x" id="yLq-sd-YR5">
|
||||||
</menuItem>
|
|
||||||
<menuItem title="Cut" keyEquivalent="x" id="gYg-Fm-Vd0">
|
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="cut:" target="-1" id="uo1-1q-hcK"/>
|
<action selector="cut:" target="-1" id="46i-iL-VLK"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Copy" keyEquivalent="c" id="gPx-QX-E5Y">
|
<menuItem title="Copy" keyEquivalent="c" id="s3v-O1-6pA">
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="copy:" target="-1" id="dyg-Qh-MrF"/>
|
<action selector="copy:" target="-1" id="jxG-ij-fh7"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Paste" keyEquivalent="v" id="Onj-KJ-eWD">
|
<menuItem title="Paste" keyEquivalent="v" id="6Ld-ut-13f">
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="paste:" target="-1" id="ZQo-9c-pWs"/>
|
<action selector="paste:" target="-1" id="PGw-sA-Gma"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Delete" id="NRV-Nu-dQo">
|
<menuItem title="Paste and Match Style" keyEquivalent="V" id="GyB-HZ-4kH">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="delete:" target="-1" id="PJy-am-8nR"/>
|
<action selector="pasteAsPlainText:" target="-1" id="AlS-iZ-R4l"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Select All" keyEquivalent="a" id="aZ7-KE-7Nh">
|
<menuItem title="Delete" id="YkA-TP-1J9">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="selectAll:" target="-1" id="gnq-iF-2hE"/>
|
<action selector="delete:" target="-1" id="cE3-5v-CP0"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem isSeparatorItem="YES" id="ckZ-kQ-yF7">
|
<menuItem title="Select All" keyEquivalent="a" id="z4j-fk-SUb">
|
||||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
<connections>
|
||||||
|
<action selector="selectAll:" target="-1" id="eM9-h9-WVo"/>
|
||||||
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Find" id="EgA-FB-eXQ">
|
<menuItem isSeparatorItem="YES" id="FXg-ZR-vZj"/>
|
||||||
<menu key="submenu" title="Find" id="xIX-bE-bd8">
|
<menuItem title="Find" id="amO-Yt-228">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Find" id="9XE-hK-Hbc">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Find…" tag="1" keyEquivalent="f" id="3k0-IU-cL5">
|
<menuItem title="Find…" tag="1" keyEquivalent="f" id="yA2-y8-dhZ">
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="performFindPanelAction:" target="-1" id="wAh-50-CiI"/>
|
<action selector="performFindPanelAction:" target="-1" id="zqc-0l-nEk"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="EAX-qd-XMX">
|
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="ceF-be-hip">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="performFindPanelAction:" target="-1" id="LvO-Xz-du1"/>
|
<action selector="performFindPanelAction:" target="-1" id="Fno-81-Q2N"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="n5T-AH-BNm">
|
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="6FX-CW-rwT">
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="performFindPanelAction:" target="-1" id="FgQ-Gb-Qnu"/>
|
<action selector="performFindPanelAction:" target="-1" id="AeZ-8e-DSZ"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="xKU-AA-Gj3">
|
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="kIR-xV-7pl">
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="performFindPanelAction:" target="-1" id="j7C-hb-eo3"/>
|
<action selector="performFindPanelAction:" target="-1" id="ALM-eS-1XU"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Jump to Selection" keyEquivalent="j" id="mpE-JG-s67">
|
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="yTY-2E-Cp9">
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="centerSelectionInVisibleArea:" target="-1" id="H4Z-6R-SO2"/>
|
<action selector="performFindPanelAction:" target="-1" id="Gbj-g6-cYJ"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Jump to Selection" keyEquivalent="j" id="80n-rn-d7I">
|
||||||
|
<connections>
|
||||||
|
<action selector="centerSelectionInVisibleArea:" target="-1" id="qfH-cs-Cdv"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Spelling and Grammar" id="uWG-xr-cNT">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Spelling" id="Xoa-7u-7zM">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="rZl-3I-YFV">
|
||||||
|
<connections>
|
||||||
|
<action selector="showGuessPanel:" target="-1" id="CSh-4b-cGc"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Check Document Now" keyEquivalent=";" id="tjk-pc-YjK">
|
||||||
|
<connections>
|
||||||
|
<action selector="checkSpelling:" target="-1" id="O3S-v5-8Ra"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="ohv-rn-e7b"/>
|
||||||
|
<menuItem title="Check Spelling While Typing" id="E3o-iC-0NO">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleContinuousSpellChecking:" target="-1" id="k4Q-aZ-O6y"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Check Grammar With Spelling" id="mUP-Jd-Tu1">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleGrammarChecking:" target="-1" id="Ypd-WC-IMS"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Correct Spelling Automatically" id="qq3-jk-TYN">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="Ob8-wh-bLR"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Substitutions" id="8Ti-fk-PNH">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Substitutions" id="NeW-07-aln">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Show Substitutions" id="DXm-9z-Sle">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="z43-IC-kpA"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="aVP-JA-dKq"/>
|
||||||
|
<menuItem title="Smart Copy/Paste" id="Pcq-B9-JQ5">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleSmartInsertDelete:" target="-1" id="iu4-Nn-DU4"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Smart Quotes" id="iDT-WP-ISR">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="pnI-ku-LV9"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Smart Dashes" id="QFc-JW-5qE">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="pY9-lv-EM7"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Smart Links" id="opP-BJ-vhR">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticLinkDetection:" target="-1" id="lfD-XD-tfO"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Data Detectors" id="zWu-P7-fpg">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticDataDetection:" target="-1" id="EAz-S6-L7B"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Text Replacement" id="2R8-fL-H32">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticTextReplacement:" target="-1" id="7Lb-Uz-uJ9"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Transformations" id="v1A-Fi-A5j">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Transformations" id="B0B-bK-IZ3">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Make Upper Case" id="1P0-qI-ZAM">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="uppercaseWord:" target="-1" id="cre-Qh-bSZ"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Make Lower Case" id="sK6-Xl-9uz">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="lowercaseWord:" target="-1" id="qid-xu-iAw"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Capitalize" id="zvd-g7-rwM">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="capitalizeWord:" target="-1" id="0tj-lN-nE0"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Speech" id="bsj-0j-07E">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Speech" id="r3p-Q2-qJZ">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Start Speaking" id="8Hl-RR-cUq">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="startSpeaking:" target="-1" id="Zbb-Tp-HBE"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Stop Speaking" id="SLa-Tk-XGJ">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="stopSpeaking:" target="-1" id="Oyc-KO-3qC"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
</items>
|
</items>
|
||||||
@@ -363,20 +515,19 @@ Gw
|
|||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="207" id="525"/>
|
<outlet property="delegate" destination="207" id="525"/>
|
||||||
</connections>
|
</connections>
|
||||||
<point key="canvasLocation" x="-21" y="164"/>
|
<point key="canvasLocation" x="36" y="0.0"/>
|
||||||
</menu>
|
</menu>
|
||||||
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="TextWindow" animationBehavior="default" id="216" userLabel="TextOutputWindow">
|
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="TextWindow" animationBehavior="default" id="216" userLabel="TextOutputWindow">
|
||||||
<windowStyleMask key="styleMask" titled="YES" miniaturizable="YES" resizable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" miniaturizable="YES" resizable="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<rect key="contentRect" x="297" y="408" width="580" height="420"/>
|
||||||
<rect key="contentRect" x="297" y="408" width="508" height="392"/>
|
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="878"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="878"/>
|
||||||
<value key="minSize" type="size" width="400" height="200"/>
|
<value key="minSize" type="size" width="400" height="200"/>
|
||||||
<view key="contentView" id="217">
|
<view key="contentView" id="217">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="508" height="392"/>
|
<rect key="frame" x="0.0" y="0.0" width="580" height="420"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button verticalHuggingPriority="750" id="220">
|
<button verticalHuggingPriority="750" id="220">
|
||||||
<rect key="frame" x="416" y="7" width="86" height="32"/>
|
<rect key="frame" x="488" y="7" width="86" height="32"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
<buttonCell key="cell" type="push" title="Quit" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="476">
|
<buttonCell key="cell" type="push" title="Quit" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="476">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
@@ -390,25 +541,25 @@ Gw
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<scrollView autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="226">
|
<scrollView autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" id="226">
|
||||||
<rect key="frame" x="9" y="45" width="489" height="339"/>
|
<rect key="frame" x="9" y="45" width="561" height="367"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Hk1-72-Owa">
|
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Hk1-72-Owa">
|
||||||
<rect key="frame" x="1" y="1" width="487" height="337"/>
|
<rect key="frame" x="1" y="1" width="559" height="365"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textView editable="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" usesFontPanel="YES" findStyle="panel" allowsDocumentBackgroundColorChange="YES" linkDetection="YES" id="225">
|
<textView editable="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" usesFontPanel="YES" findStyle="panel" allowsDocumentBackgroundColorChange="YES" linkDetection="YES" id="225">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="487" height="337"/>
|
<rect key="frame" x="0.0" y="0.0" width="559" height="365"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<size key="minSize" width="487" height="337"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
<size key="maxSize" width="489" height="10000000"/>
|
<size key="minSize" width="559" height="365"/>
|
||||||
<color key="insertionPointColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
<size key="maxSize" width="561" height="10000000"/>
|
||||||
|
<color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="207" id="488"/>
|
<outlet property="delegate" destination="207" id="488"/>
|
||||||
</connections>
|
</connections>
|
||||||
</textView>
|
</textView>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
|
||||||
</clipView>
|
</clipView>
|
||||||
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="483">
|
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="483">
|
||||||
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
|
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
|
||||||
@@ -424,7 +575,7 @@ Gw
|
|||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
</progressIndicator>
|
</progressIndicator>
|
||||||
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="366">
|
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="366">
|
||||||
<rect key="frame" x="43" y="17" width="357" height="17"/>
|
<rect key="frame" x="43" y="17" width="429" height="17"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="477">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="477">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -439,18 +590,17 @@ Gw
|
|||||||
</connections>
|
</connections>
|
||||||
<point key="canvasLocation" x="-478" y="370"/>
|
<point key="canvasLocation" x="-478" y="370"/>
|
||||||
</window>
|
</window>
|
||||||
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="WebViewWindow" animationBehavior="default" id="247" userLabel="WebOutputWindow">
|
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="WebViewWindow" animationBehavior="default" id="247" userLabel="WebOutputWindow">
|
||||||
<windowStyleMask key="styleMask" titled="YES" miniaturizable="YES" resizable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" miniaturizable="YES" resizable="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<rect key="contentRect" x="297" y="408" width="580" height="420"/>
|
||||||
<rect key="contentRect" x="297" y="408" width="508" height="392"/>
|
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="878"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="878"/>
|
||||||
<value key="minSize" type="size" width="400" height="200"/>
|
<value key="minSize" type="size" width="400" height="200"/>
|
||||||
<view key="contentView" id="248">
|
<view key="contentView" id="248">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="508" height="392"/>
|
<rect key="frame" x="0.0" y="0.0" width="580" height="420"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<button verticalHuggingPriority="750" id="251">
|
<button verticalHuggingPriority="750" id="251">
|
||||||
<rect key="frame" x="413" y="12" width="86" height="32"/>
|
<rect key="frame" x="485" y="6" width="86" height="32"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||||
<buttonCell key="cell" type="push" title="Quit" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" inset="2" id="478">
|
<buttonCell key="cell" type="push" title="Quit" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" inset="2" id="478">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
@@ -464,14 +614,14 @@ Gw
|
|||||||
</connections>
|
</connections>
|
||||||
</button>
|
</button>
|
||||||
<box boxType="oldStyle" borderType="line" titlePosition="noTitle" id="257">
|
<box boxType="oldStyle" borderType="line" titlePosition="noTitle" id="257">
|
||||||
<rect key="frame" x="8" y="51" width="491" height="333"/>
|
<rect key="frame" x="8" y="45" width="563" height="367"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<view key="contentView" id="X4z-hY-QR7">
|
<view key="contentView" id="X4z-hY-QR7">
|
||||||
<rect key="frame" x="1" y="1" width="489" height="331"/>
|
<rect key="frame" x="1" y="1" width="561" height="365"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<webView maintainsBackForwardList="NO" id="258" customClass="STDragWebView">
|
<webView maintainsBackForwardList="NO" id="258" customClass="STDragWebView">
|
||||||
<rect key="frame" x="-1" y="0.0" width="490" height="331"/>
|
<rect key="frame" x="-1" y="0.0" width="562" height="365"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<webPreferences key="preferences" defaultFontSize="12" defaultFixedFontSize="12">
|
<webPreferences key="preferences" defaultFontSize="12" defaultFixedFontSize="12">
|
||||||
<nil key="identifier"/>
|
<nil key="identifier"/>
|
||||||
@@ -489,11 +639,11 @@ Gw
|
|||||||
</view>
|
</view>
|
||||||
</box>
|
</box>
|
||||||
<progressIndicator horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" id="277">
|
<progressIndicator horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" id="277">
|
||||||
<rect key="frame" x="16" y="21" width="16" height="16"/>
|
<rect key="frame" x="16" y="15" width="16" height="16"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
</progressIndicator>
|
</progressIndicator>
|
||||||
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="509">
|
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="509">
|
||||||
<rect key="frame" x="37" y="20" width="357" height="17"/>
|
<rect key="frame" x="37" y="14" width="429" height="17"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="510">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="510">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -507,28 +657,36 @@ Gw
|
|||||||
<outlet property="delegate" destination="207" id="375"/>
|
<outlet property="delegate" destination="207" id="375"/>
|
||||||
</connections>
|
</connections>
|
||||||
</window>
|
</window>
|
||||||
<window title="Droplet" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="DropletWindow" animationBehavior="default" id="490" userLabel="DropletWindow">
|
<window title="Droplet" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" visibleAtLaunch="NO" frameAutosaveName="DropletWindow" animationBehavior="default" id="490" userLabel="DropletWindow">
|
||||||
<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"/>
|
<rect key="contentRect" x="157" y="273" width="294" height="280"/>
|
||||||
<rect key="contentRect" x="157" y="273" width="188" height="188"/>
|
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="878"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="878"/>
|
||||||
<view key="contentView" id="491">
|
<view key="contentView" id="491">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="188" height="188"/>
|
<rect key="frame" x="0.0" y="0.0" width="294" height="280"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
|
<textField hidden="YES" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="519">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="294" height="280"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
|
<textFieldCell key="cell" enabled="NO" allowsUndo="NO" sendsActionOnEndEditing="YES" drawsBackground="YES" id="520">
|
||||||
|
<font key="font" metaFont="system"/>
|
||||||
|
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
<color key="backgroundColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
||||||
|
</textFieldCell>
|
||||||
|
</textField>
|
||||||
<box autoresizesSubviews="NO" borderType="line" titlePosition="noTitle" id="494">
|
<box autoresizesSubviews="NO" borderType="line" titlePosition="noTitle" id="494">
|
||||||
<rect key="frame" x="17" y="16" width="154" height="154"/>
|
<rect key="frame" x="17" y="16" width="260" height="246"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<view key="contentView" id="q0i-G4-K1a">
|
<view key="contentView" id="q0i-G4-K1a">
|
||||||
<rect key="frame" x="1" y="1" width="152" height="152"/>
|
<rect key="frame" x="1" y="1" width="258" height="244"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" style="spinning" id="496">
|
<progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" style="spinning" id="496">
|
||||||
<rect key="frame" x="59" y="75" width="32" height="32"/>
|
<rect key="frame" x="112" y="128" width="32" height="32"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
</progressIndicator>
|
</progressIndicator>
|
||||||
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="499">
|
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="499">
|
||||||
<rect key="frame" x="39" y="59" width="71" height="34"/>
|
<rect key="frame" x="92" y="112" width="71" height="34"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" alignment="center" title="Drop files here" id="500">
|
<textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" alignment="center" title="Drop files here" id="500">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -537,7 +695,7 @@ Gw
|
|||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="505">
|
<textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="505">
|
||||||
<rect key="frame" x="15" y="31" width="122" height="36"/>
|
<rect key="frame" x="18" y="44" width="218" height="76"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="center" id="506">
|
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="center" id="506">
|
||||||
<font key="font" metaFont="smallSystem"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
@@ -548,21 +706,12 @@ Gw
|
|||||||
</subviews>
|
</subviews>
|
||||||
</view>
|
</view>
|
||||||
</box>
|
</box>
|
||||||
<textField hidden="YES" verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="519">
|
|
||||||
<rect key="frame" x="0.0" y="0.0" width="188" height="188"/>
|
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
|
||||||
<textFieldCell key="cell" enabled="NO" allowsUndo="NO" sendsActionOnEndEditing="YES" drawsBackground="YES" id="520">
|
|
||||||
<font key="font" metaFont="system"/>
|
|
||||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</subviews>
|
</subviews>
|
||||||
</view>
|
</view>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="207" id="RFt-L5-f73"/>
|
<outlet property="delegate" destination="207" id="RFt-L5-f73"/>
|
||||||
</connections>
|
</connections>
|
||||||
<point key="canvasLocation" x="610" y="363"/>
|
<point key="canvasLocation" x="608" y="262"/>
|
||||||
</window>
|
</window>
|
||||||
</objects>
|
</objects>
|
||||||
</document>
|
</document>
|
||||||
|
|||||||
BIN
MainMenu.nib/keyedobjects.nib
generated
BIN
MainMenu.nib/keyedobjects.nib
generated
Binary file not shown.
34
README.md
Normal file
34
README.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<img align="left" src="http://www.profiteroles.org/assets/yuba.png" style="float: left; margin-right: 30px;" width="120">
|
||||||
|
|
||||||
|
# Yuba
|
||||||
|
|
||||||
|
**Yuba** generates a web-browsable SQLite database from an HFS+ filesystem. Its client application gathers forensic-quality data about a locally attached disk, properly interpreting bundles, reading Spotlight data, Finder flags, labels, and other contextual information. It can generate hashes, thumbnails, and gather 3rd party metadata with exiftool and mediainfo. Yuba's filesystem catalogues are comprehensive, lightweight, optimized for massive (1 million+) trees, and reflect incremental changes to contents and metadata. A server-side PHP script is provided, which allows familiar, Finder-style browsing of a catalogue.
|
||||||
|
|
||||||
|
* **⇩ [Download Yuba 0.7.11](http://www.profiteroles.org/downloads/Yuba_0.7.11.zip)**
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
* Recursive directory scanning
|
||||||
|
* Properly interprets bundles
|
||||||
|
* Uses native macOS methods
|
||||||
|
* Spotlight metadata and icons
|
||||||
|
* Caches assets for re-scans
|
||||||
|
* Optional file hashes
|
||||||
|
* Tested with large filesystems
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|
<img src="http://www.profiteroles.org/assets/yuba_progress.png" width="600">
|
||||||
|
<img src="http://www.profiteroles.org/assets/yuba_browser_1.png" width="1100">
|
||||||
|
<img src="http://www.profiteroles.org/assets/yuba_browser_2.png" width="1100">
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
Running Yuba requires disabling Gatekeeper by running `sudo spctl --master-disable` in the Terminal.
|
||||||
|
|
||||||
|
## Building from source
|
||||||
|
|
||||||
|
Building Minat requires Platypus and Pashua
|
||||||
|
|
||||||
|
* https://github.com/sveinbjornt/Platypus
|
||||||
|
* https://github.com/BlueM/Pashua
|
||||||
96
Yuba.php
96
Yuba.php
@@ -3,7 +3,7 @@
|
|||||||
// Yuba
|
// Yuba
|
||||||
// //
|
// //
|
||||||
//////////////////////////////////////////
|
//////////////////////////////////////////
|
||||||
$version = "0.7.10.3";
|
$version = "0.7.11.5";
|
||||||
|
|
||||||
ini_set('memory_limit', '10240M');
|
ini_set('memory_limit', '10240M');
|
||||||
date_default_timezone_set("America/Los_Angeles");
|
date_default_timezone_set("America/Los_Angeles");
|
||||||
@@ -11,23 +11,22 @@ date_default_timezone_set("America/Los_Angeles");
|
|||||||
// Includes & Prefs
|
// Includes & Prefs
|
||||||
//////////////////////////////////////////
|
//////////////////////////////////////////
|
||||||
|
|
||||||
|
$p = unserialize(file_get_contents("prefs.php"));
|
||||||
|
|
||||||
require("functions.php");
|
require("functions.php");
|
||||||
require("filetypes.php");
|
require("filetypes.php");
|
||||||
|
|
||||||
$wopt_noprofile = 0;
|
|
||||||
$wopt_steps = 10;
|
$wopt_steps = 10;
|
||||||
$wopt_currstep = 1;
|
$wopt_currstep = 1;
|
||||||
|
|
||||||
$parser = new plistParser();
|
$parser = new plistParser();
|
||||||
|
|
||||||
$p = unserialize(file_get_contents("prefs.php"));
|
|
||||||
|
|
||||||
// Path & application variables
|
// Path & application variables
|
||||||
//////////////////////////////////////////
|
//////////////////////////////////////////
|
||||||
|
|
||||||
$stamp = date("Y-m-d_H-i-s", time());
|
$stamp = date("Y-m-d_H-i-s", time());
|
||||||
|
|
||||||
if (!isset($argv[1])) { echo "Input error"; die; }
|
if (!isset($argv[1])) { echo "No input"; die; }
|
||||||
$zpath = realpath(@$argv[1]);
|
$zpath = realpath(@$argv[1]);
|
||||||
if (@$argv[2]) { $bdest = realpath($argv[2]); } else { $bdest = realpath($p['bdest']); }
|
if (@$argv[2]) { $bdest = realpath($argv[2]); } else { $bdest = realpath($p['bdest']); }
|
||||||
if (!is_dir($zpath) | !is_dir($bdest)) { echo "Filepath error"; die; }
|
if (!is_dir($zpath) | !is_dir($bdest)) { echo "Filepath error"; die; }
|
||||||
@@ -41,38 +40,6 @@ if (!is_dir($bpath)) { mkdir($bpath); }
|
|||||||
if (!is_dir($bpath."/thumbs")) { mkdir($bpath."/thumbs"); }
|
if (!is_dir($bpath."/thumbs")) { mkdir($bpath."/thumbs"); }
|
||||||
if (!is_dir($bpath."/contents")) { mkdir($bpath."/contents"); }
|
if (!is_dir($bpath."/contents")) { mkdir($bpath."/contents"); }
|
||||||
|
|
||||||
// Treat these directories as files
|
|
||||||
$p['bundles'] = array( "app",
|
|
||||||
"bundle",
|
|
||||||
"sparsebundle",
|
|
||||||
"photoslibrary",
|
|
||||||
"aplibrary",
|
|
||||||
"apvault",
|
|
||||||
"abbu",
|
|
||||||
"calendar",
|
|
||||||
"framework",
|
|
||||||
"plugin",
|
|
||||||
"kext",
|
|
||||||
"rtfd"
|
|
||||||
);
|
|
||||||
|
|
||||||
foreach ($p['bundles'] as $bundle) {
|
|
||||||
$p['nodescend'][] = "*.".$bundle;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ignore matching files and directories
|
|
||||||
$p['ignore'] = array( ".DS_Store",
|
|
||||||
".Trashes",
|
|
||||||
".DocumentRevisions-V100",
|
|
||||||
".Spotlight-V100",
|
|
||||||
".TemporaryItems",
|
|
||||||
".apdisk",
|
|
||||||
".com.apple.timemachine.donotpresent",
|
|
||||||
".fseventsd",
|
|
||||||
".metadata-never-index",
|
|
||||||
".neofinder.abemeda.volinfo.xml"
|
|
||||||
);
|
|
||||||
|
|
||||||
// Metadata tools
|
// Metadata tools
|
||||||
$bin_gfi = __DIR__."/bin/GetFileInfo";
|
$bin_gfi = __DIR__."/bin/GetFileInfo";
|
||||||
$bin_mediainfo = __DIR__."/bin/mediainfo";
|
$bin_mediainfo = __DIR__."/bin/mediainfo";
|
||||||
@@ -187,11 +154,11 @@ if ($type == "Disk image") {
|
|||||||
$image_file = false;
|
$image_file = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($wopt_noprofile) {
|
if ($p['profile']) {
|
||||||
$profile = "disabled";
|
|
||||||
} else {
|
|
||||||
echo msg("system_profiler");
|
echo msg("system_profiler");
|
||||||
$profile = shell_exec("system_profiler SPHardwareDataType SPStorageDataType SPThunderboltDataType SPUSBDataType 2>&1");
|
$profile = shell_exec("system_profiler SPHardwareDataType SPStorageDataType SPThunderboltDataType SPUSBDataType 2>&1");
|
||||||
|
} else {
|
||||||
|
$profile = "disabled";
|
||||||
}
|
}
|
||||||
$qlmanage = shell_exec("qlmanage -m 2>&1");
|
$qlmanage = shell_exec("qlmanage -m 2>&1");
|
||||||
$sysvers = shell_exec("sw_vers 2>&1");
|
$sysvers = shell_exec("sw_vers 2>&1");
|
||||||
@@ -460,10 +427,7 @@ echo ProgressBar::finish();
|
|||||||
// Thow permissions error
|
// Thow permissions error
|
||||||
|
|
||||||
if (count($noread)) {
|
if (count($noread)) {
|
||||||
echo msg("Current user (".posix_getuid().") does not have read access to the following files:");
|
echo msg("Current user (".posix_getuid().") does not have read access to the following files:\n").implode("\n",$noread);
|
||||||
foreach ($noread as $file) {
|
|
||||||
echo $file."\n";
|
|
||||||
}
|
|
||||||
if ($p['readability']) {
|
if ($p['readability']) {
|
||||||
echo msg("Exiting...");
|
echo msg("Exiting...");
|
||||||
die;
|
die;
|
||||||
@@ -546,7 +510,7 @@ if ($p['thumbs']) {
|
|||||||
$tfile = $tpath."/".$fid.".jpg";
|
$tfile = $tpath."/".$fid.".jpg";
|
||||||
|
|
||||||
// HACK for ql-thumbnail bug
|
// HACK for ql-thumbnail bug
|
||||||
$t_skip = array("emlx");
|
$t_skip = array("emlx","flac");
|
||||||
if (count($t_skip) && in_array($ext, $t_skip)) {
|
if (count($t_skip) && in_array($ext, $t_skip)) {
|
||||||
echo ProgressBar::next("Skipping ".shortlabel($pathname));
|
echo ProgressBar::next("Skipping ".shortlabel($pathname));
|
||||||
continue;
|
continue;
|
||||||
@@ -571,13 +535,13 @@ if ($p['thumbs']) {
|
|||||||
|
|
||||||
// first try to make a thumb with external tools
|
// first try to make a thumb with external tools
|
||||||
$cmd = null;
|
$cmd = null;
|
||||||
if (in_array($ext, $t_files['sips'])) {
|
if (in_array($ext, $p['t_files']['sips'])) {
|
||||||
//$cmd = $bin_tv." ".$shellpath." -o ".$tfile."[Q=90,optimize_coding] --size=".$p['thumb_size'];
|
//$cmd = $bin_tv." ".$shellpath." -o ".$tfile."[Q=90,optimize_coding] --size=".$p['thumb_size'];
|
||||||
$cmd = "sips -s format jpeg -s formatOptions 80 --resampleHeightWidthMax ".$p['thumb_size']." ".$shellpath." --out ".$tfile;
|
$cmd = "sips -s format jpeg -s formatOptions 80 --resampleHeightWidthMax ".$p['thumb_size']." ".$shellpath." --out ".$tfile;
|
||||||
$stmt->BindValue(":tool","sips");
|
$stmt->BindValue(":tool","sips");
|
||||||
} elseif (in_array($ext, $t_files['ffmpeg'])) {
|
} elseif (in_array($ext, $p['t_files']['ffmpeg'])) {
|
||||||
//$cmd = $bin_tf." -i ".$shellpath." -o ".$tfile." -s ".$p['thumb_size']." -c jpg -q 8.5";
|
//$cmd = $bin_tf." -i ".$shellpath." -o ".$tfile." -s ".$p['thumb_size']." -c jpg -q 8.5";
|
||||||
$cmd = $bin_ffmpeg." -ss $(( $(".$bin_mediainfo." --Inform='Video;%Duration%' ".$shellpath.") / 10000 )) -i ".$shellpath." -vframes 1 -filter:v scale='400:-1' -q:v 3 ".$tfile;
|
$cmd = $bin_ffmpeg." -ss $(( $(".$bin_mediainfo." --Inform='Video;%Duration%' ".$shellpath." | cut -d'.' -f1) / 10000 )) -i ".$shellpath." -vframes 1 -filter:v scale='400:-1' -q:v 3 ".$tfile;
|
||||||
$stmt->BindValue(":tool","ffmpeg");
|
$stmt->BindValue(":tool","ffmpeg");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -592,7 +556,8 @@ if ($p['thumbs']) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// success, move thumb into the bundle
|
// success, move thumb into the bundle
|
||||||
if (file_exists($tfile) && @filesize($tfile)) {
|
// ignore generic music icon thumbs (7133)
|
||||||
|
if (file_exists($tfile) && @filesize($tfile) && @filesize($tfile) != 7133) {
|
||||||
$stmt->BindValue(":relative_path",substr($tfile, strlen($bpath)));
|
$stmt->BindValue(":relative_path",substr($tfile, strlen($bpath)));
|
||||||
list($width, $height) = getimagesize($tfile);
|
list($width, $height) = getimagesize($tfile);
|
||||||
$stmt->BindValue(":width",$width);
|
$stmt->BindValue(":width",$width);
|
||||||
@@ -622,7 +587,7 @@ if ($p['contents']) {
|
|||||||
$ext = pathinfo($pathname,PATHINFO_EXTENSION);
|
$ext = pathinfo($pathname,PATHINFO_EXTENSION);
|
||||||
$cpath = $bpath."/contents/".substr($fid, 0, 2);
|
$cpath = $bpath."/contents/".substr($fid, 0, 2);
|
||||||
$cfile = $cpath."/".$fid.".zip";
|
$cfile = $cpath."/".$fid.".zip";
|
||||||
if (in_array($ext, $c_files)) {
|
if (in_array($ext, $p['c_files'])) {
|
||||||
if (!is_dir($cpath)) { mkdir($cpath); }
|
if (!is_dir($cpath)) { mkdir($cpath); }
|
||||||
if (!file_exists($cfile) && filesize($pathname) < 25000) {
|
if (!file_exists($cfile) && filesize($pathname) < 25000) {
|
||||||
|
|
||||||
@@ -663,12 +628,12 @@ if ($p['meta']) {
|
|||||||
$ext = pathinfo($pathname,PATHINFO_EXTENSION);
|
$ext = pathinfo($pathname,PATHINFO_EXTENSION);
|
||||||
$found = 1;
|
$found = 1;
|
||||||
|
|
||||||
if (!in_array($ext, $e_files) && !in_array($ext, $m_files)) {
|
if (!in_array($ext, $p['e_files']) && !in_array($ext, $p['m_files'])) {
|
||||||
echo ProgressBar::next("Not a media file: ".shortlabel($pathname));
|
echo ProgressBar::next("Not a media file: ".shortlabel($pathname));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($ext, $e_files)) {
|
if (in_array($ext, $p['e_files'])) {
|
||||||
$check = $dbp->query("SELECT EXISTS(SELECT 1 FROM exiftool WHERE fid='".$fid."')")->fetch()[0];
|
$check = $dbp->query("SELECT EXISTS(SELECT 1 FROM exiftool WHERE fid='".$fid."')")->fetch()[0];
|
||||||
if (!$check) {
|
if (!$check) {
|
||||||
$arrstring = shell_exec($bin_exiftool." -php ".$shellpath);
|
$arrstring = shell_exec($bin_exiftool." -php ".$shellpath);
|
||||||
@@ -685,13 +650,14 @@ if ($p['meta']) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($ext, $m_files)) {
|
if (in_array($ext, $p['m_files'])) {
|
||||||
$check = $dbp->query("SELECT EXISTS(SELECT 1 FROM mediainfo WHERE fid='".$fid."')")->fetch()[0];
|
$check = $dbp->query("SELECT EXISTS(SELECT 1 FROM mediainfo WHERE fid='".$fid."')")->fetch()[0];
|
||||||
if (!$check) {
|
if (!$check) {
|
||||||
$stmt = $dbp->prepare("INSERT INTO mediainfo VALUES (:fid, :info)");
|
$stmt = $dbp->prepare("INSERT INTO mediainfo VALUES (:fid, :info)");
|
||||||
$stmt->BindValue(":fid",$fid);
|
$stmt->BindValue(":fid",$fid);
|
||||||
//$stmt->BindValue(":info",serialize(parseMediaInfo(shell_exec($bin_mediainfo." --Output=OLDXML ".$shellpath." 2>&1"))));
|
//$stmt->BindValue(":info",serialize(parseMediaInfo(shell_exec($bin_mediainfo." --Output=OLDXML ".$shellpath." 2>&1"))));
|
||||||
$stmt->BindValue(":info",shell_exec($bin_mediainfo." --Output=OLDXML ".$shellpath." 2>&1"));
|
//$stmt->BindValue(":info",shell_exec($bin_mediainfo." --Output=OLDXML ".$shellpath." 2>&1"));
|
||||||
|
$stmt->BindValue(":info",shell_exec($bin_mediainfo." --Output=JSON ".$shellpath." 2>&1"));
|
||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
$found = 0;
|
$found = 0;
|
||||||
}
|
}
|
||||||
@@ -1006,7 +972,9 @@ foreach ($files as $splFileInfo) {
|
|||||||
$yes_contents = $dbp->query("SELECT relative_path FROM contents WHERE fid='".$fid."'")->fetch()[0];
|
$yes_contents = $dbp->query("SELECT relative_path FROM contents WHERE fid='".$fid."'")->fetch()[0];
|
||||||
$stmt->BindValue(":contents_filename",$yes_contents);
|
$stmt->BindValue(":contents_filename",$yes_contents);
|
||||||
|
|
||||||
$fetch_thumb = $dbp->query("SELECT * FROM thumbs WHERE fid='".$fid."'")->fetch();
|
if (!in_array($extension, $t_skip)) {
|
||||||
|
$fetch_thumb = $dbp->query("SELECT * FROM thumbs WHERE fid='".$fid."'")->fetch();
|
||||||
|
}
|
||||||
if (@$fetch_thumb['relative_path']) {
|
if (@$fetch_thumb['relative_path']) {
|
||||||
$stmt->BindValue(":thumb_filename",$fetch_thumb['relative_path']);
|
$stmt->BindValue(":thumb_filename",$fetch_thumb['relative_path']);
|
||||||
$stmt->BindValue(":thumb_width",$fetch_thumb['width']);
|
$stmt->BindValue(":thumb_width",$fetch_thumb['width']);
|
||||||
@@ -1137,14 +1105,18 @@ while ($row_a = $loop->fetch()) {
|
|||||||
if (isset($row_a['has_mediainfo'])) {
|
if (isset($row_a['has_mediainfo'])) {
|
||||||
|
|
||||||
$row_d = $dbp->query("SELECT * FROM mediainfo WHERE (rowid='".$row_a['has_mediainfo']."')")->fetch();
|
$row_d = $dbp->query("SELECT * FROM mediainfo WHERE (rowid='".$row_a['has_mediainfo']."')")->fetch();
|
||||||
$decoded = @json_decode(json_encode(simplexml_load_string($row_d['info'])),true);
|
if (substr($row_d['info'],0,5) == "<?xml") {
|
||||||
$m['m'] = $decoded['File']['track'][0];
|
$decoded = @json_decode(json_encode(simplexml_load_string($row_d['info'])),true);
|
||||||
|
$m_base = $decoded['File']['track'];
|
||||||
|
$m['m'] = $decoded['File']['track'][0];
|
||||||
|
} else {
|
||||||
|
$decoded = @json_decode($row_d['info'],true);
|
||||||
|
$m_base = $decoded['media']['track'];
|
||||||
|
$m['m'] = $decoded['media']['track'][0];
|
||||||
|
}
|
||||||
|
|
||||||
//custom values
|
$m['m']['SkimTrackCount'] = @count($m_base);
|
||||||
|
foreach (@$m_base as $track) {
|
||||||
$m['m']['SkimTrackCount'] = @count($decoded['File']['track']);
|
|
||||||
|
|
||||||
foreach (@$decoded['File']['track'] as $track) {
|
|
||||||
if (!@$m['m']['SkimDims'] && @$track['Width'] && @$track['Height']) {
|
if (!@$m['m']['SkimDims'] && @$track['Width'] && @$track['Height']) {
|
||||||
$m['m']['SkimDims'] = sanitize($track['Width'],"i").$display_delimiter.sanitize($track['Height'],"i");
|
$m['m']['SkimDims'] = sanitize($track['Width'],"i").$display_delimiter.sanitize($track['Height'],"i");
|
||||||
}
|
}
|
||||||
|
|||||||
0
YubaPrefs.php
Normal file
0
YubaPrefs.php
Normal file
277
filetypes.php
277
filetypes.php
@@ -1,37 +1,63 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
// Filetypes
|
// Filetypes
|
||||||
// 0.7.10.3
|
// 0.7.11.5
|
||||||
//////////////////////////////////////////
|
//////////////////////////////////////////
|
||||||
|
|
||||||
$c_files = array( "txt",
|
$p['bundles'] = array( "app",
|
||||||
"log",
|
"bundle",
|
||||||
"csv",
|
"sparsebundle",
|
||||||
"webloc",
|
"photoslibrary",
|
||||||
"svg",
|
"aplibrary",
|
||||||
"rtf",
|
"apvault",
|
||||||
"rtfd",
|
"abbu",
|
||||||
"doc",
|
"calendar",
|
||||||
"docx" );
|
"framework",
|
||||||
|
"plugin",
|
||||||
|
"kext",
|
||||||
|
"rtfd"
|
||||||
|
);
|
||||||
|
|
||||||
$t_files['ffmpeg'] = array( "mkv",
|
$p['ignore'] = array( ".DS_Store",
|
||||||
"avi",
|
".Trashes",
|
||||||
"mpeg",
|
".DocumentRevisions-V100",
|
||||||
"mpg",
|
".Spotlight-V100",
|
||||||
"vob",
|
".TemporaryItems",
|
||||||
"mp4",
|
".apdisk",
|
||||||
"m4v",
|
".com.apple.timemachine.donotpresent",
|
||||||
"m2v",
|
".fseventsd",
|
||||||
"m2ts",
|
".metadata-never-index",
|
||||||
"asf",
|
".neofinder.abemeda.volinfo.xml"
|
||||||
"wmv",
|
);
|
||||||
"rm",
|
|
||||||
"divx",
|
|
||||||
"fla",
|
|
||||||
"flv",
|
|
||||||
"webm" );
|
|
||||||
|
|
||||||
$t_files['sips'] = array( "jpg",
|
$p['c_files'] = array( "txt",
|
||||||
|
"log",
|
||||||
|
"csv",
|
||||||
|
"webloc",
|
||||||
|
"svg",
|
||||||
|
"rtf",
|
||||||
|
"rtfd",
|
||||||
|
"doc",
|
||||||
|
"docx" );
|
||||||
|
|
||||||
|
$p['t_files']['ffmpeg'] = array( "mkv",
|
||||||
|
"avi",
|
||||||
|
"mpeg",
|
||||||
|
"mpg",
|
||||||
|
"vob",
|
||||||
|
"mp4",
|
||||||
|
"m4v",
|
||||||
|
"m2v",
|
||||||
|
"m2ts",
|
||||||
|
"asf",
|
||||||
|
"wmv",
|
||||||
|
"rm",
|
||||||
|
"divx",
|
||||||
|
"fla",
|
||||||
|
"flv",
|
||||||
|
"webm" );
|
||||||
|
|
||||||
|
$p['t_files']['sips'] = array( "jpg",
|
||||||
"jpeg",
|
"jpeg",
|
||||||
"tif",
|
"tif",
|
||||||
"tiff",
|
"tiff",
|
||||||
@@ -40,105 +66,106 @@ $t_files['sips'] = array( "jpg",
|
|||||||
"png",
|
"png",
|
||||||
"heic" );
|
"heic" );
|
||||||
|
|
||||||
$m_files = array( "mkv",
|
$p['m_files'] = array( "mkv",
|
||||||
"ogg",
|
"ogg",
|
||||||
"avi",
|
"avi",
|
||||||
"wav",
|
"wav",
|
||||||
"mpeg",
|
"mpeg",
|
||||||
"mpg",
|
"mpg",
|
||||||
"vob",
|
"vob",
|
||||||
"mp4",
|
"mp4",
|
||||||
"m2v",
|
"m2v",
|
||||||
"mp3",
|
"mp3",
|
||||||
"asf",
|
"asf",
|
||||||
"wma",
|
"wma",
|
||||||
"wmv",
|
"wmv",
|
||||||
"qt",
|
"qt",
|
||||||
"mov",
|
"mov",
|
||||||
"rm",
|
"rm",
|
||||||
"ifo",
|
"ifo",
|
||||||
"ac3",
|
"ac3",
|
||||||
"dts",
|
"dts",
|
||||||
"aac",
|
"aac",
|
||||||
"ape",
|
"ape",
|
||||||
"flac",
|
"flac",
|
||||||
"aiff",
|
"aiff",
|
||||||
"m2ts" );
|
"m2ts" );
|
||||||
|
|
||||||
$e_files = array( "ai",
|
$p['e_files'] = array( "ai",
|
||||||
"aiff",
|
"aiff",
|
||||||
"ape",
|
"ape",
|
||||||
"asf",
|
"asf",
|
||||||
"avi",
|
"avi",
|
||||||
"bmp",
|
"bmp",
|
||||||
"divx",
|
"divx",
|
||||||
"dng",
|
"dng",
|
||||||
"doc",
|
"doc",
|
||||||
"docx",
|
"docx",
|
||||||
"eps",
|
"eps",
|
||||||
"epub",
|
"epub",
|
||||||
"exe",
|
"exe",
|
||||||
"exif",
|
"exif",
|
||||||
"fla",
|
"fla",
|
||||||
"flac",
|
"flac",
|
||||||
"flv",
|
"flv",
|
||||||
"gif",
|
"gif",
|
||||||
"heic",
|
"heic",
|
||||||
"icc",
|
"icc",
|
||||||
"iso",
|
"iso",
|
||||||
"jpg",
|
"jpg",
|
||||||
"jpeg",
|
"jpeg",
|
||||||
"m2ts",
|
"m2ts",
|
||||||
"m4a",
|
"m4a",
|
||||||
"m4b",
|
"m4b",
|
||||||
"m4v",
|
"m4v",
|
||||||
"mkv",
|
"mkv",
|
||||||
"mobi",
|
"mobi",
|
||||||
"azw",
|
"azw",
|
||||||
"azw3",
|
"azw3",
|
||||||
"mov",
|
"mov",
|
||||||
"qt",
|
"qt",
|
||||||
"mp3",
|
"mp3",
|
||||||
"mp4",
|
"mp4",
|
||||||
"mpeg",
|
"mpeg",
|
||||||
"mpg",
|
"mpg",
|
||||||
"m2v",
|
"m2v",
|
||||||
"nef",
|
"nef",
|
||||||
"numbers",
|
"numbers",
|
||||||
"ogg",
|
"ogg",
|
||||||
"pages",
|
"pages",
|
||||||
"pdf",
|
"pdf",
|
||||||
"pict",
|
"pict",
|
||||||
"png",
|
"png",
|
||||||
"ppm",
|
"ppm",
|
||||||
"ppt",
|
"ppt",
|
||||||
"psd",
|
"psd",
|
||||||
"psb",
|
"psb",
|
||||||
"qif",
|
"qif",
|
||||||
"raw",
|
"raw",
|
||||||
"rtf",
|
"rtf",
|
||||||
"sr2",
|
"sr2",
|
||||||
"srf",
|
"srf",
|
||||||
"svg",
|
"svg",
|
||||||
"swf",
|
"swf",
|
||||||
"tiff",
|
"tiff",
|
||||||
"tif",
|
"tif",
|
||||||
"torrent",
|
"torrent",
|
||||||
"vcf",
|
"vcf",
|
||||||
"vob",
|
"vob",
|
||||||
"wav",
|
"wav",
|
||||||
"webm",
|
"webm",
|
||||||
"wma",
|
"wma",
|
||||||
"wmv",
|
"wmv",
|
||||||
"xls",
|
"xls",
|
||||||
"xlsx",
|
"xlsx",
|
||||||
"xmp",
|
"xmp",
|
||||||
"zip" );
|
"zip" );
|
||||||
|
|
||||||
foreach ($c_files as $ext) { $c_files[] = strtoupper($ext); }
|
foreach ($p['bundles'] as $bundle) { $p['nodescend'][] = "*.".$bundle; }
|
||||||
foreach ($e_files as $ext) { $e_files[] = strtoupper($ext); }
|
foreach ($p['c_files'] as $ext) { $p['c_files'][] = strtoupper($ext); }
|
||||||
foreach ($m_files as $ext) { $m_files[] = strtoupper($ext); }
|
foreach ($p['e_files'] as $ext) { $p['e_files'][] = strtoupper($ext); }
|
||||||
foreach ($t_files['ffmpeg'] as $ext) { $t_files['ffmpeg'][] = strtoupper($ext); }
|
foreach ($p['m_files'] as $ext) { $p['m_files'][] = strtoupper($ext); }
|
||||||
foreach ($t_files['sips'] as $ext) { $t_files['sips'][] = strtoupper($ext); }
|
foreach ($p['t_files']['ffmpeg'] as $ext) { $p['t_files']['ffmpeg'][] = strtoupper($ext); }
|
||||||
|
foreach ($p['t_files']['sips'] as $ext) { $p['t_files']['sips'][] = strtoupper($ext); }
|
||||||
|
|
||||||
?>
|
?>
|
||||||
@@ -59,7 +59,7 @@ class ProgressBar {
|
|||||||
global $wopt_currstep;
|
global $wopt_currstep;
|
||||||
$wopt_currstep++;
|
$wopt_currstep++;
|
||||||
self::$done = 0;
|
self::$done = 0;
|
||||||
return "\n";
|
return "\nREFRESH\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -67,17 +67,6 @@ class ProgressBar {
|
|||||||
// Functions
|
// Functions
|
||||||
//////////////////////////////////////////
|
//////////////////////////////////////////
|
||||||
|
|
||||||
/*
|
|
||||||
function getParents($zpath, $pathname) {
|
|
||||||
$path = dirname($pathname);
|
|
||||||
$parts = explode("/",trim(substr($path,strlen(basename($zpath))),"/"));
|
|
||||||
foreach ($parts as $index => $part) {
|
|
||||||
$parents[] = array($part, md5($zpath."/".implode("/",array_slice($parts, 0, $index+1))));
|
|
||||||
}
|
|
||||||
return $parents;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
function msg($string) {
|
function msg($string) {
|
||||||
global $messages_log_file;
|
global $messages_log_file;
|
||||||
$logstring = "[".date('Y-m-d h:i:s')."] ".$string."\n";
|
$logstring = "[".date('Y-m-d h:i:s')."] ".$string."\n";
|
||||||
@@ -185,7 +174,7 @@ class plistParser extends XMLReader {
|
|||||||
case 'false': return false; break;
|
case 'false': return false; break;
|
||||||
case 'array': return $this->parse_array(); break;
|
case 'array': return $this->parse_array(); break;
|
||||||
case 'dict': return $this->parse_dict(); break;
|
case 'dict': return $this->parse_dict(); break;
|
||||||
// why the fuck cant this plist parser handle the plist generated from an hdiutil list with no dimgs attached?
|
// why the can't this plist parser handle the plist generated from an hdiutil list with no dimgs attached?
|
||||||
//default: throw new Exception(sprintf("Not a valid plist. %s is not a valid type", $this->name), 4);
|
//default: throw new Exception(sprintf("Not a valid plist. %s is not a valid type", $this->name), 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
version.txt
Executable file
1
version.txt
Executable file
@@ -0,0 +1 @@
|
|||||||
|
0.7.11.5
|
||||||
53
web/rtc.php
53
web/rtc.php
@@ -4,14 +4,18 @@
|
|||||||
// Yuba RTC Browser
|
// Yuba RTC Browser
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
$browser_version = "0.7.10.3";
|
$browser_version = "0.7.10.5";
|
||||||
|
|
||||||
require "togggle.php";
|
require "togggle.php";
|
||||||
require "lib/debug.php";
|
require "lib/ref/ref.php";
|
||||||
|
|
||||||
|
ref::config('expLvl', 1);
|
||||||
|
ref::config('validHtml', TRUE);
|
||||||
|
|
||||||
$db_dir = "data/skim";
|
$db_dir = "data/skim";
|
||||||
$icon_size = 96;
|
$icon_size = 96;
|
||||||
$pad = 40;
|
$pad = 40;
|
||||||
|
$overlay_exts = array("txt","php","inc","sh","md","json","cmd");
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
@@ -22,6 +26,9 @@ $pad = 40;
|
|||||||
|
|
||||||
html { font-family: Helvetica; word-wrap: break-word; }
|
html { font-family: Helvetica; word-wrap: break-word; }
|
||||||
|
|
||||||
|
table.file td { width: 33%; }
|
||||||
|
table.dir td:last-of-type { width: 22%; }
|
||||||
|
|
||||||
div#exectime { position: absolute; right: 8px; top: 8px; }
|
div#exectime { position: absolute; right: 8px; top: 8px; }
|
||||||
|
|
||||||
div.container { display: flex; flex-flow: row wrap; justify-content: center; }
|
div.container { display: flex; flex-flow: row wrap; justify-content: center; }
|
||||||
@@ -61,7 +68,11 @@ div.size { color: grey; margin-top: 3px; }
|
|||||||
img#thumb { padding: 6px; border: 1px solid gainsboro; }
|
img#thumb { padding: 6px; border: 1px solid gainsboro; }
|
||||||
img#item { float: left; margin-right: 10px; width: 32px; height: 32px; }
|
img#item { float: left; margin-right: 10px; width: 32px; height: 32px; }
|
||||||
img { margin-bottom: 8px; }
|
img { margin-bottom: 8px; }
|
||||||
|
img#thumb.overlay { border: 0px !important;
|
||||||
|
padding: 6px !important;
|
||||||
|
-webkit-mask-image: url('/icons/mask.png');
|
||||||
|
-webkit-mask-size: 100%;
|
||||||
|
outline: 1px solid black; }
|
||||||
div.fileinfo { font-size: 12px; }
|
div.fileinfo { font-size: 12px; }
|
||||||
div.fileinfo span.title { display: table-cell; font-weight: bold; width: 200px; }
|
div.fileinfo span.title { display: table-cell; font-weight: bold; width: 200px; }
|
||||||
div.fileinfo span.value { display: table-cell; }
|
div.fileinfo span.value { display: table-cell; }
|
||||||
@@ -76,10 +87,12 @@ div.dblist { display: none; }
|
|||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<script src="/lib/ref/ref.js"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/4.1.5/lazysizes.min.js"></script>
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/4.1.5/lazysizes.min.js"></script>
|
||||||
|
|
||||||
|
<link type="text/css" rel="stylesheet" href="/lib/ref/ref.css">
|
||||||
<link type="text/css" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css">
|
<link type="text/css" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css">
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
@@ -410,10 +423,14 @@ if ($db_file) {
|
|||||||
$skim_version = $dbo->query("SELECT version FROM _skim")->fetch()['version'];
|
$skim_version = $dbo->query("SELECT version FROM _skim")->fetch()['version'];
|
||||||
$spotlight_status = $dbo->query("SELECT mdutil FROM _skim")->fetch()['mdutil'];
|
$spotlight_status = $dbo->query("SELECT mdutil FROM _skim")->fetch()['mdutil'];
|
||||||
|
|
||||||
echo "<table><tr>";
|
$row_a = $dbo->query("SELECT rowid, * FROM files WHERE (pid='".$pid."')")->fetch();
|
||||||
|
if (!$row_a) { // this file doesn't exist in this version of the db
|
||||||
|
echo "<meta http-equiv='refresh' content='0; URL=".$_SERVER['REQUEST_URI']."&pid=' />";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "<table class='file'><tr>";
|
||||||
|
|
||||||
echo "<td valign='top'>";
|
echo "<td valign='top'>";
|
||||||
$row_a = $dbo->query("SELECT rowid, * FROM files WHERE (pid='".$pid."')")->fetch();
|
|
||||||
if (is_serial($row_a['stat'])) {
|
if (is_serial($row_a['stat'])) {
|
||||||
$row_a['stat'] = unserialize($row_a['stat']);
|
$row_a['stat'] = unserialize($row_a['stat']);
|
||||||
}
|
}
|
||||||
@@ -530,19 +547,22 @@ if ($db_file) {
|
|||||||
|
|
||||||
echo "<td valign='top'>";
|
echo "<td valign='top'>";
|
||||||
|
|
||||||
debug(array($row_a),"file");
|
r($row_a);
|
||||||
|
|
||||||
if ($row_b['spotlight']) {
|
if ($row_b['spotlight']) {
|
||||||
debug(array($row_b),"mdls");
|
r($row_b);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "</td><td valign='top'>";
|
echo "</td><td valign='top'>";
|
||||||
|
|
||||||
if ($row_c) {
|
if ($row_c) {
|
||||||
debug(array(unserialize($row_c['tags'])),"exiftool");
|
r(unserialize($row_c['tags']));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ref::config('expLvl', 2);
|
||||||
|
|
||||||
if ($row_d) {
|
if ($row_d) {
|
||||||
debug(array(json_decode(json_encode(simplexml_load_string($row_d['info'])))),"mediainfo");
|
r(json_decode(json_encode(simplexml_load_string(utf8_encode($row_d['info']))))->File->track);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "</td>";
|
echo "</td>";
|
||||||
@@ -563,7 +583,7 @@ if ($db_file) {
|
|||||||
|
|
||||||
echo "<div class='controls'><a href='#' class='info'>info</a></div>";
|
echo "<div class='controls'><a href='#' class='info'>info</a></div>";
|
||||||
|
|
||||||
echo "<table><tr><td valign='top'>";
|
echo "<table class='dir'><tr><td valign='top'>";
|
||||||
echo "<div class='container'>";
|
echo "<div class='container'>";
|
||||||
|
|
||||||
$spotlight_status = $dbo->query("SELECT mdutil FROM _skim")->fetch()['mdutil'];
|
$spotlight_status = $dbo->query("SELECT mdutil FROM _skim")->fetch()['mdutil'];
|
||||||
@@ -589,7 +609,15 @@ if ($db_file) {
|
|||||||
$visibility = "unhidden";
|
$visibility = "unhidden";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//if (in_array($item['Extension'],$overlay_exts) && $item['thumb_filename']) {
|
||||||
|
//
|
||||||
|
//$realfile = dirname($db_file).$item['thumb_filename'];
|
||||||
|
//$icon = "<img id='thumb' class='overlay' src='".$realfile."' width='".($icon_size*.8)."' height='".$icon_size."' data-width='".($icon_size*.8)."' data-height='".$icon_size."'>";
|
||||||
|
|
||||||
|
//} elseif ($item['thumb_filename']) {
|
||||||
|
|
||||||
if ($item['thumb_filename']) {
|
if ($item['thumb_filename']) {
|
||||||
|
|
||||||
$aspect = $item['thumb_width']/$item['thumb_height'];
|
$aspect = $item['thumb_width']/$item['thumb_height'];
|
||||||
if ($aspect > 1) {
|
if ($aspect > 1) {
|
||||||
$width = $icon_size;
|
$width = $icon_size;
|
||||||
@@ -604,6 +632,7 @@ if ($db_file) {
|
|||||||
$icon = "<img src='/icons/directory.png' width='".$icon_size."' height='".$icon_size."' data-width='".$icon_size."' data-height='".$icon_size."'>";
|
$icon = "<img src='/icons/directory.png' width='".$icon_size."' height='".$icon_size."' data-width='".$icon_size."' data-height='".$icon_size."'>";
|
||||||
} else {
|
} else {
|
||||||
$icon = "<img src='".findicon($item['Filename'])."' width='".$icon_size."' height='".$icon_size."' data-width='".$icon_size."' data-height='".$icon_size."'>";
|
$icon = "<img src='".findicon($item['Filename'])."' width='".$icon_size."' height='".$icon_size."' data-width='".$icon_size."' data-height='".$icon_size."'>";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "\n<a class='".$visibility."' href='?db=".$db_file."&pid=".$item['pid']."'>".$icon."</a>";
|
echo "\n<a class='".$visibility."' href='?db=".$db_file."&pid=".$item['pid']."'>".$icon."</a>";
|
||||||
@@ -638,11 +667,11 @@ if ($db_file) {
|
|||||||
echo "</div>";
|
echo "</div>";
|
||||||
echo "</td><td valign='top' class='sidebar'>";
|
echo "</td><td valign='top' class='sidebar'>";
|
||||||
|
|
||||||
debug($view,$view['Pathname']);
|
r($view);
|
||||||
|
|
||||||
if ($dirmdls['spotlight']) {
|
if ($dirmdls['spotlight']) {
|
||||||
$dirmdls['spotlight'] = $parser->parseString(utf8_for_xml($dirmdls['spotlight']));
|
$dirmdls['spotlight'] = $parser->parseString(utf8_for_xml($dirmdls['spotlight']));
|
||||||
debug(array($dirmdls),"mdls");
|
r($dirmdls);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "</td></tr></table>";
|
echo "</td></tr></table>";
|
||||||
|
|||||||
Reference in New Issue
Block a user