Browse Source

实现基本搜索功能。

oldj 10 years ago
parent
commit
78ba2cdaa8

+ 4 - 132
app/SH3/MacGap/Base.lproj/MainMenu.xib

@@ -125,6 +125,9 @@
                                 </connections>
                             </menuItem>
                             <menuItem title="Delete" id="pa3-QI-u2k">
+                                <string key="keyEquivalent" base64-UTF8="YES">
+CA
+</string>
                                 <modifierMask key="keyEquivalentModifierMask"/>
                                 <connections>
                                     <action selector="delete:" target="-1" id="0Mk-Ml-PaM"/>
@@ -136,138 +139,7 @@
                                 </connections>
                             </menuItem>
                             <menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
-                            <menuItem title="Find" id="4EN-yA-p0u">
-                                <modifierMask key="keyEquivalentModifierMask"/>
-                                <menu key="submenu" title="Find" id="1b7-l0-nxx">
-                                    <items>
-                                        <menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
-                                            <connections>
-                                                <action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
-                                            <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
-                                            <connections>
-                                                <action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
-                                            <connections>
-                                                <action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
-                                            <connections>
-                                                <action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
-                                            <connections>
-                                                <action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
-                                            <connections>
-                                                <action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/>
-                                            </connections>
-                                        </menuItem>
-                                    </items>
-                                </menu>
-                            </menuItem>
-                            <menuItem title="Substitutions" id="9ic-FL-obx">
-                                <modifierMask key="keyEquivalentModifierMask"/>
-                                <menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
-                                    <items>
-                                        <menuItem title="Show Substitutions" id="z6F-FW-3nz">
-                                            <modifierMask key="keyEquivalentModifierMask"/>
-                                            <connections>
-                                                <action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
-                                        <menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
-                                            <modifierMask key="keyEquivalentModifierMask"/>
-                                            <connections>
-                                                <action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Smart Quotes" id="hQb-2v-fYv">
-                                            <modifierMask key="keyEquivalentModifierMask"/>
-                                            <connections>
-                                                <action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Smart Dashes" id="rgM-f4-ycn">
-                                            <modifierMask key="keyEquivalentModifierMask"/>
-                                            <connections>
-                                                <action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Smart Links" id="cwL-P1-jid">
-                                            <modifierMask key="keyEquivalentModifierMask"/>
-                                            <connections>
-                                                <action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Data Detectors" id="tRr-pd-1PS">
-                                            <modifierMask key="keyEquivalentModifierMask"/>
-                                            <connections>
-                                                <action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Text Replacement" id="HFQ-gK-NFA">
-                                            <modifierMask key="keyEquivalentModifierMask"/>
-                                            <connections>
-                                                <action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/>
-                                            </connections>
-                                        </menuItem>
-                                    </items>
-                                </menu>
-                            </menuItem>
-                            <menuItem title="Transformations" id="2oI-Rn-ZJC">
-                                <modifierMask key="keyEquivalentModifierMask"/>
-                                <menu key="submenu" title="Transformations" id="c8a-y6-VQd">
-                                    <items>
-                                        <menuItem title="Make Upper Case" id="vmV-6d-7jI">
-                                            <modifierMask key="keyEquivalentModifierMask"/>
-                                            <connections>
-                                                <action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Make Lower Case" id="d9M-CD-aMd">
-                                            <modifierMask key="keyEquivalentModifierMask"/>
-                                            <connections>
-                                                <action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Capitalize" id="UEZ-Bs-lqG">
-                                            <modifierMask key="keyEquivalentModifierMask"/>
-                                            <connections>
-                                                <action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/>
-                                            </connections>
-                                        </menuItem>
-                                    </items>
-                                </menu>
-                            </menuItem>
-                            <menuItem title="Speech" id="xrE-MZ-jX0">
-                                <modifierMask key="keyEquivalentModifierMask"/>
-                                <menu key="submenu" title="Speech" id="3rS-ZA-NoH">
-                                    <items>
-                                        <menuItem title="Start Speaking" id="Ynk-f8-cLZ">
-                                            <modifierMask key="keyEquivalentModifierMask"/>
-                                            <connections>
-                                                <action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/>
-                                            </connections>
-                                        </menuItem>
-                                        <menuItem title="Stop Speaking" id="Oyz-dy-DGm">
-                                            <modifierMask key="keyEquivalentModifierMask"/>
-                                            <connections>
-                                                <action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/>
-                                            </connections>
-                                        </menuItem>
-                                    </items>
-                                </menu>
-                            </menuItem>
+                            <menuItem title="Find" keyEquivalent="f" id="4EN-yA-p0u"/>
                         </items>
                     </menu>
                 </menuItem>

+ 1 - 1
app/SH3/MacGap/SwitchHosts!-Info.plist

@@ -21,7 +21,7 @@
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>2803</string>
+	<string>2829</string>
 	<key>LSApplicationCategoryType</key>
 	<string>public.app-category.developer-tools</string>
 	<key>LSMinimumSystemVersion</key>

+ 8 - 1
app/SH3/public/css/iconfont/iconfont.css

@@ -19,8 +19,12 @@
 .icon-icon:before { content: "\e600"; }
 .icon-warnfill:before { content: "\e607"; }
 .icon-warn:before { content: "\e608"; }
+.icon-shuaxin1:before { content: "\e616"; }
+.icon-ok:before { content: "\e604"; }
+.icon-h:before { content: "\e617"; }
 .icon-off:before { content: "\e613"; }
 .icon-on:before { content: "\e614"; }
+.icon-search:before { content: "\e61c"; }
 .icon-edit:before { content: "\e609"; }
 .icon-info:before { content: "\e601"; }
 .icon-add-s:before { content: "\e612"; }
@@ -29,11 +33,14 @@
 .icon-movedown:before { content: "\e60a"; }
 .icon-moveup:before { content: "\e60b"; }
 .icon-add:before { content: "\e60c"; }
-.icon-folder:before { content: "\e604"; }
+.icon-folder:before { content: "\e618"; }
+.icon-files:before { content: "\e619"; }
 .icon-timescircle:before { content: "\e60e"; }
+.icon-earth:before { content: "\e61a"; }
 .icon-move:before { content: "\e60f"; }
 .icon-delete:before { content: "\e610"; }
 .icon-doc:before { content: "\e606"; }
 .icon-line:before { content: "\e611"; }
+.icon-file-box:before { content: "\e61b"; }
 .icon-switchon:before { content: "\e615"; }
 .icon-sysserver:before { content: "\e605"; }

BIN
app/SH3/public/css/iconfont/iconfont.eot


+ 30 - 3
app/SH3/public/css/iconfont/iconfont.svg

@@ -2,7 +2,7 @@
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
 <svg xmlns="http://www.w3.org/2000/svg">
 <metadata>
-Created by FontForge 20120731 at Thu Nov 26 19:05:35 2015
+Created by FontForge 20120731 at Sun Dec 27 20:06:29 2015
  By Ads
 </metadata>
 <defs>
@@ -19,7 +19,7 @@ Created by FontForge 20120731 at Thu Nov 26 19:05:35 2015
     bbox="0 -212 1024 896"
     underline-thickness="50"
     underline-position="-100"
-    unicode-range="U+0078-E615"
+    unicode-range="U+0078-E61C"
   />
 <missing-glyph horiz-adv-x="374" 
 d="M34 0v682h272v-682h-272zM68 34h204v614h-204v-614z" />
@@ -48,7 +48,8 @@ t-9.5 6.5t-11.5 2.5zM929 502h-179q-12 0 -21 -9t-9 -21v-179q0 -8 4 -15t11 -11t15
 h-179q-12 0 -21 -9t-9 -21v-179q0 -13 9 -21.5t21 -8.5h179q6 0 11.5 2.5t9.5 6.5t6.5 9.5t2.5 11.5v179q0 6 -2.5 11.5t-6.5 9.5t-9.5 6.5t-11.5 2.5zM929 174h-179q-8 0 -15 -4t-11 -11t-4 -15v-179q0 -13 9 -21.5t21 -8.5h179q12 0 21 8.5t9 21.5v179q0 12 -9 21t-21 9z
 M273 174h-179q-6 0 -11.5 -2.5t-9.5 -6.5t-6.5 -9.5t-2.5 -11.5v-179q0 -8 4 -15t11 -11t15 -4h179q12 0 21 8.5t9 21.5v179q0 8 -4 15t-11 11t-15 4z" />
     <glyph glyph-name="uniE604" unicode="&#xe604;" 
-d="M988 430v-402q0 -53 -37.5 -90.5t-90.5 -37.5h-694q-53 0 -90.5 37.5t-37.5 90.5v548q0 26 9.5 48.5t28.5 41.5q37 38 90 38h183q52 0 89.5 -38t37.5 -90v-19h384q26 0 49 -9t41 -28q38 -38 38 -90z" />
+d="M512 709q-56 0 -109 -14.5t-98 -41t-82.5 -64t-64 -82.5t-41 -98t-14.5 -109q0 -111 54.5 -205.5t149 -149t205.5 -54.5t205.5 54.5t149 149t54.5 205.5t-54.5 205.5t-149 149t-205.5 54.5zM376 253q0 -1 5 -6l9 -9q4 -4 10 -7.5t10 -3.5q16 0 109 104l138 158q4 5 7 6.5
+t8 2.5q5 0 11.5 -2t9.5 -5l45 -44q7 -8 8 -18q0 -6 -2 -10.5t-5 -8.5l-250 -264l-53 -57q-3 -3 -8 -5.5t-10 -2.5q-3 0 -6.5 1t-6.5 2.5t-5 3.5l-151 142q-2 2 -3.5 4t-2.5 4t-1.5 4.5t-0.5 5.5q-1 11 7 19l35 37q7 8 18 8.5t19 -7.5z" />
     <glyph glyph-name="uniE605" unicode="&#xe605;" 
 d="M515 145q-36 0 -71 -12t-64 -41t-36 -69h338q-5 53 -57 87.5t-110 34.5zM955 157q-3 265 0 528q0 34 -12.5 47t-46.5 13q-45 -1 -384 -1t-390 1q-28 0 -40.5 -11t-12.5 -39q1 -231 0 -544q0 -18 4.5 -29.5t16 -17.5t30.5 -5q35 1 107 0.5t107 0.5q25 1 48 17
 q56 40 115.5 45t116.5 -28q63 -37 150 -35q94 2 132 0q33 -2 46 11t13 47zM892 213h-760v456h760v-456z" />
@@ -107,5 +108,31 @@ d="M832 896h-640q-80 0 -136 -56t-56 -136v-640q0 -79 56 -135.5t136 -56.5h640q79 0
 t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5zM704 64q0 -27 -18.5 -45.5t-45.5 -18.5h-256q-27 0 -45.5 18.5t-18.5 45.5v640q0 26 19 45t45 19h256q27 0 45.5 -18.5t18.5 -45.5v-640zM864 0q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5
 t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5zM864 704q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5t22.5 -9.5t9.5 -22.5t-9.5 -22.5t-22.5 -9.5zM576 704h-128q-26 0 -45 -19t-19 -45v-192q0 -26 19 -45t45 -19h128q27 0 45.5 18.5t18.5 45.5v192q0 27 -18.5 45.5
 t-45.5 18.5z" />
+    <glyph glyph-name="uniE616" unicode="&#xe616;" 
+d="M504 -67q-97 0 -179.5 48t-130.5 130.5t-48 179.5q0 110 62 201l93 -93v245h-246l92 -92q-85 -116 -85 -261q0 -90 35 -171.5t94.5 -141t141 -94.5t171.5 -35q85 0 163 31l-50 71q-55 -18 -113 -18zM720 193v-246h246l-96 96q76 112 76 248q0 72 -22 139.5t-63 122
+t-95.5 95.5t-122 63t-139.5 22q-70 0 -136 -21l52 -73q41 10 84 10q98 0 180.5 -47.5t130 -130t47.5 -180.5q0 -101 -52 -187z" />
+    <glyph glyph-name="uniE617" unicode="&#xe617;" 
+d="M512 802q-104 0 -192.5 -51.5t-140 -140t-51.5 -193t51.5 -193t140 -140t192.5 -51.5t192.5 51.5t140 140t51.5 193t-51.5 193t-140 140t-192.5 51.5zM660 214h-50v175h-196v-175h-50v395h50v-179h196v179h50v-395z" />
+    <glyph glyph-name="uniE618" unicode="&#xe618;" 
+d="M961 640q0 40 -28.5 68t-67.5 28h-186h-1h-1q-3 -1 -5.5 -1.5t-4.5 -0.5l-1 -1h-1q-2 -2 -4.5 -3t-3.5 -3q-12 -11 -19.5 -31.5t-15.5 -56.5q-3 -12 -4 -14q-4 -17 -27 -17h-7h-8h-416q-40 0 -68 -28.5t-28 -69.5l32 -414q0 -40 28 -68t68 -28h640q40 0 68 28t28 66z
+M864 96q0 -13 -9.5 -22.5t-22.5 -9.5h-640q-9 0 -16 4.5t-11.5 12.5t-4.5 17l-32 414q0 13 9.5 22.5t22.5 9.5h416h8h7q35 0 58.5 17t30.5 48q1 2 2 6t2 9q8 34 13 48h168q13 0 22.5 -9.5t9.5 -22.5v-2v-1zM128 672h416q13 0 22.5 9.5t9.5 22.5t-9.5 22.5t-22.5 9.5h-416
+q-13 0 -22.5 -9.5t-9.5 -22.5t9.5 -22.5t22.5 -9.5z" />
+    <glyph glyph-name="uniE619" unicode="&#xe619;" 
+d="M521 194l-376 247l-50 -52l426 -291l426 291l-51 53zM947 550l-426 291l-426 -291l426 -291zM521 756l302 -206l-302 -207l-302 207zM521 33l-376 248l-50 -52l426 -291l426 291l-51 53z" />
+    <glyph glyph-name="uniE61A" unicode="&#xe61a;" 
+d="M874 662q-48 48 -106 81.5t-123 51t-133 17.5q-103 0 -196 -38.5t-166 -111.5q-36 -36 -64 -78t-47 -88t-29 -95.5t-10 -100.5q0 -103 38.5 -196t111.5 -166q24 -24 51 -44.5t55.5 -37.5t59.5 -29.5t63 -21t65.5 -13t67.5 -4.5q68 0 133 17.5t123 51t106 81.5
+q73 73 111.5 166t38.5 196q0 51 -10 100.5t-29 95.5t-47 88t-64 78zM942 466q-5 8 -16 15.5t-21 11t-31 11.5q-16 5 -28.5 20t-18.5 28.5t-15 41.5q-6 18 -10 27.5t-11 24.5t-15.5 25.5t-19.5 19.5q130 -83 186 -225zM798 290q2 -19 2.5 -35.5t-8.5 -38.5t-29 -45
+q-2 -2 -4.5 -5.5t-4.5 -6.5t-4 -7t-3 -7t-3 -8t-3.5 -8t-3.5 -8q-8 -22 -13.5 -33.5t-16.5 -26t-28 -21t-41 -6.5q-7 8 -12 37q-4 24 -10 90q-8 111 -21 160q-25 92 -84 112q-26 9 -55 9q-14 0 -39 -3q-17 -2 -24 -2q-5 0 -7.5 0.5t-7.5 2.5t-8.5 5.5t-8.5 11t-10 18.5
+q-11 30 -10 63.5t20.5 69t53.5 57.5q55 37 89 37q27 0 69 -23q23 -12 42.5 -16t38.5 -4h10q5 0 12 1h16q9 0 16 -1.5t15 -7.5q13 -9 21.5 -26t19.5 -48q8 -24 13.5 -37.5t16.5 -33t27 -32t37 -19.5q22 -8 31 -11q-9 -9 -36 -34q-21 -18 -30 -27q-15 -13 -21.5 -30t-5.5 -32
+t2 -31zM51 304q8 -1 18 -3q34 -8 48 -15q-3 -6 -12 -18q-28 -41 -22 -65q2 -14 0.5 -27.5t-6.5 -28.5q-8 24 -14 49t-9 51t-3 53v2v2zM512 -161q-129 0 -238 66.5t-168 176.5q40 76 27 132q0 5 14 24q6 8 9 12.5t7 13t5.5 14.5t1 14.5t-4.5 15.5q-12 26 -80 41q-13 3 -31 6
+q14 113 78 206t164 146.5t216 53.5q119 0 223 -58q-6 3 -12 4.5t-11.5 2.5t-9.5 1h-10h-19q-13 -1 -19 -1q-9 0 -16 1t-18.5 4.5t-22.5 9.5q-53 28 -93 28q-49 0 -117 -45q-31 -20 -53.5 -50.5t-34.5 -66.5q-23 -73 5 -136q30 -69 89 -69h7q4 0 8.5 0.5t7 1t7.5 0.5
+q22 3 33 3q10 0 19.5 -1.5t18.5 -4.5q34 -11 51 -77q12 -44 20 -151q6 -80 13 -110q6 -26 17 -41q16 -24 41 -24q34 0 61 11t47 33q10 11 18.5 26t12.5 24.5t10 26.5q11 28 16 34q27 30 39.5 61.5t11 53.5t-2.5 44q-3 21 -1.5 31.5t9.5 18.5q4 3 7 5.5t6 5.5t6 5.5t5.5 5
+t5.5 4.5q32 29 41 39q22 24 18 44v1q27 -75 27 -156q0 -94 -36.5 -179t-98.5 -147t-147.5 -98.5t-178.5 -36.5z" />
+    <glyph glyph-name="uniE61B" unicode="&#xe61b;" 
+d="M804 770l50 -431l-57 -7l-45 386h-480l-45 -386l-57 7l50 431h584zM319 674h386v-48h-386v48zM319 577h386v-48h-386v48zM319 481h386v-49h-386v49zM319 384h386v-48h-386v48zM874 287h-724q-7 0 -11.5 -3t-6 -8t0.5 -11l82 -244q3 -10 12 -16.5t19 -6.5h532q10 0 19 6.5
+t12 16.5l82 244q7 22 -17 22zM609 191h-194v48h194v-48z" />
+    <glyph glyph-name="uniE61C" unicode="&#xe61c;" 
+d="M995 3l-272 227q-1 1 -2 1.5t-4 2.5q37 79 37 160q0 82 -34.5 158t-99.5 131q-105 89 -243 89q-82 0 -158 -35t-131 -100q-43 -52 -65.5 -114.5t-22.5 -128.5q0 -82 34.5 -158.5t100.5 -131.5q105 -88 241 -88h1q121 0 221 72q1 0 2 -2l1 -1l272 -227q10 -9 23 -14
+t26.5 -5t26.5 3.5t25 11t21 19.5l6 7q24 28 22 64.5t-28 58.5zM585 219q-40 -47 -94.5 -72t-113.5 -25q-98 1 -174 64q-47 39 -72 94t-25 114q0 99 64 174q39 48 93.5 72.5t113.5 24.5q99 0 174 -63q47 -40 72 -94.5t25 -113.5q0 -99 -63 -175z" />
   </font>
 </defs></svg>

BIN
app/SH3/public/css/iconfont/iconfont.ttf


BIN
app/SH3/public/css/iconfont/iconfont.woff


+ 26 - 1
app/SH3/public/css/style.css

@@ -47,12 +47,13 @@ a:hover {
   left: 0;
   bottom: 0;
   width: 240px;
-  hegith: 20px;
+  background: #373d47;
 }
 #left .operations ul {
   list-style: none;
   margin: 0;
   padding: 0 18px 0 10px;
+  line-height: 24px;
 }
 #left .operations ul li {
   float: left;
@@ -71,6 +72,30 @@ a:hover {
 #left .operations ul li.right {
   float: right;
 }
+#search-bar {
+  height: 30px;
+  line-height: 30px;
+  background: #424955;
+  padding: 0 18px 0 18px;
+  box-shadow: 0 -1px 0 1px #343a43;
+}
+#search-bar input {
+  width: 100%;
+  height: 24px;
+  padding: 0;
+  background: transparent;
+  border: none;
+  outline: none;
+  color: #fff;
+  font-family: Menlo;
+}
+#btn-toggle-search {
+  padding: 0 4px;
+  margin-right: 10px;
+}
+#btn-toggle-search.active {
+  background: #424955;
+}
 #body {
   position: fixed;
   background: #ffc;

+ 27 - 1
app/SH3/public/css/style.styl

@@ -61,13 +61,15 @@ unselectable()
     left 0
     bottom 0
     width left_width px
-    hegith 20px
+    //hegith 20px
     //border-top solid 1px (bg_left * 0.9)
+    background bg_left
 
     ul
       list-style none
       margin 0
       padding 0 18px 0 10px
+      line-height 24px
 
       li
         float left
@@ -91,6 +93,30 @@ unselectable()
     //a
     //  color #fff
 
+  #search-bar
+    //display none
+    height 30px
+    line-height @height
+    background bg_left * 1.2
+    padding 0 18px 0 18px
+    //border-top solid 1px (bg_left * 0.9)
+    box-shadow 0 -1px 0 1px (bg_left * 0.95)
+
+    input
+      width 100%
+      height 24px
+      padding 0
+      background transparent
+      border none
+      outline none
+      color #fff
+      font-family Menlo
+
+  #btn-toggle-search
+    padding 0 4px
+    margin-right 10px
+  #btn-toggle-search.active
+    background bg_left * 1.2
 
 #body
   position fixed

+ 7 - 1
app/SH3/public/index.html

@@ -21,7 +21,7 @@
 			</ul>
 			<ul id="custom-list">
 				<li v-cloak
-					v-for="host in hosts.list"
+					v-for="host in hosts.list | filterBy mySearch"
 					@click="selectHost(host)"
 					v-draggable="{index: $index, dragged: 'dragged'}"
 					v-dropzone="sort(hosts.list, $index, $droptag, $dropdata)"
@@ -35,6 +35,9 @@
 			</ul>
 		</div>
 		<div class="operations">
+			<div id="search-bar" v-show="is_search_bar_show" v-cloak>
+				<input type="text" v-model="search_keyword" placeholder="keyword" maxlength="256">
+			</div>
 			<ul>
 				<li>
 					<a href="#" @click="add()" title="{{ lang.add_host }}"><i class="iconfont icon-add-s"></i></a>
@@ -43,6 +46,9 @@
 					<a href="#" @click="tmpClean()" v-cloak v-if="could_tmp_clean_on" title="{{ lang.tmp_clean }}"><i class="iconfont icon-switchon"></i></a>
 					<a href="#" @click="tmpRecover()" v-cloak v-if="!could_tmp_clean_on" title="{{ lang.tmp_recover }}"><i class="iconfont icon-switchoff"></i></a>
 				</li>
+				<li class="right">
+					<a href="#" id="btn-toggle-search" @click="toggleSearch()" :class="{active:is_search_bar_show}"><i class="iconfont icon-search"></i></a>
+				</li>
 			</ul>
 		</div>
 	</div>

File diff suppressed because it is too large
+ 0 - 0
app/SH3/public/js/main.js


+ 29 - 1
app/src/main.js

@@ -23,6 +23,8 @@ var app = new Vue({
         is_prompt_show: false,
         is_edit_show: false,
         is_pswd_show: false,
+        is_search_bar_show: false,
+        search_keyword: '',
         current_host: {
             content: agent.getSysHosts(),
             is_sys: true,
@@ -353,6 +355,30 @@ var app = new Vue({
         remove: function (from, tag, data) {
             from.splice(data.index, 1);
         },
+
+        toggleSearch: function () {
+            var el_bar = $("#search-bar");
+            this.is_search_bar_show = !this.is_search_bar_show;
+            if (this.is_search_bar_show) {
+                setTimeout(function () {
+                    ui.resize();
+                    el_bar.find('input').focus();
+                }, 100);
+            } else {
+                this.search_keyword = '';
+                setTimeout(function () {
+                    ui.resize();
+                }, 100);
+            }
+        },
+
+        mySearch: function (item) {
+            if (!this.search_keyword) return true;
+
+            return item.title.indexOf(this.search_keyword) > -1 ||
+                item.content.indexOf(this.search_keyword) > -1;
+        },
+
         log: function (obj) {
             console.log(obj);
             return 1;
@@ -360,8 +386,10 @@ var app = new Vue({
     }
 });
 
+
 require('./menu').initMenu(app);
 tray_obj = require('./menu').initTray(app);
 tray_obj.updateTrayMenu(app.hosts);
 
-require('./ui').init(app);
+var ui = require('./ui');
+ui.init(app);

+ 10 - 0
app/src/menu.js

@@ -9,6 +9,7 @@ var config = require('./config');
 var agent = require('./agent');
 var ie = require('./ie');
 var lang = require('./lang').getLang(navigator.language);
+var ui = require('./ui');
 
 var key_name = 'is_dock_icon_hidden';
 var is_dock_icon_hidden = agent.getPreference(key_name);
@@ -148,6 +149,15 @@ function initMenu(app) {
         });
     };
 
+    // Edit
+    menu = MacGap.Menu.getItem('Edit').submenu;
+    menu.getItem('Find').callback = function () {
+        app.toggleSearch();
+        setTimeout(function () {
+            ui.resize();
+        }, 100);
+    };
+
     if (is_dock_icon_hidden) {
         MacGap.Dock.hideIcon();
     } else {

+ 10 - 7
app/src/ui.js

@@ -9,17 +9,19 @@ var CodeMirror = require('codemirror');
 require('codemirror/mode/shell/shell');
 require('./cm_hl');
 
+var my_codemirror;
+
+function resize() {
+    var wh = window.innerHeight;
+    var oh = $('#left').find('.operations').height();
+    var h = wh - $('#sys-list').height() - oh;
+    $('#custom-list').css('height', h);
+    my_codemirror && my_codemirror.setSize('100%', wh);
+}
 
 function init(app) {
 
-    var my_codemirror;
 
-    function resize() {
-        var wh = window.innerHeight;
-        var h = wh - $('#sys-list').height() - 20;
-        $('#custom-list').css('height', h);
-        my_codemirror.setSize('100%', wh);
-    }
 
     $(document).ready(function () {
         var el_textarea = $('#host-code');
@@ -60,3 +62,4 @@ function init(app) {
 }
 
 exports.init = init;
+exports.resize = resize;

Some files were not shown because too many files changed in this diff